From 0d4a62626e7b4fade27cca9dbce1e0f38b274ed1 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Fri, 8 Dec 2017 19:31:33 +0800 Subject: [PATCH] VPalette: support referencing definition in the same group --- src/resources/themes/v_white/v_white.qss | 2 -- src/vpalette.cpp | 27 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/resources/themes/v_white/v_white.qss b/src/resources/themes/v_white/v_white.qss index 1a5379fe..2bda8f31 100644 --- a/src/resources/themes/v_white/v_white.qss +++ b/src/resources/themes/v_white/v_white.qss @@ -620,7 +620,6 @@ QTreeView { color: @treeview_fg; background: @treeview_bg; show-decoration-selected: 0; - padding-top: 3px; border: none; selection-background-color: transparent; outline: none; @@ -681,7 +680,6 @@ QListView { color: @listview_fg; background: @listview_bg; show-decoration-selected: 0; - padding-top: 3px; border: none; selection-background-color: transparent; outline: none; diff --git a/src/vpalette.cpp b/src/vpalette.cpp index 69995c62..ae0993ff 100644 --- a/src/vpalette.cpp +++ b/src/vpalette.cpp @@ -42,6 +42,8 @@ void VPalette::initPaleteFromSettings(QSettings *p_settings, const QString &p_gr QRegExp reg("@(\\w+)"); p_settings->beginGroup(p_group); + // Used to store undefined pairs. + QHash undefined; QStringList keys = p_settings->childKeys(); for (auto const & key : keys) { if (key.isEmpty()) { @@ -54,14 +56,35 @@ void VPalette::initPaleteFromSettings(QSettings *p_settings, const QString &p_gr if (it != m_palette.end()) { val = it.value(); } else { - qWarning() << "non-defined reference attribute" << key << "in palette" << p_settings->fileName(); - val.clear(); + undefined.insert(key, reg.cap(1)); + continue; } } m_palette.insert(key, val); } + // Handle definition: a=@b b=@c c=red. + int iter = 0; + while (!undefined.isEmpty()) { + if (iter >= undefined.size()) { + qWarning() << "cyclic palette definitions found" << undefined; + break; + } + + for (auto it = undefined.begin(); it != undefined.end();) { + auto pit = m_palette.find(it.value()); + if (pit != m_palette.end()) { + m_palette.insert(it.key(), pit.value()); + iter = 0; + it = undefined.erase(it); + } else { + ++iter; + ++it; + } + } + } + p_settings->endGroup(); }