/* * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath frame * * * * RawTherapee is free software: you can redistribute it and/or modify * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as publishfed by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * RawTherapee is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . * 2017 Jacques Desmis * 2018 Pierre Cabrera */ #include "locallab.h" #include "rtimage.h" #include #include "../rtengine/rt_math.h" #include "options.h" #include #include "editcallbacks.h" #include "guiutils.h" #include #include #include "../rtengine/color.h" #include "../rtengine/improcfun.h" #include "labgrid.h" #define MINCHRO 0. #define MAXCHRO 150. #define MAXCHROCC 100. #define MINNEIGH 0.1 #define MAXNEIGH 1500 #define CENTERNEIGH 200 #define MINRAD 1.5 #define MAXRAD 10000 #define CENTERRAD 100 using namespace rtengine; extern Options options; static double blurSlider2radius(double sval) { // slider range: 0 - 1000 double radius; if (sval <= 100) { // linear below center-temp radius = MINRAD + (sval / 100.0) * (CENTERRAD - MINRAD); } else { const double slope = (double)(CENTERRAD - MINRAD) / (MAXRAD - CENTERRAD); double x = (sval - 100) / 100; // x 0..1 double y = x * slope + (1.0 - slope) * pow(x, 4.0); radius = CENTERRAD + y * (MAXRAD - CENTERRAD); } if (radius < MINRAD) { radius = MINRAD; } if (radius > MAXRAD) { radius = MAXRAD; } return radius; } static double blurRadius2Slider(double radius) { double sval; if (radius <= CENTERRAD) { sval = ((radius - MINRAD) / (CENTERRAD - MINRAD)) * 100.0; } else { const double slope = (double)(CENTERRAD - MINRAD) / (MAXRAD - CENTERRAD); const double y = (radius - CENTERRAD) / (MAXRAD - CENTERRAD); double x = pow(y, 0.25); // rough guess of x, will be a little lower double k = 0.1; bool add = true; // the y=f(x) function is a mess to invert, therefore we have this trial-refinement loop instead. // from tests, worst case is about 20 iterations, ie no problem for (;;) { double y1 = x * slope + (1.0 - slope) * pow(x, 4.0); if (100. * fabs(y1 - y) < 0.1) { break; } if (y1 < y) { if (!add) { k /= 2; } x += k; add = true; } else { if (add) { k /= 2; } x -= k; add = false; } } sval = 100.0 + x * 100.0; } if (sval < 0.) { sval = 0.; } if (sval > 10000.) { sval = 10000.; } return sval; } static double retiSlider2neigh(double sval) { // slider range: 0 - 5000 double neigh; if (sval <= 200) { // linear below center-temp neigh = MINNEIGH + (sval / 200.0) * (CENTERNEIGH - MINNEIGH); } else { const double slope = (double)(CENTERNEIGH - MINNEIGH) / (MAXNEIGH - CENTERNEIGH); double x = (sval - 200) / 200; // x 0..1 double y = x * slope + (1.0 - slope) * pow(x, 4.0); neigh = CENTERNEIGH + y * (MAXNEIGH - CENTERNEIGH); } if (neigh < MINNEIGH) { neigh = MINNEIGH; } if (neigh > MAXNEIGH) { neigh = MAXNEIGH; } return neigh; } static double retiNeigh2Slider(double neigh) { double sval; if (neigh <= CENTERNEIGH) { sval = ((neigh - MINNEIGH) / (CENTERNEIGH - MINNEIGH)) * 200.0; } else { const double slope = (double)(CENTERNEIGH - MINNEIGH) / (MAXNEIGH - CENTERNEIGH); const double y = (neigh - CENTERNEIGH) / (MAXNEIGH - CENTERNEIGH); double x = pow(y, 0.25); // rough guess of x, will be a little lower double k = 0.1; bool add = true; // the y=f(x) function is a mess to invert, therefore we have this trial-refinement loop instead. // from tests, worst case is about 20 iterations, ie no problem for (;;) { double y1 = x * slope + (1.0 - slope) * pow(x, 4.0); if (200 * fabs(y1 - y) < 0.1) { break; } if (y1 < y) { if (!add) { k /= 2; } x += k; add = true; } else { if (add) { k /= 2; } x -= k; add = false; } } sval = 200.0 + x * 200.0; } if (sval < 0.) { sval = 0.; } if (sval > 1500.) { sval = 1500.; } return sval; } Locallab::Locallab(): FoldableToolPanel(this, "locallab", M("TP_LOCALLAB_LABEL"), false, true), // Expander widgets expsettings(Gtk::manage(new ControlSpotPanel())), expcolor(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_COFR")))), expexpose(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_EXPOSE")))), expshadhigh(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_SHADHIGH")))), expvibrance(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_VIBRANCE")))), expsoft(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_SOFT")))), expblur(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), exptonemap(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), expreti(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), expretitools(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPRETITOOLS")))), expsharp(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), // expcontrastpyr(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_LOC_CONTRASTPYR")))), expcontrastpyr(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::HBox())))), expcontrast(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), // expcontrast(Gtk::manage(new MyExpander(true,M("TP_LOCALLAB_LOC_CONTRAST")))), expcbdl(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), expdenoi(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::HBox())))), explog(Gtk::manage(new MyExpander(true, M("TP_LOCALLAB_LOG")))), expmaskcol(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWC")))), expmaskcol1(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWC1")))), expcurvcol(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPCURV")))), expmaskexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWE")))), expmasksh(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWS")))), expmasklc(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWLC")))), expmaskcb(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWCB")))), expmaskreti(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWR")))), expmasktm(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWT")))), expmaskbl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWPLUS")))), expmaskvib(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWVI")))), expgradexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))), exptoolexp(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPTOOL")))), expgradsh(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))), exptrcsh(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPTRC")))), expgradvib(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))), expgradcol(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))), // CurveEditorGroup widgets // Color & Light llCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LUM"))), clCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CH"))), HCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_HLH"))), H2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_HLH"))), rgbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_RGB"))), maskCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))), maskHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKH"))), mask2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))), Lmaskshape(static_cast(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))), llshape(static_cast(llCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), ccshape(static_cast(llCurveEditorG->addCurve(CT_Diagonal, "C(C)"))), clshape(static_cast(clCurveEditorG->addCurve(CT_Diagonal, "C(L)"))), lcshape(static_cast(clCurveEditorG->addCurve(CT_Diagonal, "L(C)"))), toneMethod(Gtk::manage(new MyComboBoxText())), rgbshape(static_cast(rgbCurveEditorG->addCurve(CT_Diagonal, "", toneMethod))), LHshape(static_cast(HCurveEditorG->addCurve(CT_Flat, "L(H)", nullptr, false, true))), HHshape(static_cast(H2CurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true))), CCmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskshape(static_cast(maskCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), LLmaskcolshapewav(static_cast(mask2CurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHhmaskshape(static_cast(maskHCurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true))), // Exposure curveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CURVEEDITOR_TONES_LABEL"))), maskexpCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2expCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmaskexpshape(static_cast(mask2expCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), shapeexpos(static_cast(curveEditorG->addCurve(CT_Diagonal, ""))), CCmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskexpshape(static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), //Shadows Highlight maskSHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2SHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), LmaskSHshape(static_cast(mask2SHCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskSHshape(static_cast(maskSHCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), // Vibrance curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))), maskvibCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), skinTonesCurve(static_cast(curveEditorGG->addCurve(CT_Diagonal, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES")))), mask2vibCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmaskvibshape(static_cast(mask2vibCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskvibshape(static_cast(maskvibCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), //Blur maskblCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2blCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2blCurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))), Lmaskblshape(static_cast(mask2blCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskblshape(static_cast(maskblCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), LLmaskblshapewav(static_cast(mask2blCurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))), //TM masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2tmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmasktmshape(static_cast(mask2tmCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmasktmshape(static_cast(masktmCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), // Retinex LocalcurveEditortransT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONMAP"))), LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))), maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2retiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmaskretishape(static_cast(mask2retiCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), cTtransshape(static_cast(LocalcurveEditortransT->addCurve(CT_Flat, "", nullptr, false, false))), cTgainshape(static_cast(LocalcurveEditorgainT->addCurve(CT_Flat, "", nullptr, false, false))), CCmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskretishape(static_cast(maskretiCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), //Local contrast LocalcurveEditorwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAV"))), wavshape(static_cast(LocalcurveEditorwav->addCurve(CT_Flat, "", nullptr, false, false))), LocalcurveEditorwavlev(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVLEV"))), wavshapelev(static_cast(LocalcurveEditorwavlev->addCurve(CT_Flat, "", nullptr, false, false))), LocalcurveEditorwavcon(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCON"))), wavshapecon(static_cast(LocalcurveEditorwavcon->addCurve(CT_Flat, "", nullptr, false, false))), LocalcurveEditorwavcomp(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMP"))), wavshapecomp(static_cast(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))), masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2lcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmasklcshape(static_cast(mask2lcCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmasklcshape(static_cast(masklcCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), //CBDL maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))), mask2cbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))), Lmaskcbshape(static_cast(mask2cbCurveEditorG->addCurve(CT_Diagonal, "L(L)"))), CCmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "C(C)", nullptr, false, false))), LLmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "L(L)", nullptr, false, false))), HHmaskcbshape(static_cast(maskcbCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true))), //Denoise LocalcurveEditorwavden(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVDEN"))), wavshapeden(static_cast(LocalcurveEditorwavden->addCurve(CT_Flat, "", nullptr, false, false))), // Adjuster widgets // Color & Light lightness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTNESS"), -100, 500, 1, 0))), contrast(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRAST"), -100, 100, 1, 0))), chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), strengthgrid(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRGRID"), 0, 100, 1, 30))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL1"), 0, 100, 1, 0))), blurcolde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), strcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRLUM"), -4., 4., 0.05, 0.))), strcolab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRCHRO"), -6., 6., 0.05, 0.))), strcolh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRHUE"), -6., 6., 0.05, 0.))), angcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))), blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), slomaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), shadmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))), softradiuscol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), -10.0, 1000.0, 0.5, 0.))), opacol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OPACOL"), 0.0, 100.0, 0.5, 60.))), conthrcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTTHR"), 0.0, 100.0, 0.5, 0.))), strumaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))), mercol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MERDCOL"), 0.0, 100.0, 0.5, 18.))), merlucol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MERLUCOL"), 0.0, 100.0, 0.5, 32., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), blurcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCOL"), 0.2, 100., 0.5, 0.2))), contcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTCOL"), 0., 200., 0.5, 0.))), // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -2.0, 3.0, 0.05, 0.0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 0))), hlcomprthresh(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 0))), black(Gtk::manage(new Adjuster(M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 10, 0))), shadex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHADEX"), 0, 100, 1, 0))), shcompr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHADEXCOMP"), 0, 100, 1, 50))), expchroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EXPCHROMA"), -50, 100, 1, 30))), warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), strexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))), angexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))), blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), slomaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), softradiusexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), -10.0, 1000.0, 0.5, 0.))), laplacexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPLACEXP"), 0.0, 100.0, 0.1, 0.))), balanexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BALANEXP"), 0.2, 1.2, 0.01, 0.75))), linear(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LINEAR"), 0., 1., 0.01, 0.3))), gamm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMM"), 0.2, 1.3, 0.01, 0.4))), fatamount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATAMOUNT"), 1., 100., 1., 1.))), fatdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))), fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), strmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))), angmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.))), fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0, 3, 1, 2))), multipliersh( [this]() -> std::array { std::array res = {}; for (unsigned int i = 0; i < res.size(); ++i) { Glib::ustring ss = Glib::ustring::format(i); if (i == 0) { ss += Glib::ustring::compose(" (%1)", M("TP_LOCALLAB_LUMADARKEST")); } else if (i == 4) { ss += Glib::ustring::compose(" (%1)", M("TP_LOCALLAB_LUMAWHITESEST")); } res[i] = Gtk::manage(new Adjuster(std::move(ss), -100, 100, 1, 0)); res[i]->setAdjusterListener(this); } return res; } () ), //Shadow hightlights highlights(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), 0, 100, 1, 0))), h_tonalwidth(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HLTONALW"), 10, 100, 1, 70))), shadows(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_SHADOWS"), 0, 100, 1, 0))), s_tonalwidth(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_SHTONALW"), 10, 100, 1, 30))), sh_radius(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_RADIUS"), 0, 100, 1, 40))), sensihs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), blendmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), blurSHde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), strSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))), angSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))), chromaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), slomaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), detailSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILSH"), -5, 5, 1, 0))), fatamountSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATAMOUNT"), 1., 100., 1., 1.))), fatanchorSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), gamSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMSH"), 0.25, 15.0, 0.01, 2.4))), sloSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOSH"), 0.0, 100.0, 0.01, 12.92))), // Vibrance saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), sensiv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), blendmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), slomaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), strvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))), strvibab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRCHRO"), -4., 4., 0.05, 0.))), strvibh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRHUE2"), -6., 6., 0.05, 0.))), angvib(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))), //Soft Light streng(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENG"), 1, 100, 1, 1))), laplace(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPLACE"), 0., 100., 0.5, 25.))), sensisf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 1, 100, 1, 15))), // Blur & Noise radius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADIUS"), MINRAD, MAXRAD, 0.1, 1.5, nullptr, nullptr, &blurSlider2radius, &blurRadius2Slider))), strength(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENGTH"), 0, 100, 1, 0))), itera(Gtk::manage(new Adjuster(M("TP_DIRPYRDENOISE_MEDIAN_PASSES"), 1, 4, 1, 1))), guidbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GUIDBL"), 0, 1000, 1, 0))), epsbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_EPSBL"), -10, 10, 1, 0))), sensibn(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIBN"), 0, 100, 1, 40))), blendmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))), slomaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), shadmaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HIGHMASKCOL"), 0, 100, 1, 0))), isogr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ISOGR"), 20, 6400, 1, 0))), strengr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENGR"), 0, 100, 1, 0))), scalegr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALEGR"), 0, 100, 1, 100))), strumaskbl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))), // Tone Mapping stren(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STREN"), -0.5, 2.0, 0.01, 0.5))), gamma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAM"), 0.4, 4.0, 0.11, 1.0))), estop(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ESTOP"), 0.1, 4., 0.01, 1.4))), scaltm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALTM"), 0.1, 10.0, 0.01, 1.0))), rewei(Gtk::manage(new Adjuster(M("TP_LOCALLAB_REWEI"), 0, 3, 1, 0))), sensitm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), softradiustm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), -10.0, 1000.0, 0.1, 0.))), amount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_AMOUNT"), 50., 100.0, 0.5, 95.))), satur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATUR"), -100., 100., 0.1, 0.))),//by default satur = 0 ==> use Mantiuk value blendmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))), slomasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), // Retinex str(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STR"), 0., 100., 0.1, 0.2))), chrrt(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHRRT"), 0.0, 100.0, 0.1, 0.0))), neigh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NEIGH"), MINNEIGH, MAXNEIGH, 0.5, 50., nullptr, nullptr, &retiSlider2neigh, &retiNeigh2Slider))), vart(Gtk::manage(new Adjuster(M("TP_LOCALLAB_VART"), 0.1, 500., 0.1, 150.))), offs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFS"), -16386., 32768., 1., 0.))), dehaz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZ"), -100, 100, 1, 0))), depth(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEPTH"), 0, 100, 1, 25))), sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIH"), 0, 100, 1, 60))), softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRETI"), -10.0, 1000.0, 0.5, 40.))), blendmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 10.))), chromaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.05, 5.0, 0.01, 1.))), slomaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), scalereti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALERETI"), 1.0, 10.0, 1., 2.))), darkness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DARKRETI"), 0.01, 6.0, 0.01, 2.0))), lightnessreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTRETI"), 0.01, 4.0, 0.01, 1.))), limd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRESRETI"), 1.2, 100.0, 0.1, 8.))), cliptm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLIPTM"), 0.02, 2.0, 0.01, 1.))), // Sharpening sharcontrast(Gtk::manage(new Adjuster(M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 20))), sharradius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARRADIUS"), 0.4, 2.5, 0.01, 0.75))), sharamount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARAMOUNT"), 0, 100, 1, 100))), shardamping(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARDAMPING"), 0, 100, 1, 0))), shariter(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARITER"), 5, 100, 1, 30))), sharblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARBLUR"), 0.2, 2.0, 0.05, 0.2))), sensisha(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIS"), 0, 100, 1, 19))), // Local Contrast lcradius(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_RADIUS"), 10, 100, 1, 80))), lcamount(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_AMOUNT"), 0, 1.0, 0.01, 0))), lcdarkness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_DARKNESS"), 0, 3.0, 0.01, 1.0))), lclightness(Gtk::manage(new Adjuster(M("TP_LOCALCONTRAST_LIGHTNESS"), 0, 3.0, 0.01, 1.0))), levelwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LEVELWAV"), 1, 9, 1, 4))), residcont(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCONT"), -100, 100, 1, 0))), residblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDBLUR"), 0., 100., 0.5, 0.))), levelblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LEVELBLUR"), 0., 100., 0.5, 0.))), clarilres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARILRES"), -20., 100., 0.5, 0.))), clarisoft(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), -10.0, 1000.0, 0.5, 1.))), claricres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARICRES"), -20., 100., 0.5, 0.))), sensilc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIS"), 0, 100, 1, 19))), residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100, 100, 1, 0))), sigma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))), offset(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFSETWAV"), 0.33, 1.66, 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), chromalev(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMALEV"), 0.01, 2., 0.01, 1.))), chromablu(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMABLU"), 0.01, 2., 0.01, 1.))), fatdet(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))), fatanch(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))), blendmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), multiplier( [this]() -> std::array { std::array res = {}; for (unsigned int i = 0; i < res.size(); ++i) { Glib::ustring ss = Glib::ustring::format(i); if (i == 0) { ss += Glib::ustring::compose(" (%1)", M("TP_DIRPYREQUALIZER_LUMAFINEST")); } else if (i == 5) { ss += Glib::ustring::compose(" (%1)", M("TP_DIRPYREQUALIZER_LUMACOARSEST")); } res[i] = Gtk::manage(new Adjuster(std::move(ss), 0.0, 4.0, 0.01, 1.0)); res[i]->setAdjusterListener(this); } return res; }() ), // Contrast by detail levels chromacbdl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMACBDL"), 0., 1.5, 0.01, 0.))), threshold(Gtk::manage(new Adjuster(M("TP_DIRPYREQUALIZER_THRESHOLD"), 0, 1., 0.01, 0.2))), clarityml(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARITYML"), 0.1, 100., 0.1, 0.1))), contresid(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRESID"), -100, 100, 1, 0))), blurcbdl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCBDL"), 0., 100., 0.1, 0.))), sensicb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSICB"), 0, 100, 1, 15))), softradiuscb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), -10.0, 1000.0, 0.5, 0.))), blendmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), radmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), -10.0, 1000.0, 0.1, 0.))), chromaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), gammaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), slomaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), lapmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))), // Denoise noiselumf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINE"), MINCHRO, MAXCHRO, 0.01, 0.))), noiselumf0(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINEZERO"), MINCHRO, MAXCHRO, 0.01, 0.))), noiselumf2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINETWO"), MINCHRO, MAXCHRO, 0.01, 0.))), noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))), noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0., 100., 0.01, 0.))), noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("circle-white-small.png")), Gtk::manage(new RTImage("circle-black-small.png"))))), noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 0.01, 0.))), noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), MINCHRO, MAXCHROCC, 0.01, 0.))), noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0., 100., 0.01, 0.))), adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-red-small.png"))))), bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))), sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIDEN"), 0, 100, 1, 20))), detailthr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAILTHR"), 0, 100, 1, 0))), //log encoding sourceGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_GRAY"), 1.0, 100.0, 0.1, 18.0))), targetGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 5.0, 80.0, 0.1, 18.0))), blackEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.0, 0.0, 0.1, -5.0))), whiteEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0.0, 32.0, 0.1, 10.0))), detail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0, 5, 1, 1))), sensilog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSILOG"), 0, 100, 1, 50))), baselog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BASELOG"), 1.3, 8., 0.05, 2., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), // ButtonCheck widgets // Color & Light curvactiv(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CURV")))), invers(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), special(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SPECIAL")))), toolcol(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), enaColorMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), fftColorMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTCOL_MASK")))), // Exposure enaExpMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enaExpMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASKAFT")))), inversex(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), //Shadows Highlight enaSHMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), inverssh(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), // Vibrance protectSkins(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PROTECTSKINS")))), avoidColorShift(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_AVOIDCOLORSHIFT")))), pastSatTog(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PASTSATTOG")))), enavibMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), // Blur & Noise activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))), enablMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), fftwbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTWBLUR")))), toolbl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))), //TM equiltm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), enatmMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enatmMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_AFTER_MASK")))), // Retinex equilret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))), inversret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), loglin(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGLIN")))), lumonly(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LUMONLY")))), enaretiMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), enaretiMasktmap(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TM_MASK")))), fftwreti(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW")))), // Sharpening inverssha(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), // Local contrast fftwlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW")))), blurlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BLURLC")))), origlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ORIGLC")))), enalcMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), //CBDL enacbMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))), //encoding log Autogray(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AUTOGRAY")))), fullimage(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FULLIMAGE")))), // ComboBox widgets // Color & Light qualitycurveMethod(Gtk::manage(new MyComboBoxText())), gridMethod(Gtk::manage(new MyComboBoxText())), merMethod(Gtk::manage(new MyComboBoxText())), // toneMethod(Gtk::manage(new MyComboBoxText())), showmaskcolMethod(Gtk::manage(new MyComboBoxText())), showmaskcolMethodinv(Gtk::manage(new MyComboBoxText())), mergecolMethod(Gtk::manage(new MyComboBoxText())), csThresholdcol(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))), //Exposure showmaskexpMethod(Gtk::manage(new MyComboBoxText())), showmaskexpMethodinv(Gtk::manage(new MyComboBoxText())), expMethod(Gtk::manage(new MyComboBoxText())), exnoiseMethod(Gtk::manage(new MyComboBoxText())), //Shadows Highlight shMethod(Gtk::manage(new MyComboBoxText())), showmaskSHMethod(Gtk::manage(new MyComboBoxText())), showmaskSHMethodinv(Gtk::manage(new MyComboBoxText())), //vibrance showmaskvibMethod(Gtk::manage(new MyComboBoxText())), // Blur & Noise blurMethod(Gtk::manage(new MyComboBoxText())), //soft Method softMethod(Gtk::manage(new MyComboBoxText())), showmasksoftMethod(Gtk::manage(new MyComboBoxText())), //Blur blMethod(Gtk::manage(new MyComboBoxText())), medMethod(Gtk::manage(new MyComboBoxText())), showmaskblMethod(Gtk::manage(new MyComboBoxText())), csThresholdblur(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))), //TM showmasktmMethod(Gtk::manage(new MyComboBoxText())), // Retinex retinexMethod(Gtk::manage(new MyComboBoxText())), showmaskretiMethod(Gtk::manage(new MyComboBoxText())), //Local contrast localcontMethod(Gtk::manage(new MyComboBoxText())), csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 6, 6, 0, false))), showmasklcMethod(Gtk::manage(new MyComboBoxText())), //CBDL showmaskcbMethod(Gtk::manage(new MyComboBoxText())), // ThresholdAdjuster widgets // Vibrance psThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_VIBRANCE_PSTHRESHOLD"), -100., 100., 0., M("TP_VIBRANCE_PSTHRESHOLD_WEIGTHING"), 0, 0., 100., 75., M("TP_VIBRANCE_PSTHRESHOLD_SATTHRESH"), 0, this, false))), // Other widgets autocompute(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_LOGAUTO")))), labqualcurv(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_QUALCURV_METHOD") + ":"))), lumacontrastMinusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS")))), lumaneutralButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL")))), lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))), gridFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRID")))), struFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))), blurFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABBLURM")))), gridmerFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRIDMERG")))), toolcolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))), toolblFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))), mergecolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGECOLFRA")))), merge1colFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_MERGE1COLFRA")))), pdeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_PDEFRA")))), fatFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_FATFRA")))), gradFramemask(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADFRA")))), fatSHFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_FATSHFRA")))), gamFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GAMFRA")))), dehaFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DEHAFRA")))), retiFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETIFRA")))), retitoolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETITOOLFRA")))), residFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")))), clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))), blurlevelFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")))), contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTFRA")))), compFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_COMPFRA")))), grainFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRAINFRA")))), logFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGFRA")))), logPFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGPFRA")))), // retiBox(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))), retiBox(Gtk::manage(new ToolParamBlock())), maskretiBox(Gtk::manage(new ToolParamBlock())), mask7(Gtk::manage(new ToolParamBlock())), labgrid(Gtk::manage(new LabGrid(EvLocallabLabGridValue, M("TP_LOCALLAB_LABGRID_VALUES")))), labgridmerg(Gtk::manage(new LabGrid(EvLocallabLabGridmergValue, M("TP_LOCALLAB_LABGRID_VALUES"), false))), mMLabels(Gtk::manage(new Gtk::Label("---"))), transLabels(Gtk::manage(new Gtk::Label("---"))), transLabels2(Gtk::manage(new Gtk::Label("---"))), // Others ctboxsoftmethod(Gtk::manage(new Gtk::HBox())), ctboxexpmethod(Gtk::manage(new Gtk::HBox())), nextmin(0.), nextmax(0.), nextminiT(0.), nextmaxiT(0.), nextmeanT(0.), nextminT(0.), nextmaxT(0.), nextsigma(0.), defparams(nullptr), defpedited(nullptr), pe(nullptr) { ToolVBox* const panel = Gtk::manage(new ToolVBox()); const bool showtooltip = options.showtooltip; complexsoft = options.complexity; CurveListener::setMulti(true); rtengine::procparams::LocallabParams::LocallabSpot defSpot; // Settings expsettings->getExpander()->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsettings->getExpander())); expsettings->setLevel(2); panel->pack_start(*expsettings->getExpander(), false, false); // Color & Light expcolor->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcolor)); enablecolorConn = expcolor->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcolor)); // expcolor->set_tooltip_text(M("TP_LOCALLAB_EXPCOLOR_TOOLTIP")); setExpandAlignProperties(expmaskcol, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskcol->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskcol)); expmaskcol->setLevel(2); setExpandAlignProperties(expmaskcol1, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskcol1->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskcol1)); expmaskcol1->setLevel(2); if (showtooltip) { expmaskcol->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } setExpandAlignProperties(expgradcol, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expgradcol->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expgradcol)); expgradcol->setLevel(2); setExpandAlignProperties(expcurvcol, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expcurvcol->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcurvcol)); expcurvcol->setLevel(2); curvactivConn = curvactiv->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::curvactivChanged)); lightness->setAdjusterListener(this); if (showtooltip) { lightness->set_tooltip_text(M("TP_LOCALLAB_EXPCOLOR_TOOLTIP")); } contrast->setAdjusterListener(this); chroma->setAdjusterListener(this); if (showtooltip) { sensi->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); } sensi->setAdjusterListener(this); strengthgrid->setAdjusterListener(this); structcol->setAdjusterListener(this); blurcolde->setAdjusterListener(this); // blurcol->setAdjusterListener(this); contcol->setAdjusterListener(this); strcol->setAdjusterListener(this); angcol->setAdjusterListener(this); strcolab->setAdjusterListener(this); strcolh->setAdjusterListener(this); blendmaskcol->setAdjusterListener(this); radmaskcol->setLogScale(10, -10); radmaskcol->setAdjusterListener(this); chromaskcol->setAdjusterListener(this); gammaskcol->setAdjusterListener(this); slomaskcol->setAdjusterListener(this); shadmaskcol->setAdjusterListener(this); strumaskcol->setAdjusterListener(this); softradiuscol->setLogScale(10, -10); softradiuscol->setAdjusterListener(this); opacol->setAdjusterListener(this); conthrcol->setAdjusterListener(this); lapmaskcol->setAdjusterListener(this); mercol->setAdjusterListener(this); merlucol->setAdjusterListener(this); if (showtooltip) { radmaskcol->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmaskcol->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); } if (showtooltip) { strcol->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP")); strcolab->set_tooltip_text(M("TP_LOCALLAB_GRADSTRAB_TOOLTIP")); strcolh->set_tooltip_text(M("TP_LOCALLAB_GRADSTRHUE_TOOLTIP")); angcol->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); } qualitycurveMethod->append(M("TP_LOCALLAB_CURVNONE")); qualitycurveMethod->append(M("TP_LOCALLAB_CURVCURR")); qualitycurveMethod->set_active(0); if (showtooltip) { qualitycurveMethod->set_tooltip_markup(M("TP_LOCALLAB_CURVEMETHOD_TOOLTIP")); } qualitycurveMethodConn = qualitycurveMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::qualitycurveMethodChanged)); gridMethod->append(M("TP_LOCALLAB_GRIDONE")); gridMethod->append(M("TP_LOCALLAB_GRIDTWO")); gridMethod->set_active(0); gridMethodConn = gridMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::gridMethodChanged)); merMethod->append(M("TP_LOCALLAB_MRONE")); merMethod->append(M("TP_LOCALLAB_MRTWO")); merMethod->append(M("TP_LOCALLAB_MRTHR")); merMethod->append(M("TP_LOCALLAB_MRFOU")); merMethod->append(M("TP_LOCALLAB_MRFIV")); merMethod->set_active(0); merMethodConn = merMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::merMethodChanged)); toneMethod->append(M("TP_EXPOSURE_TCMODE_STANDARD")); toneMethod->append(M("TP_EXPOSURE_TCMODE_WEIGHTEDSTD")); toneMethod->append(M("TP_EXPOSURE_TCMODE_LUMINANCE")); toneMethod->append(M("TP_EXPOSURE_TCMODE_FILMLIKE")); toneMethod->set_active(0); toneMethodConn = toneMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::toneMethodChanged)); llCurveEditorG->setCurveListener(this); llshape->setResetCurve(DiagonalCurveType(defSpot.llcurve.at(0)), defSpot.llcurve); if (showtooltip) { llshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } const std::vector zero_one_shape = { {0., 0., 0., 0.}, {1., 1., 1., 1.} }; const std::vector& mllshape = zero_one_shape; llshape->setBottomBarBgGradient(mllshape); llshape->setLeftBarBgGradient(mllshape); ccshape->setResetCurve(DiagonalCurveType(defSpot.cccurve.at(0)), defSpot.cccurve); if (showtooltip) { ccshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } ccshape->setBottomBarColorProvider(this, 2); ccshape->setLeftBarColorProvider(this, 7); if (showtooltip) { clshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } const std::vector& mclshape = zero_one_shape; llCurveEditorG->curveListComplete(); clCurveEditorG->setCurveListener(this); clshape->setResetCurve(DiagonalCurveType(defSpot.clcurve.at(0)), defSpot.clcurve); clshape->setBottomBarBgGradient(mclshape); clshape->setLeftBarColorProvider(this, 7); if (showtooltip) { lcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } const std::vector& mlcshape = zero_one_shape; lcshape->setResetCurve(DiagonalCurveType(defSpot.lccurve.at(0)), defSpot.lccurve); lcshape->setBottomBarColorProvider(this, 2); lcshape->setLeftBarBgGradient(mlcshape); clCurveEditorG->curveListComplete(); // llCurveEditorG->newLine(); HCurveEditorG->setCurveListener(this); LHshape->setIdentityValue(0.); LHshape->setResetCurve(FlatCurveType(defSpot.LHcurve.at(0)), defSpot.LHcurve); if (showtooltip) { LHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } LHshape->setCurveColorProvider(this, 1); const std::vector six_shape = []() -> std::vector { std::vector res; float R, G, B; for (int i = 0; i < 6; ++i) { const float x = static_cast(i) * (1.f / 6.f); Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); res.emplace_back(x, R, G, B); } return res; }(); const std::vector& mLHshape = six_shape; LHshape->setBottomBarBgGradient(mLHshape); HCurveEditorG->curveListComplete(); H2CurveEditorG->setCurveListener(this); HHshape->setIdentityValue(0.); HHshape->setResetCurve(FlatCurveType(defSpot.HHcurve.at(0)), defSpot.HHcurve); if (showtooltip) { HHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } HHshape->setCurveColorProvider(this, 1); const std::vector& mHHshape = six_shape; HHshape->setBottomBarBgGradient(mHHshape); H2CurveEditorG->curveListComplete(); rgbCurveEditorG->setCurveListener(this); rgbshape->setResetCurve(DiagonalCurveType(defSpot.rgbcurve.at(0)), defSpot.rgbcurve); if (showtooltip) { rgbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } const std::vector& mrgbshape = zero_one_shape; rgbshape->setBottomBarBgGradient(mrgbshape); rgbshape->setLeftBarBgGradient(mrgbshape); rgbCurveEditorG->curveListComplete(); inversConn = invers->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversChanged)); specialConn = special->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::specialChanged)); toolcolConn = toolcol->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::toolcolChanged)); mergecolMethod->append(M("TP_LOCALLAB_MERONE")); mergecolMethod->append(M("TP_LOCALLAB_MERTWO")); mergecolMethod->append(M("TP_LOCALLAB_MERTHR")); mergecolMethod->append(M("TP_LOCALLAB_MERFOU")); mergecolMethod->append(M("TP_LOCALLAB_MERFIV")); mergecolMethod->append(M("TP_LOCALLAB_MERSIX")); mergecolMethod->append(M("TP_LOCALLAB_MERSEV")); mergecolMethod->append(M("TP_LOCALLAB_MERSEV0")); mergecolMethod->append(M("TP_LOCALLAB_MERSEV1")); mergecolMethod->append(M("TP_LOCALLAB_MERSEV2")); mergecolMethod->append(M("TP_LOCALLAB_MERHEI")); mergecolMethod->append(M("TP_LOCALLAB_MERNIN")); mergecolMethod->append(M("TP_LOCALLAB_MERTEN")); mergecolMethod->append(M("TP_LOCALLAB_MERELE")); mergecolMethod->append(M("TP_LOCALLAB_MERTWE")); mergecolMethod->append(M("TP_LOCALLAB_MERTHI")); mergecolMethod->append(M("TP_LOCALLAB_MERFOR")); mergecolMethod->append(M("TP_LOCALLAB_MERHUE")); mergecolMethod->append(M("TP_LOCALLAB_MERSAT")); mergecolMethod->append(M("TP_LOCALLAB_MERCOL")); mergecolMethod->append(M("TP_LOCALLAB_MERLUM")); mergecolMethod->set_active(0); mergecolMethodConn = mergecolMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::mergecolMethodChanged)); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); showmaskcolMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskcolMethod->set_active(0); if (showtooltip) { showmaskcolMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskcolMethodConn = showmaskcolMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskcolMethodChanged)); showmaskcolMethodinv->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskcolMethodinv->append(M("TP_LOCALLAB_SHOWMASK")); showmaskcolMethodinv->set_active(0); if (showtooltip) { showmaskcolMethodinv->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskcolMethodConninv = showmaskcolMethodinv->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskcolMethodChangedinv)); enaColorMaskConn = enaColorMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaColorMaskChanged)); fftColorMaskConn = fftColorMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::fftColorMaskChanged)); maskCurveEditorG->setCurveListener(this); CCmaskshape->setIdentityValue(0.); CCmaskshape->setResetCurve(FlatCurveType(defSpot.CCmaskcurve.at(0)), defSpot.CCmaskcurve); if (showtooltip) { CCmaskshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskshape->setBottomBarColorProvider(this, 7); LLmaskshape->setIdentityValue(0.); LLmaskshape->setResetCurve(FlatCurveType(defSpot.LLmaskcurve.at(0)), defSpot.LLmaskcurve); if (showtooltip) { LLmaskshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskshape->setBottomBarBgGradient(mllshape); if (showtooltip) { LLmaskshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskshape->setIdentityValue(0.); HHmaskshape->setResetCurve(FlatCurveType(defSpot.HHmaskcurve.at(0)), defSpot.HHmaskcurve); if (showtooltip) { HHmaskshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } // maskHCurveEditorG->setCurveListener(this); HHmaskshape->setCurveColorProvider(this, 6); HHmaskshape->setBottomBarColorProvider(this, 6); maskCurveEditorG->curveListComplete(); maskHCurveEditorG->setCurveListener(this); HHhmaskshape->setIdentityValue(0.); HHhmaskshape->setResetCurve(FlatCurveType(defSpot.HHhmaskcurve.at(0)), defSpot.HHhmaskcurve); if (showtooltip) { HHhmaskshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); } HHhmaskshape->setCurveColorProvider(this, 6); HHhmaskshape->setBottomBarColorProvider(this, 6); maskHCurveEditorG->curveListComplete(); mask2CurveEditorG->setCurveListener(this); Lmaskshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskcurve.at(0)), defSpot.Lmaskcurve); if (showtooltip) { Lmaskshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskshape = zero_one_shape; Lmaskshape->setBottomBarBgGradient(mLmaskshape); Lmaskshape->setLeftBarBgGradient(mLmaskshape); mask2CurveEditorG->curveListComplete(); mask2CurveEditorGwav->setCurveListener(this); LLmaskcolshapewav->setIdentityValue(0.); LLmaskcolshapewav->setResetCurve(FlatCurveType(defSpot.LLmaskcolcurvewav.at(0)), defSpot.LLmaskcolcurvewav); if (showtooltip) { LLmaskcolshapewav->setTooltip(M("TP_LOCALLAB_LMASK_LEVEL_TOOLTIP")); } LLmaskcolshapewav->setBottomBarBgGradient(mllshape); mask2CurveEditorGwav->curveListComplete(); csThresholdcol->setAdjusterListener(this); if (showtooltip) { opacol->set_tooltip_text(M("TP_LOCALLAB_MERGEOPA_TOOLTIP")); conthrcol->set_tooltip_text(M("TP_LOCALLAB_MERGEOPA_TOOLTIP")); } ToolParamBlock* const gradcolBox = Gtk::manage(new ToolParamBlock()); gradcolBox->pack_start(*strcol); if (complexsoft < 2) { gradcolBox->pack_start(*strcolab); } if (complexsoft < 2) { gradcolBox->pack_start(*strcolh); } gradcolBox->pack_start(*angcol); ToolParamBlock* const colorBox = Gtk::manage(new ToolParamBlock()); Gtk::Frame* const superFrame = Gtk::manage(new Gtk::Frame()); superFrame->set_label_align(0.025, 0.5); superFrame->set_label_widget(*curvactiv); ToolParamBlock* const superBox = Gtk::manage(new ToolParamBlock()); superBox->pack_start(*lightness); superBox->pack_start(*contrast); superBox->pack_start(*chroma); gridFrame->set_label_align(0.025, 0.5); ToolParamBlock* const gridBox = Gtk::manage(new ToolParamBlock()); gridBox->pack_start(*labgrid); gridBox->pack_start(*gridMethod); gridBox->pack_start(*strengthgrid); gridFrame->add(*gridBox); superBox->pack_start(*gridFrame); superFrame->add(*superBox); colorBox->pack_start(*superFrame); colorBox->pack_start(*sensi); // if (complexsoft < 2) { colorBox->pack_start(*structcol); // } if (complexsoft < 2) { colorBox->pack_start(*blurcolde); } if (complexsoft < 2) { colorBox->pack_start(*softradiuscol); } colorBox->pack_start(*invers); expgradcol->add(*gradcolBox, false); colorBox->pack_start(*expgradcol, false, false); ToolParamBlock* const curvBox = Gtk::manage(new ToolParamBlock()); Gtk::HBox* const qualcurvbox = Gtk::manage(new Gtk::HBox()); qualcurvbox->pack_start(*labqualcurv, Gtk::PACK_SHRINK, 4); qualcurvbox->pack_start(*qualitycurveMethod); curvBox->pack_start(*qualcurvbox); curvBox->pack_start(*llCurveEditorG, Gtk::PACK_SHRINK, 4); if (complexsoft < 2) { curvBox->pack_start(*clCurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { curvBox->pack_start(*HCurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { curvBox->pack_start(*H2CurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { curvBox->pack_start(*rgbCurveEditorG, Gtk::PACK_SHRINK, 4); } if (complexsoft < 2) { curvBox->pack_start(*special); } expcurvcol->add(*curvBox, false); colorBox->pack_start(*expcurvcol, false, false); Gtk::HSeparator* const separatormer = Gtk::manage(new Gtk::HSeparator()); if (showtooltip) { gridmerFrame->set_tooltip_text(M("TP_LOCALLAB_GRIDFRAME_TOOLTIP")); } ToolParamBlock* const gridmerBox = Gtk::manage(new ToolParamBlock()); gridmerFrame->set_label_align(0.025, 0.5); gridmerBox->pack_start(*labgridmerg); gridmerBox->pack_start(*merlucol); gridmerFrame->add(*gridmerBox); mergecolFrame->set_label_align(0.025, 0.5); merge1colFrame->set_label_align(0.025, 0.5); ToolParamBlock* const mergecolBox = Gtk::manage(new ToolParamBlock()); mergecolBox->pack_start(*separatormer, Gtk::PACK_SHRINK, 2); mergecolBox->pack_start(*mergecolMethod); mergecolBox->pack_start(*mercol); mergecolBox->pack_start(*opacol); mergecolBox->pack_start(*conthrcol); mergecolBox->pack_start(*gridmerFrame); if (complexsoft < 2) { merge1colFrame->add(*mergecolBox); } ToolParamBlock* const maskcolBox = Gtk::manage(new ToolParamBlock()); maskcolBox->pack_start(*showmaskcolMethod, Gtk::PACK_SHRINK, 4); maskcolBox->pack_start(*showmaskcolMethodinv, Gtk::PACK_SHRINK, 4); maskcolBox->pack_start(*enaColorMask, Gtk::PACK_SHRINK, 0); maskcolBox->pack_start(*maskCurveEditorG, Gtk::PACK_SHRINK, 4); struFrame->set_label_align(0.025, 0.5); ToolParamBlock* const strumBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { strumBox->pack_start(*strumaskcol); strumBox->pack_start(*toolcol); } struFrame->add(*strumBox); if (complexsoft < 2) { maskcolBox->pack_start(*struFrame, Gtk::PACK_SHRINK, 0); } blurFrame->set_label_align(0.025, 0.5); ToolParamBlock* const blurmBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { blurmBox->pack_start(*fftColorMask, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { blurmBox->pack_start(*contcol); blurcol->setAdjusterListener(this); blurmBox->pack_start(*blurcol); } blurFrame->add(*blurmBox); if (complexsoft < 2) { maskcolBox->pack_start(*blurFrame, Gtk::PACK_SHRINK, 0); } toolcolFrame->set_label_align(0.025, 0.5); ToolParamBlock* const toolcolBox = Gtk::manage(new ToolParamBlock()); maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0); toolcolBox->pack_start(*radmaskcol, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { toolcolBox->pack_start(*lapmaskcol, Gtk::PACK_SHRINK, 0); } toolcolBox->pack_start(*chromaskcol, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { toolcolBox->pack_start(*gammaskcol, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { toolcolBox->pack_start(*slomaskcol, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { toolcolBox->pack_start(*shadmaskcol, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { toolcolBox->pack_start(*maskHCurveEditorG, Gtk::PACK_SHRINK, 4); } toolcolBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor if (complexsoft < 1) { toolcolBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor } if (complexsoft < 1) { toolcolBox->pack_start(*csThresholdcol, Gtk::PACK_SHRINK, 0); } toolcolFrame->add(*toolcolBox); maskcolBox->pack_start(*toolcolFrame); mergecolFrame->add(*maskcolBox); ToolParamBlock* const mask7Box = Gtk::manage(new ToolParamBlock()); mask7Box->pack_start(*merMethod); mask7->pack_start(*merge1colFrame); mask7Box->pack_start(*mask7); expmaskcol1->add(*mask7Box, false); expmaskcol->add(*mergecolFrame, false); if (complexsoft < 2) { colorBox->pack_start(*expmaskcol1, false, false); } colorBox->pack_start(*expmaskcol, false, false); expcolor->add(*colorBox, false); expcolor->setLevel(2); panel->pack_start(*expcolor, false, false); // Exposure expexpose->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expexpose)); enableexposeConn = expexpose->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expexpose)); if (showtooltip) { expexpose->set_tooltip_text(M("TP_LOCALLAB_EXPOSURE_TOOLTIP")); } expMethod->append(M("TP_LOCALLAB_STD")); if (complexsoft == 1) { expMethod->append(M("TP_LOCALLAB_PDE")); } if (complexsoft == 0) { expMethod->append(M("TP_LOCALLAB_PDE2")); } expMethod->set_active(1); expMethodConn = expMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::expMethodChanged)); if (showtooltip) { expMethod->set_tooltip_text(M("TP_LOCALLAB_EXPMETHOD_TOOLTIP")); } Gtk::Label* const labelexpmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_NOISEMETH") + ":")); ctboxexpmethod->pack_start(*labelexpmethod, Gtk::PACK_SHRINK, 4); exnoiseMethod->append(M("TP_LOCALLAB_NONENOISE")); exnoiseMethod->append(M("TP_LOCALLAB_MEDIAN")); exnoiseMethod->append(M("TP_LOCALLAB_WEDIANHI")); exnoiseMethod->set_active(0); exnoiseMethodConn = exnoiseMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::exnoiseMethodChanged)); if (showtooltip) { exnoiseMethod->set_tooltip_text(M("TP_LOCALLAB_EXPMETHOD_TOOLTIP")); } ctboxexpmethod->pack_start(*exnoiseMethod); setExpandAlignProperties(expmaskexp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskexp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskexp)); expmaskexp->setLevel(2); if (showtooltip) { expmaskexp->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } expcomp->setAdjusterListener(this); hlcompr->setAdjusterListener(this); hlcomprthresh->setAdjusterListener(this); black->setAdjusterListener(this); shadex->setAdjusterListener(this); shcompr->setAdjusterListener(this); expchroma->setAdjusterListener(this); if (showtooltip) { warm->set_tooltip_text(M("TP_LOCALLAB_WARM_TOOLTIP")); } warm->setAdjusterListener(this); if (showtooltip) { sensiex->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); } sensiex->setAdjusterListener(this); inversexConn = inversex->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversexChanged)); structexp->setAdjusterListener(this); blurexpde->setAdjusterListener(this); strexp->setAdjusterListener(this); angexp->setAdjusterListener(this); blendmaskexp->setAdjusterListener(this); radmaskexp->setLogScale(10, -10); radmaskexp->setAdjusterListener(this); chromaskexp->setAdjusterListener(this); gammaskexp->setAdjusterListener(this); slomaskexp->setAdjusterListener(this); lapmaskexp->setAdjusterListener(this); strmaskexp->setAdjusterListener(this); angmaskexp->setAdjusterListener(this); softradiusexp->setLogScale(10, -10); softradiusexp->setAdjusterListener(this); laplacexp->setAdjusterListener(this); balanexp->setAdjusterListener(this); linear->setAdjusterListener(this); gamm->setAdjusterListener(this); fatamount->setAdjusterListener(this); fatdetail->setAdjusterListener(this); fatanchor->setAdjusterListener(this); fatlevel->setAdjusterListener(this); if (showtooltip) { strexp->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP")); strmaskexp->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP")); angexp->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); angmaskexp->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); } if (showtooltip) { radmaskexp->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmaskexp->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); // chromaskexp->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP")); } curveEditorG->setCurveListener(this); shapeexpos->setResetCurve(DiagonalCurveType(defSpot.excurve.at(0)), defSpot.excurve); if (showtooltip) { shapeexpos->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP")); } const std::vector& mshapeexpos = zero_one_shape; shapeexpos->setBottomBarBgGradient(mshapeexpos); shapeexpos->setLeftBarBgGradient(mshapeexpos); curveEditorG->curveListComplete(); enaExpMaskConn = enaExpMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaExpMaskChanged)); enaExpMaskaftConn = enaExpMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaExpMaskaftChanged)); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWSTRUCEX")); showmaskexpMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskexpMethod->set_active(0); if (showtooltip) { showmaskexpMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskexpMethodConn = showmaskexpMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskexpMethodChanged)); showmaskexpMethodinv->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskexpMethodinv->append(M("TP_LOCALLAB_SHOWMASK")); showmaskexpMethodinv->set_active(0); if (showtooltip) { showmaskexpMethodinv->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskexpMethodConninv = showmaskexpMethodinv->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskexpMethodChangedinv)); maskexpCurveEditorG->setCurveListener(this); CCmaskexpshape->setIdentityValue(0.); CCmaskexpshape->setResetCurve(FlatCurveType(defSpot.CCmaskexpcurve.at(0)), defSpot.CCmaskexpcurve); if (showtooltip) { CCmaskexpshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskexpshape->setBottomBarColorProvider(this, 7); LLmaskexpshape->setIdentityValue(0.); LLmaskexpshape->setResetCurve(FlatCurveType(defSpot.LLmaskexpcurve.at(0)), defSpot.LLmaskexpcurve); if (showtooltip) { LLmaskexpshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskexpshape->setBottomBarBgGradient(mllshape); HHmaskexpshape->setIdentityValue(0.); HHmaskexpshape->setResetCurve(FlatCurveType(defSpot.HHmaskexpcurve.at(0)), defSpot.HHmaskexpcurve); if (showtooltip) { HHmaskexpshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskexpshape->setCurveColorProvider(this, 6); HHmaskexpshape->setBottomBarColorProvider(this, 6); maskexpCurveEditorG->curveListComplete(); mask2expCurveEditorG->setCurveListener(this); Lmaskexpshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskexpcurve.at(0)), defSpot.Lmaskexpcurve); if (showtooltip) { Lmaskexpshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskexpshape = zero_one_shape; Lmaskexpshape->setBottomBarBgGradient(mLmaskexpshape); Lmaskexpshape->setLeftBarBgGradient(mLmaskexpshape); mask2expCurveEditorG->curveListComplete(); pdeFrame->set_label_align(0.025, 0.5); if (showtooltip) { pdeFrame->set_tooltip_text(M("TP_LOCALLAB_PDEFRAME_TOOLTIP")); } ToolParamBlock* const pdeBox = Gtk::manage(new ToolParamBlock()); pdeBox->pack_start(*laplacexp); pdeBox->pack_start(*linear); pdeBox->pack_start(*balanexp); pdeBox->pack_start(*gamm); pdeBox->pack_start(*ctboxexpmethod); fatFrame->set_label_align(0.025, 0.5); if (showtooltip) { fatFrame->set_tooltip_text(M("TP_LOCALLAB_FATFRAME_TOOLTIP")); } ToolParamBlock* const fatBox = Gtk::manage(new ToolParamBlock()); fatBox->pack_start(*fatamount); fatBox->pack_start(*fatdetail); if (complexsoft < 2) { fatBox->pack_start(*fatlevel); } fatBox->pack_start(*fatanchor); pdeFrame->add(*pdeBox); fatFrame->add(*fatBox); ToolParamBlock* const gradBox = Gtk::manage(new ToolParamBlock()); gradBox->pack_start(*strexp); gradBox->pack_start(*angexp); gradFramemask->set_label_align(0.025, 0.5); ToolParamBlock* const gradmaskBox = Gtk::manage(new ToolParamBlock()); gradmaskBox->pack_start(*strmaskexp); gradmaskBox->pack_start(*angmaskexp); gradFramemask->add(*gradmaskBox); ToolParamBlock* const exposeBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const toolBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { exposeBox->pack_start(*expMethod); } if (complexsoft < 1) { exposeBox->pack_start(*pdeFrame); } exposeBox->pack_start(*fatFrame); toolBox->pack_start(*expcomp); if (complexsoft < 2) { toolBox->pack_start(*black); } if (complexsoft < 2) { toolBox->pack_start(*hlcompr); toolBox->pack_start(*hlcomprthresh); toolBox->pack_start(*shadex); toolBox->pack_start(*shcompr); toolBox->pack_start(*expchroma); } toolBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); toolBox->pack_start(*warm); setExpandAlignProperties(exptoolexp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); exptoolexp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), exptoolexp)); exptoolexp->setLevel(2); exptoolexp->add(*toolBox, false); exposeBox->pack_start(*sensiex); // if (complexsoft < 2) { exposeBox->pack_start(*structexp); // } if (complexsoft < 2) { exposeBox->pack_start(*blurexpde); } exposeBox->pack_start(*exptoolexp); setExpandAlignProperties(expgradexp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expgradexp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expgradexp)); expgradexp->setLevel(2); expgradexp->add(*gradBox, false); exposeBox->pack_start(*expgradexp); if (complexsoft < 2) { exposeBox->pack_start(*softradiusexp); } if (complexsoft < 2) { exposeBox->pack_start(*inversex); } ToolParamBlock* const maskexpBox = Gtk::manage(new ToolParamBlock()); maskexpBox->pack_start(*showmaskexpMethod, Gtk::PACK_SHRINK, 4); maskexpBox->pack_start(*showmaskexpMethodinv, Gtk::PACK_SHRINK, 4); maskexpBox->pack_start(*enaExpMask, Gtk::PACK_SHRINK, 0); // maskexpBox->pack_start(*enaExpMaskaft, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*maskexpCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskexpBox->pack_start(*blendmaskexp, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*radmaskexp, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { maskexpBox->pack_start(*lapmaskexp, Gtk::PACK_SHRINK, 0); } maskexpBox->pack_start(*chromaskexp, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { maskexpBox->pack_start(*gammaskexp, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { maskexpBox->pack_start(*slomaskexp, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { maskexpBox->pack_start(*gradFramemask); } maskexpBox->pack_start(*mask2expCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor expmaskexp->add(*maskexpBox, false); exposeBox->pack_start(*expmaskexp, false, false); expexpose->add(*exposeBox, false); expexpose->setLevel(2); panel->pack_start(*expexpose, false, false); //shadow highlight expshadhigh->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expshadhigh)); enableshadhighConn = expshadhigh->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expshadhigh)); if (showtooltip) { expshadhigh->set_tooltip_text(M("TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP")); } shMethod->append(M("TP_LOCALLAB_SH1")); shMethod->append(M("TP_LOCALLAB_SH2")); shMethod->set_active(0); shMethodConn = shMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::shMethodChanged)); if (showtooltip) { expMethod->set_tooltip_text(M("TP_LOCALLAB_EXPMETHOD_TOOLTIP")); } /* ctboxshmethod = Gtk::manage(new Gtk::HBox()); Gtk::Label* const labelshmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_NOISEMETH") + ":")); ctboxshmethod->pack_start(*labelshmethod, Gtk::PACK_SHRINK, 4); */ setExpandAlignProperties(expmasksh, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmasksh->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmasksh)); expmasksh->setLevel(2); if (showtooltip) { expmasksh->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } highlights->setAdjusterListener(this); h_tonalwidth->setAdjusterListener(this); shadows->setAdjusterListener(this); s_tonalwidth->setAdjusterListener(this); sh_radius->setAdjusterListener(this); sensihs->setAdjusterListener(this); blendmaskSH->setAdjusterListener(this); radmaskSH->setLogScale(10, -10); radmaskSH->setAdjusterListener(this); blurSHde->setAdjusterListener(this); strSH->setAdjusterListener(this); angSH->setAdjusterListener(this); chromaskSH->setAdjusterListener(this); gammaskSH->setAdjusterListener(this); slomaskSH->setAdjusterListener(this); lapmaskSH->setAdjusterListener(this); detailSH->setAdjusterListener(this); fatamountSH->setAdjusterListener(this); fatanchorSH->setAdjusterListener(this); gamSH->setAdjusterListener(this); sloSH->setAdjusterListener(this); if (showtooltip) { radmaskSH->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmaskSH->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); } if (showtooltip) { strSH->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP")); angSH->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); } enaSHMaskConn = enaSHMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaSHMaskChanged)); inversshConn = inverssh->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshChanged)); showmaskSHMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskSHMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskSHMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskSHMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskSHMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); // showmaskSHMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); showmaskSHMethod->set_active(0); if (showtooltip) { showmaskSHMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskSHMethodConn = showmaskSHMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskSHMethodChanged)); showmaskSHMethodinv->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskSHMethodinv->append(M("TP_LOCALLAB_SHOWMASK")); showmaskSHMethodinv->set_active(0); if (showtooltip) { showmaskSHMethodinv->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskSHMethodConninv = showmaskSHMethodinv->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskSHMethodChangedinv)); maskSHCurveEditorG->setCurveListener(this); CCmaskSHshape->setIdentityValue(0.); CCmaskSHshape->setResetCurve(FlatCurveType(defSpot.CCmaskSHcurve.at(0)), defSpot.CCmaskSHcurve); if (showtooltip) { CCmaskSHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskSHshape->setBottomBarColorProvider(this, 7); LLmaskSHshape->setIdentityValue(0.); LLmaskSHshape->setResetCurve(FlatCurveType(defSpot.LLmaskSHcurve.at(0)), defSpot.LLmaskSHcurve); if (showtooltip) { LLmaskSHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskSHshape->setBottomBarBgGradient(mllshape); HHmaskSHshape->setIdentityValue(0.); HHmaskSHshape->setResetCurve(FlatCurveType(defSpot.HHmaskSHcurve.at(0)), defSpot.HHmaskSHcurve); if (showtooltip) { HHmaskSHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskSHshape->setCurveColorProvider(this, 6); HHmaskSHshape->setBottomBarColorProvider(this, 6); maskSHCurveEditorG->curveListComplete(); mask2SHCurveEditorG->setCurveListener(this); LmaskSHshape->setResetCurve(DiagonalCurveType(defSpot.LmaskSHcurve.at(0)), defSpot.LmaskSHcurve); if (showtooltip) { LmaskSHshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskSHshape = zero_one_shape; LmaskSHshape->setBottomBarBgGradient(mLmaskSHshape); LmaskSHshape->setLeftBarBgGradient(mLmaskSHshape); mask2SHCurveEditorG->curveListComplete(); ToolParamBlock* const shadhighBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { shadhighBox->pack_start(*shMethod); } for (int i = 0; i < 5; ++i) { shadhighBox->pack_start(*multipliersh[i]); } gamFrame->set_label_align(0.025, 0.5); ToolParamBlock* const gammBox = Gtk::manage(new ToolParamBlock()); gammBox->pack_start(*gamSH); gammBox->pack_start(*sloSH); // gamFrame->add(*gammBox); setExpandAlignProperties(exptrcsh, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); exptrcsh->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), exptrcsh)); exptrcsh->setLevel(2); exptrcsh->add(*gammBox, false); // gradSHFrame->set_label_align(0.025, 0.5); ToolParamBlock* const gradSHBox = Gtk::manage(new ToolParamBlock()); gradSHBox->pack_start(*strSH); gradSHBox->pack_start(*angSH); // gradSHFrame->add(*gradSHBox); setExpandAlignProperties(expgradsh, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expgradsh->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expgradsh)); expgradsh->setLevel(2); expgradsh->add(*gradSHBox, false); shadhighBox->pack_start(*detailSH); if (complexsoft < 2) { // shadhighBox->pack_start(*gamFrame); shadhighBox->pack_start(*exptrcsh); } shadhighBox->pack_start(*highlights); shadhighBox->pack_start(*h_tonalwidth); shadhighBox->pack_start(*shadows); shadhighBox->pack_start(*s_tonalwidth); shadhighBox->pack_start(*sh_radius); shadhighBox->pack_start(*sensihs); if (complexsoft < 2) { shadhighBox->pack_start(*blurSHde); } // shadhighBox->pack_start(*gradSHFrame); shadhighBox->pack_start(*expgradsh); shadhighBox->pack_start(*inverssh); fatSHFrame->set_label_align(0.025, 0.5); // if (showtooltip) { // fatSHFrame->set_tooltip_text(M("TP_LOCALLAB_FATSHFRAME_TOOLTIP")); // } ToolParamBlock* const fatSHBox = Gtk::manage(new ToolParamBlock()); fatSHBox->pack_start(*fatamountSH); fatSHBox->pack_start(*fatanchorSH); fatSHFrame->add(*fatSHBox); ToolParamBlock* const maskSHBox = Gtk::manage(new ToolParamBlock()); maskSHBox->pack_start(*showmaskSHMethod, Gtk::PACK_SHRINK, 4); maskSHBox->pack_start(*showmaskSHMethodinv, Gtk::PACK_SHRINK, 4); maskSHBox->pack_start(*enaSHMask, Gtk::PACK_SHRINK, 0); maskSHBox->pack_start(*maskSHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskSHBox->pack_start(*blendmaskSH, Gtk::PACK_SHRINK, 0); maskSHBox->pack_start(*radmaskSH, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { maskSHBox->pack_start(*lapmaskSH, Gtk::PACK_SHRINK, 0); } maskSHBox->pack_start(*chromaskSH, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { maskSHBox->pack_start(*gammaskSH, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { maskSHBox->pack_start(*slomaskSH, Gtk::PACK_SHRINK, 0); } maskSHBox->pack_start(*mask2SHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor if (complexsoft < 1) { maskSHBox->pack_start(*fatSHFrame); } expmasksh->add(*maskSHBox, false); shadhighBox->pack_start(*expmasksh, false, false); expshadhigh->add(*shadhighBox, false); expshadhigh->setLevel(2); panel->pack_start(*expshadhigh, false, false); // Vibrance expvibrance->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expvibrance)); enablevibranceConn = expvibrance->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expvibrance)); setExpandAlignProperties(expmaskvib, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskvib->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskvib)); expmaskvib->setLevel(2); if (showtooltip) { expmaskvib->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } saturated->setAdjusterListener(this); pastels->setAdjusterListener(this); if (showtooltip) { psThreshold->set_tooltip_markup(M("TP_VIBRANCE_PSTHRESHOLD_TOOLTIP")); } psThreshold->setAdjusterListener(this); pskinsconn = protectSkins->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::protectskins_toggled)); ashiftconn = avoidColorShift->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::avoidcolorshift_toggled)); pastsattogconn = pastSatTog->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::pastsattog_toggled)); sensiv->setAdjusterListener(this); blendmaskvib->setAdjusterListener(this); radmaskvib->setLogScale(10, -10); radmaskvib->setAdjusterListener(this); chromaskvib->setAdjusterListener(this); gammaskvib->setAdjusterListener(this); slomaskvib->setAdjusterListener(this); lapmaskvib->setAdjusterListener(this); strvib->setAdjusterListener(this); angvib->setAdjusterListener(this); strvibab->setAdjusterListener(this); strvibh->setAdjusterListener(this); if (showtooltip) { strvib->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP")); strvibab->set_tooltip_text(M("TP_LOCALLAB_GRADSTRAB_TOOLTIP")); strvibh->set_tooltip_text(M("TP_LOCALLAB_GRADSTRHUE_TOOLTIP")); angvib->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); } curveEditorGG->setCurveListener(this); if (showtooltip) { skinTonesCurve->setTooltip(M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP")); } const std::vector mskinTonesCurve = []() -> std::vector { std::vector res; float R, G, B; Color::hsv2rgb01(0.92f, 0.45f, 0.6f, R, G, B); res.emplace_back(0.0, R, G, B); Color::hsv2rgb01(0.14056f, 0.45f, 0.6f, R, G, B); res.emplace_back(1.0, R, G, B); return res; }(); // -0.1 rad < Hue < 1.6 rad skinTonesCurve->setBottomBarBgGradient(mskinTonesCurve); skinTonesCurve->setLeftBarBgGradient(mskinTonesCurve); skinTonesCurve->setRangeLabels( M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE2"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE3"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE4") ); skinTonesCurve->setRangeDefaultMilestones(0.1, 0.4, 0.85); curveEditorGG->curveListComplete(); ToolParamBlock* const gradvibBox = Gtk::manage(new ToolParamBlock()); gradvibBox->pack_start(*strvib); if (complexsoft < 2) { gradvibBox->pack_start(*strvibab); } if (complexsoft < 2) { gradvibBox->pack_start(*strvibh); } gradvibBox->pack_start(*angvib); setExpandAlignProperties(expgradvib, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expgradvib->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expgradvib)); expgradvib->setLevel(2); expgradvib->add(*gradvibBox, false); ToolParamBlock* const vibranceBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { vibranceBox->pack_start(*saturated, Gtk::PACK_SHRINK, 0); } if (complexsoft == 2) { pastels->setLabel(M("TP_LOCALLAB_PASTELS2")); } vibranceBox->pack_start(*pastels, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { vibranceBox->pack_start(*psThreshold, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { vibranceBox->pack_start(*protectSkins, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { vibranceBox->pack_start(*avoidColorShift, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { vibranceBox->pack_start(*pastSatTog, Gtk::PACK_SHRINK, 0); } vibranceBox->pack_start(*sensiv, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { vibranceBox->pack_start(*curveEditorGG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor } // if (complexsoft < 2) { vibranceBox->pack_start(*expgradvib); // } enavibMaskConn = enavibMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enavibMaskChanged)); showmaskvibMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskvibMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskvibMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskvibMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskvibMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskvibMethod->set_active(0); if (showtooltip) { showmaskvibMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskvibMethodConn = showmaskvibMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskvibMethodChanged)); maskvibCurveEditorG->setCurveListener(this); CCmaskvibshape->setIdentityValue(0.); CCmaskvibshape->setResetCurve(FlatCurveType(defSpot.CCmaskvibcurve.at(0)), defSpot.CCmaskvibcurve); if (showtooltip) { CCmaskvibshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskvibshape->setBottomBarColorProvider(this, 7); LLmaskvibshape->setIdentityValue(0.); LLmaskvibshape->setResetCurve(FlatCurveType(defSpot.LLmaskvibcurve.at(0)), defSpot.LLmaskvibcurve); if (showtooltip) { LLmaskvibshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskvibshape->setBottomBarBgGradient(mllshape); HHmaskvibshape->setIdentityValue(0.); HHmaskvibshape->setResetCurve(FlatCurveType(defSpot.HHmaskvibcurve.at(0)), defSpot.HHmaskvibcurve); if (showtooltip) { HHmaskvibshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskvibshape->setCurveColorProvider(this, 6); HHmaskvibshape->setBottomBarColorProvider(this, 6); maskvibCurveEditorG->curveListComplete(); mask2vibCurveEditorG->setCurveListener(this); Lmaskvibshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskvibcurve.at(0)), defSpot.Lmaskvibcurve); if (showtooltip) { Lmaskvibshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskvibshape = zero_one_shape; Lmaskvibshape->setBottomBarBgGradient(mLmaskvibshape); Lmaskvibshape->setLeftBarBgGradient(mLmaskvibshape); mask2vibCurveEditorG->curveListComplete(); ToolParamBlock* const maskvibBox = Gtk::manage(new ToolParamBlock()); maskvibBox->pack_start(*showmaskvibMethod, Gtk::PACK_SHRINK, 4); maskvibBox->pack_start(*enavibMask, Gtk::PACK_SHRINK, 0); maskvibBox->pack_start(*maskvibCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskvibBox->pack_start(*blendmaskvib, Gtk::PACK_SHRINK, 0); maskvibBox->pack_start(*radmaskvib, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { maskvibBox->pack_start(*lapmaskvib, Gtk::PACK_SHRINK, 0); } maskvibBox->pack_start(*chromaskvib, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { maskvibBox->pack_start(*gammaskvib, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { maskvibBox->pack_start(*slomaskvib, Gtk::PACK_SHRINK, 0); } maskvibBox->pack_start(*mask2vibCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor expmaskvib->add(*maskvibBox, false); vibranceBox->pack_start(*expmaskvib, false, false); expvibrance->add(*vibranceBox, false); expvibrance->setLevel(2); panel->pack_start(*expvibrance, false, false); // Soft Light expsoft->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsoft)); enablesoftConn = expsoft->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expsoft)); softMethod->append(M("TP_LOCALLAB_SOFTM")); softMethod->append(M("TP_LOCALLAB_RETIM")); softMethod->set_active(0); if (showtooltip) { softMethod->set_tooltip_markup(M("TP_LOCALLAB_SOFTMETHOD_TOOLTIP")); } softMethodConn = softMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::softMethodChanged)); Gtk::Label* const labelsoftmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SHOWDCT") + ":")); ctboxsoftmethod->pack_start(*labelsoftmethod, Gtk::PACK_SHRINK, 4); showmasksoftMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmasksoftMethod->append(M("TP_LOCALLAB_SHOWLAPLACE")); showmasksoftMethod->append(M("TP_LOCALLAB_SHOWFOURIER")); showmasksoftMethod->append(M("TP_LOCALLAB_SHOWPOISSON")); showmasksoftMethod->append(M("TP_LOCALLAB_SHOWNORMAL")); showmasksoftMethod->set_active(0); if (showtooltip) { showmasksoftMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKSOFT_TOOLTIP")); } showmasksoftMethodConn = showmasksoftMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmasksoftMethodChanged)); ctboxsoftmethod->pack_start(*showmasksoftMethod); streng->setAdjusterListener(this); laplace->setAdjusterListener(this); sensisf->setAdjusterListener(this); ToolParamBlock* const softBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { softBox->pack_start(*softMethod); } // softBox->pack_start(*showmasksoftMethod, Gtk::PACK_SHRINK, 4); softBox->pack_start(*ctboxsoftmethod); softBox->pack_start(*streng); softBox->pack_start(*laplace); softBox->pack_start(*sensisf); expsoft->add(*softBox, false); expsoft->setLevel(2); panel->pack_start(*expsoft, false, false); // Tone Mapping Gtk::HBox* const TMTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const TMLabel = Gtk::manage(new Gtk::Label()); TMLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_TM")) + Glib::ustring("")); TMLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); TMTitleHBox->pack_start(*TMLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const TMImage = Gtk::manage(new RTImage("one-to-one-small.png")); if (showtooltip) { TMImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); } TMTitleHBox->pack_end(*TMImage, Gtk::PACK_SHRINK, 0); exptonemap->setLabel(TMTitleHBox); exptonemap->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), exptonemap)); enabletonemapConn = exptonemap->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), exptonemap)); if (showtooltip) { exptonemap->set_tooltip_text(M("TP_LOCALLAB_TONEMAP_TOOLTIP")); } setExpandAlignProperties(expmasktm, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmasktm->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmasktm)); expmasktm->setLevel(2); if (showtooltip) { expmasktm->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } stren->setAdjusterListener(this); gamma->setAdjusterListener(this); estop->setAdjusterListener(this); scaltm->setAdjusterListener(this); rewei->setAdjusterListener(this); amount->setAdjusterListener(this); satur->setAdjusterListener(this); if (showtooltip) { sensitm->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); } sensitm->setAdjusterListener(this); softradiustm->setLogScale(10, -10); softradiustm->setAdjusterListener(this); if (showtooltip) { estop->set_tooltip_text(M("TP_LOCALLAB_TONEMAPESTOP_TOOLTIP")); } if (showtooltip) { rewei->set_tooltip_text(M("TP_LOCALLAB_TONEMAPESTOP_TOOLTIP")); } equiltmConn = equiltm->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::equiltmChanged)); masktmCurveEditorG->setCurveListener(this); CCmasktmshape->setIdentityValue(0.); CCmasktmshape->setResetCurve(FlatCurveType(defSpot.CCmasktmcurve.at(0)), defSpot.CCmasktmcurve); if (showtooltip) { CCmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmasktmshape->setBottomBarColorProvider(this, 7); LLmasktmshape->setIdentityValue(0.); LLmasktmshape->setResetCurve(FlatCurveType(defSpot.LLmasktmcurve.at(0)), defSpot.LLmasktmcurve); if (showtooltip) { LLmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmasktmshape->setBottomBarBgGradient(mllshape); HHmasktmshape->setIdentityValue(0.); HHmasktmshape->setResetCurve(FlatCurveType(defSpot.HHmasktmcurve.at(0)), defSpot.HHmasktmcurve); if (showtooltip) { HHmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmasktmshape->setCurveColorProvider(this, 6); HHmasktmshape->setBottomBarColorProvider(this, 6); masktmCurveEditorG->curveListComplete(); mask2tmCurveEditorG->setCurveListener(this); Lmasktmshape->setResetCurve(DiagonalCurveType(defSpot.Lmasktmcurve.at(0)), defSpot.Lmasktmcurve); if (showtooltip) { Lmasktmshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmasktmshape = zero_one_shape; Lmasktmshape->setBottomBarBgGradient(mLmasktmshape); Lmasktmshape->setLeftBarBgGradient(mLmasktmshape); mask2tmCurveEditorG->curveListComplete(); enatmMaskConn = enatmMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskChanged)); enatmMaskaftConn = enatmMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enatmMaskaftChanged)); showmasktmMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmasktmMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmasktmMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmasktmMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmasktmMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmasktmMethod->set_active(0); if (showtooltip) { showmasktmMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmasktmMethodConn = showmasktmMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmasktmMethodChanged)); if (showtooltip) { radmasktm->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmasktm->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); // chromasktm->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP")); } blendmasktm->setAdjusterListener(this); radmasktm->setLogScale(10, -10); radmasktm->setAdjusterListener(this); chromasktm->setAdjusterListener(this); gammasktm->setAdjusterListener(this); slomasktm->setAdjusterListener(this); lapmasktm->setAdjusterListener(this); ToolParamBlock* const masktmBox = Gtk::manage(new ToolParamBlock()); masktmBox->pack_start(*showmasktmMethod, Gtk::PACK_SHRINK, 4); masktmBox->pack_start(*enatmMask, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*enatmMaskaft, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*masktmCurveEditorG, Gtk::PACK_SHRINK, 4); masktmBox->pack_start(*blendmasktm, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { masktmBox->pack_start(*lapmasktm, Gtk::PACK_SHRINK, 0); } masktmBox->pack_start(*radmasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*chromasktm, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { masktmBox->pack_start(*gammasktm, Gtk::PACK_SHRINK, 0); masktmBox->pack_start(*slomasktm, Gtk::PACK_SHRINK, 0); } masktmBox->pack_start(*mask2tmCurveEditorG, Gtk::PACK_SHRINK, 4); expmasktm->add(*masktmBox, false); ToolParamBlock* const tmBox = Gtk::manage(new ToolParamBlock()); // tmBox->pack_start(*amount);//to use if we change transit_shapedetect parameters tmBox->pack_start(*stren); tmBox->pack_start(*equiltm); if (complexsoft < 2) { tmBox->pack_start(*gamma); tmBox->pack_start(*satur); } tmBox->pack_start(*estop); tmBox->pack_start(*scaltm); if (complexsoft < 2) { tmBox->pack_start(*rewei); } // tmBox->pack_start(*softradiustm);//always bad with TM ?? tmBox->pack_start(*sensitm); tmBox->pack_start(*expmasktm, false, false); exptonemap->add(*tmBox, false); exptonemap->setLevel(2); // if (complexsoft < 2) { panel->pack_start(*exptonemap, false, false); // } // Retinex Gtk::HBox* const retiTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const retiLabel = Gtk::manage(new Gtk::Label()); retiLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_RETI")) + Glib::ustring("")); retiLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); retiTitleHBox->pack_start(*retiLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const retiImage = Gtk::manage(new RTImage("one-to-one-small.png")); if (showtooltip) { retiImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); } retiTitleHBox->pack_end(*retiImage, Gtk::PACK_SHRINK, 0); expreti->setLabel(retiTitleHBox); expreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expreti)); enableretiConn = expreti->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expreti)); fftwretiConn = fftwreti->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::fftwretiChanged)); if (showtooltip) { fftwreti->set_tooltip_text(M("TP_LOCALLAB_RETI_FFTW_TOOLTIP")); } setExpandAlignProperties(expmaskreti, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskreti)); expmaskreti->setLevel(2); if (showtooltip) { expmaskreti->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } setExpandAlignProperties(expretitools, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expretitools->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expretitools)); expretitools->setLevel(2); retinexMethod->append(M("TP_RETINEX_LOW")); retinexMethod->append(M("TP_RETINEX_UNIFORM")); retinexMethod->append(M("TP_RETINEX_HIGH")); retinexMethod->set_active(0); if (showtooltip) { retinexMethod->set_tooltip_markup(M("TP_LOCRETI_METHOD_TOOLTIP")); } retinexMethodConn = retinexMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::retinexMethodChanged)); dehaFrame->set_label_align(0.025, 0.5); retiFrame->set_label_align(0.025, 0.5); retitoolFrame->set_label_align(0.025, 0.5); str->setAdjusterListener(this); // if (showtooltip) { // str->set_tooltip_text(M("TP_LOCALLAB_STRRETI_TOOLTIP")); // } neigh->setAdjusterListener(this); if (showtooltip) { neigh->set_tooltip_text(M("TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP")); } vart->setAdjusterListener(this); if (showtooltip) { vart->set_tooltip_text(M("TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP")); } offs->setAdjusterListener(this); dehaz->setAdjusterListener(this); depth->setAdjusterListener(this); chrrt->setAdjusterListener(this); if (showtooltip) { dehaz->set_tooltip_text(M("TP_LOCALLAB_DEHAZ_TOOLTIP")); sensih->set_tooltip_text(M("TP_LOCALLAB_SENSIH_TOOLTIP")); } sensih->setAdjusterListener(this); softradiusret->setLogScale(10, -10); softradiusret->setAdjusterListener(this); if (showtooltip) { softradiusret->set_tooltip_text(M("TP_LOCALLAB_SOFTRETI_TOOLTIP")); } setExpandAlignProperties(mMLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START); if (showtooltip) { mMLabels->set_tooltip_markup(M("TP_LOCALLAB_MLABEL_TOOLTIP")); } setExpandAlignProperties(transLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START); if (showtooltip) { transLabels->set_tooltip_markup(M("TP_LOCALLAB_TLABEL_TOOLTIP")); } setExpandAlignProperties(transLabels2, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START); LocalcurveEditortransT->setCurveListener(this); cTtransshape->setIdentityValue(0.); cTtransshape->setResetCurve(FlatCurveType(defSpot.localTtranscurve.at(0)), defSpot.localTtranscurve); if (showtooltip) { cTtransshape->setTooltip(M("TP_LOCALLAB_TRANSMISSION_TOOLTIP")); } LocalcurveEditortransT->curveListComplete(); LocalcurveEditorgainT->setCurveListener(this); cTgainshape->setIdentityValue(0.); cTgainshape->setResetCurve(FlatCurveType(defSpot.localTgaincurve.at(0)), defSpot.localTgaincurve); if (showtooltip) { cTgainshape->setTooltip(M("TP_RETINEX_GAINTRANSMISSION_TOOLTIP")); } LocalcurveEditorgainT->curveListComplete(); inversretConn = inversret->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversretChanged)); equilretConn = equilret->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::equilretChanged)); loglinConn = loglin->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::loglinChanged)); lumonlyConn = lumonly->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::lumonlyChanged)); maskretiCurveEditorG->setCurveListener(this); CCmaskretishape->setIdentityValue(0.); CCmaskretishape->setResetCurve(FlatCurveType(defSpot.CCmaskreticurve.at(0)), defSpot.CCmaskreticurve); if (showtooltip) { CCmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskretishape->setBottomBarColorProvider(this, 7); LLmaskretishape->setIdentityValue(0.); LLmaskretishape->setResetCurve(FlatCurveType(defSpot.LLmaskreticurve.at(0)), defSpot.LLmaskreticurve); if (showtooltip) { LLmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskretishape->setBottomBarBgGradient(mllshape); HHmaskretishape->setIdentityValue(0.); HHmaskretishape->setResetCurve(FlatCurveType(defSpot.HHmaskreticurve.at(0)), defSpot.HHmaskreticurve); if (showtooltip) { HHmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskretishape->setCurveColorProvider(this, 6); HHmaskretishape->setBottomBarColorProvider(this, 6); maskretiCurveEditorG->curveListComplete(); mask2retiCurveEditorG->setCurveListener(this); Lmaskretishape->setResetCurve(DiagonalCurveType(defSpot.Lmaskreticurve.at(0)), defSpot.Lmaskreticurve); if (showtooltip) { Lmaskretishape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskretishape = zero_one_shape; Lmaskretishape->setBottomBarBgGradient(mLmaskretishape); Lmaskretishape->setLeftBarBgGradient(mLmaskretishape); mask2retiCurveEditorG->curveListComplete(); enaretiMaskConn = enaretiMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaretiMaskChanged)); enaretiMasktmapConn = enaretiMasktmap->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enaretiMasktmapChanged)); if (showtooltip) { enaretiMasktmap->set_tooltip_markup(M("TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP")); } showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskretiMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskretiMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskretiMethod->set_active(0); if (showtooltip) { showmaskretiMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskretiMethodConn = showmaskretiMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskretiMethodChanged)); if (showtooltip) { radmaskreti->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmaskreti->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); // chromaskreti->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP")); } blendmaskreti->setAdjusterListener(this); radmaskreti->setAdjusterListener(this); chromaskreti->setAdjusterListener(this); gammaskreti->setAdjusterListener(this); slomaskreti->setAdjusterListener(this); lapmaskreti->setAdjusterListener(this); scalereti->setAdjusterListener(this); darkness->setAdjusterListener(this); lightnessreti->setAdjusterListener(this); limd->setAdjusterListener(this); cliptm->setAdjusterListener(this); maskretiBox->pack_start(*showmaskretiMethod, Gtk::PACK_SHRINK, 4); maskretiBox->pack_start(*enaretiMask, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*enaretiMasktmap, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*maskretiCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskretiBox->pack_start(*blendmaskreti, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*radmaskreti, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*lapmaskreti, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*chromaskreti, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*gammaskreti, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*slomaskreti, Gtk::PACK_SHRINK, 0); maskretiBox->pack_start(*mask2retiCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor expmaskreti->add(*maskretiBox, false); ToolParamBlock* const auxBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const dehaBox = Gtk::manage(new ToolParamBlock()); dehaBox->pack_start(*dehaz); dehaBox->pack_start(*depth); dehaBox->pack_start(*lumonly); dehaFrame->add(*dehaBox); ToolParamBlock* const deharetiBox = Gtk::manage(new ToolParamBlock()); deharetiBox->pack_start(*str); deharetiBox->pack_start(*loglin); retiFrame->add(*deharetiBox); auxBox->add(*dehaFrame); if (complexsoft < 1) { auxBox->add(*retiFrame); } ToolParamBlock* const scopeBox = Gtk::manage(new ToolParamBlock()); scopeBox->pack_start(*sensih); auxBox->add(*scopeBox); ToolParamBlock* const genBox = Gtk::manage(new ToolParamBlock()); genBox->pack_start(*auxBox); ToolParamBlock* const toolretiBox = Gtk::manage(new ToolParamBlock()); retiBox->pack_start(*retinexMethod); retiBox->pack_start(*fftwreti); retiBox->pack_start(*equilret); retiBox->pack_start(*neigh); retiBox->pack_start(*vart); retiBox->pack_start(*scalereti); retiBox->pack_start(*limd); retiBox->pack_start(*offs); toolretiBox->pack_start(*chrrt); toolretiBox->pack_start(*darkness); toolretiBox->pack_start(*lightnessreti); toolretiBox->pack_start(*cliptm); toolretiBox->pack_start(*softradiusret); toolretiBox->pack_start(*LocalcurveEditortransT, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor toolretiBox->pack_start(*mMLabels); toolretiBox->pack_start(*transLabels); toolretiBox->pack_start(*transLabels2); toolretiBox->pack_start(*LocalcurveEditorgainT, Gtk::PACK_SHRINK, 4); expretitools->add(*toolretiBox, false); retiBox->pack_start(*expretitools, false, false); retiBox->pack_start(*expmaskreti, false, false); // retiBox->pack_start(*inversret); retitoolFrame->add(*retiBox); genBox->pack_start(*retitoolFrame); expreti->add(*genBox, false); expreti->setLevel(2); panel->pack_start(*expreti, false, false); // Sharpening Gtk::HBox* const sharpTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const sharpLabel = Gtk::manage(new Gtk::Label()); sharpLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_SHARP")) + Glib::ustring("")); sharpLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); sharpTitleHBox->pack_start(*sharpLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const sharpImage = Gtk::manage(new RTImage("one-to-one-small.png")); if (showtooltip) { sharpImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); } sharpTitleHBox->pack_end(*sharpImage, Gtk::PACK_SHRINK, 0); expsharp->setLabel(sharpTitleHBox); expsharp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsharp)); if (showtooltip) { expsharp->set_tooltip_text(M("TP_LOCALLAB_EXPSHARP_TOOLTIP")); } enablesharpConn = expsharp->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expsharp)); sharcontrast->setAdjusterListener(this); sharradius->setAdjusterListener(this); sharamount->setAdjusterListener(this); shardamping->setAdjusterListener(this); shariter->setAdjusterListener(this); sharblur->setAdjusterListener(this); if (showtooltip) { sensisha->set_tooltip_text(M("TP_LOCALLAB_SENSIS_TOOLTIP")); } sensisha->setAdjusterListener(this); inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshaChanged)); ToolParamBlock* const sharpBox = Gtk::manage(new ToolParamBlock()); sharpBox->pack_start(*sharcontrast); sharpBox->pack_start(*sharradius); sharpBox->pack_start(*sharamount); if (complexsoft < 2) { sharpBox->pack_start(*shardamping); } if (complexsoft < 2) { sharpBox->pack_start(*shariter); } if (complexsoft < 2) { sharpBox->pack_start(*sharblur); } sharpBox->pack_start(*sensisha); sharpBox->pack_start(*inverssha); expsharp->add(*sharpBox, false); expsharp->setLevel(2); panel->pack_start(*expsharp, false, false); // Local Contrast Gtk::HBox* const contTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const contLabel = Gtk::manage(new Gtk::Label()); contLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_LOC_CONTRAST")) + Glib::ustring("")); contLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); contTitleHBox->pack_start(*contLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const contImage = Gtk::manage(new RTImage("one-to-one-small.png")); contTitleHBox->pack_end(*contImage, Gtk::PACK_SHRINK, 0); expcontrast->setLabel(contTitleHBox); expcontrast->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcontrast)); enablecontrastConn = expcontrast->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcontrast)); fftwlcConn = fftwlc->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::fftwlcChanged)); csThreshold->setAdjusterListener(this); if (showtooltip) { fftwlc->set_tooltip_text(M("TP_LOCALLAB_LC_FFTW_TOOLTIP")); } setExpandAlignProperties(expmasklc, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmasklc->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmasklc)); expmasklc->setLevel(2); if (showtooltip) { expmasklc->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } blurlcConn = blurlc->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::blurlcChanged)); origlcConn = origlc->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::origlcChanged)); csThreshold->setAdjusterListener(this); LocalcurveEditorwav->setCurveListener(this); std::vector botMilestones; botMilestones.push_back( GradientMilestone(0., 0., 0., 0.) ); botMilestones.push_back( GradientMilestone(1., 1., 1., 1.) ); wavshape->setIdentityValue(0.); wavshape->setResetCurve(FlatCurveType(defSpot.locwavcurve.at(0)), defSpot.locwavcurve); wavshape->setBottomBarBgGradient(botMilestones); if (showtooltip) { // wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP")); } LocalcurveEditorwav->curveListComplete(); LocalcurveEditorwavlev->setCurveListener(this); wavshapelev->setIdentityValue(0.); wavshapelev->setResetCurve(FlatCurveType(defSpot.loclevwavcurve.at(0)), defSpot.loclevwavcurve); if (showtooltip) { // wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP")); } LocalcurveEditorwavlev->curveListComplete(); LocalcurveEditorwavcon->setCurveListener(this); wavshapecon->setIdentityValue(0.); wavshapecon->setResetCurve(FlatCurveType(defSpot.locconwavcurve.at(0)), defSpot.locconwavcurve); if (showtooltip) { // wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP")); } LocalcurveEditorwavcon->curveListComplete(); LocalcurveEditorwavcomp->setCurveListener(this); wavshapecomp->setIdentityValue(0.); wavshapecomp->setResetCurve(FlatCurveType(defSpot.loccompwavcurve.at(0)), defSpot.loccompwavcurve); if (showtooltip) { // wavshape->setTooltip(M("TP_RETINEX_WAV_TOOLTIP")); } LocalcurveEditorwavcomp->curveListComplete(); localcontMethod->append(M("TP_LOCALLAB_LOCCONT")); localcontMethod->append(M("TP_LOCALLAB_WAVE")); localcontMethod->set_active(0); if (showtooltip) { // localcontMethod->set_tooltip_markup(M("TP_LOCALLAB_LOCMETHOD_TOOLTIP")); } if (showtooltip) { clariFrame->set_tooltip_markup(M("TP_LOCALLAB_CLARI_TOOLTIP")); } localcontMethodConn = localcontMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::localcontMethodChanged)); lcradius->setAdjusterListener(this); lcamount->setAdjusterListener(this); lcdarkness->setAdjusterListener(this); lclightness->setAdjusterListener(this); levelwav->setAdjusterListener(this); if (showtooltip) { levelwav->set_tooltip_markup(M("TP_LOCALLAB_LEVELWAV_TOOLTIP")); } residcont->setAdjusterListener(this); residblur->setAdjusterListener(this); levelblur->setAdjusterListener(this); residchro->setAdjusterListener(this); sigma->setAdjusterListener(this); offset->setAdjusterListener(this); chromalev->setAdjusterListener(this); chromablu->setAdjusterListener(this); fatdet->setAdjusterListener(this); fatanch->setAdjusterListener(this); fatres->setAdjusterListener(this); clarilres->setAdjusterListener(this); clarisoft->setLogScale(10, -10); clarisoft->setAdjusterListener(this); claricres->setAdjusterListener(this); sensilc->setAdjusterListener(this); blendmasklc->setAdjusterListener(this); radmasklc->setLogScale(10, -10); radmasklc->setAdjusterListener(this); chromasklc->setAdjusterListener(this); clariFrame->set_label_align(0.025, 0.5); ToolParamBlock* const clariBox = Gtk::manage(new ToolParamBlock()); clariBox->pack_start(*clarilres); clariBox->pack_start(*claricres); clariBox->pack_start(*clarisoft); clariBox->pack_start(*origlc); clariFrame->add(*clariBox); Gtk::HSeparator* const separatorblu = Gtk::manage(new Gtk::HSeparator()); blurlevelFrame->set_label_align(0.025, 0.5); ToolParamBlock* const blurlevcontBox = Gtk::manage(new ToolParamBlock()); blurlevcontBox->pack_start(*levelblur); blurlevcontBox->pack_start(*chromablu); blurlevcontBox->pack_start(*LocalcurveEditorwavlev, Gtk::PACK_SHRINK, 4); blurlevcontBox->pack_start(*separatorblu); blurlevcontBox->pack_start(*residblur); blurlevcontBox->pack_start(*blurlc); blurlevelFrame->add(*blurlevcontBox); contFrame->set_label_align(0.025, 0.5); ToolParamBlock* const contlevBox = Gtk::manage(new ToolParamBlock()); contlevBox->pack_start(*sigma); contlevBox->pack_start(*offset); contlevBox->pack_start(*chromalev); contlevBox->pack_start(*LocalcurveEditorwavcon, Gtk::PACK_SHRINK, 4); contFrame->add(*contlevBox); Gtk::HSeparator* const separatorcomp = Gtk::manage(new Gtk::HSeparator()); compFrame->set_label_align(0.025, 0.5); ToolParamBlock* const compBox = Gtk::manage(new ToolParamBlock()); compBox->pack_start(*fatdet); compBox->pack_start(*fatanch); compBox->pack_start(*LocalcurveEditorwavcomp, Gtk::PACK_SHRINK, 4); compBox->pack_start(*separatorcomp); compBox->pack_start(*fatres); compFrame->add(*compBox); Gtk::HBox* const LCTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const LCLabel = Gtk::manage(new Gtk::Label()); // RTImage* const LCImage2 = Gtk::manage(new RTImage("wavelets.png")); LCLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_LOC_CONTRASTPYR")) + Glib::ustring("")); LCLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); // LCTitleHBox->pack_start(*LCImage2, Gtk::PACK_SHRINK, 0); LCTitleHBox->pack_start(*LCLabel, Gtk::PACK_EXPAND_WIDGET, 0); expcontrastpyr->setLabel(LCTitleHBox); setExpandAlignProperties(expcontrastpyr, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expcontrastpyr->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcontrastpyr)); expcontrastpyr->setLevel(2); ToolParamBlock* const blurcontBox = Gtk::manage(new ToolParamBlock()); blurcontBox->pack_start(*clariFrame); blurcontBox->pack_start(*contFrame); blurcontBox->pack_start(*compFrame); blurcontBox->pack_start(*blurlevelFrame); expcontrastpyr->add(*blurcontBox, false); if (showtooltip) { fatdet->set_tooltip_text(M("TP_LOCALLAB_COMPFRAME_TOOLTIP")); } ToolParamBlock* const contrastBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { contrastBox->pack_start(*localcontMethod); } contrastBox->pack_start(*lcradius); contrastBox->pack_start(*lcamount); contrastBox->pack_start(*lcdarkness); contrastBox->pack_start(*lclightness); contrastBox->pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // contrastBox->pack_start(*levelwav); // if (complexsoft < 2) { contrastBox->pack_start(*csThreshold); // } // if (complexsoft < 2) { contrastBox->pack_start(*residcont); // } // if (complexsoft < 2) { contrastBox->pack_start(*residchro); // } contrastBox->pack_start(*sensilc); // if (complexsoft < 2) { contrastBox->pack_start(*expcontrastpyr); // contrastBox->pack_start(*clariFrame); // } if (complexsoft < 2) { contrastBox->pack_start(*fftwlc); } masklcCurveEditorG->setCurveListener(this); CCmasklcshape->setIdentityValue(0.); CCmasklcshape->setResetCurve(FlatCurveType(defSpot.CCmasklccurve.at(0)), defSpot.CCmasklccurve); if (showtooltip) { CCmasklcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmasklcshape->setBottomBarColorProvider(this, 7); LLmasklcshape->setIdentityValue(0.); LLmasklcshape->setResetCurve(FlatCurveType(defSpot.LLmasklccurve.at(0)), defSpot.LLmasklccurve); if (showtooltip) { LLmasklcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmasklcshape->setBottomBarBgGradient(mllshape); HHmasklcshape->setIdentityValue(0.); HHmasklcshape->setResetCurve(FlatCurveType(defSpot.HHmasklccurve.at(0)), defSpot.HHmasklccurve); if (showtooltip) { HHmasklcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmasklcshape->setCurveColorProvider(this, 6); HHmasklcshape->setBottomBarColorProvider(this, 6); masklcCurveEditorG->curveListComplete(); mask2lcCurveEditorG->setCurveListener(this); Lmasklcshape->setResetCurve(DiagonalCurveType(defSpot.Lmasklccurve.at(0)), defSpot.Lmasklccurve); if (showtooltip) { Lmasklcshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmasklcshape = zero_one_shape; Lmasklcshape->setBottomBarBgGradient(mLmasklcshape); Lmasklcshape->setLeftBarBgGradient(mLmasklcshape); mask2lcCurveEditorG->curveListComplete(); enalcMaskConn = enalcMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enalcMaskChanged)); showmasklcMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmasklcMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmasklcMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmasklcMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmasklcMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmasklcMethod->set_active(0); if (showtooltip) { showmasklcMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmasklcMethodConn = showmasklcMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmasklcMethodChanged)); ToolParamBlock* const masklcBox = Gtk::manage(new ToolParamBlock()); masklcBox->pack_start(*showmasklcMethod, Gtk::PACK_SHRINK, 4); masklcBox->pack_start(*enalcMask, Gtk::PACK_SHRINK, 0); masklcBox->pack_start(*masklcCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor masklcBox->pack_start(*blendmasklc, Gtk::PACK_SHRINK, 0); masklcBox->pack_start(*radmasklc, Gtk::PACK_SHRINK, 0); masklcBox->pack_start(*chromasklc, Gtk::PACK_SHRINK, 0); masklcBox->pack_start(*mask2lcCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor if (complexsoft < 1) { // maskcbBox->pack_start(*lapmaskcb, Gtk::PACK_SHRINK, 0); } // maskcbBox->pack_start(*chromaskcb, Gtk::PACK_SHRINK, 0); // if (complexsoft < 2) { // maskcbBox->pack_start(*gammaskcb, Gtk::PACK_SHRINK, 0); // } // if (complexsoft < 2) { // maskcbBox->pack_start(*slomaskcb, Gtk::PACK_SHRINK, 0); // } expmasklc->add(*masklcBox, false); contrastBox->pack_start(*expmasklc, false, false); expcontrast->add(*contrastBox, false); expcontrast->setLevel(2); panel->pack_start(*expcontrast, false, false); // Contrast by detail levels Gtk::HBox* const cbdlTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const cbdlLabel = Gtk::manage(new Gtk::Label()); cbdlLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_CBDL")) + Glib::ustring("")); cbdlLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); cbdlTitleHBox->pack_start(*cbdlLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const cbdlImage = Gtk::manage(new RTImage("one-to-one-small.png")); if (showtooltip) { cbdlImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); } cbdlTitleHBox->pack_end(*cbdlImage, Gtk::PACK_SHRINK, 0); expcbdl->setLabel(cbdlTitleHBox); expcbdl->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcbdl)); enablecbdlConn = expcbdl->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcbdl)); if (showtooltip) { expcbdl->set_tooltip_text(M("TP_LOCALLAB_EXPCBDL_TOOLTIP")); } setExpandAlignProperties(expmaskcb, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskcb->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskcb)); expmaskcb->setLevel(2); if (showtooltip) { expmaskcb->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } if (showtooltip) { chromacbdl->set_tooltip_text(M("TP_LOCALLAB_CHROMACB_TOOLTIP")); } chromacbdl->setAdjusterListener(this); threshold->setAdjusterListener(this); if (showtooltip) { sensicb->set_tooltip_text(M("TP_LOCALLAB_SENSIH_TOOLTIP")); } sensicb->setAdjusterListener(this); softradiuscb->setLogScale(10, -10); softradiuscb->setAdjusterListener(this); clarityml->setAdjusterListener(this); contresid->setAdjusterListener(this); blurcbdl->setAdjusterListener(this); blendmaskcb->setAdjusterListener(this); radmaskcb->setLogScale(10, -10); radmaskcb->setAdjusterListener(this); chromaskcb->setAdjusterListener(this); gammaskcb->setAdjusterListener(this); slomaskcb->setAdjusterListener(this); lapmaskcb->setAdjusterListener(this); enacbMaskConn = enacbMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enacbMaskChanged)); showmaskcbMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskcbMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskcbMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskcbMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskcbMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskcbMethod->set_active(0); if (showtooltip) { showmaskcbMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskcbMethodConn = showmaskcbMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskcbMethodChanged)); maskcbCurveEditorG->setCurveListener(this); CCmaskcbshape->setIdentityValue(0.); CCmaskcbshape->setResetCurve(FlatCurveType(defSpot.CCmaskcbcurve.at(0)), defSpot.CCmaskcbcurve); if (showtooltip) { CCmaskcbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskcbshape->setBottomBarColorProvider(this, 7); LLmaskcbshape->setIdentityValue(0.); LLmaskcbshape->setResetCurve(FlatCurveType(defSpot.LLmaskcbcurve.at(0)), defSpot.LLmaskcbcurve); if (showtooltip) { LLmaskcbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskcbshape->setBottomBarBgGradient(mllshape); HHmaskcbshape->setIdentityValue(0.); HHmaskcbshape->setResetCurve(FlatCurveType(defSpot.HHmaskcbcurve.at(0)), defSpot.HHmaskcbcurve); if (showtooltip) { HHmaskcbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskcbshape->setCurveColorProvider(this, 6); HHmaskcbshape->setBottomBarColorProvider(this, 6); maskcbCurveEditorG->curveListComplete(); mask2cbCurveEditorG->setCurveListener(this); Lmaskcbshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskcbcurve.at(0)), defSpot.Lmaskcbcurve); if (showtooltip) { Lmaskcbshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskcbshape = zero_one_shape; Lmaskcbshape->setBottomBarBgGradient(mLmaskcbshape); Lmaskcbshape->setLeftBarBgGradient(mLmaskcbshape); mask2cbCurveEditorG->curveListComplete(); if (showtooltip) { radmaskcb->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmaskcb->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); // chromaskcb->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP")); } ToolParamBlock* const cbdlBox = Gtk::manage(new ToolParamBlock()); Gtk::HBox* const buttonBox = Gtk::manage(new Gtk::HBox(true, 10)); buttonBox->pack_start(*lumacontrastMinusButton); lumacontrastMinusPressedConn = lumacontrastMinusButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumacontrastMinusPressed)); buttonBox->pack_start(*lumaneutralButton); lumaneutralPressedConn = lumaneutralButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumaneutralPressed)); buttonBox->pack_start(*lumacontrastPlusButton); lumacontrastPlusPressedConn = lumacontrastPlusButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumacontrastPlusPressed)); cbdlBox->pack_start(*buttonBox); for (auto adjuster : multiplier) { cbdlBox->pack_start(*adjuster); } ToolParamBlock* const maskcbBox = Gtk::manage(new ToolParamBlock()); maskcbBox->pack_start(*showmaskcbMethod, Gtk::PACK_SHRINK, 4); maskcbBox->pack_start(*enacbMask, Gtk::PACK_SHRINK, 0); maskcbBox->pack_start(*maskcbCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor maskcbBox->pack_start(*blendmaskcb, Gtk::PACK_SHRINK, 0); maskcbBox->pack_start(*radmaskcb, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { maskcbBox->pack_start(*lapmaskcb, Gtk::PACK_SHRINK, 0); } maskcbBox->pack_start(*chromaskcb, Gtk::PACK_SHRINK, 0); // if (complexsoft < 2) { maskcbBox->pack_start(*gammaskcb, Gtk::PACK_SHRINK, 0); // } // if (complexsoft < 2) { maskcbBox->pack_start(*slomaskcb, Gtk::PACK_SHRINK, 0); // } maskcbBox->pack_start(*mask2cbCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor expmaskcb->add(*maskcbBox, false); Gtk::HSeparator* const separator = Gtk::manage(new Gtk::HSeparator()); cbdlBox->pack_start(*separator, Gtk::PACK_SHRINK, 2); // if (complexsoft < 2) { cbdlBox->pack_start(*chromacbdl); // } cbdlBox->pack_start(*threshold); // if (complexsoft < 2) { cbdlBox->pack_start(*blurcbdl); // } residFrame->set_label_align(0.025, 0.5); ToolParamBlock* const residBox = Gtk::manage(new ToolParamBlock()); residBox->pack_start(*clarityml); residBox->pack_start(*contresid); residFrame->add(*residBox); // if (complexsoft < 2) { cbdlBox->pack_start(*residFrame); // } // if (complexsoft < 2) { cbdlBox->pack_start(*softradiuscb); // } cbdlBox->pack_start(*sensicb); cbdlBox->pack_start(*expmaskcb, false, false); expcbdl->add(*cbdlBox, false); expcbdl->setLevel(2); if (complexsoft < 2) { panel->pack_start(*expcbdl, false, false); } // Blur & Noise Gtk::HBox* const BLTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const BLLabel = Gtk::manage(new Gtk::Label()); BLLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_BLUFR")) + Glib::ustring("")); BLLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); BLTitleHBox->pack_start(*BLLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const BLImage = Gtk::manage(new RTImage("one-to-one-small.png")); if (showtooltip) { BLImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); } BLTitleHBox->pack_end(*BLImage, Gtk::PACK_SHRINK, 0); expblur->setLabel(BLTitleHBox); expblur->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expblur)); enableblurConn = expblur->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expblur)); fftwblConn = fftwbl->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::fftwblChanged)); toolblConn = toolbl->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::toolblChanged)); blMethod->append(M("TP_LOCALLAB_BLUR")); blMethod->append(M("TP_LOCALLAB_BLMED")); blMethod->append(M("TP_LOCALLAB_BLGUID")); blMethod->set_active(0); if (showtooltip) { // blMethod->set_tooltip_markup(M("TP_LOCALLAB_BLUMETHOD_TOOLTIP")); expblur->set_tooltip_markup(M("TP_LOCALLAB_BLUMETHOD_TOOLTIP")); } blMethodConn = blMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::blMethodChanged)); radius->setAdjusterListener(this); strength->setAdjusterListener(this); if (showtooltip) { sensibn->set_tooltip_text(M("TP_LOCALLAB_SENSIH_TOOLTIP")); radius->set_tooltip_text(M("TP_LOCALLAB_RADIUS_TOOLTIP")); } sensibn->setAdjusterListener(this); isogr->setAdjusterListener(this); strengr->setAdjusterListener(this); scalegr->setAdjusterListener(this); itera->setAdjusterListener(this); guidbl->setAdjusterListener(this); epsbl->setAdjusterListener(this); setExpandAlignProperties(expmaskbl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); expmaskbl->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expmaskbl)); expmaskbl->setLevel(2); if (showtooltip) { expmaskbl->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP")); } maskblCurveEditorG->setCurveListener(this); CCmaskblshape->setIdentityValue(0.); CCmaskblshape->setResetCurve(FlatCurveType(defSpot.CCmaskblcurve.at(0)), defSpot.CCmaskblcurve); if (showtooltip) { CCmaskblshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } CCmaskblshape->setBottomBarColorProvider(this, 7); LLmaskblshape->setIdentityValue(0.); LLmaskblshape->setResetCurve(FlatCurveType(defSpot.LLmaskblcurve.at(0)), defSpot.LLmaskblcurve); if (showtooltip) { LLmaskblshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } LLmaskblshape->setBottomBarBgGradient(mllshape); HHmaskblshape->setIdentityValue(0.); HHmaskblshape->setResetCurve(FlatCurveType(defSpot.HHmaskblcurve.at(0)), defSpot.HHmaskblcurve); if (showtooltip) { HHmaskblshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); } HHmaskblshape->setCurveColorProvider(this, 6); HHmaskblshape->setBottomBarColorProvider(this, 6); maskblCurveEditorG->curveListComplete(); mask2blCurveEditorG->setCurveListener(this); Lmaskblshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskblcurve.at(0)), defSpot.Lmaskblcurve); if (showtooltip) { Lmaskblshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP")); } const std::vector& mLmaskblshape = zero_one_shape; Lmaskblshape->setBottomBarBgGradient(mLmaskblshape); Lmaskblshape->setLeftBarBgGradient(mLmaskblshape); mask2blCurveEditorG->curveListComplete(); csThresholdblur->setAdjusterListener(this); mask2blCurveEditorGwav->setCurveListener(this); LLmaskblshapewav->setIdentityValue(0.); LLmaskblshapewav->setResetCurve(FlatCurveType(defSpot.LLmaskblcurvewav.at(0)), defSpot.LLmaskblcurvewav); if (showtooltip) { LLmaskblshapewav->setTooltip(M("TP_LOCALLAB_LMASK_LEVEL_TOOLTIP")); } LLmaskblshapewav->setBottomBarBgGradient(mllshape); mask2blCurveEditorGwav->curveListComplete(); enablMaskConn = enablMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::enablMaskChanged)); showmaskblMethod->append(M("TP_LOCALLAB_SHOWMNONE")); showmaskblMethod->append(M("TP_LOCALLAB_SHOWMODIF")); showmaskblMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskblMethod->append(M("TP_LOCALLAB_SHOWMASK")); showmaskblMethod->append(M("TP_LOCALLAB_PREVIEWSEL")); showmaskblMethod->set_active(0); if (showtooltip) { showmaskblMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); } showmaskblMethodConn = showmaskblMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmaskblMethodChanged)); if (showtooltip) { radmaskbl->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); lapmaskbl->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP")); // chromaskbl->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP")); } medMethod->append(M("TP_LOCALLAB_MEDNONE")); medMethod->append(M("TP_DIRPYRDENOISE_TYPE_3X3")); medMethod->append(M("TP_DIRPYRDENOISE_TYPE_5X5")); medMethod->append(M("TP_DIRPYRDENOISE_TYPE_7X7")); medMethod->append(M("TP_DIRPYRDENOISE_TYPE_9X9")); medMethod->set_active(0); if (showtooltip) { // medMethod->set_tooltip_markup(M("TP_LOCALLAB_MEDMETHOD_TOOLTIP")); } medMethodConn = medMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::medMethodChanged)); blurMethod->append(M("TP_LOCALLAB_BLNORM")); blurMethod->append(M("TP_LOCALLAB_BLINV")); blurMethod->set_active(0); if (showtooltip) { blurMethod->set_tooltip_markup(M("TP_LOCALLAB_BLMETHOD_TOOLTIP")); } blurMethodConn = blurMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::blurMethodChanged)); activlumConn = activlum->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::activlumChanged)); blendmaskbl->setAdjusterListener(this); radmaskbl->setAdjusterListener(this); chromaskbl->setAdjusterListener(this); gammaskbl->setAdjusterListener(this); slomaskbl->setAdjusterListener(this); lapmaskbl->setAdjusterListener(this); shadmaskbl->setAdjusterListener(this); strumaskbl->setAdjusterListener(this); Gtk::HSeparator* const separatorstrubl = Gtk::manage(new Gtk::HSeparator()); toolblFrame->set_label_align(0.025, 0.5); ToolParamBlock* const toolblBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const maskblBox = Gtk::manage(new ToolParamBlock()); maskblBox->pack_start(*showmaskblMethod, Gtk::PACK_SHRINK, 4); maskblBox->pack_start(*enablMask, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { maskblBox->pack_start(*maskblCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor } if (complexsoft < 2) { maskblBox->pack_start(*strumaskbl, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { maskblBox->pack_start(*toolbl, Gtk::PACK_SHRINK, 0); } maskblBox->pack_start(*separatorstrubl, Gtk::PACK_SHRINK, 2); maskblBox->pack_start(*blendmaskbl, Gtk::PACK_SHRINK, 0); toolblBox->pack_start(*radmaskbl, Gtk::PACK_SHRINK, 0); if (complexsoft < 1) { toolblBox->pack_start(*lapmaskbl, Gtk::PACK_SHRINK, 0); } toolblBox->pack_start(*chromaskbl, Gtk::PACK_SHRINK, 0); if (complexsoft < 2) { toolblBox->pack_start(*gammaskbl, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { toolblBox->pack_start(*slomaskbl, Gtk::PACK_SHRINK, 0); } if (complexsoft < 2) { toolblBox->pack_start(*shadmaskbl, Gtk::PACK_SHRINK, 0); } toolblBox->pack_start(*mask2blCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor if (complexsoft < 1) { toolblBox->pack_start(*mask2blCurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor } if (complexsoft < 1) { toolblBox->pack_start(*csThresholdblur, Gtk::PACK_SHRINK, 0); } toolblFrame->add(*toolblBox); maskblBox->pack_start(*toolblFrame); expmaskbl->add(*maskblBox, false); panel->pack_start(*expmaskbl, false, false); grainFrame->set_label_align(0.025, 0.5); ToolParamBlock* const grainBox = Gtk::manage(new ToolParamBlock()); grainBox->pack_start(*isogr); grainBox->pack_start(*strengr); grainBox->pack_start(*scalegr); grainFrame->add(*grainBox); ToolParamBlock* const blurrBox = Gtk::manage(new ToolParamBlock()); if (complexsoft < 2) { blurrBox->pack_start(*blMethod); } if (complexsoft < 2) { blurrBox->pack_start(*fftwbl, Gtk::PACK_SHRINK, 0); } blurrBox->pack_start(*radius); blurrBox->pack_start(*strength); blurrBox->pack_start(*grainFrame); blurrBox->pack_start(*medMethod); blurrBox->pack_start(*itera); blurrBox->pack_start(*guidbl); blurrBox->pack_start(*epsbl); blurrBox->pack_start(*sensibn); blurrBox->pack_start(*blurMethod); blurrBox->pack_start(*activlum); // blurrBox->pack_start(*expmaskbl); expblur->add(*blurrBox, false); expblur->setLevel(2); panel->pack_start(*expblur, false, false); // Denoise Gtk::HBox* const denoiTitleHBox = Gtk::manage(new Gtk::HBox()); Gtk::Label* const denoiLabel = Gtk::manage(new Gtk::Label()); denoiLabel->set_markup(Glib::ustring("") + escapeHtmlChars(M("TP_LOCALLAB_DENOIS")) + Glib::ustring("")); denoiLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER); denoiTitleHBox->pack_start(*denoiLabel, Gtk::PACK_EXPAND_WIDGET, 0); RTImage* const denoiImage = Gtk::manage(new RTImage("one-to-one-small.png")); if (showtooltip) { denoiImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP")); } denoiTitleHBox->pack_end(*denoiImage, Gtk::PACK_SHRINK, 0); expdenoi->setLabel(denoiTitleHBox); expdenoi->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expdenoi)); enabledenoiConn = expdenoi->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expdenoi)); LocalcurveEditorwavden->setCurveListener(this); wavshapeden->setIdentityValue(0.); wavshapeden->setResetCurve(FlatCurveType(defSpot.locwavcurveden.at(0)), defSpot.locwavcurveden); if (showtooltip) { wavshapeden->setTooltip(M("TP_LOCALLAB_WASDEN_TOOLTIP")); } LocalcurveEditorwavden->curveListComplete(); noiselumf->setAdjusterListener(this); noiselumf0->setAdjusterListener(this); noiselumf2->setAdjusterListener(this); if (showtooltip) { noiselumc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP")); } noiselumc->setAdjusterListener(this); noiselumdetail->setAdjusterListener(this); if (showtooltip) { // noiselumdetail->set_tooltip_text(M("TP_LOCALLAB_NOISEDETAIL_TOOLTIP")); } noiselequal->setAdjusterListener(this); noisechrof->setAdjusterListener(this); if (showtooltip) { noisechroc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP")); } noisechroc->setAdjusterListener(this); noisechrodetail->setAdjusterListener(this); if (showtooltip) { // noisechrodetail->set_tooltip_text(M("TP_LOCALLAB_NOISEDETAIL_TOOLTIP")); } adjblur->setAdjusterListener(this); bilateral->setAdjusterListener(this); sensiden->setAdjusterListener(this); detailthr->setAdjusterListener(this); ToolParamBlock* const denoisBox = Gtk::manage(new ToolParamBlock()); Gtk::Frame* const wavFrame = Gtk::manage(new Gtk::Frame()); ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock()); wavBox->pack_start(*LocalcurveEditorwavden, Gtk::PACK_SHRINK, 4); // wavBox->pack_start(*noiselumf0); // wavBox->pack_start(*noiselumf); // wavBox->pack_start(*noiselumf2); // wavBox->pack_start(*noiselumc); wavBox->pack_start(*noiselumdetail); wavBox->pack_start(*noiselequal); wavBox->pack_start(*noisechrof); wavBox->pack_start(*noisechroc); wavBox->pack_start(*noisechrodetail); wavBox->pack_start(*detailthr); wavBox->pack_start(*adjblur); wavFrame->add(*wavBox); denoisBox->pack_start(*wavFrame); denoisBox->pack_start(*bilateral); denoisBox->pack_start(*sensiden); expdenoi->add(*denoisBox, false); expdenoi->setLevel(2); if (complexsoft < 2) { panel->pack_start(*expdenoi, false, false); } // log encoding explog->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), explog)); enablelogConn = explog->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), explog)); autoconn = autocompute->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::autocomputeToggled)); AutograyConn = Autogray->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::AutograyChanged)); //sourceGray = Gtk::manage(new Adjuster(M("TP_LO_SOURCE_GRAY"), 1.0, 100.0, 0.1, 18.0)); fullimageConn = fullimage->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::fullimageChanged)); //sourceGray->throwOnButtonRelease(); //sourceGray->addAutoButton(); sourceGray->delay = options.adjusterMaxDelay; blackEv->delay = options.adjusterMaxDelay; whiteEv->delay = options.adjusterMaxDelay; targetGray->delay = options.adjusterMaxDelay; sourceGray->setAdjusterListener(this); blackEv->setAdjusterListener(this); whiteEv->setAdjusterListener(this); targetGray->setAdjusterListener(this); detail->setAdjusterListener(this); sensilog->setAdjusterListener(this); baselog->setAdjusterListener(this); whiteEv->setLogScale(16, 0); blackEv->setLogScale(2, -8); ToolParamBlock* const logBox = Gtk::manage(new ToolParamBlock()); explog->add(*logBox, false); explog->setLevel(2); logPFrame->set_label_align(0.025, 0.5); ToolParamBlock* const logPBox = Gtk::manage(new ToolParamBlock()); logPBox->pack_start(*autocompute); logPBox->pack_start(*blackEv); logPBox->pack_start(*whiteEv); logPBox->pack_start(*fullimage); logPFrame->add(*logPBox); logFrame->set_label_align(0.025, 0.5); ToolParamBlock* const logFBox = Gtk::manage(new ToolParamBlock()); logFBox->pack_start(*Autogray); logFBox->pack_start(*sourceGray); logFrame->add(*logFBox); logBox->pack_start(*logPFrame); logBox->pack_start(*logFrame); logBox->pack_start(*targetGray); logBox->pack_start(*detail); logBox->pack_start(*baselog); logBox->pack_start(*sensilog); panel->pack_start(*explog, false, false); pack_start(*panel); setParamEditable(false); show_all(); } Locallab::~Locallab() { idle_register.destroy(); delete llCurveEditorG; delete clCurveEditorG; delete HCurveEditorG; delete rgbCurveEditorG; delete maskCurveEditorG; delete maskHCurveEditorG; delete mask2CurveEditorG; delete mask2CurveEditorGwav; delete mask2expCurveEditorG; delete mask2SHCurveEditorG; delete mask2tmCurveEditorG; delete curveEditorG; delete maskexpCurveEditorG; delete maskSHCurveEditorG; delete maskvibCurveEditorG; delete curveEditorGG; delete LocalcurveEditortransT; delete LocalcurveEditorgainT; delete LocalcurveEditorwav; delete LocalcurveEditorwavlev; delete LocalcurveEditorwavden; delete LocalcurveEditorwavcon; delete LocalcurveEditorwavcomp; delete masktmCurveEditorG; delete maskblCurveEditorG; delete mask2blCurveEditorG; delete mask2blCurveEditorGwav; delete maskretiCurveEditorG; delete mask2retiCurveEditorG; delete maskcbCurveEditorG; delete mask2lcCurveEditorG; delete mask2cbCurveEditorG; } void Locallab::foldAllButMe(GdkEventButton* event, MyExpander *expander) { if (event->button == 3) { expsettings->setExpanded(expsettings->getExpander() == expander); expcolor->set_expanded(expcolor == expander); expexpose->set_expanded(expexpose == expander); expshadhigh->set_expanded(expshadhigh == expander); expvibrance->set_expanded(expvibrance == expander); expsoft->set_expanded(expsoft == expander); expblur->set_expanded(expblur == expander); exptonemap->set_expanded(exptonemap == expander); expreti->set_expanded(expreti == expander); expsharp->set_expanded(expsharp == expander); expcontrastpyr->set_expanded(expcontrastpyr == expander); expcontrast->set_expanded(expcontrast == expander); expcbdl->set_expanded(expcbdl == expander); expdenoi->set_expanded(expdenoi == expander); explog->set_expanded(explog == expander); expmaskcol->set_expanded(expmaskcol == expander); expmaskcol1->set_expanded(expmaskcol1 == expander); expcurvcol->set_expanded(expcurvcol == expander); expmaskexp->set_expanded(expmaskexp == expander); expmasksh->set_expanded(expmasksh == expander); expmasklc->set_expanded(expmasklc == expander); expmaskcb->set_expanded(expmaskcb == expander); expretitools->set_expanded(expretitools == expander); expmaskreti->set_expanded(expmaskreti == expander); expmasktm->set_expanded(expmasktm == expander); expmaskbl->set_expanded(expmaskbl == expander); expmaskvib->set_expanded(expmaskvib == expander); expgradcol->set_expanded(expgradcol == expander); exptoolexp->set_expanded(exptoolexp == expander); expgradexp->set_expanded(expgradexp == expander); expgradsh->set_expanded(expgradsh == expander); exptrcsh->set_expanded(exptrcsh == expander); expgradvib->set_expanded(expgradvib == expander); } } void Locallab::enableToggled(MyExpander *expander) { // printf("enableToggled\n"); rtengine::ProcEvent event; sigc::connection* expConn; if (expander == expcolor) { event = EvLocenacolor; expConn = &enablecolorConn; } else if (expander == expexpose) { event = EvLocenaexpose; expConn = &enableexposeConn; } else if (expander == expshadhigh) { event = EvLocenashadhigh; expConn = &enableshadhighConn; } else if (expander == expvibrance) { event = EvLocenavibrance; expConn = &enablevibranceConn; } else if (expander == expsoft) { event = EvLocenasoft; expConn = &enablesoftConn; } else if (expander == expblur) { event = EvLocenablur; expConn = &enableblurConn; } else if (expander == exptonemap) { event = EvLocenatonemap; expConn = &enabletonemapConn; } else if (expander == expreti) { event = EvLocenareti; expConn = &enableretiConn; } else if (expander == expsharp) { event = EvLocenasharp; expConn = &enablesharpConn; } else if (expander == expcontrast) { event = EvLocenacontrast; expConn = &enablecontrastConn; } else if (expander == expcbdl) { event = EvLocenacbdl; expConn = &enablecbdlConn; } else if (expander == explog) { event = EvLocenalog; expConn = &enablelogConn; } else if (expander == expdenoi) { event = EvLocenadenoi; expConn = &enabledenoiConn; } else { return; } if (multiImage) { if (expander->get_inconsistent()) { expander->set_inconsistent(false); expConn->block(true); expander->setEnabled(false); expConn->block(false); } } if (getEnabled()) { if (listener) { if (expander->getEnabled()) { listener->panelChanged(event, M("GENERAL_ENABLED")); } else { listener->panelChanged(event, M("GENERAL_DISABLED")); } } } } void Locallab::writeOptions(std::vector &tpOpen) { tpOpen.push_back(expsettings->getExpanded()); tpOpen.push_back(expmaskcol->get_expanded()); tpOpen.push_back(expmaskcol1->get_expanded()); tpOpen.push_back(expgradcol->get_expanded()); tpOpen.push_back(expcurvcol->get_expanded()); tpOpen.push_back(expcolor->get_expanded()); tpOpen.push_back(exptoolexp->get_expanded()); tpOpen.push_back(expgradexp->get_expanded()); tpOpen.push_back(expmaskexp->get_expanded()); tpOpen.push_back(expexpose->get_expanded()); tpOpen.push_back(exptrcsh->get_expanded()); tpOpen.push_back(expgradsh->get_expanded()); tpOpen.push_back(expmasksh->get_expanded()); tpOpen.push_back(expshadhigh->get_expanded()); tpOpen.push_back(expmasklc->get_expanded()); tpOpen.push_back(expmaskcb->get_expanded()); tpOpen.push_back(expcbdl->get_expanded()); tpOpen.push_back(expretitools->get_expanded()); tpOpen.push_back(expmaskreti->get_expanded()); tpOpen.push_back(expreti->get_expanded()); tpOpen.push_back(expmasktm->get_expanded()); tpOpen.push_back(exptonemap->get_expanded()); tpOpen.push_back(expmaskbl->get_expanded()); tpOpen.push_back(expgradvib->get_expanded()); tpOpen.push_back(expmaskvib->get_expanded()); tpOpen.push_back(expvibrance->get_expanded()); tpOpen.push_back(expsoft->get_expanded()); tpOpen.push_back(expblur->get_expanded()); tpOpen.push_back(expsharp->get_expanded()); tpOpen.push_back(expcontrastpyr->get_expanded()); tpOpen.push_back(expcontrast->get_expanded()); tpOpen.push_back(expdenoi->get_expanded()); tpOpen.push_back(explog->get_expanded()); } void Locallab::logencodChanged(float blackev, float whiteev, float sourceg, float targetg) { GThreadLock lock; disableListener(); // blackEv->setEnabled(true); // whiteEv->setEnabled(true); sourceGray->setValue(sourceg); targetGray->setValue(targetg); blackEv->setValue(blackev); whiteEv->setValue(whiteev); enableListener(); } void Locallab::minmaxChanged(double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) { nextmin = cdmin; nextmax = cdma; nextminiT = mini; nextmaxiT = maxi; nextmeanT = Tmean; nextsigma = Tsigma; nextminT = Tmin; nextmaxT = Tmax; idle_register.add( [this]() -> bool { GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected // FIXME: The above can't be true?! disableListener(); enableListener(); updateLabel(); updateTrans(); return false; } ); } void Locallab::updateLabel() { if (!batchMode) { float nX, nY; nX = nextmin; nY = nextmax; { mMLabels->set_text( Glib::ustring::compose(M("TP_LOCALLAB_MLABEL"), Glib::ustring::format(std::fixed, std::setprecision(0), nX), Glib::ustring::format(std::fixed, std::setprecision(0), nY)) ); } } } void Locallab::updateTrans() { if (!batchMode) { float nm, nM, nZ, nA, nB, nS; nm = nextminiT; nM = nextmaxiT; nZ = nextmeanT; nA = nextminT; nB = nextmaxT; nS = nextsigma; { transLabels->set_text( Glib::ustring::compose(M("TP_LOCALLAB_TLABEL"), Glib::ustring::format(std::fixed, std::setprecision(1), nm), Glib::ustring::format(std::fixed, std::setprecision(1), nM), Glib::ustring::format(std::fixed, std::setprecision(1), nZ), Glib::ustring::format(std::fixed, std::setprecision(1), nS)) ); transLabels2->set_text( Glib::ustring::compose(M("TP_RETINEX_TLABEL2"), Glib::ustring::format(std::fixed, std::setprecision(1), nA), Glib::ustring::format(std::fixed, std::setprecision(1), nB)) ); } } } void Locallab::refChanged(double huer, double lumar, double chromar) { if (!batchMode) { // Hue reference normalization (between 0 and 1) double normHuer = huer; float h = Color::huelab_to_huehsv2(normHuer); h += 1.f / 6.f; if (h > 1.f) { h -= 1.f; } normHuer = h; // Luma reference normalization (between 0 and 1) double normLumar = lumar / 100.f; // Chroma reference normalization (between 0 and 1) double normChromar = chromar / 137.4f; // printf("nh=%f nl=%f nc=%f\n", normHuer, normLumar, normChromar); idle_register.add( [this, normHuer, normLumar, normChromar]() -> bool { GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected // Update Color & Light mask background CCmaskshape->updateLocallabBackground(normChromar); LLmaskshape->updateLocallabBackground(normLumar); HHmaskshape->updateLocallabBackground(normHuer); HHhmaskshape->updateLocallabBackground(normHuer); // Update Exposure mask background CCmaskexpshape->updateLocallabBackground(normChromar); LLmaskexpshape->updateLocallabBackground(normLumar); HHmaskexpshape->updateLocallabBackground(normHuer); // Update Shadow Highlight mask background CCmaskSHshape->updateLocallabBackground(normChromar); LLmaskSHshape->updateLocallabBackground(normLumar); HHmaskSHshape->updateLocallabBackground(normHuer); // Update Vibrance mask background CCmaskvibshape->updateLocallabBackground(normChromar); LLmaskvibshape->updateLocallabBackground(normLumar); HHmaskvibshape->updateLocallabBackground(normHuer); // Update local contrast mask background CCmasklcshape->updateLocallabBackground(normChromar); LLmasklcshape->updateLocallabBackground(normLumar); HHmasklcshape->updateLocallabBackground(normHuer); // Update CBDL mask background CCmaskcbshape->updateLocallabBackground(normChromar); LLmaskcbshape->updateLocallabBackground(normLumar); HHmaskcbshape->updateLocallabBackground(normHuer); //updtae blur mask background CCmaskblshape->updateLocallabBackground(normChromar); LLmaskblshape->updateLocallabBackground(normLumar); HHmaskblshape->updateLocallabBackground(normHuer); // Update TM mask background CCmasktmshape->updateLocallabBackground(normChromar); LLmasktmshape->updateLocallabBackground(normLumar); HHmasktmshape->updateLocallabBackground(normHuer); // Update Retinex mask background CCmaskretishape->updateLocallabBackground(normChromar); LLmaskretishape->updateLocallabBackground(normLumar); HHmaskretishape->updateLocallabBackground(normHuer); return false; } ); } } void Locallab::updateToolState(std::vector &tpOpen) { if (tpOpen.size() >= 33) { expsettings->setExpanded(tpOpen.at(0)); expmaskcol->set_expanded(tpOpen.at(1)); expmaskcol1->set_expanded(tpOpen.at(2)); expgradcol->set_expanded(tpOpen.at(3)); expcurvcol->set_expanded(tpOpen.at(4)); expcolor->set_expanded(tpOpen.at(5)); exptoolexp->set_expanded(tpOpen.at(6)); expgradexp->set_expanded(tpOpen.at(7)); expmaskexp->set_expanded(tpOpen.at(8)); expexpose->set_expanded(tpOpen.at(9)); exptrcsh->set_expanded(tpOpen.at(10)); expgradsh->set_expanded(tpOpen.at(11)); expmasksh->set_expanded(tpOpen.at(12)); expshadhigh->set_expanded(tpOpen.at(13)); expmasklc->set_expanded(tpOpen.at(14)); expmaskcb->set_expanded(tpOpen.at(15)); expcbdl->set_expanded(tpOpen.at(16)); expretitools->set_expanded(tpOpen.at(17)); expmaskreti->set_expanded(tpOpen.at(18)); expreti->set_expanded(tpOpen.at(19)); expmasktm->set_expanded(tpOpen.at(20)); exptonemap->set_expanded(tpOpen.at(21)); expmaskbl->set_expanded(tpOpen.at(22)); expgradvib->set_expanded(tpOpen.at(23)); expmaskvib->set_expanded(tpOpen.at(24)); expvibrance->set_expanded(tpOpen.at(25)); expsoft->set_expanded(tpOpen.at(26)); expblur->set_expanded(tpOpen.at(27)); expsharp->set_expanded(tpOpen.at(28)); expcontrastpyr->set_expanded(tpOpen.at(29)); expcontrast->set_expanded(tpOpen.at(30)); expdenoi->set_expanded(tpOpen.at(31)); explog->set_expanded(tpOpen.at(32)); } } void Locallab::lumaneutralPressed() { // printf("lumaneutralPressed\n"); for (int i = 0; i < 6; i++) { multiplier[i]->setValue(1.0); } // Raise event (only for first multiplier because associated event concerns all multipliers) adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used } void Locallab::lumacontrastPlusPressed() { // printf("lumacontrastPlusPressed\n"); for (int i = 0; i < 6; i++) { float inc = (5 - i); multiplier[i]->setValue(multiplier[i]->getValue() + 0.01f * inc); } // Raise event (only for first multiplier because associated event concerns all multipliers) adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used } void Locallab::lumacontrastMinusPressed() { // printf("lumacontrastMinusPressed\n"); for (int i = 0; i < 6; i++) { float inc = - (5 - i); multiplier[i]->setValue(multiplier[i]->getValue() + 0.01f * inc); } // Raise event (only for first multiplier because associated event concerns all multipliers) adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used } void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited) { // printf("Locallab read\n"); // Disable all listeners disableListener(); setEnabled(pp->locallab.enabled); if (pedited) { set_inconsistent(multiImage && !pedited->locallab.enabled); } // Delete all existent spots std::vector* const list = expsettings->getSpotIdList(); for (size_t i = 0; i < list->size(); i++) { expsettings->deleteControlSpot(list->at(i)); } // Add existent spots based on pp ControlSpotPanel::SpotRow* const r = new ControlSpotPanel::SpotRow(); for (int i = 0; i < pp->locallab.nbspot && i < (int)pp->locallab.spots.size(); i++) { r->id = pp->locallab.spots.at(i).id; r->name = pp->locallab.spots.at(i).name; r->isvisible = pp->locallab.spots.at(i).isvisible; if (pp->locallab.spots.at(i).shape == "ELI") { r->shape = 0; } else { r->shape = 1; } if (pp->locallab.spots.at(i).spotMethod == "norm") { r->spotMethod = 0; } else { r->spotMethod = 1; } r->sensiexclu = pp->locallab.spots.at(i).sensiexclu; r->structexclu = pp->locallab.spots.at(i).structexclu; r->struc = pp->locallab.spots.at(i).struc; if (pp->locallab.spots.at(i).shapeMethod == "IND") { r->shapeMethod = 0; } else if (pp->locallab.spots.at(i).shapeMethod == "SYM") { r->shapeMethod = 1; } else if (pp->locallab.spots.at(i).shapeMethod == "INDSL") { r->shapeMethod = 2; } else { r->shapeMethod = 3; } if (complexsoft == 2) { r->shapeMethod = 0; } r->locX = pp->locallab.spots.at(i).locX; r->locXL = pp->locallab.spots.at(i).locXL; r->locY = pp->locallab.spots.at(i).locY; r->locYT = pp->locallab.spots.at(i).locYT; r->centerX = pp->locallab.spots.at(i).centerX; r->centerY = pp->locallab.spots.at(i).centerY; r->circrad = pp->locallab.spots.at(i).circrad; if (pp->locallab.spots.at(i).qualityMethod == "enh") { r->qualityMethod = 0; } else { r->qualityMethod = 1; } if (pp->locallab.spots.at(i).complexMethod == "sim") { r->complexMethod = 0; } else if (pp->locallab.spots.at(i).complexMethod == "mod") { r->complexMethod = 1; } else if (pp->locallab.spots.at(i).complexMethod == "all") { r->complexMethod = 2; } r->transit = pp->locallab.spots.at(i).transit; r->feather = pp->locallab.spots.at(i).feather; r->thresh = pp->locallab.spots.at(i).thresh; r->iter = pp->locallab.spots.at(i).iter; r->balan = pp->locallab.spots.at(i).balan; r->balanh = pp->locallab.spots.at(i).balanh; r->transitweak = pp->locallab.spots.at(i).transitweak; r->transitgrad = pp->locallab.spots.at(i).transitgrad; if (complexsoft == 2) { r->transitweak = 1; r->transitgrad = 0; } r->scopemask = pp->locallab.spots.at(i).scopemask; r->lumask = pp->locallab.spots.at(i).lumask; r->avoid = pp->locallab.spots.at(i).avoid; r->recurs = pp->locallab.spots.at(i).recurs; r->laplac = pp->locallab.spots.at(i).laplac; r->deltae = pp->locallab.spots.at(i).deltae; r->shortc = pp->locallab.spots.at(i).shortc; r->savrest = pp->locallab.spots.at(i).savrest; expsettings->addControlSpot(r); } // Select active spot if (pp->locallab.nbspot > 0) { expsettings->setSelectedSpot(pp->locallab.spots.at(pp->locallab.selspot).id); } // Update Locallab tools GUI updateLocallabGUI(pp, pedited, pp->locallab.selspot); updateSpecificGUIState(); if (pp->locallab.nbspot > 0) { setParamEditable(true); // Locallab params are not editable if nbspot, selspot or id are not coherent (batch mode) if (pedited) { if (!pedited->locallab.nbspot || !pedited->locallab.selspot || !pedited->locallab.id) { setParamEditable(false); } } } else { setParamEditable(false); } // Enable all listeners enableListener(); // Update default values according to selected spot if (pp->locallab.nbspot > 0 && pp->locallab.selspot < (int)pp->locallab.spots.size()) { setDefaults(defparams, defpedited, pp->locallab.spots.at(pp->locallab.selspot).id); } } void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) { // printf("Locallab write\n"); pp->locallab.enabled = getEnabled(); const int spotPanelEvent = expsettings->getEventType(); int spotId; ControlSpotPanel::SpotRow* r; rtengine::procparams::LocallabParams::LocallabSpot* newSpot; int imW, imH; // Size of image int prW, prH; // Size of preview area int prX, prY; // Coord of preview area center EditDataProvider* const provider = expsettings->getEditProvider(); switch (spotPanelEvent) { case (ControlSpotPanel::SpotCreation): // Spot creation event // Spot creation (default initialization) newSpot = new rtengine::procparams::LocallabParams::LocallabSpot(); spotId = expsettings->getNewId(); r = new ControlSpotPanel::SpotRow(); r->id = newSpot->id = spotId; r->name = newSpot->name = M("TP_LOCALLAB_SPOTNAME") + std::to_string(spotId); r->isvisible = newSpot->isvisible; if (newSpot->shape == "ELI") { r->shape = 0; } else { r->shape = 1; } if (newSpot->spotMethod == "norm") { r->spotMethod = 0; } else { r->spotMethod = 1; } r->sensiexclu = newSpot->sensiexclu; r->structexclu = newSpot->structexclu; r->struc = newSpot->struc; if (complexsoft == 2) { r->shapeMethod = 0; } if (newSpot->shapeMethod == "IND") { r->shapeMethod = 0; } else if (newSpot->shapeMethod == "SYM") { r->shapeMethod = 1; } else if (newSpot->shapeMethod == "INDSL") { r->shapeMethod = 2; } else { r->shapeMethod = 3; } // Calculate spot size and center position according to preview area if (provider && !batchMode) { provider->getImageSize(imW, imH); provider->getPreviewCenterPos(prX, prY); provider->getPreviewSize(prW, prH); if (imW && imH) { // Image loaded // Spot center position computation newSpot->centerX = rtengine::LIM(int(int((double)prX - (double)imW / 2.) * 2000. / (double)imW), -1000, 1000); newSpot->centerY = rtengine::LIM(int(int((double)prY - (double)imH / 2.) * 2000. / (double)imH), -1000, 1000); // Ellipse/rectangle size computation newSpot->locX = rtengine::LIM(int(((double)prW / 2. - 5.) * 2000. / (double)imW), 2, newSpot->locX); newSpot->locXL = rtengine::LIM(int(((double)prW / 2. - 5.) * 2000. / (double)imW), 2, newSpot->locXL); newSpot->locY = rtengine::LIM(int(((double)prH / 2. - 5.) * 2000. / (double)imH), 2, newSpot->locY); newSpot->locYT = rtengine::LIM(int(((double)prH / 2. - 5.) * 2000. / (double)imH), 2, newSpot->locYT); } } r->locX = newSpot->locX; r->locXL = newSpot->locXL; r->locY = newSpot->locY; r->locYT = newSpot->locYT; r->centerX = newSpot->centerX; r->centerY = newSpot->centerY; r->circrad = newSpot->circrad; if (newSpot->qualityMethod == "enh") { r->qualityMethod = 0; } else { r->qualityMethod = 1; } if (newSpot->complexMethod == "sim") { r->complexMethod = 0; } else if (newSpot->complexMethod == "mod") { r->complexMethod = 1; } else if (newSpot->complexMethod == "all") { r->complexMethod = 2; } r->transit = newSpot->transit; r->feather = newSpot->feather; r->thresh = newSpot->thresh; r->iter = newSpot->iter; r->balan = newSpot->balan; r->balanh = newSpot->balanh; r->transitweak = newSpot->transitweak; r->transitgrad = newSpot->transitgrad; if (complexsoft == 2) { r->transitweak = 1; r->transitgrad = 0; } r->scopemask = newSpot->scopemask; r->lumask = newSpot->lumask; r->avoid = newSpot->avoid; r->recurs = newSpot->recurs; r->laplac = newSpot->laplac; r->deltae = newSpot->deltae; r->shortc = newSpot->shortc; r->savrest = newSpot->savrest; expsettings->addControlSpot(r); // ProcParams update pp->locallab.nbspot++; pp->locallab.selspot = pp->locallab.nbspot - 1; pp->locallab.spots.push_back(*newSpot); // New created spot selection expsettings->setSelectedSpot(spotId); // Update Locallab tools GUI with new created spot disableListener(); if (pe) { pe->locallab.spots.push_back(new LocallabParamsEdited::LocallabSpotEdited(true)); } updateLocallabGUI(pp, pe, pp->locallab.selspot); enableListener(); if (pp->locallab.nbspot == 1) { setParamEditable(true); } // Update default values according to selected spot setDefaults(defparams, defpedited, spotId); // ParamsEdited update if (pedited) { pedited->locallab.nbspot = true; pedited->locallab.selspot = true; pedited->locallab.id = true; pedited->locallab.spots.push_back(new LocallabParamsEdited::LocallabSpotEdited(true)); } break; case (ControlSpotPanel::SpotDeletion): // Spot deletion event // Get deleted spot index in ProcParams and update it spotId = expsettings->getSelectedSpot(); for (int i = 0; i < pp->locallab.nbspot && i < (int)pp->locallab.spots.size(); i++) { if (pp->locallab.spots.at(i).id == spotId) { // ProcParams update pp->locallab.nbspot--; pp->locallab.spots.erase(pp->locallab.spots.begin() + i); expsettings->deleteControlSpot(spotId); // Select the first remaining spot before deleted one if (pp->locallab.nbspot > 0) { for (int j = i - 1; j >= 0; j--) { // procparams spots uses zero-based index whereas spot ids use one-based index if (expsettings->setSelectedSpot(j + 1)) { // True if an existing spot has been selected on controlspotpanel pp->locallab.selspot = j; break; } } } else { // Reset selspot pp->locallab.selspot = 0; } // Update Locallab tools GUI with selected spot disableListener(); if (pe) { if (i < (int)pe->locallab.spots.size()) { pe->locallab.spots.erase(pe->locallab.spots.begin() + i); } } updateLocallabGUI(pp, pe, pp->locallab.selspot); enableListener(); if (pp->locallab.nbspot == 0) { setParamEditable(false); } // Update default values according to selected spot if (pp->locallab.nbspot > 0) { setDefaults(defparams, defpedited, pp->locallab.spots.at(pp->locallab.selspot).id); } // ParamsEdited update if (pedited) { pedited->locallab.nbspot = true; pedited->locallab.selspot = true; pedited->locallab.id = true; if (i < (int)pedited->locallab.spots.size()) { pedited->locallab.spots.erase(pedited->locallab.spots.begin() + i); } } break; } } break; case (ControlSpotPanel::SpotSelection): // Spot selection event spotId = expsettings->getSelectedSpot(); for (int i = 0; i < pp->locallab.nbspot && i < (int)pp->locallab.spots.size(); i++) { if (pp->locallab.spots.at(i).id == spotId) { pp->locallab.selspot = i; break; } } // Update control spots and Locallab tools GUI with selected spot expsettings->setSelectedSpot(spotId); disableListener(); updateLocallabGUI(pp, pe, pp->locallab.selspot); enableListener(); // Update default values according to selected spot setDefaults(defparams, defpedited, spotId); // ParamsEdited update if (pedited) { pedited->locallab.selspot = true; } break; case (ControlSpotPanel::SpotDuplication): // Spot duplication event newSpot = nullptr; spotId = expsettings->getSelectedSpot(); for (int i = 0; i < pp->locallab.nbspot && i < (int)pp->locallab.spots.size(); i++) { if (pp->locallab.spots.at(i).id == spotId) { newSpot = new rtengine::procparams::LocallabParams::LocallabSpot(pp->locallab.spots.at(i)); break; } } if (!newSpot) { break; } // Spot creation (initialization at currently selected spot) spotId = expsettings->getNewId(); r = new ControlSpotPanel::SpotRow(); r->id = newSpot->id = spotId; r->name = newSpot->name = newSpot->name + " - " + M("TP_LOCALLAB_DUPLSPOTNAME"); r->isvisible = newSpot->isvisible; if (newSpot->shape == "ELI") { r->shape = 0; } else { r->shape = 1; } if (newSpot->spotMethod == "norm") { r->spotMethod = 0; } else { r->spotMethod = 1; } r->sensiexclu = newSpot->sensiexclu; r->structexclu = newSpot->structexclu; r->struc = newSpot->struc; if (newSpot->shapeMethod == "IND") { r->shapeMethod = 0; } else if (newSpot->shapeMethod == "SYM") { r->shapeMethod = 1; } else if (newSpot->shapeMethod == "INDSL") { r->shapeMethod = 2; } else { r->shapeMethod = 3; } if (complexsoft == 2) { r->shapeMethod = 0; } // Calculate spot size and center position according to preview area if (provider && !batchMode) { provider->getImageSize(imW, imH); provider->getPreviewCenterPos(prX, prY); provider->getPreviewSize(prW, prH); if (imW && imH) { // Image loaded // Spot center position computation newSpot->centerX = rtengine::LIM(int(int((double)prX - (double)imW / 2.) * 2000. / (double)imW), -1000, 1000); newSpot->centerY = rtengine::LIM(int(int((double)prY - (double)imH / 2.) * 2000. / (double)imH), -1000, 1000); // Ellipse/rectangle size computation newSpot->locX = rtengine::LIM(int(((double)prW / 2. - 5.) * 2000. / (double)imW), 2, newSpot->locX); newSpot->locXL = rtengine::LIM(int(((double)prW / 2. - 5.) * 2000. / (double)imW), 2, newSpot->locXL); newSpot->locY = rtengine::LIM(int(((double)prH / 2. - 5.) * 2000. / (double)imH), 2, newSpot->locY); newSpot->locYT = rtengine::LIM(int(((double)prH / 2. - 5.) * 2000. / (double)imH), 2, newSpot->locYT); } } r->locX = newSpot->locX; r->locXL = newSpot->locXL; r->locY = newSpot->locY; r->locYT = newSpot->locYT; r->centerX = newSpot->centerX; r->centerY = newSpot->centerY; r->circrad = newSpot->circrad; if (newSpot->qualityMethod == "enh") { r->qualityMethod = 0; } else { r->qualityMethod = 1; } if (newSpot->complexMethod == "sim") { r->complexMethod = 0; } else if (newSpot->complexMethod == "mod") { r->complexMethod = 1; } else if (newSpot->complexMethod == "all") { r->complexMethod = 2; } r->transit = newSpot->transit; r->feather = newSpot->feather; r->thresh = newSpot->thresh; r->iter = newSpot->iter; r->balan = newSpot->balan; r->balanh = newSpot->balanh; r->transitweak = newSpot->transitweak; r->transitgrad = newSpot->transitgrad; if (complexsoft == 2) { r->transitweak = 1; r->transitgrad = 0; } r->scopemask = newSpot->scopemask; r->lumask = newSpot->lumask; r->avoid = newSpot->avoid; r->recurs = newSpot->recurs; r->laplac = newSpot->laplac; r->deltae = newSpot->deltae; r->shortc = newSpot->shortc; r->savrest = newSpot->savrest; expsettings->addControlSpot(r); // ProcParams update pp->locallab.nbspot++; pp->locallab.selspot = pp->locallab.nbspot - 1; pp->locallab.spots.push_back(*newSpot); // New created spot selection expsettings->setSelectedSpot(spotId); // Update Locallab tools GUI with new created spot disableListener(); if (pe) { pe->locallab.spots.push_back(new LocallabParamsEdited::LocallabSpotEdited(true)); } updateLocallabGUI(pp, pe, pp->locallab.selspot); enableListener(); // Update default values according to selected spot setDefaults(defparams, defpedited, spotId); // ParamsEdited update if (pedited) { pedited->locallab.nbspot = true; pedited->locallab.selspot = true; pedited->locallab.id = true; pedited->locallab.spots.push_back(new LocallabParamsEdited::LocallabSpotEdited(true)); } break; case (ControlSpotPanel::SpotAllVisibilityChanged): // Event when updating visibility of all spots r = expsettings->getSpot(expsettings->getSelectedSpot()); // ProcParams update for (size_t i = 0; i < pp->locallab.spots.size(); i++) { pp->locallab.spots.at(i).isvisible = r->isvisible; } if (pe) { for (size_t i = 0; i < pe->locallab.spots.size(); i++) { pe->locallab.spots.at(i).isvisible = true; } } // ParamsEdited update if (pedited) { for (size_t i = 0; i < pedited->locallab.spots.size(); i++) { pedited->locallab.spots.at(i).isvisible = true; } } break; default: // Spot or locallab GUI updated if (pp->locallab.nbspot > 0) { r = expsettings->getSpot(expsettings->getSelectedSpot()); // ProcParams update if (pp->locallab.selspot < (int)pp->locallab.spots.size()) { // Control spot settings pp->locallab.spots.at(pp->locallab.selspot).name = r->name; pp->locallab.spots.at(pp->locallab.selspot).isvisible = r->isvisible; if (r->shape == 0) { pp->locallab.spots.at(pp->locallab.selspot).shape = "ELI"; } else { pp->locallab.spots.at(pp->locallab.selspot).shape = "RECT"; } if (r->spotMethod == 0) { pp->locallab.spots.at(pp->locallab.selspot).spotMethod = "norm"; } else { pp->locallab.spots.at(pp->locallab.selspot).spotMethod = "exc"; } pp->locallab.spots.at(pp->locallab.selspot).sensiexclu = r->sensiexclu; pp->locallab.spots.at(pp->locallab.selspot).structexclu = r->structexclu; pp->locallab.spots.at(pp->locallab.selspot).struc = r->struc; if (complexsoft == 2) { pp->locallab.spots.at(pp->locallab.selspot).shapeMethod = "IND"; r->shapeMethod = 0; } if (r->shapeMethod == 0) { pp->locallab.spots.at(pp->locallab.selspot).shapeMethod = "IND"; } else if (r->shapeMethod == 1) { pp->locallab.spots.at(pp->locallab.selspot).shapeMethod = "SYM"; } else if (r->shapeMethod == 2) { pp->locallab.spots.at(pp->locallab.selspot).shapeMethod = "INDSL"; } else { pp->locallab.spots.at(pp->locallab.selspot).shapeMethod = "SYMSL"; } pp->locallab.spots.at(pp->locallab.selspot).locX = r->locX; pp->locallab.spots.at(pp->locallab.selspot).locXL = r->locXL; pp->locallab.spots.at(pp->locallab.selspot).locY = r->locY; pp->locallab.spots.at(pp->locallab.selspot).locYT = r->locYT; pp->locallab.spots.at(pp->locallab.selspot).centerX = r->centerX; pp->locallab.spots.at(pp->locallab.selspot).centerY = r->centerY; pp->locallab.spots.at(pp->locallab.selspot).circrad = r->circrad; if (r->qualityMethod == 0) { pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "enh"; } else { pp->locallab.spots.at(pp->locallab.selspot).qualityMethod = "enhden"; } if (r->complexMethod == 0) { pp->locallab.spots.at(pp->locallab.selspot).complexMethod = "sim"; } else if (r->complexMethod == 1) { pp->locallab.spots.at(pp->locallab.selspot).complexMethod = "mod"; } else if (r->complexMethod == 2) { pp->locallab.spots.at(pp->locallab.selspot).complexMethod = "all"; } pp->locallab.spots.at(pp->locallab.selspot).transit = r->transit; pp->locallab.spots.at(pp->locallab.selspot).feather = r->feather; pp->locallab.spots.at(pp->locallab.selspot).thresh = r->thresh; pp->locallab.spots.at(pp->locallab.selspot).iter = r->iter; pp->locallab.spots.at(pp->locallab.selspot).balan = r->balan; pp->locallab.spots.at(pp->locallab.selspot).balanh = r->balanh; pp->locallab.spots.at(pp->locallab.selspot).transitweak = r->transitweak; pp->locallab.spots.at(pp->locallab.selspot).transitgrad = r->transitgrad; if (complexsoft == 2) { r->transitweak = 1; r->transitgrad = 0; pp->locallab.spots.at(pp->locallab.selspot).transitweak = r->transitweak; pp->locallab.spots.at(pp->locallab.selspot).transitgrad = r->transitgrad; } pp->locallab.spots.at(pp->locallab.selspot).scopemask = r->scopemask; pp->locallab.spots.at(pp->locallab.selspot).lumask = r->lumask; pp->locallab.spots.at(pp->locallab.selspot).avoid = r->avoid; pp->locallab.spots.at(pp->locallab.selspot).recurs = r->recurs; pp->locallab.spots.at(pp->locallab.selspot).laplac = r->laplac; pp->locallab.spots.at(pp->locallab.selspot).deltae = r->deltae; pp->locallab.spots.at(pp->locallab.selspot).shortc = r->shortc; pp->locallab.spots.at(pp->locallab.selspot).savrest = r->savrest; // Color & Light pp->locallab.spots.at(pp->locallab.selspot).expcolor = expcolor->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).curvactiv = curvactiv->get_active(); pp->locallab.spots.at(pp->locallab.selspot).lightness = lightness->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).contrast = contrast->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).chroma = chroma->getIntValue(); labgrid->getParams(pp->locallab.spots.at(pp->locallab.selspot).labgridALow, pp->locallab.spots.at(pp->locallab.selspot).labgridBLow, pp->locallab.spots.at(pp->locallab.selspot).labgridAHigh, pp->locallab.spots.at(pp->locallab.selspot).labgridBHigh); labgridmerg->getParams(pp->locallab.spots.at(pp->locallab.selspot).labgridALowmerg, pp->locallab.spots.at(pp->locallab.selspot).labgridBLowmerg, pp->locallab.spots.at(pp->locallab.selspot).labgridAHighmerg, pp->locallab.spots.at(pp->locallab.selspot).labgridBHighmerg); pp->locallab.spots.at(pp->locallab.selspot).strengthgrid = strengthgrid->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).labgridALow *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridAHigh *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridBLow *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridBHigh *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridALowmerg *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridAHighmerg *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridBLowmerg *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).labgridBHighmerg *= rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX; pp->locallab.spots.at(pp->locallab.selspot).sensi = sensi->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).structcol = structcol->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).blurcolde = blurcolde->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).blurcol = blurcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).contcol = contcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strcol = strcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).angcol = angcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strcolab = strcolab->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strcolh = strcolh->getValue(); if (qualitycurveMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none"; } else if (qualitycurveMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "std"; } if (gridMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).gridMethod = "one"; } else if (gridMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).gridMethod = "two"; } if (merMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).merMethod = "mone"; } else if (merMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).merMethod = "mtwo"; } else if (merMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).merMethod = "mthr"; } else if (merMethod->get_active_row_number() == 3) { pp->locallab.spots.at(pp->locallab.selspot).merMethod = "mfou"; } else if (merMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).merMethod = "mfiv"; } if (toneMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).toneMethod = "one"; } else if (toneMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).toneMethod = "two"; } else if (toneMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).toneMethod = "thr"; } else if (toneMethod->get_active_row_number() == 3) { pp->locallab.spots.at(pp->locallab.selspot).toneMethod = "fou"; } if (mergecolMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "one"; } else if (mergecolMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "two"; } else if (mergecolMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "thr"; } else if (mergecolMethod->get_active_row_number() == 3) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "fou"; } else if (mergecolMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "fiv"; } else if (mergecolMethod->get_active_row_number() == 5) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "six"; } else if (mergecolMethod->get_active_row_number() == 6) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "sev"; } else if (mergecolMethod->get_active_row_number() == 7) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "sev0"; } else if (mergecolMethod->get_active_row_number() == 8) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "sev1"; } else if (mergecolMethod->get_active_row_number() == 9) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "sev2"; } else if (mergecolMethod->get_active_row_number() == 10) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "hei"; } else if (mergecolMethod->get_active_row_number() == 11) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "nin"; } else if (mergecolMethod->get_active_row_number() == 12) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "ten"; } else if (mergecolMethod->get_active_row_number() == 13) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "ele"; } else if (mergecolMethod->get_active_row_number() == 14) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "twe"; } else if (mergecolMethod->get_active_row_number() == 15) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "thi"; } else if (mergecolMethod->get_active_row_number() == 16) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "for"; } else if (mergecolMethod->get_active_row_number() == 17) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "hue"; } else if (mergecolMethod->get_active_row_number() == 18) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "sat"; } else if (mergecolMethod->get_active_row_number() == 19) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "col"; } else if (mergecolMethod->get_active_row_number() == 20) { pp->locallab.spots.at(pp->locallab.selspot).mergecolMethod = "lum"; } if (complexsoft == 2) { lcshape->reset(); clshape->reset(); LHshape->reset(); HHshape->reset(); rgbshape->reset(); HHhmaskshape->reset(); } if (complexsoft > 0) { LLmaskcolshapewav->reset(); } pp->locallab.spots.at(pp->locallab.selspot).llcurve = llshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).cccurve = ccshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).clcurve = clshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).lccurve = lcshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).rgbcurve = rgbshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LHcurve = LHshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHcurve = HHshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).invers = invers->get_active(); pp->locallab.spots.at(pp->locallab.selspot).special = special->get_active(); pp->locallab.spots.at(pp->locallab.selspot).toolcol = toolcol->get_active(); pp->locallab.spots.at(pp->locallab.selspot).enaColorMask = enaColorMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).fftColorMask = fftColorMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskcurve = CCmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = LLmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = HHmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHhmaskcurve = HHhmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskcol = blendmaskcol->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskcol = radmaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromaskcol = chromaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskcol = gammaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskcol = slomaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).shadmaskcol = shadmaskcol->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).strumaskcol = strumaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskcol = lapmaskcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).softradiuscol = softradiuscol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).opacol = opacol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).mercol = mercol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).merlucol = merlucol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).conthrcol = conthrcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskcurve = Lmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav = LLmaskcolshapewav->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).csthresholdcol = csThresholdcol->getValue(); // Exposure pp->locallab.spots.at(pp->locallab.selspot).expexpose = expexpose->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).expcomp = expcomp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).hlcompr = hlcompr->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).hlcomprthresh = hlcomprthresh->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).black = black->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).shadex = shadex->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).shcompr = shcompr->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).expchroma = expchroma->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).warm = warm->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensiex = sensiex->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).structexp = structexp->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).blurexpde = blurexpde->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).strexp = strexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).angexp = angexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).excurve = shapeexpos->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).inversex = inversex->get_active(); pp->locallab.spots.at(pp->locallab.selspot).enaExpMask = enaExpMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft = enaExpMaskaft->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = LLmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = CCmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = HHmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskexp = blendmaskexp->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskexp = radmaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromaskexp = chromaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskexp = gammaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskexp = slomaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskexp = lapmaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strmaskexp = strmaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).angmaskexp = angmaskexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).softradiusexp = softradiusexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve = Lmaskexpshape->getCurve(); if (expMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).expMethod = "std"; } else if (expMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).expMethod = "pde"; } if (exnoiseMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = "none"; } else if (exnoiseMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = "med"; } else if (exnoiseMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = "medhi"; } /* } else if (exnoiseMethod->get_active_row_number() == 3) { pp->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = "wavlo"; } else if (exnoiseMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = "wavme"; } else if (exnoiseMethod->get_active_row_number() == 5) { pp->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = "wavhi"; } */ pp->locallab.spots.at(pp->locallab.selspot).laplacexp = laplacexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).balanexp = balanexp->getValue(); pp->locallab.spots.at(pp->locallab.selspot).linear = linear->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gamm = gamm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatamount = fatamount->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatdetail = fatdetail->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatanchor = fatanchor->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatlevel = fatlevel->getIntValue(); // Shadow highlight pp->locallab.spots.at(pp->locallab.selspot).expshadhigh = expshadhigh->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).highlights = highlights->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).h_tonalwidth = h_tonalwidth->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).shadows = shadows->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).s_tonalwidth = s_tonalwidth->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sh_radius = sh_radius->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensihs = sensihs->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).enaSHMask = enaSHMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskSHcurve = LLmaskSHshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskSHcurve = CCmaskSHshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskSHcurve = HHmaskSHshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskSH = blendmaskSH->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskSH = radmaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).blurSHde = blurSHde->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).strSH = strSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).angSH = angSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).inverssh = inverssh->get_active(); pp->locallab.spots.at(pp->locallab.selspot).chromaskSH = chromaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskSH = gammaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskSH = slomaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskSH = lapmaskSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).detailSH = detailSH->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = LmaskSHshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).fatamountSH = fatamountSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatanchorSH = fatanchorSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gamSH = gamSH->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sloSH = sloSH->getValue(); if (shMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).shMethod = "std"; } else if (shMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).shMethod = "tone"; } for (int i = 0; i < 5; i++) { pp->locallab.spots.at(pp->locallab.selspot).multsh[i] = multipliersh[i]->getIntValue(); } // Vibrance pp->locallab.spots.at(pp->locallab.selspot).expvibrance = expvibrance->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).saturated = saturated->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).pastels = pastels->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).psthreshold = psThreshold->getValue(); pp->locallab.spots.at(pp->locallab.selspot).protectskins = protectSkins->get_active(); pp->locallab.spots.at(pp->locallab.selspot).avoidcolorshift = avoidColorShift->get_active(); pp->locallab.spots.at(pp->locallab.selspot).pastsattog = pastSatTog->get_active(); pp->locallab.spots.at(pp->locallab.selspot).sensiv = sensiv->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).skintonescurve = skinTonesCurve->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskvibcurve = LLmaskvibshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskvibcurve = CCmaskvibshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskvibcurve = HHmaskvibshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enavibMask = enavibMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskvib = blendmaskvib->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskvib = radmaskvib->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromaskvib = chromaskvib->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskvib = gammaskvib->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskvib = slomaskvib->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskvib = lapmaskvib->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskvibcurve = Lmaskvibshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).strvib = strvib->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strvibab = strvibab->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strvibh = strvibh->getValue(); pp->locallab.spots.at(pp->locallab.selspot).angvib = angvib->getValue(); if (complexsoft == 2) { skinTonesCurve->reset(); } // Soft Light pp->locallab.spots.at(pp->locallab.selspot).expsoft = expsoft->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).streng = streng->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensisf = sensisf->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).laplace = laplace->getValue(); if (softMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).softMethod = "soft"; } else if (softMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).softMethod = "reti"; } // Blur & Noise pp->locallab.spots.at(pp->locallab.selspot).expblur = expblur->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).radius = radius->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strength = strength->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensibn = sensibn->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).itera = itera->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).guidbl = guidbl->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).epsbl = epsbl->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).isogr = isogr->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).strengr = strengr->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).scalegr = scalegr->getIntValue(); if (blMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).blMethod = "blur"; } else if (blMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).blMethod = "med"; } else if (blMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).blMethod = "guid"; } if (medMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).medMethod = "none"; } else if (medMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).medMethod = "33"; } else if (medMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).medMethod = "55"; } else if (medMethod->get_active_row_number() == 3) { pp->locallab.spots.at(pp->locallab.selspot).medMethod = "77"; } else if (medMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).medMethod = "99"; } if (blurMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).blurMethod = "norm"; } else if (blurMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).blurMethod = "inv"; } pp->locallab.spots.at(pp->locallab.selspot).activlum = activlum->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskblcurve = LLmaskblshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskblcurve = CCmaskblshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskblcurve = HHmaskblshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enablMask = enablMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskbl = blendmaskbl->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskbl = radmaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromaskbl = chromaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskbl = gammaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskbl = slomaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskbl = lapmaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).shadmaskbl = shadmaskbl->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).strumaskbl = strumaskbl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fftwbl = fftwbl->get_active(); pp->locallab.spots.at(pp->locallab.selspot).toolbl = toolbl->get_active(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = Lmaskblshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav = LLmaskblshapewav->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).csthresholdblur = csThresholdblur->getValue(); // Tone Mapping pp->locallab.spots.at(pp->locallab.selspot).exptonemap = exptonemap->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).stren = stren->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gamma = gamma->getValue(); pp->locallab.spots.at(pp->locallab.selspot).estop = estop->getValue(); pp->locallab.spots.at(pp->locallab.selspot).scaltm = scaltm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).rewei = rewei->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).satur = satur->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sensitm = sensitm->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).softradiustm = softradiustm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).amount = amount->getValue(); pp->locallab.spots.at(pp->locallab.selspot).equiltm = equiltm->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve = LLmasktmshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmasktmcurve = CCmasktmshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve = HHmasktmshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enatmMask = enatmMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).enatmMaskaft = enatmMaskaft->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blendmasktm = blendmasktm->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmasktm = radmasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromasktm = chromasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammasktm = gammasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomasktm = slomasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmasktm = lapmasktm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve = Lmasktmshape->getCurve(); // Retinex pp->locallab.spots.at(pp->locallab.selspot).expreti = expreti->getEnabled(); if (retinexMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).retinexMethod = "low"; } else if (retinexMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).retinexMethod = "uni"; } else if (retinexMethod->get_active_row_number() == 2) { pp->locallab.spots.at(pp->locallab.selspot).retinexMethod = "high"; } pp->locallab.spots.at(pp->locallab.selspot).str = str->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chrrt = chrrt->getValue(); pp->locallab.spots.at(pp->locallab.selspot).neigh = neigh->getValue(); pp->locallab.spots.at(pp->locallab.selspot).vart = vart->getValue(); pp->locallab.spots.at(pp->locallab.selspot).offs = offs->getValue(); pp->locallab.spots.at(pp->locallab.selspot).dehaz = dehaz->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).depth = depth->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensih = sensih->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).localTgaincurve = cTgainshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).localTtranscurve = cTtransshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).inversret = inversret->get_active(); pp->locallab.spots.at(pp->locallab.selspot).softradiusret = softradiusret->getValue(); pp->locallab.spots.at(pp->locallab.selspot).equilret = equilret->get_active(); pp->locallab.spots.at(pp->locallab.selspot).loglin = loglin->get_active(); pp->locallab.spots.at(pp->locallab.selspot).lumonly = lumonly->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve = LLmaskretishape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve = CCmaskretishape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve = HHmaskretishape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enaretiMask = enaretiMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap = enaretiMasktmap->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskreti = blendmaskreti->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskreti = radmaskreti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromaskreti = chromaskreti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskreti = gammaskreti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskreti = slomaskreti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskreti = lapmaskreti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).scalereti = scalereti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).darkness = darkness->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lightnessreti = lightnessreti->getValue(); pp->locallab.spots.at(pp->locallab.selspot).limd = limd->getValue(); pp->locallab.spots.at(pp->locallab.selspot).cliptm = cliptm->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fftwreti = fftwreti->get_active(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskreticurve = Lmaskretishape->getCurve(); // Sharpening pp->locallab.spots.at(pp->locallab.selspot).expsharp = expsharp->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).sharcontrast = sharcontrast->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sharradius = sharradius->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sharamount = sharamount->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).shardamping = shardamping->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).shariter = shariter->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sharblur = sharblur->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sensisha = sensisha->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).inverssha = inverssha->get_active(); // Local Contrast pp->locallab.spots.at(pp->locallab.selspot).expcontrast = expcontrast->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).lcradius = lcradius->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).lcamount = lcamount->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lcdarkness = lcdarkness->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lclightness = lclightness->getValue(); pp->locallab.spots.at(pp->locallab.selspot).levelwav = levelwav->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).residcont = residcont->getValue(); pp->locallab.spots.at(pp->locallab.selspot).residblur = residblur->getValue(); pp->locallab.spots.at(pp->locallab.selspot).levelblur = levelblur->getValue(); pp->locallab.spots.at(pp->locallab.selspot).residchro = residchro->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sigma = sigma->getValue(); pp->locallab.spots.at(pp->locallab.selspot).offset = offset->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromalev = chromalev->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromablu = chromablu->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatdet = fatdet->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatanch = fatanch->getValue(); pp->locallab.spots.at(pp->locallab.selspot).fatres = fatres->getValue(); pp->locallab.spots.at(pp->locallab.selspot).clarilres = clarilres->getValue(); pp->locallab.spots.at(pp->locallab.selspot).claricres = claricres->getValue(); pp->locallab.spots.at(pp->locallab.selspot).clarisoft = clarisoft->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sensilc = sensilc->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).fftwlc = fftwlc->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blurlc = blurlc->get_active(); pp->locallab.spots.at(pp->locallab.selspot).origlc = origlc->get_active(); pp->locallab.spots.at(pp->locallab.selspot).locwavcurve = wavshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).csthreshold = csThreshold->getValue(); pp->locallab.spots.at(pp->locallab.selspot).loclevwavcurve = wavshapelev->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).locconwavcurve = wavshapecon->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).loccompwavcurve = wavshapecomp->getCurve(); if (localcontMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).localcontMethod = "loc"; } else if (localcontMethod->get_active_row_number() == 1) { pp->locallab.spots.at(pp->locallab.selspot).localcontMethod = "wav"; } pp->locallab.spots.at(pp->locallab.selspot).LLmasklccurve = LLmasklcshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmasklccurve = CCmasklcshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = HHmasklcshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).enalcMask = enalcMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blendmasklc = blendmasklc->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmasklc = radmasklc->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromasklc = chromasklc->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmasklccurve = Lmasklcshape->getCurve(); // Contrast by detail levels pp->locallab.spots.at(pp->locallab.selspot).expcbdl = expcbdl->getEnabled(); for (int i = 0; i < 6; i++) { pp->locallab.spots.at(pp->locallab.selspot).mult[i] = multiplier[i]->getValue(); } pp->locallab.spots.at(pp->locallab.selspot).chromacbdl = chromacbdl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).threshold = threshold->getValue(); pp->locallab.spots.at(pp->locallab.selspot).sensicb = sensicb->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).clarityml = clarityml->getValue(); pp->locallab.spots.at(pp->locallab.selspot).contresid = contresid->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).blurcbdl = blurcbdl->getValue(); pp->locallab.spots.at(pp->locallab.selspot).softradiuscb = softradiuscb->getValue(); pp->locallab.spots.at(pp->locallab.selspot).enacbMask = enacbMask->get_active(); pp->locallab.spots.at(pp->locallab.selspot).LLmaskcbcurve = LLmaskcbshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskcbcurve = CCmaskcbshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskcbcurve = HHmaskcbshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskcb = blendmaskcb->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).radmaskcb = radmaskcb->getValue(); pp->locallab.spots.at(pp->locallab.selspot).chromaskcb = chromaskcb->getValue(); pp->locallab.spots.at(pp->locallab.selspot).gammaskcb = gammaskcb->getValue(); pp->locallab.spots.at(pp->locallab.selspot).slomaskcb = slomaskcb->getValue(); pp->locallab.spots.at(pp->locallab.selspot).lapmaskcb = lapmaskcb->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Lmaskcbcurve = Lmaskcbshape->getCurve(); // Denoise pp->locallab.spots.at(pp->locallab.selspot).expdenoi = expdenoi->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).noiselumf = noiselumf->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noiselumf0 = noiselumf0->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noiselumf2 = noiselumf2->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noiselumc = noiselumc->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noiselumdetail = noiselumdetail->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noiselequal = noiselequal->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).noisechrof = noisechrof->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noisechroc = noisechroc->getValue(); pp->locallab.spots.at(pp->locallab.selspot).noisechrodetail = noisechrodetail->getValue(); pp->locallab.spots.at(pp->locallab.selspot).adjblur = adjblur->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).bilateral = bilateral->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensiden = sensiden->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).detailthr = detailthr->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).locwavcurveden = wavshapeden->getCurve(); //log encoding pp->locallab.spots.at(pp->locallab.selspot).explog = explog->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).autocompute = autocompute->get_active(); // pp->locallab.spots.at(pp->locallab.selspot).autogray = sourceGray->getAutoValue(); pp->locallab.spots.at(pp->locallab.selspot).sourceGray = sourceGray->getValue(); pp->locallab.spots.at(pp->locallab.selspot).Autogray = Autogray->get_active(); pp->locallab.spots.at(pp->locallab.selspot).fullimage = fullimage->get_active(); pp->locallab.spots.at(pp->locallab.selspot).blackEv = blackEv->getValue(); pp->locallab.spots.at(pp->locallab.selspot).whiteEv = whiteEv->getValue(); pp->locallab.spots.at(pp->locallab.selspot).targetGray = targetGray->getValue(); pp->locallab.spots.at(pp->locallab.selspot).detail = detail->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensilog = sensilog->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).baselog = baselog->getValue(); } ControlSpotPanel::SpotEdited* const se = expsettings->getEditedStates(); if (pe) { if (pp->locallab.selspot < (int)pe->locallab.spots.size()) { pe->locallab.spots.at(pp->locallab.selspot).name = pe->locallab.spots.at(pp->locallab.selspot).name || se->name; pe->locallab.spots.at(pp->locallab.selspot).isvisible = pe->locallab.spots.at(pp->locallab.selspot).isvisible || se->isvisible; pe->locallab.spots.at(pp->locallab.selspot).shape = pe->locallab.spots.at(pp->locallab.selspot).shape || se->shape; pe->locallab.spots.at(pp->locallab.selspot).spotMethod = pe->locallab.spots.at(pp->locallab.selspot).spotMethod || se->spotMethod; // pe->locallab.spots.at(pp->locallab.selspot).mergeMethod = pe->locallab.spots.at(pp->locallab.selspot).mergeMethod || se->mergeMethod; pe->locallab.spots.at(pp->locallab.selspot).sensiexclu = pe->locallab.spots.at(pp->locallab.selspot).sensiexclu || se->sensiexclu; pe->locallab.spots.at(pp->locallab.selspot).structexclu = pe->locallab.spots.at(pp->locallab.selspot).structexclu || se->structexclu; pe->locallab.spots.at(pp->locallab.selspot).struc = pe->locallab.spots.at(pp->locallab.selspot).struc || se->struc; pe->locallab.spots.at(pp->locallab.selspot).shapeMethod = pe->locallab.spots.at(pp->locallab.selspot).shapeMethod || se->shapeMethod; pe->locallab.spots.at(pp->locallab.selspot).locX = pe->locallab.spots.at(pp->locallab.selspot).locX || se->locX; pe->locallab.spots.at(pp->locallab.selspot).locXL = pe->locallab.spots.at(pp->locallab.selspot).locXL || se->locXL; pe->locallab.spots.at(pp->locallab.selspot).locY = pe->locallab.spots.at(pp->locallab.selspot).locY || se->locY; pe->locallab.spots.at(pp->locallab.selspot).locYT = pe->locallab.spots.at(pp->locallab.selspot).locYT || se->locYT; pe->locallab.spots.at(pp->locallab.selspot).centerX = pe->locallab.spots.at(pp->locallab.selspot).centerX || se->centerX; pe->locallab.spots.at(pp->locallab.selspot).centerY = pe->locallab.spots.at(pp->locallab.selspot).centerY || se->centerY; pe->locallab.spots.at(pp->locallab.selspot).circrad = pe->locallab.spots.at(pp->locallab.selspot).circrad || se->circrad; pe->locallab.spots.at(pp->locallab.selspot).qualityMethod = pe->locallab.spots.at(pp->locallab.selspot).qualityMethod || se->qualityMethod; pe->locallab.spots.at(pp->locallab.selspot).complexMethod = pe->locallab.spots.at(pp->locallab.selspot).complexMethod || se->complexMethod; pe->locallab.spots.at(pp->locallab.selspot).transit = pe->locallab.spots.at(pp->locallab.selspot).transit || se->transit; pe->locallab.spots.at(pp->locallab.selspot).feather = pe->locallab.spots.at(pp->locallab.selspot).feather || se->feather; pe->locallab.spots.at(pp->locallab.selspot).thresh = pe->locallab.spots.at(pp->locallab.selspot).thresh || se->thresh; pe->locallab.spots.at(pp->locallab.selspot).iter = pe->locallab.spots.at(pp->locallab.selspot).iter || se->iter; pe->locallab.spots.at(pp->locallab.selspot).transitweak = pe->locallab.spots.at(pp->locallab.selspot).transitweak || se->transitweak; pe->locallab.spots.at(pp->locallab.selspot).transitgrad = pe->locallab.spots.at(pp->locallab.selspot).transitgrad || se->transitgrad; pe->locallab.spots.at(pp->locallab.selspot).scopemask = pe->locallab.spots.at(pp->locallab.selspot).scopemask || se->scopemask; pe->locallab.spots.at(pp->locallab.selspot).lumask = pe->locallab.spots.at(pp->locallab.selspot).lumask || se->lumask; pe->locallab.spots.at(pp->locallab.selspot).balan = pe->locallab.spots.at(pp->locallab.selspot).balan || se->balan; pe->locallab.spots.at(pp->locallab.selspot).balanh = pe->locallab.spots.at(pp->locallab.selspot).balanh || se->balanh; pe->locallab.spots.at(pp->locallab.selspot).avoid = pe->locallab.spots.at(pp->locallab.selspot).avoid || se->avoid; pe->locallab.spots.at(pp->locallab.selspot).recurs = pe->locallab.spots.at(pp->locallab.selspot).recurs || se->recurs; pe->locallab.spots.at(pp->locallab.selspot).laplac = pe->locallab.spots.at(pp->locallab.selspot).laplac || se->laplac; pe->locallab.spots.at(pp->locallab.selspot).deltae = pe->locallab.spots.at(pp->locallab.selspot).deltae || se->deltae; pe->locallab.spots.at(pp->locallab.selspot).shortc = pe->locallab.spots.at(pp->locallab.selspot).shortc || se->shortc; pe->locallab.spots.at(pp->locallab.selspot).savrest = pe->locallab.spots.at(pp->locallab.selspot).savrest || se->savrest; // Color & Light pe->locallab.spots.at(pp->locallab.selspot).expcolor = pe->locallab.spots.at(pp->locallab.selspot).expcolor || !expcolor->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).curvactiv = pe->locallab.spots.at(pp->locallab.selspot).curvactiv || !curvactiv->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).lightness = pe->locallab.spots.at(pp->locallab.selspot).lightness || lightness->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).contrast = pe->locallab.spots.at(pp->locallab.selspot).contrast || contrast->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).labgridALow = pe->locallab.spots.at(pp->locallab.selspot).labgridBLow = pe->locallab.spots.at(pp->locallab.selspot).labgridAHigh = pe->locallab.spots.at(pp->locallab.selspot).labgridBHigh = labgrid->getEdited(); pe->locallab.spots.at(pp->locallab.selspot).labgridALowmerg = pe->locallab.spots.at(pp->locallab.selspot).labgridBLowmerg = pe->locallab.spots.at(pp->locallab.selspot).labgridAHighmerg = pe->locallab.spots.at(pp->locallab.selspot).labgridBHighmerg = labgridmerg->getEdited(); pe->locallab.spots.at(pp->locallab.selspot).strengthgrid = pe->locallab.spots.at(pp->locallab.selspot).strengthgrid || strengthgrid->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chroma = pe->locallab.spots.at(pp->locallab.selspot).chroma || chroma->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensi = pe->locallab.spots.at(pp->locallab.selspot).sensi || sensi->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).structcol = pe->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strcol = pe->locallab.spots.at(pp->locallab.selspot).strcol || strcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strcolab = pe->locallab.spots.at(pp->locallab.selspot).strcolab || strcolab->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strcolh = pe->locallab.spots.at(pp->locallab.selspot).strcolh || strcolh->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).angcol = pe->locallab.spots.at(pp->locallab.selspot).angcol || angcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).gridMethod = pe->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).merMethod = pe->locallab.spots.at(pp->locallab.selspot).merMethod || merMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).toneMethod = pe->locallab.spots.at(pp->locallab.selspot).toneMethod || toneMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).mergecolMethod = pe->locallab.spots.at(pp->locallab.selspot).mergecolMethod || mergecolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).llcurve = pe->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).lccurve = pe->locallab.spots.at(pp->locallab.selspot).lccurve || !lcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).rgbcurve = pe->locallab.spots.at(pp->locallab.selspot).rgbcurve || !rgbshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).cccurve = pe->locallab.spots.at(pp->locallab.selspot).cccurve || !ccshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).clcurve = pe->locallab.spots.at(pp->locallab.selspot).clcurve || !clshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).lccurve = pe->locallab.spots.at(pp->locallab.selspot).lccurve || !lcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LHcurve = pe->locallab.spots.at(pp->locallab.selspot).LHcurve || !LHshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHcurve = pe->locallab.spots.at(pp->locallab.selspot).HHcurve || !HHshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).invers = pe->locallab.spots.at(pp->locallab.selspot).invers || !invers->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).special = pe->locallab.spots.at(pp->locallab.selspot).special || !special->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).toolcol = pe->locallab.spots.at(pp->locallab.selspot).toolcol || !toolcol->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).enaColorMask = pe->locallab.spots.at(pp->locallab.selspot).enaColorMask || !enaColorMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).fftColorMask = pe->locallab.spots.at(pp->locallab.selspot).fftColorMask || !fftColorMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskcurve || !CCmaskshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskcurve || !LLmaskshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskcurve || !HHmaskshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHhmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).HHhmaskcurve || !HHhmaskshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).blurcolde = pe->locallab.spots.at(pp->locallab.selspot).blurcolde || blurcolde->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blurcol = pe->locallab.spots.at(pp->locallab.selspot).blurcol || blurcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).contcol = pe->locallab.spots.at(pp->locallab.selspot).contcol || contcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskcol = pe->locallab.spots.at(pp->locallab.selspot).blendmaskcol || blendmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskcol = pe->locallab.spots.at(pp->locallab.selspot).radmaskcol || radmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromaskcol = pe->locallab.spots.at(pp->locallab.selspot).chromaskcol || chromaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskcol = pe->locallab.spots.at(pp->locallab.selspot).gammaskcol || gammaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskcol = pe->locallab.spots.at(pp->locallab.selspot).slomaskcol || slomaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shadmaskcol = pe->locallab.spots.at(pp->locallab.selspot).shadmaskcol || shadmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strumaskcol = pe->locallab.spots.at(pp->locallab.selspot).strumaskcol || strumaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskcol = pe->locallab.spots.at(pp->locallab.selspot).lapmaskcol || lapmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softradiuscol = pe->locallab.spots.at(pp->locallab.selspot).softradiuscol || softradiuscol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).opacol = pe->locallab.spots.at(pp->locallab.selspot).opacol || opacol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).mercol = pe->locallab.spots.at(pp->locallab.selspot).mercol || mercol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).merlucol = pe->locallab.spots.at(pp->locallab.selspot).merlucol || merlucol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).conthrcol = pe->locallab.spots.at(pp->locallab.selspot).conthrcol || conthrcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskcurve || !Lmaskshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav = pe->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav || !LLmaskcolshapewav->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).csthresholdcol = pe->locallab.spots.at(pp->locallab.selspot).csthresholdcol || csThresholdcol->getEditedState(); // Exposure pe->locallab.spots.at(pp->locallab.selspot).expexpose = pe->locallab.spots.at(pp->locallab.selspot).expexpose || !expexpose->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).expcomp = pe->locallab.spots.at(pp->locallab.selspot).expcomp || expcomp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).hlcompr = pe->locallab.spots.at(pp->locallab.selspot).hlcompr || hlcompr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).hlcomprthresh = pe->locallab.spots.at(pp->locallab.selspot).hlcomprthresh || hlcomprthresh->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).black = pe->locallab.spots.at(pp->locallab.selspot).black || black->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shadex = pe->locallab.spots.at(pp->locallab.selspot).shadex || shadex->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shcompr = pe->locallab.spots.at(pp->locallab.selspot).shcompr || shcompr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).expchroma = pe->locallab.spots.at(pp->locallab.selspot).expchroma || expchroma->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).warm = pe->locallab.spots.at(pp->locallab.selspot).warm || warm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensiex = pe->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).structexp = pe->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blurexpde = pe->locallab.spots.at(pp->locallab.selspot).blurexpde || blurexpde->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strexp = pe->locallab.spots.at(pp->locallab.selspot).strexp || strexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).angexp = pe->locallab.spots.at(pp->locallab.selspot).angexp || angexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).excurve = pe->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).inversex = pe->locallab.spots.at(pp->locallab.selspot).inversex || !inversex->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).enaExpMask = pe->locallab.spots.at(pp->locallab.selspot).enaExpMask || !enaExpMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft = pe->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft || !enaExpMaskaft->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskexp = pe->locallab.spots.at(pp->locallab.selspot).blendmaskexp || blendmaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskexp = pe->locallab.spots.at(pp->locallab.selspot).radmaskexp || radmaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromaskexp = pe->locallab.spots.at(pp->locallab.selspot).chromaskexp || chromaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskexp = pe->locallab.spots.at(pp->locallab.selspot).gammaskexp || gammaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskexp = pe->locallab.spots.at(pp->locallab.selspot).slomaskexp || slomaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskexp = pe->locallab.spots.at(pp->locallab.selspot).lapmaskexp || lapmaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strmaskexp = pe->locallab.spots.at(pp->locallab.selspot).strmaskexp || strmaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).angmaskexp = pe->locallab.spots.at(pp->locallab.selspot).angmaskexp || angmaskexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softradiusexp = pe->locallab.spots.at(pp->locallab.selspot).softradiusexp || softradiusexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve || !Lmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).expMethod = pe->locallab.spots.at(pp->locallab.selspot).expMethod || expMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = pe->locallab.spots.at(pp->locallab.selspot).exnoiseMethod || exnoiseMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).laplacexp = pe->locallab.spots.at(pp->locallab.selspot).laplacexp || laplacexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).balanexp = pe->locallab.spots.at(pp->locallab.selspot).balanexp || balanexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).linear = pe->locallab.spots.at(pp->locallab.selspot).linear || linear->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gamm = pe->locallab.spots.at(pp->locallab.selspot).gamm || gamm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatamount = pe->locallab.spots.at(pp->locallab.selspot).fatamount || fatamount->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatdetail = pe->locallab.spots.at(pp->locallab.selspot).fatdetail || fatdetail->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatanchor = pe->locallab.spots.at(pp->locallab.selspot).fatanchor || fatanchor->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatlevel = pe->locallab.spots.at(pp->locallab.selspot).fatlevel || fatlevel->getEditedState(); // Shadow highlight pe->locallab.spots.at(pp->locallab.selspot).expshadhigh = pe->locallab.spots.at(pp->locallab.selspot).expshadhigh || !expshadhigh->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).highlights = pe->locallab.spots.at(pp->locallab.selspot).highlights || highlights->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).h_tonalwidth = pe->locallab.spots.at(pp->locallab.selspot).h_tonalwidth || h_tonalwidth->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shadows = pe->locallab.spots.at(pp->locallab.selspot).shadows || shadows->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).s_tonalwidth = pe->locallab.spots.at(pp->locallab.selspot).s_tonalwidth || s_tonalwidth->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sh_radius = pe->locallab.spots.at(pp->locallab.selspot).sh_radius || sh_radius->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensihs = pe->locallab.spots.at(pp->locallab.selspot).sensihs || sensihs->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).enaSHMask = pe->locallab.spots.at(pp->locallab.selspot).enaSHMask || !enaSHMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskSHcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskSHcurve || !CCmaskSHshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskSHcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskSHcurve || !LLmaskSHshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskSHcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskSHcurve || !HHmaskSHshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskSH = pe->locallab.spots.at(pp->locallab.selspot).blendmaskSH || blendmaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskSH = pe->locallab.spots.at(pp->locallab.selspot).radmaskSH || radmaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blurSHde = pe->locallab.spots.at(pp->locallab.selspot).blurSHde || blurSHde->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strSH = pe->locallab.spots.at(pp->locallab.selspot).strSH || strSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).angSH = pe->locallab.spots.at(pp->locallab.selspot).angSH || angSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).inverssh = pe->locallab.spots.at(pp->locallab.selspot).inverssh || !inverssh->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).chromaskSH = pe->locallab.spots.at(pp->locallab.selspot).chromaskSH || chromaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskSH = pe->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskSH = pe->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pe->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).detailSH = pe->locallab.spots.at(pp->locallab.selspot).detailSH || detailSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = pe->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve || !LmaskSHshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).shMethod = pe->locallab.spots.at(pp->locallab.selspot).shMethod || shMethod->get_active_text() != M("GENERAL_UNCHANGED"); for (int i = 0; i < 5; i++) { pe->locallab.spots.at(pp->locallab.selspot).multsh[i] = pe->locallab.spots.at(pp->locallab.selspot).multsh[i] || multipliersh[i]->getEditedState(); } pe->locallab.spots.at(pp->locallab.selspot).fatamountSH = pe->locallab.spots.at(pp->locallab.selspot).fatamountSH || fatamountSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatanchorSH = pe->locallab.spots.at(pp->locallab.selspot).fatanchorSH || fatanchorSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gamSH = pe->locallab.spots.at(pp->locallab.selspot).gamSH || gamSH->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sloSH = pe->locallab.spots.at(pp->locallab.selspot).sloSH || sloSH->getEditedState(); // Vibrance pe->locallab.spots.at(pp->locallab.selspot).expvibrance = pe->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).saturated = pe->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).pastels = pe->locallab.spots.at(pp->locallab.selspot).pastels || pastels->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).psthreshold = pe->locallab.spots.at(pp->locallab.selspot).psthreshold || psThreshold->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).protectskins = pe->locallab.spots.at(pp->locallab.selspot).protectskins || !protectSkins->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).avoidcolorshift = pe->locallab.spots.at(pp->locallab.selspot).avoidcolorshift || !avoidColorShift->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).pastsattog = pe->locallab.spots.at(pp->locallab.selspot).pastsattog || !pastSatTog->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).sensiv = pe->locallab.spots.at(pp->locallab.selspot).sensiv || sensiv->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).skintonescurve = pe->locallab.spots.at(pp->locallab.selspot).skintonescurve || !skinTonesCurve->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskvibcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskvibcurve || !CCmaskvibshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskvibcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskvibcurve || !LLmaskvibshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskvibcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskvibcurve || !HHmaskvibshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enavibMask = pe->locallab.spots.at(pp->locallab.selspot).enavibMask || !enavibMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskvib = pe->locallab.spots.at(pp->locallab.selspot).blendmaskvib || blendmaskvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskvib = pe->locallab.spots.at(pp->locallab.selspot).radmaskvib || radmaskvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromaskvib = pe->locallab.spots.at(pp->locallab.selspot).chromaskvib || chromaskvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskvib = pe->locallab.spots.at(pp->locallab.selspot).gammaskvib || gammaskvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskvib = pe->locallab.spots.at(pp->locallab.selspot).slomaskvib || slomaskvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskvib = pe->locallab.spots.at(pp->locallab.selspot).lapmaskvib || lapmaskvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskvibcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskvibcurve || !Lmaskvibshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).strvib = pe->locallab.spots.at(pp->locallab.selspot).strvib || strvib->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strvibab = pe->locallab.spots.at(pp->locallab.selspot).strvibab || strvibab->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strvibh = pe->locallab.spots.at(pp->locallab.selspot).strvibh || strvibh->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).angvib = pe->locallab.spots.at(pp->locallab.selspot).angvib || angvib->getEditedState(); // Soft Light pe->locallab.spots.at(pp->locallab.selspot).expsoft = pe->locallab.spots.at(pp->locallab.selspot).expsoft || !expsoft->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).streng = pe->locallab.spots.at(pp->locallab.selspot).streng || streng->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensisf = pe->locallab.spots.at(pp->locallab.selspot).sensisf || sensisf->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).laplace = pe->locallab.spots.at(pp->locallab.selspot).laplace || laplace->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softMethod = pe->locallab.spots.at(pp->locallab.selspot).softMethod || softMethod->get_active_text() != M("GENERAL_UNCHANGED"); // Blur & Noise pe->locallab.spots.at(pp->locallab.selspot).expblur = pe->locallab.spots.at(pp->locallab.selspot).expblur || !expblur->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).radius = pe->locallab.spots.at(pp->locallab.selspot).radius || radius->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strength = pe->locallab.spots.at(pp->locallab.selspot).strength || strength->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensibn = pe->locallab.spots.at(pp->locallab.selspot).sensibn || sensibn->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).itera = pe->locallab.spots.at(pp->locallab.selspot).itera || itera->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).isogr = pe->locallab.spots.at(pp->locallab.selspot).isogr || isogr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strengr = pe->locallab.spots.at(pp->locallab.selspot).strengr || strengr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).scalegr = pe->locallab.spots.at(pp->locallab.selspot).scalegr || scalegr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).guidbl = pe->locallab.spots.at(pp->locallab.selspot).guidbl || guidbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).epsbl = pe->locallab.spots.at(pp->locallab.selspot).epsbl || epsbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blMethod = pe->locallab.spots.at(pp->locallab.selspot).blMethod || blMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).blurMethod = pe->locallab.spots.at(pp->locallab.selspot).blurMethod || blurMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).medMethod = pe->locallab.spots.at(pp->locallab.selspot).medMethod || medMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).activlum = pe->locallab.spots.at(pp->locallab.selspot).activlum || !activlum->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskblcurve || !CCmaskblshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskblcurve || !LLmaskblshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskblcurve || !HHmaskblshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enablMask = pe->locallab.spots.at(pp->locallab.selspot).enablMask || !enablMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskbl = pe->locallab.spots.at(pp->locallab.selspot).blendmaskbl || blendmaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskbl = pe->locallab.spots.at(pp->locallab.selspot).radmaskbl || radmaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromaskbl = pe->locallab.spots.at(pp->locallab.selspot).chromaskbl || chromaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskbl = pe->locallab.spots.at(pp->locallab.selspot).gammaskbl || gammaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskbl = pe->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pe->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shadmaskbl = pe->locallab.spots.at(pp->locallab.selspot).shadmaskbl || shadmaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strumaskbl = pe->locallab.spots.at(pp->locallab.selspot).strumaskbl || strumaskbl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fftwbl = pe->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).toolbl = pe->locallab.spots.at(pp->locallab.selspot).toolbl || !toolbl->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav = pe->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav || !LLmaskblshapewav->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).csthresholdblur = pe->locallab.spots.at(pp->locallab.selspot).csthresholdblur || csThresholdblur->getEditedState(); // Tone Mapping pe->locallab.spots.at(pp->locallab.selspot).exptonemap = pe->locallab.spots.at(pp->locallab.selspot).activlum || !exptonemap->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).stren = pe->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gamma = pe->locallab.spots.at(pp->locallab.selspot).gamma || gamma->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).estop = pe->locallab.spots.at(pp->locallab.selspot).estop || estop->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).scaltm = pe->locallab.spots.at(pp->locallab.selspot).scaltm || scaltm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).rewei = pe->locallab.spots.at(pp->locallab.selspot).rewei || rewei->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).satur = pe->locallab.spots.at(pp->locallab.selspot).satur || satur->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensitm = pe->locallab.spots.at(pp->locallab.selspot).sensitm || sensitm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softradiustm = pe->locallab.spots.at(pp->locallab.selspot).softradiustm || softradiustm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).amount = pe->locallab.spots.at(pp->locallab.selspot).amount || amount->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).equiltm = pe->locallab.spots.at(pp->locallab.selspot).equiltm || !equiltm->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmasktmcurve || !CCmasktmshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve || !LLmasktmshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve || !HHmasktmshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enatmMask = pe->locallab.spots.at(pp->locallab.selspot).enatmMask || !enatmMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).enatmMaskaft = pe->locallab.spots.at(pp->locallab.selspot).enatmMaskaft || !enatmMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blendmasktm = pe->locallab.spots.at(pp->locallab.selspot).blendmasktm || blendmasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmasktm = pe->locallab.spots.at(pp->locallab.selspot).radmasktm || radmasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromasktm = pe->locallab.spots.at(pp->locallab.selspot).chromasktm || chromasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammasktm = pe->locallab.spots.at(pp->locallab.selspot).gammasktm || gammasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomasktm = pe->locallab.spots.at(pp->locallab.selspot).slomasktm || slomasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmasktm = pe->locallab.spots.at(pp->locallab.selspot).lapmasktm || lapmasktm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve || !Lmasktmshape->isUnChanged(); // Retinex pe->locallab.spots.at(pp->locallab.selspot).expreti = pe->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).retinexMethod = pe->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).str = pe->locallab.spots.at(pp->locallab.selspot).str || str->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chrrt = pe->locallab.spots.at(pp->locallab.selspot).chrrt || chrrt->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).neigh = pe->locallab.spots.at(pp->locallab.selspot).neigh || neigh->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).vart = pe->locallab.spots.at(pp->locallab.selspot).vart || vart->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).offs = pe->locallab.spots.at(pp->locallab.selspot).offs || offs->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).dehaz = pe->locallab.spots.at(pp->locallab.selspot).dehaz || dehaz->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).depth = pe->locallab.spots.at(pp->locallab.selspot).depth || depth->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensih = pe->locallab.spots.at(pp->locallab.selspot).sensih || sensih->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).localTgaincurve = pe->locallab.spots.at(pp->locallab.selspot).localTgaincurve || !cTgainshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).localTtranscurve = pe->locallab.spots.at(pp->locallab.selspot).localTtranscurve || !cTtransshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).inversret = pe->locallab.spots.at(pp->locallab.selspot).inversret || !inversret->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).equilret = pe->locallab.spots.at(pp->locallab.selspot).equilret || !equilret->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).loglin = pe->locallab.spots.at(pp->locallab.selspot).loglin || !loglin->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).lumonly = pe->locallab.spots.at(pp->locallab.selspot).lumonly || !lumonly->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).softradiusret = pe->locallab.spots.at(pp->locallab.selspot).softradiusret || softradiusret->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve || !CCmaskretishape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve || !LLmaskretishape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve || !HHmaskretishape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enaretiMask = pe->locallab.spots.at(pp->locallab.selspot).enaretiMask || !enaretiMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap = pe->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap || !enaretiMasktmap->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskreti = pe->locallab.spots.at(pp->locallab.selspot).blendmaskreti || blendmaskreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskreti = pe->locallab.spots.at(pp->locallab.selspot).radmaskreti || radmaskreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromaskreti = pe->locallab.spots.at(pp->locallab.selspot).chromaskreti || chromaskreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskreti = pe->locallab.spots.at(pp->locallab.selspot).gammaskreti || gammaskreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskreti = pe->locallab.spots.at(pp->locallab.selspot).slomaskreti || slomaskreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskreti = pe->locallab.spots.at(pp->locallab.selspot).lapmaskreti || lapmaskreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).scalereti = pe->locallab.spots.at(pp->locallab.selspot).scalereti || scalereti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).darkness = pe->locallab.spots.at(pp->locallab.selspot).darkness || darkness->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lightnessreti = pe->locallab.spots.at(pp->locallab.selspot).lightnessreti || lightnessreti->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).limd = pe->locallab.spots.at(pp->locallab.selspot).limd || limd->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).cliptm = pe->locallab.spots.at(pp->locallab.selspot).cliptm || cliptm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fftwreti = pe->locallab.spots.at(pp->locallab.selspot).fftwreti || !fftwreti->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskreticurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskreticurve || !Lmaskretishape->isUnChanged(); // Sharpening pe->locallab.spots.at(pp->locallab.selspot).expsharp = pe->locallab.spots.at(pp->locallab.selspot).expsharp || !expsharp->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).sharcontrast = pe->locallab.spots.at(pp->locallab.selspot).sharcontrast || sharcontrast->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sharradius = pe->locallab.spots.at(pp->locallab.selspot).sharradius || sharradius->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sharamount = pe->locallab.spots.at(pp->locallab.selspot).sharamount || sharamount->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shardamping = pe->locallab.spots.at(pp->locallab.selspot).shardamping || shardamping->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).shariter = pe->locallab.spots.at(pp->locallab.selspot).shariter || shariter->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sharblur = pe->locallab.spots.at(pp->locallab.selspot).sharblur || sharblur->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensisha = pe->locallab.spots.at(pp->locallab.selspot).sensisha || sensisha->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).inverssha = pe->locallab.spots.at(pp->locallab.selspot).inverssha || !inverssha->get_inconsistent(); // Local Contrast pe->locallab.spots.at(pp->locallab.selspot).expcontrast = pe->locallab.spots.at(pp->locallab.selspot).expcontrast || !expcontrast->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).lcradius = pe->locallab.spots.at(pp->locallab.selspot).lcradius || lcradius->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lcamount = pe->locallab.spots.at(pp->locallab.selspot).lcamount || lcamount->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lcdarkness = pe->locallab.spots.at(pp->locallab.selspot).lcdarkness || lcdarkness->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lclightness = pe->locallab.spots.at(pp->locallab.selspot).lclightness || lclightness->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).levelwav = pe->locallab.spots.at(pp->locallab.selspot).levelwav || levelwav->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).residcont = pe->locallab.spots.at(pp->locallab.selspot).residcont || residcont->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).residblur = pe->locallab.spots.at(pp->locallab.selspot).residblur || residblur->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).levelblur = pe->locallab.spots.at(pp->locallab.selspot).levelblur || levelblur->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).residchro = pe->locallab.spots.at(pp->locallab.selspot).residchro || residchro->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sigma = pe->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).offset = pe->locallab.spots.at(pp->locallab.selspot).offset || offset->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromalev = pe->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromablu = pe->locallab.spots.at(pp->locallab.selspot).chromablu || chromablu->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatdet = pe->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatanch = pe->locallab.spots.at(pp->locallab.selspot).fatanch || fatanch->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fatres = pe->locallab.spots.at(pp->locallab.selspot).fatres || fatres->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).clarilres = pe->locallab.spots.at(pp->locallab.selspot).clarilres || clarilres->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).claricres = pe->locallab.spots.at(pp->locallab.selspot).claricres || claricres->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).clarisoft = pe->locallab.spots.at(pp->locallab.selspot).clarisoft || clarisoft->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensilc = pe->locallab.spots.at(pp->locallab.selspot).sensilc || sensilc->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).fftwlc = pe->locallab.spots.at(pp->locallab.selspot).fftwlc || !fftwlc->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blurlc = pe->locallab.spots.at(pp->locallab.selspot).blurlc || !blurlc->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).origlc = pe->locallab.spots.at(pp->locallab.selspot).origlc || !origlc->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).localcontMethod = pe->locallab.spots.at(pp->locallab.selspot).localcontMethod || localcontMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).locwavcurve = pe->locallab.spots.at(pp->locallab.selspot).locwavcurve || !wavshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).loclevwavcurve = pe->locallab.spots.at(pp->locallab.selspot).loclevwavcurve || !wavshapelev->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).csthreshold = pe->locallab.spots.at(pp->locallab.selspot).csthreshold || csThreshold->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).locconwavcurve = pe->locallab.spots.at(pp->locallab.selspot).locconwavcurve || !wavshapecon->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).loccompwavcurve = pe->locallab.spots.at(pp->locallab.selspot).loccompwavcurve || !wavshapecomp->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).CCmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).CCmasklccurve || !CCmasklcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).LLmasklccurve || !LLmasklcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).HHmasklccurve || !HHmasklcshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).enalcMask = pe->locallab.spots.at(pp->locallab.selspot).enalcMask || !enalcMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blendmasklc = pe->locallab.spots.at(pp->locallab.selspot).blendmasklc || blendmasklc->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmasklc = pe->locallab.spots.at(pp->locallab.selspot).radmasklc || radmasklc->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromasklc = pe->locallab.spots.at(pp->locallab.selspot).chromasklc || chromasklc->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmasklccurve = pe->locallab.spots.at(pp->locallab.selspot).Lmasklccurve || !Lmasklcshape->isUnChanged(); // Contrast by detail levels pe->locallab.spots.at(pp->locallab.selspot).expcbdl = pe->locallab.spots.at(pp->locallab.selspot).expcbdl || !expcbdl->get_inconsistent(); for (int i = 0; i < 6; i++) { pe->locallab.spots.at(pp->locallab.selspot).mult[i] = pe->locallab.spots.at(pp->locallab.selspot).mult[i] || multiplier[i]->getEditedState(); } pe->locallab.spots.at(pp->locallab.selspot).chromacbdl = pe->locallab.spots.at(pp->locallab.selspot).chromacbdl || chromacbdl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).threshold = pe->locallab.spots.at(pp->locallab.selspot).threshold || threshold->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensicb = pe->locallab.spots.at(pp->locallab.selspot).sensicb || sensicb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).clarityml = pe->locallab.spots.at(pp->locallab.selspot).clarityml || clarityml->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).contresid = pe->locallab.spots.at(pp->locallab.selspot).contresid || contresid->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).blurcbdl = pe->locallab.spots.at(pp->locallab.selspot).blurcbdl || blurcbdl->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).softradiuscb = pe->locallab.spots.at(pp->locallab.selspot).softradiuscb || softradiuscb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).enacbMask = pe->locallab.spots.at(pp->locallab.selspot).enacbMask || !enacbMask->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).CCmaskcbcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskcbcurve || !CCmaskcbshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskcbcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskcbcurve || !LLmaskcbshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskcbcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskcbcurve || !HHmaskcbshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).blendmaskcb = pe->locallab.spots.at(pp->locallab.selspot).blendmaskcb || blendmaskcb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).radmaskcb = pe->locallab.spots.at(pp->locallab.selspot).radmaskcb || radmaskcb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chromaskcb = pe->locallab.spots.at(pp->locallab.selspot).chromaskcb || chromaskcb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).gammaskcb = pe->locallab.spots.at(pp->locallab.selspot).gammaskcb || gammaskcb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).slomaskcb = pe->locallab.spots.at(pp->locallab.selspot).slomaskcb || slomaskcb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).lapmaskcb = pe->locallab.spots.at(pp->locallab.selspot).lapmaskcb || lapmaskcb->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).Lmaskcbcurve = pe->locallab.spots.at(pp->locallab.selspot).Lmaskcbcurve || !Lmaskcbshape->isUnChanged(); // Denoise pe->locallab.spots.at(pp->locallab.selspot).expdenoi = pe->locallab.spots.at(pp->locallab.selspot).expdenoi || !expdenoi->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).noiselumf = pe->locallab.spots.at(pp->locallab.selspot).noiselumf || noiselumf->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noiselumf0 = pe->locallab.spots.at(pp->locallab.selspot).noiselumf0 || noiselumf0->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noiselumf2 = pe->locallab.spots.at(pp->locallab.selspot).noiselumf2 || noiselumf2->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noiselumc = pe->locallab.spots.at(pp->locallab.selspot).noiselumc || noiselumc->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noiselumdetail = pe->locallab.spots.at(pp->locallab.selspot).noiselumdetail || noiselumdetail->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noiselequal = pe->locallab.spots.at(pp->locallab.selspot).noiselequal || noiselequal->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noisechrof = pe->locallab.spots.at(pp->locallab.selspot).noisechrof || noisechrof->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noisechroc = pe->locallab.spots.at(pp->locallab.selspot).noisechroc || noisechroc->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).noisechrodetail = pe->locallab.spots.at(pp->locallab.selspot).noisechrodetail || noisechrodetail->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).adjblur = pe->locallab.spots.at(pp->locallab.selspot).adjblur || adjblur->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).bilateral = pe->locallab.spots.at(pp->locallab.selspot).bilateral || bilateral->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensiden = pe->locallab.spots.at(pp->locallab.selspot).sensiden || sensiden->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).detailthr = pe->locallab.spots.at(pp->locallab.selspot).detailthr || detailthr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).locwavcurveden = pe->locallab.spots.at(pp->locallab.selspot).locwavcurveden || !wavshapeden->isUnChanged(); //log encoding pe->locallab.spots.at(pp->locallab.selspot).explog = pe->locallab.spots.at(pp->locallab.selspot).explog || !explog->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).autocompute = pe->locallab.spots.at(pp->locallab.selspot).autocompute || !autocompute->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).sourceGray = pe->locallab.spots.at(pp->locallab.selspot).sourceGray || sourceGray->getEditedState(); // pe->locallab.spots.at(pp->locallab.selspot).autogray = !sourceGray->getAutoInconsistent(); pe->locallab.spots.at(pp->locallab.selspot).Autogray = pe->locallab.spots.at(pp->locallab.selspot).Autogray || !Autogray->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).fullimage = pe->locallab.spots.at(pp->locallab.selspot).fullimage || !fullimage->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).blackEv = pe->locallab.spots.at(pp->locallab.selspot).blackEv || blackEv->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).whiteEv = pe->locallab.spots.at(pp->locallab.selspot).whiteEv || whiteEv->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).targetGray = pe->locallab.spots.at(pp->locallab.selspot).targetGray || targetGray->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).detail = pe->locallab.spots.at(pp->locallab.selspot).detail || detail->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensilog = pe->locallab.spots.at(pp->locallab.selspot).sensilog || sensilog->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).baselog = pe->locallab.spots.at(pp->locallab.selspot).baselog || baselog->getEditedState(); } } // ParamsEdited update if (pedited) { pedited->locallab.enabled = pedited->locallab.enabled || !get_inconsistent(); if (pp->locallab.selspot < (int)pedited->locallab.spots.size()) { // Control spot settings pedited->locallab.spots.at(pp->locallab.selspot).name = pedited->locallab.spots.at(pp->locallab.selspot).name || se->name; pedited->locallab.spots.at(pp->locallab.selspot).isvisible = pedited->locallab.spots.at(pp->locallab.selspot).isvisible || se->isvisible; pedited->locallab.spots.at(pp->locallab.selspot).shape = pedited->locallab.spots.at(pp->locallab.selspot).shape || se->shape; pedited->locallab.spots.at(pp->locallab.selspot).spotMethod = pedited->locallab.spots.at(pp->locallab.selspot).spotMethod || se->spotMethod; // pedited->locallab.spots.at(pp->locallab.selspot).mergeMethod = pedited->locallab.spots.at(pp->locallab.selspot).mergeMethod || se->mergeMethod; pedited->locallab.spots.at(pp->locallab.selspot).sensiexclu = pedited->locallab.spots.at(pp->locallab.selspot).sensiexclu || se->sensiexclu; pedited->locallab.spots.at(pp->locallab.selspot).structexclu = pedited->locallab.spots.at(pp->locallab.selspot).structexclu || se->structexclu; pedited->locallab.spots.at(pp->locallab.selspot).struc = pedited->locallab.spots.at(pp->locallab.selspot).struc || se->struc; pedited->locallab.spots.at(pp->locallab.selspot).shapeMethod = pedited->locallab.spots.at(pp->locallab.selspot).shapeMethod || se->shapeMethod; pedited->locallab.spots.at(pp->locallab.selspot).locX = pedited->locallab.spots.at(pp->locallab.selspot).locX || se->locX; pedited->locallab.spots.at(pp->locallab.selspot).locXL = pedited->locallab.spots.at(pp->locallab.selspot).locXL || se->locXL; pedited->locallab.spots.at(pp->locallab.selspot).locY = pedited->locallab.spots.at(pp->locallab.selspot).locY || se->locY; pedited->locallab.spots.at(pp->locallab.selspot).locYT = pedited->locallab.spots.at(pp->locallab.selspot).locYT || se->locYT; pedited->locallab.spots.at(pp->locallab.selspot).centerX = pedited->locallab.spots.at(pp->locallab.selspot).centerX || se->centerX; pedited->locallab.spots.at(pp->locallab.selspot).centerY = pedited->locallab.spots.at(pp->locallab.selspot).centerY || se->centerY; pedited->locallab.spots.at(pp->locallab.selspot).circrad = pedited->locallab.spots.at(pp->locallab.selspot).circrad || se->circrad; pedited->locallab.spots.at(pp->locallab.selspot).qualityMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualityMethod || se->qualityMethod; pedited->locallab.spots.at(pp->locallab.selspot).complexMethod = pedited->locallab.spots.at(pp->locallab.selspot).complexMethod || se->complexMethod; pedited->locallab.spots.at(pp->locallab.selspot).transit = pedited->locallab.spots.at(pp->locallab.selspot).transit || se->transit; pedited->locallab.spots.at(pp->locallab.selspot).feather = pedited->locallab.spots.at(pp->locallab.selspot).feather || se->feather; pedited->locallab.spots.at(pp->locallab.selspot).thresh = pedited->locallab.spots.at(pp->locallab.selspot).thresh || se->thresh; pedited->locallab.spots.at(pp->locallab.selspot).iter = pedited->locallab.spots.at(pp->locallab.selspot).iter || se->iter; pedited->locallab.spots.at(pp->locallab.selspot).balan = pedited->locallab.spots.at(pp->locallab.selspot).balan || se->balan; pedited->locallab.spots.at(pp->locallab.selspot).balanh = pedited->locallab.spots.at(pp->locallab.selspot).balanh || se->balanh; pedited->locallab.spots.at(pp->locallab.selspot).transitweak = pedited->locallab.spots.at(pp->locallab.selspot).transitweak || se->transitweak; pedited->locallab.spots.at(pp->locallab.selspot).transitgrad = pedited->locallab.spots.at(pp->locallab.selspot).transitgrad || se->transitgrad; pedited->locallab.spots.at(pp->locallab.selspot).scopemask = pedited->locallab.spots.at(pp->locallab.selspot).scopemask || se->scopemask; pedited->locallab.spots.at(pp->locallab.selspot).lumask = pedited->locallab.spots.at(pp->locallab.selspot).lumask || se->lumask; pedited->locallab.spots.at(pp->locallab.selspot).avoid = pedited->locallab.spots.at(pp->locallab.selspot).avoid || se->avoid; pedited->locallab.spots.at(pp->locallab.selspot).recurs = pedited->locallab.spots.at(pp->locallab.selspot).recurs || se->recurs; pedited->locallab.spots.at(pp->locallab.selspot).laplac = pedited->locallab.spots.at(pp->locallab.selspot).laplac || se->laplac; pedited->locallab.spots.at(pp->locallab.selspot).deltae = pedited->locallab.spots.at(pp->locallab.selspot).deltae || se->deltae; pedited->locallab.spots.at(pp->locallab.selspot).shortc = pedited->locallab.spots.at(pp->locallab.selspot).shortc || se->shortc; pedited->locallab.spots.at(pp->locallab.selspot).savrest = pedited->locallab.spots.at(pp->locallab.selspot).savrest || se->savrest; // Color & Light pedited->locallab.spots.at(pp->locallab.selspot).expcolor = pedited->locallab.spots.at(pp->locallab.selspot).expcolor || !expcolor->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).curvactiv = pedited->locallab.spots.at(pp->locallab.selspot).curvactiv || !curvactiv->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).lightness = pedited->locallab.spots.at(pp->locallab.selspot).lightness || lightness->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).contrast = pedited->locallab.spots.at(pp->locallab.selspot).contrast || contrast->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chroma = pedited->locallab.spots.at(pp->locallab.selspot).chroma || chroma->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strengthgrid = pedited->locallab.spots.at(pp->locallab.selspot).strengthgrid || strengthgrid->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensi = pedited->locallab.spots.at(pp->locallab.selspot).sensi || sensi->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).structcol = pedited->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strcol = pedited->locallab.spots.at(pp->locallab.selspot).strcol || strcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strcolab = pedited->locallab.spots.at(pp->locallab.selspot).strcolab || strcolab->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strcolh = pedited->locallab.spots.at(pp->locallab.selspot).strcolh || strcolh->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).angcol = pedited->locallab.spots.at(pp->locallab.selspot).angcol || angcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).gridMethod = pedited->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).merMethod = pedited->locallab.spots.at(pp->locallab.selspot).merMethod || merMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).toneMethod = pedited->locallab.spots.at(pp->locallab.selspot).toneMethod || toneMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).mergecolMethod = pedited->locallab.spots.at(pp->locallab.selspot).mergecolMethod || mergecolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).llcurve = pedited->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).lccurve = pedited->locallab.spots.at(pp->locallab.selspot).lccurve || !lcshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).rgbcurve = pedited->locallab.spots.at(pp->locallab.selspot).rgbcurve || !rgbshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).cccurve = pedited->locallab.spots.at(pp->locallab.selspot).cccurve || !ccshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).clcurve = pedited->locallab.spots.at(pp->locallab.selspot).clcurve || !clshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).lccurve = pedited->locallab.spots.at(pp->locallab.selspot).lccurve || !lcshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LHcurve = pedited->locallab.spots.at(pp->locallab.selspot).LHcurve || !LHshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHcurve || !HHshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).invers = pedited->locallab.spots.at(pp->locallab.selspot).invers || !invers->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).special = pedited->locallab.spots.at(pp->locallab.selspot).special || !special->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).toolcol = pedited->locallab.spots.at(pp->locallab.selspot).toolcol || !toolcol->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enaColorMask = pedited->locallab.spots.at(pp->locallab.selspot).enaColorMask || !enaColorMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).fftColorMask = pedited->locallab.spots.at(pp->locallab.selspot).fftColorMask || !fftColorMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskcurve || !CCmaskshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcurve || !LLmaskshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskcurve || !HHmaskshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHhmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHhmaskcurve || !HHhmaskshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).blurcolde = pedited->locallab.spots.at(pp->locallab.selspot).blurcolde || blurcolde->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blurcol = pedited->locallab.spots.at(pp->locallab.selspot).blurcol || blurcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).contcol = pedited->locallab.spots.at(pp->locallab.selspot).contcol || contcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcol || blendmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).radmaskcol || radmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskcol = pedited->locallab.spots.at(pp->locallab.selspot).chromaskcol || chromaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskcol = pedited->locallab.spots.at(pp->locallab.selspot).gammaskcol || gammaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskcol = pedited->locallab.spots.at(pp->locallab.selspot).slomaskcol || slomaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shadmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).shadmaskcol || shadmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strumaskcol = pedited->locallab.spots.at(pp->locallab.selspot).strumaskcol || strumaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskcol || lapmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softradiuscol = pedited->locallab.spots.at(pp->locallab.selspot).softradiuscol || softradiuscol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).opacol = pedited->locallab.spots.at(pp->locallab.selspot).opacol || opacol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).mercol = pedited->locallab.spots.at(pp->locallab.selspot).mercol || mercol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).merlucol = pedited->locallab.spots.at(pp->locallab.selspot).merlucol || merlucol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).conthrcol = pedited->locallab.spots.at(pp->locallab.selspot).conthrcol || conthrcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskcurve || !Lmaskshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcolcurvewav || !LLmaskcolshapewav->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).csthresholdcol = pedited->locallab.spots.at(pp->locallab.selspot).csthresholdcol || csThresholdcol->getEditedState(); // Exposure pedited->locallab.spots.at(pp->locallab.selspot).expexpose = pedited->locallab.spots.at(pp->locallab.selspot).expexpose || !expexpose->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).expcomp = pedited->locallab.spots.at(pp->locallab.selspot).expcomp || expcomp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).hlcompr = pedited->locallab.spots.at(pp->locallab.selspot).hlcompr || hlcompr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).hlcomprthresh = pedited->locallab.spots.at(pp->locallab.selspot).hlcomprthresh || hlcomprthresh->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).black = pedited->locallab.spots.at(pp->locallab.selspot).black || black->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shadex = pedited->locallab.spots.at(pp->locallab.selspot).shadex || shadex->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shcompr = pedited->locallab.spots.at(pp->locallab.selspot).shcompr || shcompr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).expchroma = pedited->locallab.spots.at(pp->locallab.selspot).expchroma || expchroma->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).warm = pedited->locallab.spots.at(pp->locallab.selspot).warm || warm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensiex = pedited->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).structexp = pedited->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blurexpde = pedited->locallab.spots.at(pp->locallab.selspot).blurexpde || blurexpde->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strexp = pedited->locallab.spots.at(pp->locallab.selspot).strexp || strexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).angexp = pedited->locallab.spots.at(pp->locallab.selspot).angexp || angexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).excurve = pedited->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).inversex = pedited->locallab.spots.at(pp->locallab.selspot).inversex || !inversex->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enaExpMask = pedited->locallab.spots.at(pp->locallab.selspot).enaExpMask || !enaExpMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft = pedited->locallab.spots.at(pp->locallab.selspot).enaExpMaskaft || !enaExpMaskaft->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskexp || blendmaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).radmaskexp || radmaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskexp = pedited->locallab.spots.at(pp->locallab.selspot).chromaskexp || chromaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskexp = pedited->locallab.spots.at(pp->locallab.selspot).gammaskexp || gammaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskexp = pedited->locallab.spots.at(pp->locallab.selspot).slomaskexp || slomaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskexp || lapmaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).strmaskexp || strmaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).angmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).angmaskexp || angmaskexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softradiusexp = pedited->locallab.spots.at(pp->locallab.selspot).softradiusexp || softradiusexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskexpcurve || !Lmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).expMethod = pedited->locallab.spots.at(pp->locallab.selspot).expMethod || expMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).exnoiseMethod = pedited->locallab.spots.at(pp->locallab.selspot).exnoiseMethod || exnoiseMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).laplacexp = pedited->locallab.spots.at(pp->locallab.selspot).laplacexp || laplacexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).balanexp = pedited->locallab.spots.at(pp->locallab.selspot).balanexp || balanexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).linear = pedited->locallab.spots.at(pp->locallab.selspot).linear || linear->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gamm = pedited->locallab.spots.at(pp->locallab.selspot).gamm || gamm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatamount = pedited->locallab.spots.at(pp->locallab.selspot).fatamount || fatamount->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatdetail = pedited->locallab.spots.at(pp->locallab.selspot).fatdetail || fatdetail->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatanchor = pedited->locallab.spots.at(pp->locallab.selspot).fatanchor || fatanchor->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatlevel = pedited->locallab.spots.at(pp->locallab.selspot).fatlevel || fatlevel->getEditedState(); // Shadow highlight pedited->locallab.spots.at(pp->locallab.selspot).expshadhigh = pedited->locallab.spots.at(pp->locallab.selspot).expshadhigh || !expshadhigh->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).highlights = pedited->locallab.spots.at(pp->locallab.selspot).highlights || highlights->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).h_tonalwidth = pedited->locallab.spots.at(pp->locallab.selspot).h_tonalwidth || h_tonalwidth->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shadows = pedited->locallab.spots.at(pp->locallab.selspot).shadows || shadows->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).s_tonalwidth = pedited->locallab.spots.at(pp->locallab.selspot).s_tonalwidth || s_tonalwidth->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sh_radius = pedited->locallab.spots.at(pp->locallab.selspot).sh_radius || sh_radius->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensihs = pedited->locallab.spots.at(pp->locallab.selspot).sensihs || sensihs->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).enaSHMask = pedited->locallab.spots.at(pp->locallab.selspot).enaSHMask || !enaSHMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskSHcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskSHcurve || !CCmaskSHshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskSHcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskSHcurve || !LLmaskSHshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskSHcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskSHcurve || !HHmaskSHshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskSH = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskSH || blendmaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskSH = pedited->locallab.spots.at(pp->locallab.selspot).radmaskSH || radmaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blurSHde = pedited->locallab.spots.at(pp->locallab.selspot).blurSHde || blurSHde->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strSH = pedited->locallab.spots.at(pp->locallab.selspot).strSH || strSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).angSH = pedited->locallab.spots.at(pp->locallab.selspot).angSH || angSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).inverssh = pedited->locallab.spots.at(pp->locallab.selspot).inverssh || !inverssh->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskSH = pedited->locallab.spots.at(pp->locallab.selspot).chromaskSH || chromaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH = pedited->locallab.spots.at(pp->locallab.selspot).gammaskSH || gammaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH = pedited->locallab.spots.at(pp->locallab.selspot).slomaskSH || slomaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskSH || lapmaskSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).detailSH = pedited->locallab.spots.at(pp->locallab.selspot).detailSH || detailSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve = pedited->locallab.spots.at(pp->locallab.selspot).LmaskSHcurve || !LmaskSHshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).shMethod = pedited->locallab.spots.at(pp->locallab.selspot).shMethod || shMethod->get_active_text() != M("GENERAL_UNCHANGED"); for (int i = 0; i < 5; i++) { pedited->locallab.spots.at(pp->locallab.selspot).multsh[i] = pedited->locallab.spots.at(pp->locallab.selspot).multsh[i] || multipliersh[i]->getEditedState(); } pedited->locallab.spots.at(pp->locallab.selspot).fatamountSH = pedited->locallab.spots.at(pp->locallab.selspot).fatamountSH || fatamountSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatanchorSH = pedited->locallab.spots.at(pp->locallab.selspot).fatanchorSH || fatanchorSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gamSH = pedited->locallab.spots.at(pp->locallab.selspot).gamSH || gamSH->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sloSH = pedited->locallab.spots.at(pp->locallab.selspot).sloSH || sloSH->getEditedState(); // Vibrance pedited->locallab.spots.at(pp->locallab.selspot).expvibrance = pedited->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).saturated = pedited->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).pastels = pedited->locallab.spots.at(pp->locallab.selspot).pastels || pastels->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).psthreshold = pedited->locallab.spots.at(pp->locallab.selspot).psthreshold || psThreshold->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).protectskins = pedited->locallab.spots.at(pp->locallab.selspot).protectskins || !protectSkins->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).avoidcolorshift = pedited->locallab.spots.at(pp->locallab.selspot).avoidcolorshift || !avoidColorShift->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).pastsattog = pedited->locallab.spots.at(pp->locallab.selspot).pastsattog || !pastSatTog->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).sensiv = pedited->locallab.spots.at(pp->locallab.selspot).sensiv || sensiv->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).skintonescurve = pedited->locallab.spots.at(pp->locallab.selspot).skintonescurve || !skinTonesCurve->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskvibcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskvibcurve || !CCmaskvibshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskvibcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskvibcurve || !LLmaskvibshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskvibcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskvibcurve || !HHmaskvibshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enavibMask = pedited->locallab.spots.at(pp->locallab.selspot).enavibMask || !enavibMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskvib = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskvib || blendmaskvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskvib = pedited->locallab.spots.at(pp->locallab.selspot).radmaskvib || radmaskvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskvib = pedited->locallab.spots.at(pp->locallab.selspot).chromaskvib || chromaskvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskvib = pedited->locallab.spots.at(pp->locallab.selspot).gammaskvib || gammaskvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskvib = pedited->locallab.spots.at(pp->locallab.selspot).slomaskvib || slomaskvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskvib = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskvib || lapmaskvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskvibcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskvibcurve || !Lmaskvibshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).strvib = pedited->locallab.spots.at(pp->locallab.selspot).strvib || strvib->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strvibab = pedited->locallab.spots.at(pp->locallab.selspot).strvibab || strvibab->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strvibh = pedited->locallab.spots.at(pp->locallab.selspot).strvibh || strvibh->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).angvib = pedited->locallab.spots.at(pp->locallab.selspot).angvib || angvib->getEditedState(); // Soft Light pedited->locallab.spots.at(pp->locallab.selspot).expsoft = pedited->locallab.spots.at(pp->locallab.selspot).expsoft || !expsoft->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).streng = pedited->locallab.spots.at(pp->locallab.selspot).streng || streng->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensisf = pedited->locallab.spots.at(pp->locallab.selspot).sensisf || sensisf->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).laplace = pedited->locallab.spots.at(pp->locallab.selspot).laplace || laplace->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softMethod = pedited->locallab.spots.at(pp->locallab.selspot).softMethod || softMethod->get_active_text() != M("GENERAL_UNCHANGED"); // Blur & Noise pedited->locallab.spots.at(pp->locallab.selspot).expblur = pedited->locallab.spots.at(pp->locallab.selspot).expblur || !expblur->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).radius = pedited->locallab.spots.at(pp->locallab.selspot).radius || radius->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strength = pedited->locallab.spots.at(pp->locallab.selspot).strength || strength->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensibn = pedited->locallab.spots.at(pp->locallab.selspot).sensibn || sensibn->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).itera = pedited->locallab.spots.at(pp->locallab.selspot).itera || itera->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).isogr = pedited->locallab.spots.at(pp->locallab.selspot).isogr || isogr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strengr = pedited->locallab.spots.at(pp->locallab.selspot).strengr || strengr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).scalegr = pedited->locallab.spots.at(pp->locallab.selspot).scalegr || scalegr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).guidbl = pedited->locallab.spots.at(pp->locallab.selspot).guidbl || guidbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).epsbl = pedited->locallab.spots.at(pp->locallab.selspot).epsbl || epsbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blMethod = pedited->locallab.spots.at(pp->locallab.selspot).blMethod || blMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).blurMethod = pedited->locallab.spots.at(pp->locallab.selspot).blurMethod || blurMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).medMethod = pedited->locallab.spots.at(pp->locallab.selspot).medMethod || medMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).activlum = pedited->locallab.spots.at(pp->locallab.selspot).activlum || !activlum->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskblcurve || !CCmaskblshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskblcurve || !LLmaskblshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskblcurve || !HHmaskblshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enablMask = pedited->locallab.spots.at(pp->locallab.selspot).enablMask || !enablMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskbl || blendmaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).radmaskbl || radmaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskbl = pedited->locallab.spots.at(pp->locallab.selspot).chromaskbl || chromaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskbl = pedited->locallab.spots.at(pp->locallab.selspot).gammaskbl || gammaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl = pedited->locallab.spots.at(pp->locallab.selspot).slomaskbl || slomaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskbl || lapmaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shadmaskbl = pedited->locallab.spots.at(pp->locallab.selspot).shadmaskbl || shadmaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strumaskbl = pedited->locallab.spots.at(pp->locallab.selspot).strumaskbl || strumaskbl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fftwbl = pedited->locallab.spots.at(pp->locallab.selspot).fftwbl || !fftwbl->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).toolbl = pedited->locallab.spots.at(pp->locallab.selspot).toolbl || !toolbl->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskblcurve || !Lmaskblshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskblcurvewav || !LLmaskblshapewav->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).csthresholdblur = pedited->locallab.spots.at(pp->locallab.selspot).csthresholdblur || csThresholdblur->getEditedState(); // Tone Mapping pedited->locallab.spots.at(pp->locallab.selspot).exptonemap = pedited->locallab.spots.at(pp->locallab.selspot).exptonemap || !exptonemap->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).stren = pedited->locallab.spots.at(pp->locallab.selspot).stren || stren->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gamma = pedited->locallab.spots.at(pp->locallab.selspot).gamma || gamma->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).estop = pedited->locallab.spots.at(pp->locallab.selspot).estop || estop->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).scaltm = pedited->locallab.spots.at(pp->locallab.selspot).scaltm || scaltm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).rewei = pedited->locallab.spots.at(pp->locallab.selspot).rewei || rewei->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).satur = pedited->locallab.spots.at(pp->locallab.selspot).satur || satur->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensitm = pedited->locallab.spots.at(pp->locallab.selspot).sensitm || sensitm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softradiustm = pedited->locallab.spots.at(pp->locallab.selspot).softradiustm || softradiustm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).amount = pedited->locallab.spots.at(pp->locallab.selspot).amount || amount->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask = pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask || !enaretiMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap = pedited->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap || !enaretiMasktmap->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).equiltm = pedited->locallab.spots.at(pp->locallab.selspot).equiltm || !equiltm->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmasktmcurve || !CCmasktmshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmasktmcurve || !LLmasktmshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmasktmcurve || !HHmasktmshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enatmMask = pedited->locallab.spots.at(pp->locallab.selspot).enatmMask || !enatmMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enatmMaskaft = pedited->locallab.spots.at(pp->locallab.selspot).enatmMaskaft || !enatmMaskaft->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blendmasktm = pedited->locallab.spots.at(pp->locallab.selspot).blendmasktm || blendmasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmasktm = pedited->locallab.spots.at(pp->locallab.selspot).radmasktm || radmasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromasktm = pedited->locallab.spots.at(pp->locallab.selspot).chromasktm || chromasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammasktm = pedited->locallab.spots.at(pp->locallab.selspot).gammasktm || gammasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomasktm = pedited->locallab.spots.at(pp->locallab.selspot).slomasktm || slomasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmasktm = pedited->locallab.spots.at(pp->locallab.selspot).lapmasktm || lapmasktm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmasktmcurve || !Lmasktmshape->isUnChanged(); // Retinex pedited->locallab.spots.at(pp->locallab.selspot).expreti = pedited->locallab.spots.at(pp->locallab.selspot).expreti || !expreti->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod = pedited->locallab.spots.at(pp->locallab.selspot).retinexMethod || retinexMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).str = pedited->locallab.spots.at(pp->locallab.selspot).str || str->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chrrt = pedited->locallab.spots.at(pp->locallab.selspot).chrrt || chrrt->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).neigh = pedited->locallab.spots.at(pp->locallab.selspot).neigh || neigh->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).vart = pedited->locallab.spots.at(pp->locallab.selspot).vart || vart->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).offs = pedited->locallab.spots.at(pp->locallab.selspot).offs || offs->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).dehaz = pedited->locallab.spots.at(pp->locallab.selspot).dehaz || dehaz->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).depth = pedited->locallab.spots.at(pp->locallab.selspot).depth || depth->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensih = pedited->locallab.spots.at(pp->locallab.selspot).sensih || sensih->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).localTgaincurve = pedited->locallab.spots.at(pp->locallab.selspot).localTgaincurve || !cTgainshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).localTtranscurve = pedited->locallab.spots.at(pp->locallab.selspot).localTtranscurve || !cTtransshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).inversret = pedited->locallab.spots.at(pp->locallab.selspot).inversret || !inversret->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).equilret = pedited->locallab.spots.at(pp->locallab.selspot).equilret || !equilret->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).loglin = pedited->locallab.spots.at(pp->locallab.selspot).loglin || !loglin->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).lumonly = pedited->locallab.spots.at(pp->locallab.selspot).lumonly || !lumonly->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).softradiusret = pedited->locallab.spots.at(pp->locallab.selspot).softradiusret || softradiusret->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskreticurve || !CCmaskretishape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskreticurve || !LLmaskretishape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskreticurve || !HHmaskretishape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask = pedited->locallab.spots.at(pp->locallab.selspot).enaretiMask || !enaretiMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap = pedited->locallab.spots.at(pp->locallab.selspot).enaretiMasktmap || !enaretiMasktmap->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskreti = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskreti || blendmaskreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskreti = pedited->locallab.spots.at(pp->locallab.selspot).radmaskreti || radmaskreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskreti = pedited->locallab.spots.at(pp->locallab.selspot).chromaskreti || chromaskreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskreti = pedited->locallab.spots.at(pp->locallab.selspot).gammaskreti || gammaskreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskreti = pedited->locallab.spots.at(pp->locallab.selspot).slomaskreti || slomaskreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskreti = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskreti || lapmaskreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).scalereti = pedited->locallab.spots.at(pp->locallab.selspot).scalereti || scalereti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).darkness = pedited->locallab.spots.at(pp->locallab.selspot).darkness || darkness->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lightnessreti = pedited->locallab.spots.at(pp->locallab.selspot).lightnessreti || lightnessreti->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).limd = pedited->locallab.spots.at(pp->locallab.selspot).limd || limd->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).cliptm = pedited->locallab.spots.at(pp->locallab.selspot).cliptm || cliptm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fftwreti = pedited->locallab.spots.at(pp->locallab.selspot).fftwreti || !fftwreti->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskreticurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskreticurve || !Lmaskretishape->isUnChanged(); // Sharpening pedited->locallab.spots.at(pp->locallab.selspot).expsharp = pedited->locallab.spots.at(pp->locallab.selspot).expsharp || !expsharp->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).sharcontrast = pedited->locallab.spots.at(pp->locallab.selspot).sharcontrast || sharcontrast->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sharradius = pedited->locallab.spots.at(pp->locallab.selspot).sharradius || sharradius->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sharamount = pedited->locallab.spots.at(pp->locallab.selspot).sharamount || sharamount->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shardamping = pedited->locallab.spots.at(pp->locallab.selspot).shardamping || shardamping->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).shariter = pedited->locallab.spots.at(pp->locallab.selspot).shariter || shariter->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sharblur = pedited->locallab.spots.at(pp->locallab.selspot).sharblur || sharblur->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensisha = pedited->locallab.spots.at(pp->locallab.selspot).sensisha || sensisha->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).inverssha = pedited->locallab.spots.at(pp->locallab.selspot).inverssha || !inverssha->get_inconsistent(); // Local Contrast pedited->locallab.spots.at(pp->locallab.selspot).expcontrast = pedited->locallab.spots.at(pp->locallab.selspot).expcontrast || !expcontrast->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).lcradius = pedited->locallab.spots.at(pp->locallab.selspot).lcradius || lcradius->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lcamount = pedited->locallab.spots.at(pp->locallab.selspot).lcamount || lcamount->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lcdarkness = pedited->locallab.spots.at(pp->locallab.selspot).lcdarkness || lcdarkness->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lclightness = pedited->locallab.spots.at(pp->locallab.selspot).lclightness || lclightness->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).levelwav = pedited->locallab.spots.at(pp->locallab.selspot).levelwav || levelwav->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).residcont = pedited->locallab.spots.at(pp->locallab.selspot).residcont || residcont->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).residblur = pedited->locallab.spots.at(pp->locallab.selspot).residblur || residblur->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).levelblur = pedited->locallab.spots.at(pp->locallab.selspot).levelblur || levelblur->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).residchro = pedited->locallab.spots.at(pp->locallab.selspot).residchro || residchro->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sigma = pedited->locallab.spots.at(pp->locallab.selspot).sigma || sigma->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).offset = pedited->locallab.spots.at(pp->locallab.selspot).offset || offset->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromalev = pedited->locallab.spots.at(pp->locallab.selspot).chromalev || chromalev->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromablu = pedited->locallab.spots.at(pp->locallab.selspot).chromablu || chromablu->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatdet = pedited->locallab.spots.at(pp->locallab.selspot).fatdet || fatdet->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatanch = pedited->locallab.spots.at(pp->locallab.selspot).fatanch || fatanch->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fatres = pedited->locallab.spots.at(pp->locallab.selspot).fatres || fatres->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).clarilres = pedited->locallab.spots.at(pp->locallab.selspot).clarilres || clarilres->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).claricres = pedited->locallab.spots.at(pp->locallab.selspot).claricres || claricres->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).clarisoft = pedited->locallab.spots.at(pp->locallab.selspot).clarisoft || clarisoft->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensilc = pedited->locallab.spots.at(pp->locallab.selspot).sensilc || sensilc->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).fftwlc = pedited->locallab.spots.at(pp->locallab.selspot).fftwlc || !fftwlc->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blurlc = pedited->locallab.spots.at(pp->locallab.selspot).blurlc || !blurlc->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).origlc = pedited->locallab.spots.at(pp->locallab.selspot).origlc || !origlc->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).locwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).locwavcurve || !wavshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).loclevwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).loclevwavcurve || !wavshapelev->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).csthreshold = pedited->locallab.spots.at(pp->locallab.selspot).csthreshold || csThreshold->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).locconwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).locconwavcurve || !wavshapecon->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).loccompwavcurve = pedited->locallab.spots.at(pp->locallab.selspot).loccompwavcurve || !wavshapecomp->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).CCmasklccurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmasklccurve || !CCmasklcshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmasklccurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmasklccurve || !LLmasklcshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmasklccurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmasklccurve || !HHmasklcshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).enalcMask = pedited->locallab.spots.at(pp->locallab.selspot).enalcMask || !enalcMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blendmasklc = pedited->locallab.spots.at(pp->locallab.selspot).blendmasklc || blendmasklc->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmasklc = pedited->locallab.spots.at(pp->locallab.selspot).radmasklc || radmasklc->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromasklc = pedited->locallab.spots.at(pp->locallab.selspot).chromasklc || chromasklc->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmasklccurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmasklccurve || !Lmasklcshape->isUnChanged(); // Contrast by detail levels pedited->locallab.spots.at(pp->locallab.selspot).expcbdl = pedited->locallab.spots.at(pp->locallab.selspot).expcbdl || !expcbdl->get_inconsistent(); for (int i = 0; i < 6; i++) { pedited->locallab.spots.at(pp->locallab.selspot).mult[i] = pedited->locallab.spots.at(pp->locallab.selspot).mult[i] || multiplier[i]->getEditedState(); } pedited->locallab.spots.at(pp->locallab.selspot).chromacbdl = pedited->locallab.spots.at(pp->locallab.selspot).chromacbdl || chromacbdl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).threshold = pedited->locallab.spots.at(pp->locallab.selspot).threshold || threshold->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensicb = pedited->locallab.spots.at(pp->locallab.selspot).sensicb || sensicb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).clarityml = pedited->locallab.spots.at(pp->locallab.selspot).clarityml || clarityml->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).contresid = pedited->locallab.spots.at(pp->locallab.selspot).contresid || contresid->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).blurcbdl = pedited->locallab.spots.at(pp->locallab.selspot).blurcbdl || blurcbdl->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).softradiuscb = pedited->locallab.spots.at(pp->locallab.selspot).softradiuscb || softradiuscb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).enacbMask = pedited->locallab.spots.at(pp->locallab.selspot).enacbMask || !enacbMask->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskcbcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskcbcurve || !CCmaskcbshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcbcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskcbcurve || !LLmaskcbshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskcbcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskcbcurve || !HHmaskcbshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcb = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcb || blendmaskcb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).radmaskcb = pedited->locallab.spots.at(pp->locallab.selspot).radmaskcb || radmaskcb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chromaskcb = pedited->locallab.spots.at(pp->locallab.selspot).chromaskcb || chromaskcb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).gammaskcb = pedited->locallab.spots.at(pp->locallab.selspot).gammaskcb || gammaskcb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).slomaskcb = pedited->locallab.spots.at(pp->locallab.selspot).slomaskcb || slomaskcb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).lapmaskcb = pedited->locallab.spots.at(pp->locallab.selspot).lapmaskcb || lapmaskcb->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Lmaskcbcurve = pedited->locallab.spots.at(pp->locallab.selspot).Lmaskcbcurve || !Lmaskcbshape->isUnChanged(); // Denoise pedited->locallab.spots.at(pp->locallab.selspot).expdenoi = pedited->locallab.spots.at(pp->locallab.selspot).expdenoi || !expdenoi->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).noiselumf = pedited->locallab.spots.at(pp->locallab.selspot).noiselumf || noiselumf->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noiselumf0 = pedited->locallab.spots.at(pp->locallab.selspot).noiselumf0 || noiselumf0->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noiselumf2 = pedited->locallab.spots.at(pp->locallab.selspot).noiselumf2 || noiselumf2->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noiselumc = pedited->locallab.spots.at(pp->locallab.selspot).noiselumc || noiselumc->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noiselumdetail = pedited->locallab.spots.at(pp->locallab.selspot).noiselumdetail || noiselumdetail->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noiselequal = pedited->locallab.spots.at(pp->locallab.selspot).noiselequal || noiselequal->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noisechrof = pedited->locallab.spots.at(pp->locallab.selspot).noisechrof || noisechrof->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noisechroc = pedited->locallab.spots.at(pp->locallab.selspot).noisechroc || noisechroc->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).noisechrodetail = pedited->locallab.spots.at(pp->locallab.selspot).noisechrodetail || noisechrodetail->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).adjblur = pedited->locallab.spots.at(pp->locallab.selspot).adjblur || adjblur->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).bilateral = pedited->locallab.spots.at(pp->locallab.selspot).bilateral || bilateral->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensiden = pedited->locallab.spots.at(pp->locallab.selspot).sensiden || sensiden->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).detailthr = pedited->locallab.spots.at(pp->locallab.selspot).detailthr || detailthr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).locwavcurveden = pedited->locallab.spots.at(pp->locallab.selspot).locwavcurveden || !wavshapeden->isUnChanged(); //log encoding pedited->locallab.spots.at(pp->locallab.selspot).explog = pedited->locallab.spots.at(pp->locallab.selspot).explog || !explog->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).autocompute = pedited->locallab.spots.at(pp->locallab.selspot).autocompute || !autocompute->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).sourceGray = pedited->locallab.spots.at(pp->locallab.selspot).sourceGray || sourceGray->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).Autogray = pedited->locallab.spots.at(pp->locallab.selspot).Autogray || !Autogray->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).fullimage = pedited->locallab.spots.at(pp->locallab.selspot).fullimage || !fullimage->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).blackEv = pedited->locallab.spots.at(pp->locallab.selspot).blackEv || blackEv->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).whiteEv = pedited->locallab.spots.at(pp->locallab.selspot).whiteEv || whiteEv->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).targetGray = pedited->locallab.spots.at(pp->locallab.selspot).targetGray || targetGray->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).detail = pedited->locallab.spots.at(pp->locallab.selspot).detail || detail->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensilog = pedited->locallab.spots.at(pp->locallab.selspot).sensilog || sensilog->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).baselog = pedited->locallab.spots.at(pp->locallab.selspot).baselog || baselog->getEditedState(); } } } } // Update Locallab tools GUI disableListener(); updateSpecificGUIState(); enableListener(); } void Locallab::protectskins_toggled() { // printf("protectskins_toggled\n"); if (multiImage) { if (protectSkins->get_inconsistent()) { protectSkins->set_inconsistent(false); pskinsconn.block(true); protectSkins->set_active(false); pskinsconn.block(false); } } if (getEnabled() && expvibrance->getEnabled()) { if (listener) { if (protectSkins->get_active()) { listener->panelChanged(EvlocallabProtectSkins, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvlocallabProtectSkins, M("GENERAL_DISABLED")); } } } } void Locallab::avoidcolorshift_toggled() { // printf("avoidcolorshift_toggled\n"); if (multiImage) { if (avoidColorShift->get_inconsistent()) { avoidColorShift->set_inconsistent(false); ashiftconn.block(true); avoidColorShift->set_active(false); ashiftconn.block(false); } } if (getEnabled() && expvibrance->getEnabled()) { if (listener) { if (avoidColorShift->get_active()) { listener->panelChanged(EvlocallabAvoidColorShift, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvlocallabAvoidColorShift, M("GENERAL_DISABLED")); } } } } void Locallab::pastsattog_toggled() { // printf("pastsattog_toggled\n"); if (multiImage) { if (pastSatTog->get_inconsistent()) { pastSatTog->set_inconsistent(false); pastsattogconn.block(true); pastSatTog->set_active(false); pastsattogconn.block(false); } } // Update Vibrance GUI according to pastsattog button state (to be compliant with updateSpecificGUIState function) if (multiImage && pastSatTog->get_inconsistent()) { psThreshold->set_sensitive(true); saturated->set_sensitive(true); } else if (pastSatTog->get_active()) { // Link both slider, so we set saturated and psThresholds unsensitive psThreshold->set_sensitive(false); saturated->set_sensitive(false); saturated->setValue(pastels->getValue()); // Pastels and Saturated are linked } else { // Separate sliders, so we set saturated and psThresholds sensitive again psThreshold->set_sensitive(true); saturated->set_sensitive(true); } if (getEnabled() && expvibrance->getEnabled()) { if (listener) { if (pastSatTog->get_active()) { listener->panelChanged(EvlocallabPastSatTog, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvlocallabPastSatTog, M("GENERAL_DISABLED")); } } } } void Locallab::curveChanged(CurveEditor* ce) { // Color & Light if (getEnabled() && expcolor->getEnabled()) { if (ce == llshape) { if (listener) { listener->panelChanged(Evlocallabllshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == lcshape) { if (listener) { listener->panelChanged(Evlocallablcshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == ccshape) { if (listener) { listener->panelChanged(Evlocallabccshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == clshape) { if (listener) { listener->panelChanged(Evlocallabclshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == rgbshape) { if (listener) { listener->panelChanged(Evlocallabrgbshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LHshape) { if (listener) { listener->panelChanged(EvlocallabLHshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHshape) { if (listener) { listener->panelChanged(EvlocallabHHshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == CCmaskshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskshape) { if (listener) { listener->panelChanged(EvlocallabLLmaskshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskshape) { if (listener) { listener->panelChanged(EvlocallabHHmaskshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHhmaskshape) { if (listener) { listener->panelChanged(EvlocallabHHhmaskshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmaskshape) { if (listener) { listener->panelChanged(EvlocallabLmaskshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskcolshapewav) { if (listener) { listener->panelChanged(EvlocallabLLmaskcolshapewav, M("HISTORY_CUSTOMCURVE")); } } } // Exposure if (getEnabled() && expexpose->getEnabled()) { if (ce == shapeexpos) { if (listener) { listener->panelChanged(Evlocallabshapeexpos, M("HISTORY_CUSTOMCURVE")); } } if (ce == CCmaskexpshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskexpshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskexpshape) { if (listener) { listener->panelChanged(EvlocallabLLmaskexpshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskexpshape) { if (listener) { listener->panelChanged(EvlocallabHHmaskexpshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmaskexpshape) { if (listener) { listener->panelChanged(EvlocallabLmaskexpshape, M("HISTORY_CUSTOMCURVE")); } } } //Shadows Highlight if (getEnabled() && expshadhigh->getEnabled()) { if (ce == CCmaskSHshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskSHshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskSHshape) { if (listener) { listener->panelChanged(EvlocallabLLmaskSHshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskSHshape) { if (listener) { listener->panelChanged(EvlocallabHHmaskSHshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LmaskSHshape) { if (listener) { listener->panelChanged(EvlocallabLmaskSHshape, M("HISTORY_CUSTOMCURVE")); } } } //CBDL if (getEnabled() && expcbdl->getEnabled()) { if (ce == CCmaskcbshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskcbshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskcbshape) { if (listener) { listener->panelChanged(EvlocallabLLmaskcbshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskcbshape) { if (listener) { listener->panelChanged(EvlocallabHHmaskcbshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmaskcbshape) { if (listener) { listener->panelChanged(EvlocallabLmaskcbshape, M("HISTORY_CUSTOMCURVE")); } } } // Vibrance if (getEnabled() && expvibrance->getEnabled()) { if (ce == skinTonesCurve) { if (listener) { listener->panelChanged(EvlocallabSkinTonesCurve, M("HISTORY_CUSTOMCURVE")); } } if (ce == CCmaskvibshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskvibshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskvibshape) { if (listener) { listener->panelChanged(EvlocallabLLmaskvibshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskvibshape) { if (listener) { listener->panelChanged(EvlocallabHHmaskvibshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmaskvibshape) { if (listener) { listener->panelChanged(EvlocallabLmaskvibshape, M("HISTORY_CUSTOMCURVE")); } } } //Blur if (getEnabled() && (expblur->getEnabled() || expdenoi->getEnabled())) { if (ce == CCmaskblshape) { if (listener) { listener->panelChanged(EvlocallabCCmaskblshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskblshape) { if (listener) { listener->panelChanged(EvlocallabLLmaskblshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskblshape) { if (listener) { listener->panelChanged(EvlocallabHHmaskblshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmaskblshape) { if (listener) { listener->panelChanged(EvlocallabLmaskblshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskblshapewav) { if (listener) { listener->panelChanged(EvlocallabLLmaskblshapewav, M("HISTORY_CUSTOMCURVE")); } } } // TM if (getEnabled() && exptonemap->getEnabled()) { if (ce == CCmasktmshape) { if (listener) { listener->panelChanged(EvlocallabCCmasktmshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmasktmshape) { if (listener) { listener->panelChanged(EvlocallabLLmasktmshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmasktmshape) { if (listener) { listener->panelChanged(EvlocallabHHmasktmshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmasktmshape) { if (listener) { listener->panelChanged(EvlocallabLmasktmshape, M("HISTORY_CUSTOMCURVE")); } } } // Retinex if (getEnabled() && expreti->getEnabled()) { if (ce == cTgainshape) { if (listener) { listener->panelChanged(EvlocallabCTgainCurve, M("HISTORY_CUSTOMCURVE")); } } if (ce == cTtransshape) { if (listener) { listener->panelChanged(EvlocallabCTtransCurve, M("HISTORY_CUSTOMCURVE")); } } if (ce == CCmaskretishape) { if (listener) { listener->panelChanged(EvlocallabCCmaskretishape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmaskretishape) { if (listener) { listener->panelChanged(EvlocallabLLmaskretishape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmaskretishape) { if (listener) { listener->panelChanged(EvlocallabHHmaskretishape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmaskretishape) { if (listener) { listener->panelChanged(EvlocallabLmaskretishape, M("HISTORY_CUSTOMCURVE")); } } } // Local contrast if (getEnabled() && expcontrast->getEnabled()) { if (ce == wavshape) { if (listener) { listener->panelChanged(EvlocallabwavCurve, M("HISTORY_CUSTOMCURVE")); } } if (ce == wavshapelev) { if (listener) { listener->panelChanged(EvlocallabwavCurvelev, M("HISTORY_CUSTOMCURVE")); } } if (ce == wavshapecon) { if (listener) { listener->panelChanged(EvlocallabwavCurvecon, M("HISTORY_CUSTOMCURVE")); } } if (ce == wavshapecomp) { if (listener) { listener->panelChanged(EvlocallabwavCurvecomp, M("HISTORY_CUSTOMCURVE")); } } if (ce == CCmasklcshape) { if (listener) { listener->panelChanged(EvlocallabCCmasklcshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == LLmasklcshape) { if (listener) { listener->panelChanged(EvlocallabLLmasklcshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == HHmasklcshape) { if (listener) { listener->panelChanged(EvlocallabHHmasklcshape, M("HISTORY_CUSTOMCURVE")); } } if (ce == Lmasklcshape) { if (listener) { listener->panelChanged(EvlocallabLmasklcshape, M("HISTORY_CUSTOMCURVE")); } } } //denoise if (getEnabled() && expdenoi->getEnabled()) { if (ce == wavshapeden) { if (listener) { listener->panelChanged(EvlocallabwavCurveden, M("HISTORY_CUSTOMCURVE")); } } } } void Locallab::localcontMethodChanged() { if (localcontMethod->get_active_row_number() == 0) { levelwav->hide(); residcont->hide(); residblur->hide(); levelblur->hide(); residchro->hide(); sigma->hide(); offset->hide(); chromalev->hide(); chromablu->hide(); fatdet->hide(); fatanch->hide(); fatres->hide(); clarilres->hide(); claricres->hide(); clarisoft->hide(); clariFrame->hide(); csThreshold->hide(); lcradius->show(); lcamount->show(); lcdarkness->show(); lclightness->show(); LocalcurveEditorwav->hide(); LocalcurveEditorwavlev->hide(); LocalcurveEditorwavcon->hide(); LocalcurveEditorwavcomp->hide(); fftwlc->show(); blurlc->show(); origlc->hide(); } else if (localcontMethod->get_active_row_number() == 1) { levelwav->show(); residcont->show(); residblur->show(); levelblur->show(); residchro->show(); sigma->show(); offset->show(); chromalev->show(); chromablu->show(); fatdet->show(); fatanch->show(); fatres->show(); clarilres->show(); claricres->show(); clarisoft->show(); clariFrame->show(); csThreshold->show(); lcradius->hide(); lcamount->hide(); lcdarkness->hide(); lclightness->hide(); LocalcurveEditorwav->show(); LocalcurveEditorwavlev->hide(); LocalcurveEditorwavcon->hide(); LocalcurveEditorwavcomp->hide(); fftwlc->hide(); blurlc->show(); origlc->show(); } // printf("localcontMethodChanged\n"); if (getEnabled() && expcontrast->getEnabled()) { if (listener) { listener->panelChanged(EvlocallablocalcontMethod, localcontMethod->get_active_text()); } } } void Locallab::retinexMethodChanged() { // printf("retinexMethodChanged\n"); if (getEnabled() && expreti->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabretinexMethod, retinexMethod->get_active_text()); } } } void Locallab::softMethodChanged() { // printf("softMethodChanged\n"); if (softMethod->get_active_row_number() == 0) { laplace->hide(); ctboxsoftmethod->hide(); } else { laplace->show(); ctboxsoftmethod->show(); } if (getEnabled() && expsoft->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabsoftMethod, softMethod->get_active_text()); } } } void Locallab::blMethodChanged() { // printf("blMethodChanged\n"); if (blMethod->get_active_row_number() == 0) { radius->show(); fftwbl->show(); strength->show(); itera->hide(); grainFrame->show(); isogr->show(); strengr->show(); scalegr->show(); medMethod->hide(); guidbl->hide(); epsbl->hide(); activlum->show(); } else if (blMethod->get_active_row_number() == 1) { radius->hide(); fftwbl->hide(); grainFrame->hide(); isogr->hide(); strengr->hide(); scalegr->hide(); strength->hide(); itera->show(); medMethod->show(); guidbl->hide(); epsbl->hide(); activlum->show(); } else if (blMethod->get_active_row_number() == 2) { radius->hide(); fftwbl->hide(); strength->hide(); grainFrame->hide(); isogr->hide(); strengr->hide(); scalegr->hide(); itera->hide(); medMethod->hide(); guidbl->show(); epsbl->show(); activlum->hide(); } if (getEnabled() && expblur->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabblMethod, blMethod->get_active_text()); } } } void Locallab::blurMethodChanged() { // printf("blurMethodChanged\n"); if (blurMethod->get_active_row_number() == 0) { // expmaskbl->show(); } else if (blurMethod->get_active_row_number() == 1) { // expmaskbl->hide(); } if (getEnabled() && expblur->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabblurMethod, blurMethod->get_active_text()); } } } void Locallab::medMethodChanged() { if (getEnabled() && expblur->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabmedMethod, medMethod->get_active_text()); } } } void Locallab::qualitycurveMethodChanged() { // printf("qualitycurveMethodChanged\n"); if (getEnabled() && expcolor->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabqualitycurveMethod, qualitycurveMethod->get_active_text()); } } } void Locallab::gridMethodChanged() { // printf("qualitycurveMethodChanged\n"); if (getEnabled() && expcolor->getEnabled()) { if (listener) { listener->panelChanged(EvLocallabgridMethod, gridMethod->get_active_text()); } } } void Locallab::merMethodChanged() { if (merMethod->get_active_row_number() == 0) { mask7->hide(); conthrcol->hide(); sensi->set_sensitive(true); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(true); // strcolh->set_sensitive(false); special->set_sensitive(true); invers->set_sensitive(true); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 1) { mask7->hide(); sensi->set_sensitive(true); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(true); special->set_sensitive(true); invers->set_sensitive(true); // strcolh->set_sensitive(false); conthrcol->hide(); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 2) { mask7->show(); // sensi->set_sensitive(false); sensi->set_sensitive(true); // structcol->set_sensitive(false); // blurcolde->set_sensitive(false); // blurcol->set_sensitive(false); // contcol->set_sensitive(false); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(false); special->set_sensitive(false); invers->set_sensitive(false); strcolh->set_sensitive(true); conthrcol->show(); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 3) { // sensi->set_sensitive(false); sensi->set_sensitive(true); // structcol->set_sensitive(false); // blurcolde->set_sensitive(false); // blurcol->set_sensitive(false); // contcol->set_sensitive(false); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(false); special->set_sensitive(false); invers->set_sensitive(false); strcolh->set_sensitive(true); mask7->show(); conthrcol->show(); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 4) { mask7->show(); conthrcol->hide(); // blurcolde->set_sensitive(false); // blurcol->set_sensitive(false); // contcol->set_sensitive(false); // sensi->set_sensitive(false); sensi->set_sensitive(true); // structcol->set_sensitive(false); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(false); special->set_sensitive(false); invers->set_sensitive(false); strcolh->set_sensitive(true); gridmerFrame->show(); } if (getEnabled() && expcolor->getEnabled()) { if (listener) { listener->panelChanged(EvLocallabmerMethod, merMethod->get_active_text()); } } } void Locallab::toneMethodChanged() { // printf("qualitycurveMethodChanged\n"); if (getEnabled() && expcolor->getEnabled()) { if (listener) { listener->panelChanged(EvLocallabtoneMethod, toneMethod->get_active_text()); } } } void Locallab::mergecolMethodChanged() { // printf("mergecolMethodChanged\n"); if (getEnabled() && expcolor->getEnabled()) { if (listener) { listener->panelChanged(EvLocallabmergecolMethod, mergecolMethod->get_active_text()); } } } void Locallab::showmaskcolMethodChanged() { // printf("showmaskcolMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskcolMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskexpMethodinv->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskvibMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskcolMethod, ""); } } void Locallab::showmaskcolMethodChangedinv() { // printf("showmaskcolMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskexpMethodinv->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskvibMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskcolMethodinv, ""); } } void Locallab::showmaskexpMethodChangedinv() { // printf("showmaskcolMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskvibMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskexpMethodinv, ""); } } void Locallab::showmaskexpMethodChanged() { // printf("showmaskexpMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskvibMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskexpMethod, ""); } } void Locallab::expMethodChanged() { // printf("expMethodChanged\n"); disableListener(); if (expMethod->get_active_row_number() == 0) { pdeFrame->set_sensitive(false); fatFrame->set_sensitive(false); laplacexp->set_sensitive(false); balanexp->set_sensitive(false); linear->set_sensitive(false); gamm->set_sensitive(false); fatamount->set_sensitive(false); fatdetail->set_sensitive(false); fatanchor->set_sensitive(false); fatlevel->set_sensitive(false); softradiusexp->set_sensitive(true); } else if (expMethod->get_active_row_number() == 1) { laplacexp->set_sensitive(true); balanexp->set_sensitive(true); linear->set_sensitive(true); pdeFrame->set_sensitive(true); fatFrame->set_sensitive(true); gamm->set_sensitive(true); fatamount->set_sensitive(true); fatdetail->set_sensitive(true); fatanchor->set_sensitive(true); fatlevel->set_sensitive(true); softradiusexp->set_sensitive(false); } enableListener(); if (getEnabled() && expexpose->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabexpMethod, expMethod->get_active_text()); } } } void Locallab::exnoiseMethodChanged() { if (getEnabled() && expexpose->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabexnoiseMethod, exnoiseMethod->get_active_text()); } } } void Locallab::shMethodChanged() { // printf("expMethodChanged\n"); disableListener(); if (shMethod->get_active_row_number() == 0) { for (int i = 0; i < 5; i++) { multipliersh[i]->hide(); } detailSH->hide(); gamFrame->hide(); highlights->show(); h_tonalwidth->show(); shadows->show(); s_tonalwidth->show(); sh_radius->show(); // blurSHde->show(); } else if (shMethod->get_active_row_number() == 1) { for (int i = 0; i < 5; i++) { multipliersh[i]->show(); } detailSH->show(); gamFrame->show(); highlights->hide(); h_tonalwidth->hide(); shadows->hide(); s_tonalwidth->hide(); sh_radius->hide(); // blurSHde->hide(); } enableListener(); if (getEnabled() && expshadhigh->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabshMethod, shMethod->get_active_text()); } } } void Locallab::showmaskSHMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskvibMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskSHMethod, ""); } } void Locallab::showmaskvibMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskvibMethod, ""); } } void Locallab::showmaskSHMethodChangedinv() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskvibMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskSHMethodinv, ""); } } void Locallab::showmasklcMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskvibMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmaskblMethod->set_active(0); showmaskcbMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmasklcMethod, ""); } } void Locallab::showmaskcbMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskvibMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); showmasklcMethod->set_active(0); showmaskblMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskcbMethod, ""); } } void Locallab::showmaskblMethodChanged() { // printf("showmaskblMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskexpMethod->set_active(0); showmaskvibMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskblMethod, ""); } } void Locallab::showmasktmMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskvibMethod->set_active(0); showmaskexpMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmasktmMethod, ""); } } void Locallab::showmaskretiMethodChanged() { // printf("showmaskSHMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmaskvibMethod->set_active(0); showmaskexpMethod->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmaskretiMethod, ""); } } void Locallab::showmasksoftMethodChanged() { // printf("showmaskcolMethodChanged\n"); // When one mask state is changed, other masks are deactivated disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskvibMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasktmMethod->set_active(0); enableListener(); if (listener) { listener->panelChanged(EvlocallabshowmasksoftMethod, ""); } } void Locallab::resetMaskVisibility() { // printf("resetMaskVisibility\n"); disableListener(); showmaskexpMethodinv->set_active(0); showmaskcolMethodinv->set_active(0); showmaskcolMethod->set_active(0); showmaskexpMethod->set_active(0); showmaskSHMethod->set_active(0); showmaskvibMethod->set_active(0); showmaskSHMethodinv->set_active(0); showmasklcMethod->set_active(0); showmaskcbMethod->set_active(0); showmaskretiMethod->set_active(0); showmasksoftMethod->set_active(0); showmasktmMethod->set_active(0); enableListener(); } Locallab::llMaskVisibility* Locallab::getMaskVisibility() { llMaskVisibility* maskStruct = new llMaskVisibility(); maskStruct->colorMaskinv = showmaskcolMethodinv->get_active_row_number(); maskStruct->colorMask = showmaskcolMethod->get_active_row_number(); maskStruct->expMask = showmaskexpMethod->get_active_row_number(); maskStruct->expMaskinv = showmaskexpMethodinv->get_active_row_number(); maskStruct->SHMask = showmaskSHMethod->get_active_row_number(); maskStruct->vibMask = showmaskvibMethod->get_active_row_number(); maskStruct->SHMaskinv = showmaskSHMethodinv->get_active_row_number(); maskStruct->lcMask = showmasklcMethod->get_active_row_number(); maskStruct->cbMask = showmaskcbMethod->get_active_row_number(); maskStruct->retiMask = showmaskretiMethod->get_active_row_number(); maskStruct->softMask = showmasksoftMethod->get_active_row_number(); maskStruct->tmMask = showmasktmMethod->get_active_row_number(); maskStruct->blMask = showmaskblMethod->get_active_row_number(); return maskStruct; } void Locallab::specialChanged() { if (multiImage) { if (special->get_inconsistent()) { special->set_inconsistent(false); specialConn.block(true); special->set_active(false); specialConn.block(false); } } if (getEnabled() && expcolor->getEnabled()) { if (listener) { if (special->get_active()) { listener->panelChanged(EvLocallabspecial, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabspecial, M("GENERAL_DISABLED")); } } } } void Locallab::toolcolChanged() { if (multiImage) { if (toolcol->get_inconsistent()) { toolcol->set_inconsistent(false); toolcolConn.block(true); toolcol->set_active(false); toolcolConn.block(false); } } if (getEnabled() && expcolor->getEnabled()) { if (listener) { if (toolcol->get_active()) { listener->panelChanged(EvLocallabtoolcol, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabtoolcol, M("GENERAL_DISABLED")); } } } } void Locallab::enaColorMaskChanged() { // printf("enaColorMaskChanged\n"); if (multiImage) { if (enaColorMask->get_inconsistent()) { enaColorMask->set_inconsistent(false); enaColorMaskConn.block(true); enaColorMask->set_active(false); enaColorMaskConn.block(false); } } if (getEnabled() && expcolor->getEnabled()) { if (listener) { if (enaColorMask->get_active()) { listener->panelChanged(EvLocallabEnaColorMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnaColorMask, M("GENERAL_DISABLED")); } } } } void Locallab::fftColorMaskChanged() { double temp = blurcol->getValue(); if (fftColorMask->get_active()) { blurcol->setLimits(0.2, 1000., 0.5, 0.2); } else { blurcol->setLimits(0.2, 100., 0.5, 0.2); } blurcol->setValue(temp); if (multiImage) { if (fftColorMask->get_inconsistent()) { fftColorMask->set_inconsistent(false); fftColorMaskConn.block(true); fftColorMask->set_active(false); fftColorMaskConn.block(false); } } if (getEnabled() && expcolor->getEnabled()) { if (listener) { if (fftColorMask->get_active()) { listener->panelChanged(EvLocallabfftColorMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabfftColorMask, M("GENERAL_DISABLED")); } } } } void Locallab::enaExpMaskChanged() { // printf("enaExpMaskChanged\n"); if (multiImage) { if (enaExpMask->get_inconsistent()) { enaExpMask->set_inconsistent(false); enaExpMaskConn.block(true); enaExpMask->set_active(false); enaExpMaskConn.block(false); } } if (getEnabled() && expexpose->getEnabled()) { if (listener) { if (enaExpMask->get_active()) { listener->panelChanged(EvLocallabEnaExpMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnaExpMask, M("GENERAL_DISABLED")); } } } } void Locallab::enaExpMaskaftChanged() { // printf("enaExpMaskChanged\n"); if (multiImage) { if (enaExpMaskaft->get_inconsistent()) { enaExpMaskaft->set_inconsistent(false); enaExpMaskaftConn.block(true); enaExpMaskaft->set_active(false); enaExpMaskaftConn.block(false); } } if (getEnabled() && expexpose->getEnabled()) { if (listener) { if (enaExpMaskaft->get_active()) { listener->panelChanged(EvLocallabEnaExpMaskaft, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnaExpMaskaft, M("GENERAL_DISABLED")); } } } } void Locallab::enaSHMaskChanged() { // printf("enaSHMaskChanged\n"); if (multiImage) { if (enaSHMask->get_inconsistent()) { enaSHMask->set_inconsistent(false); enaSHMaskConn.block(true); enaSHMask->set_active(false); enaSHMaskConn.block(false); } } if (getEnabled() && expshadhigh->getEnabled()) { if (listener) { if (enaSHMask->get_active()) { listener->panelChanged(EvLocallabEnaSHMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnaSHMask, M("GENERAL_DISABLED")); } } } } void Locallab::enavibMaskChanged() { // printf("enavibMaskChanged\n"); if (multiImage) { if (enavibMask->get_inconsistent()) { enavibMask->set_inconsistent(false); enavibMaskConn.block(true); enavibMask->set_active(false); enavibMaskConn.block(false); } } if (getEnabled() && expvibrance->getEnabled()) { if (listener) { if (enavibMask->get_active()) { listener->panelChanged(EvLocallabEnavibMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnavibMask, M("GENERAL_DISABLED")); } } } } void Locallab::enablMaskChanged() { if (multiImage) { if (enablMask->get_inconsistent()) { enablMask->set_inconsistent(false); enablMaskConn.block(true); enablMask->set_active(false); enablMaskConn.block(false); } } if (getEnabled() && (expblur->getEnabled() || expdenoi->getEnabled())) { if (listener) { if (enablMask->get_active()) { listener->panelChanged(EvLocallabEnablMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnablMask, M("GENERAL_DISABLED")); } } } } void Locallab::autocomputeToggled() { /* if (multiImage) { if (autocompute->get_inconsistent()) { autocompute->set_inconsistent(false); autoconn.block(true); autocompute->set_active(false); autoconn.block(false); } } */ if (listener) { if (autocompute->get_active()) { listener->panelChanged(EvLocallabAuto, M("GENERAL_ENABLED")); //blackEv->setEnabled(false); //whiteEv->setEnabled(false); //targetGray->setEnabled(false); } else { listener->panelChanged(EvLocallabAuto, M("GENERAL_DISABLED")); // blackEv->setEnabled(true); // whiteEv->setEnabled(true); } } } void Locallab::fftwblChanged() { // printf("fftwblChanged\n"); double temp = radius->getValue(); /* if (fftwbl->get_active()) { radius->setLimits(1.5, 1000., 0.5, 1.5); } else { radius->setLimits(1.5, 100., 0.5, 1.5); } */ radius->setValue(temp); if (multiImage) { if (fftwbl->get_inconsistent()) { fftwbl->set_inconsistent(false); fftwblConn.block(true); fftwbl->set_active(false); fftwblConn.block(false); } } if (getEnabled() && expblur->getEnabled()) { if (listener) { if (fftwbl->get_active()) { listener->panelChanged(Evlocallabfftwbl, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabfftwbl, M("GENERAL_DISABLED")); } } } } void Locallab::toolblChanged() { // printf("fftwblChanged\n"); if (multiImage) { if (toolbl->get_inconsistent()) { toolbl->set_inconsistent(false); toolblConn.block(true); toolbl->set_active(false); toolblConn.block(false); } } if (getEnabled() && expblur->getEnabled()) { if (listener) { if (toolbl->get_active()) { listener->panelChanged(Evlocallabtoolbl, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabtoolbl, M("GENERAL_DISABLED")); } } } } void Locallab::enatmMaskChanged() { printf("enatmmaskChanged\n"); if (multiImage) { if (enatmMask->get_inconsistent()) { enatmMask->set_inconsistent(false); enatmMaskConn.block(true); enatmMask->set_active(false); enatmMaskConn.block(false); } } if (getEnabled() && exptonemap->getEnabled()) { if (listener) { if (enatmMask->get_active()) { listener->panelChanged(EvLocallabEnatmMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnatmMask, M("GENERAL_DISABLED")); } } } } void Locallab::enatmMaskaftChanged() { printf("enatmmaskaftChanged\n"); if (multiImage) { if (enatmMaskaft->get_inconsistent()) { enatmMaskaft->set_inconsistent(false); enatmMaskaftConn.block(true); enatmMaskaft->set_active(false); enatmMaskaftConn.block(false); } } if (getEnabled() && exptonemap->getEnabled()) { if (listener) { if (enatmMaskaft->get_active()) { listener->panelChanged(EvLocallabEnatmMaskaft, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnatmMaskaft, M("GENERAL_DISABLED")); } } } } void Locallab::enaretiMaskChanged() { printf("enaretimaskChanged\n"); if (multiImage) { if (enaretiMask->get_inconsistent()) { enaretiMask->set_inconsistent(false); enaretiMaskConn.block(true); enaretiMask->set_active(false); enaretiMaskConn.block(false); } } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (enaretiMask->get_active()) { listener->panelChanged(EvLocallabEnaretiMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnaretiMask, M("GENERAL_DISABLED")); } } } } void Locallab::enaretiMasktmapChanged() { // printf("enacbMaskChanged\n"); if (multiImage) { if (enaretiMasktmap->get_inconsistent()) { enaretiMasktmap->set_inconsistent(false); enaretiMasktmapConn.block(true); enaretiMasktmap->set_active(false); enaretiMasktmapConn.block(false); } } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (enaretiMasktmap->get_active()) { listener->panelChanged(EvLocallabEnaretiMasktmap, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnaretiMasktmap, M("GENERAL_DISABLED")); } } } } void Locallab::enalcMaskChanged() { // printf("enalcMaskChanged\n"); if (multiImage) { if (enalcMask->get_inconsistent()) { enalcMask->set_inconsistent(false); enalcMaskConn.block(true); enalcMask->set_active(false); enalcMaskConn.block(false); } } if (getEnabled() && expcontrast->getEnabled()) { if (listener) { if (enalcMask->get_active()) { listener->panelChanged(EvLocallabEnalcMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnalcMask, M("GENERAL_DISABLED")); } } } } void Locallab::enacbMaskChanged() { // printf("enacbMaskChanged\n"); if (multiImage) { if (enacbMask->get_inconsistent()) { enacbMask->set_inconsistent(false); enacbMaskConn.block(true); enacbMask->set_active(false); enacbMaskConn.block(false); } } if (getEnabled() && expcbdl->getEnabled()) { if (listener) { if (enacbMask->get_active()) { listener->panelChanged(EvLocallabEnacbMask, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvLocallabEnacbMask, M("GENERAL_DISABLED")); } } } } void Locallab::inversChanged() { // printf("inversChanged\n"); if (multiImage) { if (invers->get_inconsistent()) { invers->set_inconsistent(false); inversConn.block(true); invers->set_active(false); inversConn.block(false); } } // Update Color & Light GUI according to invers button state (to be compliant with updateSpecificGUIState function) if (multiImage && invers->get_inconsistent()) { sensi->show(); llCurveEditorG->show(); clCurveEditorG->show(); HCurveEditorG->show(); curvactiv->hide(); qualitycurveMethod->show(); labqualcurv->show(); expmaskcol->show(); expmaskcol1->show(); structcol->show(); strengthgrid->hide(); blurcolde->show(); blurcol->show(); contcol->show(); softradiuscol->show(); showmaskcolMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode gridFrame->hide(); showmaskcolMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode merge1colFrame->show(); expgradcol->show(); } else if (invers->get_active()) { sensi->show(); llCurveEditorG->show(); clCurveEditorG->hide(); HCurveEditorG->hide(); curvactiv->hide(); qualitycurveMethod->hide(); labqualcurv->hide(); expmaskcol->show(); expmaskcol1->hide(); structcol->hide(); blurcolde->show(); blurcol->hide(); contcol->hide(); gridFrame->hide(); strengthgrid->hide(); softradiuscol->hide(); showmaskcolMethod->hide(); showmaskcolMethodinv->show(); merge1colFrame->hide(); expgradcol->hide(); } else { sensi->show(); llCurveEditorG->show(); clCurveEditorG->show(); HCurveEditorG->show(); curvactiv->hide(); qualitycurveMethod->show(); labqualcurv->show(); expmaskcol->show(); expmaskcol1->show(); structcol->show(); blurcolde->show(); blurcol->show(); contcol->show(); gridFrame->show(); softradiuscol->show(); showmaskcolMethodinv->hide(); showmaskcolMethod->show(); merge1colFrame->show(); expgradcol->show(); if (batchMode) { showmaskcolMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskcolMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } } if (getEnabled() && expcolor->getEnabled()) { if (listener) { if (invers->get_active()) { listener->panelChanged(Evlocallabinvers, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabinvers, M("GENERAL_DISABLED")); } } } } void Locallab::inversexChanged() { // printf("inversChanged\n"); if (multiImage) { if (inversex->get_inconsistent()) { inversex->set_inconsistent(false); inversexConn.block(true); inversex->set_active(false); inversexConn.block(false); } } // Update Color & Light GUI according to invers button state (to be compliant with updateSpecificGUIState function) if (multiImage && inversex->get_inconsistent()) { sensiex->show(); curveEditorG->show(); expmaskexp->show(); structexp->show(); blurexpde->show(); shadex->show(); expMethod->show(); exnoiseMethod->show(); expgradexp->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); softradiusexp->show(); fatFrame->hide(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->show(); fatFrame->show(); softradiusexp->hide(); } showmaskexpMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode softradiusexp->show(); showmaskexpMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inversex->get_active()) { sensiex->show(); curveEditorG->show(); expmaskexp->show(); structexp->hide(); shadex->hide(); blurexpde->show(); softradiusexp->hide(); expMethod->hide(); exnoiseMethod->hide(); showmaskexpMethod->hide(); showmaskexpMethodinv->show(); expMethod->set_active(0); expgradexp->hide(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->show(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->hide(); } } else { sensiex->show(); curveEditorG->show(); expmaskexp->show(); structexp->show(); blurexpde->show(); softradiusexp->show(); shadex->show(); expMethod->show(); exnoiseMethod->show(); expgradexp->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->show(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->show(); fatFrame->show(); softradiusexp->hide(); } showmaskexpMethodinv->show(); showmaskexpMethod->hide(); if (batchMode) { showmaskexpMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskexpMethodinv->hide(); } } if (getEnabled() && expexpose->getEnabled()) { if (listener) { if (inversex->get_active()) { listener->panelChanged(Evlocallabinversex, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabinversex, M("GENERAL_DISABLED")); } } } } void Locallab::inversshChanged() { // printf("inversChanged\n"); if (multiImage) { if (inverssh->get_inconsistent()) { inverssh->set_inconsistent(false); inversshConn.block(true); inverssh->set_active(false); inversshConn.block(false); } } // Update Color & Light GUI according to invers button state (to be compliant with updateSpecificGUIState function) if (multiImage && inverssh->get_inconsistent()) { sensihs->show(); blurSHde->show(); expmasksh->show(); showmaskSHMethod->show(); showmaskSHMethodinv->hide(); // gradSHFrame->show(); expgradsh->show(); showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inverssh->get_active()) { // printf("Inv SH\n"); sensihs->show(); expmasksh->show(); blurSHde->show(); showmaskSHMethod->hide(); showmaskSHMethodinv->show(); // shMethod->set_active(0); expgradsh->hide(); } else { // printf("Pas Inv SH\n"); sensihs->show(); expmasksh->show(); blurSHde->show(); showmaskSHMethod->show(); showmaskSHMethodinv->hide(); expgradsh->show(); if (batchMode) { showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskSHMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } } if (getEnabled() && expshadhigh->getEnabled()) { if (listener) { if (inverssh->get_active()) { listener->panelChanged(Evlocallabinverssh, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabinverssh, M("GENERAL_DISABLED")); } } } } void Locallab::curvactivChanged() { // printf("curvactivChanged\n"); if (multiImage) { if (curvactiv->get_inconsistent()) { curvactiv->set_inconsistent(false); curvactivConn.block(true); curvactiv->set_active(false); curvactivConn.block(false); } } if (getEnabled() && expcolor->getEnabled()) { if (listener) { if (curvactiv->get_active()) { listener->panelChanged(Evlocallabcurvactiv, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabcurvactiv, M("GENERAL_DISABLED")); } } } } void Locallab::activlumChanged() { // printf("activlumChanged\n"); if (multiImage) { if (activlum->get_inconsistent()) { activlum->set_inconsistent(false); activlumConn.block(true); activlum->set_active(false); activlumConn.block(false); } } if (getEnabled() && expblur->getEnabled()) { if (listener) { if (activlum->get_active()) { listener->panelChanged(Evlocallabactivlum, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabactivlum, M("GENERAL_DISABLED")); } } } } void Locallab::AutograyChanged() { if (multiImage) { if (Autogray->get_inconsistent()) { Autogray->set_inconsistent(false); AutograyConn.block(true); Autogray->set_active(false); AutograyConn.block(false); } } if (getEnabled() && explog->getEnabled()) { if (listener) { if (Autogray->get_active()) { listener->panelChanged(EvlocallabAutogray, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvlocallabAutogray, M("GENERAL_DISABLED")); } } } } void Locallab::fullimageChanged() { if (multiImage) { if (fullimage->get_inconsistent()) { fullimage->set_inconsistent(false); fullimageConn.block(true); fullimage->set_active(false); fullimageConn.block(false); } } if (getEnabled() && explog->getEnabled()) { if (listener) { if (fullimage->get_active()) { listener->panelChanged(Evlocallabfullimage, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabfullimage, M("GENERAL_DISABLED")); } } } } void Locallab::blurlcChanged() { if (multiImage) { if (blurlc->get_inconsistent()) { blurlc->set_inconsistent(false); blurlcConn.block(true); blurlc->set_active(false); blurlcConn.block(false); } } if (getEnabled() && expcontrast->getEnabled()) { if (listener) { if (blurlc->get_active()) { listener->panelChanged(Evlocallabblurlc, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabblurlc, M("GENERAL_DISABLED")); } } } } void Locallab::origlcChanged() { if (multiImage) { if (origlc->get_inconsistent()) { origlc->set_inconsistent(false); origlcConn.block(true); origlc->set_active(false); origlcConn.block(false); } } if (getEnabled() && expcontrast->getEnabled()) { if (listener) { if (origlc->get_active()) { listener->panelChanged(Evlocallaboriglc, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallaboriglc, M("GENERAL_DISABLED")); } } } } void Locallab::fftwlcChanged() { // printf("fftwlcChanged\n"); double temp = lcradius->getValue(); if (fftwlc->get_active()) { lcradius->setLimits(20, 1000, 1, 80); } else { lcradius->setLimits(20, 100, 1, 80); } lcradius->setValue(temp); if (multiImage) { if (fftwlc->get_inconsistent()) { fftwlc->set_inconsistent(false); fftwlcConn.block(true); fftwlc->set_active(false); fftwlcConn.block(false); } } if (getEnabled() && expcontrast->getEnabled()) { if (listener) { if (fftwlc->get_active()) { listener->panelChanged(Evlocallabfftwlc, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabfftwlc, M("GENERAL_DISABLED")); } } } } void Locallab::fftwretiChanged() { // printf("fftwlcChanged\n"); if (multiImage) { if (fftwreti->get_inconsistent()) { fftwreti->set_inconsistent(false); fftwretiConn.block(true); fftwreti->set_active(false); fftwretiConn.block(false); } } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (fftwreti->get_active()) { listener->panelChanged(Evlocallabfftwreti, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabfftwreti, M("GENERAL_DISABLED")); } } } } void Locallab::inversshaChanged() { // printf("inversshaChanged\n"); if (multiImage) { if (inverssha->get_inconsistent()) { inverssha->set_inconsistent(false); inversshaConn.block(true); inverssha->set_active(false); inversshaConn.block(false); } } // Update Sharpening GUI according to inverssha button state (to be compliant with updateSpecificGUIState function) sensisha->show(); if (getEnabled() && expsharp->getEnabled()) { if (listener) { if (inverssha->get_active()) { listener->panelChanged(Evlocallabinverssha, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabinverssha, M("GENERAL_DISABLED")); } } } } void Locallab::equiltmChanged() { if (multiImage) { if (equiltm->get_inconsistent()) { equiltm->set_inconsistent(false); equiltmConn.block(true); equiltm->set_active(false); equiltmConn.block(false); } } if (getEnabled() && exptonemap->getEnabled()) { if (listener) { if (equiltm->get_active()) { listener->panelChanged(Evlocallabequiltm, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabequiltm, M("GENERAL_DISABLED")); } } } } void Locallab::equilretChanged() { if (multiImage) { if (equilret->get_inconsistent()) { equilret->set_inconsistent(false); equilretConn.block(true); equilret->set_active(false); equilretConn.block(false); } } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (equilret->get_active()) { listener->panelChanged(Evlocallabequilret, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabequilret, M("GENERAL_DISABLED")); } } } } void Locallab::loglinChanged() { if (multiImage) { if (loglin->get_inconsistent()) { loglin->set_inconsistent(false); loglinConn.block(true); loglin->set_active(false); loglinConn.block(false); } } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (loglin->get_active()) { listener->panelChanged(Evlocallabloglin, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabloglin, M("GENERAL_DISABLED")); } } } } void Locallab::lumonlyChanged() { if (multiImage) { if (lumonly->get_inconsistent()) { lumonly->set_inconsistent(false); lumonlyConn.block(true); lumonly->set_active(false); lumonlyConn.block(false); } } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (lumonly->get_active()) { listener->panelChanged(Evlocallablumonly, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallablumonly, M("GENERAL_DISABLED")); } } } } void Locallab::inversretChanged() { // printf("inversretChanged\n"); if (multiImage) { if (inversret->get_inconsistent()) { inversret->set_inconsistent(false); inversretConn.block(true); inversret->set_active(false); inversretConn.block(false); } } // Update Retinex GUI according to inversret button state (to be compliant with updateSpecificGUIState function) if (multiImage && inversret->get_inconsistent()) { sensih->show(); softradiusret->show(); expmaskreti->show(); } else if (inversret->get_active()) { sensih->show(); dehaz->show(); depth->show(); softradiuscol->show(); expmaskreti->show(); } else { sensih->show(); dehaz->show(); depth->show(); softradiusret->show(); expmaskreti->show(); } if (getEnabled() && expreti->getEnabled()) { if (listener) { if (inversret->get_active()) { listener->panelChanged(Evlocallabinversret, M("GENERAL_ENABLED")); } else { listener->panelChanged(Evlocallabinversret, M("GENERAL_DISABLED")); } } } } void Locallab::setParamEditable(bool cond) { // printf("setParamEditable: %d\n", cond); // Update params editable state for controlspotpanel expsettings->setParamEditable(cond); // Color & Light expcolor->set_sensitive(cond); // Exposure expexpose->set_sensitive(cond); // Shadow highlight expshadhigh->set_sensitive(cond); // Vibrance expvibrance->set_sensitive(cond); // Soft Light expsoft->set_sensitive(cond); // Blur & Noise expblur->set_sensitive(cond); // Tone Mapping exptonemap->set_sensitive(cond); // Retinex expreti->set_sensitive(cond); // Sharpening expsharp->set_sensitive(cond); // Local Contrast expcontrast->set_sensitive(cond); // Contrast by detail levels expcbdl->set_sensitive(cond); // Denoise expdenoi->set_sensitive(cond); //log encoding explog->set_sensitive(cond); } void Locallab::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited) { defparams = defParams; defpedited = pedited; if (pedited) { pe = new ParamsEdited(*pedited); } else { pe = nullptr; } } void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, const ParamsEdited * pedited, int id) { // printf("setDefaults\n"); // Set default values and edited states for controlspotpanel expsettings->setDefaults(defParams, pedited, id); // Find vector index of given spot id (index = -1 if not found) int index = -1; for (int i = 0; i < (int)defParams->locallab.spots.size(); i++) { if (defParams->locallab.spots.at(i).id == id) { index = i; break; } } // Set default values for adjusters const rtengine::procparams::LocallabParams::LocallabSpot* defSpot = new rtengine::procparams::LocallabParams::LocallabSpot(); if (index != -1 && index < (int)defParams->locallab.spots.size()) { defSpot = &defParams->locallab.spots.at(index); } // Color & Light lightness->setDefault((double)defSpot->lightness); contrast->setDefault((double)defSpot->contrast); chroma->setDefault((double)defSpot->chroma); labgrid->setDefault(defSpot->labgridALow / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, defSpot->labgridBLow / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, defSpot->labgridAHigh / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, defSpot->labgridBHigh / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX); labgridmerg->setDefault(defSpot->labgridALowmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, defSpot->labgridBLowmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, defSpot->labgridAHighmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, defSpot->labgridBHighmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX); sensi->setDefault((double)defSpot->sensi); structcol->setDefault((double)defSpot->structcol); strcol->setDefault((double)defSpot->strcol); strcolab->setDefault((double)defSpot->strcolab); strcolh->setDefault((double)defSpot->strcolh); angcol->setDefault((double)defSpot->angcol); blurcolde->setDefault((double)defSpot->blurcolde); blurcol->setDefault((double)defSpot->blurcol); contcol->setDefault((double)defSpot->contcol); blendmaskcol->setDefault((double)defSpot->blendmaskcol); radmaskcol->setDefault(defSpot->radmaskcol); chromaskcol->setDefault(defSpot->chromaskcol); gammaskcol->setDefault(defSpot->gammaskcol); slomaskcol->setDefault(defSpot->slomaskcol); shadmaskcol->setDefault(defSpot->shadmaskcol); strumaskcol->setDefault(defSpot->strumaskcol); lapmaskcol->setDefault(defSpot->lapmaskcol); softradiuscol->setDefault(defSpot->softradiuscol); opacol->setDefault(defSpot->opacol); mercol->setDefault(defSpot->mercol); merlucol->setDefault(defSpot->merlucol); conthrcol->setDefault(defSpot->conthrcol); csThresholdcol->setDefault(defSpot->csthresholdcol); // Exposure expcomp->setDefault(defSpot->expcomp); hlcompr->setDefault((double)defSpot->hlcompr); hlcomprthresh->setDefault((double)defSpot->hlcomprthresh); black->setDefault((double)defSpot->black); shadex->setDefault((double)defSpot->shadex); shcompr->setDefault((double)defSpot->shcompr); expchroma->setDefault((double)defSpot->expchroma); warm->setDefault((double)defSpot->warm); sensiex->setDefault((double)defSpot->sensiex); structexp->setDefault((double)defSpot->structexp); blurexpde->setDefault((double)defSpot->blurexpde); strexp->setDefault((double)defSpot->strexp); angexp->setDefault((double)defSpot->angexp); blendmaskexp->setDefault((double)defSpot->blendmaskexp); radmaskexp->setDefault(defSpot->radmaskexp); chromaskexp->setDefault(defSpot->chromaskexp); gammaskexp->setDefault(defSpot->gammaskexp); slomaskexp->setDefault(defSpot->slomaskexp); lapmaskexp->setDefault(defSpot->lapmaskexp); strmaskexp->setDefault(defSpot->strmaskexp); angmaskexp->setDefault(defSpot->angmaskexp); softradiusexp->setDefault(defSpot->softradiusexp); laplacexp->setDefault(defSpot->laplacexp); balanexp->setDefault(defSpot->balanexp); linear->setDefault(defSpot->linear); gamm->setDefault(defSpot->gamm); fatamount->setDefault(defSpot->fatamount); fatdetail->setDefault(defSpot->fatdetail); fatanchor->setDefault(defSpot->fatanchor); fatlevel->setDefault(defSpot->fatlevel); // Shadow highlight highlights->setDefault((double)defSpot->highlights); h_tonalwidth->setDefault((double)defSpot->h_tonalwidth); shadows->setDefault((double)defSpot->shadows); s_tonalwidth->setDefault((double)defSpot->s_tonalwidth); sh_radius->setDefault((double)defSpot->sh_radius); sensihs->setDefault((double)defSpot->sensihs); blendmaskSH->setDefault((double)defSpot->blendmaskSH); radmaskSH->setDefault(defSpot->radmaskSH); blurSHde->setDefault((double)defSpot->blurSHde); strSH->setDefault((double)defSpot->strSH); angSH->setDefault((double)defSpot->angSH); chromaskSH->setDefault(defSpot->chromaskSH); gammaskSH->setDefault(defSpot->gammaskSH); slomaskSH->setDefault(defSpot->slomaskSH); lapmaskSH->setDefault(defSpot->lapmaskSH); detailSH->setDefault(defSpot->detailSH); for (int i = 0; i < 5; i++) { multipliersh[i]->setDefault(defSpot->multsh[i]); } fatamountSH->setDefault(defSpot->fatamountSH); fatanchorSH->setDefault(defSpot->fatanchorSH); gamSH->setDefault(defSpot->gamSH); sloSH->setDefault(defSpot->sloSH); // Vibrance saturated->setDefault((double)defSpot->saturated); pastels->setDefault((double)defSpot->pastels); psThreshold->setDefault(defSpot->psthreshold); sensiv->setDefault((double)defSpot->sensiv); blendmaskvib->setDefault((double)defSpot->blendmaskvib); radmaskvib->setDefault(defSpot->radmaskvib); chromaskvib->setDefault(defSpot->chromaskvib); gammaskvib->setDefault(defSpot->gammaskvib); slomaskvib->setDefault(defSpot->slomaskvib); lapmaskvib->setDefault(defSpot->lapmaskvib); strvib->setDefault(defSpot->strvib); strvibab->setDefault(defSpot->strvibab); strvibh->setDefault(defSpot->strvibh); angvib->setDefault(defSpot->angvib); // Soft Light streng->setDefault((double)defSpot->streng); sensisf->setDefault((double)defSpot->sensisf); laplace->setDefault(defSpot->laplace); // Blur & Noise radius->setDefault(defSpot->radius); strength->setDefault((double)defSpot->strength); sensibn->setDefault((double)defSpot->sensibn); itera->setDefault((double)defSpot->itera); isogr->setDefault((double)defSpot->isogr); strengr->setDefault((double)defSpot->strengr); scalegr->setDefault((double)defSpot->scalegr); guidbl->setDefault((double)defSpot->guidbl); epsbl->setDefault((double)defSpot->epsbl); blendmaskbl->setDefault((double)defSpot->blendmaskbl); radmaskbl->setDefault(defSpot->radmaskbl); chromaskbl->setDefault(defSpot->chromaskbl); gammaskbl->setDefault(defSpot->gammaskbl); slomaskbl->setDefault(defSpot->slomaskbl); lapmaskbl->setDefault(defSpot->lapmaskbl); shadmaskbl->setDefault(defSpot->shadmaskbl); strumaskbl->setDefault(defSpot->strumaskbl); csThresholdblur->setDefault(defSpot->csthresholdblur); // Tone Mapping stren->setDefault(defSpot->stren); gamma->setDefault(defSpot->gamma); estop->setDefault(defSpot->estop); scaltm->setDefault(defSpot->scaltm); rewei->setDefault((double)defSpot->rewei); satur->setDefault(defSpot->satur); sensitm->setDefault((double)defSpot->sensitm); softradiustm->setDefault(defSpot->softradiustm); amount->setDefault(defSpot->amount); blendmasktm->setDefault((double)defSpot->blendmasktm); radmasktm->setDefault(defSpot->radmasktm); chromasktm->setDefault(defSpot->chromasktm); gammasktm->setDefault(defSpot->gammasktm); slomasktm->setDefault(defSpot->slomasktm); lapmasktm->setDefault(defSpot->lapmasktm); // Retinex str->setDefault(defSpot->str); chrrt->setDefault(defSpot->chrrt); neigh->setDefault(defSpot->neigh); vart->setDefault(defSpot->vart); offs->setDefault(defSpot->offs); dehaz->setDefault((double)defSpot->dehaz); depth->setDefault((double)defSpot->depth); sensih->setDefault((double)defSpot->sensih); softradiusret->setDefault(defSpot->softradiusret); blendmaskreti->setDefault((double)defSpot->blendmaskreti); radmaskreti->setDefault(defSpot->radmaskreti); chromaskreti->setDefault(defSpot->chromaskreti); gammaskreti->setDefault(defSpot->gammaskreti); slomaskreti->setDefault(defSpot->slomaskreti); lapmaskreti->setDefault(defSpot->lapmaskreti); scalereti->setDefault(defSpot->scalereti); darkness->setDefault(defSpot->darkness); lightnessreti->setDefault(defSpot->lightnessreti); limd->setDefault(defSpot->limd); cliptm->setDefault(defSpot->cliptm); // Sharpening sharcontrast->setDefault((double)defSpot->sharcontrast); sharradius->setDefault(defSpot->sharradius); sharamount->setDefault((double)defSpot->sharamount); shardamping->setDefault((double)defSpot->shardamping); shariter->setDefault((double)defSpot->shariter); sharblur->setDefault(defSpot->sharblur); sensisha->setDefault((double)defSpot->sensisha); // Local Contrast lcradius->setDefault((double)defSpot->lcradius); lcamount->setDefault(defSpot->lcamount); lcdarkness->setDefault(defSpot->lcdarkness); lclightness->setDefault(defSpot->lclightness); levelwav->setDefault(defSpot->levelwav); residcont->setDefault(defSpot->residcont); residblur->setDefault(defSpot->residblur); levelblur->setDefault(defSpot->levelblur); residchro->setDefault(defSpot->residchro); sigma->setDefault(defSpot->sigma); offset->setDefault(defSpot->offset); chromalev->setDefault(defSpot->chromalev); chromablu->setDefault(defSpot->chromablu); fatdet->setDefault(defSpot->fatdet); fatanch->setDefault(defSpot->fatanch); fatres->setDefault(defSpot->fatres); clarilres->setDefault(defSpot->clarilres); claricres->setDefault(defSpot->claricres); clarisoft->setDefault(defSpot->clarisoft); sensilc->setDefault((double)defSpot->sensilc); csThreshold->setDefault(defSpot->csthreshold); blendmasklc->setDefault((double)defSpot->blendmasklc); radmasklc->setDefault(defSpot->radmasklc); chromasklc->setDefault(defSpot->chromasklc); // Contrast by detail levels for (int i = 0; i < 6; i++) { multiplier[i]->setDefault(defSpot->mult[i]); } chromacbdl->setDefault(defSpot->chromacbdl); threshold->setDefault(defSpot->threshold); sensicb->setDefault((double)defSpot->sensicb); clarityml->setDefault(defSpot->clarityml); contresid->setDefault((double)defSpot->contresid); blurcbdl->setDefault(defSpot->blurcbdl); softradiuscb->setDefault(defSpot->softradiuscb); blendmaskcb->setDefault((double)defSpot->blendmaskcb); radmaskcb->setDefault(defSpot->radmaskcb); chromaskcb->setDefault(defSpot->chromaskcb); gammaskcb->setDefault(defSpot->gammaskcb); slomaskcb->setDefault(defSpot->slomaskcb); lapmaskcb->setDefault(defSpot->lapmaskcb); // Denoise noiselumf->setDefault((double)defSpot->noiselumf); noiselumf0->setDefault((double)defSpot->noiselumf0); noiselumf2->setDefault((double)defSpot->noiselumf2); noiselumc->setDefault((double)defSpot->noiselumc); noiselumdetail->setDefault((double)defSpot->noiselumdetail); noiselequal->setDefault((double)defSpot->noiselequal); noisechrof->setDefault((double)defSpot->noisechrof); noisechroc->setDefault((double)defSpot->noisechroc); noisechrodetail->setDefault((double)defSpot->noisechrodetail); adjblur->setDefault((double)defSpot->adjblur); bilateral->setDefault((double)defSpot->bilateral); sensiden->setDefault((double)defSpot->sensiden); detailthr->setDefault((double)defSpot->detailthr); //log encoding sourceGray->setDefault((double)defSpot->sourceGray); blackEv->setDefault((double)defSpot->blackEv); whiteEv->setDefault((double)defSpot->whiteEv); targetGray->setDefault((double)defSpot->targetGray); detail->setDefault((double)defSpot->detail); sensilog->setDefault((double)defSpot->sensilog); baselog->setDefault((double)defSpot->baselog); // Set default edited states for adjusters and threshold adjusters if (!pedited) { // Color & Light lightness->setDefaultEditedState(Irrelevant); contrast->setDefaultEditedState(Irrelevant); chroma->setDefaultEditedState(Irrelevant); labgrid->setEdited(Edited); labgridmerg->setEdited(Edited); sensi->setDefaultEditedState(Irrelevant); structcol->setDefaultEditedState(Irrelevant); strcol->setDefaultEditedState(Irrelevant); strcolab->setDefaultEditedState(Irrelevant); strcolh->setDefaultEditedState(Irrelevant); angcol->setDefaultEditedState(Irrelevant); strengthgrid->setDefault((double)defSpot->strengthgrid); blurcolde->setDefaultEditedState(Irrelevant); blurcol->setDefaultEditedState(Irrelevant); contcol->setDefaultEditedState(Irrelevant); blendmaskcol->setDefaultEditedState(Irrelevant); radmaskcol->setDefaultEditedState(Irrelevant); chromaskcol->setDefaultEditedState(Irrelevant); gammaskcol->setDefaultEditedState(Irrelevant); slomaskcol->setDefaultEditedState(Irrelevant); shadmaskcol->setDefaultEditedState(Irrelevant); strumaskcol->setDefaultEditedState(Irrelevant); lapmaskcol->setDefaultEditedState(Irrelevant); softradiuscol->setDefaultEditedState(Irrelevant); opacol->setDefaultEditedState(Irrelevant); mercol->setDefaultEditedState(Irrelevant); merlucol->setDefaultEditedState(Irrelevant); conthrcol->setDefaultEditedState(Irrelevant); csThresholdcol->setDefaultEditedState(Irrelevant); // Exposure expcomp->setDefaultEditedState(Irrelevant); hlcompr->setDefaultEditedState(Irrelevant); hlcomprthresh->setDefaultEditedState(Irrelevant); black->setDefaultEditedState(Irrelevant); shadex->setDefaultEditedState(Irrelevant); shcompr->setDefaultEditedState(Irrelevant); expchroma->setDefaultEditedState(Irrelevant); warm->setDefaultEditedState(Irrelevant); sensiex->setDefaultEditedState(Irrelevant); structexp->setDefaultEditedState(Irrelevant); blurexpde->setDefaultEditedState(Irrelevant); strexp->setDefaultEditedState(Irrelevant); angexp->setDefaultEditedState(Irrelevant); blendmaskexp->setDefaultEditedState(Irrelevant); radmaskexp->setDefaultEditedState(Irrelevant); chromaskexp->setDefaultEditedState(Irrelevant); gammaskexp->setDefaultEditedState(Irrelevant); slomaskexp->setDefaultEditedState(Irrelevant); lapmaskexp->setDefaultEditedState(Irrelevant); strmaskexp->setDefaultEditedState(Irrelevant); angmaskexp->setDefaultEditedState(Irrelevant); softradiusexp->setDefaultEditedState(Irrelevant); laplacexp->setDefaultEditedState(Irrelevant); balanexp->setDefaultEditedState(Irrelevant); linear->setDefaultEditedState(Irrelevant); gamm->setDefaultEditedState(Irrelevant); fatamount->setDefaultEditedState(Irrelevant); fatdetail->setDefaultEditedState(Irrelevant); fatanchor->setDefaultEditedState(Irrelevant); fatlevel->setDefaultEditedState(Irrelevant); // Shadow highlight highlights->setDefaultEditedState(Irrelevant); h_tonalwidth->setDefaultEditedState(Irrelevant); shadows->setDefaultEditedState(Irrelevant); s_tonalwidth->setDefaultEditedState(Irrelevant); sh_radius->setDefaultEditedState(Irrelevant); sensihs->setDefaultEditedState(Irrelevant); blendmaskSH->setDefaultEditedState(Irrelevant); radmaskSH->setDefaultEditedState(Irrelevant); blurSHde->setDefaultEditedState(Irrelevant); strSH->setDefaultEditedState(Irrelevant); angSH->setDefaultEditedState(Irrelevant); chromaskSH->setDefaultEditedState(Irrelevant); gammaskSH->setDefaultEditedState(Irrelevant); slomaskSH->setDefaultEditedState(Irrelevant); lapmaskSH->setDefaultEditedState(Irrelevant); detailSH->setDefaultEditedState(Irrelevant); for (int i = 0; i < 5; i++) { multipliersh[i]->setDefaultEditedState(Irrelevant); } fatamountSH->setDefaultEditedState(Irrelevant); fatanchorSH->setDefaultEditedState(Irrelevant); gamSH->setDefaultEditedState(Irrelevant); sloSH->setDefaultEditedState(Irrelevant); // Vibrance saturated->setDefaultEditedState(Irrelevant); pastels->setDefaultEditedState(Irrelevant); psThreshold->setDefaultEditedState(Irrelevant); sensiv->setDefaultEditedState(Irrelevant); blendmaskvib->setDefaultEditedState(Irrelevant); radmaskvib->setDefaultEditedState(Irrelevant); chromaskvib->setDefaultEditedState(Irrelevant); gammaskvib->setDefaultEditedState(Irrelevant); slomaskvib->setDefaultEditedState(Irrelevant); lapmaskvib->setDefaultEditedState(Irrelevant); strvib->setDefaultEditedState(Irrelevant); strvibab->setDefaultEditedState(Irrelevant); strvibh->setDefaultEditedState(Irrelevant); angvib->setDefaultEditedState(Irrelevant); // Soft Light streng->setDefaultEditedState(Irrelevant); sensisf->setDefaultEditedState(Irrelevant); laplace->setDefaultEditedState(Irrelevant); // Blur & Noise radius->setDefaultEditedState(Irrelevant); strength->setDefaultEditedState(Irrelevant); sensibn->setDefaultEditedState(Irrelevant); itera->setDefaultEditedState(Irrelevant); isogr->setDefaultEditedState(Irrelevant); strengr->setDefaultEditedState(Irrelevant); scalegr->setDefaultEditedState(Irrelevant); guidbl->setDefaultEditedState(Irrelevant); epsbl->setDefaultEditedState(Irrelevant); blendmaskbl->setDefaultEditedState(Irrelevant); radmaskbl->setDefaultEditedState(Irrelevant); chromaskbl->setDefaultEditedState(Irrelevant); gammaskbl->setDefaultEditedState(Irrelevant); slomaskbl->setDefaultEditedState(Irrelevant); lapmaskbl->setDefaultEditedState(Irrelevant); shadmaskbl->setDefaultEditedState(Irrelevant); strumaskbl->setDefaultEditedState(Irrelevant); csThresholdblur->setDefaultEditedState(Irrelevant); // Tone Mapping stren->setDefaultEditedState(Irrelevant); gamma->setDefaultEditedState(Irrelevant); estop->setDefaultEditedState(Irrelevant); scaltm->setDefaultEditedState(Irrelevant); rewei->setDefaultEditedState(Irrelevant); satur->setDefaultEditedState(Irrelevant); sensitm->setDefaultEditedState(Irrelevant); softradiustm->setDefaultEditedState(Irrelevant); amount->setDefaultEditedState(Irrelevant); blendmasktm->setDefaultEditedState(Irrelevant); radmasktm->setDefaultEditedState(Irrelevant); chromasktm->setDefaultEditedState(Irrelevant); gammasktm->setDefaultEditedState(Irrelevant); slomasktm->setDefaultEditedState(Irrelevant); lapmasktm->setDefaultEditedState(Irrelevant); // Retinex str->setDefaultEditedState(Irrelevant); chrrt->setDefaultEditedState(Irrelevant); neigh->setDefaultEditedState(Irrelevant); vart->setDefaultEditedState(Irrelevant); offs->setDefaultEditedState(Irrelevant); dehaz->setDefaultEditedState(Irrelevant); depth->setDefaultEditedState(Irrelevant); sensih->setDefaultEditedState(Irrelevant); softradiusret->setDefaultEditedState(Irrelevant); blendmaskreti->setDefaultEditedState(Irrelevant); radmaskreti->setDefaultEditedState(Irrelevant); chromaskreti->setDefaultEditedState(Irrelevant); gammaskreti->setDefaultEditedState(Irrelevant); slomaskreti->setDefaultEditedState(Irrelevant); lapmaskreti->setDefaultEditedState(Irrelevant); scalereti->setDefaultEditedState(Irrelevant); darkness->setDefaultEditedState(Irrelevant); lightnessreti->setDefaultEditedState(Irrelevant); limd->setDefaultEditedState(Irrelevant); cliptm->setDefaultEditedState(Irrelevant); // Sharpening sharcontrast->setDefaultEditedState(Irrelevant); sharradius->setDefaultEditedState(Irrelevant); sharamount->setDefaultEditedState(Irrelevant); shardamping->setDefaultEditedState(Irrelevant); shariter->setDefaultEditedState(Irrelevant); sharblur->setDefaultEditedState(Irrelevant); sensisha->setDefaultEditedState(Irrelevant); // Local Contrast lcradius->setDefaultEditedState(Irrelevant); lcamount->setDefaultEditedState(Irrelevant); lcdarkness->setDefaultEditedState(Irrelevant); lclightness->setDefaultEditedState(Irrelevant); levelwav->setDefaultEditedState(Irrelevant); residcont->setDefaultEditedState(Irrelevant); residblur->setDefaultEditedState(Irrelevant); levelblur->setDefaultEditedState(Irrelevant); residchro->setDefaultEditedState(Irrelevant); sigma->setDefaultEditedState(Irrelevant); offset->setDefaultEditedState(Irrelevant); chromalev->setDefaultEditedState(Irrelevant); chromablu->setDefaultEditedState(Irrelevant); fatdet->setDefaultEditedState(Irrelevant); fatanch->setDefaultEditedState(Irrelevant); fatres->setDefaultEditedState(Irrelevant); clarilres->setDefaultEditedState(Irrelevant); claricres->setDefaultEditedState(Irrelevant); clarisoft->setDefaultEditedState(Irrelevant); sensilc->setDefaultEditedState(Irrelevant); csThreshold->setDefaultEditedState(Irrelevant); blendmasklc->setDefaultEditedState(Irrelevant); radmasklc->setDefaultEditedState(Irrelevant); chromasklc->setDefaultEditedState(Irrelevant); // Contrast by detail levels for (int i = 0; i < 6; i++) { multiplier[i]->setDefaultEditedState(Irrelevant); } chromacbdl->setDefaultEditedState(Irrelevant); threshold->setDefaultEditedState(Irrelevant); sensicb->setDefaultEditedState(Irrelevant); clarityml->setDefaultEditedState(Irrelevant); contresid->setDefaultEditedState(Irrelevant); blurcbdl->setDefaultEditedState(Irrelevant); softradiuscb->setDefaultEditedState(Irrelevant); blendmaskcb->setDefaultEditedState(Irrelevant); radmaskcb->setDefaultEditedState(Irrelevant); chromaskcb->setDefaultEditedState(Irrelevant); gammaskcb->setDefaultEditedState(Irrelevant); slomaskcb->setDefaultEditedState(Irrelevant); lapmaskcb->setDefaultEditedState(Irrelevant); // Denoise noiselumf->setDefaultEditedState(Irrelevant); noiselumf0->setDefaultEditedState(Irrelevant); noiselumf2->setDefaultEditedState(Irrelevant); noiselumc->setDefaultEditedState(Irrelevant); noiselumdetail->setDefaultEditedState(Irrelevant); noiselequal->setDefaultEditedState(Irrelevant); noisechrof->setDefaultEditedState(Irrelevant); noisechroc->setDefaultEditedState(Irrelevant); noisechrodetail->setDefaultEditedState(Irrelevant); adjblur->setDefaultEditedState(Irrelevant); bilateral->setDefaultEditedState(Irrelevant); sensiden->setDefaultEditedState(Irrelevant); detailthr->setDefaultEditedState(Irrelevant); //log encoding sourceGray->setDefaultEditedState(Irrelevant); blackEv->setDefaultEditedState(Irrelevant); whiteEv->setDefaultEditedState(Irrelevant); targetGray->setDefaultEditedState(Irrelevant); detail->setDefaultEditedState(Irrelevant); sensilog->setDefaultEditedState(Irrelevant); baselog->setDefaultEditedState(Irrelevant); } else { const LocallabParamsEdited::LocallabSpotEdited* defSpotState = new LocallabParamsEdited::LocallabSpotEdited(true); if (index != 1 && index < (int)pedited->locallab.spots.size()) { defSpotState = &pedited->locallab.spots.at(index); } // Color & Light lightness->setDefaultEditedState(defSpotState->lightness ? Edited : UnEdited); contrast->setDefaultEditedState(defSpotState->contrast ? Edited : UnEdited); chroma->setDefaultEditedState(defSpotState->chroma ? Edited : UnEdited); labgrid->setEdited((defSpotState->labgridALow || defSpotState->labgridBLow || defSpotState->labgridAHigh || defSpotState->labgridBHigh) ? Edited : UnEdited); labgridmerg->setEdited((defSpotState->labgridALowmerg || defSpotState->labgridBLowmerg || defSpotState->labgridAHighmerg || defSpotState->labgridBHighmerg) ? Edited : UnEdited); sensi->setDefaultEditedState(defSpotState->sensi ? Edited : UnEdited); structcol->setDefaultEditedState(defSpotState->structcol ? Edited : UnEdited); strcol->setDefaultEditedState(defSpotState->strcol ? Edited : UnEdited); strcolab->setDefaultEditedState(defSpotState->strcolab ? Edited : UnEdited); strcolh->setDefaultEditedState(defSpotState->strcolh ? Edited : UnEdited); angcol->setDefaultEditedState(defSpotState->angcol ? Edited : UnEdited); strengthgrid->setDefaultEditedState(defSpotState->strengthgrid ? Edited : UnEdited); blurcolde->setDefaultEditedState(defSpotState->blurcolde ? Edited : UnEdited); blurcol->setDefaultEditedState(defSpotState->blurcol ? Edited : UnEdited); contcol->setDefaultEditedState(defSpotState->contcol ? Edited : UnEdited); blendmaskcol->setDefaultEditedState(defSpotState->blendmaskcol ? Edited : UnEdited); radmaskcol->setDefaultEditedState(defSpotState->radmaskcol ? Edited : UnEdited); chromaskcol->setDefaultEditedState(defSpotState->chromaskcol ? Edited : UnEdited); gammaskcol->setDefaultEditedState(defSpotState->gammaskcol ? Edited : UnEdited); slomaskcol->setDefaultEditedState(defSpotState->slomaskcol ? Edited : UnEdited); shadmaskcol->setDefaultEditedState(defSpotState->shadmaskcol ? Edited : UnEdited); strumaskcol->setDefaultEditedState(defSpotState->strumaskcol ? Edited : UnEdited); lapmaskcol->setDefaultEditedState(defSpotState->lapmaskcol ? Edited : UnEdited); softradiuscol->setDefaultEditedState(defSpotState->softradiuscol ? Edited : UnEdited); opacol->setDefaultEditedState(defSpotState->opacol ? Edited : UnEdited); mercol->setDefaultEditedState(defSpotState->mercol ? Edited : UnEdited); merlucol->setDefaultEditedState(defSpotState->merlucol ? Edited : UnEdited); conthrcol->setDefaultEditedState(defSpotState->conthrcol ? Edited : UnEdited); csThresholdcol->setDefaultEditedState(defSpotState->csthresholdcol ? Edited : UnEdited); // Exposure expcomp->setDefaultEditedState(defSpotState->expcomp ? Edited : UnEdited); hlcompr->setDefaultEditedState(defSpotState->hlcompr ? Edited : UnEdited); hlcomprthresh->setDefaultEditedState(defSpotState->hlcomprthresh ? Edited : UnEdited); black->setDefaultEditedState(defSpotState->black ? Edited : UnEdited); shadex->setDefaultEditedState(defSpotState->shadex ? Edited : UnEdited); shcompr->setDefaultEditedState(defSpotState->shcompr ? Edited : UnEdited); expchroma->setDefaultEditedState(defSpotState->expchroma ? Edited : UnEdited); warm->setDefaultEditedState(defSpotState->warm ? Edited : UnEdited); sensiex->setDefaultEditedState(defSpotState->sensiex ? Edited : UnEdited); structexp->setDefaultEditedState(defSpotState->structexp ? Edited : UnEdited); blurexpde->setDefaultEditedState(defSpotState->blurexpde ? Edited : UnEdited); strexp->setDefaultEditedState(defSpotState->strexp ? Edited : UnEdited); angexp->setDefaultEditedState(defSpotState->angexp ? Edited : UnEdited); blendmaskexp->setDefaultEditedState(defSpotState->blendmaskexp ? Edited : UnEdited); radmaskexp->setDefaultEditedState(defSpotState->radmaskexp ? Edited : UnEdited); chromaskexp->setDefaultEditedState(defSpotState->chromaskexp ? Edited : UnEdited); gammaskexp->setDefaultEditedState(defSpotState->gammaskexp ? Edited : UnEdited); slomaskexp->setDefaultEditedState(defSpotState->slomaskexp ? Edited : UnEdited); lapmaskexp->setDefaultEditedState(defSpotState->lapmaskexp ? Edited : UnEdited); strmaskexp->setDefaultEditedState(defSpotState->strmaskexp ? Edited : UnEdited); angmaskexp->setDefaultEditedState(defSpotState->angmaskexp ? Edited : UnEdited); softradiusexp->setDefaultEditedState(defSpotState->softradiusexp ? Edited : UnEdited); laplacexp->setDefaultEditedState(defSpotState->laplacexp ? Edited : UnEdited); balanexp->setDefaultEditedState(defSpotState->balanexp ? Edited : UnEdited); linear->setDefaultEditedState(defSpotState->linear ? Edited : UnEdited); gamm->setDefaultEditedState(defSpotState->gamm ? Edited : UnEdited); fatamount->setDefaultEditedState(defSpotState->fatamount ? Edited : UnEdited); fatdetail->setDefaultEditedState(defSpotState->fatdetail ? Edited : UnEdited); fatanchor->setDefaultEditedState(defSpotState->fatanchor ? Edited : UnEdited); fatlevel->setDefaultEditedState(defSpotState->fatlevel ? Edited : UnEdited); // Shadow highlight highlights->setDefaultEditedState(defSpotState->highlights ? Edited : UnEdited); h_tonalwidth->setDefaultEditedState(defSpotState->h_tonalwidth ? Edited : UnEdited); shadows->setDefaultEditedState(defSpotState->shadows ? Edited : UnEdited); s_tonalwidth->setDefaultEditedState(defSpotState->s_tonalwidth ? Edited : UnEdited); sh_radius->setDefaultEditedState(defSpotState->sh_radius ? Edited : UnEdited); sensihs->setDefaultEditedState(defSpotState->sensihs ? Edited : UnEdited); blendmaskSH->setDefaultEditedState(defSpotState->blendmaskSH ? Edited : UnEdited); radmaskSH->setDefaultEditedState(defSpotState->radmaskSH ? Edited : UnEdited); blurSHde->setDefaultEditedState(defSpotState->blurSHde ? Edited : UnEdited); strSH->setDefaultEditedState(defSpotState->strSH ? Edited : UnEdited); angSH->setDefaultEditedState(defSpotState->angSH ? Edited : UnEdited); chromaskSH->setDefaultEditedState(defSpotState->chromaskSH ? Edited : UnEdited); gammaskSH->setDefaultEditedState(defSpotState->gammaskSH ? Edited : UnEdited); slomaskSH->setDefaultEditedState(defSpotState->slomaskSH ? Edited : UnEdited); lapmaskSH->setDefaultEditedState(defSpotState->lapmaskSH ? Edited : UnEdited); detailSH->setDefaultEditedState(defSpotState->detailSH ? Edited : UnEdited); for (int i = 0; i < 5; i++) { multipliersh[i]->setDefaultEditedState(defSpotState->multsh[i] ? Edited : UnEdited); } fatamountSH->setDefaultEditedState(defSpotState->fatamountSH ? Edited : UnEdited); fatanchorSH->setDefaultEditedState(defSpotState->fatanchorSH ? Edited : UnEdited); gamSH->setDefaultEditedState(defSpotState->gamSH ? Edited : UnEdited); sloSH->setDefaultEditedState(defSpotState->sloSH ? Edited : UnEdited); // Vibrance saturated->setDefaultEditedState(defSpotState->saturated ? Edited : UnEdited); pastels->setDefaultEditedState(defSpotState->pastels ? Edited : UnEdited); psThreshold->setDefaultEditedState(defSpotState->psthreshold ? Edited : UnEdited); sensiv->setDefaultEditedState(defSpotState->sensiv ? Edited : UnEdited); blendmaskvib->setDefaultEditedState(defSpotState->blendmaskvib ? Edited : UnEdited); radmaskvib->setDefaultEditedState(defSpotState->radmaskvib ? Edited : UnEdited); chromaskvib->setDefaultEditedState(defSpotState->chromaskvib ? Edited : UnEdited); gammaskvib->setDefaultEditedState(defSpotState->gammaskvib ? Edited : UnEdited); slomaskvib->setDefaultEditedState(defSpotState->slomaskvib ? Edited : UnEdited); lapmaskvib->setDefaultEditedState(defSpotState->lapmaskvib ? Edited : UnEdited); strvib->setDefaultEditedState(defSpotState->strvib ? Edited : UnEdited); strvibab->setDefaultEditedState(defSpotState->strvibab ? Edited : UnEdited); strvibh->setDefaultEditedState(defSpotState->strvibh ? Edited : UnEdited); angvib->setDefaultEditedState(defSpotState->angvib ? Edited : UnEdited); // Soft Light streng->setDefaultEditedState(defSpotState->streng ? Edited : UnEdited); sensisf->setDefaultEditedState(defSpotState->sensisf ? Edited : UnEdited); laplace->setDefaultEditedState(defSpotState->laplace ? Edited : UnEdited); // Blur & Noise radius->setDefaultEditedState(defSpotState->radius ? Edited : UnEdited); strength->setDefaultEditedState(defSpotState->strength ? Edited : UnEdited); sensibn->setDefaultEditedState(defSpotState->sensibn ? Edited : UnEdited); itera->setDefaultEditedState(defSpotState->itera ? Edited : UnEdited); isogr->setDefaultEditedState(defSpotState->isogr ? Edited : UnEdited); strengr->setDefaultEditedState(defSpotState->strengr ? Edited : UnEdited); scalegr->setDefaultEditedState(defSpotState->scalegr ? Edited : UnEdited); guidbl->setDefaultEditedState(defSpotState->guidbl ? Edited : UnEdited); epsbl->setDefaultEditedState(defSpotState->epsbl ? Edited : UnEdited); blendmaskbl->setDefaultEditedState(defSpotState->blendmaskbl ? Edited : UnEdited); radmaskbl->setDefaultEditedState(defSpotState->radmaskbl ? Edited : UnEdited); chromaskbl->setDefaultEditedState(defSpotState->chromaskbl ? Edited : UnEdited); gammaskbl->setDefaultEditedState(defSpotState->gammaskbl ? Edited : UnEdited); slomaskbl->setDefaultEditedState(defSpotState->slomaskbl ? Edited : UnEdited); lapmaskbl->setDefaultEditedState(defSpotState->lapmaskbl ? Edited : UnEdited); shadmaskbl->setDefaultEditedState(defSpotState->shadmaskbl ? Edited : UnEdited); strumaskbl->setDefaultEditedState(defSpotState->strumaskbl ? Edited : UnEdited); csThresholdblur->setDefaultEditedState(defSpotState->csthresholdblur ? Edited : UnEdited); // Tone Mapping stren->setDefaultEditedState(defSpotState->stren ? Edited : UnEdited); gamma->setDefaultEditedState(defSpotState->gamma ? Edited : UnEdited); estop->setDefaultEditedState(defSpotState->estop ? Edited : UnEdited); scaltm->setDefaultEditedState(defSpotState->scaltm ? Edited : UnEdited); rewei->setDefaultEditedState(defSpotState->rewei ? Edited : UnEdited); satur->setDefaultEditedState(defSpotState->satur ? Edited : UnEdited); sensitm->setDefaultEditedState(defSpotState->sensitm ? Edited : UnEdited); softradiustm->setDefaultEditedState(defSpotState->softradiustm ? Edited : UnEdited); amount->setDefaultEditedState(defSpotState->amount ? Edited : UnEdited); blendmasktm->setDefaultEditedState(defSpotState->blendmasktm ? Edited : UnEdited); radmasktm->setDefaultEditedState(defSpotState->radmasktm ? Edited : UnEdited); chromasktm->setDefaultEditedState(defSpotState->chromasktm ? Edited : UnEdited); gammasktm->setDefaultEditedState(defSpotState->gammasktm ? Edited : UnEdited); slomasktm->setDefaultEditedState(defSpotState->slomasktm ? Edited : UnEdited); lapmasktm->setDefaultEditedState(defSpotState->lapmasktm ? Edited : UnEdited); // Retinex str->setDefaultEditedState(defSpotState->str ? Edited : UnEdited); chrrt->setDefaultEditedState(defSpotState->chrrt ? Edited : UnEdited); neigh->setDefaultEditedState(defSpotState->neigh ? Edited : UnEdited); vart->setDefaultEditedState(defSpotState->vart ? Edited : UnEdited); offs->setDefaultEditedState(defSpotState->offs ? Edited : UnEdited); dehaz->setDefaultEditedState(defSpotState->dehaz ? Edited : UnEdited); depth->setDefaultEditedState(defSpotState->depth ? Edited : UnEdited); sensih->setDefaultEditedState(defSpotState->sensih ? Edited : UnEdited); softradiusret->setDefaultEditedState(defSpotState->softradiusret ? Edited : UnEdited); blendmaskreti->setDefaultEditedState(defSpotState->blendmaskreti ? Edited : UnEdited); radmaskreti->setDefaultEditedState(defSpotState->radmaskreti ? Edited : UnEdited); chromaskreti->setDefaultEditedState(defSpotState->chromaskreti ? Edited : UnEdited); gammaskreti->setDefaultEditedState(defSpotState->gammaskreti ? Edited : UnEdited); slomaskreti->setDefaultEditedState(defSpotState->slomaskreti ? Edited : UnEdited); lapmaskreti->setDefaultEditedState(defSpotState->lapmaskreti ? Edited : UnEdited); scalereti->setDefaultEditedState(defSpotState->scalereti ? Edited : UnEdited); darkness->setDefaultEditedState(defSpotState->darkness ? Edited : UnEdited); lightnessreti->setDefaultEditedState(defSpotState->lightnessreti ? Edited : UnEdited); limd->setDefaultEditedState(defSpotState->limd ? Edited : UnEdited); cliptm->setDefaultEditedState(defSpotState->cliptm ? Edited : UnEdited); // Sharpening sharcontrast->setDefaultEditedState(defSpotState->sharcontrast ? Edited : UnEdited); sharradius->setDefaultEditedState(defSpotState->sharradius ? Edited : UnEdited); sharamount->setDefaultEditedState(defSpotState->sharamount ? Edited : UnEdited); shardamping->setDefaultEditedState(defSpotState->shardamping ? Edited : UnEdited); shariter->setDefaultEditedState(defSpotState->shariter ? Edited : UnEdited); sharblur->setDefaultEditedState(defSpotState->sharblur ? Edited : UnEdited); sensisha->setDefaultEditedState(defSpotState->sensisha ? Edited : UnEdited); // Local Contrast lcradius->setDefaultEditedState(defSpotState->lcradius ? Edited : UnEdited); lcamount->setDefaultEditedState(defSpotState->lcamount ? Edited : UnEdited); lcdarkness->setDefaultEditedState(defSpotState->lcdarkness ? Edited : UnEdited); lclightness->setDefaultEditedState(defSpotState->lclightness ? Edited : UnEdited); levelwav->setDefaultEditedState(defSpotState->levelwav ? Edited : UnEdited); residcont->setDefaultEditedState(defSpotState->residcont ? Edited : UnEdited); residblur->setDefaultEditedState(defSpotState->residblur ? Edited : UnEdited); levelblur->setDefaultEditedState(defSpotState->levelblur ? Edited : UnEdited); residchro->setDefaultEditedState(defSpotState->residchro ? Edited : UnEdited); sigma->setDefaultEditedState(defSpotState->sigma ? Edited : UnEdited); offset->setDefaultEditedState(defSpotState->offset ? Edited : UnEdited); chromalev->setDefaultEditedState(defSpotState->chromalev ? Edited : UnEdited); chromablu->setDefaultEditedState(defSpotState->chromablu ? Edited : UnEdited); fatdet->setDefaultEditedState(defSpotState->fatdet ? Edited : UnEdited); fatanch->setDefaultEditedState(defSpotState->fatanch ? Edited : UnEdited); fatres->setDefaultEditedState(defSpotState->fatres ? Edited : UnEdited); clarilres->setDefaultEditedState(defSpotState->clarilres ? Edited : UnEdited); claricres->setDefaultEditedState(defSpotState->claricres ? Edited : UnEdited); clarisoft->setDefaultEditedState(defSpotState->clarisoft ? Edited : UnEdited); sensilc->setDefaultEditedState(defSpotState->sensilc ? Edited : UnEdited); csThreshold->setDefaultEditedState(defSpotState->csthreshold ? Edited : UnEdited); blendmasklc->setDefaultEditedState(defSpotState->blendmasklc ? Edited : UnEdited); radmasklc->setDefaultEditedState(defSpotState->radmasklc ? Edited : UnEdited); chromasklc->setDefaultEditedState(defSpotState->chromasklc ? Edited : UnEdited); // Contrast by detail levels for (int i = 0; i < 6; i++) { multiplier[i]->setDefaultEditedState(defSpotState->mult[i] ? Edited : UnEdited); } chromacbdl->setDefaultEditedState(defSpotState->chromacbdl ? Edited : UnEdited); threshold->setDefaultEditedState(defSpotState->threshold ? Edited : UnEdited); sensicb->setDefaultEditedState(defSpotState->sensicb ? Edited : UnEdited); clarityml->setDefaultEditedState(defSpotState->clarityml ? Edited : UnEdited); contresid->setDefaultEditedState(defSpotState->contresid ? Edited : UnEdited); blurcbdl->setDefaultEditedState(defSpotState->blurcbdl ? Edited : UnEdited); softradiuscb->setDefaultEditedState(defSpotState->softradiuscb ? Edited : UnEdited); blendmaskcb->setDefaultEditedState(defSpotState->blendmaskcb ? Edited : UnEdited); radmaskcb->setDefaultEditedState(defSpotState->radmaskcb ? Edited : UnEdited); chromaskcb->setDefaultEditedState(defSpotState->chromaskcb ? Edited : UnEdited); gammaskcb->setDefaultEditedState(defSpotState->gammaskcb ? Edited : UnEdited); slomaskcb->setDefaultEditedState(defSpotState->slomaskcb ? Edited : UnEdited); lapmaskcb->setDefaultEditedState(defSpotState->lapmaskcb ? Edited : UnEdited); // Denoise noiselumf->setDefaultEditedState(defSpotState->noiselumf ? Edited : UnEdited); noiselumf0->setDefaultEditedState(defSpotState->noiselumf0 ? Edited : UnEdited); noiselumf2->setDefaultEditedState(defSpotState->noiselumf2 ? Edited : UnEdited); noiselumc->setDefaultEditedState(defSpotState->noiselumc ? Edited : UnEdited); noiselumdetail->setDefaultEditedState(defSpotState->noiselumdetail ? Edited : UnEdited); noiselequal->setDefaultEditedState(defSpotState->noiselequal ? Edited : UnEdited); noisechrof->setDefaultEditedState(defSpotState->noisechrof ? Edited : UnEdited); noisechroc->setDefaultEditedState(defSpotState->noisechroc ? Edited : UnEdited); noisechrodetail->setDefaultEditedState(defSpotState->noisechrodetail ? Edited : UnEdited); adjblur->setDefaultEditedState(defSpotState->adjblur ? Edited : UnEdited); bilateral->setDefaultEditedState(defSpotState->bilateral ? Edited : UnEdited); sensiden->setDefaultEditedState(defSpotState->sensiden ? Edited : UnEdited); detailthr->setDefaultEditedState(defSpotState->detailthr ? Edited : UnEdited); //log encoding sourceGray->setDefaultEditedState(defSpotState->sourceGray ? Edited : UnEdited); blackEv->setDefaultEditedState(defSpotState->blackEv ? Edited : UnEdited); whiteEv->setDefaultEditedState(defSpotState->whiteEv ? Edited : UnEdited); targetGray->setDefaultEditedState(defSpotState->targetGray ? Edited : UnEdited); detail->setDefaultEditedState(defSpotState->detail ? Edited : UnEdited); sensilog->setDefaultEditedState(defSpotState->sensilog ? Edited : UnEdited); baselog->setDefaultEditedState(defSpotState->baselog ? Edited : UnEdited); } } void Locallab::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) { // Not used } void Locallab::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) { // Not used } void Locallab::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) { // Not used } void Locallab::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) { if (getEnabled() && expcontrast->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabcsThreshold, csThreshold->getHistoryString()); } } if (getEnabled() && expblur->getEnabled() && complexsoft < 1) { if (listener) { listener->panelChanged(EvlocallabcsThresholdblur, csThresholdblur->getHistoryString()); } } if (getEnabled() && expcolor->getEnabled() && complexsoft < 1) { if (listener) { listener->panelChanged(EvlocallabcsThresholdcol, csThresholdcol->getHistoryString()); } } } void Locallab::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) { // printf("adjusterChangedTS\n"); if (getEnabled() && expvibrance->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabPastSatThreshold, psThreshold->getHistoryString()); } } } void Locallab::adjusterChanged(Adjuster * a, double newval) { // printf("adjusterChanged\n"); // Color & Light if (getEnabled() && expcolor->getEnabled()) { if (a == lightness) { if (listener) { listener->panelChanged(Evlocallablightness, lightness->getTextValue()); } } if (a == contrast) { if (listener) { listener->panelChanged(Evlocallabcontrast, contrast->getTextValue()); } } if (a == chroma) { if (listener) { listener->panelChanged(Evlocallabchroma, chroma->getTextValue()); } } if (a == strengthgrid) { if (listener) { listener->panelChanged(EvLocallabLabstrengthgrid, strengthgrid->getTextValue()); } } if (a == sensi) { if (listener) { listener->panelChanged(Evlocallabsensi, sensi->getTextValue()); } } if (a == blurcolde) { if (listener) { listener->panelChanged(Evlocallabblurcolde, blurcolde->getTextValue()); } } if (a == blurcol) { if (listener) { listener->panelChanged(Evlocallabblurcol, blurcol->getTextValue()); } } if (a == structcol) { if (listener) { listener->panelChanged(Evlocallabstructcol, structcol->getTextValue()); } } if (a == contcol) { if (listener) { listener->panelChanged(Evlocallabcontcol, contcol->getTextValue()); } } if (a == strcol) { if (listener) { listener->panelChanged(Evlocallabstrcol, strcol->getTextValue()); } } if (a == strcolab) { if (listener) { listener->panelChanged(Evlocallabstrcolab, strcolab->getTextValue()); } } if (a == strcolh) { if (listener) { listener->panelChanged(Evlocallabstrcolh, strcolh->getTextValue()); } } if (a == angcol) { if (listener) { listener->panelChanged(Evlocallabangcol, angcol->getTextValue()); } } if (a == blendmaskcol) { if (listener) { listener->panelChanged(Evlocallabblendmaskcol, blendmaskcol->getTextValue()); } } if (a == radmaskcol) { if (listener) { listener->panelChanged(Evlocallabradmaskcol, radmaskcol->getTextValue()); } } if (a == chromaskcol) { if (listener) { listener->panelChanged(Evlocallabchromaskcol, chromaskcol->getTextValue()); } } if (a == gammaskcol) { if (listener) { listener->panelChanged(Evlocallabgammaskcol, gammaskcol->getTextValue()); } } if (a == slomaskcol) { if (listener) { listener->panelChanged(Evlocallabslomaskcol, slomaskcol->getTextValue()); } } if (a == shadmaskcol) { if (listener) { listener->panelChanged(Evlocallabshadmaskcol, shadmaskcol->getTextValue()); } } if (a == strumaskcol) { if (listener) { listener->panelChanged(Evlocallabstrumaskcol, strumaskcol->getTextValue()); } } if (a == lapmaskcol) { if (listener) { listener->panelChanged(Evlocallablapmaskcol, lapmaskcol->getTextValue()); } } if (a == softradiuscol) { if (listener) { listener->panelChanged(Evlocallabsoftradiuscol, softradiuscol->getTextValue()); } } if (a == opacol) { if (listener) { listener->panelChanged(Evlocallabopacol, opacol->getTextValue()); } } if (a == mercol) { if (listener) { listener->panelChanged(Evlocallabmercol, mercol->getTextValue()); } } if (a == merlucol) { if (listener) { listener->panelChanged(Evlocallabmerlucol, merlucol->getTextValue()); } } if (a == conthrcol) { if (listener) { listener->panelChanged(Evlocallabconthrcol, conthrcol->getTextValue()); } } } // Exposure if (a == black) { // Update Exposure GUI according to black adjuster state (to be compliant with updateSpecificGUIState function) if (multiImage && black->getEditedState() != Edited) { shcompr->set_sensitive(true); } else { shcompr->set_sensitive(!((int)black->getValue() == 0)); // At black = 0, shcompr value has no effect } } if (a == shadex) { // Update Exposure GUI according to shadex adjuster state (to be compliant with updateSpecificGUIState function) if (multiImage && shadex->getEditedState() != Edited) { shcompr->set_sensitive(true); } else { shcompr->set_sensitive(!((int)shadex->getValue() == 0)); // At black = 0, shcompr value has no effect } } if (getEnabled() && expexpose->getEnabled()) { if (a == expcomp) { if (listener) { listener->panelChanged(Evlocallabexpcomp, expcomp->getTextValue()); } } if (a == hlcompr) { if (listener) { listener->panelChanged(Evlocallabhlcompr, hlcompr->getTextValue()); } } if (a == hlcomprthresh) { if (listener) { listener->panelChanged(Evlocallabhlcomprthresh, hlcomprthresh->getTextValue()); } } if (a == black) { if (listener) { listener->panelChanged(Evlocallabblack, black->getTextValue()); } } if (a == shadex) { if (listener) { listener->panelChanged(Evlocallabshadex, shadex->getTextValue()); } } if (a == shcompr) { if (listener) { listener->panelChanged(Evlocallabshcompr, shcompr->getTextValue()); } } if (a == expchroma) { if (listener) { listener->panelChanged(Evlocallabexpchroma, expchroma->getTextValue()); } } if (a == warm) { if (listener) { listener->panelChanged(Evlocallabwarm, warm->getTextValue()); } } if (a == sensiex) { if (listener) { listener->panelChanged(Evlocallabsensiex, sensiex->getTextValue()); } } if (a == structexp) { if (listener) { listener->panelChanged(Evlocallabstructexp, structexp->getTextValue()); } } if (a == blurexpde) { if (listener) { listener->panelChanged(Evlocallabblurexpde, blurexpde->getTextValue()); } } if (a == strexp) { if (listener) { listener->panelChanged(Evlocallabstrexp, strexp->getTextValue()); } } if (a == angexp) { if (listener) { listener->panelChanged(Evlocallabangexp, angexp->getTextValue()); } } if (a == blendmaskexp) { if (listener) { listener->panelChanged(Evlocallabblendmaskexp, blendmaskexp->getTextValue()); } } if (a == radmaskexp) { if (listener) { listener->panelChanged(Evlocallabradmaskexp, radmaskexp->getTextValue()); } } if (a == chromaskexp) { if (listener) { listener->panelChanged(Evlocallabchromaskexp, chromaskexp->getTextValue()); } } if (a == gammaskexp) { if (listener) { listener->panelChanged(Evlocallabgammaskexp, gammaskexp->getTextValue()); } } if (a == slomaskexp) { if (listener) { listener->panelChanged(Evlocallabslomaskexp, slomaskexp->getTextValue()); } } if (a == lapmaskexp) { if (listener) { listener->panelChanged(Evlocallablapmaskexp, lapmaskexp->getTextValue()); } } if (a == strmaskexp) { if (listener) { listener->panelChanged(Evlocallabstrmaskexp, strmaskexp->getTextValue()); } } if (a == angmaskexp) { if (listener) { listener->panelChanged(Evlocallabangmaskexp, angmaskexp->getTextValue()); } } if (a == softradiusexp) { if (listener) { listener->panelChanged(Evlocallabsoftradiusexp, softradiusexp->getTextValue()); } } if (a == laplacexp) { if (listener) { listener->panelChanged(Evlocallablaplacexp, laplacexp->getTextValue()); } } if (a == balanexp) { if (listener) { listener->panelChanged(Evlocallabbalanexp, balanexp->getTextValue()); } } if (a == linear) { if (listener) { listener->panelChanged(Evlocallablinear, linear->getTextValue()); } } if (a == gamm) { if (listener) { listener->panelChanged(Evlocallabgamm, gamm->getTextValue()); } } if (a == fatamount) { if (listener) { listener->panelChanged(Evlocallabfatamount, fatamount->getTextValue()); } } if (a == fatdetail) { if (listener) { listener->panelChanged(Evlocallabfatdetail, fatdetail->getTextValue()); } } if (a == fatanchor) { if (listener) { listener->panelChanged(Evlocallabfatanchor, fatanchor->getTextValue()); } } if (a == fatlevel) { if (listener) { listener->panelChanged(Evlocallabfatlevel, fatlevel->getTextValue()); } } } if (getEnabled() && expshadhigh->getEnabled()) { if (a == multipliersh[0] || a == multipliersh[1] || a == multipliersh[2] || a == multipliersh[3] || a == multipliersh[4]) { if (listener) { listener->panelChanged(EvlocallabEqualizersh, Glib::ustring::compose("%1, %2, %3, %4, %5", Glib::ustring::format(std::fixed, std::setprecision(2), multipliersh[0]->getIntValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multipliersh[1]->getIntValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multipliersh[2]->getIntValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multipliersh[3]->getIntValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multipliersh[4]->getIntValue()))); } } if (a == highlights) { if (listener) { listener->panelChanged(Evlocallabhighlights, highlights->getTextValue()); } } if (a == h_tonalwidth) { if (listener) { listener->panelChanged(Evlocallabh_tonalwidth, h_tonalwidth->getTextValue()); } } if (a == shadows) { if (listener) { listener->panelChanged(Evlocallabshadows, shadows->getTextValue()); } } if (a == s_tonalwidth) { if (listener) { listener->panelChanged(Evlocallabs_tonalwidth, s_tonalwidth->getTextValue()); } } if (a == sh_radius) { if (listener) { listener->panelChanged(Evlocallabsh_radius, sh_radius->getTextValue()); } } if (a == sensihs) { if (listener) { listener->panelChanged(Evlocallabsensihs, sensihs->getTextValue()); } } if (a == blendmaskSH) { if (listener) { listener->panelChanged(EvlocallabblendmaskSH, blendmaskSH->getTextValue()); } } if (a == radmaskSH) { if (listener) { listener->panelChanged(EvlocallabradmaskSH, radmaskSH->getTextValue()); } } if (a == blurSHde) { if (listener) { listener->panelChanged(EvlocallabblurSHde, blurSHde->getTextValue()); } } if (a == strSH) { if (listener) { listener->panelChanged(EvlocallabstrSH, strSH->getTextValue()); } } if (a == angSH) { if (listener) { listener->panelChanged(EvlocallabangSH, angSH->getTextValue()); } } if (a == chromaskSH) { if (listener) { listener->panelChanged(EvlocallabchromaskSH, chromaskSH->getTextValue()); } } if (a == gammaskSH) { if (listener) { listener->panelChanged(EvlocallabgammaskSH, gammaskSH->getTextValue()); } } if (a == slomaskSH) { if (listener) { listener->panelChanged(EvlocallabslomaskSH, slomaskSH->getTextValue()); } } if (a == lapmaskSH) { if (listener) { listener->panelChanged(EvlocallablapmaskSH, lapmaskSH->getTextValue()); } } if (a == detailSH) { if (listener) { listener->panelChanged(EvlocallabdetailSH, detailSH->getTextValue()); } } if (a == fatamountSH) { if (listener) { listener->panelChanged(EvlocallabfatamountSH, fatamountSH->getTextValue()); } } if (a == fatanchorSH) { if (listener) { listener->panelChanged(EvlocallabfatanchorSH, fatanchorSH->getTextValue()); } } if (a == gamSH) { if (listener) { listener->panelChanged(EvlocallabgamSH, gamSH->getTextValue()); } } if (a == sloSH) { if (listener) { listener->panelChanged(EvlocallabsloSH, sloSH->getTextValue()); } } } // Vibrance if (a == pastels && pastSatTog->get_active() && !(multiImage && pastSatTog->get_inconsistent())) { saturated->setValue(newval); } if (getEnabled() && expvibrance->getEnabled()) { if (a == saturated && !pastSatTog->get_active()) { if (listener) { listener->panelChanged(EvlocallabSaturated, saturated->getTextValue()); } } if (a == pastels) { if (listener) { listener->panelChanged(EvlocallabPastels, pastels->getTextValue()); } } if (a == sensiv) { if (listener) { listener->panelChanged(Evlocallabsensiv, sensiv->getTextValue()); } } if (a == blendmaskvib) { if (listener) { listener->panelChanged(Evlocallabblendmaskvi, blendmaskvib->getTextValue()); } } if (a == radmaskvib) { if (listener) { listener->panelChanged(Evlocallabradmaskvib, radmaskvib->getTextValue()); } } if (a == chromaskvib) { if (listener) { listener->panelChanged(Evlocallabchromaskvib, chromaskvib->getTextValue()); } } if (a == gammaskvib) { if (listener) { listener->panelChanged(Evlocallabgammaskvib, gammaskvib->getTextValue()); } } if (a == slomaskvib) { if (listener) { listener->panelChanged(Evlocallabslomaskvib, slomaskvib->getTextValue()); } } if (a == lapmaskvib) { if (listener) { listener->panelChanged(Evlocallablapmaskvib, lapmaskvib->getTextValue()); } } if (a == strvib) { if (listener) { listener->panelChanged(Evlocallabstrvib, strvib->getTextValue()); } } if (a == strvibab) { if (listener) { listener->panelChanged(Evlocallabstrvibab, strvibab->getTextValue()); } } if (a == strvibh) { if (listener) { listener->panelChanged(Evlocallabstrvibh, strvibh->getTextValue()); } } if (a == angvib) { if (listener) { listener->panelChanged(Evlocallabangvib, angvib->getTextValue()); } } } // Soft Light if (getEnabled() && expsoft->getEnabled()) { if (a == streng) { if (listener) { listener->panelChanged(Evlocallabstreng, streng->getTextValue()); } } if (a == sensisf) { if (listener) { listener->panelChanged(Evlocallabsensisf, sensisf->getTextValue()); } } if (a == laplace) { if (listener) { listener->panelChanged(Evlocallablaplace, laplace->getTextValue()); } } } // Blur & Noise if (getEnabled() && (expblur->getEnabled())) { if (a == radius) { if (listener) { listener->panelChanged(Evlocallabradius, radius->getTextValue()); } } if (a == strength) { if (listener) { listener->panelChanged(Evlocallabstrength, strength->getTextValue()); } } if (a == sensibn) { if (listener) { listener->panelChanged(Evlocallabsensibn, sensibn->getTextValue()); } } if (a == itera) { if (listener) { listener->panelChanged(Evlocallabitera, itera->getTextValue()); } } if (a == isogr) { if (listener) { listener->panelChanged(Evlocallabisogr, isogr->getTextValue()); } } if (a == strengr) { if (listener) { listener->panelChanged(Evlocallabstrengr, strengr->getTextValue()); } } if (a == scalegr) { if (listener) { listener->panelChanged(Evlocallabscalegr, scalegr->getTextValue()); } } if (a == guidbl) { if (listener) { listener->panelChanged(Evlocallabguidbl, guidbl->getTextValue()); } } if (a == epsbl) { if (listener) { listener->panelChanged(Evlocallabepsbl, epsbl->getTextValue()); } } } if (getEnabled() && (expblur->getEnabled() || expdenoi->getEnabled())) { if (a == blendmaskbl) { if (listener) { listener->panelChanged(Evlocallabblendmaskbl, blendmaskbl->getTextValue()); } } if (a == radmaskbl) { if (listener) { listener->panelChanged(Evlocallabradmaskbl, radmaskbl->getTextValue()); } } if (a == chromaskbl) { if (listener) { listener->panelChanged(Evlocallabchromaskbl, chromaskbl->getTextValue()); } } if (a == gammaskbl) { if (listener) { listener->panelChanged(Evlocallabgammaskbl, gammaskbl->getTextValue()); } } if (a == slomaskbl) { if (listener) { listener->panelChanged(Evlocallabslomaskbl, slomaskbl->getTextValue()); } } if (a == lapmaskbl) { if (listener) { listener->panelChanged(Evlocallablapmaskbl, lapmaskbl->getTextValue()); } } if (a == shadmaskbl) { if (listener) { listener->panelChanged(Evlocallabshadmaskbl, shadmaskbl->getTextValue()); } } if (a == strumaskbl) { if (listener) { listener->panelChanged(Evlocallabstrumaskbl, strumaskbl->getTextValue()); } } } //log encoding if (getEnabled() && (explog->getEnabled())) { } // Tone Mapping if (getEnabled() && exptonemap->getEnabled()) { if (a == stren) { if (listener) { listener->panelChanged(Evlocallabstren, stren->getTextValue()); } } if (a == gamma) { if (listener) { listener->panelChanged(Evlocallabgamma, gamma->getTextValue()); } } if (a == estop) { if (listener) { listener->panelChanged(Evlocallabestop, estop->getTextValue()); } } if (a == scaltm) { if (listener) { listener->panelChanged(Evlocallabscaltm, scaltm->getTextValue()); } } if (a == rewei) { if (listener) { listener->panelChanged(Evlocallabrewei, rewei->getTextValue()); } } if (a == sensitm) { if (listener) { listener->panelChanged(Evlocallabsensitm, sensitm->getTextValue()); } } if (a == softradiustm) { if (listener) { listener->panelChanged(Evlocallabsoftradiustm, softradiustm->getTextValue()); } } if (a == amount) { if (listener) { listener->panelChanged(Evlocallabamount, amount->getTextValue()); } } if (a == satur) { if (listener) { listener->panelChanged(Evlocallabsatur, satur->getTextValue()); } } if (a == blendmasktm) { if (listener) { listener->panelChanged(Evlocallabblendmasktm, blendmasktm->getTextValue()); } } if (a == radmasktm) { if (listener) { listener->panelChanged(Evlocallabradmasktm, radmasktm->getTextValue()); } } if (a == chromasktm) { if (listener) { listener->panelChanged(Evlocallabchromasktm, chromasktm->getTextValue()); } } if (a == gammasktm) { if (listener) { listener->panelChanged(Evlocallabgammasktm, gammasktm->getTextValue()); } } if (a == slomasktm) { if (listener) { listener->panelChanged(Evlocallabslomasktm, slomasktm->getTextValue()); } } if (a == lapmasktm) { if (listener) { listener->panelChanged(Evlocallablapmasktm, lapmasktm->getTextValue()); } } } // Retinex if (getEnabled() && expreti->getEnabled()) { if (a == str) { if (str->getValue() >= 0.1f) { retitoolFrame->show(); } else { retitoolFrame->hide(); } if (listener) { listener->panelChanged(Evlocallabstr, str->getTextValue()); } } if (a == chrrt) { if (listener) { listener->panelChanged(Evlocallabchrrt, chrrt->getTextValue()); } } if (a == neigh) { if (listener) { listener->panelChanged(Evlocallabneigh, neigh->getTextValue()); } } if (a == vart) { if (listener) { listener->panelChanged(Evlocallabvart, vart->getTextValue()); } } if (a == offs) { if (listener) { listener->panelChanged(Evlocallaboffs, offs->getTextValue()); } } if (a == dehaz) { if (listener) { listener->panelChanged(Evlocallabdehaz, dehaz->getTextValue()); } } if (a == depth) { if (listener) { listener->panelChanged(Evlocallabdepth, depth->getTextValue()); } } if (a == sensih) { if (listener) { listener->panelChanged(Evlocallabsensih, sensih->getTextValue()); } } if (a == softradiusret) { if (listener) { listener->panelChanged(Evlocallabsoftradiusret, softradiusret->getTextValue()); } } if (a == blendmaskreti) { if (listener) { listener->panelChanged(Evlocallabblendmaskreti, blendmaskreti->getTextValue()); } } if (a == radmaskreti) { if (listener) { listener->panelChanged(Evlocallabradmaskreti, radmaskreti->getTextValue()); } } if (a == chromaskreti) { if (listener) { listener->panelChanged(Evlocallabchromaskreti, chromaskreti->getTextValue()); } } if (a == gammaskreti) { if (listener) { listener->panelChanged(Evlocallabgammaskreti, gammaskreti->getTextValue()); } } if (a == slomaskreti) { if (listener) { listener->panelChanged(Evlocallabslomaskreti, slomaskreti->getTextValue()); } } if (a == lapmaskreti) { if (listener) { listener->panelChanged(Evlocallablapmaskreti, lapmaskreti->getTextValue()); } } if (a == scalereti) { if (scalereti->getValue() == 1) { LocalcurveEditorgainT->hide(); LocalcurveEditortransT->hide(); softradiusret->hide(); retinexMethod->hide(); } else { LocalcurveEditorgainT->show(); LocalcurveEditortransT->show(); softradiusret->show(); retinexMethod->show(); } if (listener) { listener->panelChanged(Evlocallabscalereti, scalereti->getTextValue()); } } if (a == darkness) { if (listener) { listener->panelChanged(Evlocallabdarkness, darkness->getTextValue()); } } if (a == lightnessreti) { if (listener) { listener->panelChanged(Evlocallablightnessreti, lightnessreti->getTextValue()); } } if (a == limd) { if (listener) { listener->panelChanged(Evlocallablimd, limd->getTextValue()); } } if (a == cliptm) { if (listener) { listener->panelChanged(Evlocallabcliptm, cliptm->getTextValue()); } } } // Sharpening if (getEnabled() && expsharp->getEnabled()) { if (a == sharcontrast) { if (listener) { listener->panelChanged(Evlocallabsharcontrast, sharcontrast->getTextValue()); } } if (a == sharradius) { if (listener) { listener->panelChanged(Evlocallabsharradius, sharradius->getTextValue()); } } if (a == sharamount) { if (listener) { listener->panelChanged(Evlocallabsharamount, sharamount->getTextValue()); } } if (a == shardamping) { if (listener) { listener->panelChanged(Evlocallabshardamping, shardamping->getTextValue()); } } if (a == shariter) { if (listener) { listener->panelChanged(Evlocallabshariter, shariter->getTextValue()); } } if (a == sharblur) { if (listener) { listener->panelChanged(Evlocallabsharblur, sharblur->getTextValue()); } } if (a == sensisha) { if (listener) { listener->panelChanged(Evlocallabsensis, sensisha->getTextValue()); } } } // Local Contrast if (getEnabled() && expcontrast->getEnabled()) { if (a == lcradius) { if (listener) { listener->panelChanged(Evlocallablcradius, lcradius->getTextValue()); } } if (a == lcamount) { if (listener) { listener->panelChanged(Evlocallablcamount, lcamount->getTextValue()); } } if (a == lcdarkness) { if (listener) { listener->panelChanged(Evlocallablcdarkness, lcdarkness->getTextValue()); } } if (a == lclightness) { if (listener) { listener->panelChanged(Evlocallablclightness, lclightness->getTextValue()); } } if (a == levelwav) { if (listener) { listener->panelChanged(Evlocallablevelwav, levelwav->getTextValue()); } } if (a == residcont) { if (listener) { listener->panelChanged(Evlocallabresidcont, residcont->getTextValue()); } } if (a == residblur) { if (listener) { listener->panelChanged(Evlocallabresidblur, residblur->getTextValue()); } } if (a == levelblur) { if (listener) { listener->panelChanged(Evlocallablevelblur, levelblur->getTextValue()); } } if (a == residchro) { if (listener) { listener->panelChanged(Evlocallabresidchro, residchro->getTextValue()); } } if (a == sigma) { if (listener) { listener->panelChanged(Evlocallabsigma, sigma->getTextValue()); } } if (a == offset) { if (listener) { listener->panelChanged(Evlocallaboffset, offset->getTextValue()); } } if (a == chromalev) { if (listener) { listener->panelChanged(Evlocallabchromalev, chromalev->getTextValue()); } } if (a == chromablu) { if (listener) { listener->panelChanged(Evlocallabchromablu, chromablu->getTextValue()); } } if (a == fatdet) { if (listener) { listener->panelChanged(Evlocallabfatdet, fatdet->getTextValue()); } } if (a == fatanch) { if (listener) { listener->panelChanged(Evlocallabfatanch, fatanch->getTextValue()); } } if (a == fatres) { if (listener) { listener->panelChanged(Evlocallabfatres, fatres->getTextValue()); } } if (a == clarilres) { if (listener) { listener->panelChanged(Evlocallabclarilres, clarilres->getTextValue()); } } if (a == claricres) { if (listener) { listener->panelChanged(Evlocallabclaricres, claricres->getTextValue()); } } if (a == clarisoft) { if (listener) { listener->panelChanged(Evlocallabclarisoft, clarisoft->getTextValue()); } } if (a == sensilc) { if (listener) { listener->panelChanged(Evlocallabsensilc, sensilc->getTextValue()); } } if (a == blendmasklc) { if (listener) { listener->panelChanged(Evlocallabblendmasklc, blendmasklc->getTextValue()); } } if (a == radmasklc) { if (listener) { listener->panelChanged(Evlocallabradmasklc, radmasklc->getTextValue()); } } if (a == chromasklc) { if (listener) { listener->panelChanged(Evlocallabchromasklc, chromasklc->getTextValue()); } } } // Contrast by detail levels if (getEnabled() && expcbdl->getEnabled()) { if (a == multiplier[0] || a == multiplier[1] || a == multiplier[2] || a == multiplier[3] || a == multiplier[4] || a == multiplier[5]) { if (listener) { listener->panelChanged(EvlocallabEqualizer, Glib::ustring::compose("%1, %2, %3, %4, %5, %6", Glib::ustring::format(std::fixed, std::setprecision(2), multiplier[0]->getValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multiplier[1]->getValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multiplier[2]->getValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multiplier[3]->getValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multiplier[4]->getValue()), Glib::ustring::format(std::fixed, std::setprecision(2), multiplier[5]->getValue()))); } } if (a == chromacbdl) { if (listener) { listener->panelChanged(Evlocallabchromacbdl, chromacbdl->getTextValue()); } } if (a == threshold) { if (listener) { listener->panelChanged(EvlocallabThresho, threshold->getTextValue()); } } if (a == sensicb) { if (listener) { listener->panelChanged(Evlocallabsensicb, sensicb->getTextValue()); } } if (a == clarityml) { //contresid->setValue(0.); if (listener) { listener->panelChanged(EvLocallabclarityml, clarityml->getTextValue()); } } if (a == contresid) { if (listener) { listener->panelChanged(EvLocallabcontresid, contresid->getTextValue()); } } if (a == blurcbdl) { if (listener) { listener->panelChanged(EvLocallabblurcbdl, blurcbdl->getTextValue()); } } if (a == softradiuscb) { if (listener) { listener->panelChanged(Evlocallabsoftradiuscb, softradiuscb->getTextValue()); } } if (a == blendmaskcb) { if (listener) { listener->panelChanged(Evlocallabblendmaskcb, blendmaskcb->getTextValue()); } } if (a == radmaskcb) { if (listener) { listener->panelChanged(Evlocallabradmaskcb, radmaskcb->getTextValue()); } } if (a == chromaskcb) { if (listener) { listener->panelChanged(Evlocallabchromaskcb, chromaskcb->getTextValue()); } } if (a == gammaskcb) { if (listener) { listener->panelChanged(Evlocallabgammaskcb, gammaskcb->getTextValue()); } } if (a == slomaskcb) { if (listener) { listener->panelChanged(Evlocallabslomaskcb, slomaskcb->getTextValue()); } } if (a == lapmaskcb) { if (listener) { listener->panelChanged(Evlocallablapmaskcb, lapmaskcb->getTextValue()); } } } // Denoise if (getEnabled() && expdenoi->getEnabled()) { if (a == noiselumf) { if (listener) { listener->panelChanged(Evlocallabnoiselumf, noiselumf->getTextValue()); } } if (a == noiselumf0) { if (listener) { listener->panelChanged(Evlocallabnoiselumf0, noiselumf0->getTextValue()); } } if (a == noiselumf2) { if (listener) { listener->panelChanged(Evlocallabnoiselumf2, noiselumf2->getTextValue()); } } if (a == noiselumc) { if (listener) { listener->panelChanged(Evlocallabnoiselumc, noiselumc->getTextValue()); } } if (a == noiselumdetail) { if (listener) { listener->panelChanged(Evlocallabnoiselumdetail, noiselumdetail->getTextValue()); } } if (a == noiselequal) { if (listener) { listener->panelChanged(Evlocallabnoiselequal, noiselequal->getTextValue()); } } if (a == noisechrof) { if (listener) { listener->panelChanged(Evlocallabnoisechrof, noisechrof->getTextValue()); } } if (a == noisechroc) { if (listener) { listener->panelChanged(Evlocallabnoisechroc, noisechroc->getTextValue()); } } if (a == noisechrodetail) { if (listener) { listener->panelChanged(Evlocallabnoisechrodetail, noisechrodetail->getTextValue()); } } if (a == adjblur) { if (listener) { listener->panelChanged(Evlocallabadjblur, adjblur->getTextValue()); } } if (a == bilateral) { if (listener) { listener->panelChanged(Evlocallabbilateral, bilateral->getTextValue()); } } if (a == sensiden) { if (listener) { listener->panelChanged(Evlocallabsensiden, sensiden->getTextValue()); } } if (a == detailthr) { if (listener) { listener->panelChanged(Evlocallabdetailthr, detailthr->getTextValue()); } } } //log encoding if (getEnabled() && explog->getEnabled()) { if (a != sourceGray && a != targetGray && a != detail) { // autocompute->set_active(false); } if (a == sourceGray) { if (listener) { // printf("OK 1\n"); // if(autocompute->get_active()) printf("AUTO\n"); else printf("PAS\n"); listener->panelChanged(EvlocallabsourceGray, sourceGray->getTextValue()); //listener->panelChanged(autocompute->get_active() ? EvlocallabsourceGrayAuto : EvlocallabsourceGray, a->getTextValue()); } } if (a == blackEv) { if (listener) { listener->panelChanged(EvlocallabblackEv, blackEv->getTextValue()); } } if (a == whiteEv) { if (listener) { listener->panelChanged(EvlocallabwhiteEv, whiteEv->getTextValue()); } } if (a == targetGray) { if (listener) { listener->panelChanged(EvlocallabtargetGray, targetGray->getTextValue()); } } if (a == detail) { if (listener) { listener->panelChanged(Evlocallabdetail, detail->getTextValue()); } } if (a == sensilog) { if (listener) { listener->panelChanged(Evlocallabsensilog, sensilog->getTextValue()); } } if (a == baselog) { if (listener) { listener->panelChanged(Evlocallabbaselog, baselog->getTextValue()); } } } } void Locallab::enabledChanged() { if (listener) { if (get_inconsistent()) { listener->panelChanged(EvlocallabEnabled, M("GENERAL_UNCHANGED")); } else if (getEnabled()) { listener->panelChanged(EvlocallabEnabled, M("GENERAL_ENABLED")); } else { listener->panelChanged(EvlocallabEnabled, M("GENERAL_DISABLED")); } } } void Locallab::trimValues(rtengine::procparams::ProcParams * pp) { // TODO } void Locallab::setBatchMode(bool batchMode) { // printf("BatchMode : %d\n", batchMode); ToolPanel::setBatchMode(batchMode); // Set batch mode for controlspotpanel expsettings->setBatchMode(batchMode); // Set batch mode for adjusters and threshold adjusters // Color & Light lightness->showEditedCB(); contrast->showEditedCB(); chroma->showEditedCB(); sensi->showEditedCB(); structcol->showEditedCB(); strcol->showEditedCB(); strcolab->showEditedCB(); strcolh->showEditedCB(); angcol->showEditedCB(); strengthgrid->showEditedCB(); blurcolde->showEditedCB(); blurcol->showEditedCB(); contcol->showEditedCB(); blendmaskcol->showEditedCB(); radmaskcol->showEditedCB(); chromaskcol->showEditedCB(); gammaskcol->showEditedCB(); slomaskcol->showEditedCB(); shadmaskcol->showEditedCB(); strumaskcol->showEditedCB(); lapmaskcol->showEditedCB(); softradiuscol->showEditedCB(); opacol->showEditedCB(); mercol->showEditedCB(); merlucol->showEditedCB(); conthrcol->showEditedCB(); csThresholdcol->showEditedCB(); // Exposure expcomp->showEditedCB(); hlcompr->showEditedCB(); hlcomprthresh->showEditedCB(); black->showEditedCB(); shadex->showEditedCB(); shcompr->showEditedCB(); expchroma->showEditedCB(); warm->showEditedCB(); sensiex->showEditedCB(); structexp->showEditedCB(); blurexpde->showEditedCB(); strexp->showEditedCB(); angexp->showEditedCB(); blendmaskexp->showEditedCB(); radmaskexp->showEditedCB(); chromaskexp->showEditedCB(); gammaskexp->showEditedCB(); slomaskexp->showEditedCB(); lapmaskexp->showEditedCB(); strmaskexp->showEditedCB(); angmaskexp->showEditedCB(); softradiusexp->showEditedCB(); laplacexp->showEditedCB(); balanexp->showEditedCB(); linear->showEditedCB(); gamm->showEditedCB(); fatamount->showEditedCB(); fatdetail->showEditedCB(); fatanchor->showEditedCB(); fatlevel->showEditedCB(); //Shadow Highlight highlights->showEditedCB(); h_tonalwidth->showEditedCB(); shadows->showEditedCB(); s_tonalwidth->showEditedCB(); sh_radius->showEditedCB(); sensihs->showEditedCB(); blendmaskSH->showEditedCB(); radmaskSH->showEditedCB(); blurSHde->showEditedCB(); strSH->showEditedCB(); angSH->showEditedCB(); chromaskSH->showEditedCB(); gammaskSH->showEditedCB(); slomaskSH->showEditedCB(); lapmaskSH->showEditedCB(); detailSH->showEditedCB(); for (int i = 0; i < 5; i++) { multipliersh[i]->showEditedCB(); } fatamountSH->showEditedCB(); fatanchorSH->showEditedCB(); gamSH->showEditedCB(); sloSH->showEditedCB(); // Vibrance saturated->showEditedCB(); pastels->showEditedCB(); psThreshold->showEditedCB(); sensiv->showEditedCB(); blendmaskvib->showEditedCB(); radmaskvib->showEditedCB(); chromaskvib->showEditedCB(); gammaskvib->showEditedCB(); slomaskvib->showEditedCB(); lapmaskvib->showEditedCB(); strvib->showEditedCB(); strvibab->showEditedCB(); strvibh->showEditedCB(); angvib->showEditedCB(); // Soft Light streng->showEditedCB(); sensisf->showEditedCB(); laplace->showEditedCB(); // Blur & Noise radius->showEditedCB(); streng->showEditedCB(); strength->showEditedCB(); sensibn->showEditedCB(); itera->showEditedCB(); isogr->showEditedCB(); strengr->showEditedCB(); scalegr->showEditedCB(); guidbl->showEditedCB(); epsbl->showEditedCB(); blendmaskbl->showEditedCB(); radmaskbl->showEditedCB(); chromaskbl->showEditedCB(); gammaskbl->showEditedCB(); slomaskbl->showEditedCB(); lapmaskbl->showEditedCB(); shadmaskbl->showEditedCB(); strumaskbl->showEditedCB(); csThresholdblur->showEditedCB(); // Tone Mapping stren->showEditedCB(); gamma->showEditedCB(); estop->showEditedCB(); scaltm->showEditedCB(); rewei->showEditedCB(); satur->showEditedCB(); sensitm->showEditedCB(); softradiustm->showEditedCB(); amount->showEditedCB(); blendmasktm->showEditedCB(); radmasktm->showEditedCB(); chromasktm->showEditedCB(); gammasktm->showEditedCB(); slomasktm->showEditedCB(); lapmasktm->showEditedCB(); // Retinex str->showEditedCB(); chrrt->showEditedCB(); neigh->showEditedCB(); vart->showEditedCB(); offs->showEditedCB(); dehaz->showEditedCB(); depth->showEditedCB(); sensih->showEditedCB(); softradiusret->showEditedCB(); blendmaskreti->showEditedCB(); radmaskreti->showEditedCB(); chromaskreti->showEditedCB(); gammaskreti->showEditedCB(); slomaskreti->showEditedCB(); lapmaskreti->showEditedCB(); scalereti->showEditedCB(); darkness->showEditedCB(); lightnessreti->showEditedCB(); limd->showEditedCB(); cliptm->showEditedCB(); // Sharpening sharradius->showEditedCB(); sharamount->showEditedCB(); shardamping->showEditedCB(); shariter->showEditedCB(); sensisha->showEditedCB(); // Local Contrast lcradius->showEditedCB(); lcamount->showEditedCB(); lcdarkness->showEditedCB(); lclightness->showEditedCB(); levelwav->showEditedCB(); residcont->showEditedCB(); residblur->showEditedCB(); levelblur->showEditedCB(); residchro->showEditedCB(); sigma->showEditedCB(); offset->showEditedCB(); chromalev->showEditedCB(); chromablu->showEditedCB(); fatdet->showEditedCB(); fatanch->showEditedCB(); fatres->showEditedCB(); clarilres->showEditedCB(); claricres->showEditedCB(); clarisoft->showEditedCB(); csThreshold->showEditedCB(); sensilc->showEditedCB(); blendmasklc->showEditedCB(); radmasklc->showEditedCB(); chromasklc->showEditedCB(); // Contrast by detail levels for (int i = 0; i < 6; i++) { multiplier[i]->showEditedCB(); } chromacbdl->showEditedCB(); threshold->showEditedCB(); sensicb->showEditedCB(); clarityml->showEditedCB(); contresid->showEditedCB(); blurcbdl->showEditedCB(); softradiuscb->showEditedCB(); blendmaskcb->showEditedCB(); radmaskcb->showEditedCB(); chromaskcb->showEditedCB(); gammaskcb->showEditedCB(); slomaskcb->showEditedCB(); lapmaskcb->showEditedCB(); // Denoise noiselumf->showEditedCB(); noiselumc->showEditedCB(); noiselumdetail->showEditedCB(); noiselequal->showEditedCB(); noiselumf0->showEditedCB(); noiselumf2->showEditedCB(); noisechroc->showEditedCB(); noisechrodetail->showEditedCB(); adjblur->showEditedCB(); bilateral->showEditedCB(); sensiden->showEditedCB(); detailthr->showEditedCB(); //log encoding sourceGray->showEditedCB(); blackEv->showEditedCB(); whiteEv->showEditedCB(); targetGray->showEditedCB(); detail->showEditedCB(); sensilog->showEditedCB(); baselog->showEditedCB(); // Set batch mode for comboBoxText // Color & Light qualitycurveMethod->append(M("GENERAL_UNCHANGED")); gridMethod->append(M("GENERAL_UNCHANGED")); merMethod->append(M("GENERAL_UNCHANGED")); toneMethod->append(M("GENERAL_UNCHANGED")); mergecolMethod->append(M("GENERAL_UNCHANGED")); //exposure expMethod->append(M("GENERAL_UNCHANGED")); exnoiseMethod->append(M("GENERAL_UNCHANGED")); // softlight shMethod->append(M("GENERAL_UNCHANGED")); softMethod->append(M("GENERAL_UNCHANGED")); // Blur & Noise blMethod->append(M("GENERAL_UNCHANGED")); blurMethod->append(M("GENERAL_UNCHANGED")); medMethod->append(M("GENERAL_UNCHANGED")); // Retinex retinexMethod->append(M("GENERAL_UNCHANGED")); //Local contrast localcontMethod->append(M("GENERAL_UNCHANGED")); // In batch mode, being able to change mask visibility is useless showmaskcolMethod->hide(); showmaskcolMethodinv->hide(); showmaskexpMethod->hide(); showmaskexpMethodinv->hide(); showmaskSHMethod->hide(); showmaskSHMethodinv->hide(); showmaskvibMethod->hide(); showmasklcMethod->hide(); showmaskcbMethod->hide(); showmaskretiMethod->hide(); showmasktmMethod->hide(); showmaskblMethod->hide(); } std::vector Locallab::getCurvePoints(ThresholdSelector* tAdjuster) const { std::vector points; double threshold, transitionWeighting; tAdjuster->getPositions (transitionWeighting, threshold); // ( range -100;+100, range 0;+100 ) transitionWeighting /= 100.; // range -1., +1. threshold /= 100.; // range 0., +1. // Initial point points.push_back(0.); points.push_back(0.); double p2 = 3.0 * threshold / 4.0; // same one than in ipvibrance.cc double s0 = threshold + (1.0 - threshold) / 4.0; // same one than in ipvibrance.cc // point at the beginning of the first linear transition points.push_back(p2); points.push_back(0.); // Y value of the chroma mean point, calculated to get a straight line between p2 and s0 double chromaMean = (threshold / 4.0) / (s0 - p2); // move chromaMean up or down depending on transitionWeighting if (transitionWeighting > 0.0) { // positive values -> give more weight to Saturated chromaMean = (1.0 - chromaMean) * transitionWeighting + chromaMean; } else if (transitionWeighting < 0.0) { // negative values -> give more weight to Pastels chromaMean = chromaMean * transitionWeighting + chromaMean; } // point at the location of the Top cursor, at the end of the first linear transition and the beginning of the second one points.push_back(threshold); points.push_back(chromaMean); if (threshold < 1.0) { // point at the end of the second linear transition points.push_back(s0); points.push_back(1.0); // end point points.push_back(1.0); points.push_back(1.0); } return points; } void Locallab::setEditProvider(EditDataProvider * provider) { expsettings->setEditProvider(provider); } void Locallab::subscribe() { expsettings->subscribe(); } void Locallab::unsubscribe() { expsettings->unsubscribe(); } void Locallab::colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) { float R = 0.f; float G = 0.f; float B = 0.f; if (elemType == ColorCaller::CCET_VERTICAL_BAR) { valY = 0.5; } if (callerId == 1) { // ch - main curve Color::hsv2rgb01(float (valX), float (valY), 0.5f, R, G, B); } else if (callerId == 2) { // cc - bottom bar float value = (1.f - 0.7f) * float (valX) + 0.7f; // whole hue range // Y axis / from 0.15 up to 0.75 (arbitrary values; was 0.45 before) Color::hsv2rgb01(float (valY), float (valX), value, R, G, B); } else if (callerId == 3) { // lc - bottom bar float value = (1.f - 0.7f) * float (valX) + 0.7f; // Y axis / from 0.15 up to 0.75 (arbitrary values; was 0.45 before) Color::hsv2rgb01(float (valY), float (valX), value, R, G, B); } else if (callerId == 4) { // LH - bottom bar Color::hsv2rgb01(float (valX), 0.5f, float (valY), R, G, B); } else if (callerId == 5) { // HH - bottom bar float h = float ((valY - 0.5) * 0.3 + valX); if (h > 1.0f) { h -= 1.0f; } else if (h < 0.0f) { h += 1.0f; } Color::hsv2rgb01(h, 0.5f, 0.5f, R, G, B); } else if (callerId == 6) { // TODO float x = valX - 1.f / 6.f; if (x < 0.f) { x += 1.f; } x = log2lin(x, 3.f); // float x = valX; Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); } else if (callerId == 7) { Color::hsv2rgb01(float(valY), float(valX), 0.5f, R, G, B); } caller->ccRed = double (R); caller->ccGreen = double (G); caller->ccBlue = double (B); } void Locallab::setListener(ToolPanelListener* tpl) { this->listener = tpl; labgrid->setListener(tpl); labgridmerg->setListener(tpl); expsettings->setListener(tpl); } void Locallab::enableListener() { // printf("enableListener\n"); FoldableToolPanel::enableListener(); // Color & Light enablecolorConn.block(false); curvactivConn.block(false); qualitycurveMethodConn.block(false); gridMethodConn.block(false); merMethodConn.block(false); toneMethodConn.block(false); mergecolMethodConn.block(false); inversConn.block(false); specialConn.block(false); toolcolConn.block(false); showmaskcolMethodConn.block(false); showmaskcolMethodConninv.block(false); enaColorMaskConn.block(false); fftColorMaskConn.block(false); // Exposure enableexposeConn.block(false); inversexConn.block(false); showmaskexpMethodConn.block(false); showmaskexpMethodConninv.block(false); expMethodConn.block(false); exnoiseMethodConn.block(false); enaExpMaskConn.block(false); enaExpMaskaftConn.block(false); // Shadow highlight shMethodConn.block(false); enableshadhighConn.block(false); showmaskSHMethodConn.block(false); showmaskSHMethodConninv.block(false); enaSHMaskConn.block(false); inversshConn.block(false); // Vibrance enablevibranceConn.block(false); pskinsconn.block(false); ashiftconn.block(false); pastsattogconn.block(false); showmaskvibMethodConn.block(false); enavibMaskConn.block(false); // Soft Light enablesoftConn.block(false); softMethodConn.block(false); showmasksoftMethodConn.block(false); // Blur & Noise enableblurConn.block(false); blMethodConn.block(false); blurMethodConn.block(false); medMethodConn.block(false); activlumConn.block(false); enablMaskConn.block(false); fftwblConn.block(false); toolblConn.block(false); showmaskblMethodConn.block(false); // Tone Mapping enabletonemapConn.block(false); equiltmConn.block(false); enatmMaskConn.block(false); enatmMaskaftConn.block(false); showmasktmMethodConn.block(false); // Retinex enableretiConn.block(false); retinexMethodConn.block(false); inversretConn.block(false); equilretConn.block(false); loglinConn.block(false); lumonlyConn.block(false); enaretiMaskConn.block(false); enaretiMasktmapConn.block(false); showmaskretiMethodConn.block(false); fftwretiConn.block(false); // Sharpening enablesharpConn.block(false); inversshaConn.block(false); // Local Contrast enablecontrastConn.block(false); localcontMethodConn.block(false); fftwlcConn.block(false); blurlcConn.block(false); origlcConn.block(false); showmasklcMethodConn.block(false); enalcMaskConn.block(false); // Contrast by detail levels enablecbdlConn.block(false); enacbMaskConn.block(false); showmaskcbMethodConn.block(false); // Denoise enabledenoiConn.block(false); //encoding log // autoconn.block(false); enablelogConn.block(false); AutograyConn.block(false); fullimageConn.block(false); } void Locallab::disableListener() { // printf("disableListener\n"); FoldableToolPanel::disableListener(); // Color & Light enablecolorConn.block(true); curvactivConn.block(true); qualitycurveMethodConn.block(true); gridMethodConn.block(true); merMethodConn.block(true); toneMethodConn.block(true); mergecolMethodConn.block(true); inversConn.block(true); specialConn.block(true); toolcolConn.block(true); showmaskcolMethodConn.block(true); showmaskcolMethodConninv.block(true); fftColorMaskConn.block(true); // Exposure enableexposeConn.block(true); inversexConn.block(true); showmaskexpMethodConn.block(true); showmaskexpMethodConninv.block(true); expMethodConn.block(true); exnoiseMethodConn.block(true); enaExpMaskConn.block(true); enaExpMaskaftConn.block(true); // Shadow highlight shMethodConn.block(true); enableshadhighConn.block(true); showmaskSHMethodConn.block(true); showmaskSHMethodConninv.block(true); enaSHMaskConn.block(true); inversshConn.block(true); // Vibrance enablevibranceConn.block(true); pskinsconn.block(true); ashiftconn.block(true); pastsattogconn.block(true); showmaskvibMethodConn.block(true); enavibMaskConn.block(true); // Soft Light enablesoftConn.block(true); softMethodConn.block(true); showmasksoftMethodConn.block(true); // Blur & Noise enableblurConn.block(true); blMethodConn.block(true); blurMethodConn.block(true); medMethodConn.block(true); activlumConn.block(true); enablMaskConn.block(true); fftwblConn.block(true); toolblConn.block(true); showmaskblMethodConn.block(true); // Tone Mapping enabletonemapConn.block(true); equiltmConn.block(true); enatmMaskConn.block(true); enatmMaskaftConn.block(true); showmasktmMethodConn.block(true); // Retinex enableretiConn.block(true); retinexMethodConn.block(true); inversretConn.block(true); equilretConn.block(true); loglinConn.block(true); lumonlyConn.block(true); enaretiMaskConn.block(true); enaretiMasktmapConn.block(true); showmaskretiMethodConn.block(true); fftwretiConn.block(true); // Sharpening enablesharpConn.block(true); inversshaConn.block(true); // Local Contrast enablecontrastConn.block(true); localcontMethodConn.block(true); fftwlcConn.block(true); blurlcConn.block(true); origlcConn.block(true); showmasklcMethodConn.block(true); enalcMaskConn.block(true); // Contrast by detail levels enablecbdlConn.block(true); enacbMaskConn.block(true); showmaskcbMethodConn.block(true); // Denoise enabledenoiConn.block(true); //encoding log // autoconn.block(true); enablelogConn.block(true); AutograyConn.block(true); fullimageConn.block(true); } void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited, int index) { // printf("updateLocallabGUI\n"); ControlSpotPanel::SpotRow* const r = new ControlSpotPanel::SpotRow(); // Update GUI values if (index < pp->locallab.nbspot && index < (int)pp->locallab.spots.size()) { //controlspotpanel if (complexsoft == 2) { r->shapeMethod = 0; r->transitweak = 1; r->transitgrad = 0; } // Color & Light expcolor->setEnabled(pp->locallab.spots.at(index).expcolor); curvactiv->set_active(pp->locallab.spots.at(index).curvactiv); lightness->setValue(pp->locallab.spots.at(index).lightness); contrast->setValue(pp->locallab.spots.at(index).contrast); chroma->setValue(pp->locallab.spots.at(index).chroma); labgrid->setParams(pp->locallab.spots.at(index).labgridALow / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridBLow / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridAHigh / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridBHigh / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, false); //labgridmerg->setParams(pp->locallab.spots.at(index).labgridALowmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridBLowmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridAHighmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridBHighmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, false); labgridmerg->setParams(0, 0, pp->locallab.spots.at(index).labgridAHighmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, pp->locallab.spots.at(index).labgridBHighmerg / rtengine::procparams::LocallabParams::LABGRIDL_CORR_MAX, false); if (complexsoft == 2) { // labgrid->setParams(0, 0, 0, 0, false); } strengthgrid->setValue(pp->locallab.spots.at(index).strengthgrid); sensi->setValue(pp->locallab.spots.at(index).sensi); structcol->setValue(pp->locallab.spots.at(index).structcol); strcol->setValue(pp->locallab.spots.at(index).strcol); angcol->setValue(pp->locallab.spots.at(index).angcol); strcolab->setValue(pp->locallab.spots.at(index).strcolab); strcolh->setValue(pp->locallab.spots.at(index).strcolh); if (pp->locallab.spots.at(index).qualitycurveMethod == "none") { qualitycurveMethod->set_active(0); } else if (pp->locallab.spots.at(index).qualitycurveMethod == "std") { qualitycurveMethod->set_active(1); } if (pp->locallab.spots.at(index).gridMethod == "one") { gridMethod->set_active(0); } else if (pp->locallab.spots.at(index).gridMethod == "two") { gridMethod->set_active(1); } if (pp->locallab.spots.at(index).merMethod == "mone") { merMethod->set_active(0); } else if (pp->locallab.spots.at(index).merMethod == "mtwo") { merMethod->set_active(1); } else if (pp->locallab.spots.at(index).merMethod == "mthr") { merMethod->set_active(2); } else if (pp->locallab.spots.at(index).merMethod == "mfou") { merMethod->set_active(3); } else if (pp->locallab.spots.at(index).merMethod == "mfiv") { merMethod->set_active(4); } if (pp->locallab.spots.at(index).toneMethod == "one") { toneMethod->set_active(0); } else if (pp->locallab.spots.at(index).toneMethod == "two") { toneMethod->set_active(1); } else if (pp->locallab.spots.at(index).toneMethod == "thr") { toneMethod->set_active(2); } else if (pp->locallab.spots.at(index).toneMethod == "fou") { toneMethod->set_active(3); } if (pp->locallab.spots.at(index).mergecolMethod == "one") { mergecolMethod->set_active(0); } else if (pp->locallab.spots.at(index).mergecolMethod == "two") { mergecolMethod->set_active(1); } else if (pp->locallab.spots.at(index).mergecolMethod == "thr") { mergecolMethod->set_active(2); } else if (pp->locallab.spots.at(index).mergecolMethod == "fou") { mergecolMethod->set_active(3); } else if (pp->locallab.spots.at(index).mergecolMethod == "fiv") { mergecolMethod->set_active(4); } else if (pp->locallab.spots.at(index).mergecolMethod == "six") { mergecolMethod->set_active(5); } else if (pp->locallab.spots.at(index).mergecolMethod == "sev") { mergecolMethod->set_active(6); } else if (pp->locallab.spots.at(index).mergecolMethod == "sev0") { mergecolMethod->set_active(7); } else if (pp->locallab.spots.at(index).mergecolMethod == "sev1") { mergecolMethod->set_active(8); } else if (pp->locallab.spots.at(index).mergecolMethod == "sev2") { mergecolMethod->set_active(9); } else if (pp->locallab.spots.at(index).mergecolMethod == "hei") { mergecolMethod->set_active(10); } else if (pp->locallab.spots.at(index).mergecolMethod == "nin") { mergecolMethod->set_active(11); } else if (pp->locallab.spots.at(index).mergecolMethod == "ten") { mergecolMethod->set_active(12); } else if (pp->locallab.spots.at(index).mergecolMethod == "ele") { mergecolMethod->set_active(13); } else if (pp->locallab.spots.at(index).mergecolMethod == "twe") { mergecolMethod->set_active(14); } else if (pp->locallab.spots.at(index).mergecolMethod == "thi") { mergecolMethod->set_active(15); } else if (pp->locallab.spots.at(index).mergecolMethod == "for") { mergecolMethod->set_active(16); } else if (pp->locallab.spots.at(index).mergecolMethod == "hue") { mergecolMethod->set_active(17); } else if (pp->locallab.spots.at(index).mergecolMethod == "sat") { mergecolMethod->set_active(18); } else if (pp->locallab.spots.at(index).mergecolMethod == "col") { mergecolMethod->set_active(19); } else if (pp->locallab.spots.at(index).mergecolMethod == "lum") { mergecolMethod->set_active(20); } if (pp->locallab.spots.at(index).scalereti == 1) { LocalcurveEditorgainT->hide(); LocalcurveEditortransT->hide(); softradiusret->hide(); retinexMethod->hide(); } else { LocalcurveEditorgainT->show(); LocalcurveEditortransT->show(); softradiusret->show(); retinexMethod->show(); } if (complexsoft < 2) { llshape->setCurve(pp->locallab.spots.at(index).llcurve); lcshape->setCurve(pp->locallab.spots.at(index).lccurve); } ccshape->setCurve(pp->locallab.spots.at(index).cccurve); clshape->setCurve(pp->locallab.spots.at(index).clcurve); rgbshape->setCurve(pp->locallab.spots.at(index).rgbcurve); if (complexsoft == 2) { lcshape->reset(); clshape->reset(); LHshape->reset(); HHshape->reset(); rgbshape->reset(); } LHshape->setCurve(pp->locallab.spots.at(index).LHcurve); HHshape->setCurve(pp->locallab.spots.at(index).HHcurve); invers->set_active(pp->locallab.spots.at(index).invers); special->set_active(pp->locallab.spots.at(index).special); toolcol->set_active(pp->locallab.spots.at(index).toolcol); enaColorMask->set_active(pp->locallab.spots.at(index).enaColorMask); fftColorMask->set_active(pp->locallab.spots.at(index).fftColorMask); CCmaskshape->setCurve(pp->locallab.spots.at(index).CCmaskcurve); LLmaskshape->setCurve(pp->locallab.spots.at(index).LLmaskcurve); HHmaskshape->setCurve(pp->locallab.spots.at(index).HHmaskcurve); HHhmaskshape->setCurve(pp->locallab.spots.at(index).HHhmaskcurve); blurcolde->setValue(pp->locallab.spots.at(index).blurcolde); blurcol->setValue(pp->locallab.spots.at(index).blurcol); contcol->setValue(pp->locallab.spots.at(index).contcol); blendmaskcol->setValue(pp->locallab.spots.at(index).blendmaskcol); radmaskcol->setValue(pp->locallab.spots.at(index).radmaskcol); chromaskcol->setValue(pp->locallab.spots.at(index).chromaskcol); gammaskcol->setValue(pp->locallab.spots.at(index).gammaskcol); slomaskcol->setValue(pp->locallab.spots.at(index).slomaskcol); shadmaskcol->setValue(pp->locallab.spots.at(index).shadmaskcol); strumaskcol->setValue(pp->locallab.spots.at(index).strumaskcol); lapmaskcol->setValue(pp->locallab.spots.at(index).lapmaskcol); softradiuscol->setValue(pp->locallab.spots.at(index).softradiuscol); opacol->setValue(pp->locallab.spots.at(index).opacol); mercol->setValue(pp->locallab.spots.at(index).mercol); merlucol->setValue(pp->locallab.spots.at(index).merlucol); conthrcol->setValue(pp->locallab.spots.at(index).conthrcol); Lmaskshape->setCurve(pp->locallab.spots.at(index).Lmaskcurve); LLmaskcolshapewav->setCurve(pp->locallab.spots.at(index).LLmaskcolcurvewav); csThresholdcol->setValue(pp->locallab.spots.at(index).csthresholdcol); if (complexsoft == 2) { HHhmaskshape->reset(); } if (complexsoft == 2) { gammaskcol->setValue(1); slomaskcol->setValue(0); shadmaskcol->setValue(0); strumaskcol->setValue(0); strcolab->setValue(0); strcolh->setValue(0); blurcolde->setValue(5); softradiuscol->setValue(0); special->set_active(false); toolcol->set_active(false); merMethod->set_active(0); } if (complexsoft > 0) { LLmaskcolshapewav->reset(); } if (complexsoft == 2) { lapmaskcol->setValue(0); blurcol->setValue(0.2); contcol->setValue(0.); fftColorMask->set_active(false); } if (fftColorMask->get_active()) { blurcol->setLimits(0.2, 1000., 0.5, 0.2); } else { blurcol->setLimits(0.2, 100., 0.5, 0.2); } blurcol->setValue(pp->locallab.spots.at(index).blurcol); if (complexsoft == 2) { blurcol->setLimits(0.2, 100., 0.5, 0.2); blurcol->setValue(pp->locallab.spots.at(index).blurcol); } // Exposure expexpose->setEnabled(pp->locallab.spots.at(index).expexpose); expcomp->setValue(pp->locallab.spots.at(index).expcomp); hlcompr->setValue(pp->locallab.spots.at(index).hlcompr); hlcomprthresh->setValue(pp->locallab.spots.at(index).hlcomprthresh); black->setValue(pp->locallab.spots.at(index).black); shadex->setValue(pp->locallab.spots.at(index).shadex); shcompr->setValue(pp->locallab.spots.at(index).shcompr); expchroma->setValue(pp->locallab.spots.at(index).expchroma); warm->setValue(pp->locallab.spots.at(index).warm); sensiex->setValue(pp->locallab.spots.at(index).sensiex); structexp->setValue(pp->locallab.spots.at(index).structexp); blurexpde->setValue(pp->locallab.spots.at(index).blurexpde); strexp->setValue(pp->locallab.spots.at(index).strexp); angexp->setValue(pp->locallab.spots.at(index).angexp); shapeexpos->setCurve(pp->locallab.spots.at(index).excurve); inversex->set_active(pp->locallab.spots.at(index).inversex); enaExpMask->set_active(pp->locallab.spots.at(index).enaExpMask); enaExpMaskaft->set_active(pp->locallab.spots.at(index).enaExpMaskaft); CCmaskexpshape->setCurve(pp->locallab.spots.at(index).CCmaskexpcurve); LLmaskexpshape->setCurve(pp->locallab.spots.at(index).LLmaskexpcurve); HHmaskexpshape->setCurve(pp->locallab.spots.at(index).HHmaskexpcurve); blendmaskexp->setValue(pp->locallab.spots.at(index).blendmaskexp); radmaskexp->setValue(pp->locallab.spots.at(index).radmaskexp); chromaskexp->setValue(pp->locallab.spots.at(index).chromaskexp); gammaskexp->setValue(pp->locallab.spots.at(index).gammaskexp); slomaskexp->setValue(pp->locallab.spots.at(index).slomaskexp); lapmaskexp->setValue(pp->locallab.spots.at(index).lapmaskexp); strmaskexp->setValue(pp->locallab.spots.at(index).strmaskexp); angmaskexp->setValue(pp->locallab.spots.at(index).angmaskexp); softradiusexp->setValue(pp->locallab.spots.at(index).softradiusexp); Lmaskexpshape->setCurve(pp->locallab.spots.at(index).Lmaskexpcurve); if (pp->locallab.spots.at(index).expMethod == "std") { expMethod->set_active(0); } else if (pp->locallab.spots.at(index).expMethod == "pde") { expMethod->set_active(1); } if (complexsoft == 2) { expMethod->set_active(1); inversex->set_active(false);//in case off expcomp->setValue(0); hlcompr->setValue(0); hlcomprthresh->setValue(0); black->setValue(0); shadex->setValue(0); shcompr->setValue(0); expchroma->setValue(0); structexp->setValue(0); blurexpde->setValue(5); gammaskexp->setValue(1); slomaskexp->setValue(0); strmaskexp->setValue(0); angmaskexp->setValue(0); softradiusexp->setValue(0); } if (complexsoft > 0) { lapmaskexp->setValue(0); } if (pp->locallab.spots.at(index).exnoiseMethod == "one") { exnoiseMethod->set_active(0); } else if (pp->locallab.spots.at(index).exnoiseMethod == "med") { exnoiseMethod->set_active(1); } else if (pp->locallab.spots.at(index).exnoiseMethod == "medhi") { exnoiseMethod->set_active(2); } /* } else if (pp->locallab.spots.at(index).exnoiseMethod == "wavlo") { exnoiseMethod->set_active(3); } else if (pp->locallab.spots.at(index).exnoiseMethod == "wavme") { exnoiseMethod->set_active(4); } else if (pp->locallab.spots.at(index).exnoiseMethod == "wavhi") { exnoiseMethod->set_active(5); } */ laplacexp->setValue(pp->locallab.spots.at(index).laplacexp); balanexp->setValue(pp->locallab.spots.at(index).balanexp); linear->setValue(pp->locallab.spots.at(index).linear); gamm->setValue(pp->locallab.spots.at(index).gamm); fatamount->setValue(pp->locallab.spots.at(index).fatamount); fatdetail->setValue(pp->locallab.spots.at(index).fatdetail); fatanchor->setValue(pp->locallab.spots.at(index).fatanchor); fatlevel->setValue(pp->locallab.spots.at(index).fatlevel); if (complexsoft > 0) { laplacexp->setValue(0); fatlevel->setValue(2); } // Shadow highlight expshadhigh->setEnabled(pp->locallab.spots.at(index).expshadhigh); highlights->setValue(pp->locallab.spots.at(index).highlights); h_tonalwidth->setValue(pp->locallab.spots.at(index).h_tonalwidth); shadows->setValue(pp->locallab.spots.at(index).shadows); s_tonalwidth->setValue(pp->locallab.spots.at(index).s_tonalwidth); sh_radius->setValue(pp->locallab.spots.at(index).sh_radius); sensihs->setValue(pp->locallab.spots.at(index).sensihs); enaSHMask->set_active(pp->locallab.spots.at(index).enaSHMask); CCmaskSHshape->setCurve(pp->locallab.spots.at(index).CCmaskSHcurve); LLmaskSHshape->setCurve(pp->locallab.spots.at(index).LLmaskSHcurve); HHmaskSHshape->setCurve(pp->locallab.spots.at(index).HHmaskSHcurve); blendmaskSH->setValue(pp->locallab.spots.at(index).blendmaskSH); radmaskSH->setValue(pp->locallab.spots.at(index).radmaskSH); blurSHde->setValue(pp->locallab.spots.at(index).blurSHde); strSH->setValue(pp->locallab.spots.at(index).strSH); angSH->setValue(pp->locallab.spots.at(index).angSH); inverssh->set_active(pp->locallab.spots.at(index).inverssh); chromaskSH->setValue(pp->locallab.spots.at(index).chromaskSH); gammaskSH->setValue(pp->locallab.spots.at(index).gammaskSH); slomaskSH->setValue(pp->locallab.spots.at(index).slomaskSH); lapmaskSH->setValue(pp->locallab.spots.at(index).lapmaskSH); detailSH->setValue(pp->locallab.spots.at(index).detailSH); LmaskSHshape->setCurve(pp->locallab.spots.at(index).LmaskSHcurve); if (pp->locallab.spots.at(index).shMethod == "std") { shMethod->set_active(0); } else if (pp->locallab.spots.at(index).shMethod == "tone") { shMethod->set_active(1); } if (complexsoft == 2) { shMethod->set_active(1); highlights->setValue(0); shadows->setValue(0); } if (complexsoft == 2) { gammaskSH->setValue(1); slomaskSH->setValue(0); strSH->setValue(0); angSH->setValue(0); } if (complexsoft > 0) { lapmaskSH->setValue(0); } for (int i = 0; i < 5; i++) { multipliersh[i]->setValue(pp->locallab.spots.at(index).multsh[i]); } fatamountSH->setValue(pp->locallab.spots.at(index).fatamountSH); fatanchorSH->setValue(pp->locallab.spots.at(index).fatanchorSH); gamSH->setValue(pp->locallab.spots.at(index).gamSH); sloSH->setValue(pp->locallab.spots.at(index).sloSH); // Vibrance expvibrance->setEnabled(pp->locallab.spots.at(index).expvibrance); saturated->setValue(pp->locallab.spots.at(index).saturated); pastels->setValue(pp->locallab.spots.at(index).pastels); psThreshold->setValue(pp->locallab.spots.at(index).psthreshold); protectSkins->set_active(pp->locallab.spots.at(index).protectskins); avoidColorShift->set_active(pp->locallab.spots.at(index).avoidcolorshift); pastSatTog->set_active(pp->locallab.spots.at(index).pastsattog); sensiv->setValue(pp->locallab.spots.at(index).sensiv); skinTonesCurve->setCurve(pp->locallab.spots.at(index).skintonescurve); CCmaskvibshape->setCurve(pp->locallab.spots.at(index).CCmaskvibcurve); LLmaskvibshape->setCurve(pp->locallab.spots.at(index).LLmaskvibcurve); HHmaskvibshape->setCurve(pp->locallab.spots.at(index).HHmaskvibcurve); enavibMask->set_active(pp->locallab.spots.at(index).enavibMask); blendmaskvib->setValue(pp->locallab.spots.at(index).blendmaskvib); radmaskvib->setValue(pp->locallab.spots.at(index).radmaskvib); chromaskvib->setValue(pp->locallab.spots.at(index).chromaskvib); gammaskvib->setValue(pp->locallab.spots.at(index).gammaskvib); slomaskvib->setValue(pp->locallab.spots.at(index).slomaskvib); lapmaskvib->setValue(pp->locallab.spots.at(index).lapmaskvib); Lmaskvibshape->setCurve(pp->locallab.spots.at(index).Lmaskvibcurve); strvib->setValue(pp->locallab.spots.at(index).strvib); strvibab->setValue(pp->locallab.spots.at(index).strvibab); strvibh->setValue(pp->locallab.spots.at(index).strvibh); angvib->setValue(pp->locallab.spots.at(index).angvib); if (complexsoft < 2) { pastels->setLabel(M("TP_VIBRANCE_PASTELS")); } if (complexsoft == 2) { gammaskvib->setValue(1); slomaskvib->setValue(0); skinTonesCurve->reset(); } if (complexsoft > 0) { lapmaskvib->setValue(0); strvibab->setValue(0); strvibh->setValue(0); } // Soft Light expsoft->setEnabled(pp->locallab.spots.at(index).expsoft); streng->setValue(pp->locallab.spots.at(index).streng); sensisf->setValue(pp->locallab.spots.at(index).sensisf); laplace->setValue(pp->locallab.spots.at(index).laplace); if (pp->locallab.spots.at(index).softMethod == "soft") { softMethod->set_active(0); } else if (pp->locallab.spots.at(index).softMethod == "reti") { softMethod->set_active(1); } if (complexsoft == 2) { softMethod->set_active(0); streng->setValue(1); } // Blur & Noise expblur->setEnabled(pp->locallab.spots.at(index).expblur); radius->setValue(pp->locallab.spots.at(index).radius); strength->setValue(pp->locallab.spots.at(index).strength); sensibn->setValue(pp->locallab.spots.at(index).sensibn); itera->setValue(pp->locallab.spots.at(index).itera); isogr->setValue(pp->locallab.spots.at(index).isogr); strengr->setValue(pp->locallab.spots.at(index).strengr); scalegr->setValue(pp->locallab.spots.at(index).scalegr); guidbl->setValue(pp->locallab.spots.at(index).guidbl); epsbl->setValue(pp->locallab.spots.at(index).epsbl); if (pp->locallab.spots.at(index).blMethod == "blur") { blMethod->set_active(0); } else if (pp->locallab.spots.at(index).blMethod == "med") { blMethod->set_active(1); } else if (pp->locallab.spots.at(index).blMethod == "guid") { blMethod->set_active(2); } if (complexsoft == 2) { blMethod->set_active(0); guidbl->setValue(0); } if (pp->locallab.spots.at(index).blurMethod == "norm") { blurMethod->set_active(0); // expmaskbl->show(); } else if (pp->locallab.spots.at(index).blurMethod == "inv") { blurMethod->set_active(1); // expmaskbl->hide(); } if (pp->locallab.spots.at(index).medMethod == "none") { medMethod->set_active(0); } else if (pp->locallab.spots.at(index).medMethod == "33") { medMethod->set_active(1); } else if (pp->locallab.spots.at(index).medMethod == "55") { medMethod->set_active(2); } else if (pp->locallab.spots.at(index).medMethod == "77") { medMethod->set_active(3); } else if (pp->locallab.spots.at(index).medMethod == "99") { medMethod->set_active(4); } if (complexsoft == 2) { medMethod->set_active(0); } activlum->set_active(pp->locallab.spots.at(index).activlum); CCmaskblshape->setCurve(pp->locallab.spots.at(index).CCmaskblcurve); LLmaskblshape->setCurve(pp->locallab.spots.at(index).LLmaskblcurve); HHmaskblshape->setCurve(pp->locallab.spots.at(index).HHmaskblcurve); enablMask->set_active(pp->locallab.spots.at(index).enablMask); blendmaskbl->setValue(pp->locallab.spots.at(index).blendmaskbl); radmaskbl->setValue(pp->locallab.spots.at(index).radmaskbl); chromaskbl->setValue(pp->locallab.spots.at(index).chromaskbl); gammaskbl->setValue(pp->locallab.spots.at(index).gammaskbl); slomaskbl->setValue(pp->locallab.spots.at(index).slomaskbl); lapmaskbl->setValue(pp->locallab.spots.at(index).lapmaskbl); shadmaskbl->setValue(pp->locallab.spots.at(index).shadmaskbl); strumaskbl->setValue(pp->locallab.spots.at(index).strumaskbl); fftwbl->set_active(pp->locallab.spots.at(index).fftwbl); toolbl->set_active(pp->locallab.spots.at(index).toolbl); Lmaskblshape->setCurve(pp->locallab.spots.at(index).Lmaskblcurve); LLmaskblshapewav->setCurve(pp->locallab.spots.at(index).LLmaskblcurvewav); csThresholdblur->setValue(pp->locallab.spots.at(index).csthresholdblur); if (complexsoft == 2) { gammaskbl->setValue(1); slomaskbl->setValue(0); LLmaskblshapewav->reset(); strumaskbl->setValue(0); shadmaskbl->setValue(0); } if (complexsoft > 0) { lapmaskbl->setValue(0); LLmaskblshapewav->reset(); } /* if (fftwbl->get_active()) { radius->setLimits(1.5, 1000., 0.5, 1.5); } else { radius->setLimits(1.5, 100., 0.5, 1.5); } */ radius->setValue(pp->locallab.spots.at(index).radius); /* if (complexsoft == 2) { radius->setLimits(1.5, 100., 0.5, 1.5); radius->setValue(pp->locallab.spots.at(index).radius); } */ if (complexsoft == 2) { fftwbl->set_active(false); } // Tone Mapping exptonemap->setEnabled(pp->locallab.spots.at(index).exptonemap); stren->setValue(pp->locallab.spots.at(index).stren); gamma->setValue(pp->locallab.spots.at(index).gamma); estop->setValue(pp->locallab.spots.at(index).estop); scaltm->setValue(pp->locallab.spots.at(index).scaltm); rewei->setValue(pp->locallab.spots.at(index).rewei); satur->setValue(pp->locallab.spots.at(index).satur); sensitm->setValue(pp->locallab.spots.at(index).sensitm); softradiustm->setValue(pp->locallab.spots.at(index).softradiustm); amount->setValue(pp->locallab.spots.at(index).amount); equiltm->set_active(pp->locallab.spots.at(index).equiltm); enatmMask->set_active(pp->locallab.spots.at(index).enatmMask); enatmMaskaft->set_active(pp->locallab.spots.at(index).enatmMaskaft); blendmasktm->setValue(pp->locallab.spots.at(index).blendmasktm); radmasktm->setValue(pp->locallab.spots.at(index).radmasktm); chromasktm->setValue(pp->locallab.spots.at(index).chromasktm); gammasktm->setValue(pp->locallab.spots.at(index).gammasktm); slomasktm->setValue(pp->locallab.spots.at(index).slomasktm); lapmasktm->setValue(pp->locallab.spots.at(index).lapmasktm); CCmasktmshape->setCurve(pp->locallab.spots.at(index).CCmasktmcurve); LLmasktmshape->setCurve(pp->locallab.spots.at(index).LLmasktmcurve); HHmasktmshape->setCurve(pp->locallab.spots.at(index).HHmasktmcurve); Lmasktmshape->setCurve(pp->locallab.spots.at(index).Lmasktmcurve); if (complexsoft == 2) { gammasktm->setValue(1); slomasktm->setValue(0); gamma->setValue(1); satur->setValue(0); rewei->setValue(0); } if (complexsoft > 0) { lapmasktm->setValue(0); } // Retinex expreti->setEnabled(pp->locallab.spots.at(index).expreti); if (pp->locallab.spots.at(index).retinexMethod == "low") { retinexMethod->set_active(0); } else if (pp->locallab.spots.at(index).retinexMethod == "uni") { retinexMethod->set_active(1); } else { retinexMethod->set_active(2); } str->setValue(pp->locallab.spots.at(index).str); if (complexsoft == 2) { str->setValue(0); } chrrt->setValue(pp->locallab.spots.at(index).chrrt); neigh->setValue(pp->locallab.spots.at(index).neigh); vart->setValue(pp->locallab.spots.at(index).vart); offs->setValue(pp->locallab.spots.at(index).offs); dehaz->setValue(pp->locallab.spots.at(index).dehaz); depth->setValue(pp->locallab.spots.at(index).depth); sensih->setValue(pp->locallab.spots.at(index).sensih); cTgainshape->setCurve(pp->locallab.spots.at(index).localTgaincurve); cTtransshape->setCurve(pp->locallab.spots.at(index).localTtranscurve); inversret->set_active(pp->locallab.spots.at(index).inversret); equilret->set_active(pp->locallab.spots.at(index).equilret); loglin->set_active(pp->locallab.spots.at(index).loglin); lumonly->set_active(pp->locallab.spots.at(index).lumonly); softradiusret->setValue(pp->locallab.spots.at(index).softradiusret); CCmaskretishape->setCurve(pp->locallab.spots.at(index).CCmaskreticurve); LLmaskretishape->setCurve(pp->locallab.spots.at(index).LLmaskreticurve); HHmaskretishape->setCurve(pp->locallab.spots.at(index).HHmaskreticurve); enaretiMask->set_active(pp->locallab.spots.at(index).enaretiMask); enaretiMasktmap->set_active(pp->locallab.spots.at(index).enaretiMasktmap); blendmaskreti->setValue(pp->locallab.spots.at(index).blendmaskreti); radmaskreti->setValue(pp->locallab.spots.at(index).radmaskreti); chromaskreti->setValue(pp->locallab.spots.at(index).chromaskreti); gammaskreti->setValue(pp->locallab.spots.at(index).gammaskreti); slomaskreti->setValue(pp->locallab.spots.at(index).slomaskreti); lapmaskreti->setValue(pp->locallab.spots.at(index).lapmaskreti); scalereti->setValue(pp->locallab.spots.at(index).scalereti); darkness->setValue(pp->locallab.spots.at(index).darkness); lightnessreti->setValue(pp->locallab.spots.at(index).lightnessreti); limd->setValue(pp->locallab.spots.at(index).limd); cliptm->setValue(pp->locallab.spots.at(index).cliptm); fftwreti->set_active(pp->locallab.spots.at(index).fftwreti); Lmaskretishape->setCurve(pp->locallab.spots.at(index).Lmaskreticurve); // Sharpening expsharp->setEnabled(pp->locallab.spots.at(index).expsharp); sharcontrast->setValue(pp->locallab.spots.at(index).sharcontrast); sharradius->setValue(pp->locallab.spots.at(index).sharradius); sharamount->setValue(pp->locallab.spots.at(index).sharamount); shardamping->setValue(pp->locallab.spots.at(index).shardamping); shariter->setValue(pp->locallab.spots.at(index).shariter); sharblur->setValue(pp->locallab.spots.at(index).sharblur); sensisha->setValue(pp->locallab.spots.at(index).sensisha); inverssha->set_active(pp->locallab.spots.at(index).inverssha); if (complexsoft == 2) { shardamping->setValue(0); shariter->setValue(30); sharblur->setValue(0.2); } // Local Contrast expcontrast->setEnabled(pp->locallab.spots.at(index).expcontrast); lcradius->setValue(pp->locallab.spots.at(index).lcradius); lcamount->setValue(pp->locallab.spots.at(index).lcamount); lcdarkness->setValue(pp->locallab.spots.at(index).lcdarkness); lclightness->setValue(pp->locallab.spots.at(index).lclightness); levelwav->setValue(pp->locallab.spots.at(index).levelwav); residcont->setValue(pp->locallab.spots.at(index).residcont); residblur->setValue(pp->locallab.spots.at(index).residblur); levelblur->setValue(pp->locallab.spots.at(index).levelblur); residchro->setValue(pp->locallab.spots.at(index).residchro); sigma->setValue(pp->locallab.spots.at(index).sigma); offset->setValue(pp->locallab.spots.at(index).offset); chromalev->setValue(pp->locallab.spots.at(index).chromalev); chromablu->setValue(pp->locallab.spots.at(index).chromablu); fatdet->setValue(pp->locallab.spots.at(index).fatdet); fatanch->setValue(pp->locallab.spots.at(index).fatanch); fatres->setValue(pp->locallab.spots.at(index).fatres); clarilres->setValue(pp->locallab.spots.at(index).clarilres); claricres->setValue(pp->locallab.spots.at(index).claricres); clarisoft->setValue(pp->locallab.spots.at(index).clarisoft); sensilc->setValue(pp->locallab.spots.at(index).sensilc); fftwlc->set_active(pp->locallab.spots.at(index).fftwlc); blurlc->set_active(pp->locallab.spots.at(index).blurlc); origlc->set_active(pp->locallab.spots.at(index).origlc); csThreshold->setValue(pp->locallab.spots.at(index).csthreshold); if (pp->locallab.spots.at(index).localcontMethod == "loc") { localcontMethod->set_active(0); } else if (pp->locallab.spots.at(index).localcontMethod == "wav") { localcontMethod->set_active(1); } if (complexsoft == 2) { localcontMethod->set_active(1); // claricres->setValue(0); // clarisoft->setValue(0); lcradius->setValue(80); lcamount->setValue(0); // residchro->setValue(0); fftwlc->set_active(false); // blurlc->set_active(false); } wavshape->setCurve(pp->locallab.spots.at(index).locwavcurve); wavshapelev->setCurve(pp->locallab.spots.at(index).loclevwavcurve); wavshapecon->setCurve(pp->locallab.spots.at(index).locconwavcurve); wavshapecomp->setCurve(pp->locallab.spots.at(index).loccompwavcurve); CCmasklcshape->setCurve(pp->locallab.spots.at(index).CCmasklccurve); LLmasklcshape->setCurve(pp->locallab.spots.at(index).LLmasklccurve); HHmasklcshape->setCurve(pp->locallab.spots.at(index).HHmasklccurve); enalcMask->set_active(pp->locallab.spots.at(index).enalcMask); blendmasklc->setValue(pp->locallab.spots.at(index).blendmasklc); radmasklc->setValue(pp->locallab.spots.at(index).radmasklc); chromasklc->setValue(pp->locallab.spots.at(index).chromasklc); Lmasklcshape->setCurve(pp->locallab.spots.at(index).Lmasklccurve); if (fftwlc->get_active()) { lcradius->setLimits(20, 1000, 1, 80); } else { lcradius->setLimits(20, 100, 1, 80); } lcradius->setValue(pp->locallab.spots.at(index).lcradius); if (complexsoft == 2) { lcradius->setLimits(20, 100, 1, 80); lcradius->setValue(pp->locallab.spots.at(index).lcradius); } // Contrast by detail levels expcbdl->setEnabled(pp->locallab.spots.at(index).expcbdl); for (int i = 0; i < 6; i++) { multiplier[i]->setValue(pp->locallab.spots.at(index).mult[i]); } chromacbdl->setValue(pp->locallab.spots.at(index).chromacbdl); threshold->setValue(pp->locallab.spots.at(index).threshold); sensicb->setValue(pp->locallab.spots.at(index).sensicb); clarityml->setValue(pp->locallab.spots.at(index).clarityml); contresid->setValue(pp->locallab.spots.at(index).contresid); blurcbdl->setValue(pp->locallab.spots.at(index).blurcbdl); softradiuscb->setValue(pp->locallab.spots.at(index).softradiuscb); blendmaskcb->setValue(pp->locallab.spots.at(index).blendmaskcb); radmaskcb->setValue(pp->locallab.spots.at(index).radmaskcb); chromaskcb->setValue(pp->locallab.spots.at(index).chromaskcb); gammaskcb->setValue(pp->locallab.spots.at(index).gammaskcb); slomaskcb->setValue(pp->locallab.spots.at(index).slomaskcb); lapmaskcb->setValue(pp->locallab.spots.at(index).lapmaskcb); enacbMask->set_active(pp->locallab.spots.at(index).enacbMask); CCmaskcbshape->setCurve(pp->locallab.spots.at(index).CCmaskcbcurve); LLmaskcbshape->setCurve(pp->locallab.spots.at(index).LLmaskcbcurve); HHmaskcbshape->setCurve(pp->locallab.spots.at(index).HHmaskcbcurve); Lmaskcbshape->setCurve(pp->locallab.spots.at(index).Lmaskcbcurve); if (complexsoft == 2) { for (int i = 0; i < 6; i++) { multiplier[i]->setValue(1.0); } } if (complexsoft > 0) { lapmaskcb->setValue(0); } // Denoise expdenoi->setEnabled(pp->locallab.spots.at(index).expdenoi); noiselumf->setValue(pp->locallab.spots.at(index).noiselumf); noiselumf0->setValue(pp->locallab.spots.at(index).noiselumf0); noiselumf2->setValue(pp->locallab.spots.at(index).noiselumf2); noiselumc->setValue(pp->locallab.spots.at(index).noiselumc); noiselumdetail->setValue(pp->locallab.spots.at(index).noiselumdetail); noiselequal->setValue(pp->locallab.spots.at(index).noiselequal); noisechrof->setValue(pp->locallab.spots.at(index).noisechrof); noisechroc->setValue(pp->locallab.spots.at(index).noisechroc); noisechrodetail->setValue(pp->locallab.spots.at(index).noisechrodetail); adjblur->setValue(pp->locallab.spots.at(index).adjblur); bilateral->setValue(pp->locallab.spots.at(index).bilateral); sensiden->setValue(pp->locallab.spots.at(index).sensiden); detailthr->setValue(pp->locallab.spots.at(index).detailthr); wavshapeden->setCurve(pp->locallab.spots.at(index).locwavcurveden); if (complexsoft == 2) { noiselumf->setValue(0); noiselumf0->setValue(0); noiselumf2->setValue(0); noiselumc->setValue(0); noisechrof->setValue(0); noisechroc->setValue(0); bilateral->setValue(0); } //log encoding explog->setEnabled(pp->locallab.spots.at(index).explog); autocompute->set_active(pp->locallab.spots.at(index).autocompute); sourceGray->setValue(pp->locallab.spots.at(index).sourceGray); // sourceGray->setAutoValue(pp->locallab.spots.at(index).autogray); // lastAutogray = pp->locallab.spots.at(index).autogray; Autogray->set_active(pp->locallab.spots.at(index).Autogray); fullimage->set_active(pp->locallab.spots.at(index).fullimage); blackEv->setValue(pp->locallab.spots.at(index).blackEv); whiteEv->setValue(pp->locallab.spots.at(index).whiteEv); targetGray->setValue(pp->locallab.spots.at(index).targetGray); detail->setValue(pp->locallab.spots.at(index).detail); sensilog->setValue(pp->locallab.spots.at(index).sensilog); baselog->setValue(pp->locallab.spots.at(index).baselog); if (pedited) { if (index < (int)pedited->locallab.spots.size()) { const LocallabParamsEdited::LocallabSpotEdited* spotState = &pedited->locallab.spots.at(index); // Control spot settings ControlSpotPanel::SpotEdited* const se = new ControlSpotPanel::SpotEdited(); if (pedited->locallab.nbspot && pedited->locallab.id) { se->nbspot = true; } else { se->nbspot = false; } se->selspot = pedited->locallab.selspot; se->name = spotState->name; se->isvisible = spotState->isvisible; se->shape = spotState->shape; se->spotMethod = spotState->spotMethod; // se->mergeMethod = spotState->mergeMethod; se->sensiexclu = spotState->sensiexclu; se->structexclu = spotState->structexclu; se->struc = spotState->struc; se->shapeMethod = spotState->shapeMethod; se->locX = spotState->locX; se->locXL = spotState->locXL; se->locY = spotState->locY; se->locYT = spotState->locYT; se->centerX = spotState->centerX; se->centerY = spotState->centerY; se->circrad = spotState->circrad; se->qualityMethod = spotState->qualityMethod; se->complexMethod = spotState->complexMethod; se->transit = spotState->transit; se->feather = spotState->feather; se->thresh = spotState->thresh; se->iter = spotState->iter; se->balan = spotState->balan; se->balanh = spotState->balanh; se->transitweak = spotState->transitweak; se->transitgrad = spotState->transitgrad; se->scopemask = spotState->scopemask; se->lumask = spotState->lumask; se->avoid = spotState->avoid; se->recurs = spotState->recurs; se->laplac = spotState->laplac; se->deltae = spotState->deltae; se->shortc = spotState->shortc; se->savrest = spotState->savrest; expsettings->setEditedStates(se); // Color & Light expcolor->set_inconsistent(!spotState->expcolor); curvactiv->set_inconsistent(multiImage && !spotState->curvactiv); lightness->setEditedState(spotState->lightness ? Edited : UnEdited); contrast->setEditedState(spotState->contrast ? Edited : UnEdited); chroma->setEditedState(spotState->chroma ? Edited : UnEdited); sensi->setEditedState(spotState->sensi ? Edited : UnEdited); structcol->setEditedState(spotState->structcol ? Edited : UnEdited); strcol->setEditedState(spotState->strcol ? Edited : UnEdited); strcolab->setEditedState(spotState->strcolab ? Edited : UnEdited); strcolh->setEditedState(spotState->strcolh ? Edited : UnEdited); angcol->setEditedState(spotState->angcol ? Edited : UnEdited); labgrid->setEdited(spotState->labgridALow || spotState->labgridBLow || spotState->labgridAHigh || spotState->labgridBHigh); labgridmerg->setEdited(spotState->labgridALowmerg || spotState->labgridBLowmerg || spotState->labgridAHighmerg || spotState->labgridBHighmerg); strengthgrid->setEditedState(spotState->strengthgrid ? Edited : UnEdited); if (!spotState->qualitycurveMethod) { qualitycurveMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->gridMethod) { gridMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->merMethod) { merMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->toneMethod) { toneMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->mergecolMethod) { mergecolMethod->set_active_text(M("GENERAL_UNCHANGED")); } llshape->setUnChanged(!spotState->llcurve); lcshape->setUnChanged(!spotState->lccurve); ccshape->setUnChanged(!spotState->cccurve); clshape->setUnChanged(!spotState->clcurve); rgbshape->setUnChanged(!spotState->rgbcurve); LHshape->setUnChanged(!spotState->LHcurve); HHshape->setUnChanged(!spotState->HHcurve); invers->set_inconsistent(multiImage && !spotState->invers); special->set_inconsistent(multiImage && !spotState->special); toolcol->set_inconsistent(multiImage && !spotState->toolcol); enaColorMask->set_inconsistent(multiImage && !spotState->enaColorMask); fftColorMask->set_inconsistent(multiImage && !spotState->fftColorMask); CCmaskshape->setUnChanged(!spotState->CCmaskcurve); LLmaskshape->setUnChanged(!spotState->LLmaskcurve); HHmaskshape->setUnChanged(!spotState->HHmaskcurve); HHhmaskshape->setUnChanged(!spotState->HHhmaskcurve); blurcolde->setEditedState(spotState->blurcolde ? Edited : UnEdited); blurcol->setEditedState(spotState->blurcol ? Edited : UnEdited); contcol->setEditedState(spotState->contcol ? Edited : UnEdited); blendmaskcol->setEditedState(spotState->blendmaskcol ? Edited : UnEdited); radmaskcol->setEditedState(spotState->radmaskcol ? Edited : UnEdited); chromaskcol->setEditedState(spotState->chromaskcol ? Edited : UnEdited); gammaskcol->setEditedState(spotState->gammaskcol ? Edited : UnEdited); slomaskcol->setEditedState(spotState->slomaskcol ? Edited : UnEdited); shadmaskcol->setEditedState(spotState->shadmaskcol ? Edited : UnEdited); strumaskcol->setEditedState(spotState->strumaskcol ? Edited : UnEdited); lapmaskcol->setEditedState(spotState->lapmaskcol ? Edited : UnEdited); softradiuscol->setEditedState(spotState->softradiuscol ? Edited : UnEdited); opacol->setEditedState(spotState->opacol ? Edited : UnEdited); mercol->setEditedState(spotState->mercol ? Edited : UnEdited); merlucol->setEditedState(spotState->merlucol ? Edited : UnEdited); conthrcol->setEditedState(spotState->conthrcol ? Edited : UnEdited); Lmaskshape->setUnChanged(!spotState->Lmaskcurve); LLmaskcolshapewav->setUnChanged(!spotState->LLmaskcolcurvewav); csThresholdcol->setEditedState(spotState->csthresholdcol ? Edited : UnEdited); // Exposure expexpose->set_inconsistent(!spotState->expexpose); expcomp->setEditedState(spotState->expcomp ? Edited : UnEdited); hlcompr->setEditedState(spotState->hlcompr ? Edited : UnEdited); hlcomprthresh->setEditedState(spotState->hlcomprthresh ? Edited : UnEdited); black->setEditedState(spotState->black ? Edited : UnEdited); shadex->setEditedState(spotState->shadex ? Edited : UnEdited); warm->setEditedState(spotState->warm ? Edited : UnEdited); shcompr->setEditedState(spotState->shcompr ? Edited : UnEdited); expchroma->setEditedState(spotState->expchroma ? Edited : UnEdited); sensiex->setEditedState(spotState->sensiex ? Edited : UnEdited); structexp->setEditedState(spotState->structexp ? Edited : UnEdited); blurexpde->setEditedState(spotState->blurexpde ? Edited : UnEdited); strexp->setEditedState(spotState->strexp ? Edited : UnEdited); angexp->setEditedState(spotState->angexp ? Edited : UnEdited); shapeexpos->setUnChanged(!spotState->excurve); inversex->set_inconsistent(multiImage && !spotState->inversex); enaExpMask->set_inconsistent(multiImage && !spotState->enaExpMask); enaExpMaskaft->set_inconsistent(multiImage && !spotState->enaExpMaskaft); CCmaskexpshape->setUnChanged(!spotState->CCmaskexpcurve); LLmaskexpshape->setUnChanged(!spotState->LLmaskexpcurve); HHmaskexpshape->setUnChanged(!spotState->HHmaskexpcurve); blendmaskexp->setEditedState(spotState->blendmaskexp ? Edited : UnEdited); radmaskexp->setEditedState(spotState->radmaskexp ? Edited : UnEdited); chromaskexp->setEditedState(spotState->chromaskexp ? Edited : UnEdited); gammaskexp->setEditedState(spotState->gammaskexp ? Edited : UnEdited); slomaskexp->setEditedState(spotState->slomaskexp ? Edited : UnEdited); lapmaskexp->setEditedState(spotState->lapmaskexp ? Edited : UnEdited); strmaskexp->setEditedState(spotState->strmaskexp ? Edited : UnEdited); angmaskexp->setEditedState(spotState->angmaskexp ? Edited : UnEdited); softradiusexp->setEditedState(spotState->softradiusexp ? Edited : UnEdited); Lmaskexpshape->setUnChanged(!spotState->Lmaskexpcurve); if (!spotState->expMethod) { expMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->exnoiseMethod) { exnoiseMethod->set_active_text(M("GENERAL_UNCHANGED")); } laplacexp->setEditedState(spotState->laplacexp ? Edited : UnEdited); balanexp->setEditedState(spotState->balanexp ? Edited : UnEdited); linear->setEditedState(spotState->linear ? Edited : UnEdited); gamm->setEditedState(spotState->gamm ? Edited : UnEdited); fatamount->setEditedState(spotState->fatamount ? Edited : UnEdited); fatdetail->setEditedState(spotState->fatdetail ? Edited : UnEdited); fatanchor->setEditedState(spotState->fatanchor ? Edited : UnEdited); fatlevel->setEditedState(spotState->fatlevel ? Edited : UnEdited); // Shadow highlight expshadhigh->set_inconsistent(!spotState->expshadhigh); highlights->setEditedState(spotState->highlights ? Edited : UnEdited); h_tonalwidth->setEditedState(spotState->h_tonalwidth ? Edited : UnEdited); shadows->setEditedState(spotState->shadows ? Edited : UnEdited); s_tonalwidth->setEditedState(spotState->s_tonalwidth ? Edited : UnEdited); sh_radius->setEditedState(spotState->sh_radius ? Edited : UnEdited); sensihs->setEditedState(spotState->sensihs ? Edited : UnEdited); enaSHMask->set_inconsistent(multiImage && !spotState->enaSHMask); CCmaskSHshape->setUnChanged(!spotState->CCmaskSHcurve); LLmaskSHshape->setUnChanged(!spotState->LLmaskSHcurve); HHmaskSHshape->setUnChanged(!spotState->HHmaskSHcurve); blendmaskSH->setEditedState(spotState->blendmaskSH ? Edited : UnEdited); radmaskSH->setEditedState(spotState->radmaskSH ? Edited : UnEdited); blurSHde->setEditedState(spotState->blurSHde ? Edited : UnEdited); strSH->setEditedState(spotState->strSH ? Edited : UnEdited); angSH->setEditedState(spotState->angSH ? Edited : UnEdited); inverssh->set_inconsistent(multiImage && !spotState->inverssh); chromaskSH->setEditedState(spotState->chromaskSH ? Edited : UnEdited); gammaskSH->setEditedState(spotState->gammaskSH ? Edited : UnEdited); slomaskSH->setEditedState(spotState->slomaskSH ? Edited : UnEdited); lapmaskSH->setEditedState(spotState->lapmaskSH ? Edited : UnEdited); detailSH->setEditedState(spotState->detailSH ? Edited : UnEdited); LmaskSHshape->setUnChanged(!spotState->LmaskSHcurve); if (!spotState->shMethod) { shMethod->set_active_text(M("GENERAL_UNCHANGED")); } for (int i = 0; i < 5; i++) { multipliersh[i]->setEditedState(spotState->multsh[i] ? Edited : UnEdited); } fatamountSH->setEditedState(spotState->fatamountSH ? Edited : UnEdited); fatanchorSH->setEditedState(spotState->fatanchorSH ? Edited : UnEdited); gamSH->setEditedState(spotState->gamSH ? Edited : UnEdited); sloSH->setEditedState(spotState->sloSH ? Edited : UnEdited); // Vibrance expvibrance->set_inconsistent(!spotState->expvibrance); saturated->setEditedState(spotState->saturated ? Edited : UnEdited); pastels->setEditedState(spotState->pastels ? Edited : UnEdited); psThreshold->setEditedState(spotState->psthreshold ? Edited : UnEdited); protectSkins->set_inconsistent(multiImage && !spotState->protectskins); avoidColorShift->set_inconsistent(multiImage && !spotState->avoidcolorshift); pastSatTog->set_inconsistent(multiImage && !spotState->pastsattog); sensiv->setEditedState(spotState->sensiv ? Edited : UnEdited); skinTonesCurve->setUnChanged(!spotState->skintonescurve); CCmaskvibshape->setUnChanged(!spotState->CCmaskvibcurve); LLmaskvibshape->setUnChanged(!spotState->LLmaskvibcurve); HHmaskvibshape->setUnChanged(!spotState->HHmaskvibcurve); enavibMask->set_inconsistent(multiImage && !spotState->enavibMask); blendmaskvib->setEditedState(spotState->blendmaskvib ? Edited : UnEdited); radmaskvib->setEditedState(spotState->radmaskvib ? Edited : UnEdited); chromaskvib->setEditedState(spotState->chromaskvib ? Edited : UnEdited); gammaskvib->setEditedState(spotState->gammaskvib ? Edited : UnEdited); slomaskvib->setEditedState(spotState->slomaskvib ? Edited : UnEdited); lapmaskvib->setEditedState(spotState->lapmaskvib ? Edited : UnEdited); Lmaskvibshape->setUnChanged(!spotState->Lmaskvibcurve); strvib->setEditedState(spotState->strvib ? Edited : UnEdited); strvibab->setEditedState(spotState->strvibab ? Edited : UnEdited); strvibh->setEditedState(spotState->strvibh ? Edited : UnEdited); angvib->setEditedState(spotState->angvib ? Edited : UnEdited); // Soft Light expsoft->set_inconsistent(!spotState->expsoft); streng->setEditedState(spotState->streng ? Edited : UnEdited); sensisf->setEditedState(spotState->sensisf ? Edited : UnEdited); laplace->setEditedState(spotState->laplace ? Edited : UnEdited); if (!spotState->softMethod) { softMethod->set_active_text(M("GENERAL_UNCHANGED")); } // Blur & Noise expblur->set_inconsistent(!spotState->expblur); radius->setEditedState(spotState->radius ? Edited : UnEdited); strength->setEditedState(spotState->strength ? Edited : UnEdited); sensibn->setEditedState(spotState->sensibn ? Edited : UnEdited); itera->setEditedState(spotState->itera ? Edited : UnEdited); isogr->setEditedState(spotState->isogr ? Edited : UnEdited); strengr->setEditedState(spotState->strengr ? Edited : UnEdited); scalegr->setEditedState(spotState->scalegr ? Edited : UnEdited); guidbl->setEditedState(spotState->guidbl ? Edited : UnEdited); epsbl->setEditedState(spotState->epsbl ? Edited : UnEdited); if (!spotState->blMethod) { blMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->blurMethod) { blurMethod->set_active_text(M("GENERAL_UNCHANGED")); } if (!spotState->medMethod) { medMethod->set_active_text(M("GENERAL_UNCHANGED")); } activlum->set_inconsistent(multiImage && !spotState->activlum); CCmaskblshape->setUnChanged(!spotState->CCmaskblcurve); LLmaskblshape->setUnChanged(!spotState->LLmaskblcurve); HHmaskblshape->setUnChanged(!spotState->HHmaskblcurve); enablMask->set_inconsistent(multiImage && !spotState->enablMask); blendmaskbl->setEditedState(spotState->blendmaskbl ? Edited : UnEdited); radmaskbl->setEditedState(spotState->radmaskbl ? Edited : UnEdited); chromaskbl->setEditedState(spotState->chromaskbl ? Edited : UnEdited); gammaskbl->setEditedState(spotState->gammaskbl ? Edited : UnEdited); slomaskbl->setEditedState(spotState->slomaskbl ? Edited : UnEdited); lapmaskbl->setEditedState(spotState->lapmaskbl ? Edited : UnEdited); shadmaskbl->setEditedState(spotState->shadmaskbl ? Edited : UnEdited); strumaskbl->setEditedState(spotState->strumaskbl ? Edited : UnEdited); fftwbl->set_inconsistent(multiImage && !spotState->fftwbl); toolbl->set_inconsistent(multiImage && !spotState->toolbl); Lmaskblshape->setUnChanged(!spotState->Lmaskblcurve); LLmaskblshapewav->setUnChanged(!spotState->LLmaskblcurvewav); csThresholdblur->setEditedState(spotState->csthresholdblur ? Edited : UnEdited); // Tone Mapping exptonemap->set_inconsistent(!spotState->exptonemap); stren->setEditedState(spotState->stren ? Edited : UnEdited); gamma->setEditedState(spotState->gamma ? Edited : UnEdited); estop->setEditedState(spotState->estop ? Edited : UnEdited); scaltm->setEditedState(spotState->scaltm ? Edited : UnEdited); rewei->setEditedState(spotState->rewei ? Edited : UnEdited); satur->setEditedState(spotState->satur ? Edited : UnEdited); sensitm->setEditedState(spotState->sensitm ? Edited : UnEdited); softradiustm->setEditedState(spotState->softradiustm ? Edited : UnEdited); amount->setEditedState(spotState->amount ? Edited : UnEdited); equiltm->set_inconsistent(multiImage && !spotState->equiltm); CCmasktmshape->setUnChanged(!spotState->CCmasktmcurve); LLmasktmshape->setUnChanged(!spotState->LLmasktmcurve); HHmasktmshape->setUnChanged(!spotState->HHmasktmcurve); enatmMask->set_inconsistent(multiImage && !spotState->enatmMask); enatmMaskaft->set_inconsistent(multiImage && !spotState->enatmMaskaft); blendmasktm->setEditedState(spotState->blendmasktm ? Edited : UnEdited); radmasktm->setEditedState(spotState->radmasktm ? Edited : UnEdited); chromasktm->setEditedState(spotState->chromasktm ? Edited : UnEdited); gammasktm->setEditedState(spotState->gammasktm ? Edited : UnEdited); slomasktm->setEditedState(spotState->slomasktm ? Edited : UnEdited); lapmasktm->setEditedState(spotState->lapmasktm ? Edited : UnEdited); Lmasktmshape->setUnChanged(!spotState->Lmasktmcurve); // Retinex expreti->set_inconsistent(!spotState->expreti); if (!spotState->retinexMethod) { retinexMethod->set_active_text(M("GENERAL_UNCHANGED")); } str->setEditedState(spotState->str ? Edited : UnEdited); chrrt->setEditedState(spotState->chrrt ? Edited : UnEdited); neigh->setEditedState(spotState->neigh ? Edited : UnEdited); vart->setEditedState(spotState->vart ? Edited : UnEdited); offs->setEditedState(spotState->offs ? Edited : UnEdited); dehaz->setEditedState(spotState->dehaz ? Edited : UnEdited); depth->setEditedState(spotState->depth ? Edited : UnEdited); sensih->setEditedState(spotState->sensih ? Edited : UnEdited); cTgainshape->setUnChanged(!spotState->localTgaincurve); cTtransshape->setUnChanged(!spotState->localTtranscurve); inversret->set_inconsistent(multiImage && !spotState->inversret); equilret->set_inconsistent(multiImage && !spotState->equilret); loglin->set_inconsistent(multiImage && !spotState->loglin); lumonly->set_inconsistent(multiImage && !spotState->lumonly); softradiusret->setEditedState(spotState->softradiusret ? Edited : UnEdited); CCmaskretishape->setUnChanged(!spotState->CCmaskreticurve); LLmaskretishape->setUnChanged(!spotState->LLmaskreticurve); HHmaskretishape->setUnChanged(!spotState->HHmaskreticurve); enaretiMask->set_inconsistent(multiImage && !spotState->enaretiMask); enaretiMasktmap->set_inconsistent(multiImage && !spotState->enaretiMasktmap); blendmaskreti->setEditedState(spotState->blendmaskreti ? Edited : UnEdited); radmaskreti->setEditedState(spotState->radmaskreti ? Edited : UnEdited); chromaskreti->setEditedState(spotState->chromaskreti ? Edited : UnEdited); gammaskreti->setEditedState(spotState->gammaskreti ? Edited : UnEdited); slomaskreti->setEditedState(spotState->slomaskreti ? Edited : UnEdited); lapmaskreti->setEditedState(spotState->lapmaskreti ? Edited : UnEdited); scalereti->setEditedState(spotState->scalereti ? Edited : UnEdited); darkness->setEditedState(spotState->darkness ? Edited : UnEdited); lightnessreti->setEditedState(spotState->lightnessreti ? Edited : UnEdited); limd->setEditedState(spotState->limd ? Edited : UnEdited); cliptm->setEditedState(spotState->cliptm ? Edited : UnEdited); fftwreti->set_inconsistent(multiImage && !spotState->fftwreti); Lmaskretishape->setUnChanged(!spotState->Lmaskreticurve); // Sharpening expsharp->set_inconsistent(!spotState->expsharp); sharcontrast->setEditedState(spotState->sharcontrast ? Edited : UnEdited); sharradius->setEditedState(spotState->sharradius ? Edited : UnEdited); sharamount->setEditedState(spotState->sharamount ? Edited : UnEdited); shardamping->setEditedState(spotState->shardamping ? Edited : UnEdited); shariter->setEditedState(spotState->shariter ? Edited : UnEdited); sharblur->setEditedState(spotState->sharblur ? Edited : UnEdited); sensisha->setEditedState(spotState->sensisha ? Edited : UnEdited); inverssha->set_inconsistent(multiImage && !spotState->inverssha); // Local Contrast expcontrast->set_inconsistent(!spotState->expcontrast); lcradius->setEditedState(spotState->lcradius ? Edited : UnEdited); lcamount->setEditedState(spotState->lcamount ? Edited : UnEdited); lcdarkness->setEditedState(spotState->lcdarkness ? Edited : UnEdited); lclightness->setEditedState(spotState->lclightness ? Edited : UnEdited); levelwav->setEditedState(spotState->levelwav ? Edited : UnEdited); residcont->setEditedState(spotState->residcont ? Edited : UnEdited); residblur->setEditedState(spotState->residblur ? Edited : UnEdited); levelblur->setEditedState(spotState->levelblur ? Edited : UnEdited); residchro->setEditedState(spotState->residchro ? Edited : UnEdited); sigma->setEditedState(spotState->sigma ? Edited : UnEdited); offset->setEditedState(spotState->offset ? Edited : UnEdited); chromalev->setEditedState(spotState->chromalev ? Edited : UnEdited); chromablu->setEditedState(spotState->chromablu ? Edited : UnEdited); fatdet->setEditedState(spotState->fatdet ? Edited : UnEdited); fatanch->setEditedState(spotState->fatanch ? Edited : UnEdited); fatres->setEditedState(spotState->fatres ? Edited : UnEdited); clarilres->setEditedState(spotState->clarilres ? Edited : UnEdited); claricres->setEditedState(spotState->claricres ? Edited : UnEdited); clarisoft->setEditedState(spotState->clarisoft ? Edited : UnEdited); sensilc->setEditedState(spotState->sensilc ? Edited : UnEdited); fftwlc->set_inconsistent(multiImage && !spotState->fftwlc); blurlc->set_inconsistent(multiImage && !spotState->blurlc); origlc->set_inconsistent(multiImage && !spotState->origlc); wavshape->setUnChanged(!spotState->locwavcurve); wavshapelev->setUnChanged(!spotState->loclevwavcurve); csThreshold->setEditedState(spotState->csthreshold ? Edited : UnEdited); wavshapecon->setUnChanged(!spotState->locconwavcurve); wavshapecomp->setUnChanged(!spotState->loccompwavcurve); LLmasklcshape->setUnChanged(!spotState->LLmasklccurve); HHmasklcshape->setUnChanged(!spotState->HHmasklccurve); CCmasklcshape->setUnChanged(!spotState->CCmasklccurve); enalcMask->set_inconsistent(multiImage && !spotState->enalcMask); blendmasklc->setEditedState(spotState->blendmasklc ? Edited : UnEdited); radmasklc->setEditedState(spotState->radmasklc ? Edited : UnEdited); chromasklc->setEditedState(spotState->chromasklc ? Edited : UnEdited); Lmasklcshape->setUnChanged(!spotState->Lmasklccurve); if (!spotState->retinexMethod) { localcontMethod->set_active_text(M("GENERAL_UNCHANGED")); } // Contrast by detail levels expcbdl->set_inconsistent(!spotState->expcbdl); for (int i = 0; i < 6; i++) { multiplier[i]->setEditedState(spotState->mult[i] ? Edited : UnEdited); } chromacbdl->setEditedState(spotState->chromacbdl ? Edited : UnEdited); threshold->setEditedState(spotState->threshold ? Edited : UnEdited); sensicb->setEditedState(spotState->sensicb ? Edited : UnEdited); clarityml->setEditedState(spotState->clarityml ? Edited : UnEdited); contresid->setEditedState(spotState->contresid ? Edited : UnEdited); blurcbdl->setEditedState(spotState->blurcbdl ? Edited : UnEdited); softradiuscb->setEditedState(spotState->softradiuscb ? Edited : UnEdited); blendmaskcb->setEditedState(spotState->blendmaskcb ? Edited : UnEdited); radmaskcb->setEditedState(spotState->radmaskcb ? Edited : UnEdited); chromaskcb->setEditedState(spotState->chromaskcb ? Edited : UnEdited); gammaskcb->setEditedState(spotState->gammaskcb ? Edited : UnEdited); slomaskcb->setEditedState(spotState->slomaskcb ? Edited : UnEdited); lapmaskcb->setEditedState(spotState->lapmaskcb ? Edited : UnEdited); enacbMask->set_inconsistent(multiImage && !spotState->enacbMask); CCmaskcbshape->setUnChanged(!spotState->CCmaskcbcurve); LLmaskcbshape->setUnChanged(!spotState->LLmaskcbcurve); HHmaskcbshape->setUnChanged(!spotState->HHmaskcbcurve); Lmaskcbshape->setUnChanged(!spotState->Lmaskcbcurve); // Denoise expdenoi->set_inconsistent(!spotState->expdenoi); noiselumf->setEditedState(spotState->noiselumf ? Edited : UnEdited); noiselumf0->setEditedState(spotState->noiselumf0 ? Edited : UnEdited); noiselumf2->setEditedState(spotState->noiselumf2 ? Edited : UnEdited); noiselumc->setEditedState(spotState->noiselumc ? Edited : UnEdited); noiselumdetail->setEditedState(spotState->noiselumdetail ? Edited : UnEdited); noiselequal->setEditedState(spotState->noiselequal ? Edited : UnEdited); noisechrof->setEditedState(spotState->noisechrof ? Edited : UnEdited); noisechroc->setEditedState(spotState->noisechroc ? Edited : UnEdited); noisechrodetail->setEditedState(spotState->noisechrodetail ? Edited : UnEdited); adjblur->setEditedState(spotState->adjblur ? Edited : UnEdited); bilateral->setEditedState(spotState->bilateral ? Edited : UnEdited); sensiden->setEditedState(spotState->sensiden ? Edited : UnEdited); detailthr->setEditedState(spotState->detailthr ? Edited : UnEdited); wavshapeden->setUnChanged(!spotState->locwavcurveden); //log encoding explog->set_inconsistent(!spotState->explog); autocompute->set_inconsistent(multiImage && !spotState->autocompute); sourceGray->setEditedState(spotState->sourceGray ? Edited : UnEdited); // sourceGray->setAutoInconsistent(multiImage && !spotState->autogray); Autogray->set_inconsistent(multiImage && !spotState->Autogray); fullimage->set_inconsistent(multiImage && !spotState->fullimage); blackEv->setEditedState(spotState->blackEv ? Edited : UnEdited); whiteEv->setEditedState(spotState->whiteEv ? Edited : UnEdited); targetGray->setEditedState(spotState->targetGray ? Edited : UnEdited); detail->setEditedState(spotState->detail ? Edited : UnEdited); sensilog->setEditedState(spotState->sensilog ? Edited : UnEdited); baselog->setEditedState(spotState->baselog ? Edited : UnEdited); } } } } void Locallab::updateSpecificGUIState() { // Update Color & Light GUI according to invers button state (to be compliant with inversChanged function) sensi->show(); curvactiv->hide(); blurcolde->show(); if (multiImage && invers->get_inconsistent()) { llCurveEditorG->show(); clCurveEditorG->show(); blurcol->show(); contcol->show(); HCurveEditorG->show(); qualitycurveMethod->show(); labqualcurv->show(); expmaskcol->show(); expmaskcol1->show(); structcol->show(); softradiuscol->show(); showmaskcolMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskcolMethodinv->hide(); gridFrame->hide(); merge1colFrame->show(); expgradcol->show(); } else if (invers->get_active()) { llCurveEditorG->show(); clCurveEditorG->hide(); HCurveEditorG->hide(); blurcol->hide(); contcol->hide(); qualitycurveMethod->hide(); labqualcurv->hide(); expmaskcol->show(); expmaskcol1->hide(); softradiuscol->hide(); structcol->hide(); gridFrame->hide(); showmaskcolMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskcolMethodinv->show(); merge1colFrame->hide(); expgradcol->hide(); } else { llCurveEditorG->show(); clCurveEditorG->show(); HCurveEditorG->show(); qualitycurveMethod->show(); labqualcurv->show(); blurcol->show(); contcol->show(); expmaskcol->show(); expmaskcol1->show(); structcol->show(); gridFrame->show(); softradiuscol->show(); showmaskcolMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskcolMethodinv->hide(); merge1colFrame->show(); expgradcol->show(); if (batchMode) { showmaskcolMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskcolMethodinv->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } } if (merMethod->get_active_row_number() == 0) { mask7->hide(); conthrcol->hide(); structcol->set_sensitive(true); // strcolh->set_sensitive(false); sensi->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(true); special->set_sensitive(true); invers->set_sensitive(true); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 1) { mask7->hide(); structcol->set_sensitive(true); // strcolh->set_sensitive(false); sensi->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(true); special->set_sensitive(true); invers->set_sensitive(true); conthrcol->hide(); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 2) { mask7->show(); // structcol->set_sensitive(false); strcolh->set_sensitive(true); // sensi->set_sensitive(false); sensi->set_sensitive(true); // blurcolde->set_sensitive(false); // blurcol->set_sensitive(false); // contcol->set_sensitive(false); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(false); special->set_sensitive(false); invers->set_sensitive(false); conthrcol->show(); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 3) { conthrcol->show(); // structcol->set_sensitive(false); // sensi->set_sensitive(false); sensi->set_sensitive(true); // blurcolde->set_sensitive(false); // blurcol->set_sensitive(false); // contcol->set_sensitive(false); strcolh->set_sensitive(true); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(false); special->set_sensitive(false); invers->set_sensitive(false); mask7->show(); gridmerFrame->hide(); } else if (merMethod->get_active_row_number() == 3) { mask7->show(); // structcol->set_sensitive(false); strcolh->set_sensitive(true); // sensi->set_sensitive(false); sensi->set_sensitive(true); // blurcolde->set_sensitive(false); // blurcol->set_sensitive(false); // contcol->set_sensitive(false); structcol->set_sensitive(true); blurcolde->set_sensitive(true); blurcol->set_sensitive(true); contcol->set_sensitive(true); H2CurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(false); special->set_sensitive(false); invers->set_sensitive(false); conthrcol->hide(); gridmerFrame->show(); } // Update Exposure GUI according to black adjuster state (to be compliant with adjusterChanged function) sensiex->show(); curveEditorG->show(); blurexpde->show(); if (multiImage && inversex->get_inconsistent()) { structexp->show(); softradiusexp->show(); shadex->show(); expMethod->show(); expmaskexp->show(); exnoiseMethod->show(); expgradexp->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->show(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->show(); fatFrame->show(); softradiusexp->hide(); } showmaskexpMethodinv->hide(); showmaskexpMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inversex->get_active()) { structexp->hide(); softradiusexp->hide(); shadex->hide(); expMethod->hide(); exnoiseMethod->hide(); pdeFrame->hide(); fatFrame->hide(); expmaskexp->show(); showmaskexpMethodinv->show(); showmaskexpMethod->hide(); softradiusexp->show(); expgradexp->hide(); expMethod->set_active(0); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->show(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->hide(); } } else { structexp->show(); softradiusexp->show(); shadex->show(); expMethod->show(); exnoiseMethod->show(); expmaskexp->show(); showmaskexpMethodinv->hide(); showmaskexpMethod->show(); expgradexp->show(); if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->show(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->show(); fatFrame->show(); softradiusexp->hide(); } if (batchMode) { showmaskexpMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } } // Update SH GUI according to black adjuster state (to be compliant with adjusterChanged function) sensihs->show(); blurSHde->show(); if (multiImage && inverssh->get_inconsistent()) { expmasksh->show(); showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inverssh->get_active()) { // printf("GUI inv SH\n"); expmasksh->show(); showmaskSHMethodinv->show(); showmaskSHMethod->hide(); // shMethod->set_active(0); expgradsh->hide(); if (shMethod->get_active_row_number() == 0) { for (int i = 0; i < 5; i++) { multipliersh[i]->hide(); } expgradsh->hide(); detailSH->hide(); gamFrame->hide(); highlights->show(); h_tonalwidth->show(); shadows->show(); s_tonalwidth->show(); sh_radius->show(); } else if (shMethod->get_active_row_number() == 1) { for (int i = 0; i < 5; i++) { multipliersh[i]->show(); } gamFrame->show(); expgradsh->hide(); detailSH->show(); highlights->hide(); h_tonalwidth->hide(); shadows->hide(); s_tonalwidth->hide(); sh_radius->hide(); } } else { // printf("GUI NON inv SH\n"); expmasksh->show(); showmaskSHMethodinv->hide(); showmaskSHMethod->show(); expgradsh->show(); if (batchMode) { showmaskSHMethod->hide(); // Being able to change Color & Light mask visibility is useless in batch mode showmaskSHMethodinv->hide(); } } if (multiImage && black->getEditedState() != Edited) { shcompr->set_sensitive(true); } else { shcompr->set_sensitive(!((int)black->getValue() == 0)); // At black = 0, shcompr value has no effect } if (multiImage && shadex->getEditedState() != Edited) { shcompr->set_sensitive(true); } else { shcompr->set_sensitive(!((int)shadex->getValue() == 0)); // At black = 0, shcompr value has no effect } // Update Vibrance GUI according to pastsattog button state (to be compliant with pastsattog_toggled function) if (multiImage && pastSatTog->get_inconsistent()) { psThreshold->set_sensitive(true); saturated->set_sensitive(true); } else if (pastSatTog->get_active()) { // Link both slider, so we set saturated and psThresholds unsensitive psThreshold->set_sensitive(false); saturated->set_sensitive(false); saturated->setValue(pastels->getValue()); // Pastels and Saturated are linked } else { // Separate sliders, so we set saturated and psThresholds sensitive again psThreshold->set_sensitive(true); saturated->set_sensitive(true); } if (expMethod->get_active_row_number() == 0) { pdeFrame->hide(); fatFrame->hide(); softradiusexp->show(); } else if (expMethod->get_active_row_number() == 1) { pdeFrame->show(); fatFrame->show(); softradiusexp->hide(); } if (softMethod->get_active_row_number() == 0) { laplace->hide(); ctboxsoftmethod->hide(); } else if (softMethod->get_active_row_number() == 1) { laplace->show(); ctboxsoftmethod->show(); } if (shMethod->get_active_row_number() == 0) { for (int i = 0; i < 5; i++) { multipliersh[i]->hide(); } detailSH->hide(); gamFrame->hide(); highlights->show(); h_tonalwidth->show(); shadows->show(); s_tonalwidth->show(); sh_radius->show(); } else if (shMethod->get_active_row_number() == 1) { for (int i = 0; i < 5; i++) { multipliersh[i]->show(); } detailSH->show(); gamFrame->show(); highlights->hide(); h_tonalwidth->hide(); shadows->hide(); s_tonalwidth->hide(); sh_radius->hide(); } if (blMethod->get_active_row_number() == 0) { radius->show(); fftwbl->show(); strength->show(); itera->hide(); isogr->show(); grainFrame->show(); strengr->show(); scalegr->show(); medMethod->hide(); guidbl->hide(); epsbl->hide(); activlum->show(); } else if (blMethod->get_active_row_number() == 1) { radius->hide(); fftwbl->hide(); strength->hide(); grainFrame->hide(); isogr->hide(); strengr->hide(); scalegr->hide(); itera->show(); medMethod->show(); guidbl->hide(); epsbl->hide(); activlum->show(); } else if (blMethod->get_active_row_number() == 2) { radius->hide(); fftwbl->hide(); strength->hide(); isogr->hide(); grainFrame->hide(); strengr->hide(); scalegr->hide(); itera->hide(); medMethod->hide(); guidbl->show(); epsbl->show(); activlum->hide(); } // Update Retinex GUI according to inversret button state (to be compliant with inversretChanged function) if (multiImage && inversret->get_inconsistent()) { sensih->show(); softradiusret->show(); showmaskretiMethod->show(); // Being able to change Color & Light mask visibility is useless in batch mode } else if (inversret->get_active()) { sensih->show(); softradiusret->show(); showmaskretiMethod->show(); sensih->show(); softradiusret->show(); } if (str->getValue() >= 0.2f) { retitoolFrame->show(); } else { retitoolFrame->hide(); } if (localcontMethod->get_active_row_number() == 0) { levelwav->hide(); residcont->hide(); residblur->hide(); levelblur->hide(); residchro->hide(); sigma->hide(); offset->hide(); chromalev->hide(); chromablu->hide(); fatdet->hide(); fatanch->hide(); fatres->hide(); clarilres->hide(); claricres->hide(); clarisoft->hide(); clariFrame->hide(); csThreshold->hide(); lcradius->show(); lcamount->show(); lcdarkness->show(); lclightness->show(); LocalcurveEditorwav->hide(); LocalcurveEditorwavlev->hide(); LocalcurveEditorwavcon->hide(); LocalcurveEditorwavcomp->hide(); fftwlc->show(); blurlc->show(); origlc->hide(); } else if (localcontMethod->get_active_row_number() == 1) { levelwav->show(); residcont->show(); residblur->show(); levelblur->show(); sigma->show(); offset->show(); chromalev->show(); chromablu->show(); fatdet->show(); fatanch->show(); fatres->show(); residchro->show(); clarilres->show(); claricres->show(); clarisoft->show(); clariFrame->show(); csThreshold->show(); lcradius->hide(); lcamount->hide(); lcdarkness->hide(); lclightness->hide(); LocalcurveEditorwav->show(); LocalcurveEditorwavlev->show(); LocalcurveEditorwavcon->show(); LocalcurveEditorwavcomp->show(); fftwlc->hide(); blurlc->show(); origlc->show(); } // Update Sharpening GUI according to inverssha button state (to be compliant with inversshaChanged function) sensisha->show(); } void Locallab::autoOpenCurve() { // printf("autoOpenCurve\n"); // TODO autoOpenCurve only considers linearity state of selected spot curve // llshape->openIfNonlinear(); // ccshape->openIfNonlinear(); // LHshape->openIfNonlinear(); // HHshape->openIfNonlinear(); // CCmaskshape->openIfNonlinear(); // LLmaskshape->openIfNonlinear(); // HHmaskshape->openIfNonlinear(); // CCmaskexpshape->openIfNonlinear(); // LLmaskexpshape->openIfNonlinear(); } void Locallab::adjusterAutoToggled(Adjuster* a, bool newval) { /* printf("OK TOG\n"); if (multiImage) { if (sourceGray->getAutoInconsistent()) { sourceGray->setAutoInconsistent (false); sourceGray->setAutoValue (false); } else if (lastAutogray) { sourceGray->setAutoInconsistent (true); } lastAutogray = sourceGray->getAutoValue(); // (a == sourceGray ? lastAutogray : lastAutoRadius) = a->getAutoValue(); } if (listener) { const auto event = (a == sourceGray ? EvlocallabAutoGrayOff: EvlocallabAutoGrayOn); if (sourceGray->getAutoInconsistent()) { listener->panelChanged(event, M("GENERAL_UNCHANGED")); } else if (sourceGray->getAutoValue()) { listener->panelChanged(event, M("GENERAL_ENABLED")); } else { listener->panelChanged(event, M("GENERAL_DISABLED")); } } */ /* if (listener) { if (a == sourceGray) { if (sourceGray->getAutoInconsistent()) { listener->panelChanged (EvlocallabAutoGrayOff, M ("GENERAL_UNCHANGED")); } else if (sourceGray->getAutoValue()) { listener->panelChanged (EvlocallabAutoGrayOn, M ("GENERAL_ENABLED")); } else { listener->panelChanged (EvlocallabAutoGrayOff, M ("GENERAL_DISABLED")); } } */ /* if (a == sourceGray) { printf("OK source\n"); auto e = (!newval) ? EvlocallabAutoGrayOff : EvlocallabAutoGrayOn; listener->panelChanged(e, newval ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } */ // } }