From 9a1a98a9f63fee7a3bc4ee3cc97a7e47113e55f2 Mon Sep 17 00:00:00 2001 From: Christian Aguilera Date: Mon, 21 Jan 2019 20:05:31 +0000 Subject: [PATCH] Qt/MainWindow: Also display "List Columns" menu via right-click on table's header. --- Source/Core/DolphinQt/GameList/GameList.cpp | 18 ++++++++++++++++++ Source/Core/DolphinQt/GameList/GameList.h | 1 + Source/Core/DolphinQt/MenuBar.cpp | 8 ++++++-- Source/Core/DolphinQt/MenuBar.h | 8 ++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Source/Core/DolphinQt/GameList/GameList.cpp b/Source/Core/DolphinQt/GameList/GameList.cpp index 3b51cefb89..b744130937 100644 --- a/Source/Core/DolphinQt/GameList/GameList.cpp +++ b/Source/Core/DolphinQt/GameList/GameList.cpp @@ -42,6 +42,7 @@ #include "DolphinQt/GameList/GameListModel.h" #include "DolphinQt/GameList/GridProxyModel.h" #include "DolphinQt/GameList/ListProxyModel.h" +#include "DolphinQt/MenuBar.h" #include "DolphinQt/QtUtils/DoubleClickEventFilter.h" #include "DolphinQt/Resources.h" #include "DolphinQt/Settings.h" @@ -121,6 +122,9 @@ void GameList::MakeListView() hor_header->restoreState( Settings::GetQSettings().value(QStringLiteral("tableheader/state")).toByteArray()); + hor_header->setContextMenuPolicy(Qt::CustomContextMenu); + connect(hor_header, &QWidget::customContextMenuRequested, this, &GameList::ShowHeaderContextMenu); + connect(hor_header, &QHeaderView::sortIndicatorChanged, this, &GameList::OnHeaderViewChanged); connect(hor_header, &QHeaderView::sectionCountChanged, this, &GameList::OnHeaderViewChanged); connect(hor_header, &QHeaderView::sectionMoved, this, &GameList::OnHeaderViewChanged); @@ -223,6 +227,20 @@ void GameList::MakeGridView() }); } +void GameList::ShowHeaderContextMenu(const QPoint& pos) +{ + const MenuBar* const menu_bar = MenuBar::GetMenuBar(); + if (!menu_bar) + return; + + QMenu* const list_columns_menu = menu_bar->GetListColumnsMenu(); + if (!list_columns_menu) + return; + + const QWidget* const widget = qobject_cast(sender()); + list_columns_menu->exec(widget ? widget->mapToGlobal(pos) : pos); +} + void GameList::ShowContextMenu(const QPoint&) { if (!GetSelectedGame()) diff --git a/Source/Core/DolphinQt/GameList/GameList.h b/Source/Core/DolphinQt/GameList/GameList.h index e7782651be..95864a7eb2 100644 --- a/Source/Core/DolphinQt/GameList/GameList.h +++ b/Source/Core/DolphinQt/GameList/GameList.h @@ -52,6 +52,7 @@ signals: void OpenGeneralSettings(); private: + void ShowHeaderContextMenu(const QPoint& pos); void ShowContextMenu(const QPoint&); void OpenContainingFolder(); void OpenProperties(); diff --git a/Source/Core/DolphinQt/MenuBar.cpp b/Source/Core/DolphinQt/MenuBar.cpp index 2096339a5b..42dbf3c4fc 100644 --- a/Source/Core/DolphinQt/MenuBar.cpp +++ b/Source/Core/DolphinQt/MenuBar.cpp @@ -53,8 +53,12 @@ #include "UICommon/GameFile.h" +QPointer MenuBar::s_menu_bar; + MenuBar::MenuBar(QWidget* parent) : QMenuBar(parent) { + s_menu_bar = this; + AddFileMenu(); AddEmulationMenu(); AddMovieMenu(); @@ -584,13 +588,13 @@ void MenuBar::AddListColumnsMenu(QMenu* view_menu) {tr("Tags"), &SConfig::GetInstance().m_showTagsColumn}}; QActionGroup* column_group = new QActionGroup(this); - QMenu* cols_menu = view_menu->addMenu(tr("List Columns")); + m_cols_menu = view_menu->addMenu(tr("List Columns")); column_group->setExclusive(false); for (const auto& key : columns.keys()) { bool* config = columns[key]; - QAction* action = column_group->addAction(cols_menu->addAction(key)); + QAction* action = column_group->addAction(m_cols_menu->addAction(key)); action->setCheckable(true); action->setChecked(*config); connect(action, &QAction::toggled, [this, config, key](bool value) { diff --git a/Source/Core/DolphinQt/MenuBar.h b/Source/Core/DolphinQt/MenuBar.h index 6b4a15e5aa..1d731d240a 100644 --- a/Source/Core/DolphinQt/MenuBar.h +++ b/Source/Core/DolphinQt/MenuBar.h @@ -10,6 +10,7 @@ #include #include +#include namespace Core { @@ -31,11 +32,15 @@ class MenuBar final : public QMenuBar Q_OBJECT public: + static MenuBar* GetMenuBar() { return s_menu_bar; } + explicit MenuBar(QWidget* parent = nullptr); void UpdateStateSlotMenu(); void UpdateToolsMenu(bool emulation_started); + QMenu* GetListColumnsMenu() const { return m_cols_menu; } + #ifdef _WIN32 void InstallUpdateManually(); #endif @@ -169,6 +174,8 @@ private: void OnReadOnlyModeChanged(bool read_only); void OnDebugModeToggled(bool enabled); + static QPointer s_menu_bar; + // File QAction* m_open_action; QAction* m_exit_action; @@ -225,6 +232,7 @@ private: QAction* m_show_breakpoints; QAction* m_show_memory; QAction* m_show_jit; + QMenu* m_cols_menu; // JIT QMenu* m_jit;