wireshark/ui/qt/models/decode_as_delegate.h
Michael Mann d992e85fe8 Refactor Decode As dialog to use a model/delegate
The model provides a lot more flexibility and abstracting the
data from the view (dialog)

Noticeable changes from user perspective:
1. Value column doesn't always have a combobox.  If registered decode as
structure doesn't support multiple values, a simple edit box is used.
2. Existing value will always be a choice (default) in the Value combobox.
3. Duplicate values in Value combobox have been removed (for things like
UDP port where source port and dest. port are same)
4. When adding/copying a decode as item, only first column (table) is
editable, not the whole column.
5. Separator always present in Current protocol column to distinguish
"none" from rest of protocols.
6. "Current" protocol defaults to "default value" when first added to the
list instead of "none".

Noticeable changes from developer perspective:
1. Code is much more spread out, but most new additions (like DCE/RPC support)
should be limited to the model class (maybe delegate).  The dialog class
probably won't change much anymore.
2. decode_as_dialog.ui is much less useful because information is provided through
model and delegate.

Change-Id: I70a667cab2c07d251ab370430bc51e5c1f4a3a02
Reviewed-on: https://code.wireshark.org/review/22625
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
2017-09-16 11:11:50 +00:00

72 lines
2.4 KiB
C++

/* decode_as_delegate.h
* Delegates for editing various field types in a Decode As record.
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef DECODE_AS_DELEGATE_H
#define DECODE_AS_DELEGATE_H
#include <config.h>
#include <glib.h>
#include "cfile.h"
#include <QStyledItemDelegate>
#include <QSet>
#include <QList>
#include <ui/qt/models/decode_as_model.h>
typedef struct _packet_proto_data_t {
const gchar* proto_name;
const gchar* table_ui_name;
guint8 curr_layer_num;
} packet_proto_data_t;
class DecodeAsDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
DecodeAsDelegate(QObject *parent = 0, capture_file *cf = NULL);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
#if 0
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
#endif
private:
DecodeAsItem *indexToField(const QModelIndex &index) const;
void collectDAProtocols(QSet<QString>& all_protocols, QList<QString>& current_list) const;
void cachePacketProtocols();
bool isSelectorCombo(DecodeAsItem* item) const;
static void decodeAddProtocol(const gchar *table_name, const gchar *proto_name, gpointer value, gpointer user_data);
capture_file *cap_file_;
QList<packet_proto_data_t> packet_proto_list_;
};
#endif // DECODE_AS_DELEGATE_H