From 3a71b8b6623d3d52469e81b5112258b99339fe7b Mon Sep 17 00:00:00 2001 From: thunder2 Date: Sun, 28 Jun 2015 10:11:47 +0000 Subject: [PATCH] Added stylesheet to plugins. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8563 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/retroshare/rsplugin.h | 1 + plugins/FeedReader/FeedReader.pro | 5 +- plugins/FeedReader/FeedReaderPlugin.cpp | 5 +- plugins/FeedReader/FeedReaderPlugin.h | 1 + .../FeedReader/qss/FeedReader_Standard.qss | 1 + plugins/FeedReader/qss/FeedReader_qss.default | 2 + plugins/FeedReader/qss/FeedReader_qss.qrc | 6 ++ plugins/VOIP/VOIP.pro | 2 +- plugins/VOIP/VOIPPlugin.cpp | 5 +- plugins/VOIP/VOIPPlugin.h | 1 + plugins/VOIP/qss/VOIP_Standard.qss | 1 + plugins/VOIP/qss/VOIP_qss.default | 2 + plugins/VOIP/qss/VOIP_qss.qrc | 6 ++ retroshare-gui/src/rshare.cpp | 96 ++++++++++++++----- 14 files changed, 101 insertions(+), 33 deletions(-) create mode 100644 plugins/FeedReader/qss/FeedReader_Standard.qss create mode 100644 plugins/FeedReader/qss/FeedReader_qss.default create mode 100644 plugins/FeedReader/qss/FeedReader_qss.qrc create mode 100644 plugins/VOIP/qss/VOIP_Standard.qss create mode 100644 plugins/VOIP/qss/VOIP_qss.default create mode 100644 plugins/VOIP/qss/VOIP_qss.qrc diff --git a/libretroshare/src/retroshare/rsplugin.h b/libretroshare/src/retroshare/rsplugin.h index 7fab66382..e8cb91714 100644 --- a/libretroshare/src/retroshare/rsplugin.h +++ b/libretroshare/src/retroshare/rsplugin.h @@ -176,6 +176,7 @@ class RsPlugin // Provide buttons for the ChatWidget virtual ChatWidgetHolder *qt_get_chat_widget_holder(ChatWidget */*chatWidget*/) const { return NULL ; } + virtual std::string qt_stylesheet() { return ""; } virtual QTranslator *qt_translator(QApplication * /* app */, const QString& /* languageCode */, const QString& /* externalDir */ ) const { return NULL ; } // diff --git a/plugins/FeedReader/FeedReader.pro b/plugins/FeedReader/FeedReader.pro index 67a00e904..acc3b4e4c 100644 --- a/plugins/FeedReader/FeedReader.pro +++ b/plugins/FeedReader/FeedReader.pro @@ -56,8 +56,9 @@ FORMS = gui/FeedReaderDialog.ui \ TARGET = FeedReader RESOURCES = gui/FeedReader_images.qrc \ - lang/FeedReader_lang.qrc - + lang/FeedReader_lang.qrc \ + qss/FeedReader_qss.qrc + TRANSLATIONS += \ lang/FeedReader_ca_ES.ts \ lang/FeedReader_cs.ts \ diff --git a/plugins/FeedReader/FeedReaderPlugin.cpp b/plugins/FeedReader/FeedReaderPlugin.cpp index bbe0f88d7..cc45fb5dc 100644 --- a/plugins/FeedReader/FeedReaderPlugin.cpp +++ b/plugins/FeedReader/FeedReaderPlugin.cpp @@ -84,6 +84,9 @@ FeedReaderPlugin::FeedReaderPlugin() mFeedReader = NULL; mNotify = NULL; mFeedNotify = NULL; + + Q_INIT_RESOURCE(FeedReader_images); + Q_INIT_RESOURCE(FeedReader_qss); } void FeedReaderPlugin::setInterfaces(RsPlugInInterfaces &interfaces) @@ -143,8 +146,6 @@ void FeedReaderPlugin::setPlugInHandler(RsPluginHandler *pgHandler) QIcon *FeedReaderPlugin::qt_icon() const { if (mIcon == NULL) { - Q_INIT_RESOURCE(FeedReader_images); - mIcon = new QIcon(IMAGE_FEEDREADER); } diff --git a/plugins/FeedReader/FeedReaderPlugin.h b/plugins/FeedReader/FeedReaderPlugin.h index 9c737566c..9a27d9243 100644 --- a/plugins/FeedReader/FeedReaderPlugin.h +++ b/plugins/FeedReader/FeedReaderPlugin.h @@ -42,6 +42,7 @@ public: virtual MainPage *qt_page() const; virtual QIcon *qt_icon() const; + virtual std::string qt_stylesheet() { return "FeedReader"; } virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode, const QString& externalDir) const; virtual void getPluginVersion(int &major, int &minor, int &build, int &svn_rev) const; diff --git a/plugins/FeedReader/qss/FeedReader_Standard.qss b/plugins/FeedReader/qss/FeedReader_Standard.qss new file mode 100644 index 000000000..ee40c6344 --- /dev/null +++ b/plugins/FeedReader/qss/FeedReader_Standard.qss @@ -0,0 +1 @@ +/* Standard stylesheet for FeedReader */ diff --git a/plugins/FeedReader/qss/FeedReader_qss.default b/plugins/FeedReader/qss/FeedReader_qss.default new file mode 100644 index 000000000..d9d5c62d1 --- /dev/null +++ b/plugins/FeedReader/qss/FeedReader_qss.default @@ -0,0 +1,2 @@ +/* Default stylesheet + This file is used as default for all stylesheets and can be overloaded */ diff --git a/plugins/FeedReader/qss/FeedReader_qss.qrc b/plugins/FeedReader/qss/FeedReader_qss.qrc new file mode 100644 index 000000000..437503d74 --- /dev/null +++ b/plugins/FeedReader/qss/FeedReader_qss.qrc @@ -0,0 +1,6 @@ + + + FeedReader_qss.default + FeedReader_Standard.qss + + diff --git a/plugins/VOIP/VOIP.pro b/plugins/VOIP/VOIP.pro index 31bb958da..e7f054553 100644 --- a/plugins/VOIP/VOIP.pro +++ b/plugins/VOIP/VOIP.pro @@ -73,7 +73,7 @@ FORMS = gui/AudioInputConfig.ui \ TARGET = VOIP -RESOURCES = gui/VOIP_images.qrc lang/VOIP_lang.qrc +RESOURCES = gui/VOIP_images.qrc lang/VOIP_lang.qrc qss/VOIP_qss.qrc TRANSLATIONS += \ lang/VOIP_ca_ES.ts \ diff --git a/plugins/VOIP/VOIPPlugin.cpp b/plugins/VOIP/VOIPPlugin.cpp index 833b4cd42..08a2dbac3 100644 --- a/plugins/VOIP/VOIPPlugin.cpp +++ b/plugins/VOIP/VOIPPlugin.cpp @@ -95,6 +95,9 @@ VOIPPlugin::VOIPPlugin() QObject::connect(mVOIPNotify,SIGNAL(voipAcceptReceived(const RsPeerId&)),mVOIPGUIHandler,SLOT(ReceivedVoipAccept(const RsPeerId&)),Qt::QueuedConnection) ; QObject::connect(mVOIPNotify,SIGNAL(voipHangUpReceived(const RsPeerId&)),mVOIPGUIHandler,SLOT(ReceivedVoipHangUp(const RsPeerId&)),Qt::QueuedConnection) ; QObject::connect(mVOIPNotify,SIGNAL(voipBandwidthInfoReceived(const RsPeerId&,int)),mVOIPGUIHandler,SLOT(ReceivedVoipBandwidthInfo(const RsPeerId&,int)),Qt::QueuedConnection) ; + + Q_INIT_RESOURCE(VOIP_images); + Q_INIT_RESOURCE(VOIP_qss); } void VOIPPlugin::setInterfaces(RsPlugInInterfaces &interfaces) @@ -164,8 +167,6 @@ void VOIPPlugin::setPlugInHandler(RsPluginHandler *pgHandler) QIcon *VOIPPlugin::qt_icon() const { if (mIcon == NULL) { - Q_INIT_RESOURCE(VOIP_images); - mIcon = new QIcon(IMAGE_VOIP); } diff --git a/plugins/VOIP/VOIPPlugin.h b/plugins/VOIP/VOIPPlugin.h index 547c8d08e..3ea4aeefb 100644 --- a/plugins/VOIP/VOIPPlugin.h +++ b/plugins/VOIP/VOIPPlugin.h @@ -43,6 +43,7 @@ class VOIPPlugin: public RsPlugin virtual ChatWidgetHolder *qt_get_chat_widget_holder(ChatWidget *chatWidget) const ; virtual QIcon *qt_icon() const; + virtual std::string qt_stylesheet() { return "VOIP"; } virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode, const QString& externalDir) const; virtual void qt_sound_events(SoundEvents &events) const; diff --git a/plugins/VOIP/qss/VOIP_Standard.qss b/plugins/VOIP/qss/VOIP_Standard.qss new file mode 100644 index 000000000..ee40c6344 --- /dev/null +++ b/plugins/VOIP/qss/VOIP_Standard.qss @@ -0,0 +1 @@ +/* Standard stylesheet for FeedReader */ diff --git a/plugins/VOIP/qss/VOIP_qss.default b/plugins/VOIP/qss/VOIP_qss.default new file mode 100644 index 000000000..d9d5c62d1 --- /dev/null +++ b/plugins/VOIP/qss/VOIP_qss.default @@ -0,0 +1,2 @@ +/* Default stylesheet + This file is used as default for all stylesheets and can be overloaded */ diff --git a/plugins/VOIP/qss/VOIP_qss.qrc b/plugins/VOIP/qss/VOIP_qss.qrc new file mode 100644 index 000000000..f82c259d4 --- /dev/null +++ b/plugins/VOIP/qss/VOIP_qss.qrc @@ -0,0 +1,6 @@ + + + VOIP_qss.default + VOIP_Standard.qss + + diff --git a/retroshare-gui/src/rshare.cpp b/retroshare-gui/src/rshare.cpp index 852e1f5a6..1cf7f7a69 100644 --- a/retroshare-gui/src/rshare.cpp +++ b/retroshare-gui/src/rshare.cpp @@ -38,6 +38,7 @@ #include #include +#include #include #include "gui/settings/rsharesettings.h" #include "gui/gxs/GxsIdDetails.h" @@ -444,50 +445,92 @@ void Rshare::resetLanguageAndStyle() setSheet(_args.value(ARG_GUISTYLESHEET)); } +// RetroShare: +// Default: +// :/qss/stylesheet/qss.default +// :/qss/stylesheet/qss. +// Internal: +// :/qss/stylesheet/.qss +// External: +// /qss/.qss +// Language depended stylesheet +// _.lqss +// +// Plugin: +// Default: +// :/qss/stylesheet//_qss.default +// :/qss/stylesheet//_qss. +// Internal: +// :/qss/stylesheet//_.qss +// External: +// /qss//_.qss +// Language depended stylesheet +// _.lqss + void Rshare::loadStyleSheet(const QString &sheetName) { QString locale = QLocale().name(); QString styleSheet; - /* load the default stylesheet */ - QFile file(":/qss/stylesheet/qss.default"); - if (file.open(QFile::ReadOnly)) { - styleSheet = QLatin1String(file.readAll()) + "\n"; - file.close(); - } + QStringList names; + names.push_back(""); // RetroShare - /* load locale depended default stylesheet */ - file.setFileName(":/qss/stylesheet/qss." + locale); - if (file.open(QFile::ReadOnly)) { - styleSheet = QLatin1String(file.readAll()) + "\n"; - file.close(); - } - - if (!sheetName.isEmpty()) { - /* load stylesheet */ - if (sheetName.left(1) == ":") { - /* internal stylesheet */ - file.setFileName(":/qss/stylesheet/" + sheetName.mid(1) + ".qss"); - } else { - /* external stylesheet */ - file.setFileName(QString::fromUtf8(RsAccounts::ConfigDirectory().c_str()) + "/qss/" + sheetName + ".qss"); - if (!file.exists()) { - file.setFileName(QString::fromUtf8(RsAccounts::DataDirectory().c_str()) + "/qss/" + sheetName + ".qss"); + /* Get stylesheet from plugins */ + if (rsPlugins) { + int count = rsPlugins->nbPlugins(); + for (int i = 0; i < count; ++i) { + RsPlugin* plugin = rsPlugins->plugin(i); + if (plugin) { + QString pluginStyleSheetName = QString::fromUtf8(plugin->qt_stylesheet().c_str()); + if (!pluginStyleSheetName.isEmpty()) { + names.push_back(QString("%1/%1_").arg(pluginStyleSheetName)); + } } } + } + + foreach (QString name, names) { + /* load the default stylesheet */ + QFile file(QString(":/qss/stylesheet/%1qss.default").arg(name)); if (file.open(QFile::ReadOnly)) { styleSheet += QLatin1String(file.readAll()) + "\n"; file.close(); + } - /* load language depended stylesheet */ - QFileInfo fileInfo(file.fileName()); - file.setFileName(fileInfo.path() + "/" + fileInfo.baseName() + "_" + locale + ".lqss"); + /* load locale depended default stylesheet */ + file.setFileName(QString(":/qss/stylesheet/%1qss.%2").arg(name, locale)); + if (file.open(QFile::ReadOnly)) { + styleSheet += QLatin1String(file.readAll()) + "\n"; + file.close(); + } + + if (!sheetName.isEmpty()) { + /* load stylesheet */ + if (sheetName.left(1) == ":") { + /* internal stylesheet */ + file.setFileName(QString(":/qss/stylesheet/%1%2.qss").arg(name, sheetName.mid(1))); + } else { + /* external stylesheet */ + file.setFileName(QString("%1/qss/%2%3.qss").arg(QString::fromUtf8(RsAccounts::ConfigDirectory().c_str()), name, sheetName)); + if (!file.exists()) { + file.setFileName(QString("%1/qss/%2%3.qss").arg(QString::fromUtf8(RsAccounts::DataDirectory().c_str()), name, sheetName)); + } + } if (file.open(QFile::ReadOnly)) { styleSheet += QLatin1String(file.readAll()) + "\n"; file.close(); + + /* load language depended stylesheet */ + QFileInfo fileInfo(file.fileName()); + file.setFileName(fileInfo.path() + "/" + fileInfo.baseName() + "_" + locale + ".lqss"); + if (file.open(QFile::ReadOnly)) { + styleSheet += QLatin1String(file.readAll()) + "\n"; + file.close(); + } } } } + qApp->setStyleSheet(styleSheet); } @@ -548,6 +591,7 @@ void Rshare::refreshStyleSheet(QWidget *widget, bool processChildren) /** Initialize plugins. */ void Rshare::initPlugins() { + loadStyleSheet(_stylesheet); LanguageSupport::translatePlugins(_language); }