From accd563aaf3f26ea20f30397515fbeb6d818d2f0 Mon Sep 17 00:00:00 2001 From: Roland Knall Date: Sun, 3 Nov 2019 12:03:12 +0000 Subject: [PATCH] Qt: Consolidate mimedata usage Ensure, that all mimedata uses similar mimetypes and document the mimetypes being used throughout wireshark Change-Id: I7c02d0a5e12a823153640e600051abb95d58cdeb Reviewed-on: https://code.wireshark.org/review/34923 Petri-Dish: Roland Knall Reviewed-by: Peter Wu Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall --- docbook/wsdg_src/WSDG_chapter_sources.adoc | 67 ++++++++++++++++++++++ ui/qt/models/coloring_rules_model.cpp | 23 +++----- ui/qt/models/column_list_model.cpp | 12 +++- ui/qt/models/column_list_model.h | 1 + ui/qt/models/filter_list_model.cpp | 9 +-- ui/qt/utils/wireshark_mime_data.cpp | 4 ++ ui/qt/utils/wireshark_mime_data.h | 4 ++ 7 files changed, 97 insertions(+), 23 deletions(-) diff --git a/docbook/wsdg_src/WSDG_chapter_sources.adoc b/docbook/wsdg_src/WSDG_chapter_sources.adoc index 3ad7966e1a..80c121b205 100644 --- a/docbook/wsdg_src/WSDG_chapter_sources.adoc +++ b/docbook/wsdg_src/WSDG_chapter_sources.adoc @@ -1363,6 +1363,73 @@ If everything went well, you will now find something like: _WiresharkPortable_{wireshark-version}.paf.exe_ in the _packaging/portableapps_ directory. + +[[ChSrcVersioning]] + +==== Packaging Guidelines + +The following guidelines should be followed by anyone creating and +distributing third-party Wireshark packages or redistributing official +Wireshark packages. + + +[[ChSrcMimeTypes]] + +=== Mime Types + +Wireshark uses various mime-types for dragging dropping as well as file formats. +This chapter gives an overview over all the mimetypes being used, as well as the +data format in which data has to be provided for each individual mimetype. + +==== Coloring Rules + +**MimeType**: application/vnd.wireshark.coloringrules + +Coloring Rules are being used for dragging and dropping color rules inside the +coloring rules dialog. + +[cols="1,3,1", options="header"] +|=== +|Name +|Description +|Qt/C++ Type + +|disabled +|Is the coloring rule enabled/disabled +|bool + +|name +|Name to be displayed for it +|QString + +|filter +|The display filter +|QString + +|foreground +|Foreground Color +|QColor + +|background +|Background Color +|QColor +|=== + +==== Filter List + +**MimeType**: application/vnd.wireshark.filterlist + +*_Internal Use only_* - used on the filter list for moving entries within the +list + +==== Column List + +**MimeType**: application/vnd.wireshark.columnlist + +*_Internal Use only_* - used on the column list for moving entries within the +list + + // End of WSDG Chapter Sources // vim: set syntax=asciidoc: diff --git a/ui/qt/models/coloring_rules_model.cpp b/ui/qt/models/coloring_rules_model.cpp index fa7a5ff6d5..f0dd32c430 100644 --- a/ui/qt/models/coloring_rules_model.cpp +++ b/ui/qt/models/coloring_rules_model.cpp @@ -18,13 +18,10 @@ #include #include #include +#include #include - -static const QString new_rule_name_ = QObject::tr("New coloring rule"); -static const QString color_rule_mime_type_ = "application/x-wireshark-coloring-rules"; - ColoringRuleItem::ColoringRuleItem(bool disabled, QString name, QString filter, QColor foreground, QColor background, ColoringRuleItem* parent) : ModelHelperTreeItem(parent), disabled_(disabled), @@ -129,7 +126,7 @@ void ColoringRulesModel::addColor(bool disabled, QString filter, QColor foregrou { //add rule to top of the list beginInsertRows(QModelIndex(), 0, 0); - ColoringRuleItem* item = new ColoringRuleItem(disabled, new_rule_name_, filter, foreground, background, root_); + ColoringRuleItem* item = new ColoringRuleItem(disabled, tr("New coloring rule"), filter, foreground, background, root_); root_->prependChild(item); endInsertRows(); } @@ -190,7 +187,7 @@ bool ColoringRulesModel::insertRows(int row, int count, const QModelIndex& paren for (int i = row; i < row + count; i++) { - ColoringRuleItem* item = new ColoringRuleItem(true, new_rule_name_, "", defaultForeground_, defaultBackground_, root_); + ColoringRuleItem* item = new ColoringRuleItem(true, tr("New coloring rule"), "", defaultForeground_, defaultBackground_, root_); root_->insertChild(i, item); } @@ -391,10 +388,7 @@ Qt::DropActions ColoringRulesModel::supportedDropActions() const QStringList ColoringRulesModel::mimeTypes() const { - //Just use plain text to transport data - QStringList types; - types << color_rule_mime_type_; - return types; + return QStringList() << WiresharkMimeData::ColoringRulesMimeType; } QMimeData* ColoringRulesModel::mimeData(const QModelIndexList &indexes) const @@ -418,7 +412,7 @@ QMimeData* ColoringRulesModel::mimeData(const QModelIndexList &indexes) const } } - mimeData->setData(color_rule_mime_type_, encodedData); + mimeData->setData(WiresharkMimeData::ColoringRulesMimeType, encodedData); return mimeData; } @@ -430,10 +424,7 @@ bool ColoringRulesModel::dropMimeData(const QMimeData *data, Qt::DropAction acti if (action == Qt::IgnoreAction) return true; - if (!data->hasFormat(color_rule_mime_type_)) - return false; - - if (column > 0) + if (!data->hasFormat(WiresharkMimeData::ColoringRulesMimeType) || column > 0) return false; int beginRow; @@ -453,7 +444,7 @@ bool ColoringRulesModel::dropMimeData(const QMimeData *data, Qt::DropAction acti ColoringRuleItem* item; QList rules; - QByteArray encodedData = data->data(color_rule_mime_type_); + QByteArray encodedData = data->data(WiresharkMimeData::ColoringRulesMimeType); QDataStream stream(&encodedData, QIODevice::ReadOnly); int rows = 0; diff --git a/ui/qt/models/column_list_model.cpp b/ui/qt/models/column_list_model.cpp index ae34aea09c..4127e7f241 100644 --- a/ui/qt/models/column_list_model.cpp +++ b/ui/qt/models/column_list_model.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -319,6 +320,11 @@ Qt::ItemFlags ColumnListModel::flags(const QModelIndex &index) const return Qt::ItemIsDropEnabled | defaultFlags; } +QStringList ColumnListModel::mimeTypes() const +{ + return QStringList() << WiresharkMimeData::ColumnListMimeType; +} + QMimeData *ColumnListModel::mimeData(const QModelIndexList &indexes) const { QMimeData *mimeData = new QMimeData; @@ -327,14 +333,14 @@ QMimeData *ColumnListModel::mimeData(const QModelIndexList &indexes) const if ( indexes.count() > 0 ) row = indexes.at(0).row(); - mimeData->setText(QString::number(row)); + mimeData->setData(WiresharkMimeData::ColumnListMimeType, QString::number(row).toUtf8()); return mimeData; } bool ColumnListModel::canDropMimeData(const QMimeData *data, Qt::DropAction /* action */, int /* row */, int /* column */, const QModelIndex &parent) const { - if (parent.isValid() || data->text().isEmpty() ) + if (parent.isValid() || ! data->hasFormat(WiresharkMimeData::ColumnListMimeType) ) return false; return true; @@ -357,7 +363,7 @@ bool ColumnListModel::dropMimeData(const QMimeData *data, moveTo = rowCount(QModelIndex()); bool ok = false; - int moveFrom = data->text().toInt(&ok); + int moveFrom = QString(data->data(WiresharkMimeData::ColumnListMimeType)).toInt(&ok); if ( ! ok ) return false; diff --git a/ui/qt/models/column_list_model.h b/ui/qt/models/column_list_model.h index 9880e7e545..c5df8fe54a 100644 --- a/ui/qt/models/column_list_model.h +++ b/ui/qt/models/column_list_model.h @@ -79,6 +79,7 @@ public: virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual QStringList mimeTypes() const; virtual QMimeData *mimeData(const QModelIndexList &indexes) const; virtual Qt::DropActions supportedDropActions() const; virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; diff --git a/ui/qt/models/filter_list_model.cpp b/ui/qt/models/filter_list_model.cpp index 009d6e44d4..881da9e0b4 100644 --- a/ui/qt/models/filter_list_model.cpp +++ b/ui/qt/models/filter_list_model.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -250,7 +251,7 @@ Qt::DropActions FilterListModel::supportedDropActions() const QStringList FilterListModel::mimeTypes() const { - return QStringList() << "application/vnd.row.list"; + return QStringList() << WiresharkMimeData::FilterListMimeType; } QMimeData *FilterListModel::mimeData(const QModelIndexList &indexes) const @@ -264,7 +265,7 @@ QMimeData *FilterListModel::mimeData(const QModelIndexList &indexes) const rows << QString::number(index.row()); } - mimeData->setData("application/vnd.row.list", rows.join(",").toUtf8()); + mimeData->setData(WiresharkMimeData::FilterListMimeType, rows.join(",").toUtf8()); return mimeData; } @@ -273,10 +274,10 @@ bool FilterListModel::dropMimeData(const QMimeData *data, Qt::DropAction action, if ( action != Qt::MoveAction ) return true; - if ( ! data->hasFormat("application/vnd.row.list") ) + if ( ! data->hasFormat(WiresharkMimeData::FilterListMimeType) ) return true; - QStringList rows = QString(data->data("application/vnd.row.list")).split(","); + QStringList rows = QString(data->data(WiresharkMimeData::FilterListMimeType)).split(","); int insertRow = parent.isValid() ? parent.row() : row; diff --git a/ui/qt/utils/wireshark_mime_data.cpp b/ui/qt/utils/wireshark_mime_data.cpp index f841883eec..4a83c7adf5 100644 --- a/ui/qt/utils/wireshark_mime_data.cpp +++ b/ui/qt/utils/wireshark_mime_data.cpp @@ -9,6 +9,10 @@ #include +const QString WiresharkMimeData::ColoringRulesMimeType = "application/vnd.wireshark.coloringrules"; +const QString WiresharkMimeData::ColumnListMimeType = "application/vnd.wireshark.columnlist"; +const QString WiresharkMimeData::FilterListMimeType = "application/vnd.wireshark.filterlist"; + void WiresharkMimeData::allowPlainText() { setText(labelText()); diff --git a/ui/qt/utils/wireshark_mime_data.h b/ui/qt/utils/wireshark_mime_data.h index 15bdec991c..88eb2c5d98 100644 --- a/ui/qt/utils/wireshark_mime_data.h +++ b/ui/qt/utils/wireshark_mime_data.h @@ -16,6 +16,10 @@ class WiresharkMimeData: public QMimeData { public: virtual QString labelText() const = 0; virtual void allowPlainText(); + + static const QString ColoringRulesMimeType; + static const QString ColumnListMimeType; + static const QString FilterListMimeType; }; class DisplayFilterMimeData: public WiresharkMimeData {