diff options
author | Serhii Moroz <frost.asm@gmail.com> | 2016-07-22 09:12:27 +0300 |
---|---|---|
committer | Serhii Moroz <frost.asm@gmail.com> | 2016-07-28 15:04:55 +0000 |
commit | cda7a3188f86f6a506225a679e123ee72b8c4f76 (patch) | |
tree | 5cf678edff77ad90b39d8f22b1a95e490fa917c0 /src/plugins/welcome/welcomeplugin.cpp | |
parent | 38f72855b61e104d2c597141756d140668f5b20a (diff) |
Welcome: Added keyboard hotkeys to open sessions and recent projects
Change-Id: Ia7c1ec11b2fa3e4b61b842fd1e9e4df7aa6f7be3
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@theqtcompany.com>
Diffstat (limited to 'src/plugins/welcome/welcomeplugin.cpp')
-rw-r--r-- | src/plugins/welcome/welcomeplugin.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index 43f3df9352..f77b632374 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -27,6 +27,9 @@ #include <extensionsystem/pluginmanager.h> +#include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/actionmanager/command.h> + #include <coreplugin/coreconstants.h> #include <coreplugin/icore.h> #include <coreplugin/imode.h> @@ -125,6 +128,8 @@ class WelcomeMode : public IMode { Q_OBJECT Q_PROPERTY(int activePlugin READ activePlugin WRITE setActivePlugin NOTIFY activePluginChanged) + Q_PROPERTY(QStringList recentProjectsShortcuts READ recentProjectsShortcuts NOTIFY recentProjectsShortcutsChanged) + Q_PROPERTY(QStringList sessionsShortcuts READ sessionsShortcuts NOTIFY sessionsShortcutsChanged) public: WelcomeMode(); ~WelcomeMode(); @@ -133,6 +138,9 @@ public: void initPlugins(); int activePlugin() const { return m_activePlugin; } + QStringList recentProjectsShortcuts() const { return m_recentProjectsShortcuts; } + QStringList sessionsShortcuts() const { return m_sessionsShortcuts; } + public slots: void setActivePlugin(int pos) { @@ -145,12 +153,19 @@ public slots: signals: void activePluginChanged(int pos); + void openSessionTriggered(int index); + void openRecentProjectTriggered(int index); + + void recentProjectsShortcutsChanged(QStringList recentProjectsShortcuts); + void sessionsShortcutsChanged(QStringList sessionsShortcuts); + private: void welcomePluginAdded(QObject*); void sceneGraphError(QQuickWindow::SceneGraphError, const QString &message); void facilitateQml(QQmlEngine *engine); void addPages(const QList<IWelcomePage *> &pages); void applyTheme(); + void addKeyboardShortcuts(); QWidget *m_modeWidget; QuickContainer *m_welcomePage; @@ -158,6 +173,8 @@ private: QList<IWelcomePage *> m_pluginList; int m_activePlugin; QQmlPropertyMap m_themeProperties; + QStringList m_recentProjectsShortcuts; + QStringList m_sessionsShortcuts; }; WelcomeMode::WelcomeMode() @@ -208,6 +225,8 @@ WelcomeMode::WelcomeMode() layout->addWidget(container); #endif // USE_QUICK_WIDGET + addKeyboardShortcuts(); + setWidget(m_modeWidget); } @@ -218,6 +237,40 @@ void WelcomeMode::applyTheme() m_themeProperties.insert(it.key(), it.value()); } +void WelcomeMode::addKeyboardShortcuts() +{ + const int actionsCount = 9; + Context welcomeContext(Core::Constants::C_WELCOME_MODE); + + const Id sessionBase = "Welcome.OpenSession"; + for (int i = 1; i <= actionsCount; ++i) { + auto act = new QAction(tr("Open Session #%1").arg(i), this); + Command *cmd = ActionManager::registerAction(act, sessionBase.withSuffix(i), welcomeContext); + cmd->setDefaultKeySequence(QKeySequence((UseMacShortcuts ? tr("Ctrl+Meta+%1") : tr("Ctrl+Alt+%1")).arg(i))); + m_sessionsShortcuts.append(cmd->keySequence().toString()); + + connect(act, &QAction::triggered, this, [this, i] { openSessionTriggered(i-1); }); + connect(cmd, &Command::keySequenceChanged, this, [this, i, cmd] { + m_sessionsShortcuts[i-1] = cmd->keySequence().toString(); + emit sessionsShortcutsChanged(m_sessionsShortcuts); + }); + } + + const Id projectBase = "Welcome.OpenRecentProject"; + for (int i = 1; i <= actionsCount; ++i) { + auto act = new QAction(tr("Open Recent Project #%1").arg(i), this); + Command *cmd = ActionManager::registerAction(act, projectBase.withSuffix(i), welcomeContext); + cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+%1").arg(i))); + m_recentProjectsShortcuts.append(cmd->keySequence().toString()); + + connect(act, &QAction::triggered, this, [this, i] { openRecentProjectTriggered(i-1); }); + connect(cmd, &Command::keySequenceChanged, this, [this, i, cmd] { + m_recentProjectsShortcuts[i-1] = cmd->keySequence().toString(); + emit recentProjectsShortcutsChanged(m_recentProjectsShortcuts); + }); + } +} + WelcomeMode::~WelcomeMode() { QSettings *settings = ICore::settings(); |