#include "style_manager.h" #include #include #include #include namespace LtsUtils { struct StyleManagerHandler { StyleManager styleManager; }; Q_GLOBAL_STATIC(StyleManagerHandler, s_styleManagerHandler) StyleManager *StyleManager::getInstance() { return &s_styleManagerHandler->styleManager; } bool StyleManager::loadStyle(const QString &stylePluginName, bool highDpi) { if (m_currentStylePluginLoader != nullptr) { QObject *pluginInstance = m_currentStylePluginLoader->instance(); StylePlugin::Plugin *sp = qobject_cast(pluginInstance); if (sp == nullptr) { qWarning() << "StyleManager::loadStyle: could not unload style plugin - wrong type (" << pluginInstance->metaObject()->className() << ") - new style not loaded"; return false; } sp->unloadStyle(); m_currentStylePluginLoader = nullptr; } LtsPluginManager::LtsPluginLoader *pluginLoader = LtsPluginManager::LtsPluginLoader::getInstance(); QPluginLoader *stylePluginLoader = nullptr; int pluginsLoaded = 0; std::function loadPluginFn = [&stylePluginLoader, &pluginsLoaded] (const LtsPluginManager::PluginInstance &pi) { stylePluginLoader = pi.pluginLoader; pluginsLoaded++; return true; }; if (!pluginLoader->loadPlugins(LtsPluginManager::PluginType::STYLE, loadPluginFn, QStringList() << stylePluginName)) { qWarning() << "StyleManager::loadStyle: Error loading Style Plugin - using default Qt style"; return false; } if (pluginsLoaded == 0) { qWarning() << "StyleManager::loadStyle: Could not find Style Plugin" << stylePluginName << "- using default Qt style"; return false; } if (pluginsLoaded > 1) { qWarning() << "StyleManager::loadStyle: Style Plugin" << stylePluginName << " is ambiguous - using default Qt style"; return false; } if (stylePluginLoader == nullptr) { qWarning() << "StyleManager::loadStyle: No Style Plugin loader available - using default Qt style"; return false; } StylePlugin::Plugin *sp = qobject_cast(stylePluginLoader->instance()); if (sp == nullptr) { qWarning() << "StyleManager::loadStyle: could not load style plugin - wrong type (" << stylePluginLoader->instance()->metaObject()->className() << ") - new style not loaded"; return false; } sp->loadStyle(highDpi); m_currentStylePluginLoader = stylePluginLoader; m_stylePluginName = stylePluginName; emit signalStyleChanged(stylePluginName); return true; } }