* @brief Sets the current theme to the theme at the specified index. */
| 274 | * @brief Sets the current theme to the theme at the specified index. |
| 275 | */ |
| 276 | void Misc::ThemeManager::setTheme(const int index) |
| 277 | { |
| 278 | int filteredIndex = index; |
| 279 | if (index < 0 || index >= m_availableThemes.count()) |
| 280 | filteredIndex = 0; |
| 281 | |
| 282 | m_theme = filteredIndex; |
| 283 | m_themeName = m_availableThemes.at(filteredIndex); |
| 284 | if (m_persistSettings) |
| 285 | m_settings.setValue("ApplicationThemeName", m_themeName); |
| 286 | |
| 287 | if (m_themeName == QStringLiteral("System")) { |
| 288 | loadSystemTheme(); |
| 289 | return; |
| 290 | } |
| 291 | |
| 292 | m_applyingTheme = true; |
| 293 | |
| 294 | auto data = m_themes.value(m_themeName); |
| 295 | m_colors = jsonObjectToVariantMap(data.value("colors").toObject()); |
| 296 | m_widgetColors = extractWidgetColors(data.value("colors").toObject()); |
| 297 | m_deviceColors = extractDeviceColors(data.value("colors").toObject()); |
| 298 | m_parameters = jsonObjectToVariantMap(data.value("parameters").toObject()); |
| 299 | |
| 300 | m_palette.setColor(QPalette::Mid, getColor("mid")); |
| 301 | m_palette.setColor(QPalette::Dark, getColor("dark")); |
| 302 | m_palette.setColor(QPalette::Text, getColor("text")); |
| 303 | m_palette.setColor(QPalette::Base, getColor("base")); |
| 304 | m_palette.setColor(QPalette::Link, getColor("link")); |
| 305 | m_palette.setColor(QPalette::Light, getColor("light")); |
| 306 | m_palette.setColor(QPalette::Window, getColor("window")); |
| 307 | m_palette.setColor(QPalette::Shadow, getColor("shadow")); |
| 308 | m_palette.setColor(QPalette::Accent, getColor("accent")); |
| 309 | m_palette.setColor(QPalette::Button, getColor("button")); |
| 310 | m_palette.setColor(QPalette::Midlight, getColor("midlight")); |
| 311 | m_palette.setColor(QPalette::Highlight, getColor("highlight")); |
| 312 | m_palette.setColor(QPalette::WindowText, getColor("window_text")); |
| 313 | m_palette.setColor(QPalette::BrightText, getColor("bright_text")); |
| 314 | m_palette.setColor(QPalette::ButtonText, getColor("button_text")); |
| 315 | m_palette.setColor(QPalette::ToolTipBase, getColor("tooltip_base")); |
| 316 | m_palette.setColor(QPalette::ToolTipText, getColor("tooltip_text")); |
| 317 | m_palette.setColor(QPalette::LinkVisited, getColor("link_visited")); |
| 318 | m_palette.setColor(QPalette::AlternateBase, getColor("alternate_base")); |
| 319 | m_palette.setColor(QPalette::PlaceholderText, getColor("placeholder_text")); |
| 320 | m_palette.setColor(QPalette::HighlightedText, getColor("highlighted_text")); |
| 321 | |
| 322 | Q_EMIT themeChanged(); |
| 323 | |
| 324 | const auto palette = m_palette; |
| 325 | const auto bg = getColor(QStringLiteral("base")); |
| 326 | const auto fg = getColor(QStringLiteral("text")); |
| 327 | QTimer::singleShot(0, this, [this, palette, bg, fg]() { |
| 328 | qApp->setPalette(palette); |
| 329 | if (fg.lightness() > bg.lightness()) |
| 330 | qApp->styleHints()->setColorScheme(Qt::ColorScheme::Dark); |
| 331 | else |
| 332 | qApp->styleHints()->setColorScheme(Qt::ColorScheme::Light); |
| 333 |
no test coverage detected