Qt: Make some menu items discoverable (or not).

Enable and disable individual actions instead of their parent menus in
order to keep them discoverable.

Do the opposite for Colorize Conversation items so that we don't make
the user traverse the menu hierarchy unnecessarily.

Change-Id: I81770dbbb2d715a2131eb754fedaaadcc8803da2
Reviewed-on: https://code.wireshark.org/review/14558
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Jaap Keuter <jaap.keuter@xs4all.nl>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
This commit is contained in:
Gerald Combs 2016-03-22 09:25:34 -07:00 committed by Alexis La Goutte
parent ac8e08b6c7
commit d6f69751c0
3 changed files with 62 additions and 34 deletions

View File

@ -27,6 +27,8 @@
#include "epan/dissector_filters.h"
#include <QMenu>
#include "qt_ui_utils.h"
ConversationAction::ConversationAction(QObject *parent, conversation_filter_s *conv_filter) :
@ -49,6 +51,11 @@ void ConversationAction::setPacketInfo(struct _packet_info *pinfo)
}
}
setEnabled(enable);
// If we're the "New Coloring Rule" item, enable or disable our parent menu.
QMenu *parent_submenu = qobject_cast<QMenu *>(parentWidget());
if (color_number_ > 0 || !parent_submenu) return;
parent_submenu->setEnabled(enable);
}
void ConversationAction::setFieldFilter(const QByteArray field_filter)

View File

