diff --git a/Source/Core/DolphinQt2/GameList/GameList.cpp b/Source/Core/DolphinQt2/GameList/GameList.cpp index 0b8a122b55..d59bf0bfc7 100644 --- a/Source/Core/DolphinQt2/GameList/GameList.cpp +++ b/Source/Core/DolphinQt2/GameList/GameList.cpp @@ -27,6 +27,7 @@ #include "DolphinQt2/GameList/GameList.h" #include "DolphinQt2/GameList/GridProxyModel.h" #include "DolphinQt2/GameList/ListProxyModel.h" +#include "DolphinQt2/QtUtils/ActionHelper.h" #include "DolphinQt2/QtUtils/DoubleClickEventFilter.h" #include "DolphinQt2/Settings.h" #include "DolphinQt2/WiiUpdate.h" @@ -155,26 +156,26 @@ void GameList::ShowContextMenu(const QPoint&) QMenu* menu = new QMenu(this); DiscIO::Platform platform = game->GetPlatformID(); - menu->addAction(tr("&Properties"), this, &GameList::OpenProperties); - menu->addAction(tr("&Wiki"), this, &GameList::OpenWiki); + AddAction(menu, tr("&Properties"), this, &GameList::OpenProperties); + AddAction(menu, tr("&Wiki"), this, &GameList::OpenWiki); menu->addSeparator(); if (platform == DiscIO::Platform::GAMECUBE_DISC || platform == DiscIO::Platform::WII_DISC) { - menu->addAction(tr("Set as &default ISO"), this, &GameList::SetDefaultISO); + AddAction(menu, tr("Set as &default ISO"), this, &GameList::SetDefaultISO); const auto blob_type = game->GetBlobType(); if (blob_type == DiscIO::BlobType::GCZ) - menu->addAction(tr("Decompress ISO..."), this, &GameList::CompressISO); + AddAction(menu, tr("Decompress ISO..."), this, &GameList::CompressISO); else if (blob_type == DiscIO::BlobType::PLAIN) - menu->addAction(tr("Compress ISO..."), this, &GameList::CompressISO); + AddAction(menu, tr("Compress ISO..."), this, &GameList::CompressISO); menu->addSeparator(); } if (platform == DiscIO::Platform::WII_DISC) { - menu->addAction(tr("Perform System Update"), [this] { + AddAction(menu, tr("Perform System Update"), this, [this] { WiiUpdate::PerformDiscUpdate(GetSelectedGame()->GetFilePath().toStdString(), this); }); menu->setEnabled(!Core::IsRunning() || !SConfig::GetInstance().bWii); @@ -206,13 +207,13 @@ void GameList::ShowContextMenu(const QPoint&) if (platform == DiscIO::Platform::WII_WAD || platform == DiscIO::Platform::WII_DISC) { - menu->addAction(tr("Open Wii &save folder"), this, &GameList::OpenSaveFolder); - menu->addAction(tr("Export Wii save (Experimental)"), this, &GameList::ExportWiiSave); + AddAction(menu, tr("Open Wii &save folder"), this, &GameList::OpenSaveFolder); + AddAction(menu, tr("Export Wii save (Experimental)"), this, &GameList::ExportWiiSave); menu->addSeparator(); } - menu->addAction(tr("Open &containing folder"), this, &GameList::OpenContainingFolder); - menu->addAction(tr("Delete File..."), this, &GameList::DeleteFile); + AddAction(menu, tr("Open &containing folder"), this, &GameList::OpenContainingFolder); + AddAction(menu, tr("Delete File..."), this, &GameList::DeleteFile); QAction* netplay_host = new QAction(tr("Host with NetPlay"), menu); diff --git a/Source/Core/DolphinQt2/Main.cpp b/Source/Core/DolphinQt2/Main.cpp index 47b6a0942a..c991469d28 100644 --- a/Source/Core/DolphinQt2/Main.cpp +++ b/Source/Core/DolphinQt2/Main.cpp @@ -52,7 +52,10 @@ bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no, MsgTy // /SubSystem:Windows int main(int argc, char* argv[]) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#endif + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QCoreApplication::setOrganizationName(QStringLiteral("Dolphin Emulator")); QCoreApplication::setOrganizationDomain(QStringLiteral("dolphin-emu.org")); diff --git a/Source/Core/DolphinQt2/MenuBar.cpp b/Source/Core/DolphinQt2/MenuBar.cpp index 996c21b024..d5f31a37b7 100644 --- a/Source/Core/DolphinQt2/MenuBar.cpp +++ b/Source/Core/DolphinQt2/MenuBar.cpp @@ -25,6 +25,7 @@ #include "DiscIO/NANDImporter.h" #include "DolphinQt2/AboutDialog.h" #include "DolphinQt2/GameList/GameFile.h" +#include "DolphinQt2/QtUtils/ActionHelper.h" #include "DolphinQt2/Settings.h" MenuBar::MenuBar(QWidget* parent) : QMenuBar(parent) @@ -100,71 +101,75 @@ void MenuBar::EmulationStopped() void MenuBar::AddFileMenu() { QMenu* file_menu = addMenu(tr("&File")); - m_open_action = file_menu->addAction(tr("&Open..."), this, &MenuBar::Open, - QKeySequence(QStringLiteral("Ctrl+O"))); - m_exit_action = file_menu->addAction(tr("E&xit"), this, &MenuBar::Exit, - QKeySequence(QStringLiteral("Alt+F4"))); + m_open_action = AddAction(file_menu, tr("&Open..."), this, &MenuBar::Open, + QKeySequence(QStringLiteral("Ctrl+O"))); + m_exit_action = AddAction(file_menu, tr("E&xit"), this, &MenuBar::Exit, + QKeySequence(QStringLiteral("Alt+F4"))); } void MenuBar::AddToolsMenu() { QMenu* tools_menu = addMenu(tr("&Tools")); - tools_menu->addAction(tr("Import Wii Save..."), this, &MenuBar::ImportWiiSave); - tools_menu->addAction(tr("Export All Wii Saves"), this, &MenuBar::ExportWiiSaves); + AddAction(tools_menu, tr("Import Wii Save..."), this, &MenuBar::ImportWiiSave); + AddAction(tools_menu, tr("Export All Wii Saves"), this, &MenuBar::ExportWiiSaves); tools_menu->addSeparator(); - m_wad_install_action = tools_menu->addAction(tr("Install WAD..."), this, &MenuBar::InstallWAD); + m_wad_install_action = AddAction(tools_menu, tr("Install WAD..."), this, &MenuBar::InstallWAD); tools_menu->addSeparator(); QMenu* gc_ipl = tools_menu->addMenu(tr("Load GameCube Main Menu")); - m_ntscj_ipl = gc_ipl->addAction(tr("NTSC-J"), this, - [this] { emit BootGameCubeIPL(DiscIO::Region::NTSC_J); }); - m_ntscu_ipl = gc_ipl->addAction(tr("NTSC-U"), this, - [this] { emit BootGameCubeIPL(DiscIO::Region::NTSC_U); }); + m_ntscj_ipl = AddAction(gc_ipl, tr("NTSC-J"), this, + [this] { emit BootGameCubeIPL(DiscIO::Region::NTSC_J); }); + m_ntscu_ipl = AddAction(gc_ipl, tr("NTSC-U"), this, + [this] { emit BootGameCubeIPL(DiscIO::Region::NTSC_U); }); m_pal_ipl = - gc_ipl->addAction(tr("PAL"), this, [this] { emit BootGameCubeIPL(DiscIO::Region::PAL); }); + AddAction(gc_ipl, tr("PAL"), this, [this] { emit BootGameCubeIPL(DiscIO::Region::PAL); }); - tools_menu->addAction(tr("Start &NetPlay..."), this, &MenuBar::StartNetPlay); + AddAction(tools_menu, tr("Start &NetPlay..."), this, &MenuBar::StartNetPlay); tools_menu->addSeparator(); // Label will be set by a NANDRefresh later - m_boot_sysmenu = tools_menu->addAction(QStringLiteral(""), [this] { emit BootWiiSystemMenu(); }); - m_import_backup = tools_menu->addAction(tr("Import BootMii NAND Backup..."), - [this] { emit ImportNANDBackup(); }); + m_boot_sysmenu = + AddAction(gc_ipl, QStringLiteral(""), this, [this] { emit BootWiiSystemMenu(); }); + m_import_backup = AddAction(gc_ipl, tr("Import BootMii NAND Backup..."), this, + [this] { emit ImportNANDBackup(); }); - m_extract_certificates = tools_menu->addAction(tr("Extract Certificates from NAND"), this, - &MenuBar::NANDExtractCertificates); + m_extract_certificates = AddAction(tools_menu, tr("Extract Certificates from NAND"), this, + &MenuBar::NANDExtractCertificates); m_boot_sysmenu->setEnabled(false); connect(&Settings::Instance(), &Settings::NANDRefresh, [this] { UpdateToolsMenu(false); }); m_perform_online_update_menu = tools_menu->addMenu(tr("Perform Online System Update")); - m_perform_online_update_for_current_region = m_perform_online_update_menu->addAction( - tr("Current Region"), [this] { emit PerformOnlineUpdate(""); }); + m_perform_online_update_for_current_region = + AddAction(m_perform_online_update_menu, tr("Current Region"), this, + [this] { emit PerformOnlineUpdate(""); }); m_perform_online_update_menu->addSeparator(); - m_perform_online_update_menu->addAction(tr("Europe"), - [this] { emit PerformOnlineUpdate("EUR"); }); - m_perform_online_update_menu->addAction(tr("Japan"), [this] { emit PerformOnlineUpdate("JPN"); }); - m_perform_online_update_menu->addAction(tr("Korea"), [this] { emit PerformOnlineUpdate("KOR"); }); - m_perform_online_update_menu->addAction(tr("United States"), - [this] { emit PerformOnlineUpdate("USA"); }); + AddAction(m_perform_online_update_menu, tr("Europe"), this, + [this] { emit PerformOnlineUpdate("EUR"); }); + AddAction(m_perform_online_update_menu, tr("Japan"), this, + [this] { emit PerformOnlineUpdate("JPN"); }); + AddAction(m_perform_online_update_menu, tr("Korea"), this, + [this] { emit PerformOnlineUpdate("KOR"); }); + AddAction(m_perform_online_update_menu, tr("United States"), this, + [this] { emit PerformOnlineUpdate("USA"); }); } void MenuBar::AddEmulationMenu() { QMenu* emu_menu = addMenu(tr("&Emulation")); - m_play_action = emu_menu->addAction(tr("&Play"), this, &MenuBar::Play); - m_pause_action = emu_menu->addAction(tr("&Pause"), this, &MenuBar::Pause); - m_stop_action = emu_menu->addAction(tr("&Stop"), this, &MenuBar::Stop); - m_reset_action = emu_menu->addAction(tr("&Reset"), this, &MenuBar::Reset); - m_fullscreen_action = emu_menu->addAction(tr("Toggle &Fullscreen"), this, &MenuBar::Fullscreen); - m_frame_advance_action = emu_menu->addAction(tr("&Frame Advance"), this, &MenuBar::FrameAdvance); + m_play_action = AddAction(emu_menu, tr("&Play"), this, &MenuBar::Play); + m_pause_action = AddAction(emu_menu, tr("&Pause"), this, &MenuBar::Pause); + m_stop_action = AddAction(emu_menu, tr("&Stop"), this, &MenuBar::Stop); + m_reset_action = AddAction(emu_menu, tr("&Reset"), this, &MenuBar::Reset); + m_fullscreen_action = AddAction(emu_menu, tr("Toggle &Fullscreen"), this, &MenuBar::Fullscreen); + m_frame_advance_action = AddAction(emu_menu, tr("&Frame Advance"), this, &MenuBar::FrameAdvance); - m_screenshot_action = emu_menu->addAction(tr("Take Screenshot"), this, &MenuBar::Screenshot); + m_screenshot_action = AddAction(emu_menu, tr("Take Screenshot"), this, &MenuBar::Screenshot); emu_menu->addSeparator(); @@ -177,10 +182,10 @@ void MenuBar::AddEmulationMenu() void MenuBar::AddStateLoadMenu(QMenu* emu_menu) { m_state_load_menu = emu_menu->addMenu(tr("&Load State")); - m_state_load_menu->addAction(tr("Load State from File"), this, &MenuBar::StateLoad); - m_state_load_menu->addAction(tr("Load State from Selected Slot"), this, &MenuBar::StateLoadSlot); + AddAction(m_state_load_menu, tr("Load State from File"), this, &MenuBar::StateLoad); + AddAction(m_state_load_menu, tr("Load State from Selected Slot"), this, &MenuBar::StateLoadSlot); m_state_load_slots_menu = m_state_load_menu->addMenu(tr("Load State from Slot")); - m_state_load_menu->addAction(tr("Undo Load State"), this, &MenuBar::StateLoadUndo); + AddAction(m_state_load_menu, tr("Undo Load State"), this, &MenuBar::StateLoadUndo); for (int i = 1; i <= 10; i++) { @@ -193,11 +198,11 @@ void MenuBar::AddStateLoadMenu(QMenu* emu_menu) void MenuBar::AddStateSaveMenu(QMenu* emu_menu) { m_state_save_menu = emu_menu->addMenu(tr("Sa&ve State")); - m_state_save_menu->addAction(tr("Save State to File"), this, &MenuBar::StateSave); - m_state_save_menu->addAction(tr("Save State to Selected Slot"), this, &MenuBar::StateSaveSlot); - m_state_save_menu->addAction(tr("Save State to Oldest Slot"), this, &MenuBar::StateSaveOldest); + AddAction(m_state_save_menu, tr("Save State to File"), this, &MenuBar::StateSave); + AddAction(m_state_save_menu, tr("Save State to Selected Slot"), this, &MenuBar::StateSaveSlot); + AddAction(m_state_save_menu, tr("Save State to Oldest Slot"), this, &MenuBar::StateSaveOldest); m_state_save_slots_menu = m_state_save_menu->addMenu(tr("Save State to Slot")); - m_state_save_menu->addAction(tr("Undo Save State"), this, &MenuBar::StateSaveUndo); + AddAction(m_state_save_menu, tr("Undo Save State"), this, &MenuBar::StateSaveUndo); for (int i = 1; i <= 10; i++) { @@ -272,12 +277,12 @@ void MenuBar::AddViewMenu() void MenuBar::AddOptionsMenu() { QMenu* options_menu = addMenu(tr("&Options")); - options_menu->addAction(tr("Co&nfiguration"), this, &MenuBar::Configure); + AddAction(options_menu, tr("Co&nfiguration"), this, &MenuBar::Configure); options_menu->addSeparator(); - options_menu->addAction(tr("&Graphics Settings"), this, &MenuBar::ConfigureGraphics); - options_menu->addAction(tr("&Audio Settings"), this, &MenuBar::ConfigureAudio); - options_menu->addAction(tr("&Controller Settings"), this, &MenuBar::ConfigureControllers); - options_menu->addAction(tr("&Hotkey Settings"), this, &MenuBar::ConfigureHotkeys); + AddAction(options_menu, tr("&Graphics Settings"), this, &MenuBar::ConfigureGraphics); + AddAction(options_menu, tr("&Audio Settings"), this, &MenuBar::ConfigureAudio); + AddAction(options_menu, tr("&Controller Settings"), this, &MenuBar::ConfigureControllers); + AddAction(options_menu, tr("&Hotkey Settings"), this, &MenuBar::ConfigureHotkeys); } void MenuBar::AddHelpMenu() @@ -296,7 +301,7 @@ void MenuBar::AddHelpMenu() }); help_menu->addSeparator(); - help_menu->addAction(tr("&About"), this, &MenuBar::ShowAboutDialog); + AddAction(help_menu, tr("&About"), this, &MenuBar::ShowAboutDialog); } void MenuBar::AddGameListTypeSection(QMenu* view_menu) @@ -413,13 +418,13 @@ void MenuBar::AddMovieMenu() { auto* movie_menu = addMenu(tr("&Movie")); m_recording_start = - movie_menu->addAction(tr("Start Recording Input"), [this] { emit StartRecording(); }); + AddAction(movie_menu, tr("Start Recording Input"), this, [this] { emit StartRecording(); }); m_recording_play = - movie_menu->addAction(tr("Play Input Recording..."), [this] { emit PlayRecording(); }); - m_recording_stop = - movie_menu->addAction(tr("Stop Playing/Recording Input"), [this] { emit StopRecording(); }); + AddAction(movie_menu, tr("Play Input Recording..."), this, [this] { emit PlayRecording(); }); + m_recording_stop = AddAction(movie_menu, tr("Stop Playing/Recording Input"), this, + [this] { emit StopRecording(); }); m_recording_export = - movie_menu->addAction(tr("Export Recording..."), [this] { emit ExportRecording(); }); + AddAction(movie_menu, tr("Export Recording..."), this, [this] { emit ExportRecording(); }); m_recording_start->setEnabled(false); m_recording_play->setEnabled(false); diff --git a/Source/Core/DolphinQt2/QtUtils/ActionHelper.h b/Source/Core/DolphinQt2/QtUtils/ActionHelper.h new file mode 100644 index 0000000000..61d200d5ad --- /dev/null +++ b/Source/Core/DolphinQt2/QtUtils/ActionHelper.h @@ -0,0 +1,22 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include + +// Since we have to support Qt < 5.6, we need our own implementation of addAction(QString& +// text,QObject*,PointerToMemberFunction); +template +QAction* AddAction(ParentClass* parent, const QString& text, const RecieverClass* receiver, + Func slot, const QKeySequence& shortcut = 0) +{ + QAction* action = parent->addAction(text); + action->setShortcut(shortcut); + action->connect(action, &QAction::triggered, receiver, slot); + + return action; +} diff --git a/Source/Core/DolphinQt2/ToolBar.cpp b/Source/Core/DolphinQt2/ToolBar.cpp index 19a12b467b..0ea284a272 100644 --- a/Source/Core/DolphinQt2/ToolBar.cpp +++ b/Source/Core/DolphinQt2/ToolBar.cpp @@ -4,6 +4,7 @@ #include +#include "DolphinQt2/QtUtils/ActionHelper.h" #include "DolphinQt2/Resources.h" #include "DolphinQt2/Settings.h" #include "DolphinQt2/ToolBar.h" @@ -60,33 +61,33 @@ void ToolBar::EmulationStopped() void ToolBar::MakeActions() { constexpr int button_width = 65; - m_open_action = addAction(tr("Open"), this, &ToolBar::OpenPressed); + m_open_action = AddAction(this, tr("Open"), this, &ToolBar::OpenPressed); widgetForAction(m_open_action)->setMinimumWidth(button_width); - m_play_action = addAction(tr("Play"), this, &ToolBar::PlayPressed); + m_play_action = AddAction(this, tr("Play"), this, &ToolBar::PlayPressed); widgetForAction(m_play_action)->setMinimumWidth(button_width); - m_pause_action = addAction(tr("Pause"), this, &ToolBar::PausePressed); + m_pause_action = AddAction(this, tr("Pause"), this, &ToolBar::PausePressed); widgetForAction(m_pause_action)->setMinimumWidth(button_width); - m_stop_action = addAction(tr("Stop"), this, &ToolBar::StopPressed); + m_stop_action = AddAction(this, tr("Stop"), this, &ToolBar::StopPressed); widgetForAction(m_stop_action)->setMinimumWidth(button_width); - m_fullscreen_action = addAction(tr("FullScr"), this, &ToolBar::FullScreenPressed); + m_fullscreen_action = AddAction(this, tr("FullScr"), this, &ToolBar::FullScreenPressed); widgetForAction(m_fullscreen_action)->setMinimumWidth(button_width); - m_screenshot_action = addAction(tr("ScrShot"), this, &ToolBar::ScreenShotPressed); + m_screenshot_action = AddAction(this, tr("ScrShot"), this, &ToolBar::ScreenShotPressed); widgetForAction(m_screenshot_action)->setMinimumWidth(button_width); addSeparator(); - m_config_action = addAction(tr("Config"), this, &ToolBar::SettingsPressed); + m_config_action = AddAction(this, tr("Config"), this, &ToolBar::SettingsPressed); widgetForAction(m_config_action)->setMinimumWidth(button_width); - m_graphics_action = addAction(tr("Graphics"), this, &ToolBar::GraphicsPressed); + m_graphics_action = AddAction(this, tr("Graphics"), this, &ToolBar::GraphicsPressed); widgetForAction(m_graphics_action)->setMinimumWidth(button_width); - m_controllers_action = addAction(tr("Controllers"), this, &ToolBar::ControllersPressed); + m_controllers_action = AddAction(this, tr("Controllers"), this, &ToolBar::ControllersPressed); widgetForAction(m_controllers_action)->setMinimumWidth(button_width); m_controllers_action->setEnabled(true); }