diff options
-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_; |