diff options
author | Roland Knall <rknall@gmail.com> | 2017-11-12 11:09:38 +0100 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2017-11-12 10:49:08 +0000 |
commit | 98ca698a3705336a75020e03ba2ec5e6d80e34cc (patch) | |
tree | 08236d57b3dcdc013ba00037f0482e7e296d3273 /ui | |
parent | e95623cd6b46552eb7dd97cfbbb47292ba002fde (diff) |
Qt: Add Modifier to drop only field
Add a modifier to the drag-drop operation, to only drop the field
name as filter, instead of the complete filter expression
Change-Id: I9da96906575397191e821e3494a42e0f10d51f45
Reviewed-on: https://code.wireshark.org/review/24375
Petri-Dish: Roland Knall <rknall@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/qt/proto_tree.cpp | 9 | ||||
-rw-r--r-- | ui/qt/utils/wireshark_mime_data.cpp | 15 | ||||
-rw-r--r-- | ui/qt/utils/wireshark_mime_data.h | 6 | ||||
-rw-r--r-- | ui/qt/widgets/display_filter_edit.cpp | 20 |
4 files changed, 39 insertions, 11 deletions
diff --git a/ui/qt/proto_tree.cpp b/ui/qt/proto_tree.cpp index b1620b4c68..f96c742598 100644 --- a/ui/qt/proto_tree.cpp +++ b/ui/qt/proto_tree.cpp @@ -728,16 +728,17 @@ bool ProtoTree::eventFilter(QObject * obj, QEvent * event) field_info * fi = VariantPointer<field_info>::asPtr(item->data(0, Qt::UserRole)); if ( fi ) { - QString description = QString(fi->hfinfo->name); + QString filter = QString(proto_construct_match_selected_string(fi, cap_file_->edt)); if ( filter.length() > 0 ) { + DisplayFilterMimeData * dfmd = + new DisplayFilterMimeData(QString(fi->hfinfo->name), QString(fi->hfinfo->abbrev), filter); QDrag * drag = new QDrag(this); - drag->setMimeData(new DisplayFilterMimeData(description, filter)); + drag->setMimeData(dfmd); - QString cmt = QString("%1\n%2").arg(description, filter); - DragLabel * content = new DragLabel(cmt, this); + DragLabel * content = new DragLabel(dfmd->labelText(), this); #if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) qreal dpr = window()->windowHandle()->devicePixelRatio(); diff --git a/ui/qt/utils/wireshark_mime_data.cpp b/ui/qt/utils/wireshark_mime_data.cpp index 690e1911f4..1a125784d9 100644 --- a/ui/qt/utils/wireshark_mime_data.cpp +++ b/ui/qt/utils/wireshark_mime_data.cpp @@ -21,10 +21,11 @@ #include <utils/wireshark_mime_data.h> -DisplayFilterMimeData::DisplayFilterMimeData(QString description, QString filter) : +DisplayFilterMimeData::DisplayFilterMimeData(QString description, QString field, QString filter) : QMimeData(), description_(description), -filter_(filter) +filter_(filter), +field_(field) {} QString DisplayFilterMimeData::description() const @@ -37,6 +38,16 @@ QString DisplayFilterMimeData::filter() const return filter_; } +QString DisplayFilterMimeData::field() const +{ + return field_; +} + +QString DisplayFilterMimeData::labelText() const +{ + return QString("%1\n%2: %3\n%4: %5").arg(description_, tr("Field"), field_, tr("Filter"), filter_); +} + ToolbarEntryMimeData::ToolbarEntryMimeData(int pos) : QMimeData(), pos_(pos) diff --git a/ui/qt/utils/wireshark_mime_data.h b/ui/qt/utils/wireshark_mime_data.h index da7417c41a..82b70bc88b 100644 --- a/ui/qt/utils/wireshark_mime_data.h +++ b/ui/qt/utils/wireshark_mime_data.h @@ -28,15 +28,19 @@ class DisplayFilterMimeData: public QMimeData { Q_OBJECT public: - DisplayFilterMimeData(QString description, QString filter); + DisplayFilterMimeData(QString description, QString field, QString filter); QString description() const; + QString field() const; QString filter() const; + QString labelText() const; + private: QString description_; QString filter_; + QString field_; }; diff --git a/ui/qt/widgets/display_filter_edit.cpp b/ui/qt/widgets/display_filter_edit.cpp index df5d1b0709..97cdbe96e6 100644 --- a/ui/qt/widgets/display_filter_edit.cpp +++ b/ui/qt/widgets/display_filter_edit.cpp @@ -537,7 +537,10 @@ void DisplayFilterEdit::applyOrPrepareFilter() void DisplayFilterEdit::dragEnterEvent(QDragEnterEvent *event) { - if (event && qobject_cast<const DisplayFilterMimeData *>(event->mimeData())) { + if ( ! event ) + return; + + if (qobject_cast<const DisplayFilterMimeData *>(event->mimeData())) { if ( event->source() != this ) { event->setDropAction(Qt::CopyAction); @@ -552,7 +555,10 @@ void DisplayFilterEdit::dragEnterEvent(QDragEnterEvent *event) void DisplayFilterEdit::dragMoveEvent(QDragMoveEvent *event) { - if (event && qobject_cast<const DisplayFilterMimeData *>(event->mimeData())) { + if ( ! event ) + return; + + if (qobject_cast<const DisplayFilterMimeData *>(event->mimeData())) { if ( event->source() != this ) { event->setDropAction(Qt::CopyAction); @@ -567,8 +573,11 @@ void DisplayFilterEdit::dragMoveEvent(QDragMoveEvent *event) void DisplayFilterEdit::dropEvent(QDropEvent *event) { + if ( ! event ) + return; + /* Moving items around */ - if (event && qobject_cast<const DisplayFilterMimeData *>(event->mimeData())) { + if (qobject_cast<const DisplayFilterMimeData *>(event->mimeData())) { const DisplayFilterMimeData * data = qobject_cast<const DisplayFilterMimeData *>(event->mimeData()); if ( event->source() != this ) @@ -576,7 +585,10 @@ void DisplayFilterEdit::dropEvent(QDropEvent *event) event->setDropAction(Qt::CopyAction); event->accept(); - setText(data->filter()); + if ((QApplication::keyboardModifiers() & Qt::AltModifier)) + setText(data->field()); + else + setText(data->filter()); // Holding down the Shift key will only prepare filter. if (!(QApplication::keyboardModifiers() & Qt::ShiftModifier)) { |