diff options
Diffstat (limited to 'launcher/ui')
-rw-r--r-- | launcher/ui/MainWindow.cpp | 673 | ||||
-rw-r--r-- | launcher/ui/MainWindow.h | 2 |
2 files changed, 279 insertions, 396 deletions
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 1c694484..27763387 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -247,38 +247,20 @@ public: QMenuBar *menuBar = nullptr; QMenu *fileMenu; QMenu *editMenu; + QMenu *viewMenu; QMenu *profileMenu; - QAction *newAct; - QAction *openAct; - QAction *openOfflineAct; - QAction *editInstanceAct; - QAction *editNotesAct; - QAction *editModsAct; - QAction *editWorldsAct; - QAction *manageScreenshotsAct; - QAction *changeGroupAct; - QAction *openMCFolderAct; - QAction *openConfigFolderAct; - QAction *openInstanceFolderAct; - QAction *exportInstanceAct; - QAction *deleteInstanceAct; - QAction *duplicateInstanceAct; - QAction *closeAct; - QAction *undoAct; - QAction *redoAct; - QAction *cutAct; - QAction *copyAct; - QAction *pasteAct; - QAction *selectAllAct; - QAction *manageAccountAct; - QAction *aboutAct; - QAction *settingsAct; - QAction *wikiAct; - QAction *newsAct; - QAction *reportBugAct; - QAction *matrixAct; - QAction *discordAct; - QAction *redditAct; + + QAction *actionCloseWindow; + + QAction *actionUndo; + QAction *actionRedo; + QAction *actionCut; + QAction *actionCopy; + QAction *actionPaste; + QAction *actionSelectAll; + + QAction *actionWiki; + QAction *actionNewsMenuBar; TranslatedToolbar mainToolBar; TranslatedToolbar instanceToolBar; @@ -290,12 +272,12 @@ public: { if(m_kill) { - actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Kill")); + actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Kill")); actionLaunchInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Kill the running instance")); } else { - actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Launch")); + actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Launch")); actionLaunchInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Launch the selected instance.")); } actionLaunchInstance.retranslate(); @@ -306,29 +288,16 @@ public: updateLaunchAction(); } - void createMainToolbar(QMainWindow *MainWindow) + void createMainToolbarActions(QMainWindow *MainWindow) { - mainToolBar = TranslatedToolbar(MainWindow); - mainToolBar->setVisible(menuBar->isNativeMenuBar() || !APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool()); - mainToolBar->setObjectName(QStringLiteral("mainToolBar")); - mainToolBar->setMovable(true); - mainToolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); - mainToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - mainToolBar->setFloatable(false); - mainToolBar.setWindowTitleId(QT_TRANSLATE_NOOP("MainWindow", "Main Toolbar")); - actionAddInstance = TranslatedAction(MainWindow); actionAddInstance->setObjectName(QStringLiteral("actionAddInstance")); actionAddInstance->setIcon(APPLICATION->getThemedIcon("new")); - actionAddInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Add Instance")); + actionAddInstance->setIconVisibleInMenu(false); + actionAddInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Add Instanc&e...")); actionAddInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Add a new instance.")); + actionAddInstance->setShortcut(QKeySequence::New); all_actions.append(&actionAddInstance); - mainToolBar->addAction(actionAddInstance); - - mainToolBar->addSeparator(); - - foldersMenu = new QMenu(MainWindow); - foldersMenu->setToolTipsVisible(true); actionViewInstanceFolder = TranslatedAction(MainWindow); actionViewInstanceFolder->setObjectName(QStringLiteral("actionViewInstanceFolder")); @@ -336,7 +305,6 @@ public: actionViewInstanceFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Instance Folder")); actionViewInstanceFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the instance folder in a file browser.")); all_actions.append(&actionViewInstanceFolder); - foldersMenu->addAction(actionViewInstanceFolder); actionViewCentralModsFolder = TranslatedAction(MainWindow); actionViewCentralModsFolder->setObjectName(QStringLiteral("actionViewCentralModsFolder")); @@ -344,10 +312,16 @@ public: actionViewCentralModsFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Central Mods Folder")); actionViewCentralModsFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the central mods folder in a file browser.")); all_actions.append(&actionViewCentralModsFolder); + + foldersMenu = new QMenu(MainWindow); + foldersMenu->setTitle(tr("F&olders")); + foldersMenu->setToolTipsVisible(true); + + foldersMenu->addAction(actionViewInstanceFolder); foldersMenu->addAction(actionViewCentralModsFolder); foldersMenuButton = TranslatedToolButton(MainWindow); - foldersMenuButton.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Folders")); + foldersMenuButton.setTextId(QT_TRANSLATE_NOOP("MainWindow", "F&olders")); foldersMenuButton.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open one of the folders shared between instances.")); foldersMenuButton->setMenu(foldersMenu); foldersMenuButton->setPopupMode(QToolButton::InstantPopup); @@ -355,115 +329,153 @@ public: foldersMenuButton->setIcon(APPLICATION->getThemedIcon("viewfolder")); foldersMenuButton->setFocusPolicy(Qt::NoFocus); all_toolbuttons.append(&foldersMenuButton); - QWidgetAction* foldersButtonAction = new QWidgetAction(MainWindow); - foldersButtonAction->setDefaultWidget(foldersMenuButton); - mainToolBar->addAction(foldersButtonAction); actionSettings = TranslatedAction(MainWindow); actionSettings->setObjectName(QStringLiteral("actionSettings")); actionSettings->setIcon(APPLICATION->getThemedIcon("settings")); actionSettings->setMenuRole(QAction::PreferencesRole); - actionSettings.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Settings")); + actionSettings.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Settings...")); actionSettings.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change settings.")); + actionSettings->setShortcut(QKeySequence::Preferences); all_actions.append(&actionSettings); - mainToolBar->addAction(actionSettings); - - helpMenu = new QMenu(MainWindow); - helpMenu->setToolTipsVisible(true); if (!BuildConfig.BUG_TRACKER_URL.isEmpty()) { actionReportBug = TranslatedAction(MainWindow); actionReportBug->setObjectName(QStringLiteral("actionReportBug")); actionReportBug->setIcon(APPLICATION->getThemedIcon("bug")); - actionReportBug.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Report a Bug")); + actionReportBug.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Report a &Bug...")); actionReportBug.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the bug tracker to report a bug with %1.")); all_actions.append(&actionReportBug); - helpMenu->addAction(actionReportBug); } - + if(!BuildConfig.MATRIX_URL.isEmpty()) { actionMATRIX = TranslatedAction(MainWindow); actionMATRIX->setObjectName(QStringLiteral("actionMATRIX")); actionMATRIX->setIcon(APPLICATION->getThemedIcon("matrix")); - actionMATRIX.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Matrix space")); + actionMATRIX.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Matrix Space")); actionMATRIX.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open %1 Matrix space")); all_actions.append(&actionMATRIX); - helpMenu->addAction(actionMATRIX); } if (!BuildConfig.DISCORD_URL.isEmpty()) { actionDISCORD = TranslatedAction(MainWindow); actionDISCORD->setObjectName(QStringLiteral("actionDISCORD")); actionDISCORD->setIcon(APPLICATION->getThemedIcon("discord")); - actionDISCORD.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Discord guild")); + actionDISCORD.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Discord Guild")); actionDISCORD.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open %1 Discord guild.")); all_actions.append(&actionDISCORD); - helpMenu->addAction(actionDISCORD); } if (!BuildConfig.SUBREDDIT_URL.isEmpty()) { actionREDDIT = TranslatedAction(MainWindow); actionREDDIT->setObjectName(QStringLiteral("actionREDDIT")); actionREDDIT->setIcon(APPLICATION->getThemedIcon("reddit-alien")); - actionREDDIT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Subreddit")); + actionREDDIT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Sub&reddit")); actionREDDIT.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open %1 subreddit.")); all_actions.append(&actionREDDIT); - helpMenu->addAction(actionREDDIT); } actionAbout = TranslatedAction(MainWindow); actionAbout->setObjectName(QStringLiteral("actionAbout")); actionAbout->setIcon(APPLICATION->getThemedIcon("about")); actionAbout->setMenuRole(QAction::AboutRole); - actionAbout.setTextId(QT_TRANSLATE_NOOP("MainWindow", "About %1")); + actionAbout.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&About %1")); actionAbout.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View information about %1.")); all_actions.append(&actionAbout); - helpMenu->addAction(actionAbout); - - helpMenuButton = TranslatedToolButton(MainWindow); - helpMenuButton.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Help")); - helpMenuButton.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Get help with %1 or Minecraft.")); - helpMenuButton->setMenu(helpMenu); - helpMenuButton->setPopupMode(QToolButton::InstantPopup); - helpMenuButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - helpMenuButton->setIcon(APPLICATION->getThemedIcon("help")); - helpMenuButton->setFocusPolicy(Qt::NoFocus); - all_toolbuttons.append(&helpMenuButton); - QWidgetAction* helpButtonAction = new QWidgetAction(MainWindow); - helpButtonAction->setDefaultWidget(helpMenuButton); - mainToolBar->addAction(helpButtonAction); if(BuildConfig.UPDATER_ENABLED) { actionCheckUpdate = TranslatedAction(MainWindow); actionCheckUpdate->setObjectName(QStringLiteral("actionCheckUpdate")); actionCheckUpdate->setIcon(APPLICATION->getThemedIcon("checkupdate")); - actionCheckUpdate.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Update")); + actionCheckUpdate.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Update...")); actionCheckUpdate.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Check for new updates for %1.")); + actionCheckUpdate->setMenuRole(QAction::ApplicationSpecificRole); all_actions.append(&actionCheckUpdate); - mainToolBar->addAction(actionCheckUpdate); } - mainToolBar->addSeparator(); - actionCAT = TranslatedAction(MainWindow); actionCAT->setObjectName(QStringLiteral("actionCAT")); actionCAT->setCheckable(true); actionCAT->setIcon(APPLICATION->getThemedIcon("cat")); - actionCAT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Meow")); + actionCAT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Meow")); actionCAT.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "It's a fluffy kitty :3")); actionCAT->setPriority(QAction::LowPriority); all_actions.append(&actionCAT); - mainToolBar->addAction(actionCAT); // profile menu and its actions actionManageAccounts = TranslatedAction(MainWindow); actionManageAccounts->setObjectName(QStringLiteral("actionManageAccounts")); - actionManageAccounts.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Manage Accounts")); + actionManageAccounts.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Manage Accounts...")); // FIXME: no tooltip! actionManageAccounts->setCheckable(false); actionManageAccounts->setIcon(APPLICATION->getThemedIcon("accounts")); all_actions.append(&actionManageAccounts); + } + + void createMainToolbar(QMainWindow *MainWindow) + { + mainToolBar = TranslatedToolbar(MainWindow); + mainToolBar->setVisible(menuBar->isNativeMenuBar() || !APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool()); + mainToolBar->setObjectName(QStringLiteral("mainToolBar")); + mainToolBar->setMovable(true); + mainToolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); + mainToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + mainToolBar->setFloatable(false); + mainToolBar.setWindowTitleId(QT_TRANSLATE_NOOP("MainWindow", "Main Toolbar")); + + mainToolBar->addAction(actionAddInstance); + + mainToolBar->addSeparator(); + + QWidgetAction* foldersButtonAction = new QWidgetAction(MainWindow); + foldersButtonAction->setDefaultWidget(foldersMenuButton); + mainToolBar->addAction(foldersButtonAction); + + mainToolBar->addAction(actionSettings); + + helpMenu = new QMenu(MainWindow); + helpMenu->setToolTipsVisible(true); + + if (!BuildConfig.BUG_TRACKER_URL.isEmpty()) { + helpMenu->addAction(actionReportBug); + } + + if(!BuildConfig.MATRIX_URL.isEmpty()) { + helpMenu->addAction(actionMATRIX); + } + + if (!BuildConfig.DISCORD_URL.isEmpty()) { + helpMenu->addAction(actionDISCORD); + } + + if (!BuildConfig.SUBREDDIT_URL.isEmpty()) { + helpMenu->addAction(actionREDDIT); + } + + helpMenu->addAction(actionAbout); + + helpMenuButton = TranslatedToolButton(MainWindow); + helpMenuButton.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Help")); + helpMenuButton.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Get help with %1 or Minecraft.")); + helpMenuButton->setMenu(helpMenu); + helpMenuButton->setPopupMode(QToolButton::InstantPopup); + helpMenuButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + helpMenuButton->setIcon(APPLICATION->getThemedIcon("help")); + helpMenuButton->setFocusPolicy(Qt::NoFocus); + all_toolbuttons.append(&helpMenuButton); + QWidgetAction* helpButtonAction = new QWidgetAction(MainWindow); + helpButtonAction->setDefaultWidget(helpMenuButton); + mainToolBar->addAction(helpButtonAction); + + if(BuildConfig.UPDATER_ENABLED) + { + mainToolBar->addAction(actionCheckUpdate); + } + + mainToolBar->addSeparator(); + + mainToolBar->addAction(actionCAT); all_toolbars.append(&mainToolBar); MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar); @@ -475,233 +487,132 @@ public: menuBar->setVisible(APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool()); createMenuActions(MainWindow); - // TODO: only enable options while an instance is selected (if applicable) fileMenu = menuBar->addMenu(tr("&File")); - fileMenu->addAction(newAct); - fileMenu->addAction(openAct); - fileMenu->addAction(openOfflineAct); - fileMenu->addAction(closeAct); + fileMenu->addAction(actionAddInstance); + fileMenu->addAction(actionLaunchInstance); + fileMenu->addAction(actionLaunchInstanceOffline); + fileMenu->addAction(actionCloseWindow); fileMenu->addSeparator(); - fileMenu->addAction(editInstanceAct); - fileMenu->addAction(editNotesAct); - fileMenu->addAction(editModsAct); - fileMenu->addAction(editWorldsAct); - fileMenu->addAction(manageScreenshotsAct); - fileMenu->addAction(changeGroupAct); + fileMenu->addAction(actionEditInstance); + fileMenu->addAction(actionEditInstNotes); + fileMenu->addAction(actionMods); + fileMenu->addAction(actionWorlds); + fileMenu->addAction(actionScreenshots); + fileMenu->addAction(actionChangeInstGroup); fileMenu->addSeparator(); - fileMenu->addAction(openMCFolderAct); - fileMenu->addAction(openConfigFolderAct); - fileMenu->addAction(openInstanceFolderAct); + fileMenu->addAction(actionViewSelectedMCFolder); + fileMenu->addAction(actionConfig_Folder); + fileMenu->addAction(actionViewSelectedInstFolder); fileMenu->addSeparator(); - fileMenu->addAction(exportInstanceAct); - fileMenu->addAction(deleteInstanceAct); - fileMenu->addAction(duplicateInstanceAct); + fileMenu->addAction(actionExportInstance); + fileMenu->addAction(actionDeleteInstance); + fileMenu->addAction(actionCopyInstance); fileMenu->addSeparator(); // TODO: functionality for edit actions. They're intended to be used where you can type text, e.g. notes. editMenu = menuBar->addMenu(tr("&Edit")); - editMenu->addAction(undoAct); - editMenu->addAction(redoAct); + editMenu->addAction(actionUndo); + editMenu->addAction(actionRedo); editMenu->addSeparator(); - editMenu->addAction(cutAct); - editMenu->addAction(copyAct); - editMenu->addAction(pasteAct); - editMenu->addAction(selectAllAct); + editMenu->addAction(actionCut); + editMenu->addAction(actionCopy); + editMenu->addAction(actionPaste); + editMenu->addAction(actionSelectAll); editMenu->addSeparator(); - editMenu->addAction(settingsAct); + editMenu->addAction(actionSettings); + + viewMenu = menuBar->addMenu(tr("&View")); + viewMenu->addAction(actionCAT); + viewMenu->addSeparator(); + + menuBar->addMenu(foldersMenu); profileMenu = menuBar->addMenu(tr("&Profiles")); - profileMenu->addAction(manageAccountAct); + profileMenu->addAction(actionManageAccounts); helpMenu = menuBar->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(wikiAct); - helpMenu->addAction(newsAct); + helpMenu->addAction(actionAbout); + helpMenu->addAction(actionWiki); + helpMenu->addAction(actionNewsMenuBar); helpMenu->addSeparator(); - helpMenu->addAction(reportBugAct); - helpMenu->addAction(matrixAct); - helpMenu->addAction(discordAct); - helpMenu->addAction(redditAct); + if (!BuildConfig.BUG_TRACKER_URL.isEmpty()) + helpMenu->addAction(actionReportBug); + if (!BuildConfig.MATRIX_URL.isEmpty()) + helpMenu->addAction(actionMATRIX); + if (!BuildConfig.DISCORD_URL.isEmpty()) + helpMenu->addAction(actionDISCORD); + if (!BuildConfig.SUBREDDIT_URL.isEmpty()) + helpMenu->addAction(actionREDDIT); + helpMenu->addSeparator(); + if(BuildConfig.UPDATER_ENABLED) + helpMenu->addAction(actionCheckUpdate); MainWindow->setMenuBar(menuBar); } - // If a keyboard shortcut is changed here, it must be changed below in keyPressEvent as well void createMenuActions(MainWindow *MainWindow) { - newAct = new QAction(tr("&New Instance..."), MainWindow); - newAct->setShortcuts(QKeySequence::New); - newAct->setStatusTip(tr("Create a new instance")); - connect(newAct, &QAction::triggered, MainWindow, &MainWindow::on_actionAddInstance_triggered); - - openAct = new QAction(tr("&Launch"), MainWindow); - openAct->setShortcuts(QKeySequence::Open); - openAct->setStatusTip(tr("Launch the selected instance")); - openAct->setEnabled(false); - connect(openAct, &QAction::triggered, MainWindow, &MainWindow::on_actionLaunchInstance_triggered); - - openOfflineAct = new QAction(tr("Launch &Offline"), MainWindow); - openOfflineAct->setShortcut(QKeySequence(tr("Ctrl+Shift+O"))); - openOfflineAct->setStatusTip(tr("Launch the selected instance in offline mode")); - openOfflineAct->setEnabled(false); - connect(openOfflineAct, &QAction::triggered, MainWindow, &MainWindow::on_actionLaunchInstanceOffline_triggered); - - editInstanceAct = new QAction(tr("Edit Inst&ance..."), MainWindow); - editInstanceAct->setShortcut(QKeySequence(tr("Ctrl+I"))); - editInstanceAct->setStatusTip(tr("Edit the selected instance")); - editInstanceAct->setEnabled(false); - connect(editInstanceAct, &QAction::triggered, MainWindow, &MainWindow::on_actionEditInstance_triggered); - - editNotesAct = new QAction(tr("E&dit Notes..."), MainWindow); - editNotesAct->setStatusTip(tr("Edit the selected instance's notes")); - editNotesAct->setEnabled(false); - connect(editNotesAct, &QAction::triggered, MainWindow, &MainWindow::on_actionEditInstNotes_triggered); - - editModsAct = new QAction(tr("View &Mods"), MainWindow); - editModsAct->setStatusTip(tr("View the selected instance's mods")); - editModsAct->setEnabled(false); - connect(editModsAct, &QAction::triggered, MainWindow, &MainWindow::on_actionMods_triggered); - - editWorldsAct = new QAction(tr("&View Worlds"), MainWindow); - editWorldsAct->setStatusTip(tr("View the selected instance's worlds")); - editWorldsAct->setEnabled(false); - connect(editWorldsAct, &QAction::triggered, MainWindow, &MainWindow::on_actionWorlds_triggered); - - manageScreenshotsAct = new QAction(tr("Manage &Screenshots"), MainWindow); - manageScreenshotsAct->setStatusTip(tr("Manage the selected instance's screenshots")); - manageScreenshotsAct->setEnabled(false); - connect(manageScreenshotsAct, &QAction::triggered, MainWindow, &MainWindow::on_actionScreenshots_triggered); - - changeGroupAct = new QAction(tr("&Change Group..."), MainWindow); - changeGroupAct->setShortcut(QKeySequence(tr("Ctrl+G"))); - changeGroupAct->setStatusTip(tr("Change the selected instance's group")); - changeGroupAct->setEnabled(false); - connect(changeGroupAct, &QAction::triggered, MainWindow, &MainWindow::on_actionChangeInstGroup_triggered); - - openMCFolderAct = new QAction(tr("Open Minec&raft Folder"), MainWindow); - openMCFolderAct->setShortcut(QKeySequence(tr("Ctrl+M"))); - openMCFolderAct->setStatusTip(tr("Open the selected instance's Minecraft folder")); - openMCFolderAct->setEnabled(false); - connect(openMCFolderAct, &QAction::triggered, MainWindow, &MainWindow::on_actionViewSelectedMCFolder_triggered); - - openConfigFolderAct = new QAction(tr("&Open Confi&g Folder"), MainWindow); - openConfigFolderAct->setStatusTip(tr("Open the selected instance's config folder")); - openConfigFolderAct->setEnabled(false); - connect(openConfigFolderAct, &QAction::triggered, MainWindow, &MainWindow::on_actionConfig_Folder_triggered); - - openInstanceFolderAct = new QAction(tr("&Open &Instance Folder"), MainWindow); - openInstanceFolderAct->setStatusTip(tr("Open the selected instance's main folder")); - openInstanceFolderAct->setEnabled(false); - connect(openInstanceFolderAct, &QAction::triggered, MainWindow, &MainWindow::on_actionViewInstanceFolder_triggered); - - exportInstanceAct = new QAction(tr("E&xport Instance..."), MainWindow); - exportInstanceAct->setShortcut(QKeySequence(tr("Ctrl+E"))); - exportInstanceAct->setStatusTip(tr("Export the selected instance")); - exportInstanceAct->setEnabled(false); - connect(exportInstanceAct, &QAction::triggered, MainWindow, &MainWindow::on_actionExportInstance_triggered); - - deleteInstanceAct = new QAction(tr("Dele&te Instance..."), MainWindow); - deleteInstanceAct->setShortcuts({QKeySequence(tr("Backspace")), QKeySequence::Delete}); - deleteInstanceAct->setStatusTip(tr("Delete the selected instance")); - deleteInstanceAct->setEnabled(false); - connect(deleteInstanceAct, &QAction::triggered, MainWindow, &MainWindow::on_actionDeleteInstance_triggered); - - duplicateInstanceAct = new QAction(tr("Cop&y Instance..."), MainWindow); - duplicateInstanceAct->setShortcut(QKeySequence(tr("Ctrl+D"))); - duplicateInstanceAct->setStatusTip(tr("Duplicate the selected instance")); - duplicateInstanceAct->setEnabled(false); - connect(duplicateInstanceAct, &QAction::triggered, MainWindow, &MainWindow::on_actionCopyInstance_triggered); - - closeAct = new QAction(tr("Close &Window"), MainWindow); - closeAct->setShortcut(QKeySequence::Close); - closeAct->setStatusTip(tr("Close the current window")); - connect(closeAct, &QAction::triggered, APPLICATION, &Application::closeCurrentWindow); - - undoAct = new QAction(tr("&Undo"), MainWindow); - undoAct->setShortcuts(QKeySequence::Undo); - undoAct->setStatusTip(tr("Undo")); - undoAct->setEnabled(false); - - redoAct = new QAction(tr("&Redo"), MainWindow); - redoAct->setShortcuts(QKeySequence::Redo); - redoAct->setStatusTip(tr("Redo")); - redoAct->setEnabled(false); - - cutAct = new QAction(tr("Cu&t"), MainWindow); - cutAct->setShortcuts(QKeySequence::Cut); - cutAct->setStatusTip(tr("Cut")); - cutAct->setEnabled(false); - - copyAct = new QAction(tr("&Copy"), MainWindow); - copyAct->setShortcuts(QKeySequence::Copy); - copyAct->setStatusTip(tr("Copy")); - copyAct->setEnabled(false); - - pasteAct = new QAction(tr("&Paste"), MainWindow); - pasteAct->setShortcuts(QKeySequence::Paste); - pasteAct->setStatusTip(tr("Paste")); - pasteAct->setEnabled(false); - - selectAllAct = new QAction(tr("Select &All"), MainWindow); - selectAllAct->setShortcuts(QKeySequence::SelectAll); - selectAllAct->setStatusTip(tr("Select all")); - selectAllAct->setEnabled(false); - - settingsAct = new QAction(tr("&Settings..."), MainWindow); - settingsAct->setShortcut(QKeySequence::Preferences); - settingsAct->setStatusTip(tr("Change %1 settings").arg(BuildConfig.LAUNCHER_NAME)); - connect(settingsAct, &QAction::triggered, MainWindow, &MainWindow::on_actionSettings_triggered); - - manageAccountAct = new QAction(tr("&Manage Accounts..."), MainWindow); - manageAccountAct->setStatusTip(tr("Open account manager")); - connect(manageAccountAct, &QAction::triggered, MainWindow, &MainWindow::on_actionManageAccounts_triggered); - - aboutAct = new QAction(tr("&About"), MainWindow); - aboutAct->setStatusTip(tr("About %1").arg(BuildConfig.LAUNCHER_NAME)); - connect(aboutAct, &QAction::triggered, MainWindow, &MainWindow::on_actionAbout_triggered); - - wikiAct = new QAction(tr("%1 He&lp").arg(BuildConfig.LAUNCHER_NAME), MainWindow); - wikiAct->setStatusTip(tr("Open %1's wiki").arg(BuildConfig.LAUNCHER_NAME)); - connect(wikiAct, &QAction::triggered, MainWindow, &MainWindow::on_actionOpenWiki_triggered); - - newsAct = new QAction(tr("&%1 &News").arg(BuildConfig.LAUNCHER_NAME), MainWindow); - newsAct->setStatusTip(tr("Open %1's news").arg(BuildConfig.LAUNCHER_NAME)); - connect(newsAct, &QAction::triggered, MainWindow, &MainWindow::on_actionMoreNews_triggered); - - reportBugAct = new QAction(tr("Report &Bugs..."), MainWindow); - reportBugAct->setStatusTip(tr("Report bugs to the developers")); - connect(reportBugAct, &QAction::triggered, MainWindow, &MainWindow::on_actionReportBug_triggered); - - matrixAct = new QAction(tr("&Matrix"), MainWindow); - matrixAct->setStatusTip(tr("Open %1's Matrix space").arg(BuildConfig.LAUNCHER_NAME)); - connect(matrixAct, &QAction::triggered, MainWindow, &MainWindow::on_actionMATRIX_triggered); - - discordAct = new QAction(tr("&Discord"), MainWindow); - discordAct->setStatusTip(tr("Open %1's Discord guild").arg(BuildConfig.LAUNCHER_NAME)); - connect(discordAct, &QAction::triggered, MainWindow, &MainWindow::on_actionDISCORD_triggered); - - redditAct = new QAction(tr("&Reddit"), MainWindow); - redditAct->setStatusTip(tr("Open %1's subreddit").arg(BuildConfig.LAUNCHER_NAME)); - connect(redditAct, &QAction::triggered, MainWindow, &MainWindow::on_actionREDDIT_triggered); + actionCloseWindow = new QAction(tr("Close &Window"), MainWindow); + actionCloseWindow->setShortcut(QKeySequence::Close); + actionCloseWindow->setStatusTip(tr("Close the current window")); + connect(actionCloseWindow, &QAction::triggered, APPLICATION, &Application::closeCurrentWindow); + + actionUndo = new QAction(tr("&Undo"), MainWindow); + actionUndo->setShortcuts(QKeySequence::Undo); + actionUndo->setStatusTip(tr("Undo")); + actionUndo->setEnabled(false); + + actionRedo = new QAction(tr("&Redo"), MainWindow); + actionRedo->setShortcuts(QKeySequence::Redo); + actionRedo->setStatusTip(tr("Redo")); + actionRedo->setEnabled(false); + + actionCut = new QAction(tr("Cu&t"), MainWindow); + actionCut->setShortcuts(QKeySequence::Cut); + actionCut->setStatusTip(tr("Cut")); + actionCut->setEnabled(false); + + actionCopy = new QAction(tr("&Copy"), MainWindow); + actionCopy->setShortcuts(QKeySequence::Copy); + actionCopy->setStatusTip(tr("Copy")); + actionCopy->setEnabled(false); + + actionPaste = new QAction(tr("&Paste"), MainWindow); + actionPaste->setShortcuts(QKeySequence::Paste); + actionPaste->setStatusTip(tr("Paste")); + actionPaste->setEnabled(false); + + actionSelectAll = new QAction(tr("Select &All"), MainWindow); + actionSelectAll->setShortcuts(QKeySequence::SelectAll); + actionSelectAll->setStatusTip(tr("Select all")); + actionSelectAll->setEnabled(false); + + actionWiki = new QAction(tr("%1 He&lp").arg(BuildConfig.LAUNCHER_NAME), MainWindow); + actionWiki->setStatusTip(tr("Open the %1 wiki").arg(BuildConfig.LAUNCHER_NAME)); + connect(actionWiki, &QAction::triggered, MainWindow, &MainWindow::on_actionOpenWiki_triggered); + + actionNewsMenuBar = new QAction(tr("&%1 &News").arg(BuildConfig.LAUNCHER_NAME), MainWindow); + actionNewsMenuBar->setStatusTip(tr("Open the development blog to read more news about %1.").arg(BuildConfig.LAUNCHER_NAME)); + connect(actionNewsMenuBar, &QAction::triggered, MainWindow, &MainWindow::on_actionMoreNews_triggered); } // "Instance actions" are actions that require an instance to be selected (i.e. "new instance" is not here) - void setInstanceActionsEnabled(bool enabled) const - { - openAct->setEnabled(enabled); - openOfflineAct->setEnabled(enabled); - editInstanceAct->setEnabled(enabled); - editNotesAct->setEnabled(enabled); - editModsAct->setEnabled(enabled); - editWorldsAct->setEnabled(enabled); - manageScreenshotsAct->setEnabled(enabled); - changeGroupAct->setEnabled(enabled); - openMCFolderAct->setEnabled(enabled); - openConfigFolderAct->setEnabled(enabled); - openInstanceFolderAct->setEnabled(enabled); - exportInstanceAct->setEnabled(enabled); - deleteInstanceAct->setEnabled(enabled); - duplicateInstanceAct->setEnabled(enabled); + void setInstanceActionsEnabled(bool enabled) + { + actionLaunchInstance->setEnabled(enabled); + actionLaunchInstanceOffline->setEnabled(enabled); + actionEditInstance->setEnabled(enabled); + actionEditInstNotes->setEnabled(enabled); + actionMods->setEnabled(enabled); + actionWorlds->setEnabled(enabled); + actionScreenshots->setEnabled(enabled); + actionChangeInstGroup->setEnabled(enabled); + actionViewSelectedMCFolder->setEnabled(enabled); + actionConfig_Folder->setEnabled(enabled); + actionViewSelectedInstFolder->setEnabled(enabled); + actionExportInstance->setEnabled(enabled); + actionDeleteInstance->setEnabled(enabled); + actionCopyInstance->setEnabled(enabled); } void createStatusBar(QMainWindow *MainWindow) @@ -734,18 +645,8 @@ public: MainWindow->addToolBar(Qt::BottomToolBarArea, newsToolBar); } - void createInstanceToolbar(QMainWindow *MainWindow) + void createInstanceActions(QMainWindow *MainWindow) { - instanceToolBar = TranslatedToolbar(MainWindow); - instanceToolBar->setObjectName(QStringLiteral("instanceToolBar")); - // disabled until we have an instance selected - instanceToolBar->setEnabled(false); - instanceToolBar->setMovable(true); - instanceToolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); - instanceToolBar->setToolButtonStyle(Qt::ToolButtonTextOnly); - instanceToolBar->setFloatable(false); - instanceToolBar->setWindowTitle(QT_TRANSLATE_NOOP("MainWindow", "Instance Toolbar")); - // NOTE: not added to toolbar, but used for instance context menu (right click) actionChangeInstIcon = TranslatedAction(MainWindow); actionChangeInstIcon->setObjectName(QStringLiteral("actionChangeInstIcon")); @@ -760,7 +661,6 @@ public: changeIconButton->setIcon(APPLICATION->getThemedIcon("news")); changeIconButton->setToolTip(actionChangeInstIcon->toolTip()); changeIconButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - instanceToolBar->addWidget(changeIconButton); // NOTE: not added to toolbar, but used for instance context menu (right click) actionRenameInstance = TranslatedAction(MainWindow); @@ -774,74 +674,61 @@ public: renameButton->setObjectName(QStringLiteral("renameButton")); renameButton->setToolTip(actionRenameInstance->toolTip()); renameButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - instanceToolBar->addWidget(renameButton); - - instanceToolBar->addSeparator(); actionLaunchInstance = TranslatedAction(MainWindow); actionLaunchInstance->setObjectName(QStringLiteral("actionLaunchInstance")); all_actions.append(&actionLaunchInstance); - instanceToolBar->addAction(actionLaunchInstance); actionLaunchInstanceOffline = TranslatedAction(MainWindow); actionLaunchInstanceOffline->setObjectName(QStringLiteral("actionLaunchInstanceOffline")); - actionLaunchInstanceOffline.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Launch Offline")); + actionLaunchInstanceOffline.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Launch &Offline")); actionLaunchInstanceOffline.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Launch the selected instance in offline mode.")); all_actions.append(&actionLaunchInstanceOffline); - instanceToolBar->addAction(actionLaunchInstanceOffline); - - instanceToolBar->addSeparator(); actionEditInstance = TranslatedAction(MainWindow); actionEditInstance->setObjectName(QStringLiteral("actionEditInstance")); - actionEditInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Edit Instance")); + actionEditInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Edit Inst&ance...")); actionEditInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change the instance settings, mods and versions.")); + actionEditInstance->setShortcut(QKeySequence(tr("Ctrl+I"))); all_actions.append(&actionEditInstance); - instanceToolBar->addAction(actionEditInstance); actionEditInstNotes = TranslatedAction(MainWindow); actionEditInstNotes->setObjectName(QStringLiteral("actionEditInstNotes")); - actionEditInstNotes.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Edit Notes")); + actionEditInstNotes.setTextId(QT_TRANSLATE_NOOP("MainWindow", "E&dit Notes...")); actionEditInstNotes.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Edit the notes for the selected instance.")); all_actions.append(&actionEditInstNotes); - instanceToolBar->addAction(actionEditInstNotes); actionMods = TranslatedAction(MainWindow); actionMods->setObjectName(QStringLiteral("actionMods")); - actionMods.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Mods")); + actionMods.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View &Mods")); actionMods.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View the mods of this instance.")); all_actions.append(&actionMods); - instanceToolBar->addAction(actionMods); actionWorlds = TranslatedAction(MainWindow); actionWorlds->setObjectName(QStringLiteral("actionWorlds")); - actionWorlds.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Worlds")); + actionWorlds.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&View Worlds")); actionWorlds.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View the worlds of this instance.")); all_actions.append(&actionWorlds); - instanceToolBar->addAction(actionWorlds); actionScreenshots = TranslatedAction(MainWindow); actionScreenshots->setObjectName(QStringLiteral("actionScreenshots")); - actionScreenshots.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Manage Screenshots")); + actionScreenshots.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Manage &Screenshots")); actionScreenshots.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View and upload screenshots for this instance.")); all_actions.append(&actionScreenshots); - instanceToolBar->addAction(actionScreenshots); actionChangeInstGroup = TranslatedAction(MainWindow); actionChangeInstGroup->setObjectName(QStringLiteral("actionChangeInstGroup")); - actionChangeInstGroup.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Change Group")); + actionChangeInstGroup.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Change Group...")); actionChangeInstGroup.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change the selected instance's group.")); + actionChangeInstGroup->setShortcut(QKeySequence(tr("Ctrl+G"))); all_actions.append(&actionChangeInstGroup); - instanceToolBar->addAction(actionChangeInstGroup); - - instanceToolBar->addSeparator(); actionViewSelectedMCFolder = TranslatedAction(MainWindow); actionViewSelectedMCFolder->setObjectName(QStringLiteral("actionViewSelectedMCFolder")); - actionViewSelectedMCFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Minecraft Folder")); + actionViewSelectedMCFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Minec&raft Folder")); actionViewSelectedMCFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the selected instance's Minecraft folder in a file browser.")); + actionViewSelectedMCFolder->setShortcut(QKeySequence(tr("Ctrl+M"))); all_actions.append(&actionViewSelectedMCFolder); - instanceToolBar->addAction(actionViewSelectedMCFolder); /* actionViewSelectedModsFolder = TranslatedAction(MainWindow); @@ -849,45 +736,89 @@ public: actionViewSelectedModsFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Mods Folder")); actionViewSelectedModsFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the selected instance's mods folder in a file browser.")); all_actions.append(&actionViewSelectedModsFolder); - instanceToolBar->addAction(actionViewSelectedModsFolder); */ actionConfig_Folder = TranslatedAction(MainWindow); actionConfig_Folder->setObjectName(QStringLiteral("actionConfig_Folder")); - actionConfig_Folder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Config Folder")); + actionConfig_Folder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Confi&g Folder")); actionConfig_Folder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the instance's config folder.")); + // Qt on macOS is "smart" and will eat up this action when added to the menu bar because it starts with the word "config"... + // Docs: https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar + actionConfig_Folder->setMenuRole(QAction::NoRole); all_actions.append(&actionConfig_Folder); - instanceToolBar->addAction(actionConfig_Folder); actionViewSelectedInstFolder = TranslatedAction(MainWindow); actionViewSelectedInstFolder->setObjectName(QStringLiteral("actionViewSelectedInstFolder")); - actionViewSelectedInstFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Instance Folder")); + actionViewSelectedInstFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Instance Folder")); actionViewSelectedInstFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the selected instance's root folder in a file browser.")); all_actions.append(&actionViewSelectedInstFolder); - instanceToolBar->addAction(actionViewSelectedInstFolder); - - instanceToolBar->addSeparator(); actionExportInstance = TranslatedAction(MainWindow); actionExportInstance->setObjectName(QStringLiteral("actionExportInstance")); - actionExportInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Export Instance")); + actionExportInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "E&xport Instance...")); actionExportInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Export the selected instance as a zip file.")); + actionExportInstance->setShortcut(QKeySequence(tr("Ctrl+E"))); all_actions.append(&actionExportInstance); - instanceToolBar->addAction(actionExportInstance); actionDeleteInstance = TranslatedAction(MainWindow); actionDeleteInstance->setObjectName(QStringLiteral("actionDeleteInstance")); - actionDeleteInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Delete Instance")); + actionDeleteInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Dele&te Instance...")); actionDeleteInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Delete the selected instance.")); + actionDeleteInstance->setShortcuts({QKeySequence(tr("Backspace")), QKeySequence::Delete}); all_actions.append(&actionDeleteInstance); - instanceToolBar->addAction(actionDeleteInstance); actionCopyInstance = TranslatedAction(MainWindow); actionCopyInstance->setObjectName(QStringLiteral("actionCopyInstance")); actionCopyInstance->setIcon(APPLICATION->getThemedIcon("copy")); - actionCopyInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Copy Instance")); + actionCopyInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Cop&y Instance...")); actionCopyInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Copy the selected instance.")); + actionCopyInstance->setShortcut(QKeySequence(tr("Ctrl+D"))); all_actions.append(&actionCopyInstance); + + } + + void createInstanceToolbar(QMainWindow *MainWindow) + { + instanceToolBar = TranslatedToolbar(MainWindow); + instanceToolBar->setObjectName(QStringLiteral("instanceToolBar")); + // disabled until we have an instance selected + instanceToolBar->setEnabled(false); + instanceToolBar->setMovable(true); + instanceToolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); + instanceToolBar->setToolButtonStyle(Qt::ToolButtonTextOnly); + instanceToolBar->setFloatable(false); + instanceToolBar->setWindowTitle(QT_TRANSLATE_NOOP("MainWindow", "Instance Toolbar")); + + instanceToolBar->addWidget(changeIconButton); + instanceToolBar->addWidget(renameButton); + + instanceToolBar->addSeparator(); + + instanceToolBar->addAction(actionLaunchInstance); + instanceToolBar->addAction(actionLaunchInstanceOffline); + + instanceToolBar->addSeparator(); + + instanceToolBar->addAction(actionEditInstance); + instanceToolBar->addAction(actionEditInstNotes); + instanceToolBar->addAction(actionMods); + instanceToolBar->addAction(actionWorlds); + instanceToolBar->addAction(actionScreenshots); + instanceToolBar->addAction(actionChangeInstGroup); + + instanceToolBar->addSeparator(); + + instanceToolBar->addAction(actionViewSelectedMCFolder); + /* + instanceToolBar->addAction(actionViewSelectedModsFolder); + */ + instanceToolBar->addAction(actionConfig_Folder); + instanceToolBar->addAction(actionViewSelectedInstFolder); + + instanceToolBar->addSeparator(); + + instanceToolBar->addAction(actionExportInstance); + instanceToolBar->addAction(actionDeleteInstance); instanceToolBar->addAction(actionCopyInstance); all_toolbars.append(&instanceToolBar); @@ -907,6 +838,9 @@ public: MainWindow->setAccessibleName(BuildConfig.LAUNCHER_NAME); #endif + createMainToolbarActions(MainWindow); + createInstanceActions(MainWindow); + createMenuBar(dynamic_cast<class MainWindow *>(MainWindow)); createMainToolbar(MainWindow); @@ -1138,57 +1072,6 @@ void MainWindow::keyReleaseEvent(QKeyEvent *event) else QMainWindow::keyReleaseEvent(event); } - -// FIXME: This is a hack because keyboard shortcuts do nothing while menu bar is hidden on systems without native menu bar -// If a keyboard shortcut is changed above in `createMenuActions`, it must be changed here as well -void MainWindow::keyPressEvent(QKeyEvent *event) -{ - if(ui->menuBar->isVisible() || ui->menuBar->isNativeMenuBar()) - { - QMainWindow::keyPressEvent(event); - return; // let the menu bar handle the keyboard shortcuts - } - - if(event->modifiers().testFlag(Qt::ControlModifier)) - { - switch(event->key()) - { - case Qt::Key_N: - on_actionAddInstance_triggered(); - return; - case Qt::Key_O: - if(event->modifiers().testFlag(Qt::ShiftModifier)) - on_actionLaunchInstanceOffline_triggered(); - else - on_actionLaunchInstance_triggered(); - return; - case Qt::Key_I: - on_actionEditInstance_triggered(); - return; - case Qt::Key_G: - on_actionChangeInstGroup_triggered(); - return; - case Qt::Key_M: - on_actionViewSelectedMCFolder_triggered(); - return; - case Qt::Key_E: - on_actionExportInstance_triggered(); - return; - case Qt::Key_Delete: - on_actionDeleteInstance_triggered(); - return; - case Qt::Key_D: - on_actionCopyInstance_triggered(); - return; - case Qt::Key_W: - close(); - return; - // Text editing shortcuts are handled by the OS, so they do not need to be implemented here again - default: - return; - } - } -} #endif void MainWindow::retranslateUi() @@ -1333,7 +1216,9 @@ void MainWindow::updateToolsMenu() } QAction *normalLaunch = launchMenu->addAction(tr("Launch")); + normalLaunch->setShortcut(QKeySequence::Open); QAction *normalLaunchOffline = launchOfflineMenu->addAction(tr("Launch Offline")); + normalLaunchOffline->setShortcut(QKeySequence(tr("Ctrl+Shift+O"))); connect(normalLaunch, &QAction::triggered, [this]() { APPLICATION->launch(m_selectedInstance, true); @@ -1454,7 +1339,7 @@ void MainWindow::repopulateAccountsMenu() accountMenu->addSeparator(); ui->profileMenu->addSeparator(); accountMenu->addAction(ui->actionManageAccounts); - ui->profileMenu->addAction(ui->manageAccountAct); + ui->profileMenu->addAction(ui->actionManageAccounts); } void MainWindow::updatesAllowedChanged(bool allowed) diff --git a/launcher/ui/MainWindow.h b/launcher/ui/MainWindow.h index 5424a4a9..2032acba 100644 --- a/launcher/ui/MainWindow.h +++ b/launcher/ui/MainWindow.h @@ -190,8 +190,6 @@ private slots: #ifndef Q_OS_MAC void keyReleaseEvent(QKeyEvent *event) override; - - void keyPressEvent(QKeyEvent *event) override; #endif private: |