diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 2f3b68942e86..ea5beb79b9d6 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -806,6 +806,11 @@ void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize, parent->move(pos); } +// Check whether a theme is not build-in +bool isExternal(QString theme){ + return (theme.operator !=("drk")) && (theme.operator !=("drk-1")) && (theme.operator !=("drkblue")) && (theme.operator !=("trad")); +} + // Open CSS when configured QString loadStyleSheet() { @@ -814,19 +819,29 @@ QString loadStyleSheet() QString cssName; QString theme = settings.value("theme", "").toString(); - if(!theme.isEmpty()){ - cssName = QString(":/css/") + theme; - } - else { - cssName = QString(":/css/drk-1"); - settings.setValue("theme", "drk-1"); + if(isExternal(theme)){ + // External CSS + settings.setValue("fCSSexternal", true); + boost::filesystem::path pathAddr = GetDataDir() / "themes/"; + cssName = pathAddr.c_str() + theme + "/css/theme.css"; + } + else{ + // Build-in CSS + settings.setValue("fCSSexternal", false); + if(!theme.isEmpty()){ + cssName = QString(":/css/") + theme; + } + else { + cssName = QString(":/css/drk-1"); + settings.setValue("theme", "drk-1"); + } } - + QFile qFile(cssName); if (qFile.open(QFile::ReadOnly)) { styleSheet = QLatin1String(qFile.readAll()); } - + return styleSheet; } diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 2b279595fb7a..05b299d6deee 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -182,7 +182,10 @@ namespace GUIUtil /** Load global CSS theme */ QString loadStyleSheet(); - + + /** Check whether a theme is not build-in */ + bool isExternal(QString theme); + /* Convert QString to OS specific boost path through UTF-8 */ boost::filesystem::path qstringToBoostPath(const QString &path); diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 948bd868b3ee..a418e51396bd 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -81,12 +81,22 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) : ui->digits->addItem(digits, digits); } - /* Theme selector */ + /* Theme selector static themes */ ui->theme->addItem(QString("DNET-dark"), QVariant("drk")); ui->theme->addItem(QString("DNET-dark-1"), QVariant("drk-1")); ui->theme->addItem(QString("DNET-blue"), QVariant("drkblue")); ui->theme->addItem(QString("DNET-traditional"), QVariant("trad")); + /* Theme selector external themes */ + boost::filesystem::path pathAddr = GetDataDir() / "themes"; + QDir dir(pathAddr.c_str()); + dir.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot); + QFileInfoList list = dir.entryInfoList(); + + for (int i = 0; i < list.size(); ++i){ + QFileInfo fileInfo = list.at(i); + ui->theme->addItem(fileInfo.fileName(), QVariant(fileInfo.fileName())); + } /* Language selector */ QDir translations(":translations"); diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index cfdbd9c2a03e..01c8cba875d8 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -134,6 +134,8 @@ void OptionsModel::Init() settings.setValue("digits", "2"); if (!settings.contains("theme")) settings.setValue("theme", ""); + if (!settings.contains("fCSSexternal")) + settings.setValue("fCSSexternal", false); if (!settings.contains("language")) settings.setValue("language", ""); if (!SoftSetArg("-lang", settings.value("language").toString().toStdString()))