Core: Add "Toolbar Style" ComboBox to General settings

Stores the style as int under General/ToolbarStyle. ManhattanStyle
restores the setting on contruction, just in time before widgets
get "QStyle::polished".

Task-number: QTCREATORBUG-29054
Change-Id: Ifea953261eab0d42e35a128e2f3338fbbef06a88
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Alessandro Portale
2023-04-21 14:45:54 +02:00
parent 2d8fd4f017
commit 2e9494bd71
3 changed files with 48 additions and 0 deletions

View File

@@ -9,6 +9,8 @@
#include <coreplugin/dialogs/restartdialog.h> #include <coreplugin/dialogs/restartdialog.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/checkablemessagebox.h> #include <utils/checkablemessagebox.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
@@ -17,6 +19,7 @@
#include <utils/qtcolorbutton.h> #include <utils/qtcolorbutton.h>
#include <utils/stylehelper.h> #include <utils/stylehelper.h>
#include <QApplication>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QCoreApplication> #include <QCoreApplication>
@@ -38,6 +41,7 @@ namespace Internal {
const char settingsKeyDPI[] = "Core/EnableHighDpiScaling"; const char settingsKeyDPI[] = "Core/EnableHighDpiScaling";
const char settingsKeyShortcutsInContextMenu[] = "General/ShowShortcutsInContextMenu"; const char settingsKeyShortcutsInContextMenu[] = "General/ShowShortcutsInContextMenu";
const char settingsKeyCodecForLocale[] = "General/OverrideCodecForLocale"; const char settingsKeyCodecForLocale[] = "General/OverrideCodecForLocale";
const char settingsKeyToolbarStyle[] = "General/ToolbarStyle";
class GeneralSettingsWidget final : public IOptionsPageWidget class GeneralSettingsWidget final : public IOptionsPageWidget
{ {
@@ -57,6 +61,7 @@ public:
void fillCodecBox() const; void fillCodecBox() const;
static QByteArray codecForLocale(); static QByteArray codecForLocale();
static void setCodecForLocale(const QByteArray&); static void setCodecForLocale(const QByteArray&);
void fillToolbarSyleBox() const;
GeneralSettings *q; GeneralSettings *q;
QComboBox *m_languageBox; QComboBox *m_languageBox;
@@ -65,6 +70,7 @@ public:
QtColorButton *m_colorButton; QtColorButton *m_colorButton;
ThemeChooser *m_themeChooser; ThemeChooser *m_themeChooser;
QPushButton *m_resetWarningsButton; QPushButton *m_resetWarningsButton;
QComboBox *m_toolbarStyleBox;
}; };
GeneralSettingsWidget::GeneralSettingsWidget(GeneralSettings *q) GeneralSettingsWidget::GeneralSettingsWidget(GeneralSettings *q)
@@ -75,6 +81,7 @@ GeneralSettingsWidget::GeneralSettingsWidget(GeneralSettings *q)
, m_colorButton(new QtColorButton) , m_colorButton(new QtColorButton)
, m_themeChooser(new ThemeChooser) , m_themeChooser(new ThemeChooser)
, m_resetWarningsButton(new QPushButton) , m_resetWarningsButton(new QPushButton)
, m_toolbarStyleBox(new QComboBox)
{ {
m_languageBox->setObjectName("languageBox"); m_languageBox->setObjectName("languageBox");
m_languageBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); m_languageBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
@@ -92,6 +99,8 @@ GeneralSettingsWidget::GeneralSettingsWidget(GeneralSettings *q)
"Show Again\" (for example, missing highlighter).", "Show Again\" (for example, missing highlighter).",
nullptr)); nullptr));
m_toolbarStyleBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
auto resetColorButton = new QPushButton(Tr::tr("Reset")); auto resetColorButton = new QPushButton(Tr::tr("Reset"));
resetColorButton->setToolTip(Tr::tr("Reset to default.", "Color")); resetColorButton->setToolTip(Tr::tr("Reset to default.", "Color"));
@@ -116,10 +125,12 @@ GeneralSettingsWidget::GeneralSettingsWidget(GeneralSettings *q)
form.addRow({empty, m_showShortcutsInContextMenus}); form.addRow({empty, m_showShortcutsInContextMenus});
form.addRow({Row{m_resetWarningsButton, st}}); form.addRow({Row{m_resetWarningsButton, st}});
form.addRow({Tr::tr("Text codec for tools:"), m_codecBox, st}); form.addRow({Tr::tr("Text codec for tools:"), m_codecBox, st});
form.addRow({Tr::tr("Toolbar Style:"), m_toolbarStyleBox, st});
Column{Group{title(Tr::tr("User Interface")), form}}.attachTo(this); Column{Group{title(Tr::tr("User Interface")), form}}.attachTo(this);
fillLanguageBox(); fillLanguageBox();
fillCodecBox(); fillCodecBox();
fillToolbarSyleBox();
m_colorButton->setColor(StyleHelper::requestedBaseColor()); m_colorButton->setColor(StyleHelper::requestedBaseColor());
m_resetWarningsButton->setEnabled(canResetWarnings()); m_resetWarningsButton->setEnabled(canResetWarnings());
@@ -188,6 +199,15 @@ void GeneralSettingsWidget::apply()
// Apply the new base color if accepted // Apply the new base color if accepted
StyleHelper::setBaseColor(m_colorButton->color()); StyleHelper::setBaseColor(m_colorButton->color());
m_themeChooser->apply(); m_themeChooser->apply();
if (const auto newStyle = m_toolbarStyleBox->currentData().value<StyleHelper::ToolbarStyle>();
newStyle != StyleHelper::toolbarStyle()) {
ICore::settings()->setValueWithDefault(settingsKeyToolbarStyle, int(newStyle),
int(StyleHelper::defaultToolbarStyle));
StyleHelper::setToolbarStyle(newStyle);
QStyle *applicationStyle = QApplication::style();
for (QWidget *widget : QApplication::allWidgets())
applicationStyle->polish(widget);
}
} }
bool GeneralSettings::showShortcutsInContextMenu() bool GeneralSettings::showShortcutsInContextMenu()
@@ -268,6 +288,24 @@ void GeneralSettingsWidget::setCodecForLocale(const QByteArray &codec)
QTextCodec::setCodecForLocale(QTextCodec::codecForName(codec)); QTextCodec::setCodecForLocale(QTextCodec::codecForName(codec));
} }
StyleHelper::ToolbarStyle toolbarStylefromSettings()
{
if (!ExtensionSystem::PluginManager::instance()) // May happen in tests
return StyleHelper::defaultToolbarStyle;
return StyleHelper::ToolbarStyle(
ICore::settings()->value(settingsKeyToolbarStyle,
StyleHelper::defaultToolbarStyle).toInt());
}
void GeneralSettingsWidget::fillToolbarSyleBox() const
{
m_toolbarStyleBox->addItem(Tr::tr("Compact"), StyleHelper::ToolbarStyleCompact);
m_toolbarStyleBox->addItem(Tr::tr("Relaxed"), StyleHelper::ToolbarStyleRelaxed);
const int curId = m_toolbarStyleBox->findData(toolbarStylefromSettings());
m_toolbarStyleBox->setCurrentIndex(curId);
}
void GeneralSettings::setShowShortcutsInContextMenu(bool show) void GeneralSettings::setShowShortcutsInContextMenu(bool show)
{ {
ICore::settings()->setValueWithDefault(settingsKeyShortcutsInContextMenu, ICore::settings()->setValueWithDefault(settingsKeyShortcutsInContextMenu,
@@ -276,6 +314,11 @@ void GeneralSettings::setShowShortcutsInContextMenu(bool show)
QCoreApplication::setAttribute(Qt::AA_DontShowShortcutsInContextMenus, !show); QCoreApplication::setAttribute(Qt::AA_DontShowShortcutsInContextMenus, !show);
} }
void GeneralSettings::applyToolbarStyleFromSettings()
{
StyleHelper::setToolbarStyle(toolbarStylefromSettings());
}
GeneralSettings::GeneralSettings() GeneralSettings::GeneralSettings()
{ {
setId(Constants::SETTINGS_ID_INTERFACE); setId(Constants::SETTINGS_ID_INTERFACE);

View File

@@ -16,6 +16,8 @@ public:
static bool showShortcutsInContextMenu(); static bool showShortcutsInContextMenu();
void setShowShortcutsInContextMenu(bool show); void setShowShortcutsInContextMenu(bool show);
static void applyToolbarStyleFromSettings();
private: private:
friend class GeneralSettingsWidget; friend class GeneralSettingsWidget;
bool m_defaultShowShortcutsInContextMenu; bool m_defaultShowShortcutsInContextMenu;

View File

@@ -3,6 +3,8 @@
#include "manhattanstyle.h" #include "manhattanstyle.h"
#include "generalsettings.h"
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/fancymainwindow.h> #include <utils/fancymainwindow.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
@@ -390,6 +392,7 @@ ManhattanStyle::ManhattanStyle(const QString &baseStyleName)
: QProxyStyle(QStyleFactory::create(baseStyleName)), : QProxyStyle(QStyleFactory::create(baseStyleName)),
d(new ManhattanStylePrivate()) d(new ManhattanStylePrivate())
{ {
Core::Internal::GeneralSettings::applyToolbarStyleFromSettings();
} }
ManhattanStyle::~ManhattanStyle() ManhattanStyle::~ManhattanStyle()