aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/models/decode_as_delegate.h
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-07-14 15:21:37 -0400
committerMichael Mann <mmann78@netscape.net>2017-09-16 11:11:50 +0000
commitd992e85fe8e9192cb730abf8796336d3b6d6fd50 (patch)
tree8dc40c70e01bdf3855f3e6950079bb0e28d622a5 /ui/qt/models/decode_as_delegate.h
parentc98a7363dafdb1a261068a3e7312e66dcdf2c329 (diff)
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>
Diffstat (limited to 'ui/qt/models/decode_as_delegate.h')
-rw-r--r--ui/qt/models/decode_as_delegate.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/ui/qt/models/decode_as_delegate.h b/ui/qt/models/decode_as_delegate.h
new file mode 100644
index 0000000000..50461f00d9
--- /dev/null
+++ b/ui/qt/models/decode_as_delegate.h
@@ -0,0 +1,71 @@
+/* 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