Add "Decode As" to the packet list and protocol tree context menus.

Automatically add a new item if "Decode As" is triggered from the
context menus.

svn path=/trunk/; revision=53915
This commit is contained in:
Gerald Combs 2013-12-10 21:07:26 +00:00
parent b007fccec3
commit 1c9b5dfad3
7 changed files with 24 additions and 12 deletions

View File

@ -54,7 +54,7 @@ const char *default_int_selector_ = "0"; // Arbitrary
const char *default_str_selector_ = "foo"; // Arbitrary
const int max_name_em_width_ = 10; // Some table names are a tad long.
DecodeAsDialog::DecodeAsDialog(QWidget *parent, capture_file *cf) :
DecodeAsDialog::DecodeAsDialog(QWidget *parent, capture_file *cf, bool create_new) :
QDialog(parent),
ui(new Ui::DecodeAsDialog),
cap_file_(cf),
@ -75,6 +75,8 @@ DecodeAsDialog::DecodeAsDialog(QWidget *parent, capture_file *cf) :
connect(wsApp, SIGNAL(preferencesChanged()), this, SLOT(fillTable()));
fillTable();
if (create_new) on_newToolButton_clicked();
}
DecodeAsDialog::~DecodeAsDialog()

View File

@ -44,7 +44,7 @@ class DecodeAsDialog : public QDialog
Q_OBJECT
public:
explicit DecodeAsDialog(QWidget *parent = 0, capture_file *cf = NULL);
explicit DecodeAsDialog(QWidget *parent = 0, capture_file *cf = NULL, bool create_new = false);
~DecodeAsDialog();
public slots:

View File

@ -886,8 +886,6 @@ void MainWindow::setMenusForSelectedPacket()
// frame_selected ? is_udp : FALSE);
// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/PN-CBA",
// frame_selected ? (cf->edt->pi.profinet_type != 0 && cf->edt->pi.profinet_type < 10) : FALSE);
// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/DecodeAs",
// frame_selected && decode_as_ok());
// if (properties) {
// prev_abbrev = g_object_get_data(G_OBJECT(ui_manager_packet_list_menu), "menu_abbrev");
@ -903,8 +901,6 @@ void MainWindow::setMenusForSelectedPacket()
// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ProtocolPreferences",
// properties);
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/DecodeAs",
// frame_selected && decode_as_ok());
// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/Copy",
// frame_selected);
// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ApplyAsFilter",
@ -920,8 +916,6 @@ void MainWindow::setMenusForSelectedPacket()
// frame_selected ? is_udp : FALSE);
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/FollowSSLStream",
// frame_selected ? is_ssl : FALSE);
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/AnalyzeMenu/DecodeAs",
// frame_selected && decode_as_ok());
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ViewMenu/NameResolution/ResolveName",
// frame_selected && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name ||
// gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns));
@ -1713,7 +1707,13 @@ void MainWindow::on_actionAnalyzePAFOrNotSelected_triggered()
void MainWindow::on_actionAnalyzeDecodeAs_triggered()
{
DecodeAsDialog da_dialog(this, cap_file_);
QAction *da_action = qobject_cast<QAction*>(sender());
bool create_new = false;
if (da_action && da_action->data().toBool() == true) {
create_new = true;
}
DecodeAsDialog da_dialog(this, cap_file_, create_new);
connect(this, SIGNAL(setCaptureFile(capture_file*)),
&da_dialog, SLOT(setCaptureFile(capture_file*)));
da_dialog.exec();

View File

@ -224,6 +224,7 @@ PacketList::PacketList(QWidget *parent) :
proto_tree_(NULL),
byte_view_tab_(NULL),
cap_file_(NULL),
decode_as_(NULL),
ctx_column_(-1)
{
QMenu *submenu, *subsubmenu;
@ -372,7 +373,8 @@ PacketList::PacketList(QWidget *parent) :
// " <menuitem name='BinaryStream' action='/Copy/Bytes/BinaryStream'/>\n"
ctx_menu_.addSeparator();
// " <menuitem name='ProtocolPreferences' action='/ProtocolPreferences'/>\n"
// " <menuitem name='DecodeAs' action='/DecodeAs'/>\n"
decode_as_ = window()->findChild<QAction *>("actionAnalyzeDecodeAs");
ctx_menu_.addAction(decode_as_);
// " <menuitem name='Print' action='/Print'/>\n"
// " <menuitem name='ShowPacketinNewWindow' action='/ShowPacketinNewWindow'/>\n"
@ -497,9 +499,11 @@ void PacketList::contextMenuEvent(QContextMenuEvent *event)
}
}
}
decode_as_->setData(qVariantFromValue(true));
ctx_column_ = columnAt(event->x());
ctx_menu_.exec(event->globalPos());
ctx_column_ = -1;
decode_as_->setData(QVariant());
foreach (act, filter_actions_) {
act->setEnabled(fa_enabled);
}

View File

@ -67,6 +67,7 @@ private:
QMenu ctx_menu_;
QList<QMenu *> submenus_;
QList<QAction *> filter_actions_;
QAction *decode_as_;
int ctx_column_;
RelatedPacketDelegate related_packet_delegate_;

View File

@ -157,7 +157,8 @@ proto_tree_draw_node(proto_node *node, gpointer data)
}
ProtoTree::ProtoTree(QWidget *parent) :
QTreeWidget(parent)
QTreeWidget(parent),
decode_as_(NULL)
{
QMenu *submenu, *subsubmenu;
@ -232,7 +233,8 @@ ProtoTree::ProtoTree(QWidget *parent) :
// " <menuitem name='ProtocolHelp' action='/ProtocolHelp'/>\n"
// " <menuitem name='ProtocolPreferences' action='/ProtocolPreferences'/>\n"
ctx_menu_.addSeparator();
// " <menuitem name='DecodeAs' action='/DecodeAs'/>\n"
decode_as_ = window()->findChild<QAction *>("actionAnalyzeDecodeAs");
ctx_menu_.addAction(decode_as_);
// " <menuitem name='DisableProtocol' action='/DisableProtocol'/>\n"
// " <menuitem name='ResolveName' action='/ResolveName'/>\n"
// " <menuitem name='GotoCorrespondingPacket' action='/GotoCorrespondingPacket'/>\n"
@ -252,7 +254,9 @@ void ProtoTree::clear() {
void ProtoTree::contextMenuEvent(QContextMenuEvent *event)
{
decode_as_->setData(qVariantFromValue(true));
ctx_menu_.exec(event->globalPos());
decode_as_->setData(QVariant());
}
void ProtoTree::fillProtocolTree(proto_tree *protocol_tree) {

View File

@ -47,6 +47,7 @@ protected:
private:
QMenu ctx_menu_;
QAction *decode_as_;
signals:
void protoItemSelected(QString &);