aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/qt/main_window.cpp40
-rw-r--r--ui/qt/main_window.h2
-rw-r--r--ui/qt/main_window.ui4
-rw-r--r--ui/qt/main_window_slots.cpp182
-rw-r--r--ui/qt/packet_list.cpp125
-rw-r--r--ui/qt/packet_list.h3
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_;