diff options
author | Roland Knall <rknall@gmail.com> | 2019-11-04 10:37:51 +0000 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2019-11-04 13:09:52 +0000 |
commit | a8052b9f3816656e9a1cf809308bd7bfedbe89cd (patch) | |
tree | 7f4d99c8a357b84b9ea5afb4041cf705d04ff313 | |
parent | 6fbb1d5c665bf7d6bcc4308021d08fb83c17f3d9 (diff) |
Qt: Coloringrules Mime is encoded as JSON
Encode coloring rules as json objects to avoid encoding issues
Change-Id: I4b5369fef3c0f9e73cbb08edf14de6535ff35026
Reviewed-on: https://code.wireshark.org/review/34947
Petri-Dish: Roland Knall <rknall@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Roland Knall <rknall@gmail.com>
-rw-r--r-- | docbook/wsdg_src/WSDG_chapter_sources.adoc | 41 | ||||
-rw-r--r-- | ui/qt/models/coloring_rules_model.cpp | 68 |
2 files changed, 58 insertions, 51 deletions
diff --git a/docbook/wsdg_src/WSDG_chapter_sources.adoc b/docbook/wsdg_src/WSDG_chapter_sources.adoc index 5a82d337e5..71f1da99d5 100644 --- a/docbook/wsdg_src/WSDG_chapter_sources.adoc +++ b/docbook/wsdg_src/WSDG_chapter_sources.adoc @@ -1405,32 +1405,21 @@ Display filters are being dragged and dropped by utilizing this mime type. 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 -|=== +[source,json] +---- +{ + "coloringrules" : + [ + { + "disabled": false, + "name": "UDP Ports for 8080", + "filter": "udp.port == 8080", + "foreground": "[0x0000, 0x0000, 0x0000]", + "background": "[0xFFFF, 0xFFFF, 0xFFFF]" + } + ] +} +---- ==== Filter List diff --git a/ui/qt/models/coloring_rules_model.cpp b/ui/qt/models/coloring_rules_model.cpp index f0dd32c430..7d574a2d26 100644 --- a/ui/qt/models/coloring_rules_model.cpp +++ b/ui/qt/models/coloring_rules_model.cpp @@ -21,6 +21,9 @@ #include <ui/qt/utils/wireshark_mime_data.h> #include <QMimeData> +#include <QJsonDocument> +#include <QJsonObject> +#include <QJsonArray> ColoringRuleItem::ColoringRuleItem(bool disabled, QString name, QString filter, QColor foreground, QColor background, ColoringRuleItem* parent) : ModelHelperTreeItem<ColoringRuleItem>(parent), @@ -383,7 +386,7 @@ QVariant ColoringRulesModel::headerData(int section, Qt::Orientation orientation Qt::DropActions ColoringRulesModel::supportedDropActions() const { - return Qt::MoveAction; + return Qt::MoveAction | Qt::CopyAction; } QStringList ColoringRulesModel::mimeTypes() const @@ -398,20 +401,27 @@ QMimeData* ColoringRulesModel::mimeData(const QModelIndexList &indexes) const return NULL; QMimeData *mimeData = new QMimeData(); - QByteArray encodedData; - QDataStream stream(&encodedData, QIODevice::WriteOnly); - - foreach (const QModelIndex &index, indexes) { - //use first column as "filter" - if (index.column() == 0) { - //Retrieve "native" data to save lots of conversions in the process - ColoringRuleItem* item = root_->child(index.row()); - - stream << item->disabled_ << item->name_ << item->filter_ << item->foreground_ << item->background_; + QJsonArray data; + foreach ( const QModelIndex & index, indexes ) + { + if ( index.column() == 0 ) + { + ColoringRuleItem * item = root_->child(index.row()); + QJsonObject entry; + entry["disabled"] = item->disabled_; + entry["name"] = item->name_; + entry["filter"] = item->filter_; + entry["foreground"] = qVariantFromValue(item->foreground_).toString(); + entry["background"] = qVariantFromValue(item->background_).toString(); + data.append(entry); } } + QJsonObject dataSet; + dataSet["coloringrules"] = data; + QByteArray encodedData = QJsonDocument(dataSet).toJson(); + mimeData->setData(WiresharkMimeData::ColoringRulesMimeType, encodedData); return mimeData; } @@ -436,27 +446,35 @@ bool ColoringRulesModel::dropMimeData(const QMimeData *data, Qt::DropAction acti else beginRow = rowCount(); - bool disabled; - QString name; - QString filter; - QColor foreground; - QColor background; - ColoringRuleItem* item; QList<QVariant> rules; - QByteArray encodedData = data->data(WiresharkMimeData::ColoringRulesMimeType); - QDataStream stream(&encodedData, QIODevice::ReadOnly); - int rows = 0; + QJsonDocument encodedData = QJsonDocument::fromJson(data->data(WiresharkMimeData::ColoringRulesMimeType)); + if ( ! encodedData.isObject() || ! encodedData.object().contains("coloringrules") ) + return false; + + QJsonArray dataArray = encodedData.object()["coloringrules"].toArray(); + + for ( int row = 0; row < dataArray.count(); row++ ) + { + QJsonObject entry = dataArray.at(row).toObject(); + + if ( ! entry.contains("foreground") || ! entry.contains("background") || ! entry.contains("filter") ) + continue; - while (!stream.atEnd()) { - stream >> disabled >> name >> filter >> foreground >> background; + QColor fgColor = entry["foreground"].toVariant().value<QColor>(); + QColor bgColor = entry["background"].toVariant().value<QColor>(); - item = new ColoringRuleItem(disabled, name, filter, foreground, background, root_); + ColoringRuleItem * item = new ColoringRuleItem( + entry["disabled"].toVariant().toBool(), + entry["name"].toString(), + entry["filter"].toString(), + fgColor, + bgColor, + root_); rules.append(VariantPointer<ColoringRuleItem>::asQVariant(item)); - ++rows; } - insertRows(beginRow, rows, QModelIndex()); + insertRows(beginRow, rules.count(), QModelIndex()); for (int i = 0; i < rules.count(); i++) { QModelIndex idx = index(beginRow, 0, QModelIndex()); setData(idx, rules[i], Qt::UserRole); |