From aa842c11b7a15782c4c1cd392ec5cece5db2d2b6 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 23 Dec 2022 23:42:53 -0600 Subject: [PATCH] Color palette open file dialog --- scwx-qt/source/scwx/qt/ui/settings_dialog.cpp | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 74c9d79b..c048caed 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -10,6 +10,7 @@ #include +#include #include namespace scwx @@ -272,8 +273,11 @@ void SettingsDialogImpl::SetupPalettesColorTablesTab() int colorTableRow = 0; for (auto& colorTableType : kColorTableTypes_) { - QLineEdit* lineEdit = new QLineEdit(self_); - QToolButton* resetButton = new QToolButton(self_); + QLineEdit* lineEdit = new QLineEdit(self_); + QToolButton* openFileButton = new QToolButton(self_); + QToolButton* resetButton = new QToolButton(self_); + + openFileButton->setText(QObject::tr("...")); resetButton->setIcon( QIcon {":/res/icons/font-awesome-6/rotate-left-solid.svg"}); @@ -282,7 +286,7 @@ void SettingsDialogImpl::SetupPalettesColorTablesTab() colorTableLayout->addWidget( new QLabel(colorTableType.second.c_str(), self_), colorTableRow, 0); colorTableLayout->addWidget(lineEdit, colorTableRow, 1); - colorTableLayout->addWidget(new QToolButton(self_), colorTableRow, 2); + colorTableLayout->addWidget(openFileButton, colorTableRow, 2); colorTableLayout->addWidget(resetButton, colorTableRow, 3); ++colorTableRow; @@ -299,6 +303,40 @@ void SettingsDialogImpl::SetupPalettesColorTablesTab() paletteSettings.palette(colorTableType.first)); colorTable.SetEditWidget(lineEdit); colorTable.SetResetButton(resetButton); + + QObject::connect( + openFileButton, + &QAbstractButton::clicked, + self_, + [this, lineEdit]() + { + static const std::string paletteFilter = "Color Palettes (*.pal)"; + static const std::string allFilter = "All Files (*)"; + + QFileDialog* dialog = new QFileDialog(self_); + + dialog->setFileMode(QFileDialog::ExistingFile); + dialog->setNameFilters({QObject::tr(paletteFilter.c_str()), + QObject::tr(allFilter.c_str())}); + dialog->setAttribute(Qt::WA_DeleteOnClose); + + QObject::connect(dialog, + &QFileDialog::fileSelected, + self_, + [this, lineEdit](const QString& file) + { + QString path = QDir::toNativeSeparators(file); + + logger_->info("Selected palette: {}", + path.toStdString()); + lineEdit->setText(path); + + // textEdit does not emit the textEdited signal + emit lineEdit->textEdited(path); + }); + + dialog->open(); + }); } }