mirror of https://github.com/mgba-emu/mgba.git
Qt: don't save shader choice until OK/Apply is clicked
This commit is contained in:
parent
f930184efb
commit
a2e7e5b902
|
@ -428,6 +428,7 @@ void SettingsView::setShaderSelector(ShaderSelector* shaderSelector) {
|
||||||
}
|
}
|
||||||
m_shader = shaderSelector;
|
m_shader = shaderSelector;
|
||||||
QObject::connect(this, &SettingsView::saveSettingsRequested, m_shader, &ShaderSelector::saveSettings);
|
QObject::connect(this, &SettingsView::saveSettingsRequested, m_shader, &ShaderSelector::saveSettings);
|
||||||
|
QObject::connect(m_ui.buttonBox, &QDialogButtonBox::rejected, m_shader, &ShaderSelector::revert);
|
||||||
if (shaderSelector) {
|
if (shaderSelector) {
|
||||||
addPage(tr("Shaders"), m_shader, Page::SHADERS);
|
addPage(tr("Shaders"), m_shader, Page::SHADERS);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -50,7 +50,25 @@ ShaderSelector::~ShaderSelector() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderSelector::saveSettings() {
|
void ShaderSelector::saveSettings() {
|
||||||
emit saved();
|
QString oldPath = config->getOption("shader");
|
||||||
|
if (oldPath != m_shaderPath) {
|
||||||
|
if (m_shaderPath.isEmpty()) {
|
||||||
|
clearShader(true);
|
||||||
|
} else {
|
||||||
|
loadShader(m_shaderPath, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
emit saveSettingsRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShaderSelector::revert() {
|
||||||
|
QString shaderPath = m_config->getOption("shader");
|
||||||
|
if (shaderPath.isEmpty()) {
|
||||||
|
clearShader();
|
||||||
|
} else {
|
||||||
|
loadShader(shaderPath);
|
||||||
|
emit reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderSelector::clear() {
|
void ShaderSelector::clear() {
|
||||||
|
@ -78,7 +96,7 @@ void ShaderSelector::selectShader() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderSelector::loadShader(const QString& path) {
|
void ShaderSelector::loadShader(const QString& path, bool saveToSettings) {
|
||||||
VDir* shader = VFileDevice::openDir(path);
|
VDir* shader = VFileDevice::openDir(path);
|
||||||
if (!shader) {
|
if (!shader) {
|
||||||
shader = VFileDevice::openArchive(path);
|
shader = VFileDevice::openArchive(path);
|
||||||
|
@ -89,14 +107,18 @@ void ShaderSelector::loadShader(const QString& path) {
|
||||||
m_display->setShaders(shader);
|
m_display->setShaders(shader);
|
||||||
shader->close(shader);
|
shader->close(shader);
|
||||||
m_shaderPath = path;
|
m_shaderPath = path;
|
||||||
m_config->setOption("shader", m_shaderPath);
|
if (saveToSettings) {
|
||||||
|
m_config->setOption("shader", path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderSelector::clearShader() {
|
void ShaderSelector::clearShader(bool saveToSettings) {
|
||||||
m_display->clearShaders();
|
m_display->clearShaders();
|
||||||
refreshShaders();
|
|
||||||
m_shaderPath = "";
|
m_shaderPath = "";
|
||||||
m_config->setOption("shader", m_shaderPath);
|
if (saveToSettings) {
|
||||||
|
m_config->setOption("shader", m_shaderPath);
|
||||||
|
}
|
||||||
|
refreshShaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderSelector::refreshShaders() {
|
void ShaderSelector::refreshShaders() {
|
||||||
|
@ -121,7 +143,7 @@ void ShaderSelector::refreshShaders() {
|
||||||
m_ui.author->clear();
|
m_ui.author->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(this, &ShaderSelector::saved, 0, 0);
|
disconnect(this, &ShaderSelector::saveSettingsRequested, 0, 0);
|
||||||
disconnect(this, &ShaderSelector::reset, 0, 0);
|
disconnect(this, &ShaderSelector::reset, 0, 0);
|
||||||
disconnect(this, &ShaderSelector::resetToDefault, 0, 0);
|
disconnect(this, &ShaderSelector::resetToDefault, 0, 0);
|
||||||
|
|
||||||
|
@ -160,7 +182,7 @@ void ShaderSelector::addUniform(QGridLayout* settings, const QString& section, c
|
||||||
connect(f, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), [value](double v) {
|
connect(f, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), [value](double v) {
|
||||||
*value = v;
|
*value = v;
|
||||||
});
|
});
|
||||||
connect(this, &ShaderSelector::saved, [this, section, name, f]() {
|
connect(this, &ShaderSelector::saveSettingsRequested, [this, section, name, f]() {
|
||||||
m_config->setQtOption(name, f->value(), section);
|
m_config->setQtOption(name, f->value(), section);
|
||||||
});
|
});
|
||||||
connect(this, &ShaderSelector::reset, [this, section, name, f]() {
|
connect(this, &ShaderSelector::reset, [this, section, name, f]() {
|
||||||
|
@ -194,7 +216,7 @@ void ShaderSelector::addUniform(QGridLayout* settings, const QString& section, c
|
||||||
connect(i, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [value](int v) {
|
connect(i, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [value](int v) {
|
||||||
*value = v;
|
*value = v;
|
||||||
});
|
});
|
||||||
connect(this, &ShaderSelector::saved, [this, section, name, i]() {
|
connect(this, &ShaderSelector::saveSettingsRequested, [this, section, name, i]() {
|
||||||
m_config->setQtOption(name, i->value(), section);
|
m_config->setQtOption(name, i->value(), section);
|
||||||
});
|
});
|
||||||
connect(this, &ShaderSelector::reset, [this, section, name, i]() {
|
connect(this, &ShaderSelector::reset, [this, section, name, i]() {
|
||||||
|
|
|
@ -31,15 +31,16 @@ public slots:
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
void refreshShaders();
|
void refreshShaders();
|
||||||
void clear();
|
void clear();
|
||||||
|
void revert();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void selectShader();
|
void selectShader();
|
||||||
void loadShader(const QString& path);
|
void loadShader(const QString& path, bool saveToSettings = false);
|
||||||
void clearShader();
|
void clearShader(bool saveToSettings = false);
|
||||||
void buttonPressed(QAbstractButton*);
|
void buttonPressed(QAbstractButton*);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void saved();
|
void saveSettingsRequested();
|
||||||
void reset();
|
void reset();
|
||||||
void resetToDefault();
|
void resetToDefault();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue