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>
This commit is contained in:
Roland Knall 2017-12-28 11:22:06 +01:00
parent fbeca26f03
commit e3329cdc31
6 changed files with 99 additions and 261 deletions

View File

@ -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();

View File

@ -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>

View File

@ -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());

View File

@ -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());

View File

@ -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_;

View File

@ -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);