TextEditor: Define Color Scheme entry per Theme

The TextEditor settings do not remember a global Color Scheme setting,
anymore, but rather a Color Scheme ber Theme. A .creatortheme can define
a default TextEditor Color Scheme (overridable in the settings). This
makes switching of schemes more pleasant.

Taks-number: QTCREATORBUG-15229
Change-Id: I3bd36a4dfa23feea2254be2df50fce064e8fe2af
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Alessandro Portale
2015-12-09 18:16:37 +01:00
parent ff7b8ffcbb
commit 2ff75813b2
6 changed files with 36 additions and 12 deletions

View File

@@ -1,6 +1,7 @@
[General] [General]
ThemeName=dark ThemeName=dark
PreferredStyles=Fusion PreferredStyles=Fusion
DefaultTextEditorColorScheme=dark.xml
[Palette] [Palette]
shadowBackground=ff232323 shadowBackground=ff232323

View File

@@ -83,6 +83,11 @@ QStringList Theme::preferredStyles() const
return d->preferredStyles; return d->preferredStyles;
} }
QString Theme::defaultTextEditorColorScheme() const
{
return d->defaultTextEditorColorScheme;
}
QString Theme::id() const QString Theme::id() const
{ {
return d->id; return d->id;
@@ -182,6 +187,8 @@ void Theme::readSettings(QSettings &settings)
d->displayName = settings.value(QLatin1String("ThemeName"), QLatin1String("unnamed")).toString(); d->displayName = settings.value(QLatin1String("ThemeName"), QLatin1String("unnamed")).toString();
d->preferredStyles = settings.value(QLatin1String("PreferredStyles")).toStringList(); d->preferredStyles = settings.value(QLatin1String("PreferredStyles")).toStringList();
d->preferredStyles.removeAll(QLatin1String("")); d->preferredStyles.removeAll(QLatin1String(""));
d->defaultTextEditorColorScheme =
settings.value(QLatin1String("DefaultTextEditorColorScheme")).toString();
} }
{ {
settings.beginGroup(QLatin1String("Palette")); settings.beginGroup(QLatin1String("Palette"));

View File

@@ -274,6 +274,7 @@ public:
QGradientStops gradient(Gradient role) const; QGradientStops gradient(Gradient role) const;
QPalette palette() const; QPalette palette() const;
QStringList preferredStyles() const; QStringList preferredStyles() const;
QString defaultTextEditorColorScheme() const;
QString id() const; QString id() const;
QString filePath() const; QString filePath() const;

View File

@@ -43,6 +43,7 @@ public:
QString fileName; QString fileName;
QString displayName; QString displayName;
QStringList preferredStyles; QStringList preferredStyles;
QString defaultTextEditorColorScheme;
QVector<QPair<QColor, QString> > colors; QVector<QPair<QColor, QString> > colors;
QVector<QString> imageFiles; QVector<QString> imageFiles;
QVector<QGradientStops> gradients; QVector<QGradientStops> gradients;

View File

@@ -28,6 +28,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <utils/theme/theme.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <QCoreApplication> #include <QCoreApplication>
@@ -41,7 +42,7 @@ static const char fontFamilyKey[] = "FontFamily";
static const char fontSizeKey[] = "FontSize"; static const char fontSizeKey[] = "FontSize";
static const char fontZoomKey[] = "FontZoom"; static const char fontZoomKey[] = "FontZoom";
static const char antialiasKey[] = "FontAntialias"; static const char antialiasKey[] = "FontAntialias";
static const char schemeFileNameKey[] = "ColorScheme"; static const char schemeFileNamesKey[] = "ColorSchemes";
namespace { namespace {
static const bool DEFAULT_ANTIALIAS = true; static const bool DEFAULT_ANTIALIAS = true;
@@ -85,8 +86,11 @@ void FontSettings::toSettings(const QString &category,
if (m_antialias != DEFAULT_ANTIALIAS || s->contains(QLatin1String(antialiasKey))) if (m_antialias != DEFAULT_ANTIALIAS || s->contains(QLatin1String(antialiasKey)))
s->setValue(QLatin1String(antialiasKey), m_antialias); s->setValue(QLatin1String(antialiasKey), m_antialias);
if (m_schemeFileName != defaultSchemeFileName() || s->contains(QLatin1String(schemeFileNameKey))) auto schemeFileNames = s->value(QLatin1String(schemeFileNamesKey)).toMap();
s->setValue(QLatin1String(schemeFileNameKey), m_schemeFileName); if (m_schemeFileName != defaultSchemeFileName() || schemeFileNames.contains(Utils::creatorTheme()->id())) {
schemeFileNames.insert(Utils::creatorTheme()->id(), m_schemeFileName);
s->setValue(QLatin1String(schemeFileNamesKey), schemeFileNames);
}
s->endGroup(); s->endGroup();
} }
@@ -108,13 +112,14 @@ bool FontSettings::fromSettings(const QString &category,
m_fontZoom= s->value(group + QLatin1String(fontZoomKey), m_fontZoom).toInt(); m_fontZoom= s->value(group + QLatin1String(fontZoomKey), m_fontZoom).toInt();
m_antialias = s->value(group + QLatin1String(antialiasKey), DEFAULT_ANTIALIAS).toBool(); m_antialias = s->value(group + QLatin1String(antialiasKey), DEFAULT_ANTIALIAS).toBool();
if (s->contains(group + QLatin1String(schemeFileNameKey))) { if (s->contains(group + QLatin1String(schemeFileNamesKey))) {
// Load the selected color scheme // Load the selected color scheme for the current theme
QString scheme = s->value(group + QLatin1String(schemeFileNameKey)).toString(); auto schemeFileNames = s->value(group + QLatin1String(schemeFileNamesKey)).toMap();
if (scheme.isEmpty() || !QFile::exists(scheme)) if (schemeFileNames.contains(Utils::creatorTheme()->id())) {
scheme = defaultSchemeFileName(Utils::FileName::fromString(scheme).fileName()); const QString scheme = schemeFileNames.value(Utils::creatorTheme()->id()).toString();
loadColorScheme(scheme, descriptions); loadColorScheme(scheme, descriptions);
} }
}
return true; return true;
} }
@@ -368,10 +373,15 @@ QString FontSettings::defaultSchemeFileName(const QString &fileName)
QString defaultScheme = Core::ICore::resourcePath(); QString defaultScheme = Core::ICore::resourcePath();
defaultScheme += QLatin1String("/styles/"); defaultScheme += QLatin1String("/styles/");
if (!fileName.isEmpty() && QFile::exists(defaultScheme + fileName)) if (!fileName.isEmpty() && QFile::exists(defaultScheme + fileName)) {
defaultScheme += fileName; defaultScheme += fileName;
} else {
const QString themeScheme = Utils::creatorTheme()->defaultTextEditorColorScheme();
if (!themeScheme.isEmpty() && QFile::exists(defaultScheme + themeScheme))
defaultScheme += themeScheme;
else else
defaultScheme += QLatin1String("default.xml"); defaultScheme += QLatin1String("default.xml");
}
return defaultScheme; return defaultScheme;
} }

View File

@@ -32,6 +32,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/stringutils.h> #include <utils/stringutils.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/theme/theme.h>
#include <QFileDialog> #include <QFileDialog>
#include <QFontDatabase> #include <QFontDatabase>
@@ -346,6 +347,9 @@ QWidget *FontSettingsPage::widget()
d_ptr->m_widget = new QWidget; d_ptr->m_widget = new QWidget;
d_ptr->m_ui = new Ui::FontSettingsPage; d_ptr->m_ui = new Ui::FontSettingsPage;
d_ptr->m_ui->setupUi(d_ptr->m_widget); d_ptr->m_ui->setupUi(d_ptr->m_widget);
d_ptr->m_ui->colorSchemeGroupBox->setTitle(
tr("Color Scheme for Qt Creator Theme \"%1\"")
.arg(Utils::creatorTheme()->displayName()));
d_ptr->m_ui->schemeComboBox->setModel(d_ptr->m_schemeListModel); d_ptr->m_ui->schemeComboBox->setModel(d_ptr->m_schemeListModel);
d_ptr->m_ui->fontComboBox->setCurrentFont(d_ptr->m_value.family()); d_ptr->m_ui->fontComboBox->setCurrentFont(d_ptr->m_value.family());