aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorRoland Knall <rknall@gmail.com>2017-12-28 11:22:06 +0100
committerRoland Knall <rknall@gmail.com>2017-12-28 11:26:25 +0000
commite3329cdc313e2a4c1e35a0f9d4f8777e3f9a77e1 (patch)
tree26c867db8cca1f923bf3cc029cb5c9827de70922 /ui/qt
parentfbeca26f035fe6a2a9632dee6d691629a6003d28 (diff)
Qt: Remove duplicate copy actions
Remove the final copy actions from MainWindow and use DataPrinter instead. This way, MainWindow no longer is involved in copying data, and the actions purely are defined by DataPrinter Change-Id: Ib70ad6394dee501bb2c8d58c9d174a0eb04b47de Reviewed-on: https://code.wireshark.org/review/25031 Petri-Dish: Roland Knall <rknall@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui/qt')
-rw-r--r--ui/qt/main_window.h7
-rw-r--r--ui/qt/main_window.ui54
-rw-r--r--ui/qt/main_window_slots.cpp84
-rw-r--r--ui/qt/packet_list.cpp208
-rw-r--r--ui/qt/packet_list.h1
-rw-r--r--ui/qt/utils/data_printer.cpp6
6 files changed, 99 insertions, 261 deletions
diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h
index 12b5915363..d3a01e0bd7 100644
--- a/ui/qt/main_window.h
+++ b/ui/qt/main_window.h
@@ -649,13 +649,6 @@ private slots:
void externalMenuItem_triggered();
- void on_actionContextCopyBytesHexTextDump_triggered();
- void on_actionContextCopyBytesHexDump_triggered();
- void on_actionContextCopyBytesPrintableText_triggered();
- void on_actionContextCopyBytesHexStream_triggered();
- void on_actionContextCopyBytesBinary_triggered();
- void on_actionContextCopyBytesEscapedString_triggered();
-
void on_actionAnalyzeShowPacketBytes_triggered();
void on_actionContextWikiProtocolPage_triggered();
diff --git a/ui/qt/main_window.ui b/ui/qt/main_window.ui
index 181d12ae96..cf1481b550 100644
--- a/ui/qt/main_window.ui
+++ b/ui/qt/main_window.ui
@@ -126,7 +126,7 @@
<widget class="FilterExpressionFrame" name="filterExpressionFrame"/>
</item>
<item>
- <widget class="WirelessTimeline" name="wirelessTimelineWidget"/>
+ <widget class="WirelessTimeline" name="wirelessTimelineWidget" native="true"/>
</item>
<item>
<widget class="QStackedWidget" name="mainStack">
@@ -144,7 +144,7 @@
<x>0</x>
<y>0</y>
<width>960</width>
- <height>23</height>
+ <height>22</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -354,7 +354,7 @@
<addaction name="actionViewFilterToolbar"/>
<addaction name="actionViewWirelessToolbar"/>
<addaction name="menuInterfaceToolbars"/>
- <addaction name="menuAdditionalToolbars" />
+ <addaction name="menuAdditionalToolbars"/>
<addaction name="actionViewStatusBar"/>
<addaction name="separator"/>
<addaction name="actionViewFullScreen"/>
@@ -2550,46 +2550,6 @@
<string>Show the currently supported protocols and display filter fields</string>
</property>
</action>
- <action name="actionContextCopyBytesHexTextDump">
- <property name="text">
- <string>Bytes as Hex + ASCII Dump</string>
- </property>
- <property name="toolTip">
- <string>Copy packet bytes as a hex and ASCII dump.</string>
- </property>
- </action>
- <action name="actionContextCopyBytesHexDump">
- <property name="text">
- <string>…as Hex Dump</string>
- </property>
- <property name="toolTip">
- <string>Copy packet bytes as a hex dump.</string>
- </property>
- </action>
- <action name="actionContextCopyBytesPrintableText">
- <property name="text">
- <string>…as Printable Text</string>
- </property>
- <property name="toolTip">
- <string>Copy only the printable text in the packet.</string>
- </property>
- </action>
- <action name="actionContextCopyBytesHexStream">
- <property name="text">
- <string>…as a Hex Stream</string>
- </property>
- <property name="toolTip">
- <string>Copy packet bytes as a stream of hex.</string>
- </property>
- </action>
- <action name="actionContextCopyBytesBinary">
- <property name="text">
- <string>…as Raw Binary</string>
- </property>
- <property name="toolTip">
- <string>Copy packet bytes as application/octet-stream MIME data.</string>
- </property>
- </action>
<action name="actionTelephonyGsmMapSummary">
<property name="text">
<string>MAP Summary</string>
@@ -3006,14 +2966,6 @@
<string>Create firewall ACL rules</string>
</property>
</action>
- <action name="actionContextCopyBytesEscapedString">
- <property name="text">
- <string>…as Escaped String</string>
- </property>
- <property name="toolTip">
- <string>Copy packet bytes as a Escaped string</string>
- </property>
- </action>
<action name="actionViewFullScreen">
<property name="checkable">
<bool>true</bool>
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp
index 7e066f2ec3..71fd2b62bf 100644
--- a/ui/qt/main_window_slots.cpp
+++ b/ui/qt/main_window_slots.cpp
@@ -3949,90 +3949,6 @@ void MainWindow::showExtcapOptionsDialog(QString &device_name)
}
#endif
-void MainWindow::on_actionContextCopyBytesHexTextDump_triggered()
-{
- QAction *ca = qobject_cast<QAction*>(sender());
- if (!ca) return;
-
- IDataPrintable * fieldInfo =
- VariantPointer<IDataPrintable>::asPtr(ca->property("idataprintable_"));
- if ( ! fieldInfo )
- return;
-
- DataPrinter printer;
- printer.toClipboard(DataPrinter::DP_HexDump, fieldInfo);
-}
-
-void MainWindow::on_actionContextCopyBytesHexDump_triggered()
-{
- QAction *ca = qobject_cast<QAction*>(sender());
- if (!ca) return;
-
- IDataPrintable * fieldInfo =
- VariantPointer<IDataPrintable>::asPtr(ca->property("idataprintable_"));
- if ( ! fieldInfo )
- return;
-
- DataPrinter printer;
- printer.toClipboard(DataPrinter::DP_HexOnly, fieldInfo);
-}
-
-void MainWindow::on_actionContextCopyBytesPrintableText_triggered()
-{
- QAction *ca = qobject_cast<QAction*>(sender());
- if (!ca) return;
-
- IDataPrintable * fieldInfo =
- VariantPointer<IDataPrintable>::asPtr(ca->property("idataprintable_"));
- if ( ! fieldInfo )
- return;
-
- DataPrinter printer;
- printer.toClipboard(DataPrinter::DP_PrintableText, fieldInfo);
-}
-
-void MainWindow::on_actionContextCopyBytesHexStream_triggered()
-{
- QAction *ca = qobject_cast<QAction*>(sender());
- if (!ca) return;
-
- IDataPrintable * fieldInfo =
- VariantPointer<IDataPrintable>::asPtr(ca->property("idataprintable_"));
- if ( ! fieldInfo )
- return;
-
- DataPrinter printer;
- printer.toClipboard(DataPrinter::DP_HexStream, fieldInfo);
-}
-
-void MainWindow::on_actionContextCopyBytesBinary_triggered()
-{
- QAction *ca = qobject_cast<QAction*>(sender());
- if (!ca) return;
-
- IDataPrintable * fieldInfo =
- VariantPointer<IDataPrintable>::asPtr(ca->property("idataprintable_"));
- if ( ! fieldInfo )
- return;
-
- DataPrinter printer;
- printer.toClipboard(DataPrinter::DP_Binary, fieldInfo);
-}
-
-void MainWindow::on_actionContextCopyBytesEscapedString_triggered()
-{
- QAction *ca = qobject_cast<QAction*>(sender());
- if (!ca) return;
-
- IDataPrintable * fieldInfo =
- VariantPointer<IDataPrintable>::asPtr(ca->property("idataprintable_"));
- if ( ! fieldInfo )
- return;
-
- DataPrinter printer;
- printer.toClipboard(DataPrinter::DP_EscapedString, fieldInfo);
-}
-
void MainWindow::on_actionContextWikiProtocolPage_triggered()
{
QAction *wa = qobject_cast<QAction*>(sender());
diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp
index d5578702f2..16e545e96d 100644
--- a/ui/qt/packet_list.cpp
+++ b/ui/qt/packet_list.cpp
@@ -241,9 +241,6 @@ PacketList::PacketList(QWidget *parent) :
cur_history_(-1),
in_history_(false)
{
- QMenu *main_menu_item, *submenu;
- QAction *action;
-
setItemsExpandable(false);
setRootIsDecorated(false);
setSortingEnabled(true);
@@ -257,113 +254,6 @@ PacketList::PacketList(QWidget *parent) :
setModel(packet_list_model_);
sortByColumn(-1, Qt::AscendingOrder);
- // XXX We might want to reimplement setParent() and fill in the context
- // menu there.
- ctx_menu_.addAction(window()->findChild<QAction *>("actionEditMarkPacket"));
- ctx_menu_.addAction(window()->findChild<QAction *>("actionEditIgnorePacket"));
- ctx_menu_.addAction(window()->findChild<QAction *>("actionEditSetTimeReference"));
- ctx_menu_.addAction(window()->findChild<QAction *>("actionEditTimeShift"));
- ctx_menu_.addAction(window()->findChild<QAction *>("actionEditPacketComment"));
-
- ctx_menu_.addSeparator();
-
- ctx_menu_.addAction(window()->findChild<QAction *>("actionViewEditResolvedName"));
- ctx_menu_.addSeparator();
-
- main_menu_item = window()->findChild<QMenu *>("menuApplyAsFilter");
- submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
- ctx_menu_.addMenu(submenu);
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFNotSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFAndSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFOrSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFAndNotSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFOrNotSelected"));
-
- main_menu_item = window()->findChild<QMenu *>("menuPrepareAFilter");
- submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
- ctx_menu_.addMenu(submenu);
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFNotSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFOrSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndNotSelected"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFOrNotSelected"));
-
- const char *conv_menu_name = "menuConversationFilter";
- main_menu_item = window()->findChild<QMenu *>(conv_menu_name);
- conv_menu_.setTitle(main_menu_item->title());
- conv_menu_.setObjectName(conv_menu_name);
- ctx_menu_.addMenu(&conv_menu_);
-
- const char *colorize_menu_name = "menuColorizeConversation";
- main_menu_item = window()->findChild<QMenu *>(colorize_menu_name);
- colorize_menu_.setTitle(main_menu_item->title());
- colorize_menu_.setObjectName(colorize_menu_name);
- ctx_menu_.addMenu(&colorize_menu_);
-
- main_menu_item = window()->findChild<QMenu *>("menuSCTP");
- submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
- ctx_menu_.addMenu(submenu);
- submenu->addAction(window()->findChild<QAction *>("actionSCTPAnalyseThisAssociation"));
- submenu->addAction(window()->findChild<QAction *>("actionSCTPShowAllAssociations"));
- submenu->addAction(window()->findChild<QAction *>("actionSCTPFilterThisAssociation"));
-
- main_menu_item = window()->findChild<QMenu *>("menuFollow");
- submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
- ctx_menu_.addMenu(submenu);
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowTCPStream"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowUDPStream"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowSSLStream"));
- submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowHTTPStream"));
-
- ctx_menu_.addSeparator();
-
- main_menu_item = window()->findChild<QMenu *>("menuEditCopy");
- submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
- ctx_menu_.addMenu(submenu);
-
- action = submenu->addAction(tr("Summary as Text"));
- action->setData(copy_summary_text_);
- connect(action, SIGNAL(triggered()), this, SLOT(copySummary()));
- action = submenu->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as CSV"));
- action->setData(copy_summary_csv_);
- connect(action, SIGNAL(triggered()), this, SLOT(copySummary()));
- action = submenu->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as YAML"));
- action->setData(copy_summary_yaml_);
- connect(action, SIGNAL(triggered()), this, SLOT(copySummary()));
- submenu->addSeparator();
-
- submenu->addAction(window()->findChild<QAction *>("actionEditCopyAsFilter"));
- submenu->addSeparator();
-
- action = window()->findChild<QAction *>("actionContextCopyBytesHexTextDump");
- submenu->addAction(action);
- copy_actions_ << action;
- action = window()->findChild<QAction *>("actionContextCopyBytesHexDump");
- submenu->addAction(action);
- copy_actions_ << action;
- action = window()->findChild<QAction *>("actionContextCopyBytesPrintableText");
- submenu->addAction(action);
- copy_actions_ << action;
- action = window()->findChild<QAction *>("actionContextCopyBytesHexStream");
- submenu->addAction(action);
- copy_actions_ << action;
- action = window()->findChild<QAction *>("actionContextCopyBytesBinary");
- submenu->addAction(action);
- copy_actions_ << action;
- action = window()->findChild<QAction *>("actionContextCopyBytesEscapedString");
- submenu->addAction(action);
- copy_actions_ << action;
-
- ctx_menu_.addSeparator();
- ctx_menu_.addMenu(&proto_prefs_menu_);
- decode_as_ = window()->findChild<QAction *>("actionAnalyzeDecodeAs");
- ctx_menu_.addAction(decode_as_);
- // "Print" not ported intentionally
- action = window()->findChild<QAction *>("actionViewShowPacketInNewWindow");
- ctx_menu_.addAction(action);
-
initHeaderContextMenu();
g_assert(gbl_cur_packet_list == NULL);
@@ -564,15 +454,97 @@ void PacketList::contextMenuEvent(QContextMenuEvent *event)
FrameInformation * frameData =
new FrameInformation(new CaptureFile(this, cap_file_), packet_list_model_->getRowFdata(ctxIndex.row()));
- foreach (QAction *action, copy_actions_) {
- if ( frameData->isValid() )
- {
- action->setProperty("idataprintable_",
- VariantPointer<IDataPrintable>::asQVariant((IDataPrintable*)frameData));
- }
+ ctx_menu_.clear();
+ // XXX We might want to reimplement setParent() and fill in the context
+ // menu there.
+ ctx_menu_.addAction(window()->findChild<QAction *>("actionEditMarkPacket"));
+ ctx_menu_.addAction(window()->findChild<QAction *>("actionEditIgnorePacket"));
+ ctx_menu_.addAction(window()->findChild<QAction *>("actionEditSetTimeReference"));
+ ctx_menu_.addAction(window()->findChild<QAction *>("actionEditTimeShift"));
+ ctx_menu_.addAction(window()->findChild<QAction *>("actionEditPacketComment"));
- action->setData(QVariant());
- }
+ ctx_menu_.addSeparator();
+
+ ctx_menu_.addAction(window()->findChild<QAction *>("actionViewEditResolvedName"));
+ ctx_menu_.addSeparator();
+
+ QMenu *main_menu_item = window()->findChild<QMenu *>("menuApplyAsFilter");
+ QMenu *submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
+ ctx_menu_.addMenu(submenu);
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFNotSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFAndSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFOrSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFAndNotSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFOrNotSelected"));
+
+ main_menu_item = window()->findChild<QMenu *>("menuPrepareAFilter");
+ submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
+ ctx_menu_.addMenu(submenu);
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFNotSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFOrSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndNotSelected"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFOrNotSelected"));
+
+ const char *conv_menu_name = "menuConversationFilter";
+ main_menu_item = window()->findChild<QMenu *>(conv_menu_name);
+ conv_menu_.setTitle(main_menu_item->title());
+ conv_menu_.setObjectName(conv_menu_name);
+ ctx_menu_.addMenu(&conv_menu_);
+
+ const char *colorize_menu_name = "menuColorizeConversation";
+ main_menu_item = window()->findChild<QMenu *>(colorize_menu_name);
+ colorize_menu_.setTitle(main_menu_item->title());
+ colorize_menu_.setObjectName(colorize_menu_name);
+ ctx_menu_.addMenu(&colorize_menu_);
+
+ main_menu_item = window()->findChild<QMenu *>("menuSCTP");
+ submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
+ ctx_menu_.addMenu(submenu);
+ submenu->addAction(window()->findChild<QAction *>("actionSCTPAnalyseThisAssociation"));
+ submenu->addAction(window()->findChild<QAction *>("actionSCTPShowAllAssociations"));
+ submenu->addAction(window()->findChild<QAction *>("actionSCTPFilterThisAssociation"));
+
+ main_menu_item = window()->findChild<QMenu *>("menuFollow");
+ submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
+ ctx_menu_.addMenu(submenu);
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowTCPStream"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowUDPStream"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowSSLStream"));
+ submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowHTTPStream"));
+
+ ctx_menu_.addSeparator();
+
+ main_menu_item = window()->findChild<QMenu *>("menuEditCopy");
+ submenu = new QMenu(main_menu_item->title(), &ctx_menu_);
+ ctx_menu_.addMenu(submenu);
+
+ QAction * action = submenu->addAction(tr("Summary as Text"));
+ action->setData(copy_summary_text_);
+ connect(action, SIGNAL(triggered()), this, SLOT(copySummary()));
+ action = submenu->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as CSV"));
+ action->setData(copy_summary_csv_);
+ connect(action, SIGNAL(triggered()), this, SLOT(copySummary()));
+ action = submenu->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as YAML"));
+ action->setData(copy_summary_yaml_);
+ connect(action, SIGNAL(triggered()), this, SLOT(copySummary()));
+ submenu->addSeparator();
+
+ submenu->addAction(window()->findChild<QAction *>("actionEditCopyAsFilter"));
+ submenu->addSeparator();
+
+ QActionGroup * copyEntries = DataPrinter::copyActions(this, frameData);
+ submenu->addActions(copyEntries->actions());
+
+ ctx_menu_.addSeparator();
+ ctx_menu_.addMenu(&proto_prefs_menu_);
+ decode_as_ = window()->findChild<QAction *>("actionAnalyzeDecodeAs");
+ ctx_menu_.addAction(decode_as_);
+ // "Print" not ported intentionally
+ action = window()->findChild<QAction *>("actionViewShowPacketInNewWindow");
+ ctx_menu_.addAction(action);
decode_as_->setData(qVariantFromValue(true));
ctx_column_ = columnAt(event->x());
diff --git a/ui/qt/packet_list.h b/ui/qt/packet_list.h
index 95f5031a8e..2ee97fe338 100644
--- a/ui/qt/packet_list.h
+++ b/ui/qt/packet_list.h
@@ -113,7 +113,6 @@ private:
QMenu colorize_menu_;
ProtocolPreferencesMenu proto_prefs_menu_;
QAction *decode_as_;
- QList<QAction *> copy_actions_;
int ctx_column_;
QByteArray column_state_;
OverlayScrollBar *overlay_sb_;
diff --git a/ui/qt/utils/data_printer.cpp b/ui/qt/utils/data_printer.cpp
index 4112f8d576..4a10b0ce79 100644
--- a/ui/qt/utils/data_printer.cpp
+++ b/ui/qt/utils/data_printer.cpp
@@ -191,31 +191,37 @@ QActionGroup * DataPrinter::copyActions(QObject * copyClass, QObject * data)
// Mostly duplicated from main_window.ui
QAction * action = new QAction(tr("Copy Bytes as Hex + ASCII Dump"), dpi);
+ action->setToolTip(tr("Copy packet bytes as a hex and ASCII dump."));
action->setProperty("printertype", DataPrinter::DP_HexDump);
connect(action, SIGNAL(triggered(bool)), dpi, SLOT(copyIDataBytes(bool)));
actions->addAction(action);
action = new QAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as Hex Dump"), dpi);
+ action->setToolTip(tr("Copy packet bytes as a hex dump."));
action->setProperty("printertype", DataPrinter::DP_HexOnly);
connect(action, SIGNAL(triggered(bool)), dpi, SLOT(copyIDataBytes(bool)));
actions->addAction(action);
action = new QAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as Printable Text"), dpi);
+ action->setToolTip(tr("Copy only the printable text in the packet."));
action->setProperty("printertype", DataPrinter::DP_PrintableText);
connect(action, SIGNAL(triggered(bool)), dpi, SLOT(copyIDataBytes(bool)));
actions->addAction(action);
action = new QAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as a Hex Stream"), dpi);
+ action->setToolTip(tr("Copy packet bytes as a stream of hex."));
action->setProperty("printertype", DataPrinter::DP_HexStream);
connect(action, SIGNAL(triggered(bool)), dpi, SLOT(copyIDataBytes(bool)));
actions->addAction(action);
action = new QAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as Raw Binary"), dpi);
+ action->setToolTip(tr("Copy packet bytes as application/octet-stream MIME data."));
action->setProperty("printertype", DataPrinter::DP_Binary);
connect(action, SIGNAL(triggered(bool)), dpi, SLOT(copyIDataBytes(bool)));
actions->addAction(action);
action = new QAction(tr(UTF8_HORIZONTAL_ELLIPSIS "as Escaped String"), dpi);
+ action->setToolTip(tr("Copy packet bytes as an escaped string."));
action->setProperty("printertype", DataPrinter::DP_EscapedString);
connect(action, SIGNAL(triggered(bool)), dpi, SLOT(copyIDataBytes(bool)));
actions->addAction(action);