@ -1970,41 +1970,46 @@ void MainWindow::setTitlebarForCaptureInProgress()
and whether it could be saved except by copying the raw packet data. */
void MainWindow::setMenusForCaptureFile(bool force_disable)
{
bool enable = true;
bool can_write = false;
bool can_save = false;
if (force_disable || capture_file_.capFile() == NULL || capture_file_.capFile()->state == FILE_READ_IN_PROGRESS) {
/* We have no capture file or we're currently reading a file */
main_ui_->actionViewReload_as_File_Format_or_Capture->setEnabled(false);
main_ui_->actionFileMerge->setEnabled(false);
main_ui_->actionFileClose->setEnabled(false);
main_ui_->actionFileSave->setEnabled(false);
main_ui_->actionFileSaveAs->setEnabled(false);
main_ui_->actionStatisticsCaptureFileProperties->setEnabled(false);
main_ui_->actionFileExportPackets->setEnabled(false);
main_ui_->menuFileExportPacketDissections->setEnabled(false);
main_ui_->actionFileExportPacketBytes->setEnabled(false);
main_ui_->actionFileExportPDU->setEnabled(false);
main_ui_->actionFileExportSSLSessionKeys->setEnabled(false);
main_ui_->menuFileExportObjects->setEnabled(false);
main_ui_->actionViewReload->setEnabled(false);
enable = false;
} else {
main_ui_->actionViewReload_as_File_Format_or_Capture->setEnabled(true);
main_ui_->actionFileMerge->setEnabled(cf_can_write_with_wiretap(capture_file_.capFile()));
main_ui_->actionFileClose->setEnabled(true);
main_ui_->actionFileSave->setEnabled(cf_can_save(capture_file_.capFile()));
main_ui_->actionFileSaveAs->setEnabled(cf_can_save_as(capture_file_.capFile()));
main_ui_->actionStatisticsCaptureFileProperties->setEnabled(true);
/*
* "Export Specified Packets..." should be available only if
* we can write the file out in at least one format.
*/
main_ui_->actionFileExportPackets->setEnabled(cf_can_write_with_wiretap(capture_file_.capFile()));
main_ui_->menuFileExportPacketDissections->setEnabled(true);
main_ui_->actionFileExportPacketBytes->setEnabled(true);
main_ui_->actionFileExportPDU->setEnabled(true);
main_ui_->actionFileExportSSLSessionKeys->setEnabled(true);
main_ui_->menuFileExportObjects->setEnabled(true);
main_ui_->actionViewReload->setEnabled(true);
/* We have a capture file. Can we write or save? */
can_write = cf_can_write_with_wiretap(capture_file_.capFile());
can_save = cf_can_save(capture_file_.capFile());
}
main_ui_->actionViewReload_as_File_Format_or_Capture->setEnabled(enable);
main_ui_->actionFileMerge->setEnabled(can_write);
main_ui_->actionFileClose->setEnabled(enable);
main_ui_->actionFileSave->setEnabled(can_save);
main_ui_->actionFileSaveAs->setEnabled(can_save);
main_ui_->actionStatisticsCaptureFileProperties->setEnabled(enable);
/*
* "Export Specified Packets..." should be available only if
* we can write the file out in at least one format.
*/
main_ui_->actionFileExportPackets->setEnabled(can_write);
main_ui_->actionFileExportAsCArrays->setEnabled(enable);
main_ui_->actionFileExportAsCSV->setEnabled(enable);
main_ui_->actionFileExportAsPDML->setEnabled(enable);
main_ui_->actionFileExportAsPlainText->setEnabled(enable);
main_ui_->actionFileExportAsPSML->setEnabled(enable);
main_ui_->actionFileExportPacketBytes->setEnabled(enable);
main_ui_->actionFileExportPDU->setEnabled(enable);
main_ui_->actionFileExportSSLSessionKeys->setEnabled(enable);
foreach (QAction *eo_action, main_ui_->menuFileExportObjects->actions()) {
eo_action->setEnabled(enable);
}
main_ui_->actionViewReload->setEnabled(enable);
}
void MainWindow::setMenusForCaptureInProgress(bool capture_in_progress) {
@ -2013,11 +2018,21 @@ void MainWindow::setMenusForCaptureInProgress(bool capture_in_progress) {
main_ui_->actionFileOpen->setEnabled(!capture_in_progress);
main_ui_->menuOpenRecentCaptureFile->setEnabled(!capture_in_progress);
main_ui_->menuFileExportPacketDissections->setEnabled(capture_in_progress);
main_ui_->actionFileExportAsCArrays->setEnabled(capture_in_progress);
main_ui_->actionFileExportAsCSV->setEnabled(capture_in_progress);
main_ui_->actionFileExportAsPDML->setEnabled(capture_in_progress);
main_ui_->actionFileExportAsPlainText->setEnabled(capture_in_progress);
main_ui_->actionFileExportAsPSML->setEnabled(capture_in_progress);
main_ui_->actionFileExportPacketBytes->setEnabled(capture_in_progress);
main_ui_->actionFileExportPDU->setEnabled(capture_in_progress);
main_ui_->actionFileExportSSLSessionKeys->setEnabled(capture_in_progress);
main_ui_->menuFileExportObjects->setEnabled(capture_in_progress);
foreach (QAction *eo_action, main_ui_->menuFileExportObjects->actions()) {
eo_action->setEnabled(capture_in_progress);
}
main_ui_->menuFileSet->setEnabled(!capture_in_progress);
main_ui_->actionFileQuit->setEnabled(true);

View File

@ -1172,7 +1172,13 @@ void MainWindow::setMenusForSelectedPacket()
// gbl_resolv_flags.transport_name));
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/ToolsMenu/FirewallACLRules",
// frame_selected);
main_ui_->menuTcpStreamGraphs->setEnabled(is_tcp);
main_ui_->actionStatisticsTcpStreamRoundTripTime->setEnabled(is_tcp);
main_ui_->actionStatisticsTcpStreamStevens->setEnabled(is_tcp);
main_ui_->actionStatisticsTcpStreamTcptrace->setEnabled(is_tcp);
main_ui_->actionStatisticsTcpStreamThroughput->setEnabled(is_tcp);
main_ui_->actionStatisticsTcpStreamWindowScaling->setEnabled(is_tcp);
main_ui_->actionSCTPAnalyseThisAssociation->setEnabled(is_sctp);
main_ui_->actionSCTPShowAllAssociations->setEnabled(is_sctp);
main_ui_->actionSCTPFilterThisAssociation->setEnabled(is_sctp);