diff options
author | Gerald Combs <gerald@wireshark.org> | 2015-07-29 12:09:28 -0700 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2015-07-29 22:38:43 +0000 |
commit | d6f59cd10f966cfbe7fce4146f314acd59c84bd2 (patch) | |
tree | 0f15b8cebd5f1429128014491d64ca763406ac1d | |
parent | a03a43bd320ceeaae9f2dfa2f15213dced579d17 (diff) |
Main menu and packet list menu updates.
Enable and disable packet list-relasted menu items in one place. Add
"Colorize Conversation" items to the packet list context menu.
In the GTK+ UI we tend to disable entire menus, which makes their items
inaccessible. Try not to do that in the Qt UI so that menu items are
always visible even if they're disabled.
Remove commented items which are now complete.
Change-Id: I69b878b45334bf88014694b1bf016278fa55a94b
Reviewed-on: https://code.wireshark.org/review/9819
Reviewed-by: Gerald Combs <gerald@wireshark.org>
-rw-r--r-- | ui/qt/main_window.cpp | 40 | ||||
-rw-r--r-- | ui/qt/main_window.h | 2 | ||||
-rw-r--r-- | ui/qt/main_window.ui | 4 | ||||
-rw-r--r-- | ui/qt/main_window_slots.cpp | 182 | ||||
-rw-r--r-- | ui/qt/packet_list.cpp | 125 | ||||
-rw-r--r-- | ui/qt/packet_list.h | 3 |
6 files changed, 104 insertions, 252 deletions
diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp index c91ec7020a..5610ec4fc7 100644 --- a/ui/qt/main_window.cpp +++ b/ui/qt/main_window.cpp @@ -230,8 +230,6 @@ MainWindow::MainWindow(QWidget *parent) : setTitlebarForCaptureFile(); setMenusForCaptureFile(); setForCapturedPackets(false); - setMenusForSelectedPacket(); - setMenusForSelectedTreeRow(); setMenusForFileSet(false); interfaceSelectionChanged(); loadWindowGeometry(); @@ -350,6 +348,10 @@ MainWindow::MainWindow(QWidget *parent) : main_welcome_ = main_ui_->welcomePage; + // Packet list and proto tree must exist before these are called. + setMenusForSelectedPacket(); + setMenusForSelectedTreeRow(); + initShowHideMainWidgets(); initTimeDisplayFormatMenu(); initTimePrecisionFormatMenu(); @@ -477,8 +479,6 @@ MainWindow::MainWindow(QWidget *parent) : this, SLOT(setMenusForSelectedPacket())); connect(packet_list_, SIGNAL(packetDissectionChanged()), this, SLOT(redissectPackets())); - connect(packet_list_, SIGNAL(packetSelectionChanged()), - this, SLOT(setMenusForFollowStream())); connect(packet_list_, SIGNAL(showColumnPreferences(PreferencesDialog::PreferencesPane)), this, SLOT(showPreferencesDialog(PreferencesDialog::PreferencesPane))); connect(packet_list_, SIGNAL(showProtocolPreferences(QString)), @@ -1797,38 +1797,6 @@ void MainWindow::setTitlebarForCaptureInProgress() // Menu state -void MainWindow::setMenusForFollowStream() -{ - gboolean is_tcp = FALSE, is_udp = FALSE; - - if (!capture_file_.capFile()) - return; - - if (!capture_file_.capFile()->edt) - return; - - main_ui_->actionAnalyzeFollowTCPStream->setEnabled(false); - main_ui_->actionAnalyzeFollowUDPStream->setEnabled(false); - main_ui_->actionAnalyzeFollowSSLStream->setEnabled(false); - - proto_get_frame_protocols(capture_file_.capFile()->edt->pi.layers, NULL, &is_tcp, &is_udp, NULL, NULL, NULL); - - if (is_tcp) - { - main_ui_->actionAnalyzeFollowTCPStream->setEnabled(true); - } - - if (is_udp) - { - main_ui_->actionAnalyzeFollowUDPStream->setEnabled(true); - } - - if ( epan_dissect_packet_contains_field(capture_file_.capFile()->edt, "ssl") ) - { - main_ui_->actionAnalyzeFollowSSLStream->setEnabled(true); - } -} - /* Enable or disable menu items based on whether you have a capture file you've finished reading and, if you have one, whether it's been saved and whether it could be saved except by copying the raw packet data. */ diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h index e176081c3f..4a6231d780 100644 --- a/ui/qt/main_window.h +++ b/ui/qt/main_window.h @@ -253,7 +253,6 @@ private slots: void saveWindowGeometry(); void updateRecentFiles(); void recentActionTriggered(); - void setMenusForFollowStream(); void setMenusForSelectedPacket(); void setMenusForSelectedTreeRow(field_info *fi = NULL); void interfaceSelectionChanged(); @@ -378,6 +377,7 @@ private slots: void on_actionViewColorizePacketList_triggered(bool checked); void on_actionViewColoringRules_triggered(); void colorizeConversation(bool create_rule = false); + void colorizePacketConversation(); void on_actionViewColorizeResetColorization_triggered(); void on_actionViewColorizeNewConversationRule_triggered(); void on_actionViewResizeColumns_triggered(); diff --git a/ui/qt/main_window.ui b/ui/qt/main_window.ui index d1fb5530f9..f2c3b09a09 100644 --- a/ui/qt/main_window.ui +++ b/ui/qt/main_window.ui @@ -284,7 +284,7 @@ <addaction name="actionViewNameResolutionNetwork"/> <addaction name="actionViewNameResolutionTransport"/> </widget> - <widget class="QMenu" name="menuColorize_Conversation"> + <widget class="QMenu" name="menuColorizeConversation"> <property name="title"> <string>Colorize Conversation</string> </property> @@ -322,7 +322,7 @@ <addaction name="separator"/> <addaction name="actionViewColorizePacketList"/> <addaction name="actionViewColoringRules"/> - <addaction name="menuColorize_Conversation"/> + <addaction name="menuColorizeConversation"/> <addaction name="separator"/> <addaction name="actionViewResizeColumns"/> <addaction name="separator"/> diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp index 93c6b5943f..e737e44586 100644 --- a/ui/qt/main_window_slots.cpp +++ b/ui/qt/main_window_slots.cpp @@ -136,7 +136,10 @@ // Public slots // -const char *dfe_property_ = "display filter expression"; //TODO : Fix Translate +static const char *dfe_property_ = "display filter expression"; //TODO : Fix Translate + +// We're too lazy to sublcass QAction. +static const char *color_number_property_ = "color number"; bool MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigned int type) { @@ -958,14 +961,12 @@ void MainWindow::recentActionTriggered() { void MainWindow::setMenusForSelectedPacket() { -// gboolean is_ip = FALSE, is_tcp = FALSE, is_udp = FALSE, is_sctp = FALSE, is_ssl = FALSE; - gboolean is_ip = FALSE, is_tcp = FALSE, is_sctp = FALSE, is_rtp = FALSE; + gboolean is_ip = FALSE, is_tcp = FALSE, is_udp = FALSE, is_sctp = FALSE, is_ssl = FALSE, is_rtp = FALSE; -// /* Making the menu context-sensitive allows for easier selection of the -// desired item and has the added benefit, with large captures, of -// avoiding needless looping through huge lists for marked, ignored, -// or time-referenced packets. */ -// gboolean is_ssl = epan_dissect_packet_contains_field(cf->edt, "ssl"); + /* Making the menu context-sensitive allows for easier selection of the + desired item and has the added benefit, with large captures, of + avoiding needless looping through huge lists for marked, ignored, + or time-referenced packets. */ /* We have one or more items in the packet list */ bool have_frames = false; @@ -990,6 +991,13 @@ void MainWindow::setMenusForSelectedPacket() /* We have a valid filter expression */ bool have_filter_expr = false; + QList<QAction *> cc_actions = QList<QAction *>() + << main_ui_->actionViewColorizeConversation1 << main_ui_->actionViewColorizeConversation2 + << main_ui_->actionViewColorizeConversation3 << main_ui_->actionViewColorizeConversation4 + << main_ui_->actionViewColorizeConversation5 << main_ui_->actionViewColorizeConversation6 + << main_ui_->actionViewColorizeConversation7 << main_ui_->actionViewColorizeConversation8 + << main_ui_->actionViewColorizeConversation9 << main_ui_->actionViewColorizeConversation10; + if (capture_file_.capFile()) { frame_selected = capture_file_.capFile()->current_frame != NULL; have_frames = capture_file_.capFile()->count > 0; @@ -1004,40 +1012,11 @@ void MainWindow::setMenusForSelectedPacket() if (capture_file_.capFile()->edt) { - proto_get_frame_protocols(capture_file_.capFile()->edt->pi.layers, &is_ip, &is_tcp, NULL, &is_sctp, NULL, &is_rtp); + proto_get_frame_protocols(capture_file_.capFile()->edt->pi.layers, &is_ip, &is_tcp, &is_udp, &is_sctp, &is_ssl, &is_rtp); } } - if (packet_list_) { - have_filter_expr = !packet_list_->getFilterFromRowAndColumn().isEmpty(); - } -// if (cfile.edt && cfile.edt->tree) { -// GPtrArray *ga; -// header_field_info *hfinfo; -// field_info *v; -// guint ii; - -// ga = proto_all_finfos(cfile.edt->tree); - -// for (ii = ga->len - 1; ii > 0 ; ii -= 1) { - -// v = g_ptr_array_index (ga, ii); -// hfinfo = v->hfinfo; - -// if (!g_str_has_prefix(hfinfo->abbrev, "text") && -// !g_str_has_prefix(hfinfo->abbrev, "_ws.expert") && -// !g_str_has_prefix(hfinfo->abbrev, "_ws.malformed")) { - -// if (hfinfo->parent == -1) { -// abbrev = hfinfo->abbrev; -// } else { -// abbrev = proto_registrar_get_abbrev(hfinfo->parent); -// } -// properties = prefs_is_registered_protocol(abbrev); -// break; -// } -// } -// } + have_filter_expr = !packet_list_->getFilterFromRowAndColumn().isEmpty(); main_ui_->actionEditMarkPacket->setEnabled(frame_selected); main_ui_->actionEditMarkAllDisplayed->setEnabled(have_frames); @@ -1046,10 +1025,10 @@ void MainWindow::setMenusForSelectedPacket() main_ui_->actionEditNextMark->setEnabled(another_is_marked); main_ui_->actionEditPreviousMark->setEnabled(another_is_marked); -//#ifdef WANT_PACKET_EDITOR +#ifdef WANT_PACKET_EDITOR // set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/EditMenu/EditPacket", // frame_selected); -//#endif /* WANT_PACKET_EDITOR */ +#endif // WANT_PACKET_EDITOR main_ui_->actionEditPacketComment->setEnabled(frame_selected && wtap_dump_can_write(capture_file_.capFile()->linktypes, WTAP_COMMENT_PER_PACKET)); main_ui_->actionEditIgnorePacket->setEnabled(frame_selected); @@ -1077,41 +1056,29 @@ void MainWindow::setMenusForSelectedPacket() main_ui_->actionAnalyzePAFAndNotSelected->setEnabled(have_filter_expr); main_ui_->actionAnalyzePAFOrNotSelected->setEnabled(have_filter_expr); - main_ui_->actionViewColorizeConversation1->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation2->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation3->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation4->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation5->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation6->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation7->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation8->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation9->setEnabled(frame_selected); - main_ui_->actionViewColorizeConversation10->setEnabled(frame_selected); + main_ui_->actionAnalyzeFollowTCPStream->setEnabled(is_tcp); + main_ui_->actionAnalyzeFollowUDPStream->setEnabled(is_udp); + main_ui_->actionAnalyzeFollowSSLStream->setEnabled(is_ssl); + + foreach (QAction *cc_action, cc_actions) { + cc_action->setEnabled(frame_selected); + } main_ui_->actionViewColorizeNewConversationRule->setEnabled(frame_selected); main_ui_->actionViewColorizeResetColorization->setEnabled(tmp_color_filters_used()); main_ui_->actionViewColorizeNewConversationRule->setEnabled(frame_selected); -// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ViewMenu/ResetColoring1-10", -// tmp_color_filters_used()); main_ui_->actionViewShowPacketInNewWindow->setEnabled(frame_selected); main_ui_->actionViewEditResolvedName->setEnabled(frame_selected && is_ip); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/SCTP", -// frame_selected ? is_sctp : FALSE); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/FollowTCPStream", -// frame_selected ? is_tcp : FALSE); -// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowTCPStream", -// frame_selected ? is_tcp : FALSE); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/FollowUDPStream", -// frame_selected ? is_udp : FALSE); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/FollowSSLStream", -// frame_selected ? is_ssl : FALSE); -// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowSSLStream", -// frame_selected ? is_ssl : FALSE); main_ui_->menuConversationFilter->clear(); + + packet_list_->conversationMenu()->clear(); + packet_list_->colorizeMenu()->clear(); + for (GList *color_list_entry = color_conv_filter_list; color_list_entry; color_list_entry = g_list_next(color_list_entry)) { + // Main menu items color_conversation_filter_t* color_filter = (color_conversation_filter_t *)color_list_entry->data; QAction *conv_action = main_ui_->menuConversationFilter->addAction(color_filter->display_name); @@ -1124,49 +1091,35 @@ void MainWindow::setMenusForSelectedPacket() conv_action->setEnabled(enable); conv_action->setData(filter); connect(conv_action, SIGNAL(triggered()), this, SLOT(applyConversationFilter())); + + // Packet list context menu items + packet_list_->conversationMenu()->addAction(conv_action); + + QMenu *submenu = packet_list_->colorizeMenu()->addMenu(conv_action->text()); + int i = 1; + foreach (QAction *cc_action, cc_actions) { + QAction *colorize_action = submenu->addAction(cc_action->icon(), cc_action->text()); + colorize_action->setProperty(color_number_property_, i++); + colorize_action->setData(filter); + colorize_action->setEnabled(enable); + connect(colorize_action, SIGNAL(triggered()), this, SLOT(colorizePacketConversation())); + } + + QAction *conv_rule_action = submenu->addAction(main_ui_->actionViewColorizeNewConversationRule->text()); + conv_rule_action->setData(conv_action->data()); + conv_rule_action->setEnabled(enable); + connect(conv_rule_action, SIGNAL(triggered()), this, SLOT(colorizePacketConversation())); } -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/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/ColorizeConversation", -// frame_selected); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/Ethernet", -// frame_selected ? (cf->edt->pi.dl_src.type == AT_ETHER) : FALSE); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/IP", -// frame_selected ? is_ip : FALSE); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/TCP", -// frame_selected ? is_tcp : FALSE); -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ColorizeConversation/UDP", -// 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); - -// if (properties) { -// prev_abbrev = g_object_get_data(G_OBJECT(ui_manager_packet_list_menu), "menu_abbrev"); -// if (!prev_abbrev || (strcmp(prev_abbrev, abbrev) != 0)) { -// /*No previous protocol or protocol changed - update Protocol Preferences menu*/ -// module_t *prefs_module_p = prefs_find_module(abbrev); -// rebuild_protocol_prefs_menu(prefs_module_p, properties, ui_manager_packet_list_menu, "/PacketListMenuPopup/ProtocolPreferences"); - -// g_object_set_data(G_OBJECT(ui_manager_packet_list_menu), "menu_abbrev", g_strdup(abbrev)); -// g_free (prev_abbrev); -// } -// } -// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ProtocolPreferences", -// properties); // set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/Copy", // frame_selected); -// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ResolveName", -// frame_selected && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name || -// gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns)); // 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)); // set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ToolsMenu/FirewallACLRules", // frame_selected); main_ui_->menuTcpStreamGraphs->setEnabled(is_tcp); - main_ui_->menuSCTP->setEnabled(is_sctp); main_ui_->actionSCTPAnalyseThisAssociation->setEnabled(is_sctp); main_ui_->actionSCTPShowAllAssociations->setEnabled(is_sctp); main_ui_->actionSCTPFilterThisAssociation->setEnabled(is_sctp); @@ -1288,15 +1241,6 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) { main_ui_->actionViewExpandSubtrees->setEnabled(capture_file_.capFile()->finfo_selected->tree_type != -1); -// prev_abbrev = g_object_get_data(G_OBJECT(ui_manager_tree_view_menu), "menu_abbrev"); -// if (!prev_abbrev || (strcmp (prev_abbrev, abbrev) != 0)) { -// /* No previous protocol or protocol changed - update Protocol Preferences menu */ -// module_t *prefs_module_p = prefs_find_module(abbrev); -// rebuild_protocol_prefs_menu (prefs_module_p, properties); - -// g_object_set_data(G_OBJECT(ui_manager_tree_view_menu), "menu_abbrev", g_strdup(abbrev)); -// g_free (prev_abbrev); -// } } else { // set_menu_sensitivity(ui_manager_tree_view_menu, // "/TreeViewPopup/GotoCorrespondingPacket", FALSE); @@ -1304,6 +1248,9 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) { // set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/CreateAColumn", FALSE); // set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ColorizewithFilter", FALSE); // set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/DisableProtocol", FALSE); +// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ResolveName", +// frame_selected && (gbl_resolv_flags.mac_name || gbl_resolv_flags.network_name || +// gbl_resolv_flags.transport_name || gbl_resolv_flags.concurrent_dns)); // set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/ExpandSubtrees", FALSE); // set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/WikiProtocolPage", // FALSE); @@ -2308,6 +2255,29 @@ void MainWindow::colorizeConversation(bool create_rule) setMenusForSelectedPacket(); } +void MainWindow::colorizePacketConversation() +{ + QAction *colorize_action = qobject_cast<QAction *>(sender()); + if (!colorize_action) return; + + QString filter = colorize_action->data().toString(); + if (filter.isEmpty()) return; + + bool ok = false; + int color_number = colorize_action->property(color_number_property_).toInt(&ok); + + if (ok) { + // Assume "Color X" + color_filters_set_tmp(color_number, filter.toUtf8().constData(), FALSE); + packet_list_->recolorPackets(); + } else { + // New coloring rule + ColoringRulesDialog coloring_rules_dialog(window(), filter); + coloring_rules_dialog.exec(); + } + main_ui_->actionViewColorizeResetColorization->setEnabled(tmp_color_filters_used()); +} + void MainWindow::on_actionViewColorizeResetColorization_triggered() { color_filters_reset_tmp(); diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index 45755c67fc..a2d768f900 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -308,81 +308,24 @@ PacketList::PacketList(QWidget *parent) : submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndNotSelected")); submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFOrNotSelected")); - QMenu *main_conv_menu = window()->findChild<QMenu *>("menuConversationFilter"); - conv_menu_.setTitle(main_conv_menu->title()); + 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_); -// " <menu name= 'ConversationFilter' action='/Conversation Filter'>\n" -// " <menuitem name='Ethernet' action='/Conversation Filter/Ethernet'/>\n" -// " <menuitem name='IP' action='/Conversation Filter/IP'/>\n" -// " <menuitem name='TCP' action='/Conversation Filter/TCP'/>\n" -// " <menuitem name='UDP' action='/Conversation Filter/UDP'/>\n" -// " <menuitem name='PN-CBA' action='/Conversation Filter/PN-CBA'/>\n" - //submenu = new QMenu(tr("Colorize with Filter")); -// " <menu name= 'ColorizeConversation' action='/Colorize Conversation'>\n" -// " <menu name= 'Ethernet' action='/Colorize Conversation/Ethernet'>\n" -// " <menuitem name='Color1' action='/Colorize Conversation/Ethernet/Color 1'/>\n" -// " <menuitem name='Color2' action='/Colorize Conversation/Ethernet/Color 2'/>\n" -// " <menuitem name='Color3' action='/Colorize Conversation/Ethernet/Color 3'/>\n" -// " <menuitem name='Color4' action='/Colorize Conversation/Ethernet/Color 4'/>\n" -// " <menuitem name='Color5' action='/Colorize Conversation/Ethernet/Color 5'/>\n" -// " <menuitem name='Color6' action='/Colorize Conversation/Ethernet/Color 6'/>\n" -// " <menuitem name='Color7' action='/Colorize Conversation/Ethernet/Color 7'/>\n" -// " <menuitem name='Color8' action='/Colorize Conversation/Ethernet/Color 8'/>\n" -// " <menuitem name='Color9' action='/Colorize Conversation/Ethernet/Color 9'/>\n" -// " <menuitem name='Color10' action='/Colorize Conversation/Ethernet/Color 10'/>\n" -// " <menuitem name='NewColoringRule' action='/Colorize Conversation/Ethernet/New Coloring Rule'/>\n" -// " <menu name= 'IP' action='/Colorize Conversation/IP'>\n" -// " <menuitem name='Color1' action='/Colorize Conversation/IP/Color 1'/>\n" -// " <menuitem name='Color2' action='/Colorize Conversation/IP/Color 2'/>\n" -// " <menuitem name='Color3' action='/Colorize Conversation/IP/Color 3'/>\n" -// " <menuitem name='Color4' action='/Colorize Conversation/IP/Color 4'/>\n" -// " <menuitem name='Color5' action='/Colorize Conversation/IP/Color 5'/>\n" -// " <menuitem name='Color6' action='/Colorize Conversation/IP/Color 6'/>\n" -// " <menuitem name='Color7' action='/Colorize Conversation/IP/Color 7'/>\n" -// " <menuitem name='Color8' action='/Colorize Conversation/IP/Color 8'/>\n" -// " <menuitem name='Color9' action='/Colorize Conversation/IP/Color 9'/>\n" -// " <menuitem name='Color10' action='/Colorize Conversation/IP/Color 10'/>\n" -// " <menuitem name='NewColoringRule' action='/Colorize Conversation/IP/New Coloring Rule'/>\n" -// " <menu name= 'TCP' action='/Colorize Conversation/TCP'>\n" -// " <menuitem name='Color1' action='/Colorize Conversation/TCP/Color 1'/>\n" -// " <menuitem name='Color2' action='/Colorize Conversation/TCP/Color 2'/>\n" -// " <menuitem name='Color3' action='/Colorize Conversation/TCP/Color 3'/>\n" -// " <menuitem name='Color4' action='/Colorize Conversation/TCP/Color 4'/>\n" -// " <menuitem name='Color5' action='/Colorize Conversation/TCP/Color 5'/>\n" -// " <menuitem name='Color6' action='/Colorize Conversation/TCP/Color 6'/>\n" -// " <menuitem name='Color7' action='/Colorize Conversation/TCP/Color 7'/>\n" -// " <menuitem name='Color8' action='/Colorize Conversation/TCP/Color 8'/>\n" -// " <menuitem name='Color9' action='/Colorize Conversation/TCP/Color 9'/>\n" -// " <menuitem name='Color10' action='/Colorize Conversation/TCP/Color 10'/>\n" -// " <menuitem name='NewColoringRule' action='/Colorize Conversation/TCP/New Coloring Rule'/>\n" -// " <menu name= 'UDP' action='/Colorize Conversation/UDP'>\n" -// " <menuitem name='Color1' action='/Colorize Conversation/UDP/Color 1'/>\n" -// " <menuitem name='Color2' action='/Colorize Conversation/UDP/Color 2'/>\n" -// " <menuitem name='Color3' action='/Colorize Conversation/UDP/Color 3'/>\n" -// " <menuitem name='Color4' action='/Colorize Conversation/UDP/Color 4'/>\n" -// " <menuitem name='Color5' action='/Colorize Conversation/UDP/Color 5'/>\n" -// " <menuitem name='Color6' action='/Colorize Conversation/UDP/Color 6'/>\n" -// " <menuitem name='Color7' action='/Colorize Conversation/UDP/Color 7'/>\n" -// " <menuitem name='Color8' action='/Colorize Conversation/UDP/Color 8'/>\n" -// " <menuitem name='Color9' action='/Colorize Conversation/UDP/Color 9'/>\n" -// " <menuitem name='Color10' action='/Colorize Conversation/UDP/Color 10'/>\n" -// " <menuitem name='NewColoringRule' action='/Colorize Conversation/UDP/New Coloring Rule'/>\n" -// " <menu name= 'PN-CBA' action='/Colorize Conversation/PN-CBA'>\n" -// " <menuitem name='Color1' action='/Colorize Conversation/PN-CBA/Color 1'/>\n" -// " <menuitem name='Color2' action='/Colorize Conversation/PN-CBA/Color 2'/>\n" -// " <menuitem name='Color3' action='/Colorize Conversation/PN-CBA/Color 3'/>\n" -// " <menuitem name='Color4' action='/Colorize Conversation/PN-CBA/Color 4'/>\n" -// " <menuitem name='Color5' action='/Colorize Conversation/PN-CBA/Color 5'/>\n" -// " <menuitem name='Color6' action='/Colorize Conversation/PN-CBA/Color 6'/>\n" -// " <menuitem name='Color7' action='/Colorize Conversation/PN-CBA/Color 7'/>\n" -// " <menuitem name='Color8' action='/Colorize Conversation/PN-CBA/Color 8'/>\n" -// " <menuitem name='Color9' action='/Colorize Conversation/PN-CBA/Color 9'/>\n" -// " <menuitem name='Color10' action='/Colorize Conversation/PN-CBA/Color 10'/>\n" -// " <menuitem name='NewColoringRule' action='/Colorize Conversation/PN-CBA/New Coloring Rule'/>\n" -// " <menu name= 'SCTP' action='/SCTP'>\n" -// " <menuitem name='AnalysethisAssociation' action='/SCTP/Analyse this Association'/>\n" -// " <menuitem name='PrepareFilterforthisAssociation' action='/SCTP/Prepare Filter for this Association'/>\n" + 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_.addMenu(submenu); + submenu->addAction(window()->findChild<QAction *>("actionSCTPAnalyseThisAssociation")); + submenu->addAction(window()->findChild<QAction *>("actionSCTPShowAllAssociations")); + ctx_menu_.addSeparator(); action = window()->findChild<QAction *>("actionCopy"); @@ -522,39 +465,6 @@ void PacketList::selectionChanged (const QItemSelection & selected, const QItemS void PacketList::contextMenuEvent(QContextMenuEvent *event) { - QAction *action; - gboolean is_tcp = FALSE, is_udp = FALSE, is_sctp = FALSE; - - /* walk the list of a available protocols in the packet to see what we have */ - if (cap_file_ != NULL && cap_file_->edt != NULL) - proto_get_frame_protocols(cap_file_->edt->pi.layers, NULL, &is_tcp, &is_udp, &is_sctp, NULL, NULL); - - QMenu *main_conv_menu = window()->findChild<QMenu *>("menuConversationFilter"); - conv_menu_.clear(); - foreach (action, main_conv_menu->actions()) { - conv_menu_.addAction(action); - } - - action = window()->findChild<QAction *>("actionSCTP"); - if (cap_file_ != NULL && cap_file_->edt != NULL && is_sctp) - action->setEnabled(TRUE); - else - action->setEnabled(FALSE); - - action = window()->findChild<QAction *>("actionAnalyzeFollowTCPStream"); - action->setEnabled(is_tcp); - - action = window()->findChild<QAction *>("actionAnalyzeFollowUDPStream"); - action->setEnabled(is_udp); - - action = window()->findChild<QAction *>("actionAnalyzeFollowSSLStream"); - - if (cap_file_ != NULL && cap_file_->edt != NULL && - epan_dissect_packet_contains_field(cap_file_->edt, "ssl")) - action->setEnabled(TRUE); - else - action->setEnabled(FALSE); - const char *module_name = NULL; if (cap_file_ && cap_file_->edt && cap_file_->edt->tree) { GPtrArray *finfo_array = proto_all_finfos(cap_file_->edt->tree); @@ -581,7 +491,8 @@ void PacketList::contextMenuEvent(QContextMenuEvent *event) decode_as_->setData(qVariantFromValue(true)); ctx_column_ = columnAt(event->x()); - // Set menu sensitivity for the current column + // Set menu sensitivity for the current column and fill in conversation + // actions. emit packetSelectionChanged(); ctx_menu_.exec(event->globalPos()); diff --git a/ui/qt/packet_list.h b/ui/qt/packet_list.h index da0673dc1c..d7061bde79 100644 --- a/ui/qt/packet_list.h +++ b/ui/qt/packet_list.h @@ -57,6 +57,8 @@ public: }; explicit PacketList(QWidget *parent = 0); PacketListModel *packetListModel() const; + QMenu *conversationMenu() { return &conv_menu_; } + QMenu *colorizeMenu() { return &colorize_menu_; } void setProtoTree(ProtoTree *proto_tree); void setByteViewTab(ByteViewTab *byteViewTab); void freeze(); @@ -91,6 +93,7 @@ private: capture_file *cap_file_; QMenu ctx_menu_; QMenu conv_menu_; + QMenu colorize_menu_; ProtocolPreferencesMenu proto_prefs_menu_; QAction *decode_as_; int ctx_column_; |