diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index b45107bc..697151ba 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -627,6 +627,11 @@ void MainWindow::updateDockActionsChecked() } } +void MainWindow::updateDockActionChecked(QAction * action) +{ + action->setChecked(!dockWidgetActions[action]->isHidden()); +} + void MainWindow::showZenDocks() { const QList zenDocks = { functionsDock, diff --git a/src/MainWindow.h b/src/MainWindow.h index 6854d429..2b34d8b1 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -99,6 +99,8 @@ public: void addDockWidgetAction(QDockWidget *dockWidget, QAction *action); void addExtraWidget(QDockWidget *extraDock); + void updateDockActionChecked(QAction * action); + public slots: void finalizeOpen(); @@ -241,10 +243,11 @@ private: void hideAllDocks(); void showZenDocks(); void showDebugDocks(); - void updateDockActionsChecked(); void toggleDockWidget(QDockWidget *dock_widget, bool show); + void updateDockActionsChecked(); + public: QString getFilename() const { diff --git a/src/widgets/ExportsWidget.cpp b/src/widgets/ExportsWidget.cpp index c96dfd2d..01911d0b 100644 --- a/src/widgets/ExportsWidget.cpp +++ b/src/widgets/ExportsWidget.cpp @@ -3,6 +3,8 @@ #include "MainWindow.h" #include "utils/Helpers.h" +#include "WidgetShortcuts.h" + ExportsModel::ExportsModel(QList *exports, QObject *parent) : QAbstractListModel(parent), exports(exports) @@ -126,6 +128,12 @@ ExportsWidget::ExportsWidget(MainWindow *main, QAction *action) : ui->exportsTreeView->setModel(exportsProxyModel); ui->exportsTreeView->sortByColumn(ExportsModel::OffsetColumn, Qt::AscendingOrder); + QShortcut *toggle_shortcut = new QShortcut(widgetShortcuts["ExportsWidget"], main); + connect(toggle_shortcut, &QShortcut::activated, this, [=] (){ + toggleDockWidget(true); + main->updateDockActionChecked(action); + } ); + // Ctrl-F to show/hide the filter entry QShortcut *searchShortcut = new QShortcut(QKeySequence::Find, this); connect(searchShortcut, &QShortcut::activated, ui->quickFilterView, &QuickFilterView::showFilter); diff --git a/src/widgets/GraphWidget.cpp b/src/widgets/GraphWidget.cpp index a07858aa..abac3ab7 100644 --- a/src/widgets/GraphWidget.cpp +++ b/src/widgets/GraphWidget.cpp @@ -1,6 +1,7 @@ #include "MainWindow.h" #include "GraphWidget.h" #include "DisassemblerGraphView.h" +#include "WidgetShortcuts.h" GraphWidget::GraphWidget(MainWindow *main, QAction *action) : CutterDockWidget(main, action) @@ -10,6 +11,16 @@ GraphWidget::GraphWidget(MainWindow *main, QAction *action) : this->graphView = new DisassemblerGraphView(this); this->setWidget(graphView); + // getting the name of the class is implementation defined, and cannot be + // used reliably across different compilers. + //QShortcut *toggle_shortcut = new QShortcut(widgetShortcuts[typeid(this).name()], main); + + QShortcut *toggle_shortcut = new QShortcut(widgetShortcuts["GraphWidget"], main); + connect(toggle_shortcut, &QShortcut::activated, this, [=] (){ + toggleDockWidget(true); + main->updateDockActionChecked(action); + } ); + connect(this, &QDockWidget::visibilityChanged, this, [](bool visibility) { if (visibility) { Core()->setMemoryWidgetPriority(CutterCore::MemoryWidgetType::Graph); diff --git a/src/widgets/ImportsWidget.cpp b/src/widgets/ImportsWidget.cpp index 630743ac..67c422ae 100644 --- a/src/widgets/ImportsWidget.cpp +++ b/src/widgets/ImportsWidget.cpp @@ -4,6 +4,8 @@ #include "MainWindow.h" #include "utils/Helpers.h" +#include "WidgetShortcuts.h" + #include #include #include @@ -138,6 +140,12 @@ ImportsWidget::ImportsWidget(MainWindow *main, QAction *action) : ui->importsTreeView->setModel(importsProxyModel); ui->importsTreeView->sortByColumn(ImportsModel::NameColumn, Qt::AscendingOrder); + QShortcut *toggle_shortcut = new QShortcut(widgetShortcuts["ImportsWidget"], main); + connect(toggle_shortcut, &QShortcut::activated, this, [=] (){ + toggleDockWidget(true); + main->updateDockActionChecked(action); + } ); + // Ctrl-F to show/hide the filter entry QShortcut *searchShortcut = new QShortcut(QKeySequence::Find, this); connect(searchShortcut, &QShortcut::activated, ui->quickFilterView, &QuickFilterView::showFilter); diff --git a/src/widgets/StringsWidget.cpp b/src/widgets/StringsWidget.cpp index efdc700b..b4a5d4d0 100644 --- a/src/widgets/StringsWidget.cpp +++ b/src/widgets/StringsWidget.cpp @@ -8,6 +8,8 @@ #include "utils/Helpers.h" #include "dialogs/XrefsDialog.h" +#include "WidgetShortcuts.h" + #include #include @@ -135,6 +137,13 @@ StringsWidget::StringsWidget(MainWindow *main, QAction *action) : qhelpers::setVerticalScrollMode(ui->stringsTreeView); + // Shift-F12 to toggle strings window + QShortcut *toggle_shortcut = new QShortcut(widgetShortcuts["StringsWidget"], main); + connect(toggle_shortcut, &QShortcut::activated, this, [=] (){ + toggleDockWidget(true); + main->updateDockActionChecked(action); + } ); + // Ctrl-F to show/hide the filter entry QShortcut *search_shortcut = new QShortcut(QKeySequence::Find, this); connect(search_shortcut, &QShortcut::activated, ui->quickFilterView, &QuickFilterView::showFilter); diff --git a/src/widgets/WidgetShortcuts.h b/src/widgets/WidgetShortcuts.h new file mode 100644 index 00000000..ae4b7de1 --- /dev/null +++ b/src/widgets/WidgetShortcuts.h @@ -0,0 +1,11 @@ +#ifndef WIDGETSHORTCUTS_H +#define WIDGETSHORTCUTS_H + +static const QHash widgetShortcuts = { + { "StringsWidget", Qt::SHIFT + Qt::Key_F12 }, + { "GraphWidget", Qt::SHIFT + Qt::Key_G }, + { "ImportsWidget", Qt::SHIFT + Qt::Key_I }, + { "ExportsWidget", Qt::SHIFT + Qt::Key_E } +}; + +#endif