From b84a8e29e88b88f581e76c29bbcf7e2268651810 Mon Sep 17 00:00:00 2001 From: Roland Knall Date: Mon, 26 Aug 2019 17:08:09 +0200 Subject: Qt: Create Apply/Prepare in Packetlist Create the menu for apply/prepare inside Packetlist. At the same time disabled the "..." methods if no filter has been set yet Move the action list to FilterAction as well Change-Id: Ia18a4021cc95562702ff516a24fb029063096f94 Reviewed-on: https://code.wireshark.org/review/34377 Petri-Dish: Roland Knall Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall --- ui/qt/filter_action.cpp | 17 +++++++++++++++-- ui/qt/packet_list.cpp | 35 +++++++++++++++++------------------ 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/ui/qt/filter_action.cpp b/ui/qt/filter_action.cpp index 490350d1df..cef643619d 100644 --- a/ui/qt/filter_action.cpp +++ b/ui/qt/filter_action.cpp @@ -182,7 +182,15 @@ const QString FilterAction::actionDirectionName(ActionDirection direction) { QActionGroup * FilterAction::createFilterGroup(QString filter, bool prepare, bool enabled, QWidget * parent) { if ( filter.isEmpty() ) - return Q_NULLPTR; + enabled = false; + + bool filterEmpty = false; + if ( wsApp ) + { + QWidget * mainWin = wsApp->mainWindow(); + if ( qobject_cast(mainWin) ) + filterEmpty = qobject_cast(mainWin)->getFilter().isEmpty(); + } FilterAction * filterAction = new FilterAction(parent, prepare ? FilterAction::ActionPrepare : FilterAction::ActionApply); @@ -195,14 +203,19 @@ QActionGroup * FilterAction::createFilterGroup(QString filter, bool prepare, boo action->setProperty("filterType", FilterAction::ActionTypeNot); action = group->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "and Selected")); action->setProperty("filterType", FilterAction::ActionTypeAnd); + action->setEnabled(!filterEmpty); action = group->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "or Selected")); action->setProperty("filterType", FilterAction::ActionTypeOr); + action->setEnabled(!filterEmpty); action = group->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "and not Selected")); action->setProperty("filterType", FilterAction::ActionTypeAndNot); + action->setEnabled(!filterEmpty); action = group->addAction(tr(UTF8_HORIZONTAL_ELLIPSIS "or not Selected")); action->setProperty("filterType", FilterAction::ActionTypeOrNot); + action->setEnabled(!filterEmpty); group->setEnabled(enabled); - connect(group, &QActionGroup::triggered, filterAction, &FilterAction::groupTriggered); + if ( ! filter.isEmpty() ) + connect(group, &QActionGroup::triggered, filterAction, &FilterAction::groupTriggered); return group; } diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index ee4ba6d47f..ffbab0f90f 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -500,28 +501,26 @@ void PacketList::contextMenuEvent(QContextMenuEvent *event) ctx_menu.addAction(window()->findChild("actionViewEditResolvedName")); ctx_menu.addSeparator(); - QMenu *main_menu_item = window()->findChild("menuApplyAsFilter"); - QMenu *submenu = new QMenu(main_menu_item->title(), &ctx_menu); + QString selectedfilter = getFilterFromRowAndColumn(currentIndex()); + + if ( ! hasFocus() && cap_file_ && cap_file_->finfo_selected) { + char *tmp_field = proto_construct_match_selected_string(cap_file_->finfo_selected, cap_file_->edt); + selectedfilter = QString(tmp_field); + wmem_free(NULL, tmp_field); + } + + bool have_filter_expr = !selectedfilter.isEmpty(); + QMenu * submenu = new QMenu(tr("Apply as Filter"), &ctx_menu); + QActionGroup * group = FilterAction::createFilterGroup(selectedfilter, false, have_filter_expr, &ctx_menu); + submenu->addActions(group->actions()); ctx_menu.addMenu(submenu); - submenu->addAction(window()->findChild("actionAnalyzeAAFSelected")); - submenu->addAction(window()->findChild("actionAnalyzeAAFNotSelected")); - submenu->addAction(window()->findChild("actionAnalyzeAAFAndSelected")); - submenu->addAction(window()->findChild("actionAnalyzeAAFOrSelected")); - submenu->addAction(window()->findChild("actionAnalyzeAAFAndNotSelected")); - submenu->addAction(window()->findChild("actionAnalyzeAAFOrNotSelected")); - - main_menu_item = window()->findChild("menuPrepareAFilter"); - submenu = new QMenu(main_menu_item->title(), &ctx_menu); + submenu = new QMenu(tr("Prepare as Filter"), &ctx_menu); + group = FilterAction::createFilterGroup(selectedfilter, true, have_filter_expr, &ctx_menu); + submenu->addActions(group->actions()); ctx_menu.addMenu(submenu); - submenu->addAction(window()->findChild("actionAnalyzePAFSelected")); - submenu->addAction(window()->findChild("actionAnalyzePAFNotSelected")); - submenu->addAction(window()->findChild("actionAnalyzePAFAndSelected")); - submenu->addAction(window()->findChild("actionAnalyzePAFOrSelected")); - submenu->addAction(window()->findChild("actionAnalyzePAFAndNotSelected")); - submenu->addAction(window()->findChild("actionAnalyzePAFOrNotSelected")); const char *conv_menu_name = "menuConversationFilter"; - main_menu_item = window()->findChild(conv_menu_name); + QMenu * main_menu_item = window()->findChild(conv_menu_name); conv_menu_.setTitle(main_menu_item->title()); conv_menu_.setObjectName(conv_menu_name); ctx_menu.addMenu(&conv_menu_); -- cgit v1.2.3