diff options
author | Roland Knall <rknall@gmail.com> | 2019-06-16 13:20:58 +0200 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2019-06-16 21:07:27 +0000 |
commit | 64badc5a3ac9c60b3abc1df6dd89f61cf86622e2 (patch) | |
tree | fbcc75821ec557a816223ebe23765f715df4f4ff /ui | |
parent | e4713e8745859ea5b8a8ca27a699dec1288c211b (diff) |
Qt: Allow Drag-and-drop on info and protocol
Allow for drag-and-drop on info and protocol columns. Protocol columns
may also be dragged to the display filter, everything else is dragged
as plain-text and can just be used as text
Change-Id: I0fff390580c22175efe50037b18d7199949fd8eb
Reviewed-on: https://code.wireshark.org/review/33621
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/packet_list.cpp | 53 | ||||
-rw-r--r-- | ui/qt/utils/wireshark_mime_data.cpp | 22 | ||||
-rw-r--r-- | ui/qt/utils/wireshark_mime_data.h | 15 |
3 files changed, 67 insertions, 23 deletions
diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index e8d0039717..93137b01cf 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -658,24 +658,53 @@ void PacketList::mouseMoveEvent (QMouseEvent *event) if ( event->buttons() & Qt::LeftButton ) { QModelIndex curIndex = indexAt(event->pos()); + ctx_column_ = curIndex.column(); + QMimeData * mimeData = nullptr; + QWidget * content = nullptr; + QString filter = getFilterFromRowAndColumn(); - if ( ! filter.isEmpty() ) + if ( ! filter.isEmpty() || get_column_format(curIndex.column()) == COL_PROTOCOL) { - QString abbrev = filter.left(filter.indexOf(' ')); + QString abbrev; QString name = model()->headerData(ctx_column_, header()->orientation()).toString(); - DisplayFilterMimeData * dfmd = - new DisplayFilterMimeData(name, abbrev, filter); + if ( ! filter.isEmpty() ) + { + abbrev = filter.left(filter.indexOf(' ')); + } + else + { + filter = model()->data(curIndex).toString().toLower(); + abbrev = filter; + } + + mimeData = new DisplayFilterMimeData(name, abbrev, filter); + ((DisplayFilterMimeData *)mimeData)->allowPlainText(); + content = new DragLabel(((DisplayFilterMimeData *)mimeData)->labelText(), this); + } + else + { + QString text = model()->data(curIndex).toString(); + if ( ! text.isEmpty() ) + { + mimeData = new QMimeData(); + mimeData->setText(text); + } + } + + if ( mimeData ) + { QDrag * drag = new QDrag(this); - drag->setMimeData(dfmd); - - DragLabel * content = new DragLabel(dfmd->labelText(), this); - qreal dpr = window()->windowHandle()->devicePixelRatio(); - QPixmap pixmap(content->size() * dpr); - pixmap.setDevicePixelRatio(dpr); - content->render(&pixmap); - drag->setPixmap(pixmap); + drag->setMimeData(mimeData); + if ( content ) + { + qreal dpr = window()->windowHandle()->devicePixelRatio(); + QPixmap pixmap= QPixmap(content->size() * dpr); + pixmap.setDevicePixelRatio(dpr); + content->render(&pixmap); + drag->setPixmap(pixmap); + } drag->exec(Qt::CopyAction); } diff --git a/ui/qt/utils/wireshark_mime_data.cpp b/ui/qt/utils/wireshark_mime_data.cpp index 7ea3214b0a..573c1209a6 100644 --- a/ui/qt/utils/wireshark_mime_data.cpp +++ b/ui/qt/utils/wireshark_mime_data.cpp @@ -9,15 +9,18 @@ #include <utils/wireshark_mime_data.h> -DisplayFilterMimeData::DisplayFilterMimeData(QString description, QString field, QString filter) : -QMimeData(), -description_(description), -filter_(filter), -field_(field) +void WiresharkMimeData::allowPlainText() { - setText(filter); + setText(labelText()); } +DisplayFilterMimeData::DisplayFilterMimeData(QString description, QString field, QString filter) : + WiresharkMimeData(), + description_(description), + filter_(filter), + field_(field) +{} + QString DisplayFilterMimeData::description() const { return description_; @@ -38,8 +41,13 @@ QString DisplayFilterMimeData::labelText() const return QString("%1\n%2").arg(description_, filter_); } +void DisplayFilterMimeData::allowPlainText() +{ + setText(filter_); +} + ToolbarEntryMimeData::ToolbarEntryMimeData(QString element, int pos) : - QMimeData(), + WiresharkMimeData(), element_(element), pos_(pos) {} diff --git a/ui/qt/utils/wireshark_mime_data.h b/ui/qt/utils/wireshark_mime_data.h index dae7725bad..130527ee16 100644 --- a/ui/qt/utils/wireshark_mime_data.h +++ b/ui/qt/utils/wireshark_mime_data.h @@ -12,7 +12,13 @@ #include <QMimeData> -class DisplayFilterMimeData: public QMimeData { +class WiresharkMimeData: public QMimeData { +public: + virtual QString labelText() const = 0; + virtual void allowPlainText(); +}; + +class DisplayFilterMimeData: public WiresharkMimeData { Q_OBJECT public: @@ -22,7 +28,8 @@ public: QString field() const; QString filter() const; - QString labelText() const; + QString labelText() const override; + void allowPlainText() override; private: @@ -32,7 +39,7 @@ private: }; -class ToolbarEntryMimeData: public QMimeData { +class ToolbarEntryMimeData: public WiresharkMimeData { Q_OBJECT public: @@ -41,7 +48,7 @@ public: int position() const; QString element() const; - QString labelText() const; + QString labelText() const override; private: |