#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; } } // namespace LtsUtils