// SPDX-License-Identifier: GPL-3.0-only /* * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Tayou * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "ThemeCustomizationWidget.h" #include "ui_ThemeCustomizationWidget.h" #include "Application.h" #include "ui/themes/ITheme.h" #include "ui/themes/ThemeManager.h" ThemeCustomizationWidget::ThemeCustomizationWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ThemeCustomizationWidget) { ui->setupUi(this); loadSettings(); connect(ui->iconsComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &ThemeCustomizationWidget::applyIconTheme); connect(ui->widgetStyleComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &ThemeCustomizationWidget::applyWidgetTheme); connect(ui->backgroundCatComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &ThemeCustomizationWidget::applyCatTheme); } ThemeCustomizationWidget::~ThemeCustomizationWidget() { delete ui; } /// /// The layout was not quite right, so currently this just disables the UI elements, which should be hidden instead /// TODO FIXME /// /// Original Method One: /// ui->iconsComboBox->setVisible(features& ThemeFields::ICONS); /// ui->iconsLabel->setVisible(features& ThemeFields::ICONS); /// ui->widgetStyleComboBox->setVisible(features& ThemeFields::WIDGETS); /// ui->widgetThemeLabel->setVisible(features& ThemeFields::WIDGETS); /// ui->backgroundCatComboBox->setVisible(features& ThemeFields::CAT); /// ui->backgroundCatLabel->setVisible(features& ThemeFields::CAT); /// /// original Method Two: /// if (!(features & ThemeFields::ICONS)) { /// ui->formLayout->setRowVisible(0, false); /// } /// if (!(features & ThemeFields::WIDGETS)) { /// ui->formLayout->setRowVisible(1, false); /// } /// if (!(features & ThemeFields::CAT)) { /// ui->formLayout->setRowVisible(2, false); /// } /// /// void ThemeCustomizationWidget::showFeatures(ThemeFields features) { ui->iconsComboBox->setEnabled(features & ThemeFields::ICONS); ui->iconsLabel->setEnabled(features & ThemeFields::ICONS); ui->widgetStyleComboBox->setEnabled(features & ThemeFields::WIDGETS); ui->widgetThemeLabel->setEnabled(features & ThemeFields::WIDGETS); ui->backgroundCatComboBox->setEnabled(features & ThemeFields::CAT); ui->backgroundCatLabel->setEnabled(features & ThemeFields::CAT); } void ThemeCustomizationWidget::applyIconTheme(int index) { auto settings = APPLICATION->settings(); auto originalIconTheme = settings->get("IconTheme").toString(); auto& newIconTheme = m_iconThemeOptions[index].first; settings->set("IconTheme", newIconTheme); if (originalIconTheme != newIconTheme) { APPLICATION->applyCurrentlySelectedTheme(); } emit currentIconThemeChanged(index); } void ThemeCustomizationWidget::applyWidgetTheme(int index) { auto settings = APPLICATION->settings(); auto originalAppTheme = settings->get("ApplicationTheme").toString(); auto newAppTheme = ui->widgetStyleComboBox->currentData().toString(); if (originalAppTheme != newAppTheme) { settings->set("ApplicationTheme", newAppTheme); APPLICATION->applyCurrentlySelectedTheme(); } emit currentWidgetThemeChanged(index); } void ThemeCustomizationWidget::applyCatTheme(int index) { auto settings = APPLICATION->settings(); settings->set("BackgroundCat", m_catOptions[index].first); emit currentCatChanged(index); } void ThemeCustomizationWidget::applySettings() { applyIconTheme(ui->iconsComboBox->currentIndex()); applyWidgetTheme(ui->widgetStyleComboBox->currentIndex()); applyCatTheme(ui->backgroundCatComboBox->currentIndex()); } void ThemeCustomizationWidget::loadSettings() { auto settings = APPLICATION->settings(); auto iconTheme = settings->get("IconTheme").toString(); for (auto& iconThemeFromList : m_iconThemeOptions) { QIcon iconForComboBox = QIcon(QString(":/icons/%1/scalable/settings").arg(iconThemeFromList.first)); ui->iconsComboBox->addItem(iconForComboBox, iconThemeFromList.second); if (iconTheme == iconThemeFromList.first) { ui->iconsComboBox->setCurrentIndex(ui->iconsComboBox->count() - 1); } } { auto currentTheme = settings->get("ApplicationTheme").toString(); auto themes = APPLICATION->getValidApplicationThemes(); int idx = 0; for (auto& theme : themes) { ui->widgetStyleComboBox->addItem(theme->name(), theme->id()); if (currentTheme == theme->id()) { ui->widgetStyleComboBox->setCurrentIndex(idx); } idx++; } } auto cat = settings->get("BackgroundCat").toString(); for (auto& catFromList : m_catOptions) { QIcon catIcon = QIcon(QString(":/backgrounds/%1").arg(ThemeManager::getCatImage(catFromList.first))); ui->backgroundCatComboBox->addItem(catIcon, catFromList.second); if (cat == catFromList.first) { ui->backgroundCatComboBox->setCurrentIndex(ui->backgroundCatComboBox->count() - 1); } } } void ThemeCustomizationWidget::retranslate() { ui->retranslateUi(this); }