aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2015-07-29 12:09:28 -0700
committerGerald Combs <gerald@wireshark.org>2015-07-29 22:38:43 +0000
commitd6f59cd10f966cfbe7fce4146f314acd59c84bd2 (patch)
tree0f15b8cebd5f1429128014491d64ca763406ac1d
parenta03a43bd320ceeaae9f2dfa2f15213dced579d17 (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.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_;