Add theme editor dialog

This commit is contained in:
AdenKoperczak 2025-04-11 12:35:23 -04:00
parent bdb73b645c
commit c29c0e82dd
No known key found for this signature in database
GPG key ID: 9843017036F62EE7
3 changed files with 53 additions and 20 deletions

View file

@ -703,6 +703,7 @@ target_link_libraries(scwx-qt PUBLIC Qt${QT_VERSION_MAJOR}::Widgets
glm::glm
imgui
qt6ct-common
qt6ct-widgets
SQLite::SQLite3
wxdata)

View file

@ -48,6 +48,11 @@
#include <QToolButton>
#include <utility>
#define QT6CT_LIBRARY
#include <qt6ct-common/qt6ct.h>
#include <qt6ct/paletteeditdialog.h>
#undef QT6CT_LIBRARY
namespace scwx
{
namespace qt
@ -578,31 +583,39 @@ void SettingsDialogImpl::SetupGeneralTab()
self_,
[this]()
{
static const std::string themeFilter = "Qt6Ct Theme File (*.conf)";
static const std::string allFilter = "All Files (*)";
const settings::GeneralSettings& generalSettings =
settings::GeneralSettings::Instance();
const QString file =
generalSettings.theme_file().GetStagedOrValue().c_str();
const QPalette palette =
Qt6CT::loadColorScheme(file, QApplication::palette());
QStyle* style = QApplication::style();
QFileDialog* dialog = new QFileDialog(self_);
dialog->setFileMode(QFileDialog::ExistingFile);
dialog->setNameFilters(
{QObject::tr(themeFilter.c_str()), QObject::tr(allFilter.c_str())});
// WA_DeleteOnClose manages memory
// NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
auto* dialog = new PaletteEditDialog(palette, style, self_);
dialog->setAttribute(Qt::WA_DeleteOnClose);
QObject::connect(
dialog,
&QFileDialog::fileSelected,
&QDialog::accepted,
self_,
[this](const QString& file)
[dialog]()
{
QString path = QDir::toNativeSeparators(file);
logger_->info("Selected theme file: {}", path.toStdString());
self_->ui->themeFileLineEdit->setText(path);
const QPalette palette = dialog->selectedPalette();
const settings::GeneralSettings& generalSettings =
settings::GeneralSettings::Instance();
const QString file =
generalSettings.theme_file().GetStagedOrValue().c_str();
Qt6CT::createColorScheme(file, palette);
// setText does not emit the textEdited signal
Q_EMIT self_->ui->themeFileLineEdit->textEdited(path);
auto uiStyle = scwx::qt::types::GetUiStyle(
generalSettings.theme().GetValue());
if (uiStyle == scwx::qt::types::UiStyle::FusionCustom)
{
QApplication::setPalette(palette);
}
});
dialog->open();
});