diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2018-04-26 16:09:16 +0200 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2018-05-09 06:00:27 +0000 |
commit | 768f0a6209392e3d6ce248c5b92c12d2fe711976 (patch) | |
tree | 602cd0d0368a0e1c7123b93178702471ff139452 /src/plugins/coreplugin/mainwindow.cpp | |
parent | 4e3fd9363a0840fb9c2cfd97bd96c8c835c3505e (diff) | |
download | qt-creator-768f0a6209392e3d6ce248c5b92c12d2fe711976.tar.gz |
Core: Icon-only option for the mode selection bar
This adds an icon-only mode to the mode selection bar (and action bar).
A newly introduced Action can cycle between icon+text, icon-only and
hidden.
Also, the "Window" Application menu gets a submenu with the three
styles.
Task-number: QTCREATORBUG-18845
Change-Id: I4e0c453f6d920dfbfd795b8b054f6ff392a8700a
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/coreplugin/mainwindow.cpp')
-rw-r--r-- | src/plugins/coreplugin/mainwindow.cpp | 80 |
1 files changed, 68 insertions, 12 deletions
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 33c7a71c17..df65a4c1dc 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -708,13 +708,7 @@ void MainWindow::registerDefaultActions() mwindow->addAction(cmd, Constants::G_WINDOW_VIEWS); m_toggleRightSideBarButton->setEnabled(false); - // Show Mode Selector Action - m_toggleModeSelectorAction = new QAction(tr("Show Mode Selector"), this); - m_toggleModeSelectorAction->setCheckable(true); - cmd = ActionManager::registerAction(m_toggleModeSelectorAction, Constants::TOGGLE_MODE_SELECTOR); - connect(m_toggleModeSelectorAction, &QAction::triggered, - ModeManager::instance(), &ModeManager::setModeSelectorVisible); - mwindow->addAction(cmd, Constants::G_WINDOW_VIEWS); + registerModeSelectorStyleActions(); // Window->Views ActionContainer *mviews = ActionManager::createMenu(Constants::M_WINDOW_VIEWS); @@ -760,6 +754,42 @@ void MainWindow::registerDefaultActions() } } +void MainWindow::registerModeSelectorStyleActions() +{ + ActionContainer *mwindow = ActionManager::actionContainer(Constants::M_WINDOW); + + // Cycle Mode Selector Styles + m_cycleModeSelectorStyleAction = new QAction(tr("Cycle Mode Selector Styles"), this); + ActionManager::registerAction(m_cycleModeSelectorStyleAction, Constants::CYCLE_MODE_SELECTOR_STYLE); + connect(m_cycleModeSelectorStyleAction, &QAction::triggered, this, [this] { + ModeManager::cycleModeStyle(); + updateModeSelectorStyleMenu(); + }); + + // Mode Selector Styles + ActionContainer *mmodeLayouts = ActionManager::createMenu(Constants::M_WINDOW_MODESTYLES); + mwindow->addMenu(mmodeLayouts, Constants::G_WINDOW_VIEWS); + QMenu *styleMenu = mmodeLayouts->menu(); + styleMenu->setTitle(tr("Mode Selector Style")); + auto *stylesGroup = new QActionGroup(styleMenu); + stylesGroup->setExclusive(true); + + m_setModeSelectorStyleIconsAndTextAction = stylesGroup->addAction(tr("Icons and Text")); + connect(m_setModeSelectorStyleIconsAndTextAction, &QAction::triggered, + [] { ModeManager::setModeStyle(ModeManager::Style::IconsAndText); }); + m_setModeSelectorStyleIconsAndTextAction->setCheckable(true); + m_setModeSelectorStyleIconsOnlyAction = stylesGroup->addAction(tr("Icons Only")); + connect(m_setModeSelectorStyleIconsOnlyAction, &QAction::triggered, + [] { ModeManager::setModeStyle(ModeManager::Style::IconsOnly); }); + m_setModeSelectorStyleIconsOnlyAction->setCheckable(true); + m_setModeSelectorStyleHiddenAction = stylesGroup->addAction(tr("Hidden")); + connect(m_setModeSelectorStyleHiddenAction, &QAction::triggered, + [] { ModeManager::setModeStyle(ModeManager::Style::Hidden); }); + m_setModeSelectorStyleHiddenAction->setCheckable(true); + + styleMenu->addActions(stylesGroup->actions()); +} + void MainWindow::openFile() { openFiles(EditorManager::getOpenFileNames(), ICore::SwitchMode); @@ -941,7 +971,7 @@ static const char settingsGroup[] = "MainWindow"; static const char colorKey[] = "Color"; static const char windowGeometryKey[] = "WindowGeometry"; static const char windowStateKey[] = "WindowState"; -static const char modeSelectorVisibleKey[] = "ModeSelectorVisible"; +static const char modeSelectorLayoutKey[] = "ModeSelectorLayout"; void MainWindow::readSettings() { @@ -957,9 +987,20 @@ void MainWindow::readSettings() QColor(StyleHelper::DEFAULT_BASE_COLOR)).value<QColor>()); } - bool modeSelectorVisible = settings->value(QLatin1String(modeSelectorVisibleKey), true).toBool(); - ModeManager::setModeSelectorVisible(modeSelectorVisible); - m_toggleModeSelectorAction->setChecked(modeSelectorVisible); + { + ModeManager::Style modeStyle = + ModeManager::Style(settings->value(modeSelectorLayoutKey, int(ModeManager::Style::IconsAndText)).toInt()); + + // Migrate legacy setting from Qt Creator 4.6 and earlier + static const char modeSelectorVisibleKey[] = "ModeSelectorVisible"; + if (!settings->contains(modeSelectorLayoutKey) && settings->contains(modeSelectorVisibleKey)) { + bool visible = settings->value(modeSelectorVisibleKey, true).toBool(); + modeStyle = visible ? ModeManager::Style::IconsAndText : ModeManager::Style::Hidden; + } + + ModeManager::setModeStyle(modeStyle); + updateModeSelectorStyleMenu(); + } settings->endGroup(); @@ -999,11 +1040,26 @@ void MainWindow::saveWindowSettings() setWindowState(windowState() & ~Qt::WindowFullScreen); settings->setValue(QLatin1String(windowGeometryKey), saveGeometry()); settings->setValue(QLatin1String(windowStateKey), saveState()); - settings->setValue(QLatin1String(modeSelectorVisibleKey), ModeManager::isModeSelectorVisible()); + settings->setValue(modeSelectorLayoutKey, int(ModeManager::modeStyle())); settings->endGroup(); } +void MainWindow::updateModeSelectorStyleMenu() +{ + switch (ModeManager::modeStyle()) { + case ModeManager::Style::IconsAndText: + m_setModeSelectorStyleIconsAndTextAction->setChecked(true); + break; + case ModeManager::Style::IconsOnly: + m_setModeSelectorStyleIconsOnlyAction->setChecked(true); + break; + case ModeManager::Style::Hidden: + m_setModeSelectorStyleHiddenAction->setChecked(true); + break; + } +} + void MainWindow::updateAdditionalContexts(const Context &remove, const Context &add, ICore::ContextPriority priority) { |