diff --git a/launcher/ui/pages/global/AppearancePage.cpp b/launcher/ui/pages/global/AppearancePage.cpp index 7b6c893c7..e9e4ad2b9 100644 --- a/launcher/ui/pages/global/AppearancePage.cpp +++ b/launcher/ui/pages/global/AppearancePage.cpp @@ -1,21 +1,41 @@ #include "AppearancePage.h" #include "ui_AppearancePage.h" -#include -#include -#include +#include +#include +#include "BuildConfig.h" +#include "ui/themes/ITheme.h" +#include "ui/themes/ThemeManager.h" AppearancePage::AppearancePage(QWidget* parent) : QWidget(parent), m_ui(new Ui::AppearancePage) { m_ui->setupUi(this); - defaultFormat = new QTextCharFormat(m_ui->fontPreview->currentCharFormat()); + m_ui->catPreview->setGraphicsEffect(new QGraphicsOpacityEffect(this)); + + defaultFormat = new QTextCharFormat(m_ui->consolePreview->currentCharFormat()); loadSettings(); - connect(m_ui->fontSizeBox, QOverload::of(&QSpinBox::valueChanged), this, &AppearancePage::updateFontPreview); - connect(m_ui->consoleFont, &QFontComboBox::currentFontChanged, this, &AppearancePage::updateFontPreview); - connect(m_ui->themeCustomizationWidget, &ThemeCustomizationWidget::currentWidgetThemeChanged, this, &AppearancePage::updateFontPreview); - connect(m_ui->themeCustomizationWidget, &ThemeCustomizationWidget::currentCatChanged, APPLICATION, &Application::currentCatChanged); + loadThemeSettings(); + + updateConsolePreview(); + updateCatPreview(); + + connect(m_ui->fontSizeBox, QOverload::of(&QSpinBox::valueChanged), this, &AppearancePage::updateConsolePreview); + connect(m_ui->consoleFont, &QFontComboBox::currentFontChanged, this, &AppearancePage::updateConsolePreview); + + connect(m_ui->iconsComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &AppearancePage::applyIconTheme); + connect(m_ui->widgetStyleComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &AppearancePage::applyWidgetTheme); + connect(m_ui->catPackComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &AppearancePage::applyCatTheme); + connect(m_ui->catOpacitySlider, &QAbstractSlider::valueChanged, this, &AppearancePage::updateCatPreview); + + connect(m_ui->iconsFolder, &QPushButton::clicked, this, + [] { DesktopServices::openPath(APPLICATION->themeManager()->getIconThemesFolder().path()); }); + connect(m_ui->widgetStyleFolder, &QPushButton::clicked, this, + [] { DesktopServices::openPath(APPLICATION->themeManager()->getApplicationThemesFolder().path()); }); + connect(m_ui->catPackFolder, &QPushButton::clicked, this, + [] { DesktopServices::openPath(APPLICATION->themeManager()->getCatPacksFolder().path()); }); + connect(m_ui->reloadThemesButton, &QPushButton::pressed, this, &AppearancePage::loadThemeSettings); } AppearancePage::~AppearancePage() @@ -40,6 +60,7 @@ void AppearancePage::applySettings() QString consoleFontFamily = m_ui->consoleFont->currentFont().family(); settings->set("ConsoleFont", consoleFontFamily); settings->set("ConsoleFontSize", m_ui->fontSizeBox->value()); + settings->set("CatOpacity", m_ui->catOpacitySlider->value()); } void AppearancePage::loadSettings() @@ -55,16 +76,111 @@ void AppearancePage::loadSettings() } m_ui->fontSizeBox->setValue(fontSize); - updateFontPreview(); + m_ui->catOpacitySlider->setValue(APPLICATION->settings()->get("CatOpacity").toInt()); } -void AppearancePage::updateFontPreview() +void AppearancePage::applyIconTheme(int index) +{ + auto settings = APPLICATION->settings(); + auto originalIconTheme = settings->get("IconTheme").toString(); + auto newIconTheme = m_ui->iconsComboBox->itemData(index).toString(); + if (originalIconTheme != newIconTheme) { + settings->set("IconTheme", newIconTheme); + APPLICATION->themeManager()->applyCurrentlySelectedTheme(); + } +} + +void AppearancePage::applyWidgetTheme(int index) +{ + auto settings = APPLICATION->settings(); + auto originalAppTheme = settings->get("ApplicationTheme").toString(); + auto newAppTheme = m_ui->widgetStyleComboBox->itemData(index).toString(); + if (originalAppTheme != newAppTheme) { + settings->set("ApplicationTheme", newAppTheme); + APPLICATION->themeManager()->applyCurrentlySelectedTheme(); + } + + updateConsolePreview(); +} + +void AppearancePage::applyCatTheme(int index) +{ + auto settings = APPLICATION->settings(); + auto originalCat = settings->get("BackgroundCat").toString(); + auto newCat = m_ui->catPackComboBox->itemData(index).toString(); + if (originalCat != newCat) { + settings->set("BackgroundCat", newCat); + } + + APPLICATION->currentCatChanged(index); + updateCatPreview(); +} + +void AppearancePage::loadThemeSettings() +{ + APPLICATION->themeManager()->refresh(); + + m_ui->iconsComboBox->blockSignals(true); + m_ui->widgetStyleComboBox->blockSignals(true); + m_ui->catPackComboBox->blockSignals(true); + + m_ui->iconsComboBox->clear(); + m_ui->widgetStyleComboBox->clear(); + m_ui->catPackComboBox->clear(); + + const SettingsObjectPtr settings = APPLICATION->settings(); + + const QString currentIconTheme = settings->get("IconTheme").toString(); + const auto iconThemes = APPLICATION->themeManager()->getValidIconThemes(); + + for (int i = 0; i < iconThemes.count(); ++i) { + const IconTheme* theme = iconThemes[i]; + + QIcon iconForComboBox = QIcon(theme->path() + "/scalable/settings"); + m_ui->iconsComboBox->addItem(iconForComboBox, theme->name(), theme->id()); + + if (currentIconTheme == theme->id()) + m_ui->iconsComboBox->setCurrentIndex(i); + } + + const QString currentTheme = settings->get("ApplicationTheme").toString(); + auto themes = APPLICATION->themeManager()->getValidApplicationThemes(); + for (int i = 0; i < themes.count(); ++i) { + ITheme* theme = themes[i]; + + m_ui->widgetStyleComboBox->addItem(theme->name(), theme->id()); + + if (!theme->tooltip().isEmpty()) + m_ui->widgetStyleComboBox->setItemData(i, theme->tooltip(), Qt::ToolTipRole); + + if (currentTheme == theme->id()) + m_ui->widgetStyleComboBox->setCurrentIndex(i); + } + + const QString currentCat = settings->get("BackgroundCat").toString(); + const auto cats = APPLICATION->themeManager()->getValidCatPacks(); + for (int i = 0; i < cats.count(); ++i) { + const CatPack* cat = cats[i]; + + QIcon catIcon = QIcon(QString("%1").arg(cat->path())); + m_ui->catPackComboBox->addItem(catIcon, cat->name(), cat->id()); + + if (currentCat == cat->id()) + m_ui->catPackComboBox->setCurrentIndex(i); + } + + m_ui->iconsComboBox->blockSignals(false); + m_ui->widgetStyleComboBox->blockSignals(false); + m_ui->catPackComboBox->blockSignals(false); +} + +void AppearancePage::updateConsolePreview() { const LogColors& colors = APPLICATION->themeManager()->getLogColors(); int fontSize = m_ui->fontSizeBox->value(); QString fontFamily = m_ui->consoleFont->currentFont().family(); - m_ui->fontPreview->clear(); + m_ui->consolePreview->clear(); defaultFormat->setFont(QFont(fontFamily, fontSize)); auto print = [this, colors](const QString& message, MessageLevel::Enum level) { @@ -80,7 +196,7 @@ void AppearancePage::updateFontPreview() format.setForeground(fg); // append a paragraph/line - auto workCursor = m_ui->fontPreview->textCursor(); + auto workCursor = m_ui->consolePreview->textCursor(); workCursor.movePosition(QTextCursor::End); workCursor.insertText(message, format); workCursor.insertBlock(); @@ -102,3 +218,13 @@ void AppearancePage::updateFontPreview() print(tr("[Test/DEBUG] A secret debugging message..."), MessageLevel::Debug); print(tr("[Test/FATAL] A terrifying fatal error!"), MessageLevel::Fatal); } + +void AppearancePage::updateCatPreview() +{ + QIcon catPackIcon(APPLICATION->themeManager()->getCatPack()); + m_ui->catPreview->setIcon(catPackIcon); + + auto effect = dynamic_cast(m_ui->catPreview->graphicsEffect()); + if (effect) + effect->setOpacity(m_ui->catOpacitySlider->value() / 100.0); +} diff --git a/launcher/ui/pages/global/AppearancePage.h b/launcher/ui/pages/global/AppearancePage.h index 2686f52e2..f964d5f7c 100644 --- a/launcher/ui/pages/global/AppearancePage.h +++ b/launcher/ui/pages/global/AppearancePage.h @@ -67,7 +67,14 @@ class AppearancePage : public QWidget, public BasePage { private: void applySettings(); void loadSettings(); - void updateFontPreview(); + + void applyIconTheme(int index); + void applyWidgetTheme(int index); + void applyCatTheme(int index); + void loadThemeSettings(); + + void updateConsolePreview(); + void updateCatPreview(); private: Ui::AppearancePage* m_ui; diff --git a/launcher/ui/pages/global/AppearancePage.ui b/launcher/ui/pages/global/AppearancePage.ui index 676c0659c..ad2aba7e8 100644 --- a/launcher/ui/pages/global/AppearancePage.ui +++ b/launcher/ui/pages/global/AppearancePage.ui @@ -10,299 +10,522 @@ 700 + + + 300 + 0 + + Form - + - + - Theme + + + + false - - - - - - - - - - 0 - 0 - - - - &Fonts - - - - - - - 0 - 0 - - - - - - - - 5 - - - 16 - - - 11 - - - - - - - Monospace Font - - - - - - - - - - Preview - - - - - - - - Qt::NoFocus + + + + + View cat packs folder. - - - - - .. - - - true + Open Folder - - - - Qt::NoFocus + + + + View widget themes folder. - - - - - .. - - - true + Open Folder - - - - Qt::NoFocus + + + + View icon themes folder. - - - - - .. - - - true + Open Folder - - - - Qt::NoFocus - + + - + &Cat Pack - - - .. - - - true + + catPackComboBox - - + + + + + + + + 0 + 0 + + - Qt::NoFocus - - - - - - - .. - - - true + Qt::StrongFocus - - + + + + + 0 + 0 + + - Qt::NoFocus - - - - - - - .. - - - true + Qt::StrongFocus - - - - Qt::NoFocus + + + + + 0 + 0 + - - - - - .. - - - true + Reload All - - - - Qt::NoFocus - + + - + Theme - - - .. - - - true + + widgetStyleComboBox - - - - Qt::NoFocus - + + - + &Icons - - - .. - - - true + + iconsComboBox - - - - Qt::NoFocus - - - - - - - .. - - - true - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + Qt::Horizontal - - - - 0 - 0 - - - - Qt::ScrollBarAsNeeded - - - false - - - Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + Console Font + + + + + 300 + 16777215 + + + + + + + + + + 5 + + + 16 + + + 11 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 6 + + + + + + + + Cat Opacity + + + + + + + + 300 + 16777215 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + 100 + + + Qt::Horizontal + + + 5 + + + + + + + Transparent + + + + + + + true + + + Opaque + + + + + + + + + + + + + Preview + + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + + + + + 128 + 256 + + + + true + + + + + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::NoFocus + + + + + + + .. + + + true + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + + + 0 + 0 + + + + Qt::ScrollBarAsNeeded + + + false + + + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + - - - ThemeCustomizationWidget - QWidget -
ui/widgets/ThemeCustomizationWidget.h
- 1 -
-
+ + widgetStyleComboBox + widgetStyleFolder + iconsComboBox + iconsFolder + catPackComboBox + catPackFolder + consoleFont + fontSizeBox + catOpacitySlider + consolePreview +
diff --git a/launcher/ui/pages/global/LauncherPage.ui b/launcher/ui/pages/global/LauncherPage.ui index f4d329c44..da2f6d5f2 100644 --- a/launcher/ui/pages/global/LauncherPage.ui +++ b/launcher/ui/pages/global/LauncherPage.ui @@ -31,7 +31,7 @@ 0 0 563 - 1293 + 1336 @@ -72,11 +72,20 @@ - + - Qt::Horizontal + Qt::Vertical - + + QSizePolicy::Fixed + + + + 0 + 6 + + + @@ -104,6 +113,22 @@ + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 6 + + + + @@ -112,37 +137,26 @@ - - - - - Set it to 0 to only check on launch - - - h - - - 0 - - - 168 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + + + + 0 + 0 + + + + Set it to 0 to only check on launch + + + h + + + 0 + + + 168 + + @@ -163,29 +177,13 @@ - - + + Browse - - - - - - - - - - &Skins - - - skinsDirTextBox - - - @@ -196,19 +194,10 @@ - - - - - - - - + + - &Java - - - javaDirTextBox + Browse @@ -222,29 +211,6 @@ - - - - - - - - - - - - - Browse - - - - - - - Browse - - - @@ -252,6 +218,22 @@ + + + + + + + Browse + + + + + + + + + @@ -262,13 +244,39 @@ - - + + + + &Java + + + javaDirTextBox + + + + + + + + Browse + + + + + + + &Skins + + + skinsDirTextBox + + + @@ -276,13 +284,16 @@ + + + - Mod Management + Mods @@ -350,7 +361,7 @@ When creating a new modpack instance, do not suggest updating existing instances instead. - Ask whether to update an existing instance when installing modpacks + Suggest to update an existing instance @@ -374,40 +385,45 @@ - - - - - - 0 - 0 - - - - lines - - - 10000 - - - 1000000 - - - 10000 - - - 100000 - - - - - - - Qt::Horizontal - - - - + + + + 0 + 0 + + + + lines + + + 10000 + + + 1000000 + + + 10000 + + + 100000 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 6 + + + @@ -433,28 +449,33 @@ - - - - - 1 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + + + + 0 + 0 + + + + 1 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 6 + + + @@ -464,28 +485,33 @@ - - - - - 1 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + + + + 0 + 0 + + + + 1 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 6 + + + @@ -495,28 +521,33 @@ - - - - - 0 - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + + + + 0 + 0 + + + + 0 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 6 + + + @@ -529,28 +560,17 @@ - - - - - s - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - + + + + 0 + 0 + + + + s + + diff --git a/launcher/ui/themes/CatPack.cpp b/launcher/ui/themes/CatPack.cpp index 85eb85a18..416b86139 100644 --- a/launcher/ui/themes/CatPack.cpp +++ b/launcher/ui/themes/CatPack.cpp @@ -43,7 +43,7 @@ #include "FileSystem.h" #include "Json.h" -QString BasicCatPack::path() +QString BasicCatPack::path() const { const auto now = QDate::currentDate(); const auto birthday = QDate(now.year(), 11, 1); @@ -100,12 +100,12 @@ QDate ensureDay(int year, int month, int day) return QDate(year, month, day); } -QString JsonCatPack::path() +QString JsonCatPack::path() const { return path(QDate::currentDate()); } -QString JsonCatPack::path(QDate now) +QString JsonCatPack::path(QDate now) const { for (auto var : m_variants) { QDate startDate = ensureDay(now.year(), var.startTime.month, var.startTime.day); diff --git a/launcher/ui/themes/CatPack.h b/launcher/ui/themes/CatPack.h index 5a13d0cef..e0e34f86e 100644 --- a/launcher/ui/themes/CatPack.h +++ b/launcher/ui/themes/CatPack.h @@ -43,18 +43,18 @@ class CatPack { public: virtual ~CatPack() {} - virtual QString id() = 0; - virtual QString name() = 0; - virtual QString path() = 0; + virtual QString id() const = 0; + virtual QString name() const = 0; + virtual QString path() const = 0; }; class BasicCatPack : public CatPack { public: BasicCatPack(QString id, QString name) : m_id(id), m_name(name) {} BasicCatPack(QString id) : BasicCatPack(id, id) {} - virtual QString id() override { return m_id; } - virtual QString name() override { return m_name; } - virtual QString path() override; + virtual QString id() const override { return m_id; } + virtual QString name() const override { return m_name; } + virtual QString path() const override; protected: QString m_id; @@ -65,7 +65,7 @@ class FileCatPack : public BasicCatPack { public: FileCatPack(QString id, QFileInfo& fileInfo) : BasicCatPack(id), m_path(fileInfo.absoluteFilePath()) {} FileCatPack(QFileInfo& fileInfo) : FileCatPack(fileInfo.baseName(), fileInfo) {} - virtual QString path() { return m_path; } + virtual QString path() const { return m_path; } private: QString m_path; @@ -83,8 +83,8 @@ class JsonCatPack : public BasicCatPack { PartialDate endTime; }; JsonCatPack(QFileInfo& manifestInfo); - virtual QString path() override; - QString path(QDate now); + virtual QString path() const override; + QString path(QDate now) const; private: QString m_default_path; diff --git a/launcher/ui/themes/ITheme.h b/launcher/ui/themes/ITheme.h index 7dc5fc64a..a3dd14d09 100644 --- a/launcher/ui/themes/ITheme.h +++ b/launcher/ui/themes/ITheme.h @@ -47,6 +47,7 @@ struct LogColors { }; // TODO: rename to Theme; this is not an interface as it contains method implementations +// TODO: make methods const class ITheme { public: virtual ~ITheme() {} diff --git a/launcher/ui/themes/IconTheme.cpp b/launcher/ui/themes/IconTheme.cpp index 4bd889854..6415c5148 100644 --- a/launcher/ui/themes/IconTheme.cpp +++ b/launcher/ui/themes/IconTheme.cpp @@ -21,8 +21,6 @@ #include #include -IconTheme::IconTheme(const QString& id, const QString& path) : m_id(id), m_path(path) {} - bool IconTheme::load() { const QString path = m_path + "/index.theme"; @@ -36,18 +34,3 @@ bool IconTheme::load() settings.endGroup(); return !m_name.isNull(); } - -QString IconTheme::id() -{ - return m_id; -} - -QString IconTheme::path() -{ - return m_path; -} - -QString IconTheme::name() -{ - return m_name; -} diff --git a/launcher/ui/themes/IconTheme.h b/launcher/ui/themes/IconTheme.h index 4e466c6ae..f49e39289 100644 --- a/launcher/ui/themes/IconTheme.h +++ b/launcher/ui/themes/IconTheme.h @@ -22,13 +22,13 @@ class IconTheme { public: - IconTheme(const QString& id, const QString& path); + IconTheme(const QString& id, const QString& path) : m_id(id), m_path(path) {} IconTheme() = default; bool load(); - QString id(); - QString path(); - QString name(); + QString id() const { return m_id; } + QString path() const { return m_path; } + QString name() const { return m_name; } private: QString m_id; diff --git a/launcher/ui/widgets/ThemeCustomizationWidget.cpp b/launcher/ui/widgets/ThemeCustomizationWidget.cpp index 097678b8d..b9412a10a 100644 --- a/launcher/ui/widgets/ThemeCustomizationWidget.cpp +++ b/launcher/ui/widgets/ThemeCustomizationWidget.cpp @@ -49,40 +49,6 @@ 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->widgetStyleLabel->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(); diff --git a/launcher/ui/widgets/ThemeCustomizationWidget.h b/launcher/ui/widgets/ThemeCustomizationWidget.h index 6977b8495..d5b160f3f 100644 --- a/launcher/ui/widgets/ThemeCustomizationWidget.h +++ b/launcher/ui/widgets/ThemeCustomizationWidget.h @@ -33,8 +33,6 @@ class ThemeCustomizationWidget : public QWidget { explicit ThemeCustomizationWidget(QWidget* parent = nullptr); ~ThemeCustomizationWidget() override; - void showFeatures(ThemeFields features); - void applySettings(); void loadSettings(); diff --git a/launcher/ui/widgets/ThemeCustomizationWidget.ui b/launcher/ui/widgets/ThemeCustomizationWidget.ui index 4ac5706dd..3e2808a48 100644 --- a/launcher/ui/widgets/ThemeCustomizationWidget.ui +++ b/launcher/ui/widgets/ThemeCustomizationWidget.ui @@ -7,68 +7,13 @@ 0 0 400 - 191 + 168 Form - - 0 - - - 0 - - - 0 - - - 0 - - - - - View icon themes folder. - - - Open Folder - - - - - - - The cat appears in the background and is not shown by default. It is only made visible when pressing the Cat button in the Toolbar. - - - C&at - - - backgroundCatComboBox - - - - - - - View cat packs folder. - - - Open Folder - - - - - - - &Icons - - - iconsComboBox - - - @@ -102,22 +47,6 @@ - - - - - 0 - 0 - - - - Qt::StrongFocus - - - The cat appears in the background and is not shown by default. It is only made visible when pressing the Cat button in the Toolbar. - - - @@ -131,7 +60,17 @@ - + + + + View icon themes folder. + + + Open Folder + + + + @@ -146,13 +85,6 @@ - - - - Refresh All - - - @@ -168,6 +100,62 @@ + + + + The cat appears in the background and is not shown by default. It is only made visible when pressing the Cat button in the Toolbar. + + + C&at + + + backgroundCatComboBox + + + + + + + &Icons + + + iconsComboBox + + + + + + + View cat packs folder. + + + Open Folder + + + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + The cat appears in the background and is not shown by default. It is only made visible when pressing the Cat button in the Toolbar. + + + + + + + Refresh All + + + @@ -177,7 +165,6 @@ widgetStyleFolder backgroundCatComboBox catPackFolder - refreshButton