From aa03342b7178221f38c5c53a002247f5323559c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hubi=C4=8Dka?= <46065755+janhubicka@users.noreply.github.com> Date: Wed, 23 Sep 2026 20:56:12 +0200 Subject: [PATCH] qtgui: expose Reset for Image Layer mix sliders Continue the Phase C default/modified-state rollout with the six saved RGB mix parameters in Image Layer. Opt the three dark-offset channels and three RGB mixture weights into ParameterPanel's real-default presentation. Reset targets are taken from a fresh ParameterState, appear only when the saved value differs from that default, and remain separate undoable gestures. Keep the source-choice checkbox and Set by dark/neutral/infrared controls unchanged: the former is a discrete mode and the latter are one-shot operations, not numeric slider state. Extend workspace churn so every image_layer mix key must expose both its keyed spin box and default/reset metadata. --- src/qtgui/ImageLayerPanel.cpp | 12 ++++++------ src/qtgui/WorkspaceChurnSmoke.cpp | 7 +++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/qtgui/ImageLayerPanel.cpp b/src/qtgui/ImageLayerPanel.cpp index 481816cbe..ddef8c0aa 100644 --- a/src/qtgui/ImageLayerPanel.cpp +++ b/src/qtgui/ImageLayerPanel.cpp @@ -62,21 +62,21 @@ void ImageLayerPanel::setupUi() { [](const ParameterState &s) { return s.rparams.mix_dark.red; }, [](ParameterState &s, double v) { s.rparams.mix_dark.red = v; }, 3.0, enableSimulated, false, QString(), - QStringLiteral("image_layer.mix_dark.red")); + QStringLiteral("image_layer.mix_dark.red"), true); addSliderParameter( tr("Mix dark (green)"), -3.0, 1.0, 1, 4, "", "", [](const ParameterState &s) { return s.rparams.mix_dark.green; }, [](ParameterState &s, double v) { s.rparams.mix_dark.green = v; }, 3.0, enableSimulated, false, QString(), - QStringLiteral("image_layer.mix_dark.green")); + QStringLiteral("image_layer.mix_dark.green"), true); addSliderParameter( tr("Mix dark (blue)"), -3.0, 1.0, 1, 4, "", "", [](const ParameterState &s) { return s.rparams.mix_dark.blue; }, [](ParameterState &s, double v) { s.rparams.mix_dark.blue = v; }, 3.0, enableSimulated, false, QString(), - QStringLiteral("image_layer.mix_dark.blue")); + QStringLiteral("image_layer.mix_dark.blue"), true); // Dark Area Button m_setDarkAreaBtn = addToggleButtonParameter( @@ -92,21 +92,21 @@ void ImageLayerPanel::setupUi() { [](const ParameterState &s) { return s.rparams.mix_red; }, [](ParameterState &s, double v) { s.rparams.mix_red = v; }, 1.0, enableSimulated, false, QString(), - QStringLiteral("image_layer.mix.red")); + QStringLiteral("image_layer.mix.red"), true); addSliderParameter( tr("Mix green"), -10.0, 10.0, 1, 2, "", "", [](const ParameterState &s) { return s.rparams.mix_green; }, [](ParameterState &s, double v) { s.rparams.mix_green = v; }, 1.0, enableSimulated, false, QString(), - QStringLiteral("image_layer.mix.green")); + QStringLiteral("image_layer.mix.green"), true); addSliderParameter( tr("Mix blue"), -10.0, 10.0, 1, 2, "", "", [](const ParameterState &s) { return s.rparams.mix_blue; }, [](ParameterState &s, double v) { s.rparams.mix_blue = v; }, 1.0, enableSimulated, false, QString(), - QStringLiteral("image_layer.mix.blue")); + QStringLiteral("image_layer.mix.blue"), true); // Neutral Area Button m_setNeutralAreaBtn = addToggleButtonParameter( diff --git a/src/qtgui/WorkspaceChurnSmoke.cpp b/src/qtgui/WorkspaceChurnSmoke.cpp index 825821e4a..a5b618549 100644 --- a/src/qtgui/WorkspaceChurnSmoke.cpp +++ b/src/qtgui/WorkspaceChurnSmoke.cpp @@ -821,6 +821,13 @@ if (!workflowSummary || !workflowToggle || !workflowStages || .arg(key)); return; } + QToolButton *reset = findParameterResetButton(key); + if (!reset || !reset->property("parameterDefaultValue").isValid()) { + fail(QStringLiteral( + "Workspace churn lost Image Layer default/reset metadata for %1") + .arg(key)); + return; + } } if (!imageLayerSourceChoice || imageLayerSourceChoice->property("parameterKey").toString() !=