|
|
@@ -5,6 +5,7 @@
|
|
|
#include <QSettings>
|
|
|
#include <QFileInfo>
|
|
|
#include <QJsonDocument>
|
|
|
+#include <QApplication>
|
|
|
|
|
|
#include "exception.h"
|
|
|
#include <utils/fileutils.h>
|
|
|
@@ -71,7 +72,7 @@ Theme *Theme::fromFolder(const QString &p_folder)
|
|
|
Q_ASSERT(!p_folder.isEmpty());
|
|
|
auto obj = readPaletteFile(p_folder);
|
|
|
auto metadata = readMetadata(obj);
|
|
|
- auto paletteObj = translatePalette(obj);
|
|
|
+ auto paletteObj = translatePalette(obj, metadata.m_backfillSystemPalette);
|
|
|
return new Theme(p_folder,
|
|
|
metadata,
|
|
|
paletteObj);
|
|
|
@@ -86,11 +87,68 @@ Theme::Metadata Theme::readMetadata(const Palette &p_obj)
|
|
|
data.m_revision = metaObj[QStringLiteral("revision")].toInt();
|
|
|
data.m_editorHighlightTheme = metaObj[QStringLiteral("editor-highlight-theme")].toString();
|
|
|
data.m_markdownEditorHighlightTheme = metaObj[QStringLiteral("markdown-editor-highlight-theme")].toString();
|
|
|
+ data.m_backfillSystemPalette = metaObj[QStringLiteral("backfill-system-palette")].toBool(false);
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
-Theme::Palette Theme::translatePalette(const QJsonObject &p_obj)
|
|
|
+QJsonObject Theme::backfillSystemPalette(QJsonObject p_obj)
|
|
|
+{
|
|
|
+ const auto qpalette = QApplication::palette();
|
|
|
+ // Active.
|
|
|
+ {
|
|
|
+ QJsonObject obj;
|
|
|
+ obj["window"] = qpalette.color(QPalette::Active, QPalette::Window).name();
|
|
|
+ obj["window_text"] = qpalette.color(QPalette::Active, QPalette::WindowText).name();
|
|
|
+ obj["base"] = qpalette.color(QPalette::Active, QPalette::Base).name();
|
|
|
+ obj["alternate_base"] = qpalette.color(QPalette::Active, QPalette::AlternateBase).name();
|
|
|
+ obj["text"] = qpalette.color(QPalette::Active, QPalette::Text).name();
|
|
|
+ obj["button"] = qpalette.color(QPalette::Active, QPalette::Button).name();
|
|
|
+ obj["button_text"] = qpalette.color(QPalette::Active, QPalette::ButtonText).name();
|
|
|
+ obj["bright_text"] = qpalette.color(QPalette::Active, QPalette::BrightText).name();
|
|
|
+ obj["light"] = qpalette.color(QPalette::Active, QPalette::Light).name();
|
|
|
+ obj["midlight"] = qpalette.color(QPalette::Active, QPalette::Midlight).name();
|
|
|
+ obj["dark"] = qpalette.color(QPalette::Active, QPalette::Dark).name();
|
|
|
+ obj["highlight"] = qpalette.color(QPalette::Active, QPalette::Highlight).name();
|
|
|
+ obj["highlighted_text"] = qpalette.color(QPalette::Active, QPalette::HighlightedText).name();
|
|
|
+ obj["link"] = qpalette.color(QPalette::Active, QPalette::Link).name();
|
|
|
+ obj["link_visited"] = qpalette.color(QPalette::Active, QPalette::LinkVisited).name();
|
|
|
+
|
|
|
+ p_obj["active"] = obj;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Inactive.
|
|
|
+ {
|
|
|
+ QJsonObject obj;
|
|
|
+ p_obj["inactive"] = obj;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Disabled.
|
|
|
+ {
|
|
|
+ QJsonObject obj;
|
|
|
+ obj["window"] = qpalette.color(QPalette::Disabled, QPalette::Window).name();
|
|
|
+ obj["window_text"] = qpalette.color(QPalette::Disabled, QPalette::WindowText).name();
|
|
|
+ obj["base"] = qpalette.color(QPalette::Disabled, QPalette::Base).name();
|
|
|
+ obj["alternate_base"] = qpalette.color(QPalette::Disabled, QPalette::AlternateBase).name();
|
|
|
+ obj["text"] = qpalette.color(QPalette::Disabled, QPalette::Text).name();
|
|
|
+ obj["button"] = qpalette.color(QPalette::Disabled, QPalette::Button).name();
|
|
|
+ obj["button_text"] = qpalette.color(QPalette::Disabled, QPalette::ButtonText).name();
|
|
|
+ obj["bright_text"] = qpalette.color(QPalette::Disabled, QPalette::BrightText).name();
|
|
|
+ obj["light"] = qpalette.color(QPalette::Disabled, QPalette::Light).name();
|
|
|
+ obj["midlight"] = qpalette.color(QPalette::Disabled, QPalette::Midlight).name();
|
|
|
+ obj["dark"] = qpalette.color(QPalette::Disabled, QPalette::Dark).name();
|
|
|
+ obj["highlight"] = qpalette.color(QPalette::Disabled, QPalette::Highlight).name();
|
|
|
+ obj["highlighted_text"] = qpalette.color(QPalette::Disabled, QPalette::HighlightedText).name();
|
|
|
+ obj["link"] = qpalette.color(QPalette::Disabled, QPalette::Link).name();
|
|
|
+ obj["link_visited"] = qpalette.color(QPalette::Disabled, QPalette::LinkVisited).name();
|
|
|
+
|
|
|
+ p_obj["disabled"] = obj;
|
|
|
+ }
|
|
|
+
|
|
|
+ return p_obj;
|
|
|
+}
|
|
|
+
|
|
|
+Theme::Palette Theme::translatePalette(const QJsonObject &p_obj, bool p_backfillSystemPalette)
|
|
|
{
|
|
|
const QString paletteSection("palette");
|
|
|
const QString baseSection("base");
|
|
|
@@ -99,7 +157,12 @@ Theme::Palette Theme::translatePalette(const QJsonObject &p_obj)
|
|
|
// @p_palette may contain referenced definitons: derived=@base#sub#sub2.
|
|
|
Palette palette;
|
|
|
|
|
|
- palette[paletteSection] = p_obj[paletteSection];
|
|
|
+ if (p_backfillSystemPalette) {
|
|
|
+ palette[paletteSection] = backfillSystemPalette(p_obj[paletteSection].toObject());
|
|
|
+ } else {
|
|
|
+ palette[paletteSection] = p_obj[paletteSection];
|
|
|
+ }
|
|
|
+
|
|
|
palette[baseSection] = p_obj[baseSection];
|
|
|
palette[widgetsSection] = p_obj[widgetsSection];
|
|
|
|
|
|
@@ -162,8 +225,9 @@ QPair<bool, int> Theme::translatePaletteObjectOnce(const Palette &p_palette,
|
|
|
}
|
|
|
|
|
|
Q_ASSERT_X(refVal.isString(), "translatePaletteObjectOnce", val.toString().toStdString().c_str());
|
|
|
- it.value() = refVal.toString();
|
|
|
- if (isRef(refVal.toString())) {
|
|
|
+ const auto refValStr = refVal.toString();
|
|
|
+ it.value() = refValStr;
|
|
|
+ if (isRef(refValStr)) {
|
|
|
// It is another ref again.
|
|
|
++unresolvedRefs;
|
|
|
}
|