diff options
Diffstat (limited to 'ui/qt/main_window_slots.cpp')
-rw-r--r-- | ui/qt/main_window_slots.cpp | 71 |
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. |