From ce8e5c1f106e11d5b45cbe9aa33d787c71bf601e Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 21 Apr 2017 19:47:44 +0200 Subject: [PATCH] Ref T34, OS specific stylesheets e.g. fonts.mac.qss / default is fonts.qss --- src/blackgui/stylesheetutility.cpp | 51 +++++++++++++++++++++++------- src/blackgui/stylesheetutility.h | 6 ++++ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/blackgui/stylesheetutility.cpp b/src/blackgui/stylesheetutility.cpp index 27b22d805..76a297a8a 100644 --- a/src/blackgui/stylesheetutility.cpp +++ b/src/blackgui/stylesheetutility.cpp @@ -206,7 +206,7 @@ namespace BlackGui bool CStyleSheetUtility::updateFont(const QString &fontFamily, const QString &fontSize, const QString &fontStyle, const QString &fontWeight, const QString &fontColor) { - const QString indent(" "); + static const QString indent(" "); QString fontStyleSheet; fontStyleSheet.append(indent).append("font-family: \"").append(fontFamily).append("\";\n"); fontStyleSheet.append(indent).append("font-size: ").append(fontSize).append(";\n"); @@ -266,7 +266,7 @@ namespace BlackGui const QString &CStyleSheetUtility::fileNameFonts() { - static const QString f("fonts.qss"); + static const QString f(getBestFileName("fonts")); return f; } @@ -289,31 +289,31 @@ namespace BlackGui const QString &CStyleSheetUtility::fileNameSwiftStandardGui() { - static const QString f("swiftstdgui.qss"); + static const QString f(getBestFileName("swiftstdgui")); return f; } const QString &CStyleSheetUtility::fileNameInfoBar() { - static const QString f("infobar.qss"); + static const QString f(getBestFileName("infobar")); return f; } const QString &CStyleSheetUtility::fileNameNavigator() { - static const QString f("navigator.qss"); + static const QString f(getBestFileName("navigator")); return f; } const QString &CStyleSheetUtility::fileNameDockWidgetTab() { - static const QString f("dockwidgettab.qss"); + static const QString f(getBestFileName("dockwidgettab")); return f; } const QString &CStyleSheetUtility::fileNameStandardWidget() { - static const QString f("stdwidget.qss"); + static const QString f(getBestFileName("stdwidget")); return f; } @@ -325,25 +325,25 @@ namespace BlackGui const QString &CStyleSheetUtility::fileNameFilterDialog() { - static const QString f("filterdialog.qss"); + static const QString f(getBestFileName("filterdialog")); return f; } const QString &CStyleSheetUtility::fileNameSwiftCore() { - static const QString f("swiftcore.qss"); + static const QString f(getBestFileName("swiftcore")); return f; } const QString &CStyleSheetUtility::fileNameSwiftData() { - static const QString f("swiftdata.qss"); + static const QString f(getBestFileName("swiftdata")); return f; } const QString &CStyleSheetUtility::fileNameSwiftLauncher() { - static const QString f("swiftlauncher.qss"); + static const QString f(getBestFileName("swiftlauncher")); return f; } @@ -436,4 +436,33 @@ namespace BlackGui Q_UNUSED(file); this->read(); } + + QString CStyleSheetUtility::getBestFileName(const QString &fileName) + { + static const QString qss(".qss"); + QString fn(fileName); + if (fn.endsWith(qss)) fn = fn.left(fn.length() - qss.length()); + + QString specific; + if (CBuildConfig::isRunningOnWindowsNtPlatform()) + { + specific = fn + ".win" + qss; + } + else if (CBuildConfig::isRunningOnMacOSXPlatform()) + { + specific = fn + ".mac" + qss; + } + else if (CBuildConfig::isRunningOnLinuxPlatform()) + { + specific = fn + ".linux" + qss; + } + return qssFileExists(specific) ? specific : fn + qss; + } + + bool CStyleSheetUtility::qssFileExists(const QString &filename) + { + if (filename.isEmpty()) { return false; } + const QFileInfo f(CFileUtils::appendFilePaths(CBuildConfig::getStylesheetsDir(), filename)); + return f.exists() && f.isReadable(); + } } diff --git a/src/blackgui/stylesheetutility.h b/src/blackgui/stylesheetutility.h index bea590a71..05ed538bc 100644 --- a/src/blackgui/stylesheetutility.h +++ b/src/blackgui/stylesheetutility.h @@ -151,6 +151,12 @@ namespace BlackGui void ps_qssDirectoryChanged(const QString &file); private: + //! Most suitable filename based on OS/existing file + static QString getBestFileName(const QString &fileName); + + //! Check existance of qss file + static bool qssFileExists(const QString &filename); + QMap m_styleSheets; //!< filename, stylesheet QFileSystemWatcher m_fileWatcher {this}; //!< Monitor my qss files };