Allow saving/loading the color palette config to/from an external file
This commit is contained in:
parent
b16caee532
commit
836801fb39
|
@ -10,7 +10,7 @@ set(META_APP_DESCRIPTION
|
||||||
"Common Qt related C++ classes and routines used by my applications such as dialogs, widgets and models")
|
"Common Qt related C++ classes and routines used by my applications such as dialogs, widgets and models")
|
||||||
set(META_VERSION_MAJOR 6)
|
set(META_VERSION_MAJOR 6)
|
||||||
set(META_VERSION_MINOR 5)
|
set(META_VERSION_MINOR 5)
|
||||||
set(META_VERSION_PATCH 0)
|
set(META_VERSION_PATCH 1)
|
||||||
set(META_APP_VERSION ${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH})
|
set(META_APP_VERSION ${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH})
|
||||||
|
|
||||||
project(${META_PROJECT_NAME})
|
project(${META_PROJECT_NAME})
|
||||||
|
|
|
@ -3,10 +3,14 @@
|
||||||
|
|
||||||
#include "ui_paletteeditor.h"
|
#include "ui_paletteeditor.h"
|
||||||
|
|
||||||
|
#include <QFileDialog>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QMetaProperty>
|
#include <QMetaProperty>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QSettings>
|
||||||
#include <QStyle>
|
#include <QStyle>
|
||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
|
|
||||||
|
@ -38,6 +42,11 @@ PaletteEditor::PaletteEditor(QWidget *parent)
|
||||||
m_ui->paletteView->setColumnHidden(2, true);
|
m_ui->paletteView->setColumnHidden(2, true);
|
||||||
m_ui->paletteView->setColumnHidden(3, true);
|
m_ui->paletteView->setColumnHidden(3, true);
|
||||||
|
|
||||||
|
auto saveButton = m_ui->buttonBox->addButton(tr("Save…"), QDialogButtonBox::ActionRole);
|
||||||
|
connect(saveButton, &QPushButton::clicked, this, &PaletteEditor::save);
|
||||||
|
auto loadButton = m_ui->buttonBox->addButton(tr("Load…"), QDialogButtonBox::ActionRole);
|
||||||
|
connect(loadButton, &QPushButton::clicked, this, &PaletteEditor::load);
|
||||||
|
|
||||||
connect(m_paletteModel, &PaletteModel::paletteChanged, this, &PaletteEditor::paletteChanged);
|
connect(m_paletteModel, &PaletteModel::paletteChanged, this, &PaletteEditor::paletteChanged);
|
||||||
connect(m_ui->buildButton, &ColorButton::colorChanged, this, &PaletteEditor::buildPalette);
|
connect(m_ui->buildButton, &ColorButton::colorChanged, this, &PaletteEditor::buildPalette);
|
||||||
connect(m_ui->computeRadio, &QRadioButton::clicked, this, &PaletteEditor::handleComputeRadioClicked);
|
connect(m_ui->computeRadio, &QRadioButton::clicked, this, &PaletteEditor::handleComputeRadioClicked);
|
||||||
|
@ -124,6 +133,74 @@ void PaletteEditor::handleDetailsRadioClicked()
|
||||||
m_paletteModel->setCompute(false);
|
m_paletteModel->setCompute(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QString paletteSuffix()
|
||||||
|
{
|
||||||
|
return QStringLiteral("ini");
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline QString paletteFilter()
|
||||||
|
{
|
||||||
|
return PaletteEditor::tr("Color palette configuration (*.ini)");
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool loadPalette(const QString &fileName, QPalette *pal, QString *errorMessage)
|
||||||
|
{
|
||||||
|
const auto settings = QSettings(fileName, QSettings::IniFormat);
|
||||||
|
if (settings.status() != QSettings::NoError) {
|
||||||
|
*errorMessage = PaletteEditor::tr("Unable to load \"%1\".").arg(fileName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const auto value = settings.value(QStringLiteral("palette"));
|
||||||
|
if (!value.isValid() || !value.canConvert<QPalette>()) {
|
||||||
|
*errorMessage = PaletteEditor::tr("\"%1\" does not contain a valid palette.").arg(fileName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*pal = settings.value(QStringLiteral("palette")).value<QPalette>();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool savePalette(const QString &fileName, const QPalette &pal, QString *errorMessage)
|
||||||
|
{
|
||||||
|
auto settings = QSettings(fileName, QSettings::IniFormat);
|
||||||
|
settings.setValue(QStringLiteral("palette"), QVariant(pal));
|
||||||
|
settings.sync();
|
||||||
|
if (settings.status() != QSettings::NoError) {
|
||||||
|
*errorMessage = PaletteEditor::tr("Unable to write \"%1\".").arg(fileName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PaletteEditor::load()
|
||||||
|
{
|
||||||
|
auto dialog = QFileDialog(this, tr("Load palette"), QString(), paletteFilter());
|
||||||
|
dialog.setAcceptMode(QFileDialog::AcceptOpen);
|
||||||
|
if (dialog.exec() != QDialog::Accepted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto pal = QPalette();
|
||||||
|
auto errorMessage = QString();
|
||||||
|
if (loadPalette(dialog.selectedFiles().constFirst(), &pal, &errorMessage)) {
|
||||||
|
setPalette(pal);
|
||||||
|
} else {
|
||||||
|
QMessageBox::warning(this, tr("Error reading palette"), errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PaletteEditor::save()
|
||||||
|
{
|
||||||
|
auto dialog = QFileDialog(this, tr("Save palette"), QString(), paletteFilter());
|
||||||
|
dialog.setAcceptMode(QFileDialog::AcceptSave);
|
||||||
|
dialog.setDefaultSuffix(paletteSuffix());
|
||||||
|
if (dialog.exec() != QDialog::Accepted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto errorMessage = QString();
|
||||||
|
if (!savePalette(dialog.selectedFiles().constFirst(), palette(), &errorMessage)) {
|
||||||
|
QMessageBox::warning(this, tr("Error writing palette"), errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PaletteEditor::paletteChanged(const QPalette &palette)
|
void PaletteEditor::paletteChanged(const QPalette &palette)
|
||||||
{
|
{
|
||||||
m_modelUpdated = true;
|
m_modelUpdated = true;
|
||||||
|
|
|
@ -43,6 +43,8 @@ private Q_SLOTS:
|
||||||
void paletteChanged(const QPalette &palette);
|
void paletteChanged(const QPalette &palette);
|
||||||
void handleComputeRadioClicked();
|
void handleComputeRadioClicked();
|
||||||
void handleDetailsRadioClicked();
|
void handleDetailsRadioClicked();
|
||||||
|
void load();
|
||||||
|
void save();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updatePreviewPalette();
|
void updatePreviewPalette();
|
||||||
|
|
Loading…
Reference in New Issue