aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/main_window_slots.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui/qt/main_window_slots.cpp')
-rw-r--r--ui/qt/main_window_slots.cpp71
1 files changed, 49 insertions, 22 deletions
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp
index 5da120acdb..e883f512e4 100644
--- a/ui/qt/main_window_slots.cpp
+++ b/ui/qt/main_window_slots.cpp
@@ -48,6 +48,7 @@
#include <wsutil/str_util.h>
#include "epan/addr_resolv.h"
+#include "epan/color_dissector_filters.h"
#include "epan/column.h"
#include "epan/epan_dissect.h"
#include "epan/filter_expressions.h"
@@ -110,6 +111,7 @@
#include "time_shift_dialog.h"
#include "voip_calls_dialog.h"
#include "wireshark_application.h"
+#include "filter_action.h"
#include <QClipboard>
#include <QFileInfo>
@@ -952,16 +954,8 @@ void MainWindow::recentActionTriggered() {
void MainWindow::setMenusForSelectedPacket()
{
-// GList *list_entry = dissector_filter_list;
-// guint i = 0;
-// gboolean properties = FALSE;
-// const char *abbrev = NULL;
-// char *prev_abbrev;
-#if 0
- gboolean is_ip = FALSE, is_tcp = FALSE, is_udp = FALSE, is_sctp = FALSE;
-#else
+// gboolean is_ip = FALSE, is_tcp = FALSE, is_udp = FALSE, is_sctp = FALSE, is_ssl = FALSE;
gboolean is_tcp = FALSE, is_sctp = FALSE;
-#endif
// /* Making the menu context-sensitive allows for easier selection of the
// desired item and has the added benefit, with large captures, of
@@ -1089,16 +1083,23 @@ void MainWindow::setMenusForSelectedPacket()
// frame_selected ? is_ssl : FALSE);
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowSSLStream",
// frame_selected ? is_ssl : FALSE);
-// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter",
-// frame_selected);
-// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/Ethernet",
-// frame_selected ? (cf->edt->pi.dl_src.type == AT_ETHER) : FALSE);
-// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/IP",
-// frame_selected ? is_ip : FALSE);
-// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/TCP",
-// frame_selected ? is_tcp : FALSE);
-// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/UDP",
-// frame_selected ? is_udp : FALSE);
+
+ main_ui_->menuConversationFilter->clear();
+ for (GList *color_list_entry = color_conv_filter_list; color_list_entry; color_list_entry = g_list_next(color_list_entry)) {
+ 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);
+
+ bool enable = false;
+ QString filter;
+ if (capture_file_.capFile()->edt) {
+ enable = color_filter->is_filter_valid(&capture_file_.capFile()->edt->pi);
+ filter = color_filter->build_filter_string(&capture_file_.capFile()->edt->pi);
+ }
+ conv_action->setEnabled(enable);
+ conv_action->setData(filter);
+ connect(conv_action, SIGNAL(triggered()), this, SLOT(applyConversationFilter()));
+ }
+
// set_menu_sensitivity(ui_manager_tree_view_menu, "/TreeViewPopup/FollowUDPStream",
// frame_selected ? is_udp : FALSE);
// set_menu_sensitivity(ui_manager_packet_list_menu, "/PacketListMenuPopup/ConversationFilter/PN-CBA",
@@ -1172,9 +1173,6 @@ void MainWindow::setMenusForSelectedPacket()
}
void MainWindow::setMenusForSelectedTreeRow(field_info *fi) {
- //gboolean properties;
- //gint id;
-
// XXX Add commented items below
if (capture_file_.capFile()) {
@@ -1255,7 +1253,24 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) {
main_ui_->actionAnalyzePAFAndNotSelected->setEnabled(can_match_selected);
main_ui_->actionAnalyzePAFOrNotSelected->setEnabled(can_match_selected);
+ main_ui_->menuConversationFilter->clear();
+ for (GList *color_list_entry = color_conv_filter_list; color_list_entry; color_list_entry = g_list_next(color_list_entry)) {
+ 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);
+
+ bool enable = false;
+ QString filter;
+ if (capture_file_.capFile()->edt) {
+ enable = color_filter->is_filter_valid(&capture_file_.capFile()->edt->pi);
+ filter = color_filter->build_filter_string(&capture_file_.capFile()->edt->pi);
+ }
+ conv_action->setEnabled(enable);
+ conv_action->setData(filter);
+ connect(conv_action, SIGNAL(triggered()), this, SLOT(applyConversationFilter()));
+ }
+
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 */
@@ -2215,6 +2230,18 @@ void MainWindow::on_actionAnalyzeCreateAColumn_triggered()
}
}
+void MainWindow::applyConversationFilter()
+{
+ QAction *cfa = qobject_cast<QAction*>(sender());
+ if (!cfa) return;
+
+ QString new_filter = cfa->data().toString();
+ if (new_filter.isEmpty()) return;
+
+ df_combo_box_->lineEdit()->setText(new_filter);
+ df_combo_box_->applyDisplayFilter();
+}
+
// XXX We could probably create the analyze and prepare actions
// dynamically using FilterActions and consolidate the methods
// below into one callback.