diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index ee1834b1d..f038738cc 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -3735,6 +3735,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : anglog(0.0), // mask visimask(false), + complexmask(0), expmask(false), sensimask(60), blendmask(0), @@ -4217,6 +4218,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && anglog == other.anglog // mask && visimask == other.visimask + && complexmask == other.complexmask && expmask == other.expmask && sensimask == other.sensimask && blendmask == other.blendmask @@ -5723,6 +5725,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo //mask if ((!pedited || spot_edited->visimask) && spot.visimask) { saveToKeyfile(!pedited || spot_edited->expmask, "Locallab", "Expmask_" + index_str, spot.expmask, keyFile); + saveToKeyfile(!pedited || spot_edited->complexmask, "Locallab", "Complexmask_" + index_str, spot.complexmask, keyFile); saveToKeyfile(!pedited || spot_edited->sensimask, "Locallab", "Sensimask_" + index_str, spot.sensimask, keyFile); saveToKeyfile(!pedited || spot_edited->blendmask, "Locallab", "Blendmaskmask_" + index_str, spot.blendmask, keyFile); saveToKeyfile(!pedited || spot_edited->enamask, "Locallab", "Enamask_" + index_str, spot.enamask, keyFile); @@ -7447,6 +7450,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Anglog_" + index_str, pedited, spot.anglog, spotEdited.anglog); // mask spot.visimask = assignFromKeyfile(keyFile, "Locallab", "Expmask_" + index_str, pedited, spot.expmask, spotEdited.expmask); + assignFromKeyfile(keyFile, "Locallab", "Complexmask_" + index_str, pedited, spot.complexmask, spotEdited.complexmask); assignFromKeyfile(keyFile, "Locallab", "Sensimask_" + index_str, pedited, spot.sensimask, spotEdited.sensimask); assignFromKeyfile(keyFile, "Locallab", "Blendmaskmask_" + index_str, pedited, spot.blendmask, spotEdited.blendmask); assignFromKeyfile(keyFile, "Locallab", "Enamask_" + index_str, pedited, spot.enamask, spotEdited.enamask); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 73e3b4c70..abb32e137 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1423,6 +1423,7 @@ struct LocallabParams { double anglog; // mask bool visimask; + int complexmask; bool expmask; int sensimask; int blendmask; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 7ddf1bbb1..1cc184b24 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -1237,6 +1237,8 @@ private: void enabledChanged() override; void showmaskMethodChanged(); void enamaskChanged(); + void convertParamToNormal() override; + void updateGUIToMode(const modeType new_type) override; /* void autocomputeToggled(); diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index e8e9e460d..0efc7e0ad 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -4727,7 +4727,9 @@ void LocallabLog::updateLogGUI() /* ==== LocallabMask ==== */ LocallabMask::LocallabMask(): - LocallabTool(this, M("TP_LOCALLAB_MASKCOM_TOOLNAME"), M("TP_LOCALLAB_MASKCOM"), false, false), + LocallabTool(this, M("TP_LOCALLAB_MASKCOM_TOOLNAME"), M("TP_LOCALLAB_MASKCOM"), false), + + // Comon mask specific widgets sensimask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))), blendmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), showmaskMethod(Gtk::manage(new MyComboBoxText())), @@ -4847,6 +4849,7 @@ void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const Params exp->set_visible(spot.visimask); exp->setEnabled(spot.expmask); + complexity->set_active(spot.complexmask); sensimask->setValue(spot.sensimask); @@ -4863,6 +4866,9 @@ void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const Params // Enable all listeners enableListener(); + // Update GUI according to complexity mode + updateGUIToMode(static_cast(complexity->get_active_row_number())); + // Update Log Encoding GUI according to autocompute button state // updateLogGUI(); @@ -4878,6 +4884,7 @@ void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* ped spot.expmask = exp->getEnabled(); spot.visimask = exp->get_visible(); + spot.complexmask = complexity->get_active_row_number(); spot.sensimask = sensimask->getIntValue(); spot.blendmask = blendmask->getIntValue(); @@ -4931,6 +4938,38 @@ void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams // Note: No need to manage pedited as batch mode is deactivated for Locallab } +void LocallabMask::updateGUIToMode(const modeType new_type) +{ + if (new_type == Normal) { + // Advanced widgets are hidden in Normal mode + lapmask->hide(); + gammask->hide(); + slopmask->hide(); + } else { + // Advanced widgets are shown in Expert mode + lapmask->show(); + gammask->show(); + slopmask->show(); + } +} + +void LocallabMask::convertParamToNormal() +{ + const LocallabParams::LocallabSpot defSpot; + + // Disable all listeners + disableListener(); + + + lapmask->setValue(defSpot.lapmask); + gammask->setValue(defSpot.gammask); + slopmask->setValue(defSpot.slopmask); + + // Enable all listeners + enableListener(); + +} + void LocallabMask::adjusterChanged(Adjuster* a, double newval) { if (isLocActivated && exp->getEnabled()) { diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 8866885be..1cb15568a 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1479,6 +1479,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).anglog = locallab.spots.at(j).anglog && pSpot.anglog == otherSpot.anglog; //mask locallab.spots.at(j).visimask = locallab.spots.at(j).visimask && pSpot.visimask == otherSpot.visimask; + locallab.spots.at(j).complexmask = locallab.spots.at(j).complexmask && pSpot.complexmask == otherSpot.complexmask; locallab.spots.at(j).expmask = locallab.spots.at(j).expmask && pSpot.expmask == otherSpot.expmask; locallab.spots.at(j).sensimask = locallab.spots.at(j).sensimask && pSpot.sensimask == otherSpot.sensimask; locallab.spots.at(j).blendmask = locallab.spots.at(j).blendmask && pSpot.blendmask == otherSpot.blendmask; @@ -4798,6 +4799,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).visimask = mods.locallab.spots.at(i).visimask; } + if (locallab.spots.at(i).complexmask) { + toEdit.locallab.spots.at(i).complexmask = mods.locallab.spots.at(i).complexmask; + } + if (locallab.spots.at(i).expmask) { toEdit.locallab.spots.at(i).expmask = mods.locallab.spots.at(i).expmask; } @@ -6405,6 +6410,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : anglog(v), // mask visimask(v), + complexmask(v), expmask(v), sensimask(v), blendmask(v), @@ -6877,6 +6883,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) anglog = v; // mask visimask = v; + complexmask = v; expmask = v; sensimask = v; blendmask = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 77d34d239..f91b93f61 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -837,6 +837,7 @@ public: bool anglog; //mask bool visimask; + bool complexmask; bool expmask; bool sensimask; bool blendmask;