rawTherapee/rtgui/locallabtools2.cc
Desmis 82129b304d
Re-open Generalized Hyperbolic Stretch (#7251)
* GHS GUI first step

* GHS GUI first step

* GUI step 3

* Hide show ghsmethod

* Siril functions for ghs

* Init ghs in iplocallab

* ghs step 2

* ghs step 4

* Comment copyright Pixlnsight 2021

* Smooth highlights and tooltips

* Enabled saturation and luminance ghs mode

* First tooltip

* Ghs tooltips

* Remove wrong packstart inverssh

* Change labels and tooltips

* Disabled mask in global and other improvments

* Comment code

* appimage and windows yml ghs

* Change tooltip

* Ghsmethod hue and change tolltips

* Change tooltip

* Inverse Stretch step 1

* Inverse GHS

* GHS tooltips

* Change tooltips

* Change tooltip

* Linear black point

* Small change to blackpoint

* Change tooltip

* Clean and comment code

* forgotten GHS highlight attenuation msg in history

* Comment code with Transformation equations

* Change tooltip

* Wrong default value balck point

* Comment code iplocallab

* Ghs curve step 1

* GHS curve step 2

* Show GHS setting in a Curve Box

* Tooltip for ghs S curve

* Disabled warning in compilation simpleprocess

* Simplified code part 1

* Simplified code GHS graph part 2

* Improve black point with negatives values

* Improve BP and tooltip

* Listener enable only with GHS

* White point for GHS

* Change label and tooltip

* Improve behavior white point and black point

* Link sliders ghs_SP ghs_LP ghs_HP and change code to avoid balck screen

* hide unused button in diagonal curve GHS

* prevents the GHS representation in S from displaying artifacts if ghs-d=0

* Change tooltips

* Improvment and tooltips

* Forgotten tooltip

* Improve GUI GHS S curve - change tooltips

* Set transition gray areas in S curve GHS with values of the RT-spot

* Change label GHS

* setlogscale blackpoint and symmetry

* Set recursive reference enable by default in controlspotpanel

* Change lastlocalCurvesDir Dirghs in locallabtools and options - change labels

* Added in converttonormal ghsMode.. not sure if this is useful

* DIY to make GHS curve work without the choices

* Change RGB calculation with luminance function working profile

* 5 modes GHS method

* Label to show datas clipped Black point and White point

* Various change white point tooltips

* Bad behavior wp bp labels

* Small change to improccordinator call to ghschanged ghsbwchanged

* Set log scale ghs_D

* Hide Graduated filter if GHS enable

* Luminance Lab in ghsmethod

* Lab slope factor step 1

* Slope and Chromaticity GHS improvments

* Fixed bad sqrt line 17477 iplocallab

* Workaround linear GHS - re-enable Graduated filer GHS

* Change limits slope lab factor

* Ghs chromaticity Lab (Lch)

* Improve ghs chromaticity

* Change labels and tooltips Lab chroma

* Slope Lab to 100

* Noise and saturation RGB

* Saturation RGB standard and labels

* Change histogram and navigator panel without gamma when using working profile

* Remove gray in GHS curve

* Local contrast a minima

* Regularization stretch

* Improve Graduated Filter in all cases GHS Color and Light etc.

* Improves nlmeans to reduce noise after GHS

* Change to GF - tooltip Nlmeans

* Added oW oH tW tH etc.

* Added call GF

* tX tY for previewProps

* Comment code GF

* Improve local contrast ghs

* Change norm to norm2

* Improve GUI mode complexity and Lab GHS

* Show values BP WP in GUI

* Labgrid ghs step 1

* Labgrid for simulation GHS - step 2

* More points for Labgrid ghs

* Clean and comment code

* Fixed crash in inverse GHS white point - set to 10 points for GSH simulation

* Change to black point in inverse GHS

* Intilialize simulation with nothing if new spot

* Remove curve GHS - optimize code simulation - improve GUI

* set ghs default - fixed crash is case HP SP LP

* Fixed crash - I hope in inverse GHS

* Simplify WP and BP limits to avoid crash in inverse GHS

* Clean code with ghscurve - ghsshape

* Change tooltips

* Change to D - GUI - comment code

* Simulation with 4 more points

* Best simulation with point 0.05 and 0.95

* Clean code - change for crsah in Inverse GHS

* Show values WP and BP

* Change tooltips

* Midtones after GHS

* Modification code WP BP

* Tests changes in settings for transition and Shape detection - see Preferences

* Change order labels luma chroma hue

* Fixed bad behavior localllistener denchanged in dcrop.cc

* Save work

* Work on graduated filter

* Improve a little graduated filter SH and others...

* 3 configurations tests graduated filter SH plain image - color more sk - exposure normal

* Forgotten code ...

* Change improccordinator parameter

* Save work printf parameters GF

* New test for GF

* Hide plain image calculation GF

* Small chnages and comment code

* Change tooltip exp graduated filter

* Change tooltip exp graduated filter

* Save work

* Change GF for some tools only in Global and Fullimage - test for GF SH mode plain image

* Fixed crash and GUI part 1

* Others change GF

* Change label - allow GF plain image in SH

* Change GF with cx cy sk

* Adapt locallabtool and locallabtools2 to GF

* Clean code

* GF wavelet only in fullimage and global

* GF - Empirical correction to cx and cy in function of sk

* Change label GHS and position in GUI

* Fixed Black point bad behavior history - an oversight may be age

* Change real strength of GF - to look like GF main

* Include ksk - Skip correction in all code GF

* Passed other parameters to try

* New parameter for GF

* Change position graph-curv ghs and labels black and white point

* Change behavior and default value white point

* Save provisory work

* Save provisory work

* Curve GHS with 21 points including 0 and 1

* Two prameters added to change behavior GF - rationalize their using

* Change Black point direction

* Change range black-point for negatives values - chnage tooltips

* Change tooltips

* Various change to avoid crash and settings defaults

* Disabled showmùaskmethod - set max white point to 5

* Fixed bad behavior when change fullimage to global for mask

* Clean comment code

* Fixed - I hope - bad behavior when we go from Fullimage to Global and vice versa

* Fixed crash in output tif and show time to calculate WP and BP

* Change tooltip BP and WP

* Change tooltips BP WP

* move GF after GHS so as not to influence BP and WP

* Clean code

* Disable all mask and modifications in Global but remain active in fullimage and normal

* Change tooltip graduated filter

* Restore GF in normal mode - and increases GF strength as before

* Clean code locallabtools 1 2

* Comment in calclocalGradientParams in iplocallab for changes in Graduated F

* Change convention labels - tooltips

* Change tooltips

* improves (I hope) the readability of the tooltips

* Remove with comment change complexity in Settings

* Improve settings BP WP - improve tooltips

* Refactor GHS curve and increase resolution

Simplify how the curve parameters are passed to the drawing area.

Use up to 400 line segments to draw the curve.

* Update GHS curve tooltip

Remove statement regarding the number of points used because it is no
longer accurate.

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Change Luma with Lightness

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Update rtdata/languages/default

Co-authored-by: Lawrence37 <45837045+Lawrence37@users.noreply.github.com>

* Remove warnings in icmpanel

* Changes suggested by Lawrence37

* GHS - Hide inverse always show in some cases - improve tooltip BP WP

* Change tooltip

* Change tooltip

* Small changes

* Change tootip suggested by Lawrence37 - set midtones and LC set_sensitive in function of D

* Add tooltip as suggest by Lawrence37 for LC and midtones

* Remove tooltip on Frame LC and Midtones

* Remove all traces toottips frame LD and Midtones

* set sensitive BLP and HLP to false if stretch = 0

* Change Beep6581 to Rawtherapee in appimage.yml and Windows.yml

* Hide LC and midtones when Stretch = 0

* Clean up Generalized Hyperbolic Stretch code

Convert some ints into enum classes.

Replace new/delete with std::unique_ptr for image.

Remove unused GHS parameters in ProcParams and ParamsEdited which were
used to draw the curve.

Revert changes to the curve editors because they are not needed.

Simplify the drawing of the curve background for efficiency.

Restore the const-ness of some variables.

* Change appimage.yml and windows.yml

---------

Co-authored-by: Lawrence Lee <45837045+Lawrence37@users.noreply.github.com>
2025-03-29 18:07:58 +01:00

14060 lines
532 KiB
C++

/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>frame
*
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published 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 <http://www.gnu.org/licenses/>.
* 2019-2020 Pierre Cabrera <pierre.cab@gmail.com>
*/
#include "locallabtools.h"
#include "options.h"
#include "rtengine/procparams.h"
#include "locallab.h"
#include "rtimage.h"
#include "rtengine/color.h"
#include "eventmapper.h"
#include "rtengine/utils.h"
#define MINNEIGH 0.1
#define MAXNEIGH 1500
#define CENTERNEIGH 200
using namespace rtengine;
using namespace procparams;
extern Options options;
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);
const double x = (sval - 200) / 200; // x range: 0 - 1
const 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, i.e. 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;
}
/* ==== LocallabTone ==== */
LocallabTone::LocallabTone():
LocallabTool(this, M("TP_LOCALLAB_TONE_TOOLNAME"), M("TP_LOCALLAB_TM"), true),
// Tone mapping specific widgets
repartm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))),
amount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_AMOUNT"), 50., 100.0, 0.5, 95.))),
stren(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STREN"), -0.5, 2.0, 0.01, 0.5))),
equiltm(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))),
gamma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAM"), 0.4, 4.0, 0.11, 1.0))),
satur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATUR"), -100., 100., 0.1, 0.))), // By default satur = 0 ==> use Mantiuk value
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))),
softradiustm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.1, 0.))),//unused here, but used for normalize_mean_dt
sensitm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
previewtm(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))),
exprecovt(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablet(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablet(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothrest(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthrest(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthrest(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decayt(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
expmasktm(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWT")))),
showmasktmMethod(Gtk::manage(new MyComboBoxText())),
enatmMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
enatmMaskaft(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_AFTER_MASK")))),
// masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
masktmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmasktmshape(static_cast<FlatCurveEditor*>(masktmCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmasktmshape(static_cast<FlatCurveEditor*>(masktmCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmasktmshape(static_cast<FlatCurveEditor *>(masktmCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
blendmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
lapmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
radmasktm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.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.))),
mask2tmCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmasktmshape(static_cast<DiagonalCurveEditor*>(mask2tmCurveEditorG->addCurve(CT_Diagonal, "L(L)")))
{
auto m = ProcEventMapper::getInstance();
Evlocallabpreviewtm = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWTM");
set_orientation(Gtk::ORIENTATION_VERTICAL);
const LocallabParams::LocallabSpot defSpot;
// Parameter Tone Mapping specific widgets
amount->setAdjusterListener(this);
repartm->setAdjusterListener(this);
stren->setAdjusterListener(this);
equiltmConn = equiltm->signal_toggled().connect(sigc::mem_fun(*this, &LocallabTone::equiltmChanged));
gamma->setAdjusterListener(this);
satur->setAdjusterListener(this);
estop->setAdjusterListener(this);
scaltm->setAdjusterListener(this);
rewei->setAdjusterListener(this);
softradiustm->setLogScale(10, 0);
softradiustm->setAdjusterListener(this);
sensitm->setAdjusterListener(this);
recothrest->setAdjusterListener(this);
lowthrest->setAdjusterListener(this);
higthrest->setAdjusterListener(this);
decayt->setAdjusterListener(this);
setExpandAlignProperties(exprecovt, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
previewtm->set_active(false);
previewtmConn = previewtm->signal_clicked().connect(
sigc::mem_fun(
*this, &LocallabTone::previewtmChanged));
setExpandAlignProperties(expmasktm, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
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_SHOWREF"));
showmasktmMethod->set_active(0);
showmasktmMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmasktmMethodConn = showmasktmMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabTone::showmasktmMethodChanged));
enatmMaskConn = enatmMask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabTone::enatmMaskChanged));
enatmMaskaftConn = enatmMaskaft->signal_toggled().connect(sigc::mem_fun(*this, &LocallabTone::enatmMaskaftChanged));
masktmCurveEditorG->setCurveListener(this);
CCmasktmshape->setIdentityValue(0.);
CCmasktmshape->setResetCurve(FlatCurveType(defSpot.CCmasktmcurve.at(0)), defSpot.CCmasktmcurve);
CCmasktmshape->setBottomBarColorProvider(this, 1);
LLmasktmshape->setIdentityValue(0.);
LLmasktmshape->setResetCurve(FlatCurveType(defSpot.LLmasktmcurve.at(0)), defSpot.LLmasktmcurve);
LLmasktmshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmasktmshape->setIdentityValue(0.);
HHmasktmshape->setResetCurve(FlatCurveType(defSpot.HHmasktmcurve.at(0)), defSpot.HHmasktmcurve);
HHmasktmshape->setCurveColorProvider(this, 2);
HHmasktmshape->setBottomBarColorProvider(this, 2);
masktmCurveEditorG->curveListComplete();
blendmasktm->setAdjusterListener(this);
lapmasktm->setAdjusterListener(this);
radmasktm->setAdjusterListener(this);
chromasktm->setAdjusterListener(this);
gammasktm->setAdjusterListener(this);
slomasktm->setAdjusterListener(this);
mask2tmCurveEditorG->setCurveListener(this);
Lmasktmshape->setResetCurve(DiagonalCurveType(defSpot.Lmasktmcurve.at(0)), defSpot.Lmasktmcurve);
Lmasktmshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
Lmasktmshape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2tmCurveEditorG->curveListComplete();
Gtk::Separator* const separatortm = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
// Add Tone Mapping specific widgets to GUI
// pack_start(*amount); // To use if we change transit_shapedetect parameters
pack_start(*sensitm);
pack_start(*previewtm);
pack_start(*repartm);
pack_start(*separatortm);
pack_start(*stren);
pack_start(*equiltm);
pack_start(*gamma);
pack_start(*satur);
pack_start(*estop);
pack_start(*scaltm);
pack_start(*rewei);
// pack_start(*softradiustm); //unused here, but used for normalize_mean_dt
// pack_start(*sensitm);
ToolParamBlock* const tmBox3 = Gtk::manage(new ToolParamBlock());
tmBox3->pack_start(*maskusablet, Gtk::PACK_SHRINK, 0);
tmBox3->pack_start(*maskunusablet, Gtk::PACK_SHRINK, 0);
tmBox3->pack_start(*recothrest);
tmBox3->pack_start(*lowthrest);
tmBox3->pack_start(*higthrest);
tmBox3->pack_start(*decayt);
// colBox3->pack_start(*invmaskc);
exprecovt->add(*tmBox3, false);
pack_start(*exprecovt, false, false);
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);
masktmBox->pack_start(*lapmasktm, Gtk::PACK_SHRINK, 0);
masktmBox->pack_start(*radmasktm, Gtk::PACK_SHRINK, 0);
masktmBox->pack_start(*chromasktm, Gtk::PACK_SHRINK, 0);
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);
pack_start(*expmasktm, false, false);
}
LocallabTone::~LocallabTone()
{
delete masktmCurveEditorG;
delete mask2tmCurveEditorG;
}
bool LocallabTone::isMaskViewActive()
{
return (showmasktmMethod->get_active_row_number() != 0);
}
void LocallabTone::resetMaskView()
{
showmasktmMethodConn.block(true);
showmasktmMethod->set_active(0);
showmasktmMethodConn.block(false);
}
void LocallabTone::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
tmMask = showmasktmMethod->get_active_row_number();
}
Gtk::ToggleButton *LocallabTone::getPreviewDeltaEButton() const
{
return previewtm;
}
sigc::connection *LocallabTone::getPreviewDeltaEButtonConnection()
{
return &previewtmConn;
}
void LocallabTone::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
exp->set_tooltip_text(M("TP_LOCALLAB_TONEMAP_TOOLTIP"));
recothrest->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
exprecovt->set_tooltip_markup(M("TP_LOCALLAB_MASKRESTM_TOOLTIP"));
equiltm->set_tooltip_text(M("TP_LOCALLAB_EQUILTM_TOOLTIP"));
repartm->set_tooltip_text(M("TP_LOCALLAB_REPARTM_TOOLTIP"));
gamma->set_tooltip_text(M("TP_LOCALLAB_TONEMAPGAM_TOOLTIP"));
estop->set_tooltip_text(M("TP_LOCALLAB_TONEMAPESTOP_TOOLTIP"));
scaltm->set_tooltip_text(M("TP_LOCALLAB_TONEMASCALE_TOOLTIP"));
rewei->set_tooltip_text(M("TP_LOCALLAB_TONEMAPREWEI_TOOLTIP"));
sensitm->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
expmasktm->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
CCmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmasktmshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
blendmasktm->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
radmasktm->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
mask2tmCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
Lmasktmshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
masktmCurveEditorG->set_tooltip_markup(M("TP_LOCALLAB_MASKCURVE_TOOLTIP"));
gammasktm->set_tooltip_text(M("TP_LOCALLAB_GAMMASK_TOOLTIP"));
chromasktm->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
slomasktm->set_tooltip_text(M("TP_LOCALLAB_SLOMASK_TOOLTIP"));
lapmasktm->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
decayt->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
lowthrest->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESTM_TOOLTIP"));
higthrest->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESTM_TOOLTIP"));
} else {
exp->set_tooltip_text("");
equiltm->set_tooltip_text("");
recothrest->set_tooltip_text("");
repartm->set_tooltip_text("");
gamma->set_tooltip_text("");
estop->set_tooltip_text("");
scaltm->set_tooltip_text("");
rewei->set_tooltip_text("");
sensitm->set_tooltip_text("");
expmasktm->set_tooltip_markup("");
CCmasktmshape->setTooltip("");
LLmasktmshape->setTooltip("");
HHmasktmshape->setTooltip("");
blendmasktm->set_tooltip_text("");
radmasktm->set_tooltip_text("");
mask2tmCurveEditorG->set_tooltip_text("");
Lmasktmshape->setTooltip("");
mask2tmCurveEditorG->set_tooltip_text("");
Lmasktmshape->setTooltip("");
masktmCurveEditorG->set_tooltip_markup("");
gammasktm->set_tooltip_text("");
chromasktm->set_tooltip_text("");
slomasktm->set_tooltip_text("");
lapmasktm->set_tooltip_text("");
exprecovt->set_tooltip_markup("");
decayt->set_tooltip_text("");
lowthrest->set_tooltip_text("");
higthrest->set_tooltip_text("");
}
}
void LocallabTone::setDefaultExpanderVisibility()
{
exprecovt->set_expanded(false);
expmasktm->set_expanded(false);
}
void LocallabTone::disableListener()
{
LocallabTool::disableListener();
equiltmConn.block(true);
showmasktmMethodConn.block(true);
enatmMaskConn.block(true);
enatmMaskaftConn.block(true);
}
void LocallabTone::enableListener()
{
LocallabTool::enableListener();
equiltmConn.block(false);
showmasktmMethodConn.block(false);
enatmMaskConn.block(false);
enatmMaskaftConn.block(false);
}
//new function Global
void LocallabTone::updateguitone(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensitm->hide();
exprecovt->hide();
expmasktm->hide();
enatmMask->set_active(false);
enatmMaskaft->set_active(false);
previewtm->hide();
// previewtmConn.block(true);
previewtm->set_active(false);
// previewtmConn.block(false);
} else {
sensitm->show();
previewtm->show();
exprecovt->show();
expmasktm->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
void LocallabTone::previewtmChanged()
{
// showmasktmMethodConn.block(true);
if(previewtm->get_active()) {
showmasktmMethod->set_active(4);
} else {
showmasktmMethod->set_active(0);
}
// showmasktmMethodConn.block(false);
if (isLocActivated) {
if (listener) {
listener->panelChanged(Evlocallabpreviewtm,"");
}
}
}
void LocallabTone::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visitonemap);
exp->setEnabled(spot.exptonemap);
complexity->set_active(spot.complextonemap);
amount->setValue(spot.amount);
stren->setValue(spot.stren);
repartm->setValue(spot.repartm);
equiltm->set_active(spot.equiltm);
gamma->setValue(spot.gamma);
satur->setValue(spot.satur);
estop->setValue(spot.estop);
scaltm->setValue(spot.scaltm);
rewei->setValue((double)spot.rewei);
softradiustm->setValue(spot.softradiustm);
sensitm->setValue((double)spot.sensitm);
enatmMask->set_active(spot.enatmMask);
enatmMaskaft->set_active(spot.enatmMaskaft);
CCmasktmshape->setCurve(spot.CCmasktmcurve);
LLmasktmshape->setCurve(spot.LLmasktmcurve);
HHmasktmshape->setCurve(spot.HHmasktmcurve);
blendmasktm->setValue((double)spot.blendmasktm);
lapmasktm->setValue(spot.lapmasktm);
radmasktm->setValue(spot.radmasktm);
chromasktm->setValue(spot.chromasktm);
gammasktm->setValue(spot.gammasktm);
slomasktm->setValue(spot.slomasktm);
Lmasktmshape->setCurve(spot.Lmasktmcurve);
recothrest->setValue((double)spot.recothrest);
lowthrest->setValue((double)spot.lowthrest);
higthrest->setValue((double)spot.higthrest);
decayt->setValue((double)spot.decayt);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabTone::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.exptonemap = exp->getEnabled();
spot.visitonemap = exp->get_visible();
spot.complextonemap = complexity->get_active_row_number();
spot.amount = amount->getValue();
spot.stren = stren->getValue();
spot.repartm = repartm->getValue();
spot.equiltm = equiltm->get_active();
spot.gamma = gamma->getValue();
spot.satur = satur->getValue();
spot.estop = estop->getValue();
spot.scaltm = scaltm->getValue();
spot.rewei = rewei->getIntValue();
spot.softradiustm = softradiustm->getValue();
spot.sensitm = sensitm->getIntValue();
spot.enatmMask = enatmMask->get_active();
spot.enatmMaskaft = enatmMaskaft->get_active();
spot.LLmasktmcurve = LLmasktmshape->getCurve();
spot.CCmasktmcurve = CCmasktmshape->getCurve();
spot.HHmasktmcurve = HHmasktmshape->getCurve();
spot.blendmasktm = blendmasktm->getIntValue();
spot.lapmasktm = lapmasktm->getValue();
spot.radmasktm = radmasktm->getValue();
spot.chromasktm = chromasktm->getValue();
spot.gammasktm = gammasktm->getValue();
spot.slomasktm = slomasktm->getValue();
spot.Lmasktmcurve = Lmasktmshape->getCurve();
spot.recothrest = recothrest->getValue();
spot.lowthrest = lowthrest->getValue();
spot.higthrest = higthrest->getValue();
spot.decayt = decayt->getValue();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabTone::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default values for adjuster widgets
amount->setDefault(defSpot.amount);
stren->setDefault(defSpot.stren);
gamma->setDefault(defSpot.gamma);
satur->setDefault(defSpot.satur);
estop->setDefault(defSpot.estop);
scaltm->setDefault(defSpot.scaltm);
repartm->setDefault(defSpot.repartm);
rewei->setDefault((double)defSpot.rewei);
softradiustm->setDefault(defSpot.softradiustm);
sensitm->setDefault((double)defSpot.sensitm);
blendmasktm->setDefault((double)defSpot.blendmasktm);
lapmasktm->setDefault(defSpot.lapmasktm);
radmasktm->setDefault(defSpot.radmasktm);
chromasktm->setDefault(defSpot.chromasktm);
gammasktm->setDefault(defSpot.gammasktm);
slomasktm->setDefault(defSpot.slomasktm);
recothrest->setDefault((double)defSpot.recothrest);
lowthrest->setDefault((double)defSpot.lowthrest);
higthrest->setDefault((double)defSpot.higthrest);
decayt->setDefault((double)defSpot.decayt);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabTone::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->getEnabled() && listener) {
const auto spName = " (" + escapeHtmlChars(getSpotName()) + ")";
if (a == amount) {
listener->panelChanged(Evlocallabamount, amount->getTextValue() + spName);
} else if (a == stren) {
listener->panelChanged(Evlocallabstren, stren->getTextValue() + spName);
} else if (a == gamma) {
listener->panelChanged(Evlocallabgamma, gamma->getTextValue() + spName);
} else if (a == satur) {
listener->panelChanged(Evlocallabsatur, satur->getTextValue() + spName);
} else if (a == estop) {
listener->panelChanged(Evlocallabestop, estop->getTextValue() + spName);
} else if (a == scaltm) {
listener->panelChanged(Evlocallabscaltm, scaltm->getTextValue() + spName);
} else if (a == repartm) {
listener->panelChanged(Evlocallabrepartm, repartm->getTextValue() + spName);
} else if (a == rewei) {
listener->panelChanged(Evlocallabrewei, rewei->getTextValue() + spName);
} else if (a == softradiustm) {
listener->panelChanged(Evlocallabsoftradiustm, softradiustm->getTextValue() + spName);
} else if (a == sensitm) {
listener->panelChanged(Evlocallabsensitm, sensitm->getTextValue() + spName);
} else if (a == blendmasktm) {
listener->panelChanged(Evlocallabblendmasktm, blendmasktm->getTextValue() + spName);
} else if (a == lapmasktm) {
listener->panelChanged(Evlocallablapmasktm, lapmasktm->getTextValue() + spName);
} else if (a == radmasktm) {
listener->panelChanged(Evlocallabradmasktm, radmasktm->getTextValue() + spName);
} else if (a == chromasktm) {
listener->panelChanged(Evlocallabchromasktm, chromasktm->getTextValue() + spName);
} else if (a == gammasktm) {
listener->panelChanged(Evlocallabgammasktm, gammasktm->getTextValue() + spName);
} else if (a == slomasktm) {
listener->panelChanged(Evlocallabslomasktm, slomasktm->getTextValue() + spName);
} else if (a == recothrest) {
listener->panelChanged(Evlocallabrecothrest, recothrest->getTextValue() + spName);
} else if (a == lowthrest) {
listener->panelChanged(Evlocallablowthrest, lowthrest->getTextValue() + spName);
} else if (a == higthrest) {
listener->panelChanged(Evlocallabhigthrest, higthrest->getTextValue() + spName);
} else if (a == decayt) {
listener->panelChanged(Evlocallabdecayt, decayt->getTextValue() + spName);
}
}
}
void LocallabTone::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled() && listener) {
const auto spName = M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")";
if (ce == CCmasktmshape) {
listener->panelChanged(EvlocallabCCmasktmshape, spName);
} else if (ce == LLmasktmshape) {
listener->panelChanged(EvlocallabLLmasktmshape, spName);
} else if (ce == HHmasktmshape) {
listener->panelChanged(EvlocallabHHmasktmshape, spName);
} else if (ce == Lmasktmshape) {
listener->panelChanged(EvlocallabLmasktmshape, spName);
}
}
}
void LocallabTone::enabledChanged()
{
if (isLocActivated && listener) {
listener->panelChanged(EvLocenatonemap, (exp->getEnabled() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"))
+ " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
void LocallabTone::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden GUI widgets in Normal mode to default spot values
gamma->setValue(defSpot.gamma);
satur->setValue(defSpot.satur);
rewei->setValue((double)defSpot.rewei);
lapmasktm->setValue(defSpot.lapmasktm);
gammasktm->setValue(defSpot.gammasktm);
slomasktm->setValue(defSpot.slomasktm);
// Enable all listeners
enableListener();
}
void LocallabTone::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden specific GUI widgets in Simple mode to default spot values
showmasktmMethod->set_active(0);
enatmMask->set_active(defSpot.enatmMask);
enatmMaskaft->set_active(defSpot.enatmMaskaft);
// CCmasktmshape->setCurve(defSpot.CCmasktmcurve);
// LLmasktmshape->setCurve(defSpot.LLmasktmcurve);
// HHmasktmshape->setCurve(defSpot.HHmasktmcurve);
// blendmasktm->setValue((double)defSpot.blendmasktm);
// radmasktm->setValue(defSpot.radmasktm);
// chromasktm->setValue(defSpot.chromasktm);
// Lmasktmshape->setCurve(defSpot.Lmasktmcurve);
recothrest->setValue(defSpot.recothrest);
lowthrest->setValue(defSpot.lowthrest);
higthrest->setValue(defSpot.higthrest);
decayt->setValue(defSpot.decayt);
// Enable all listeners
enableListener();
}
void LocallabTone::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
gamma->hide();
satur->hide();
rewei->hide();
expmasktm->hide();
exprecovt->hide();
decayt->hide();
maskusablet->hide();
maskunusablet->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
gamma->hide();
satur->hide();
rewei->hide();
lapmasktm->hide();
gammasktm->hide();
slomasktm->hide();
// Specific Simple mode widgets are shown in Normal mode
expmasktm->show();
exprecovt->show();
decayt->hide();
if (enatmMask->get_active()) {
maskusablet->show();
maskunusablet->hide();
} else {
maskusablet->hide();
maskunusablet->show();
}
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
gamma->show();
satur->show();
rewei->show();
expmasktm->show();
lapmasktm->show();
gammasktm->show();
slomasktm->show();
exprecovt->show();
decayt->show();
if (enatmMask->get_active()) {
maskusablet->show();
maskunusablet->hide();
} else {
maskusablet->hide();
maskunusablet->show();
}
}
}
void LocallabTone::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
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 mask background
CCmasktmshape->updateLocallabBackground(normChromar);
LLmasktmshape->updateLocallabBackground(normLumar);
HHmasktmshape->updateLocallabBackground(normHuer);
Lmasktmshape->updateLocallabBackground(normLumar);
return false;
}
);
}
void LocallabTone::equiltmChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (equiltm->get_active()) {
listener->panelChanged(Evlocallabequiltm,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabequiltm,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabTone::showmasktmMethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void LocallabTone::enatmMaskChanged()
{
if (enatmMask->get_active()) {
maskusablet->show();
maskunusablet->hide();
} else {
maskusablet->hide();
maskunusablet->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enatmMask->get_active()) {
listener->panelChanged(EvLocallabEnatmMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnatmMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabTone::enatmMaskaftChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enatmMaskaft->get_active()) {
listener->panelChanged(EvLocallabEnatmMaskaft,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnatmMaskaft,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
/* ==== LocallabRetinex ==== */
LocallabRetinex::LocallabRetinex():
LocallabTool(this, M("TP_LOCALLAB_RET_TOOLNAME"), M("TP_LOCALLAB_RETI"), true),
// Retinex specific widgets
dehaFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DEHAFRA")))),
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))),
dehazeSaturation(Gtk::manage(new Adjuster(M("TP_DEHAZE_SATURATION"), 0, 100, 1, 50))),
dehazeblack(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZE_BLACK"), -65., 100., 1., 0.))),
retiFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETIFRA")))),
str(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STR"), 0., 100., 0.2, 0.))),
loglin(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGLIN")))),
sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
retitoolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETITOOLFRA")))),
retinexMethod(Gtk::manage(new MyComboBoxText())),
fftwreti(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW")))),
equilret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EQUIL")))),
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.))),
scalereti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALERETI"), 1.0, 10.0, 1., 2.))),
limd(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRESRETI"), 1.2, 100.0, 0.1, 8.))),
offs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_OFFS"), -16386., 32768., 1., 0.))),
expretitools(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPRETITOOLS")))),
chrrt(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHRRT"), 0.0, 100.0, 0.1, 0.0))),
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.))),
cliptm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLIPTM"), 0.02, 2.0, 0.01, 1.))),
softradiusret(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRETI"), 0.0, 100.0, 0.5, 40.))),
LocalcurveEditortransT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONMAP"))),
cTtransshape(static_cast<FlatCurveEditor*>(LocalcurveEditortransT->addCurve(CT_Flat, "", nullptr, false, false))),
mMLabels(Gtk::manage(new Gtk::Label("---"))),
transLabels(Gtk::manage(new Gtk::Label("---"))),
transLabels2(Gtk::manage(new Gtk::Label("---"))),
LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))),
cTgainshape(static_cast<FlatCurveEditor*>(LocalcurveEditorgainT->addCurve(CT_Flat, "", nullptr, false, false))),
exprecovr(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusabler(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusabler(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
lowthresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW2"), 1., 80., 0.5, 12.))),
higthresr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR2"), 20., 99., 0.5, 85.))),
decayr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
expmaskreti(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWR")))),
showmaskretiMethod(Gtk::manage(new MyComboBoxText())),
enaretiMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
enaretiMasktmap(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TM_MASK")))),
// maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
maskretiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmaskretishape(static_cast<FlatCurveEditor*>(maskretiCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmaskretishape(static_cast<FlatCurveEditor*>(maskretiCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmaskretishape(static_cast<FlatCurveEditor *>(maskretiCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
blendmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 10.))),
lapmaskreti(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
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.))),
mask2retiCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmaskretishape(static_cast<DiagonalCurveEditor*>(mask2retiCurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
inversret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS"))))
{
auto m = ProcEventMapper::getInstance();
Evlocallabdehazeblack = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_DEHAZE_BLACK");
set_orientation(Gtk::ORIENTATION_VERTICAL);
const LocallabParams::LocallabSpot defSpot;
// Parameter Retinex specific widgets
dehaz->setAdjusterListener(this);
dehazeSaturation->setAdjusterListener(this);
depth->setAdjusterListener(this);
dehazeblack->setAdjusterListener(this);
retiFrame->set_label_align(0.025, 0.5);
str->setAdjusterListener(this);
loglinConn = loglin->signal_toggled().connect(sigc::mem_fun(*this, &LocallabRetinex::loglinChanged));
sensih->setAdjusterListener(this);
retitoolFrame->set_label_align(0.025, 0.5);
retinexMethod->append(M("TP_RETINEX_LOW"));
retinexMethod->append(M("TP_RETINEX_UNIFORM"));
retinexMethod->append(M("TP_RETINEX_HIGH"));
retinexMethod->set_active(0);
retinexMethod->set_tooltip_markup(M("TP_LOCRETI_METHOD_TOOLTIP"));
retinexMethodConn = retinexMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabRetinex::retinexMethodChanged));
fftwretiConn = fftwreti->signal_toggled().connect(sigc::mem_fun(*this, &LocallabRetinex::fftwretiChanged));
equilretConn = equilret->signal_toggled().connect(sigc::mem_fun(*this, &LocallabRetinex::equilretChanged));
neigh->setAdjusterListener(this);
vart->setAdjusterListener(this);
scalereti->setAdjusterListener(this);
limd->setAdjusterListener(this);
offs->setAdjusterListener(this);
setExpandAlignProperties(expretitools, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
chrrt->setAdjusterListener(this);
darkness->setAdjusterListener(this);
lightnessreti->setAdjusterListener(this);
cliptm->setAdjusterListener(this);
softradiusret->setLogScale(10, 0);
softradiusret->setAdjusterListener(this);
LocalcurveEditortransT->setCurveListener(this);
cTtransshape->setIdentityValue(0.);
cTtransshape->setResetCurve(FlatCurveType(defSpot.localTtranscurve.at(0)), defSpot.localTtranscurve);
LocalcurveEditortransT->curveListComplete();
setExpandAlignProperties(mMLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
setExpandAlignProperties(transLabels, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
setExpandAlignProperties(transLabels2, true, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_START);
LocalcurveEditorgainT->setCurveListener(this);
cTgainshape->setIdentityValue(0.);
cTgainshape->setResetCurve(FlatCurveType(defSpot.localTgaincurve.at(0)), defSpot.localTgaincurve);
LocalcurveEditorgainT->curveListComplete();
recothresr->setAdjusterListener(this);
lowthresr->setAdjusterListener(this);
higthresr->setAdjusterListener(this);
decayr->setAdjusterListener(this);
setExpandAlignProperties(exprecovr, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
setExpandAlignProperties(expmaskreti, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
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_SHOWREF"));
showmaskretiMethod->set_active(0);
showmaskretiMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmaskretiMethodConn = showmaskretiMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabRetinex::showmaskretiMethodChanged));
enaretiMaskConn = enaretiMask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabRetinex::enaretiMaskChanged));
enaretiMasktmapConn = enaretiMasktmap->signal_toggled().connect(sigc::mem_fun(*this, &LocallabRetinex::enaretiMasktmapChanged));
maskretiCurveEditorG->setCurveListener(this);
CCmaskretishape->setIdentityValue(0.);
CCmaskretishape->setResetCurve(FlatCurveType(defSpot.CCmaskreticurve.at(0)), defSpot.CCmaskreticurve);
CCmaskretishape->setBottomBarColorProvider(this, 1);
LLmaskretishape->setIdentityValue(0.);
LLmaskretishape->setResetCurve(FlatCurveType(defSpot.LLmaskreticurve.at(0)), defSpot.LLmaskreticurve);
LLmaskretishape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmaskretishape->setIdentityValue(0.);
HHmaskretishape->setResetCurve(FlatCurveType(defSpot.HHmaskreticurve.at(0)), defSpot.HHmaskreticurve);
HHmaskretishape->setCurveColorProvider(this, 2);
HHmaskretishape->setBottomBarColorProvider(this, 2);
maskretiCurveEditorG->curveListComplete();
blendmaskreti->setAdjusterListener(this);
radmaskreti->setAdjusterListener(this);
lapmaskreti->setAdjusterListener(this);
chromaskreti->setAdjusterListener(this);
gammaskreti->setAdjusterListener(this);
slomaskreti->setAdjusterListener(this);
mask2retiCurveEditorG->setCurveListener(this);
Lmaskretishape->setResetCurve(DiagonalCurveType(defSpot.Lmaskreticurve.at(0)), defSpot.Lmaskreticurve);
Lmaskretishape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
Lmaskretishape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2retiCurveEditorG->curveListComplete();
inversretConn = inversret->signal_toggled().connect(sigc::mem_fun(*this, &LocallabRetinex::inversretChanged));
// Add Retinex specific widgets to GUI
pack_start(*sensih);
ToolParamBlock* const auxBox = Gtk::manage(new ToolParamBlock());
// Gtk::Frame* const dehaFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DEHAFRA")));
dehaFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const dehaBox = Gtk::manage(new ToolParamBlock());
dehaBox->pack_start(*dehaz);
dehaBox->pack_start(*depth);
dehaBox->pack_start(*dehazeSaturation);
dehaBox->pack_start(*dehazeblack);
dehaFrame->add(*dehaBox);
auxBox->add(*dehaFrame);
ToolParamBlock* const deharetiBox = Gtk::manage(new ToolParamBlock());
deharetiBox->pack_start(*str);
deharetiBox->pack_start(*loglin);
retiFrame->add(*deharetiBox);
auxBox->add(*retiFrame);
// ToolParamBlock* const scopeBox = Gtk::manage(new ToolParamBlock());
// scopeBox->pack_start(*sensih);
// auxBox->add(*scopeBox);
pack_start(*auxBox);
ToolParamBlock* const retiBox = 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);
ToolParamBlock* const toolretiBox = Gtk::manage(new ToolParamBlock());
// 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);
ToolParamBlock* const reBox3 = Gtk::manage(new ToolParamBlock());
reBox3->pack_start(*maskusabler, Gtk::PACK_SHRINK, 0);
reBox3->pack_start(*maskunusabler, Gtk::PACK_SHRINK, 0);
reBox3->pack_start(*recothresr);
reBox3->pack_start(*lowthresr);
reBox3->pack_start(*higthresr);
reBox3->pack_start(*decayr);
// colBox3->pack_start(*invmaskc);
exprecovr->add(*reBox3, false);
ToolParamBlock* const maskretiBox = Gtk::manage(new ToolParamBlock());
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);
retiBox->pack_start(*exprecovr, false, false);
retiBox->pack_start(*expmaskreti, false, false);
// retiBox->pack_start(*inversret);
retitoolFrame->add(*retiBox);
pack_start(*retitoolFrame);
}
LocallabRetinex::~LocallabRetinex()
{
delete LocalcurveEditortransT;
delete LocalcurveEditorgainT;
delete maskretiCurveEditorG;
delete mask2retiCurveEditorG;
}
void LocallabRetinex::updateMinMax(const double cdma, const double cdmin, const double mini, const double maxi, const double Tmean, const double Tsigma, const double Tmin, const double Tmax)
{
idle_register.add(
[this, cdma, cdmin, mini, maxi, Tmean, Tsigma, Tmin, Tmax]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
mMLabels->set_text(
Glib::ustring::compose(M("TP_LOCALLAB_MLABEL"),
Glib::ustring::format(std::fixed, std::setprecision(0), cdmin),
Glib::ustring::format(std::fixed, std::setprecision(0), cdma))
);
transLabels->set_text(
Glib::ustring::compose(M("TP_LOCALLAB_TLABEL"),
Glib::ustring::format(std::fixed, std::setprecision(1), mini),
Glib::ustring::format(std::fixed, std::setprecision(1), maxi),
Glib::ustring::format(std::fixed, std::setprecision(1), Tmean),
Glib::ustring::format(std::fixed, std::setprecision(1), Tsigma))
);
transLabels2->set_text(
Glib::ustring::compose(M("TP_RETINEX_TLABEL2"),
Glib::ustring::format(std::fixed, std::setprecision(1), Tmin),
Glib::ustring::format(std::fixed, std::setprecision(1), Tmax))
);
return false;
}
);
}
//new function Global
void LocallabRetinex::updateguireti(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensih->hide();
exprecovr->hide();
expmaskreti->hide();
enaretiMask->set_active(false);
enaretiMasktmap->set_active(false);
} else {
sensih->show();
exprecovr->show();
expmaskreti->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
bool LocallabRetinex::isMaskViewActive()
{
return (showmaskretiMethod->get_active_row_number() != 0);
}
void LocallabRetinex::resetMaskView()
{
showmaskretiMethodConn.block(true);
showmaskretiMethod->set_active(0);
showmaskretiMethodConn.block(false);
}
void LocallabRetinex::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
retiMask = showmaskretiMethod->get_active_row_number();
}
void LocallabRetinex::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
dehaFrame->set_tooltip_text(M("TP_LOCALLAB_DEHAZFRAME_TOOLTIP"));
dehaz->set_tooltip_text(M("TP_LOCALLAB_DEHAZ_TOOLTIP"));
retiFrame->set_tooltip_text(M("TP_LOCALLAB_RETIFRAME_TOOLTIP"));
exprecovr->set_tooltip_markup(M("TP_LOCALLAB_MASKRESRETI_TOOLTIP"));
loglin->set_tooltip_text(M("TP_LOCALLAB_RETI_LOGLIN_TOOLTIP"));
sensih->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
fftwreti->set_tooltip_text(M("TP_LOCALLAB_LC_FFTW_TOOLTIP"));
equilret->set_tooltip_text(M("TP_LOCALLAB_EQUILTM_TOOLTIP"));
neigh->set_tooltip_text(M("TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP"));
vart->set_tooltip_text(M("TP_LOCALLAB_RETI_NEIGH_VART_TOOLTIP"));
scalereti->set_tooltip_text(M("TP_LOCALLAB_RETI_SCALE_TOOLTIP"));
limd->set_tooltip_text(M("TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP"));
offs->set_tooltip_text(M("TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP"));
darkness->set_tooltip_text(M("TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP"));
lightnessreti->set_tooltip_text(M("TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP"));
cliptm->set_tooltip_text(M("TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP"));
softradiusret->set_tooltip_text(M("TP_LOCALLAB_GUIDFILTER_TOOLTIP"));
cTtransshape->setTooltip(M("TP_LOCALLAB_TRANSMISSION_TOOLTIP"));
mMLabels->set_tooltip_markup(M("TP_LOCALLAB_MLABEL_TOOLTIP"));
transLabels->set_tooltip_markup(M("TP_LOCALLAB_TLABEL_TOOLTIP"));
transLabels2->set_tooltip_markup(M("TP_LOCALLAB_TLABEL_TOOLTIP"));
cTgainshape->setTooltip(M("TP_RETINEX_GAINTRANSMISSION_TOOLTIP"));
expmaskreti->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
enaretiMasktmap->set_tooltip_markup(M("TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP"));
CCmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmaskretishape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
blendmaskreti->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
radmaskreti->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
mask2retiCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
Lmaskretishape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
maskretiCurveEditorG->set_tooltip_markup(M("TP_LOCALLAB_MASKCURVE_TOOLTIP"));
gammaskreti->set_tooltip_text(M("TP_LOCALLAB_GAMMASK_TOOLTIP"));
chromaskreti->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
slomaskreti->set_tooltip_text(M("TP_LOCALLAB_SLOMASK_TOOLTIP"));
lapmaskreti->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
decayr->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
lowthresr->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESRETI_TOOLTIP"));
higthresr->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESRETI_TOOLTIP"));
} else {
dehaFrame->set_tooltip_text("");
dehaz->set_tooltip_text("");
retiFrame->set_tooltip_text("");
loglin->set_tooltip_text("");
sensih->set_tooltip_text("");
fftwreti->set_tooltip_text("");
equilret->set_tooltip_text("");
neigh->set_tooltip_text("");
vart->set_tooltip_text("");
scalereti->set_tooltip_text("");
limd->set_tooltip_text("");
offs->set_tooltip_text("");
darkness->set_tooltip_text("");
lightnessreti->set_tooltip_text("");
cliptm->set_tooltip_text("");
softradiusret->set_tooltip_text("");
cTtransshape->setTooltip("");
mMLabels->set_tooltip_markup("");
transLabels->set_tooltip_markup("");
transLabels2->set_tooltip_markup("");
cTgainshape->setTooltip("");
expmaskreti->set_tooltip_markup("");
enaretiMasktmap->set_tooltip_markup("");
CCmaskretishape->setTooltip("");
LLmaskretishape->setTooltip("");
HHmaskretishape->setTooltip("");
blendmaskreti->set_tooltip_text("");
radmaskreti->set_tooltip_text("");
mask2retiCurveEditorG->set_tooltip_text("");
Lmaskretishape->setTooltip("");
maskretiCurveEditorG->set_tooltip_markup("");
gammaskreti->set_tooltip_text("");
chromaskreti->set_tooltip_text("");
slomaskreti->set_tooltip_text("");
lapmaskreti->set_tooltip_text("");
exprecovr->set_tooltip_markup("");
decayr->set_tooltip_text("");
lowthresr->set_tooltip_text("");
higthresr->set_tooltip_text("");
}
}
void LocallabRetinex::setDefaultExpanderVisibility()
{
exprecovr->set_expanded(false);
expretitools->set_expanded(false);
expmaskreti->set_expanded(false);
}
void LocallabRetinex::disableListener()
{
LocallabTool::disableListener();
loglinConn.block(true);
retinexMethodConn.block(true);
fftwretiConn.block(true);
equilretConn.block(true);
showmaskretiMethodConn.block(true);
enaretiMaskConn.block(true);
enaretiMasktmapConn.block(true);
inversretConn.block(true);
}
void LocallabRetinex::enableListener()
{
LocallabTool::enableListener();
loglinConn.block(false);
retinexMethodConn.block(false);
fftwretiConn.block(false);
equilretConn.block(false);
showmaskretiMethodConn.block(false);
enaretiMaskConn.block(false);
enaretiMasktmapConn.block(false);
inversretConn.block(false);
}
void LocallabRetinex::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visireti);
exp->setEnabled(spot.expreti);
complexity->set_active(spot.complexreti);
dehaz->setValue((double)spot.dehaz);
depth->setValue((double)spot.depth);
dehazeSaturation->setValue((double)spot.dehazeSaturation);
dehazeblack->setValue((double)spot.dehazeblack);
str->setValue(spot.str);
loglin->set_active(spot.loglin);
sensih->setValue((double)spot.sensih);
if (spot.retinexMethod == "low") {
retinexMethod->set_active(0);
} else if (spot.retinexMethod == "uni") {
retinexMethod->set_active(1);
} else {
retinexMethod->set_active(2);
}
fftwreti->set_active(spot.fftwreti);
equilret->set_active(spot.equilret);
neigh->setValue(spot.neigh);
vart->setValue(spot.vart);
scalereti->setValue(spot.scalereti);
limd->setValue(spot.limd);
offs->setValue(spot.offs);
chrrt->setValue(0.);
// chrrt->setValue(spot.chrrt);
darkness->setValue(spot.darkness);
lightnessreti->setValue(spot.lightnessreti);
cliptm->setValue(spot.cliptm);
softradiusret->setValue(spot.softradiusret);
cTtransshape->setCurve(spot.localTtranscurve);
cTgainshape->setCurve(spot.localTgaincurve);
enaretiMask->set_active(spot.enaretiMask);
enaretiMasktmap->set_active(spot.enaretiMasktmap);
CCmaskretishape->setCurve(spot.CCmaskreticurve);
LLmaskretishape->setCurve(spot.LLmaskreticurve);
HHmaskretishape->setCurve(spot.HHmaskreticurve);
blendmaskreti->setValue((double)spot.blendmaskreti);
radmaskreti->setValue(spot.radmaskreti);
lapmaskreti->setValue(spot.lapmaskreti);
chromaskreti->setValue(spot.chromaskreti);
gammaskreti->setValue(spot.gammaskreti);
slomaskreti->setValue(spot.slomaskreti);
Lmaskretishape->setCurve(spot.Lmaskreticurve);
inversret->set_active(spot.inversret);
recothresr->setValue((double)spot.recothresr);
lowthresr->setValue((double)spot.lowthresr);
higthresr->setValue((double)spot.higthresr);
decayr->setValue((double)spot.decayr);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Update Retinex GUI according to scalereti adjuster value
updateRetinexGUI1();
// Update Retinex GUI according to inversret button state
updateRetinexGUI2();
// Update Retinex GUI according to str adjuster value
updateRetinexGUI3();
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabRetinex::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.expreti = exp->getEnabled();
spot.visireti = exp->get_visible();
spot.complexreti = complexity->get_active_row_number();
spot.dehaz = dehaz->getIntValue();
spot.depth = depth->getIntValue();
spot.dehazeSaturation = dehazeSaturation->getIntValue();
spot.dehazeblack = dehazeblack->getValue();
spot.str = str->getValue();
spot.loglin = loglin->get_active();
spot.sensih = sensih->getIntValue();
if (retinexMethod->get_active_row_number() == 0) {
spot.retinexMethod = "low";
} else if (retinexMethod->get_active_row_number() == 1) {
spot.retinexMethod = "uni";
} else if (retinexMethod->get_active_row_number() == 2) {
spot.retinexMethod = "high";
}
spot.fftwreti = fftwreti->get_active();
spot.equilret = equilret->get_active();
spot.neigh = neigh->getValue();
spot.vart = vart->getValue();
spot.scalereti = scalereti->getValue();
spot.limd = limd->getValue();
spot.offs = offs->getValue();
spot.chrrt = chrrt->getValue();
spot.darkness = darkness->getValue();
spot.lightnessreti = lightnessreti->getValue();
spot.cliptm = cliptm->getValue();
spot.softradiusret = softradiusret->getValue();
spot.localTtranscurve = cTtransshape->getCurve();
spot.localTgaincurve = cTgainshape->getCurve();
spot.enaretiMask = enaretiMask->get_active();
spot.enaretiMasktmap = enaretiMasktmap->get_active();
spot.CCmaskreticurve = CCmaskretishape->getCurve();
spot.LLmaskreticurve = LLmaskretishape->getCurve();
spot.HHmaskreticurve = HHmaskretishape->getCurve();
spot.blendmaskreti = blendmaskreti->getIntValue();
spot.radmaskreti = radmaskreti->getValue();
spot.lapmaskreti = lapmaskreti->getValue();
spot.chromaskreti = chromaskreti->getValue();
spot.gammaskreti = gammaskreti->getValue();
spot.slomaskreti = slomaskreti->getValue();
spot.Lmaskreticurve = Lmaskretishape->getCurve();
spot.inversret = inversret->get_active();
spot.recothresr = recothresr->getValue();
spot.lowthresr = lowthresr->getValue();
spot.higthresr = higthresr->getValue();
spot.decayr = decayr->getValue();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabRetinex::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default values for adjuster widgets
dehaz->setDefault((double)defSpot.dehaz);
dehazeSaturation->setDefault((double)defSpot.dehazeSaturation);
dehazeblack->setDefault((double)defSpot.dehazeblack);
depth->setDefault((double)defSpot.depth);
str->setDefault(defSpot.str);
sensih->setDefault((double)defSpot.sensih);
neigh->setDefault(defSpot.neigh);
vart->setDefault(defSpot.vart);
scalereti->setDefault(defSpot.scalereti);
limd->setDefault(defSpot.limd);
offs->setDefault(defSpot.offs);
chrrt->setDefault(defSpot.chrrt);
darkness->setDefault(defSpot.darkness);
lightnessreti->setDefault(defSpot.lightnessreti);
cliptm->setDefault(defSpot.cliptm);
softradiusret->setDefault(defSpot.softradiusret);
blendmaskreti->setDefault((double)defSpot.blendmaskreti);
radmaskreti->setDefault(defSpot.radmaskreti);
lapmaskreti->setDefault(defSpot.lapmaskreti);
chromaskreti->setDefault(defSpot.chromaskreti);
gammaskreti->setDefault(defSpot.gammaskreti);
slomaskreti->setDefault(defSpot.slomaskreti);
recothresr->setDefault((double)defSpot.recothresr);
lowthresr->setDefault((double)defSpot.lowthresr);
higthresr->setDefault((double)defSpot.higthresr);
decayr->setDefault((double)defSpot.decayr);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabRetinex::adjusterChanged(Adjuster* a, double newval)
{
// Update Retinex GUI according to scalereti adjuster value
if (a == scalereti) {
updateRetinexGUI1();
}
// Update Retinex GUI according to str adjuster value
if (a == str) {
updateRetinexGUI3();
}
if (isLocActivated && exp->getEnabled()) {
if (a == dehaz) {
if (listener) {
listener->panelChanged(Evlocallabdehaz,
dehaz->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == dehazeSaturation) {
if (listener) {
listener->panelChanged(EvlocallabdehazeSaturation,
dehazeSaturation->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == dehazeblack) {
if (listener) {
listener->panelChanged(Evlocallabdehazeblack,
dehazeblack->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == depth) {
if (listener) {
listener->panelChanged(Evlocallabdepth,
depth->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == str) {
if (listener) {
listener->panelChanged(Evlocallabstr,
str->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sensih) {
if (listener) {
listener->panelChanged(Evlocallabsensih,
sensih->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == neigh) {
if (listener) {
listener->panelChanged(Evlocallabneigh,
neigh->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == vart) {
if (listener) {
listener->panelChanged(Evlocallabvart,
vart->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == scalereti) {
if (listener) {
listener->panelChanged(Evlocallabscalereti,
scalereti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == limd) {
if (listener) {
listener->panelChanged(Evlocallablimd,
limd->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == offs) {
if (listener) {
listener->panelChanged(Evlocallaboffs,
offs->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chrrt) {
if (listener) {
listener->panelChanged(Evlocallabchrrt,
chrrt->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == darkness) {
if (listener) {
listener->panelChanged(Evlocallabdarkness,
darkness->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lightnessreti) {
if (listener) {
listener->panelChanged(Evlocallablightnessreti,
lightnessreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == cliptm) {
if (listener) {
listener->panelChanged(Evlocallabcliptm,
cliptm->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == softradiusret) {
if (listener) {
listener->panelChanged(Evlocallabsoftradiusret,
softradiusret->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == recothresr) {
if (listener) {
listener->panelChanged(Evlocallabrecothresr,
recothresr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lowthresr) {
if (listener) {
listener->panelChanged(Evlocallablowthresr,
lowthresr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == higthresr) {
if (listener) {
listener->panelChanged(Evlocallabhigthresr,
higthresr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == decayr) {
if (listener) {
listener->panelChanged(Evlocallabdecayr,
decayr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blendmaskreti) {
if (listener) {
listener->panelChanged(Evlocallabblendmaskreti,
blendmaskreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radmaskreti) {
if (listener) {
listener->panelChanged(Evlocallabradmaskreti,
radmaskreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lapmaskreti) {
if (listener) {
listener->panelChanged(Evlocallablapmaskreti,
lapmaskreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromaskreti) {
if (listener) {
listener->panelChanged(Evlocallabchromaskreti,
chromaskreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == gammaskreti) {
if (listener) {
listener->panelChanged(Evlocallabgammaskreti,
gammaskreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == slomaskreti) {
if (listener) {
listener->panelChanged(Evlocallabslomaskreti,
slomaskreti->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == cTtransshape) {
if (listener) {
listener->panelChanged(EvlocallabCTtransCurve,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == cTgainshape) {
if (listener) {
listener->panelChanged(EvlocallabCTgainCurve,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == CCmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabCCmaskretishape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabLLmaskretishape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabHHmaskretishape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == Lmaskretishape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskretishape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenareti,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocenareti,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden GUI widgets in Normal mode to default spot values
str->setValue(defSpot.str);
loglin->set_active(defSpot.loglin);
if (defSpot.retinexMethod == "low") {
retinexMethod->set_active(0);
} else if (defSpot.retinexMethod == "uni") {
retinexMethod->set_active(1);
} else {
retinexMethod->set_active(2);
}
fftwreti->set_active(defSpot.fftwreti);
equilret->set_active(defSpot.equilret);
neigh->setValue(defSpot.neigh);
vart->setValue(defSpot.vart);
scalereti->setValue(defSpot.scalereti);
limd->setValue(defSpot.limd);
offs->setValue(defSpot.offs);
chrrt->setValue(defSpot.chrrt);
darkness->setValue(defSpot.darkness);
lightnessreti->setValue(defSpot.lightnessreti);
cliptm->setValue(defSpot.cliptm);
softradiusret->setValue(defSpot.softradiusret);
cTtransshape->setCurve(defSpot.localTtranscurve);
cTgainshape->setCurve(defSpot.localTgaincurve);
showmaskretiMethod->set_active(0);
enaretiMask->set_active(defSpot.enaretiMask);
enaretiMasktmap->set_active(defSpot.enaretiMasktmap);
CCmaskretishape->setCurve(defSpot.CCmaskreticurve);
LLmaskretishape->setCurve(defSpot.LLmaskreticurve);
HHmaskretishape->setCurve(defSpot.HHmaskreticurve);
blendmaskreti->setValue((double)defSpot.blendmaskreti);
radmaskreti->setValue(defSpot.radmaskreti);
lapmaskreti->setValue(defSpot.lapmaskreti);
chromaskreti->setValue(defSpot.chromaskreti);
gammaskreti->setValue(defSpot.gammaskreti);
slomaskreti->setValue(defSpot.slomaskreti);
Lmaskretishape->setCurve(defSpot.Lmaskreticurve);
inversret->set_active(defSpot.inversret);
recothresr->setValue(defSpot.recothresr);
lowthresr->setValue(defSpot.lowthresr);
higthresr->setValue(defSpot.higthresr);
decayr->setValue(defSpot.decayr);
// Enable all listeners
enableListener();
// Update GUI based on converted widget parameters:
// - Update Retinex GUI according to scalereti adjuster value
updateRetinexGUI1();
// - Update Retinex GUI according to inversret button state
updateRetinexGUI2();
// - Update Retinex GUI according to str adjuster value
updateRetinexGUI3();
}
void LocallabRetinex::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
recothresr->setValue(defSpot.recothresr);
lowthresr->setValue(defSpot.lowthresr);
higthresr->setValue(defSpot.higthresr);
decayr->setValue(defSpot.decayr);
enableListener();
}
void LocallabRetinex::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
retiFrame->hide();
retitoolFrame->hide();
exprecovr->hide();
decayr->hide();
maskusabler->hide();
maskunusabler->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
retiFrame->hide();
retitoolFrame->hide();
// Specific Simple mode widgets are shown in Normal mode
exprecovr->hide();
decayr->hide();
maskusabler->hide();
maskunusabler->hide();
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
retiFrame->show();
retitoolFrame->show();
exprecovr->show();
decayr->show();
if (enaretiMask->get_active()) {
maskusabler->show();
maskunusabler->hide();
} else {
maskusabler->hide();
maskunusabler->show();
}
}
}
void LocallabRetinex::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
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 mask background
CCmaskretishape->updateLocallabBackground(normChromar);
LLmaskretishape->updateLocallabBackground(normLumar);
HHmaskretishape->updateLocallabBackground(normHuer);
Lmaskretishape->updateLocallabBackground(normLumar);
return false;
}
);
}
void LocallabRetinex::loglinChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (loglin->get_active()) {
listener->panelChanged(Evlocallabloglin,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabloglin,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::retinexMethodChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabretinexMethod,
retinexMethod->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabRetinex::fftwretiChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (fftwreti->get_active()) {
listener->panelChanged(Evlocallabfftwreti,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabfftwreti,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::equilretChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (inversret->get_active()) {
listener->panelChanged(Evlocallabequilret,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabequilret,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::showmaskretiMethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void LocallabRetinex::enaretiMaskChanged()
{
if (enaretiMask->get_active()) {
maskusabler->show();
maskunusabler->hide();
} else {
maskusabler->hide();
maskunusabler->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enaretiMask->get_active()) {
listener->panelChanged(EvLocallabEnaretiMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnaretiMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::enaretiMasktmapChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enaretiMasktmap->get_active()) {
listener->panelChanged(EvLocallabEnaretiMasktmap,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnaretiMasktmap,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::inversretChanged()
{
const bool maskPreviewActivated = isMaskViewActive();
// Update Retinex GUI according to inversret button state
updateRetinexGUI2();
if (maskPreviewActivated) {
// This event is called to transmit reset mask state
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (inversret->get_active()) {
listener->panelChanged(Evlocallabinversret,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabinversret,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabRetinex::updateRetinexGUI1()
{
// Update Retinex GUI according to scalereti adjuster value
if (scalereti->getValue() == 1) {
retinexMethod->hide();
softradiusret->hide();
LocalcurveEditortransT->hide();
LocalcurveEditorgainT->hide();
} else {
retinexMethod->show();
softradiusret->show();
LocalcurveEditortransT->show();
LocalcurveEditorgainT->show();
}
}
void LocallabRetinex::updateRetinexGUI2()
{
// Update Retinex GUI according to inversret button state
if (inversret->get_active()) {
expmaskreti->hide();
showmaskretiMethodConn.block(true);
showmaskretiMethod->set_active(0);
showmaskretiMethodConn.block(false);
} else {
expmaskreti->show();
}
}
void LocallabRetinex::updateRetinexGUI3()
{
if (str->getValue() >= 0.1f) {
retitoolFrame->show();
} else {
retitoolFrame->hide();
}
}
/* ==== LocallabSharp ==== */
LocallabSharp::LocallabSharp():
LocallabTool(this, M("TP_LOCALLAB_SHARP_TOOLNAME"), M("TP_LOCALLAB_SHARP"), true),
// Sharpening specific widgets
sharcontrast(Gtk::manage(new Adjuster(M("TP_SHARPENING_CONTRAST"), 0, 200, 1, 20))),
sharblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARBLUR"), 0.2, 2.0, 0.05, 0.2))),
shargam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMC"), 0.5, 3.0, 0.05, 1.))),
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))),
sharradius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARRADIUS"), 0.4, 2.5, 0.01, 0.75))),
sensisha(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 40))),
inverssha(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))),
sharFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHARFRAME")))),
showmasksharMethod(Gtk::manage(new MyComboBoxText()))
{
set_orientation(Gtk::ORIENTATION_VERTICAL);
// Parameter Sharpening specific widgets
sharcontrast->setAdjusterListener(this);
sharradius->setAdjusterListener(this);
sharamount->setAdjusterListener(this);
shardamping->setAdjusterListener(this);
shariter->setAdjusterListener(this);
sharblur->setAdjusterListener(this);
shargam->setAdjusterListener(this);
sensisha->setAdjusterListener(this);
inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &LocallabSharp::inversshaChanged));
showmasksharMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
showmasksharMethod->append(M("TP_LOCALLAB_SHOWMODIF2"));
showmasksharMethod->append(M("TP_LOCALLAB_SHOWREF"));
showmasksharMethod->set_active(0);
showmasksharMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmasksharMethodConn = showmasksharMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabSharp::showmasksharMethodChanged));
// Add Sharpening specific widgets to GUI
pack_start(*sensisha);
pack_start(*sharcontrast);
pack_start(*sharblur);
pack_start(*shargam);
pack_start(*sharradius);
pack_start(*sharamount);
pack_start(*shardamping);
pack_start(*shariter);
// pack_start(*sensisha);
pack_start(*inverssha);
sharFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const sharfBox = Gtk::manage(new ToolParamBlock());
sharfBox->pack_start(*showmasksharMethod);
sharFrame->add(*sharfBox);
pack_start(*sharFrame);
}
bool LocallabSharp::isMaskViewActive()
{
return (showmasksharMethod->get_active_row_number() != 0);
}
void LocallabSharp::resetMaskView()
{
showmasksharMethodConn.block(true);
showmasksharMethod->set_active(0);
showmasksharMethodConn.block(false);
}
void LocallabSharp::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
sharMask = showmasksharMethod->get_active_row_number();
}
void LocallabSharp::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
exp->set_tooltip_text(M("TP_LOCALLAB_EXPSHARP_TOOLTIP"));
sensisha->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
shargam->set_tooltip_text(M("TP_LOCALLAB_GAMCOL_TOOLTIP"));
} else {
exp->set_tooltip_text("");
sensisha->set_tooltip_text("");
shargam->set_tooltip_text("");
}
}
void LocallabSharp::disableListener()
{
LocallabTool::disableListener();
inversshaConn.block(true);
showmasksharMethodConn.block(true);
}
void LocallabSharp::enableListener()
{
LocallabTool::enableListener();
inversshaConn.block(false);
showmasksharMethodConn.block(false);
}
//new function Global
void LocallabSharp::updateguisharp(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensisha->hide();
inverssha->hide();
} else {
sensisha->show();
inverssha->show();
}
enableListener();
return false;
}
);
}
}
void LocallabSharp::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visisharp);
exp->setEnabled(spot.expsharp);
complexity->set_active(spot.complexsharp);
sharcontrast->setValue((double)spot.sharcontrast);
sharradius->setValue(spot.sharradius);
sharamount->setValue((double)spot.sharamount);
shardamping->setValue((double)spot.shardamping);
shariter->setValue((double)spot.shariter);
sharblur->setValue(spot.sharblur);
shargam->setValue(spot.shargam);
sensisha->setValue((double)spot.sensisha);
inverssha->set_active(spot.inverssha);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabSharp::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.expsharp = exp->getEnabled();
spot.visisharp = exp->get_visible();
spot.complexsharp = complexity->get_active_row_number();
spot.sharcontrast = sharcontrast->getIntValue();
spot.sharradius = sharradius->getValue();
spot.sharamount = sharamount->getIntValue();
spot.shardamping = shardamping->getIntValue();
spot.shariter = shariter->getIntValue();
spot.sharblur = sharblur->getValue();
spot.shargam = shargam->getValue();
spot.sensisha = sensisha->getIntValue();
spot.inverssha = inverssha->get_active();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabSharp::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default values for adjuster widgets
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);
shargam->setDefault(defSpot.shargam);
sensisha->setDefault((double)defSpot.sensisha);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabSharp::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->getEnabled()) {
if (a == sharcontrast) {
if (listener) {
listener->panelChanged(Evlocallabsharcontrast,
sharcontrast->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sharradius) {
if (listener) {
listener->panelChanged(Evlocallabsharradius,
sharradius->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sharamount) {
if (listener) {
listener->panelChanged(Evlocallabsharamount,
sharamount->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == shardamping) {
if (listener) {
listener->panelChanged(Evlocallabshardamping,
shardamping->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == shariter) {
if (listener) {
listener->panelChanged(Evlocallabshariter,
shariter->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sharblur) {
if (listener) {
listener->panelChanged(Evlocallabsharblur,
sharblur->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == shargam) {
if (listener) {
listener->panelChanged(Evlocallabshargam,
shargam->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sensisha) {
if (listener) {
listener->panelChanged(Evlocallabsensis,
sensisha->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabSharp::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenasharp,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocenasharp,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabSharp::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden GUI widgets in Normal mode to default spot values
sharcontrast->setValue((double)defSpot.sharcontrast);
sharblur->setValue(defSpot.sharblur);
sharamount->setValue(defSpot.sharamount);
shardamping->setValue((double)defSpot.shardamping);
shariter->setValue((double)defSpot.shariter);
shargam->setValue(defSpot.shargam);
// Enable all listeners
enableListener();
}
void LocallabSharp::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden specific GUI widgets in Simple mode to default spot values
showmasksharMethod->set_active(0);
// Enable all listeners
enableListener();
// Update GUI based on converted widget parameters:
}
void LocallabSharp::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
sharcontrast->hide();
sharblur->hide();
sharamount->hide();
shardamping->hide();
shariter->hide();
sharFrame->hide();
shargam->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
sharcontrast->hide();
sharblur->hide();
shargam->hide();
sharamount->hide();
shardamping->hide();
shariter->hide();
// Specific Simple mode widgets are shown in Normal mode
sharFrame->show();
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
sharcontrast->show();
sharblur->show();
shargam->show();
sharamount->show();
shardamping->show();
shariter->show();
sharFrame->show();
}
}
void LocallabSharp::inversshaChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (inverssha->get_active()) {
listener->panelChanged(Evlocallabinverssha,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabinverssha,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabSharp::showmasksharMethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
/* ==== LocallabContrast ==== */
LocallabContrast::LocallabContrast():
LocallabTool(this, M("TP_LOCALLAB_LC_TOOLNAME"), M("TP_LOCALLAB_LOC_CONTRAST"), true),
// Local contrast specific widgets
localcontMethod(Gtk::manage(new MyComboBoxText())),
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))),
contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTWFRA")))),
sigmalc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
offslc(Gtk::manage(new Adjuster(M("TP_WAVELET_WAVOFFSET"), 0.33, 1.6, 0.01, 1.))),
LocalcurveEditorwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAV"))),
wavshape(static_cast<FlatCurveEditor*>(LocalcurveEditorwav->addCurve(CT_Flat, "", nullptr, false, false))),
csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 7, 5, 0, false))),
processwav(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_PROCESSWAV")))),
levelwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LEVELWAV"), 1, 9, 1, 4))),
expresidpyr(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
residcont(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCONT"), -100, 100, 1, 0))),
residchro(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCHRO"), -100., 100., 1., 0.))),
residsha(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDSHA"), -100., 100., 1., 0.))),
residshathr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDSHATHR"), 0., 100., 1., 30.))),
residhi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDHI"), -100., 100., 1., 0.))),
residhithr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDHITHR"), 0., 100., 1., 70.))),
gamlc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMW"), 0.5, 3., 0.01, 1.))),
residgam(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMSH"), 0.25, 15.0, 0.01, 2.4))),
residslop(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOSH"), 0.0, 500.0, 0.01, 12.92))),
sensilc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
previewlc(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))),
reparw(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))),
clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))),
clarilres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARILRES"), -20., 100., 0.5, 0.))),
claricres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CLARICRES"), -20., 100., 0.5, 0.))),
clarisoft(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 1.))),
origlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ORIGLC")))),
expcontrastpyr(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
gradwavFrame(Gtk::manage(new Gtk::Frame())),
wavgradl(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_GRALWFRA")))),
sigmalc2(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
strwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4.0, 4.0, 0.05, 0.))),
angwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
featherwav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FEATVALUE"), 10., 100., 0.1, 25.))),
wavedg(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EDGFRA")))),
strengthw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDVAL"), 0., 100.0, 0.5, 0.))),
sigmaed(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
LocalcurveEditorwavedg(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVEDG"))),
wavshapeedg(static_cast<FlatCurveEditor*>(LocalcurveEditorwavedg->addCurve(CT_Flat, "", nullptr, false, false))),
gradw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECT"), 0., 100.0, 0.5, 90.))),
waveshow(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_EDGSHOW")))),
edgsBoxshow(Gtk::manage(new ToolParamBlock())),
radiusw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDRAD"), 5., 100.0, 0.5, 15.))),
detailw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGTHRESH"), -50., 100.0, 1., 10.))),
localedgMethod(Gtk::manage(new MyComboBoxText())),
tloww(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR"), 0., 100.0, 1., 20.))),
thigw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEDETECTTHR2"), -10., 100.0, 1., 0.))),
edgw(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGESENSI"), 0., 100.0, 1., 60.))),
basew(Gtk::manage(new Adjuster(M("TP_WAVELET_EDGEAMPLI"), 0., 100.0, 1., 10.))),
localneiMethod(Gtk::manage(new MyComboBoxText())),
wavblur(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BLURLEVELFRA")))),
levelblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LEVELBLUR"), 0., 100., 0.5, 0.))),
sigmabl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
chromablu(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMABLU"), 0.0, 5., 0.1, 0.))),
LocalcurveEditorwavlev(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVLEV"))),
wavshapelev(static_cast<FlatCurveEditor*>(LocalcurveEditorwavlev->addCurve(CT_Flat, "", nullptr, false, false))),
residblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDBLUR"), 0., 100., 0.5, 0.))),
blurlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BLURLC")))),
expcontrastpyr2(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
wavcont(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CONTFRA")))),
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")), Gtk::manage(new RTImage("circle-white-small"))))),
chromalev(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMALEV"), 0.1, 5., 0.1, 1.))),
LocalcurveEditorwavcon(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCON"))),
wavshapecon(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcon->addCurve(CT_Flat, "", nullptr, false, false))),
wavcompre(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_COMPREFRA")))),
LocalcurveEditorwavcompre(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMPRE"))),
wavshapecompre(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcompre->addCurve(CT_Flat, "", nullptr, false, false))),
sigmadr(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
threswav(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRESWAV"), 0.9, 2., 0.01, 1.4))),
residcomp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RESIDCOMP"), -1., 1., 0.01, 0.))),
wavcomp(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_COMPFRA")))),
sigmadc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 3., 0.01, 1.))),
deltad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DELTAD"), -3., 3., 0.1, 0.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
LocalcurveEditorwavcomp(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMP"))),
wavshapecomp(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))),
//fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))),
fftwlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW")))),
exprecovw(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablew(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablew(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothresw(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthresw(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthresw(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decayw(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
expmasklc(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWLC")))),
showmasklcMethod(Gtk::manage(new MyComboBoxText())),
enalcMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
// masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
masklcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmasklcshape(static_cast<FlatCurveEditor*>(masklcCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmasklcshape(static_cast<FlatCurveEditor*>(masklcCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmasklcshape(static_cast<FlatCurveEditor *>(masklcCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
blendmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromasklc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
mask2lcCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmasklcshape(static_cast<DiagonalCurveEditor*>(mask2lcCurveEditorG->addCurve(CT_Diagonal, "L(L)")))
{
auto m = ProcEventMapper::getInstance();
Evlocallabpreviewlc = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWLC");
Evlocallabfeatherwav = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_FEATHERWAV");
Evlocallaboffslc = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_OFFSETWAV");
Evlocallabprocesswav = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PROCESSWAV");
set_orientation(Gtk::ORIENTATION_VERTICAL);
const LocallabParams::LocallabSpot defSpot;
// Parameter Local contrast specific widgets
localcontMethod->append(M("TP_LOCALLAB_LOCCONT"));
localcontMethod->append(M("TP_LOCALLAB_WAVE"));
localcontMethod->set_active(0);
localcontMethodConn = localcontMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabContrast::localcontMethodChanged));
lcradius->setAdjusterListener(this);
lcamount->setAdjusterListener(this);
lcdarkness->setAdjusterListener(this);
lclightness->setAdjusterListener(this);
contFrame->set_label_align(0.025, 0.5);
sigmalc->setAdjusterListener(this);
offslc->setAdjusterListener(this);
LocalcurveEditorwav->setCurveListener(this);
wavshape->setIdentityValue(0.);
wavshape->setResetCurve(FlatCurveType(defSpot.locwavcurve.at(0)), defSpot.locwavcurve);
// wavshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
LocalcurveEditorwav->curveListComplete();
csThreshold->setAdjusterListener(this);
levelwav->setAdjusterListener(this);
Gtk::Box* const LresTitleHBox = Gtk::manage(new Gtk::Box());
Gtk::Label* const LresLabel = Gtk::manage(new Gtk::Label());
LresLabel->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_LOC_RESIDPYR")) + Glib::ustring("</b>"));
LresLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
LresTitleHBox->pack_start(*LresLabel, Gtk::PACK_EXPAND_WIDGET, 0);
expresidpyr->setLabel(LresTitleHBox);
setExpandAlignProperties(expresidpyr, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
residcont->setAdjusterListener(this);
residchro->setAdjusterListener(this);
residsha->setAdjusterListener(this);
residshathr->setAdjusterListener(this);
residhi->setAdjusterListener(this);
residhithr->setAdjusterListener(this);
gamlc->setAdjusterListener(this);
residgam->setAdjusterListener(this);
residslop->setAdjusterListener(this);
residslop->setLogScale(16, 0);
sensilc->setAdjusterListener(this);
reparw->setAdjusterListener(this);
clariFrame->set_label_align(0.025, 0.5);
clarilres->setAdjusterListener(this);
claricres->setAdjusterListener(this);
clarisoft->setLogScale(10, 0);
clarisoft->setAdjusterListener(this);
origlcConn = origlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::origlcChanged));
processwavConn = processwav->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::processwavChanged));
Gtk::Box *TittleVBox;
TittleVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBox->set_spacing(2);
Gtk::Box* const LCTitleHBox = Gtk::manage(new Gtk::Box());
Gtk::Box* const LCTitleHBox11 = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabel = Gtk::manage(new Gtk::Label());
Gtk::Label* const LCLabel11 = Gtk::manage(new Gtk::Label());
LCLabel->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_LOC_CONTRASTPYR")) + Glib::ustring("</b>"));
LCLabel11->set_markup(escapeHtmlChars(M("TP_LOCALLAB_LOC_CONTRASTPYRLAB")));
LCLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
LCLabel11->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
LCTitleHBox->pack_start(*LCLabel, Gtk::PACK_EXPAND_WIDGET, 0);
LCTitleHBox11->pack_start(*LCLabel11, Gtk::PACK_EXPAND_WIDGET, 0);
TittleVBox->pack_start(*LCTitleHBox, Gtk::PACK_SHRINK);
TittleVBox->pack_start(*LCTitleHBox11, Gtk::PACK_SHRINK);
expcontrastpyr->setLabel(TittleVBox);
setExpandAlignProperties(expcontrastpyr, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
wavgradlConn = wavgradl->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavgradlChanged));
sigmalc2->setAdjusterListener(this);
strwav->setAdjusterListener(this);
angwav->setAdjusterListener(this);
featherwav->setAdjusterListener(this);
wavedgConn = wavedg->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavedgChanged));
strengthw->setAdjusterListener(this);
sigmaed->setAdjusterListener(this);
LocalcurveEditorwavedg->setCurveListener(this);
wavshapeedg->setIdentityValue(0.);
wavshapeedg->setResetCurve(FlatCurveType(defSpot.locedgwavcurve.at(0)), defSpot.locedgwavcurve);
// wavshapeedg->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
LocalcurveEditorwavedg->curveListComplete();
gradw->setAdjusterListener(this);
waveshowConn = waveshow->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::waveshowChanged));
radiusw->setAdjusterListener(this);
detailw->setAdjusterListener(this);
localedgMethod->append(M("TP_WAVELET_RE1"));
localedgMethod->append(M("TP_WAVELET_RE2"));
localedgMethod->append(M("TP_WAVELET_RE3"));
localedgMethod->set_active(0);
localedgMethodConn = localedgMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabContrast::localedgMethodChanged));
tloww->setAdjusterListener(this);
thigw->setAdjusterListener(this);
edgw->setAdjusterListener(this);
basew->setAdjusterListener(this);
localneiMethod->append(M("TP_WAVELET_NPNONE"));
localneiMethod->append(M("TP_WAVELET_NPLOW"));
localneiMethod->append(M("TP_WAVELET_NPHIGH"));
localneiMethod->set_active(0);
localneiMethodConn = localneiMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabContrast::localneiMethodChanged));
wavblurConn = wavblur->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavblurChanged));
levelblur->setAdjusterListener(this);
sigmabl->setAdjusterListener(this);
chromablu->setAdjusterListener(this);
LocalcurveEditorwavlev->setCurveListener(this);
wavshapelev->setIdentityValue(0.);
wavshapelev->setResetCurve(FlatCurveType(defSpot.loclevwavcurve.at(0)), defSpot.loclevwavcurve);
LocalcurveEditorwavlev->curveListComplete();
residblur->setAdjusterListener(this);
blurlcConn = blurlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::blurlcChanged));
Gtk::Box *TittleVBox2;
TittleVBox2 = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBox2->set_spacing(2);
Gtk::Box* const LCTitleHBox2 = Gtk::manage(new Gtk::Box());
Gtk::Box* const LCTitleHBox22 = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabel2 = Gtk::manage(new Gtk::Label());
Gtk::Label* const LCLabel22 = Gtk::manage(new Gtk::Label());
LCLabel2->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_LOC_CONTRASTPYR2")) + Glib::ustring("</b>"));
LCLabel22->set_markup(escapeHtmlChars(M("TP_LOCALLAB_LOC_CONTRASTPYR2LAB")));
LCLabel2->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
LCLabel22->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
LCTitleHBox2->pack_start(*LCLabel2, Gtk::PACK_EXPAND_WIDGET, 0);
LCTitleHBox22->pack_start(*LCLabel22, Gtk::PACK_EXPAND_WIDGET, 0);
TittleVBox2->pack_start(*LCTitleHBox2, Gtk::PACK_SHRINK);
TittleVBox2->pack_start(*LCTitleHBox22, Gtk::PACK_SHRINK);
expcontrastpyr2->setLabel(TittleVBox2);
setExpandAlignProperties(expcontrastpyr2, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
wavcontConn = wavcont->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavcontChanged));
sigma->setAdjusterListener(this);
offset->setAdjusterListener(this);
chromalev->setAdjusterListener(this);
LocalcurveEditorwavcon->setCurveListener(this);
wavshapecon->setIdentityValue(0.);
wavshapecon->setResetCurve(FlatCurveType(defSpot.locconwavcurve.at(0)), defSpot.locconwavcurve);
LocalcurveEditorwavcon->curveListComplete();
wavcompreConn = wavcompre->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavcompreChanged));
LocalcurveEditorwavcompre->setCurveListener(this);
wavshapecompre->setIdentityValue(0.);
wavshapecompre->setResetCurve(FlatCurveType(defSpot.loccomprewavcurve.at(0)), defSpot.loccomprewavcurve);
wavshapecompre->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
LocalcurveEditorwavcompre->curveListComplete();
sigmadr->setAdjusterListener(this);
threswav->setAdjusterListener(this);
residcomp->setAdjusterListener(this);
wavcompConn = wavcomp->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::wavcompChanged));
sigmadc->setAdjusterListener(this);
deltad->setAdjusterListener(this);
LocalcurveEditorwavcomp->setCurveListener(this);
wavshapecomp->setIdentityValue(0.);
wavshapecomp->setResetCurve(FlatCurveType(defSpot.loccompwavcurve.at(0)), defSpot.loccompwavcurve);
// wavshapecomp->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
LocalcurveEditorwavcomp->curveListComplete();
//fatres->setAdjusterListener(this);
fftwlcConn = fftwlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::fftwlcChanged));
recothresw->setAdjusterListener(this);
lowthresw->setAdjusterListener(this);
higthresw->setAdjusterListener(this);
decayw->setAdjusterListener(this);
setExpandAlignProperties(exprecovw, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
setExpandAlignProperties(expmasklc, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
previewlc->set_active(false);
previewlcConn = previewlc->signal_clicked().connect(
sigc::mem_fun(
*this, &LocallabContrast::previewlcChanged));
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_SHOWREF"));
showmasklcMethod->set_active(0);
showmasklcMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmasklcMethodConn = showmasklcMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabContrast::showmasklcMethodChanged));
enalcMaskConn = enalcMask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::enalcMaskChanged));
masklcCurveEditorG->setCurveListener(this);
CCmasklcshape->setIdentityValue(0.);
CCmasklcshape->setResetCurve(FlatCurveType(defSpot.CCmasklccurve.at(0)), defSpot.CCmasklccurve);
CCmasklcshape->setBottomBarColorProvider(this, 1);
LLmasklcshape->setIdentityValue(0.);
LLmasklcshape->setResetCurve(FlatCurveType(defSpot.LLmasklccurve.at(0)), defSpot.LLmasklccurve);
// LLmasklcshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmasklcshape->setIdentityValue(0.);
HHmasklcshape->setResetCurve(FlatCurveType(defSpot.HHmasklccurve.at(0)), defSpot.HHmasklccurve);
HHmasklcshape->setCurveColorProvider(this, 2);
HHmasklcshape->setBottomBarColorProvider(this, 2);
masklcCurveEditorG->curveListComplete();
blendmasklc->setAdjusterListener(this);
radmasklc->setAdjusterListener(this);
chromasklc->setAdjusterListener(this);
mask2lcCurveEditorG->setCurveListener(this);
Lmasklcshape->setResetCurve(DiagonalCurveType(defSpot.Lmasklccurve.at(0)), defSpot.Lmasklccurve);
Lmasklcshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
Lmasklcshape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2lcCurveEditorG->curveListComplete();
// Add Local contrast specific widgets to GUI
pack_start(*sensilc);
pack_start(*previewlc);
pack_start(*reparw);
pack_start(*localcontMethod);
pack_start(*lcradius);
pack_start(*lcamount);
pack_start(*lcdarkness);
pack_start(*lclightness);
pack_start(*csThreshold);
pack_start(*processwav);
ToolParamBlock* const coBox = Gtk::manage(new ToolParamBlock());
coBox->pack_start(*sigmalc);
coBox->pack_start(*offslc);
coBox->pack_start(*LocalcurveEditorwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
// coBox->pack_start(*csThreshold);
contFrame->add(*coBox);
pack_start(*contFrame);
// pack_start(*levelwav);
ToolParamBlock* const resiBox = Gtk::manage(new ToolParamBlock());
resiBox->pack_start(*residcont);
resiBox->pack_start(*residchro);
Gtk::Frame* const shresFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHRESFRA")));
shresFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const shresBox = Gtk::manage(new ToolParamBlock());
Gtk::Separator* const separatorsh = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
shresBox->pack_start(*residsha);
shresBox->pack_start(*residshathr);
shresBox->pack_start(*residhi);
shresBox->pack_start(*residhithr);
shresBox->pack_start(*separatorsh);
shresBox->pack_start(*residgam);
shresBox->pack_start(*residslop);
shresFrame->add(*shresBox);
resiBox->pack_start(*shresFrame);
expresidpyr->add(*resiBox, false);
pack_start(*expresidpyr);
// pack_start(*sensilc);
Gtk::Separator* const separatorcontr = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
pack_start(*separatorcontr);
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);
pack_start(*clariFrame);
ToolParamBlock* const blurcontBox = Gtk::manage(new ToolParamBlock());
gradwavFrame->set_label_align(0.025, 0.5);
gradwavFrame->set_label_widget(*wavgradl);
ToolParamBlock* const gradwavBox = Gtk::manage(new ToolParamBlock());
gradwavBox->pack_start(*sigmalc2);
gradwavBox->pack_start(*strwav);
gradwavBox->pack_start(*angwav);
gradwavBox->pack_start(*featherwav);
gradwavFrame->add(*gradwavBox);
blurcontBox->pack_start(*gradwavFrame);
Gtk::Frame* const edgFrame = Gtk::manage(new Gtk::Frame());
edgFrame->set_label_align(0.025, 0.5);
edgFrame->set_label_widget(*wavedg);
ToolParamBlock* const edgsBox = Gtk::manage(new ToolParamBlock());
edgsBox->pack_start(*strengthw);
edgsBox->pack_start(*sigmaed);
edgsBox->pack_start(*LocalcurveEditorwavedg, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
edgsBox->pack_start(*gradw);
edgsBox->pack_start(*waveshow);
edgsBoxshow->pack_start(*radiusw);
edgsBoxshow->pack_start(*detailw);
Gtk::Box* const edbox = Gtk::manage(new Gtk::Box());
Gtk::Label* const labmedgr = Gtk::manage(new Gtk::Label(M("TP_WAVELET_MEDGREINF") + ":"));
edbox->pack_start(*labmedgr, Gtk::PACK_SHRINK, 1);
edbox->pack_start(*localedgMethod);
edgsBoxshow->pack_start(*edbox);
Gtk::Separator* const separatoredg2 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
edgsBoxshow->pack_start(*separatoredg2);
edgsBoxshow->pack_start(*tloww);
edgsBoxshow->pack_start(*thigw);
Gtk::Separator* const separatoredg = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
edgsBoxshow->pack_start(*separatoredg);
edgsBoxshow->pack_start(*edgw);
edgsBoxshow->pack_start(*basew);
Gtk::Box* const ctboxNP = Gtk::manage(new Gtk::Box());
Gtk::Label* const labmNP = Gtk::manage(new Gtk::Label(M("TP_WAVELET_NPTYPE") + ":"));
ctboxNP->pack_start(*labmNP, Gtk::PACK_SHRINK, 1);
ctboxNP->pack_start(*localneiMethod);
edgsBoxshow->pack_start(*ctboxNP);
edgsBox->pack_start(*edgsBoxshow);
edgFrame->add(*edgsBox);
blurcontBox->pack_start(*edgFrame);
Gtk::Frame* const blurlevelFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")));
blurlevelFrame->set_label_align(0.025, 0.5);
blurlevelFrame->set_label_widget(*wavblur);
Gtk::Box* const blurlevcontBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
blurlevcontBox->set_spacing(2);
blurlevcontBox->pack_start(*levelblur);
blurlevcontBox->pack_start(*sigmabl);
blurlevcontBox->pack_start(*chromablu);
blurlevcontBox->pack_start(*LocalcurveEditorwavlev, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
Gtk::Separator* const separatorblu = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
blurlevcontBox->pack_start(*separatorblu);
blurlevcontBox->pack_start(*residblur);
blurlevcontBox->pack_start(*blurlc);
blurlevelFrame->add(*blurlevcontBox);
blurcontBox->pack_start(*blurlevelFrame);
expcontrastpyr->add(*blurcontBox, false);
pack_start(*gamlc);
pack_start(*expcontrastpyr);
ToolParamBlock* const blurcontBox2 = Gtk::manage(new ToolParamBlock());
Gtk::Frame* const contFrame2 = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTFRA")));
contFrame2->set_label_align(0.025, 0.5);
contFrame2->set_label_widget(*wavcont);
Gtk::Box* const contlevBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
contlevBox->set_spacing(2);
contlevBox->pack_start(*sigma);
contlevBox->pack_start(*offset);
contlevBox->pack_start(*chromalev);
contlevBox->pack_start(*LocalcurveEditorwavcon, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
contFrame2->add(*contlevBox);
blurcontBox2->pack_start(*contFrame2);
Gtk::Frame* const compreFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_COMPREFRA")));
compreFrame->set_label_align(0.025, 0.5);
compreFrame->set_label_widget(*wavcompre);
Gtk::Box* const compreBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
compreBox->set_spacing(2);
compreBox->pack_start(*LocalcurveEditorwavcompre, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
compreBox->pack_start(*sigmadr);
compreBox->pack_start(*threswav);
compreBox->pack_start(*residcomp);
compreFrame->add(*compreBox);
blurcontBox2->pack_start(*compreFrame);
Gtk::Frame* const compFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_COMPFRA")));
compFrame->set_label_align(0.025, 0.5);
compFrame->set_label_widget(*wavcomp);
Gtk::Box* const compBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
compBox->set_spacing(2);
compBox->pack_start(*sigmadc);
compBox->pack_start(*deltad);
compBox->pack_start(*LocalcurveEditorwavcomp, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
// Gtk::Separator* const separatorcomp = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
// compBox->pack_start(*separatorcomp);
// compBox->pack_start(*fatres);
compFrame->add(*compBox);
blurcontBox2->pack_start(*compFrame);
expcontrastpyr2->add(*blurcontBox2, false);
pack_start(*expcontrastpyr2);
pack_start(*fftwlc);
ToolParamBlock* const wwBox3 = Gtk::manage(new ToolParamBlock());
wwBox3->pack_start(*maskusablew, Gtk::PACK_SHRINK, 0);
wwBox3->pack_start(*maskunusablew, Gtk::PACK_SHRINK, 0);
wwBox3->pack_start(*recothresw);
wwBox3->pack_start(*lowthresw);
wwBox3->pack_start(*higthresw);
wwBox3->pack_start(*decayw);
// colBox3->pack_start(*invmaskc);
exprecovw->add(*wwBox3, false);
pack_start(*exprecovw, false, false);
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
expmasklc->add(*masklcBox, false);
pack_start(*expmasklc, false, false);
}
LocallabContrast::~LocallabContrast()
{
delete LocalcurveEditorwav;
delete LocalcurveEditorwavedg;
delete LocalcurveEditorwavlev;
delete LocalcurveEditorwavcon;
delete LocalcurveEditorwavcompre;
delete LocalcurveEditorwavcomp;
delete masklcCurveEditorG;
delete mask2lcCurveEditorG;
}
bool LocallabContrast::isMaskViewActive()
{
return (showmasklcMethod->get_active_row_number() != 0);
}
void LocallabContrast::resetMaskView()
{
showmasklcMethodConn.block(true);
showmasklcMethod->set_active(0);
showmasklcMethodConn.block(false);
}
void LocallabContrast::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
lcMask = showmasklcMethod->get_active_row_number();
}
Gtk::ToggleButton *LocallabContrast::getPreviewDeltaEButton() const
{
return previewlc;
}
sigc::connection *LocallabContrast::getPreviewDeltaEButtonConnection()
{
return &previewlcConn;
}
//new function Global
void LocallabContrast::updateguicont(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensilc->hide();
previewlc->hide();
previewlc->set_active(false);
enalcMask->set_active(false);
exprecovw->hide();
expmasklc->hide();
} else {
sensilc->show();
previewlc->show();
exprecovw->show();
expmasklc->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
void LocallabContrast::previewlcChanged()
{
if(previewlc->get_active()) {
showmasklcMethod->set_active(4);
} else {
showmasklcMethod->set_active(0);
}
if (isLocActivated) {
if (listener) {
listener->panelChanged(Evlocallabpreviewlc,"");
}
}
}
void LocallabContrast::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
contFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRAST_TOOLTIP"));
recothresw->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
LocalcurveEditorwav->set_tooltip_markup(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP"));
csThreshold->set_tooltip_markup(M("TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP"));
levelwav->set_tooltip_markup(M("TP_LOCALLAB_LEVELWAV_TOOLTIP"));
clariFrame->set_tooltip_markup(M("TP_LOCALLAB_CLARI_TOOLTIP"));
clarisoft->set_tooltip_markup(M("TP_LOCALLAB_CLARISOFT_TOOLTIP"));
exprecovw->set_tooltip_markup(M("TP_LOCALLAB_MASKRESWAV_TOOLTIP"));
gamlc->set_tooltip_text(M("TP_LOCALLAB_GAMC_TOOLTIP"));
wavshape->setTooltip(M("TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP"));
clarilres->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIL_TOOLTIP"));
claricres->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIC_TOOLTIP"));
sigmalc->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
sigmalc2->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
sigmaed->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
sigmabl->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
sigma->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
sigmadc->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
sigmadr->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
origlc->set_tooltip_text(M("TP_LOCALLAB_WAT_ORIGLC_TOOLTIP"));
strwav->set_tooltip_text(M("TP_LOCALLAB_WAT_STRWAV_TOOLTIP"));
angwav->set_tooltip_text(M("TP_LOCALLAB_WAT_STRWAV_TOOLTIP"));
strengthw->set_tooltip_text(M("TP_LOCALLAB_WAT_STRENGTHW_TOOLTIP"));
LocalcurveEditorwavedg->set_tooltip_markup(M("TP_LOCALLAB_WAT_LOCCONTRASTEDG_TOOLTIP"));
wavshapeedg->setTooltip(M("TP_LOCALLAB_WAT_LOCCONTRASTEDG_TOOLTIP"));
gradw->set_tooltip_text(M("TP_LOCALLAB_WAT_GRADW_TOOLTIP"));
waveshow->set_tooltip_text(M("TP_LOCALLAB_WAT_WAVESHOW_TOOLTIP"));
LocalcurveEditorwavlev->set_tooltip_markup(M("TP_LOCALLAB_WAT_WAVBLURCURV_TOOLTIP"));
wavshapelev->setTooltip(M("TP_LOCALLAB_WAT_WAVBLURCURV_TOOLTIP"));
levelblur->set_tooltip_text(M("TP_LOCALLAB_WAT_WAVLEVELBLUR_TOOLTIP"));
residblur->set_tooltip_text(M("TP_LOCALLAB_WAT_RESIDBLUR_TOOLTIP"));
blurlc->set_tooltip_text(M("TP_LOCALLAB_WAT_BLURLC_TOOLTIP"));
offset->set_tooltip_text(M("TP_LOCALLAB_WAT_CONTOFFSET_TOOLTIP"));
chromalev->set_tooltip_text(M("TP_LOCALLAB_WAT_CONTCHROMALEV_TOOLTIP"));
LocalcurveEditorwavcon->set_tooltip_markup(M("TP_LOCALLAB_WAT_WAVCBDL_TOOLTIP"));
wavshapecon->setTooltip(M("TP_LOCALLAB_WAT_WAVCBDL_TOOLTIP"));
LocalcurveEditorwavcompre->set_tooltip_markup(M("TP_LOCALLAB_WAT_WAVTM_TOOLTIP"));
wavshapecompre->setTooltip(M("TP_LOCALLAB_WAT_WAVTM_TOOLTIP"));
deltad->set_tooltip_text(M("TP_LOCALLAB_WAT_DELTABAL_TOOLTIP"));
LocalcurveEditorwavcomp->set_tooltip_markup(M("TP_LOCALLAB_WAT_WAVDELTABAL_TOOLTIP"));
wavshapecomp->setTooltip(M("TP_LOCALLAB_WAT_WAVDELTABAL_TOOLTIP"));
threswav->set_tooltip_text(M("TP_LOCALLAB_WAT_BALTHRES_TOOLTIP"));
residcomp->set_tooltip_text(M("TP_LOCALLAB_WAT_RESIDCOMP_TOOLTIP"));
processwav->set_tooltip_text(M("TP_LOCALLAB_PROCESSWAV_TOOLTIP"));
expresidpyr->set_tooltip_text(M("TP_LOCALLAB_WAT_EXPRESID_TOOLTIP"));
expcontrastpyr->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP"));
wavgradl->set_tooltip_text(M("TP_LOCALLAB_WAVGRAD_TOOLTIP"));
wavedg->set_tooltip_text(M("TP_LOCALLAB_WAVEEDG_TOOLTIP"));
wavblur->set_tooltip_text(M("TP_LOCALLAB_WAVBLUR_TOOLTIP"));
chromablu->set_tooltip_text(M("TP_LOCALLAB_CHROMABLU_TOOLTIP"));
expcontrastpyr2->set_tooltip_text(M("TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP"));
wavcont->set_tooltip_text(M("TP_LOCALLAB_WAVCONTF_TOOLTIP"));
chromalev->set_tooltip_text(M("TP_LOCALLAB_CHROMABLU_TOOLTIP"));
wavcompre->set_tooltip_text(M("TP_LOCALLAB_WAVCOMPRE_TOOLTIP"));
wavcomp->set_tooltip_text(M("TP_LOCALLAB_WAVCOMP_TOOLTIP"));
fftwlc->set_tooltip_text(M("TP_LOCALLAB_LC_FFTW_TOOLTIP"));
expmasklc->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
CCmasklcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmasklcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmasklcshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
blendmasklc->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
mask2lcCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
Lmasklcshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
masklcCurveEditorG->set_tooltip_markup(M("TP_LOCALLAB_MASKCURVE_TOOLTIP"));
chromasklc->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
sensilc->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
reparw->set_tooltip_text(M("TP_LOCALLAB_REPARW_TOOLTIP"));
decayw->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
lowthresw->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESWAV_TOOLTIP"));
higthresw->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESWAV_TOOLTIP"));
} else {
contFrame->set_tooltip_text("");
recothresw->set_tooltip_text("");
LocalcurveEditorwav->set_tooltip_markup("");
csThreshold->set_tooltip_markup("");
expresidpyr->set_tooltip_text("");
levelwav->set_tooltip_markup("");
clariFrame->set_tooltip_markup("");
clarisoft->set_tooltip_markup("");
expcontrastpyr->set_tooltip_text("");
wavgradl->set_tooltip_text("");
wavedg->set_tooltip_text("");
wavblur->set_tooltip_text("");
chromablu->set_tooltip_text("");
expcontrastpyr2->set_tooltip_text("");
wavcont->set_tooltip_text("");
chromalev->set_tooltip_text("");
wavcompre->set_tooltip_text("");
wavcomp->set_tooltip_text("");
fftwlc->set_tooltip_text("");
expmasklc->set_tooltip_markup("");
CCmasklcshape->setTooltip("");
LLmasklcshape->setTooltip("");
HHmasklcshape->setTooltip("");
blendmasklc->set_tooltip_text("");
mask2lcCurveEditorG->set_tooltip_text("");
Lmasklcshape->setTooltip("");
masklcCurveEditorG->set_tooltip_markup("");
chromasklc->set_tooltip_text("");
sensilc->set_tooltip_text("");
reparw->set_tooltip_text("");
gamlc->set_tooltip_text("");
wavshape->setTooltip("");
clarilres->set_tooltip_text("");
claricres->set_tooltip_text("");
sigmalc->set_tooltip_text("");
sigmalc2->set_tooltip_text("");
sigmaed->set_tooltip_text("");
sigmabl->set_tooltip_text("");
sigma->set_tooltip_text("");
sigmadc->set_tooltip_text("");
sigmadr->set_tooltip_text("");
origlc->set_tooltip_text("");
strwav->set_tooltip_text("");
angwav->set_tooltip_text("");
strengthw->set_tooltip_text("");
LocalcurveEditorwavedg->set_tooltip_markup("");
wavshapeedg->setTooltip("");
gradw->set_tooltip_text("");
waveshow->set_tooltip_text("");
LocalcurveEditorwavlev->set_tooltip_markup("");
wavshapelev->setTooltip("");
residblur->set_tooltip_text("");
blurlc->set_tooltip_text("");
levelblur->set_tooltip_text("");
offset->set_tooltip_text("");
chromalev->set_tooltip_text("");
LocalcurveEditorwavcon->set_tooltip_markup("");
wavshapecon->setTooltip("");
LocalcurveEditorwavcompre->set_tooltip_markup("");
wavshapecompre->setTooltip("");
deltad->set_tooltip_text("");
LocalcurveEditorwavcomp->set_tooltip_markup("");
wavshapecomp->setTooltip("");
threswav->set_tooltip_text("");
residcomp->set_tooltip_text("");
exprecovw->set_tooltip_markup("");
decayw->set_tooltip_text("");
lowthresw->set_tooltip_text("");
higthresw->set_tooltip_text("");
processwav->set_tooltip_text("");
}
}
void LocallabContrast::setDefaultExpanderVisibility()
{
expresidpyr->set_expanded(false);
expcontrastpyr->set_expanded(false);
expcontrastpyr2->set_expanded(false);
expmasklc->set_expanded(false);
exprecovw->set_expanded(false);
}
void LocallabContrast::disableListener()
{
LocallabTool::disableListener();
localcontMethodConn.block(true);
origlcConn.block(true);
processwavConn.block(true);
wavgradlConn.block(true);
wavedgConn.block(true);
localedgMethodConn.block(true);
waveshowConn.block(true);
localneiMethodConn.block(true);
wavblurConn.block(true);
blurlcConn.block(true);
wavcontConn.block(true);
wavcompreConn.block(true);
wavcompConn.block(true);
fftwlcConn.block(true);
showmasklcMethodConn.block(true);
enalcMaskConn.block(true);
}
void LocallabContrast::enableListener()
{
LocallabTool::enableListener();
localcontMethodConn.block(false);
origlcConn.block(false);
processwavConn.block(false);
wavgradlConn.block(false);
wavedgConn.block(false);
localedgMethodConn.block(false);
waveshowConn.block(false);
localneiMethodConn.block(false);
wavblurConn.block(false);
blurlcConn.block(false);
wavcontConn.block(false);
wavcompreConn.block(false);
wavcompConn.block(false);
fftwlcConn.block(false);
showmasklcMethodConn.block(false);
enalcMaskConn.block(false);
}
void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
nbmaskcont = 0;
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visicontrast);
exp->setEnabled(spot.expcontrast);
complexity->set_active(spot.complexcontrast);
if (spot.localcontMethod == "loc") {
localcontMethod->set_active(0);
} else if (spot.localcontMethod == "wav") {
localcontMethod->set_active(1);
}
fftwlc->set_active(spot.fftwlc);
// Update Local contrast GUI according to fftwlc button state
// Note: Contrary to the others, shall be called before setting lcradius value
updateContrastGUI3();
lcradius->setValue((double)spot.lcradius);
lcamount->setValue(spot.lcamount);
lcdarkness->setValue(spot.lcdarkness);
lclightness->setValue(spot.lclightness);
sigmalc->setValue(spot.sigmalc);
offslc->setValue(spot.offslc);
wavshape->setCurve(spot.locwavcurve);
csThreshold->setValue<int>(spot.csthreshold);
levelwav->setValue((double)spot.levelwav);
residcont->setValue(spot.residcont);
residchro->setValue(spot.residchro);
residsha->setValue(spot.residsha);
residshathr->setValue(spot.residshathr);
residhi->setValue(spot.residhi);
residhithr->setValue(spot.residhithr);
gamlc->setValue((double)spot.gamlc);
residgam->setValue(spot.residgam);
residslop->setValue(spot.residslop);
sensilc->setValue((double)spot.sensilc);
reparw->setValue(spot.reparw);
clarilres->setValue(spot.clarilres);
claricres->setValue(spot.claricres);
clarisoft->setValue(spot.clarisoft);
origlc->set_active(spot.origlc);
processwav->set_active(spot.processwav);
wavgradl->set_active(spot.wavgradl);
sigmalc2->setValue(spot.sigmalc2);
strwav->setValue(spot.strwav);
angwav->setValue(spot.angwav);
featherwav->setValue(spot.featherwav);
wavedg->set_active(spot.wavedg);
strengthw->setValue(spot.strengthw);
sigmaed->setValue(spot.sigmaed);
wavshapeedg->setCurve(spot.locedgwavcurve);
gradw->setValue(spot.gradw);
waveshow->set_active(spot.waveshow);
radiusw->setValue(spot.radiusw);
detailw->setValue(spot.detailw);
if (spot.localedgMethod == "fir") {
localedgMethod->set_active(0);
} else if (spot.localedgMethod == "sec") {
localedgMethod->set_active(1);
} else if (spot.localedgMethod == "thr") {
localedgMethod->set_active(2);
}
tloww->setValue(spot.tloww);
thigw->setValue(spot.thigw);
edgw->setValue(spot.edgw);
basew->setValue(spot.basew);
if (spot.localneiMethod == "none") {
localneiMethod->set_active(0);
} else if (spot.localneiMethod == "low") {
localneiMethod->set_active(1);
} else if (spot.localneiMethod == "high") {
localneiMethod->set_active(2);
}
wavblur->set_active(spot.wavblur);
levelblur->setValue(spot.levelblur);
sigmabl->setValue(spot.sigmabl);
chromablu->setValue(spot.chromablu);
wavshapelev->setCurve(spot.loclevwavcurve);
residblur->setValue(spot.residblur);
blurlc->set_active(spot.blurlc);
wavcont->set_active(spot.wavcont);
sigma->setValue(spot.sigma);
offset->setValue(spot.offset);
chromalev->setValue(spot.chromalev);
wavshapecon->setCurve(spot.locconwavcurve);
wavcompre->set_active(spot.wavcompre);
wavshapecompre->setCurve(spot.loccomprewavcurve);
sigmadr->setValue(spot.sigmadr);
threswav->setValue(spot.threswav);
residcomp->setValue(spot.residcomp);
wavcomp->set_active(spot.wavcomp);
sigmadc->setValue(spot.sigmadc);
deltad->setValue(spot.deltad);
wavshapecomp->setCurve(spot.loccompwavcurve);
//fatres->setValue(spot.fatres);
enalcMask->set_active(spot.enalcMask);
CCmasklcshape->setCurve(spot.CCmasklccurve);
LLmasklcshape->setCurve(spot.LLmasklccurve);
HHmasklcshape->setCurve(spot.HHmasklccurve);
blendmasklc->setValue((double)spot.blendmasklc);
radmasklc->setValue(spot.radmasklc);
chromasklc->setValue(spot.chromasklc);
Lmasklcshape->setCurve(spot.Lmasklccurve);
recothresw->setValue((double)spot.recothresw);
lowthresw->setValue((double)spot.lowthresw);
higthresw->setValue((double)spot.higthresw);
decayw->setValue((double)spot.decayw);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Update Local contrast GUI according to localcontMethod combobox value
updateContrastGUI1();
// Update Local contrast GUI according to waveshow button state
updateContrastGUI2();
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.expcontrast = exp->getEnabled();
spot.visicontrast = exp->get_visible();
spot.complexcontrast = complexity->get_active_row_number();
if (localcontMethod->get_active_row_number() == 0) {
spot.localcontMethod = "loc";
} else if (localcontMethod->get_active_row_number() == 1) {
spot.localcontMethod = "wav";
}
spot.lcradius = lcradius->getIntValue();
spot.lcamount = lcamount->getValue();
spot.lcdarkness = lcdarkness->getValue();
spot.lclightness = lclightness->getValue();
spot.sigmalc = sigmalc->getValue();
spot.offslc = offslc->getValue();
spot.locwavcurve = wavshape->getCurve();
spot.csthreshold = csThreshold->getValue<int>();
spot.levelwav = levelwav->getIntValue();
spot.residcont = residcont->getValue();
spot.residchro = residchro->getValue();
spot.residsha = residsha->getValue();
spot.residshathr = residshathr->getValue();
spot.residhi = residhi->getValue();
spot.residhithr = residhithr->getValue();
spot.gamlc = gamlc->getValue();
spot.residgam = residgam->getValue();
spot.residslop = residslop->getValue();
spot.sensilc = sensilc->getIntValue();
spot.reparw = reparw->getValue();
spot.clarilres = clarilres->getValue();
spot.claricres = claricres->getValue();
spot.clarisoft = clarisoft->getValue();
spot.origlc = origlc->get_active();
spot.processwav = processwav->get_active();
spot.wavgradl = wavgradl->get_active();
spot.sigmalc2 = sigmalc2->getValue();
spot.strwav = strwav->getValue();
spot.angwav = angwav->getValue();
spot.featherwav = featherwav->getValue();
spot.wavedg = wavedg->get_active();
spot.strengthw = strengthw->getValue();
spot.sigmaed = sigmaed->getValue();
spot.locedgwavcurve = wavshapeedg->getCurve();
spot.gradw = gradw->getValue();
spot.waveshow = waveshow->get_active();
spot.radiusw = radiusw->getValue();
spot.detailw = detailw->getValue();
if (localedgMethod->get_active_row_number() == 0) {
spot.localedgMethod = "fir";
} else if (localedgMethod->get_active_row_number() == 1) {
spot.localedgMethod = "sec";
} else if (localedgMethod->get_active_row_number() == 2) {
spot.localedgMethod = "thr";
}
spot.tloww = tloww->getValue();
spot.thigw = thigw->getValue();
spot.edgw = edgw->getValue();
spot.basew = basew->getValue();
if (localneiMethod->get_active_row_number() == 0) {
spot.localneiMethod = "none";
} else if (localneiMethod->get_active_row_number() == 1) {
spot.localneiMethod = "low";
} else if (localneiMethod->get_active_row_number() == 2) {
spot.localneiMethod = "high";
}
spot.wavblur = wavblur->get_active();
spot.levelblur = levelblur->getValue();
spot.sigmabl = sigmabl->getValue();
spot.chromablu = chromablu->getValue();
spot.loclevwavcurve = wavshapelev->getCurve();
spot.residblur = residblur->getValue();
spot.blurlc = blurlc->get_active();
spot.wavcont = wavcont->get_active();
spot.sigma = sigma->getValue();
spot.offset = offset->getValue();
spot.chromalev = chromalev->getValue();
spot.locconwavcurve = wavshapecon->getCurve();
spot.wavcompre = wavcompre->get_active();
spot.loccomprewavcurve = wavshapecompre->getCurve();
spot.sigmadr = sigmadr->getValue();
spot.threswav = threswav->getValue();
spot.residcomp = residcomp->getValue();
spot.wavcomp = wavcomp->get_active();
spot.sigmadc = sigmadc->getValue();
spot.deltad = deltad->getValue();
spot.loccompwavcurve = wavshapecomp->getCurve();
//spot.fatres = fatres->getValue();
spot.fftwlc = fftwlc->get_active();
spot.enalcMask = enalcMask->get_active();
spot.CCmasklccurve = CCmasklcshape->getCurve();
spot.LLmasklccurve = LLmasklcshape->getCurve();
spot.HHmasklccurve = HHmasklcshape->getCurve();
spot.blendmasklc = blendmasklc->getIntValue();
spot.radmasklc = radmasklc->getValue();
spot.chromasklc = chromasklc->getValue();
spot.Lmasklccurve = Lmasklcshape->getCurve();
spot.recothresw = recothresw->getValue();
spot.lowthresw = lowthresw->getValue();
spot.higthresw = higthresw->getValue();
spot.decayw = decayw->getValue();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default values for adjuster and threshold adjuster widgets
lcradius->setDefault((double)defSpot.lcradius);
lcamount->setDefault(defSpot.lcamount);
lcdarkness->setDefault(defSpot.lcdarkness);
lclightness->setDefault(defSpot.lclightness);
sigmalc->setDefault(defSpot.sigmalc);
offslc->setDefault(defSpot.offslc);
levelwav->setDefault((double)defSpot.levelwav);
csThreshold->setDefault<int>(defSpot.csthreshold);
residcont->setDefault(defSpot.residcont);
residchro->setDefault(defSpot.residchro);
residsha->setDefault(defSpot.residsha);
residshathr->setDefault(defSpot.residshathr);
residhi->setDefault(defSpot.residhi);
residhithr->setDefault(defSpot.residhithr);
gamlc->setDefault((double)defSpot.gamlc);
residgam->setDefault(defSpot.residgam);
residslop->setDefault(defSpot.residslop);
sensilc->setDefault((double)defSpot.sensilc);
reparw->setDefault(defSpot.reparw);
clarilres->setDefault(defSpot.clarilres);
claricres->setDefault(defSpot.claricres);
clarisoft->setDefault(defSpot.clarisoft);
sigmalc2->setDefault(defSpot.sigmalc2);
strwav->setDefault(defSpot.strwav);
angwav->setDefault(defSpot.angwav);
featherwav->setDefault(defSpot.featherwav);
strengthw->setDefault(defSpot.strengthw);
sigmaed->setDefault(defSpot.sigmaed);
gradw->setDefault(defSpot.gradw);
radiusw->setDefault(defSpot.radiusw);
detailw->setDefault(defSpot.detailw);
tloww->setDefault(defSpot.tloww);
thigw->setDefault(defSpot.thigw);
edgw->setDefault(defSpot.edgw);
basew->setDefault(defSpot.basew);
levelblur->setDefault(defSpot.levelblur);
sigmabl->setDefault(defSpot.sigmabl);
chromablu->setDefault(defSpot.chromablu);
residblur->setDefault(defSpot.residblur);
sigma->setDefault(defSpot.sigma);
offset->setDefault(defSpot.offset);
chromalev->setDefault(defSpot.chromalev);
sigmadr->setDefault(defSpot.sigmadr);
threswav->setDefault(defSpot.threswav);
residcomp->setDefault(defSpot.residcomp);
sigmadc->setDefault(defSpot.sigmadc);
deltad->setDefault(defSpot.deltad);
//fatres->setDefault(defSpot.fatres);
blendmasklc->setDefault((double)defSpot.blendmasklc);
radmasklc->setDefault(defSpot.radmasklc);
chromasklc->setDefault(defSpot.chromasklc);
recothresw->setDefault((double)defSpot.recothresw);
lowthresw->setDefault((double)defSpot.lowthresw);
higthresw->setDefault((double)defSpot.higthresw);
decayw->setDefault((double)defSpot.decayw);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabContrast::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->getEnabled()) {
if (a == lcradius) {
if (listener) {
listener->panelChanged(Evlocallablcradius,
lcradius->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lcamount) {
if (listener) {
listener->panelChanged(Evlocallablcamount,
lcamount->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lcdarkness) {
if (listener) {
listener->panelChanged(Evlocallablcdarkness,
lcdarkness->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lclightness) {
if (listener) {
listener->panelChanged(Evlocallablclightness,
lclightness->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigmalc) {
if (listener) {
listener->panelChanged(Evlocallabsigmalc,
sigmalc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == offslc) {
if (listener) {
listener->panelChanged(Evlocallaboffslc,
offslc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == levelwav) {
if (listener) {
listener->panelChanged(Evlocallablevelwav,
levelwav->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residcont) {
if (listener) {
listener->panelChanged(Evlocallabresidcont,
residcont->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residchro) {
if (listener) {
listener->panelChanged(Evlocallabresidchro,
residchro->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residsha) {
if (listener) {
listener->panelChanged(Evlocallabresidsha,
residsha->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residshathr) {
if (listener) {
listener->panelChanged(Evlocallabresidshathr,
residshathr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residhi) {
if (listener) {
listener->panelChanged(Evlocallabresidhi,
residhi->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residhithr) {
if (listener) {
listener->panelChanged(Evlocallabresidhithr,
residhithr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == gamlc) {
if (listener) {
listener->panelChanged(Evlocallabgamlc,
gamlc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residgam) {
if (listener) {
listener->panelChanged(Evlocallabresidgam,
residgam->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residslop) {
if (listener) {
listener->panelChanged(Evlocallabresidslop,
residslop->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sensilc) {
if (listener) {
listener->panelChanged(Evlocallabsensilc,
sensilc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == reparw) {
if (listener) {
listener->panelChanged(Evlocallabreparw,
reparw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == clarilres) {
if (listener) {
listener->panelChanged(Evlocallabclarilres,
clarilres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == claricres) {
if (listener) {
listener->panelChanged(Evlocallabclaricres,
claricres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == clarisoft) {
if (listener) {
listener->panelChanged(Evlocallabclarisoft,
clarisoft->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigmalc2) {
if (listener) {
listener->panelChanged(Evlocallabsigmalc2,
sigmalc2->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == strwav) {
if (listener) {
listener->panelChanged(Evlocallabstrwav,
strwav->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == angwav) {
if (listener) {
listener->panelChanged(Evlocallabangwav,
angwav->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == featherwav) {
if (listener) {
listener->panelChanged(Evlocallabfeatherwav,
featherwav->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == strengthw) {
if (listener) {
listener->panelChanged(Evlocallabstrengthw,
strengthw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigmaed) {
if (listener) {
listener->panelChanged(Evlocallabsigmaed,
sigmaed->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == gradw) {
if (listener) {
listener->panelChanged(Evlocallabgradw,
gradw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radiusw) {
if (listener) {
listener->panelChanged(Evlocallabradiusw,
radiusw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == detailw) {
if (listener) {
listener->panelChanged(Evlocallabdetailw,
detailw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == tloww) {
if (listener) {
listener->panelChanged(Evlocallabtloww,
tloww->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == thigw) {
if (listener) {
listener->panelChanged(Evlocallabthigw,
thigw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == edgw) {
if (listener) {
listener->panelChanged(Evlocallabedgw,
edgw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == basew) {
if (listener) {
listener->panelChanged(Evlocallabbasew,
basew->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == levelblur) {
if (listener) {
listener->panelChanged(Evlocallablevelblur,
levelblur->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigmabl) {
if (listener) {
listener->panelChanged(Evlocallabsigmabl,
sigmabl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromablu) {
if (listener) {
listener->panelChanged(Evlocallabchromablu,
chromablu->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residblur) {
if (listener) {
listener->panelChanged(Evlocallabresidblur,
residblur->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigma) {
if (listener) {
listener->panelChanged(Evlocallabsigma,
sigma->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == offset) {
if (listener) {
listener->panelChanged(Evlocallaboffset,
offset->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromalev) {
if (listener) {
listener->panelChanged(Evlocallabchromalev,
chromalev->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigmadr) {
if (listener) {
listener->panelChanged(Evlocallabsigmadr,
sigmadr->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == threswav) {
if (listener) {
listener->panelChanged(Evlocallabthreswav,
threswav->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == residcomp) {
if (listener) {
listener->panelChanged(Evlocallabresidcomp,
residcomp->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sigmadc) {
if (listener) {
listener->panelChanged(Evlocallabsigmadc,
sigmadc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == deltad) {
if (listener) {
listener->panelChanged(Evlocallabdeltad,
deltad->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
//if (a == fatres) {
// if (listener) {
// listener->panelChanged(Evlocallabfatres,
// fatres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
// }
//}
if (a == recothresw) {
if (listener) {
listener->panelChanged(Evlocallabrecothresw,
recothresw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lowthresw) {
if (listener) {
listener->panelChanged(Evlocallablowthresw,
lowthresw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == higthresw) {
if (listener) {
listener->panelChanged(Evlocallabhigthresw,
higthresw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == decayw) {
if (listener) {
listener->panelChanged(Evlocallabdecayw,
decayw->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blendmasklc) {
if (listener) {
listener->panelChanged(Evlocallabblendmasklc,
blendmasklc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radmasklc) {
if (listener) {
listener->panelChanged(Evlocallabradmasklc,
radmasklc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromasklc) {
if (listener) {
listener->panelChanged(Evlocallabchromasklc,
chromasklc->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR)
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabcsThreshold,
csThreshold->getHistoryString() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabContrast::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == wavshape) {
if (listener) {
listener->panelChanged(EvlocallabwavCurve,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == wavshapeedg) {
if (listener) {
listener->panelChanged(EvlocallabwavCurveedg,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == wavshapelev) {
if (listener) {
listener->panelChanged(EvlocallabwavCurvelev,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == wavshapecon) {
if (listener) {
listener->panelChanged(EvlocallabwavCurvecon,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == wavshapecompre) {
if (listener) {
listener->panelChanged(EvlocallabwavCurvecompre,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == wavshapecomp) {
if (listener) {
listener->panelChanged(EvlocallabwavCurvecomp,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == CCmasklcshape) {
if (listener) {
listener->panelChanged(EvlocallabCCmasklcshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmasklcshape) {
if (listener) {
listener->panelChanged(EvlocallabLLmasklcshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHmasklcshape) {
if (listener) {
listener->panelChanged(EvlocallabHHmasklcshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == Lmasklcshape) {
if (listener) {
listener->panelChanged(EvlocallabLmasklcshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenacontrast,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocenacontrast,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
gamlc->setValue(defSpot.gamlc);
// Set hidden GUI widgets in Normal mode to default spot values
origlc->set_active(defSpot.origlc);
processwav->set_active(defSpot.processwav);
wavgradl->set_active(defSpot.wavgradl);
sigmalc2->setValue(defSpot.sigmalc2);
strwav->setValue(defSpot.strwav);
angwav->setValue(defSpot.angwav);
featherwav->setValue(defSpot.featherwav);
wavedg->set_active(defSpot.wavedg);
strengthw->setValue(defSpot.strengthw);
sigmaed->setValue(defSpot.sigmaed);
wavshapeedg->setCurve(defSpot.locedgwavcurve);
gradw->setValue(defSpot.gradw);
waveshow->set_active(defSpot.waveshow);
radiusw->setValue(defSpot.radiusw);
detailw->setValue(defSpot.detailw);
offslc->setValue(defSpot.offslc);
if (defSpot.localedgMethod == "fir") {
localedgMethod->set_active(0);
} else if (defSpot.localedgMethod == "sec") {
localedgMethod->set_active(1);
} else if (defSpot.localedgMethod == "thr") {
localedgMethod->set_active(2);
}
tloww->setValue(defSpot.tloww);
thigw->setValue(defSpot.thigw);
edgw->setValue(defSpot.edgw);
basew->setValue(defSpot.basew);
if (defSpot.localneiMethod == "none") {
localneiMethod->set_active(0);
} else if (defSpot.localneiMethod == "low") {
localneiMethod->set_active(1);
} else if (defSpot.localneiMethod == "high") {
localneiMethod->set_active(2);
}
wavblur->set_active(defSpot.wavblur);
levelblur->setValue(defSpot.levelblur);
sigmabl->setValue(defSpot.sigmabl);
chromablu->setValue(defSpot.chromablu);
wavshapelev->setCurve(defSpot.loclevwavcurve);
residblur->setValue(defSpot.residblur);
blurlc->set_active(defSpot.blurlc);
wavcont->set_active(defSpot.wavcont);
sigma->setValue(defSpot.sigma);
offset->setValue(defSpot.offset);
chromalev->setValue(defSpot.chromalev);
wavshapecon->setCurve(defSpot.locconwavcurve);
wavcompre->set_active(defSpot.wavcompre);
wavshapecompre->setCurve(defSpot.loccomprewavcurve);
sigmadr->setValue(defSpot.sigmadr);
threswav->setValue(defSpot.threswav);
residcomp->setValue(defSpot.residcomp);
wavcomp->set_active(defSpot.wavcomp);
sigmadc->setValue(defSpot.sigmadc);
deltad->setValue(defSpot.deltad);
wavshapecomp->setCurve(defSpot.loccompwavcurve);
//fatres->setValue(defSpot.fatres);
fftwlc->set_active(defSpot.fftwlc);
decayw->setValue(defSpot.decayw);
// Enable all listeners
enableListener();
// Update GUI based on converted widget parameters:
// - Update Local contrast GUI according to fftwlc button state
updateContrastGUI3();
}
void LocallabContrast::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
gamlc->setValue(defSpot.gamlc);
/*
// Set hidden specific GUI widgets in Simple mode to default spot values
if (defSpot.localcontMethod == "loc") {
localcontMethod->set_active(0);
} else if (defSpot.localcontMethod == "wav") {
localcontMethod->set_active(1);
}
*/
showmasklcMethod->set_active(0);
enalcMask->set_active(defSpot.enalcMask);
// CCmasklcshape->setCurve(defSpot.CCmasklccurve);
// LLmasklcshape->setCurve(defSpot.LLmasklccurve);
// HHmasklcshape->setCurve(defSpot.HHmasklccurve);
// blendmasklc->setValue((double)defSpot.blendmasklc);
// radmasklc->setValue(defSpot.radmasklc);
// chromasklc->setValue(defSpot.chromasklc);
// Lmasklcshape->setCurve(defSpot.Lmasklccurve);
// Enable all listeners
recothresw->setValue(defSpot.recothresw);
lowthresw->setValue(defSpot.lowthresw);
higthresw->setValue(defSpot.higthresw);
decayw->setValue(defSpot.decayw);
enableListener();
// Update GUI based on converted widget parameters:
// - Update Local contrast GUI according to localcontMethod combobox value
updateContrastGUI1();
}
void LocallabContrast::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
localcontMethod->show();
origlc->hide();
expcontrastpyr->hide();
expcontrastpyr2->hide();
fftwlc->hide();
expmasklc->hide();
exprecovw->hide();
decayw->hide();
maskusablew->hide();
maskunusablew->hide();
gamlc->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
origlc->hide();
expcontrastpyr->hide();
expcontrastpyr2->hide();
fftwlc->hide();
// Specific Simple mode widgets are shown in Normal mode
localcontMethod->show();
expmasklc->show();
exprecovw->show();
decayw->hide();
offslc->hide();
if (enalcMask->get_active()) {
maskusablew->show();
maskunusablew->hide();
} else {
maskusablew->hide();
maskunusablew->show();
}
gamlc->hide();
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
localcontMethod->show();
origlc->show();
if (localcontMethod->get_active_row_number() != 0) { // Keep widgets hidden when localcontMethod is equal to 0
expcontrastpyr->show();
expcontrastpyr2->show();
gamlc->show();
}
if (localcontMethod->get_active_row_number() != 1) { // Keep widget hidden when localcontMethod is equal to 1
fftwlc->show();
}
offslc->show();
expmasklc->show();
exprecovw->show();
decayw->show();
if (enalcMask->get_active()) {
maskusablew->show();
maskunusablew->hide();
} else {
maskusablew->hide();
maskunusablew->show();
}
}
}
void LocallabContrast::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
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 mask background
CCmasklcshape->updateLocallabBackground(normChromar);
LLmasklcshape->updateLocallabBackground(normLumar);
HHmasklcshape->updateLocallabBackground(normHuer);
Lmasklcshape->updateLocallabBackground(normLumar);
return false;
}
);
}
void LocallabContrast::localcontMethodChanged()
{
// Update Local contrast GUI according to localcontMethod combobox value
updateContrastGUI1();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallablocalcontMethod,
localcontMethod->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabContrast::origlcChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (origlc->get_active()) {
listener->panelChanged(Evlocallaboriglc,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallaboriglc,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::processwavChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (processwav->get_active()) {
listener->panelChanged(Evlocallabprocesswav,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabprocesswav,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::wavgradlChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (wavgradl->get_active()) {
listener->panelChanged(Evlocallabwavgradl,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwavgradl,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::wavedgChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (wavedg->get_active()) {
listener->panelChanged(Evlocallabwavedg,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwavedg,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::localedgMethodChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallablocaledgMethod,
localedgMethod->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabContrast::waveshowChanged()
{
// Update Local contrast GUI according to waveshow button state
updateContrastGUI2();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (waveshow->get_active()) {
listener->panelChanged(Evlocallabwaveshow,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwaveshow,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::localneiMethodChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallablocalneiMethod,
localneiMethod->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabContrast::wavblurChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (wavblur->get_active()) {
listener->panelChanged(Evlocallabwavblur,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwavblur,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::blurlcChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (blurlc->get_active()) {
listener->panelChanged(Evlocallabblurlc,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabblurlc,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::wavcontChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (wavcont->get_active()) {
listener->panelChanged(Evlocallabwavcont,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwavcont,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::wavcompreChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (wavcompre->get_active()) {
listener->panelChanged(Evlocallabwavcompre,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwavcompre,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::wavcompChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (wavcomp->get_active()) {
listener->panelChanged(Evlocallabwavcomp,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabwavcomp,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::fftwlcChanged()
{
// Update Local contrast GUI according to fftwlc button state
updateContrastGUI3();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (fftwlc->get_active()) {
listener->panelChanged(Evlocallabfftwlc,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabfftwlc,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::showmasklcMethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void LocallabContrast::enalcMaskChanged()
{
if (enalcMask->get_active()) {
maskusablew->show();
maskunusablew->hide();
} else {
maskusablew->hide();
maskunusablew->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enalcMask->get_active()) {
listener->panelChanged(EvLocallabEnalcMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnalcMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabContrast::updateContrastGUI1()
{
const int mode = complexity->get_active_row_number();
// Update Local contrast GUI according to localcontMethod combobox value
if (localcontMethod->get_active_row_number() == 0) {
lcradius->show();
lcamount->show();
lcdarkness->show();
lclightness->show();
contFrame->hide();
csThreshold->hide();
levelwav->hide();
expresidpyr->hide();
clariFrame->hide();
expcontrastpyr->hide();
expcontrastpyr2->hide();
gamlc->hide();
if (mode == Expert) { // Keep widget hidden in Normal and Simple mode
fftwlc->show();
}
} else if (localcontMethod->get_active_row_number() == 1) {
lcradius->hide();
lcamount->hide();
lcdarkness->hide();
lclightness->hide();
contFrame->show();
csThreshold->show();
levelwav->show();
expresidpyr->show();
clariFrame->show();
offslc->hide();
if (mode == Expert) { // Keep widget hidden in Normal and Simple mode
expcontrastpyr->show();
expcontrastpyr2->show();
gamlc->show();
offslc->show();
}
fftwlc->hide();
}
}
void LocallabContrast::updateContrastGUI2()
{
// Update Local contrast GUI according to waveshow button state
if (waveshow->get_active()) {
edgsBoxshow->show();
} else {
edgsBoxshow->hide();
}
}
void LocallabContrast::updateContrastGUI3()
{
// Update Local contrast GUI according to fftwlc button state
const double temp = lcradius->getValue();
if (fftwlc->get_active()) {
lcradius->setLimits(20, 1500, 1, 80);
} else {
lcradius->setLimits(20, 100, 1, 80);
}
lcradius->setValue(temp);
}
/* ==== LocallabCBDL ==== */
LocallabCBDL::LocallabCBDL():
LocallabTool(this, M("TP_LOCALLAB_CBDL_TOOLNAME"), M("TP_LOCALLAB_CBDL"), true),
// CBDL specific widgets
levFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LEVFRA")))),
multiplier([]() -> std::array<Adjuster *, 6>
{
std::array<Adjuster*, 6> 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));
}
return res;
}
()),
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))),
softradiuscb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 0.))),
sensicb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
exprecovcb(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablecb(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablecb(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothrescb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 1., 2., 0.01, 1.))),
lowthrescb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthrescb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decaycb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
expmaskcb(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWCB")))),
showmaskcbMethod(Gtk::manage(new MyComboBoxText())),
enacbMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
// maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK"))),
maskcbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmaskcbshape(static_cast<FlatCurveEditor*>(maskcbCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmaskcbshape(static_cast<FlatCurveEditor*>(maskcbCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmaskcbshape(static_cast<FlatCurveEditor *>(maskcbCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
blendmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskcb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.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.))),
mask2cbCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmaskcbshape(static_cast<DiagonalCurveEditor*>(mask2cbCurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
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"))))
{
set_orientation(Gtk::ORIENTATION_VERTICAL);
const LocallabParams::LocallabSpot defSpot;
// Parameter CBDL specific widgets
for (const auto adj : multiplier) {
adj->setAdjusterListener(this);
}
chromacbdl->setAdjusterListener(this);
threshold->setAdjusterListener(this);
clarityml->setAdjusterListener(this);
contresid->setAdjusterListener(this);
softradiuscb->setLogScale(10, 0);
softradiuscb->setAdjusterListener(this);
sensicb->setAdjusterListener(this);
recothrescb->setAdjusterListener(this);
lowthrescb->setAdjusterListener(this);
higthrescb->setAdjusterListener(this);
decaycb->setAdjusterListener(this);
setExpandAlignProperties(exprecovcb, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
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_SHOWREF"));
showmaskcbMethod->set_active(0);
showmaskcbMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmaskcbMethodConn = showmaskcbMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabCBDL::showmaskcbMethodChanged));
enacbMaskConn = enacbMask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabCBDL::enacbMaskChanged));
maskcbCurveEditorG->setCurveListener(this);
CCmaskcbshape->setIdentityValue(0.);
CCmaskcbshape->setResetCurve(FlatCurveType(defSpot.CCmaskcbcurve.at(0)), defSpot.CCmaskcbcurve);
CCmaskcbshape->setBottomBarColorProvider(this, 1);
LLmaskcbshape->setIdentityValue(0.);
LLmaskcbshape->setResetCurve(FlatCurveType(defSpot.LLmaskcbcurve.at(0)), defSpot.LLmaskcbcurve);
LLmaskcbshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmaskcbshape->setIdentityValue(0.);
HHmaskcbshape->setResetCurve(FlatCurveType(defSpot.HHmaskcbcurve.at(0)), defSpot.HHmaskcbcurve);
HHmaskcbshape->setCurveColorProvider(this, 2);
HHmaskcbshape->setBottomBarColorProvider(this, 2);
maskcbCurveEditorG->curveListComplete();
blendmaskcb->setAdjusterListener(this);
radmaskcb->setAdjusterListener(this);
lapmaskcb->setAdjusterListener(this);
chromaskcb->setAdjusterListener(this);
gammaskcb->setAdjusterListener(this);
slomaskcb->setAdjusterListener(this);
mask2cbCurveEditorG->setCurveListener(this);
Lmaskcbshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskcbcurve.at(0)), defSpot.Lmaskcbcurve);
Lmaskcbshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
Lmaskcbshape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2cbCurveEditorG->curveListComplete();
lumacontrastMinusPressedConn = lumacontrastMinusButton->signal_pressed().connect(sigc::mem_fun(*this, &LocallabCBDL::lumacontrastMinusPressed));
lumaneutralPressedConn = lumaneutralButton->signal_pressed().connect(sigc::mem_fun(*this, &LocallabCBDL::lumaneutralPressed));
lumacontrastPlusPressedConn = lumacontrastPlusButton->signal_pressed().connect(sigc::mem_fun(*this, &LocallabCBDL::lumacontrastPlusPressed));
pack_start(*sensicb);
// Add CBDL specific widgets to GUI
ToolParamBlock* const levBox = Gtk::manage(new ToolParamBlock());
Gtk::Box* buttonBox = Gtk::manage(new Gtk::Box());
buttonBox->set_spacing(2);
buttonBox->set_homogeneous(true);
buttonBox->pack_start(*lumacontrastMinusButton);
buttonBox->pack_start(*lumaneutralButton);
buttonBox->pack_start(*lumacontrastPlusButton);
levBox->pack_start(*buttonBox);
for (const auto adj : multiplier) {
levBox->pack_start(*adj);
}
Gtk::Separator* const separator = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
levBox->pack_start(*separator, Gtk::PACK_SHRINK, 2);
levBox->pack_start(*chromacbdl);
levBox->pack_start(*threshold);
levFrame->add(*levBox);
pack_start(*levFrame);
Gtk::Frame* const residFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")));
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);
pack_start(*residFrame);
pack_start(*softradiuscb);
// pack_start(*sensicb);
ToolParamBlock* const cbBox3 = Gtk::manage(new ToolParamBlock());
cbBox3->pack_start(*maskusablecb, Gtk::PACK_SHRINK, 0);
cbBox3->pack_start(*maskunusablecb, Gtk::PACK_SHRINK, 0);
cbBox3->pack_start(*recothrescb);
cbBox3->pack_start(*lowthrescb);
cbBox3->pack_start(*higthrescb);
cbBox3->pack_start(*decaycb);
// colBox3->pack_start(*invmaskc);
exprecovcb->add(*cbBox3, false);
pack_start(*exprecovcb, false, false);
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);
maskcbBox->pack_start(*lapmaskcb, Gtk::PACK_SHRINK, 0);
maskcbBox->pack_start(*chromaskcb, Gtk::PACK_SHRINK, 0);
maskcbBox->pack_start(*gammaskcb, Gtk::PACK_SHRINK, 0);
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);
pack_start(*expmaskcb, false, false);
}
LocallabCBDL::~LocallabCBDL()
{
delete maskcbCurveEditorG;
delete mask2cbCurveEditorG;
}
bool LocallabCBDL::isMaskViewActive()
{
return (showmaskcbMethod->get_active_row_number() != 0);
}
void LocallabCBDL::resetMaskView()
{
showmaskcbMethodConn.block(true);
showmaskcbMethod->set_active(0);
showmaskcbMethodConn.block(false);
}
void LocallabCBDL::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
cbMask = showmaskcbMethod->get_active_row_number();
}
//new function Global
void LocallabCBDL::updateguicbdl(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensicb->hide();
exprecovcb->hide();
expmaskcb->hide();
enacbMask->set_active(false);
} else {
exprecovcb->show();
expmaskcb->show();
sensicb->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
void LocallabCBDL::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
levFrame->set_tooltip_text(M("TP_LOCALLAB_EXPCBDL_TOOLTIP"));
for (const auto adj : multiplier) {
adj->set_tooltip_text(M("TP_LOCALLAB_CBDL_ADJ_TOOLTIP"));
}
exprecovcb->set_tooltip_markup(M("TP_LOCALLAB_MASKRESCB_TOOLTIP"));
chromacbdl->set_tooltip_text(M("TP_LOCALLAB_CHROMACB_TOOLTIP"));
threshold->set_tooltip_text(M("TP_LOCALLAB_CBDL_THRES_TOOLTIP"));
clarityml->set_tooltip_text(M("TP_LOCALLAB_CBDLCLARI_TOOLTIP"));
sensicb->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
expmaskcb->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
CCmaskcbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmaskcbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmaskcbshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
blendmaskcb->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
radmaskcb->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
mask2cbCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
Lmaskcbshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
maskcbCurveEditorG->set_tooltip_markup(M("TP_LOCALLAB_MASKCURVE_TOOLTIP"));
gammaskcb->set_tooltip_text(M("TP_LOCALLAB_GAMMASK_TOOLTIP"));
chromaskcb->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
slomaskcb->set_tooltip_text(M("TP_LOCALLAB_SLOMASK_TOOLTIP"));
lapmaskcb->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
decaycb->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
lowthrescb->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP"));
higthrescb->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESCB_TOOLTIP"));
} else {
levFrame->set_tooltip_text("");
for (const auto adj : multiplier) {
adj->set_tooltip_text("");
}
chromacbdl->set_tooltip_text("");
threshold->set_tooltip_text("");
clarityml->set_tooltip_text("");
sensicb->set_tooltip_text("");
expmaskcb->set_tooltip_markup("");
CCmaskcbshape->setTooltip("");
LLmaskcbshape->setTooltip("");
HHmaskcbshape->setTooltip("");
blendmaskcb->set_tooltip_text("");
radmaskcb->set_tooltip_text("");
mask2cbCurveEditorG->set_tooltip_text("");
Lmaskcbshape->setTooltip("");
maskcbCurveEditorG->set_tooltip_markup("");
gammaskcb->set_tooltip_text("");
chromaskcb->set_tooltip_text("");
slomaskcb->set_tooltip_text("");
lapmaskcb->set_tooltip_text("");
exprecovcb->set_tooltip_markup("");
decaycb->set_tooltip_text("");
lowthrescb->set_tooltip_text("");
higthrescb->set_tooltip_text("");
}
}
void LocallabCBDL::setDefaultExpanderVisibility()
{
exprecovcb->set_expanded(false);
expmaskcb->set_expanded(false);
}
void LocallabCBDL::disableListener()
{
LocallabTool::disableListener();
showmaskcbMethodConn.block(true);
enacbMaskConn.block(true);
lumacontrastMinusPressedConn.block(true);
lumaneutralPressedConn.block(true);
lumacontrastPlusPressedConn.block(true);
}
void LocallabCBDL::enableListener()
{
LocallabTool::enableListener();
showmaskcbMethodConn.block(false);
enacbMaskConn.block(false);
lumacontrastMinusPressedConn.block(false);
lumaneutralPressedConn.block(false);
lumacontrastPlusPressedConn.block(false);
}
void LocallabCBDL::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visicbdl);
exp->setEnabled(spot.expcbdl);
complexity->set_active(spot.complexcbdl);
for (int i = 0; i < 6; i++) {
multiplier[i]->setValue(spot.mult[i]);
}
chromacbdl->setValue(spot.chromacbdl);
threshold->setValue(spot.threshold);
clarityml->setValue(spot.clarityml);
contresid->setValue((double)spot.contresid);
softradiuscb->setValue(spot.softradiuscb);
sensicb->setValue((double)spot.sensicb);
enacbMask->set_active(spot.enacbMask);
CCmaskcbshape->setCurve(spot.CCmaskcbcurve);
LLmaskcbshape->setCurve(spot.LLmaskcbcurve);
HHmaskcbshape->setCurve(spot.HHmaskcbcurve);
blendmaskcb->setValue((double)spot.blendmaskcb);
radmaskcb->setValue(spot.radmaskcb);
lapmaskcb->setValue(spot.lapmaskcb);
chromaskcb->setValue(spot.chromaskcb);
gammaskcb->setValue(spot.gammaskcb);
slomaskcb->setValue(spot.slomaskcb);
Lmaskcbshape->setCurve(spot.Lmaskcbcurve);
recothrescb->setValue((double)spot.recothrescb);
lowthrescb->setValue((double)spot.lowthrescb);
higthrescb->setValue((double)spot.higthrescb);
decaycb->setValue((double)spot.decaycb);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabCBDL::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.expcbdl = exp->getEnabled();
spot.visicbdl = exp->get_visible();
spot.complexcbdl = complexity->get_active_row_number();
for (int i = 0; i < 6; i++) {
spot.mult[i] = multiplier[i]->getValue();
}
spot.chromacbdl = chromacbdl->getValue();
spot.threshold = threshold->getValue();
spot.clarityml = clarityml->getValue();
spot.contresid = contresid->getIntValue();
spot.softradiuscb = softradiuscb->getValue();
spot.sensicb = sensicb->getIntValue();
spot.enacbMask = enacbMask->get_active();
spot.LLmaskcbcurve = LLmaskcbshape->getCurve();
spot.CCmaskcbcurve = CCmaskcbshape->getCurve();
spot.HHmaskcbcurve = HHmaskcbshape->getCurve();
spot.blendmaskcb = blendmaskcb->getIntValue();
spot.radmaskcb = radmaskcb->getValue();
spot.lapmaskcb = lapmaskcb->getValue();
spot.chromaskcb = chromaskcb->getValue();
spot.gammaskcb = gammaskcb->getValue();
spot.slomaskcb = slomaskcb->getValue();
spot.Lmaskcbcurve = Lmaskcbshape->getCurve();
spot.recothrescb = recothrescb->getValue();
spot.lowthrescb = lowthrescb->getValue();
spot.higthrescb = higthrescb->getValue();
spot.decaycb = decaycb->getValue();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabCBDL::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default values for adjuster widgets
for (int i = 0; i < 6; i++) {
multiplier[i]->setDefault(defSpot.mult[i]);
}
chromacbdl->setDefault(defSpot.chromacbdl);
threshold->setDefault(defSpot.threshold);
clarityml->setDefault(defSpot.clarityml);
contresid->setDefault((double)defSpot.contresid);
softradiuscb->setDefault(defSpot.softradiuscb);
sensicb->setDefault((double)defSpot.sensicb);
blendmaskcb->setDefault((double)defSpot.blendmaskcb);
radmaskcb->setDefault(defSpot.radmaskcb);
lapmaskcb->setDefault(defSpot.lapmaskcb);
chromaskcb->setDefault(defSpot.chromaskcb);
gammaskcb->setDefault(defSpot.gammaskcb);
slomaskcb->setDefault(defSpot.slomaskcb);
recothrescb->setDefault((double)defSpot.recothrescb);
lowthrescb->setDefault((double)defSpot.lowthrescb);
higthrescb->setDefault((double)defSpot.higthrescb);
decaycb->setDefault((double)defSpot.decaycb);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabCBDL::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->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()))
+ " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromacbdl) {
if (listener) {
listener->panelChanged(Evlocallabchromacbdl,
chromacbdl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == threshold) {
if (listener) {
listener->panelChanged(EvlocallabThresho,
threshold->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == clarityml) {
if (listener) {
listener->panelChanged(EvLocallabclarityml,
clarityml->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == contresid) {
if (listener) {
listener->panelChanged(EvLocallabcontresid,
contresid->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == softradiuscb) {
if (listener) {
listener->panelChanged(Evlocallabsoftradiuscb,
softradiuscb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sensicb) {
if (listener) {
listener->panelChanged(Evlocallabsensicb,
sensicb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == recothrescb) {
if (listener) {
listener->panelChanged(Evlocallabrecothrescb,
recothrescb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lowthrescb) {
if (listener) {
listener->panelChanged(Evlocallablowthrescb,
lowthrescb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == higthrescb) {
if (listener) {
listener->panelChanged(Evlocallabhigthrescb,
higthrescb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == decaycb) {
if (listener) {
listener->panelChanged(Evlocallabdecaycb,
decaycb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blendmaskcb) {
if (listener) {
listener->panelChanged(Evlocallabblendmaskcb,
blendmaskcb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radmaskcb) {
if (listener) {
listener->panelChanged(Evlocallabradmaskcb,
radmaskcb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lapmaskcb) {
if (listener) {
listener->panelChanged(Evlocallablapmaskcb,
lapmaskcb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromaskcb) {
if (listener) {
listener->panelChanged(Evlocallabchromaskcb,
chromaskcb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == gammaskcb) {
if (listener) {
listener->panelChanged(Evlocallabgammaskcb,
gammaskcb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == slomaskcb) {
if (listener) {
listener->panelChanged(Evlocallabslomaskcb,
slomaskcb->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabCBDL::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == CCmaskcbshape) {
if (listener) {
listener->panelChanged(EvlocallabCCmaskcbshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmaskcbshape) {
if (listener) {
listener->panelChanged(EvlocallabLLmaskcbshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHmaskcbshape) {
if (listener) {
listener->panelChanged(EvlocallabHHmaskcbshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == Lmaskcbshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskcbshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabCBDL::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenacbdl,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocenacbdl,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabCBDL::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden GUI widgets in Normal mode to default spot values
lapmaskcb->setValue(defSpot.lapmaskcb);
decaycb->setValue(defSpot.decaycb);
// Enable all listeners
enableListener();
}
void LocallabCBDL::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden specific GUI widgets in Simple mode to default spot values
softradiuscb->setValue(defSpot.softradiuscb);
showmaskcbMethod->set_active(0);
enacbMask->set_active(defSpot.enacbMask);
// CCmaskcbshape->setCurve(defSpot.CCmaskcbcurve);
// LLmaskcbshape->setCurve(defSpot.LLmaskcbcurve);
// HHmaskcbshape->setCurve(defSpot.HHmaskcbcurve);
// blendmaskcb->setValue((double)defSpot.blendmaskcb);
// radmaskcb->setValue(defSpot.radmaskcb);
// chromaskcb->setValue(defSpot.chromaskcb);
// gammaskcb->setValue(defSpot.gammaskcb);
// slomaskcb->setValue(defSpot.slomaskcb);
// Lmaskcbshape->setCurve(defSpot.Lmaskcbcurve);
recothrescb->setValue(defSpot.recothrescb);
lowthrescb->setValue(defSpot.lowthrescb);
higthrescb->setValue(defSpot.higthrescb);
decaycb->setValue(defSpot.decaycb);
// Enable all listers
enableListener();
}
void LocallabCBDL::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
softradiuscb->hide();
expmaskcb->hide();
exprecovcb->hide();
decaycb->hide();
maskusablecb->hide();
maskunusablecb->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
lapmaskcb->hide();
// Specific Simple mode widgets are shown in Normal mode
softradiuscb->show();
expmaskcb->show();
exprecovcb->show();
decaycb->hide();
if (enacbMask->get_active()) {
maskusablecb->show();
maskunusablecb->hide();
} else {
maskusablecb->hide();
maskunusablecb->show();
}
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
softradiuscb->show();
expmaskcb->show();
lapmaskcb->show();
exprecovcb->show();
decaycb->show();
if (enacbMask->get_active()) {
maskusablecb->show();
maskunusablecb->hide();
} else {
maskusablecb->hide();
maskunusablecb->show();
}
}
}
void LocallabCBDL::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
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 mask background
CCmaskcbshape->updateLocallabBackground(normChromar);
LLmaskcbshape->updateLocallabBackground(normLumar);
HHmaskcbshape->updateLocallabBackground(normHuer);
Lmaskcbshape->updateLocallabBackground(normLumar);
return false;
}
);
}
void LocallabCBDL::showmaskcbMethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void LocallabCBDL::enacbMaskChanged()
{
if (enacbMask->get_active()) {
maskusablecb->show();
maskunusablecb->hide();
} else {
maskusablecb->hide();
maskunusablecb->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enacbMask->get_active()) {
listener->panelChanged(EvLocallabEnacbMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnacbMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabCBDL::lumacontrastMinusPressed()
{
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 LocallabCBDL::lumaneutralPressed()
{
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 LocallabCBDL::lumacontrastPlusPressed()
{
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
}
/* ==== LocallabLog ==== */
LocallabLog::LocallabLog():
LocallabTool(this, M("TP_LOCALLAB_LOG_TOOLNAME"), M("TP_LOCALLAB_LOG"), false),
// Log encoding specific widgets
repar(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 0.5, 100.0))),
ciecam(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CIEC")))),
autocompute(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_LOGAUTO")))),
logPFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGPFRA")))),
logPFrame2(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGPFRA2")))),
blackEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.00, 0.00, 0.01, -5.00))),
whiteEv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0.00, 32.00, 0.01, 10.00))),
whiteslog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGWHITESCIE"), -100, 100, 1, 0))),
blackslog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGBLACKSSCIE"), -100, 100, 1, 0))),
comprlog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COMPRCIE"), 0., 1., 0.01, 0.4))),
strelog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENGTHCIELOG"), 0., 100., 0.5, 100.))),
satlog(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SATCIE")))),
fullimage(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FULLIMAGE")))),
logFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGFRA")))),
Autogray(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AUTOGRAY")))),
sourceGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_GRAY"), 1.0, 100.0, 0.1, 10.0))),
sourceabs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 2000.0))),
sursour(Gtk::manage(new MyComboBoxText())),
surHBox(Gtk::manage(new Gtk::Box())),
log1Frame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOG1FRA")))),
log2Frame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOG2FRA")))),
targetGray(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 4.0, 80.0, 0.1, 18.0))),
detail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 1., 0.01, 0.6))),
catad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CATAD"), -100., 100., 0.5, 0., Gtk::manage(new RTImage("circle-blue-small")), Gtk::manage(new RTImage("circle-orange-small"))))),
lightl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGLIGHTL"), -100., 100., 0.5, 0.))),
lightq(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGLIGHTQ"), -100., 100., 0.5, 0.))),
contl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTL"), -100., 100., 0.5, 0.))),
contq(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONQL"), -100., 100., 0.5, 0.))),
contthres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTHRES"), -1., 1., 0.01, 0.))),
colorfl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCOLORFL"), -100., 100., 0.5, 0.))),
saturl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))),
chroml(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROML"), -100., 100., 0.5, 0.))),
expL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_LOGEXP")))),
//CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LOGCONTQ"))),
//LshapeL(static_cast<DiagonalCurveEditor*>(CurveEditorL->addCurve(CT_Diagonal, "Q(Q)"))),
targabs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 16.0))),
surround(Gtk::manage(new MyComboBoxText())),
surrHBox(Gtk::manage(new Gtk::Box())),
baselog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BASELOG"), 1.3, 3., 0.05, 2.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
exprecovl(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablel(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablel(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothresl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthresl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthresl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decayl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
sensilog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
previewlog(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))),
gradlogFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADLOGFRA")))),
strlog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2.0, 2.0, 0.05, 0.))),
anglog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
featherlog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FEATVALUE"), 10., 100., 0.1, 25.))),
expmaskL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWC")))),
showmaskLMethod(Gtk::manage(new MyComboBoxText())),
enaLMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
// maskCurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))),
maskCurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmaskshapeL(static_cast<FlatCurveEditor*>(maskCurveEditorL->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmaskshapeL(static_cast<FlatCurveEditor*>(maskCurveEditorL->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmaskshapeL(static_cast<FlatCurveEditor *>(maskCurveEditorL->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
blendmaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskL(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
mask2CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
LmaskshapeL(static_cast<DiagonalCurveEditor*>(mask2CurveEditorL->addCurve(CT_Diagonal, "L(L)")))
{
auto m = ProcEventMapper::getInstance();
Evlocallabpreviewlog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWLOG");
Evlocallabwhiteslog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOG_WHITES");
Evlocallabblackslog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOG_BLACKS");
Evlocallabcomprlog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOG_COMPR");
Evlocallabstrelog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOG_STRE");
Evlocallabsatlog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOG_SAT");
Evlocallabfeatherlog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_FEATHERLOG");
set_orientation(Gtk::ORIENTATION_VERTICAL);
// Parameter Log encoding specific widgets
autoconn = autocompute->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::autocomputeToggled));
const LocallabParams::LocallabSpot defSpot;
repar->setAdjusterListener(this);
blackEv->setLogScale(2, -8);
blackEv->setAdjusterListener(this);
whiteEv->setLogScale(16, 0);
whiteEv->setAdjusterListener(this);
whiteslog->setAdjusterListener(this);
blackslog->setAdjusterListener(this);
comprlog->setAdjusterListener(this);
strelog->setAdjusterListener(this);
ciecamconn = ciecam->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::ciecamChanged));
fullimageConn = fullimage->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::fullimageChanged));
satlogconn = satlog->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::satlogChanged));
AutograyConn = Autogray->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::AutograyChanged));
sourceGray->setAdjusterListener(this);
sourceGray->setLogScale(10, 18, true);
sourceabs->setLogScale(500, 0);
sourceabs->setAdjusterListener(this);
targetGray->setAdjusterListener(this);
targetGray->setLogScale(10, 18, true);
detail->setAdjusterListener(this);
catad->setAdjusterListener(this);
setExpandAlignProperties(expL, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
saturl->setAdjusterListener(this);
chroml->setAdjusterListener(this);
lightl->setAdjusterListener(this);
lightq->setAdjusterListener(this);
contl->setAdjusterListener(this);
contthres->setAdjusterListener(this);
contq->setAdjusterListener(this);
colorfl->setAdjusterListener(this);
//CurveEditorL->setCurveListener(this);
//LshapeL->setResetCurve(DiagonalCurveType(defSpot.LcurveL.at(0)), defSpot.LcurveL);
//LshapeL->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
//LshapeL->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
//CurveEditorL->curveListComplete();
targabs->setLogScale(500, 0);
targabs->setAdjusterListener(this);
baselog->setAdjusterListener(this);
recothresl->setAdjusterListener(this);
lowthresl->setAdjusterListener(this);
higthresl->setAdjusterListener(this);
decayl->setAdjusterListener(this);
setExpandAlignProperties(exprecovl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
sensilog->setAdjusterListener(this);
strlog->setAdjusterListener(this);
anglog->setAdjusterListener(this);
featherlog->setAdjusterListener(this);
surHBox->set_spacing(2);
surHBox->set_tooltip_markup(M("TP_LOCALLAB_LOGSURSOUR_TOOLTIP"));
Gtk::Label* surLabel = Gtk::manage(new Gtk::Label(M("TP_COLORAPP_SURROUND") + ":"));
surHBox->pack_start(*surLabel, Gtk::PACK_SHRINK);
sursour->append(M("TP_COLORAPP_SURROUND_AVER"));
sursour->append(M("TP_COLORAPP_SURROUND_DIM"));
sursour->append(M("TP_COLORAPP_SURROUND_DARK"));
sursour->append(M("TP_COLORAPP_SURROUND_EXDARK"));
sursour->set_active(0);
surHBox->pack_start(*sursour);
sursourconn = sursour->signal_changed().connect(sigc::mem_fun(*this, &LocallabLog::sursourChanged));
surrHBox->set_spacing(2);
surrHBox->set_tooltip_markup(M("TP_COLORAPP_SURROUND_TOOLTIP"));
Gtk::Label* surrLabel = Gtk::manage(new Gtk::Label(M("TP_COLORAPP_SURROUND") + ":"));
surrHBox->pack_start(*surrLabel, Gtk::PACK_SHRINK);
surround->append(M("TP_COLORAPP_SURROUND_AVER"));
surround->append(M("TP_COLORAPP_SURROUND_DIM"));
surround->append(M("TP_COLORAPP_SURROUND_DARK"));
surround->append(M("TP_COLORAPP_SURROUND_EXDARK"));
surround->set_active(0);
surrHBox->pack_start(*surround);
surroundconn = surround->signal_changed().connect(sigc::mem_fun(*this, &LocallabLog::surroundChanged));
setExpandAlignProperties(expmaskL, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
previewlog->set_active(false);
previewlogConn = previewlog->signal_clicked().connect(
sigc::mem_fun(
*this, &LocallabLog::previewlogChanged));
showmaskLMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
showmaskLMethod->append(M("TP_LOCALLAB_SHOWMODIF"));
showmaskLMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK"));
showmaskLMethod->append(M("TP_LOCALLAB_SHOWMASK"));
showmaskLMethod->append(M("TP_LOCALLAB_SHOWREF"));
showmaskLMethod->set_active(0);
showmaskLMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmaskLMethodConn = showmaskLMethod->signal_changed().connect(sigc::mem_fun(*this, &LocallabLog::showmaskLMethodChanged));
enaLMaskConn = enaLMask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabLog::enaLMaskChanged));
maskCurveEditorL->setCurveListener(this);
CCmaskshapeL->setIdentityValue(0.);
CCmaskshapeL->setResetCurve(FlatCurveType(defSpot.CCmaskcurveL.at(0)), defSpot.CCmaskcurveL);
CCmaskshapeL->setBottomBarColorProvider(this, 1);
LLmaskshapeL->setIdentityValue(0.);
LLmaskshapeL->setResetCurve(FlatCurveType(defSpot.LLmaskcurveL.at(0)), defSpot.LLmaskcurveL);
LLmaskshapeL->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmaskshapeL->setIdentityValue(0.);
HHmaskshapeL->setResetCurve(FlatCurveType(defSpot.HHmaskcurveL.at(0)), defSpot.HHmaskcurveL);
HHmaskshapeL->setCurveColorProvider(this, 2);
HHmaskshapeL->setBottomBarColorProvider(this, 2);
maskCurveEditorL->curveListComplete();
blendmaskL->setAdjusterListener(this);
radmaskL->setAdjusterListener(this);
chromaskL->setAdjusterListener(this);
mask2CurveEditorL->setCurveListener(this);
LmaskshapeL->setResetCurve(DiagonalCurveType(defSpot.LmaskcurveL.at(0)), defSpot.LmaskcurveL);
LmaskshapeL->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
LmaskshapeL->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2CurveEditorL->curveListComplete();
// Add Log encoding specific widgets to GUI
pack_start(*sensilog);
pack_start(*previewlog);
pack_start(*repar);
pack_start(*ciecam);
logPFrame->set_label_align(0.025, 0.5);
logPFrame2->set_label_align(0.025, 0.5);
ToolParamBlock* const logPBox = Gtk::manage(new ToolParamBlock());
ToolParamBlock* const logPBox2 = Gtk::manage(new ToolParamBlock());
logPBox->pack_start(*autocompute);
logPBox->pack_start(*blackEv);
logPBox->pack_start(*whiteEv);
logPBox->pack_start(*whiteslog);
logPBox->pack_start(*blackslog);
logPBox2->pack_start(*comprlog);
// logPBox2->pack_start(*strelog);
logPBox2->pack_start(*satlog);
logPFrame2->add(*logPBox2);
logPBox->pack_start(*logPFrame2);
logPBox->pack_start(*fullimage);
logPFrame->add(*logPBox);
pack_start(*logPFrame);
// Gtk::Frame* const logFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGFRA")));
logFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const logFBox = Gtk::manage(new ToolParamBlock());
logFBox->pack_start(*Autogray);
logFBox->pack_start(*sourceGray);
logFBox->pack_start(*sourceabs);
logFBox->pack_start(*surHBox);
// logFBox->pack_start(*baselog);
logFrame->add(*logFBox);
pack_start(*logFrame);
log1Frame->set_label_align(0.025, 0.5);
ToolParamBlock* const logP1Box = Gtk::manage(new ToolParamBlock());
logP1Box->pack_start(*detail);
logP1Box->pack_start(*contl);
logP1Box->pack_start(*contthres);
logP1Box->pack_start(*saturl);
Gtk::Separator* const separatorchro = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
ToolParamBlock* const logP11Box = Gtk::manage(new ToolParamBlock());
logP11Box->pack_start(*lightl);
logP11Box->pack_start(*lightq);
logP11Box->pack_start(*contq);
logP11Box->pack_start(*separatorchro);
logP11Box->pack_start(*chroml);
logP11Box->pack_start(*colorfl);
expL->add(*logP11Box, false);
logP1Box->pack_start(*expL, false, false);
// logP1Box->pack_start(*CurveEditorL, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
log1Frame->add(*logP1Box);
pack_start(*log1Frame);
log2Frame->set_label_align(0.025, 0.5);
ToolParamBlock* const logP2Box = Gtk::manage(new ToolParamBlock());
logP2Box->pack_start(*targetGray);
logP2Box->pack_start(*targabs);
logP2Box->pack_start(*catad);
logP2Box->pack_start(*surrHBox);
ToolParamBlock* const logBox3 = Gtk::manage(new ToolParamBlock());
logBox3->pack_start(*maskusablel, Gtk::PACK_SHRINK, 0);
logBox3->pack_start(*maskunusablel, Gtk::PACK_SHRINK, 0);
logBox3->pack_start(*recothresl);
logBox3->pack_start(*lowthresl);
logBox3->pack_start(*higthresl);
logBox3->pack_start(*decayl);
// colBox3->pack_start(*invmaskc);
exprecovl->add(*logBox3, false);
ToolParamBlock* const logP3Box = Gtk::manage(new ToolParamBlock());
logP3Box->pack_start(*showmaskLMethod, Gtk::PACK_SHRINK, 4);
logP3Box->pack_start(*enaLMask, Gtk::PACK_SHRINK, 0);
logP3Box->pack_start(*maskCurveEditorL, Gtk::PACK_SHRINK, 4);
logP3Box->pack_start(*blendmaskL);
logP3Box->pack_start(*radmaskL);
logP3Box->pack_start(*chromaskL);
logP3Box->pack_start(*mask2CurveEditorL, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
expmaskL->add(*logP3Box, false);
log2Frame->add(*logP2Box);
pack_start(*log2Frame);
pack_start(*exprecovl, false, false);
// pack_start(*baselog);
// pack_start(*sensilog);
pack_start(*expmaskL, false, false);
// Gtk::Frame* const gradlogFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADLOGFRA")));
gradlogFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const gradlogBox = Gtk::manage(new ToolParamBlock());
gradlogBox->pack_start(*strlog);
gradlogBox->pack_start(*anglog);
gradlogBox->pack_start(*featherlog);
gradlogFrame->add(*gradlogBox);
pack_start(*gradlogFrame);
}
LocallabLog::~LocallabLog()
{
delete maskCurveEditorL;
delete mask2CurveEditorL;
//delete CurveEditorL;
}
void LocallabLog::setDefaultExpanderVisibility()
{
exprecovl->set_expanded(false);
expmaskL->set_expanded(false);
expL->set_expanded(false);
}
//new function Global
void LocallabLog::updateguilog(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensilog->hide();
previewlog->hide();
previewlog->set_active(false);
enaLMask->set_active(false);
exprecovl->hide();
expmaskL->hide();
} else {
sensilog->show();
previewlog->show();
exprecovl->show();
expmaskL->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
void LocallabLog::previewlogChanged()
{
if(previewlog->get_active()) {
showmaskLMethod->set_active(4);
} else {
showmaskLMethod->set_active(0);
}
if (isLocActivated) {
if (listener) {
listener->panelChanged(Evlocallabpreviewlog,"");
}
}
}
void LocallabLog::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
exp->set_tooltip_text(M("TP_LOCALLAB_LOGENCOD_TOOLTIP"));
repar->set_tooltip_text(M("TP_LOCALLAB_LOGREPART_TOOLTIP"));
recothresl->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
logPFrame->set_tooltip_text(M("TP_LOCALLAB_LOGFRAME_TOOLTIP"));
logFrame->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP"));
log1Frame->set_tooltip_text(M("TP_LOCALLAB_LOGIMAGE_TOOLTIP"));
log2Frame->set_tooltip_text(M("TP_LOCALLAB_LOGVIEWING_TOOLTIP"));
autocompute->set_tooltip_text(M("TP_LOCALLAB_LOGAUTO_TOOLTIP"));
Autogray->set_tooltip_text(M("TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP"));
// blackEv->set_tooltip_text(M("TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP"));
// whiteEv->set_tooltip_text(M("TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP"));
exprecovl->set_tooltip_markup(M("TP_LOCALLAB_MASKRELOG_TOOLTIP"));
blackEv->set_tooltip_text("");
whiteEv->set_tooltip_text("");
whiteslog->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP"));
blackslog->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP"));
comprlog->set_tooltip_text(M("TP_LOCALLAB_COMPRLOG_TOOLTIP"));
sourceGray->set_tooltip_text(M("TP_LOCALLAB_JZLOGYBOUT_TOOLTIP"));
sourceabs->set_tooltip_text(M("TP_COLORAPP_ADAPSCEN_TOOLTIP"));
targabs->set_tooltip_text(M("TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP"));
targetGray->set_tooltip_text(M("TP_COLORAPP_YBOUT_TOOLTIP"));
baselog->set_tooltip_text(M("TP_LOCALLAB_LOGBASE_TOOLTIP"));
strlog->set_tooltip_text(M("TP_LOCALLAB_GRADGEN_TOOLTIP"));
anglog->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP"));
contl->set_tooltip_text(M("TP_LOCALLAB_LOGCONTL_TOOLTIP"));
contq->set_tooltip_text(M("TP_LOCALLAB_LOGCONTQ_TOOLTIP"));
contthres->set_tooltip_text(M("TP_LOCALLAB_LOGCONTTHRES_TOOLTIP"));
colorfl->set_tooltip_text(M("TP_LOCALLAB_LOGCOLORF_TOOLTIP"));
lightl->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTL_TOOLTIP"));
lightq->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTQ_TOOLTIP"));
saturl->set_tooltip_text(M("TP_LOCALLAB_LOGSATURL_TOOLTIP"));
chroml->set_tooltip_text(M("TP_COLORAPP_CHROMA_TOOLTIP"));
detail->set_tooltip_text(M("TP_LOCALLAB_LOGDETAIL_TOOLTIP"));
catad->set_tooltip_text(M("TP_LOCALLAB_LOGCATAD_TOOLTIP"));
sensilog->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
fullimage->set_tooltip_text(M("TP_LOCALLAB_FULLIMAGELOG_TOOLTIP"));
ciecam->set_tooltip_text(M("TP_LOCALLAB_CIECAMLOG_TOOLTIP"));
expmaskL->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
CCmaskshapeL->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmaskshapeL->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmaskshapeL->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
blendmaskL->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
radmaskL->set_tooltip_text(M("TP_LOCALLAB_LAPRAD2_TOOLTIP"));
chromaskL->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
// mask2CurveEditorL->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
LmaskshapeL->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
decayl->set_tooltip_text(M("TP_LOCALLAB_MASKDECAY_TOOLTIP"));
lowthresl->set_tooltip_text(M("TP_LOCALLAB_MASKLOWTHRESL_TOOLTIP"));
higthresl->set_tooltip_text(M("TP_LOCALLAB_MASKHIGTHRESL_TOOLTIP"));
} else {
exp->set_tooltip_text("");
repar->set_tooltip_text("");
recothresl->set_tooltip_text("");
logPFrame->set_tooltip_text("");
logFrame->set_tooltip_text("");
log1Frame->set_tooltip_text("");
log2Frame->set_tooltip_text("");
exprecovl->set_tooltip_markup("");
autocompute->set_tooltip_text("");
blackEv->set_tooltip_text("");
whiteEv->set_tooltip_text("");
sourceGray->set_tooltip_text("");
sourceabs->set_tooltip_text("");
targabs->set_tooltip_text("");
targetGray->set_tooltip_text("");
baselog->set_tooltip_text("");
strlog->set_tooltip_text("");
anglog->set_tooltip_text("");
detail->set_tooltip_text("");
Autogray->set_tooltip_text("");
sensilog->set_tooltip_text("");
fullimage->set_tooltip_text("");
ciecam->set_tooltip_text("");
contl->set_tooltip_text("");
lightl->set_tooltip_text("");
lightq->set_tooltip_text("");
contq->set_tooltip_text("");
contthres->set_tooltip_text("");
colorfl->set_tooltip_text("");
saturl->set_tooltip_text("");
chroml->set_tooltip_text("");
catad->set_tooltip_text("");
expmaskL->set_tooltip_markup("");
CCmaskshapeL->setTooltip("");
LLmaskshapeL->setTooltip("");
HHmaskshapeL->setTooltip("");
blendmaskL->set_tooltip_text("");
radmaskL->set_tooltip_text("");
chromaskL->set_tooltip_text("");
mask2CurveEditorL->set_tooltip_text("");
LmaskshapeL->setTooltip("");
decayl->set_tooltip_text("");
lowthresl->set_tooltip_text("");
higthresl->set_tooltip_text("");
whiteslog->set_tooltip_text("");
blackslog->set_tooltip_text("");
comprlog->set_tooltip_text("");
}
}
void LocallabLog::disableListener()
{
LocallabTool::disableListener();
autoconn.block(true);
fullimageConn.block(true);
ciecamconn.block(true);
satlogconn.block(true);
enaLMaskConn.block(true);
surroundconn.block(true);
sursourconn.block(true);
AutograyConn.block(true);
showmaskLMethodConn.block(true);
}
void LocallabLog::enableListener()
{
LocallabTool::enableListener();
autoconn.block(false);
fullimageConn.block(false);
ciecamconn.block(false);
satlogconn.block(false);
enaLMaskConn.block(false);
surroundconn.block(false);
sursourconn.block(false);
AutograyConn.block(false);
showmaskLMethodConn.block(false);
}
bool LocallabLog::isMaskViewActive()
{
return ((showmaskLMethod->get_active_row_number() != 0));
}
void LocallabLog::resetMaskView()
{
showmaskLMethodConn.block(true);
showmaskLMethod->set_active(0);
showmaskLMethodConn.block(false);
}
void LocallabLog::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
logMask = showmaskLMethod->get_active_row_number();
}
Gtk::ToggleButton *LocallabLog::getPreviewDeltaEButton() const
{
return previewlog;
}
sigc::connection *LocallabLog::getPreviewDeltaEButtonConnection()
{
return &previewlogConn;
}
void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
nbmasklog = 0;
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visilog);
exp->setEnabled(spot.explog);
complexity->set_active(spot.complexlog);
autocompute->set_active(spot.autocompute);
blackEv->setValue(spot.blackEv);
repar->setValue(spot.repar);
whiteEv->setValue(spot.whiteEv);
whiteslog->setValue(spot.whiteslog);
blackslog->setValue(spot.blackslog);
comprlog->setValue(spot.comprlog);
strelog->setValue(spot.strelog);
/* if(whiteEv->getValue() < 1.5){
whiteEv->setValue(1.5);
}
*/
if (spot.sursour == "Average") {
sursour->set_active(0);
} else if (spot.sursour == "Dim") {
sursour->set_active(1);
} else if (spot.sursour == "Dark") {
sursour->set_active(2);
} else if (spot.sursour == "exDark") {
sursour->set_active(3);
}
if (spot.surround == "Average") {
surround->set_active(0);
} else if (spot.surround == "Dim") {
surround->set_active(1);
} else if (spot.surround == "Dark") {
surround->set_active(2);
} else if (spot.surround == "ExtremelyDark") {
surround->set_active(3);
}
recothresl->setValue((double)spot.recothresl);
lowthresl->setValue((double)spot.lowthresl);
higthresl->setValue((double)spot.higthresl);
decayl->setValue((double)spot.decayl);
ciecam->set_active(spot.ciecam);
satlog->set_active(spot.satlog);
fullimage->set_active(spot.fullimage);
Autogray->set_active(spot.Autogray);
sourceGray->setValue(spot.sourceGray);
sourceabs->setValue(spot.sourceabs);
catad->setValue(spot.catad);
saturl->setValue(spot.saturl);
chroml->setValue(spot.chroml);
lightl->setValue(spot.lightl);
lightq->setValue(spot.lightq);
contl->setValue(spot.contl);
contthres->setValue(spot.contthres);
contq->setValue(spot.contq);
colorfl->setValue(spot.colorfl);
//LshapeL->setCurve(spot.LcurveL);
targabs->setValue(spot.targabs);
targetGray->setValue(spot.targetGray);
detail->setValue(spot.detail);
baselog->setValue(spot.baselog);
sensilog->setValue((double)spot.sensilog);
strlog->setValue(spot.strlog);
anglog->setValue(spot.anglog);
featherlog->setValue(spot.featherlog);
CCmaskshapeL->setCurve(spot.CCmaskcurveL);
LLmaskshapeL->setCurve(spot.LLmaskcurveL);
HHmaskshapeL->setCurve(spot.HHmaskcurveL);
enaLMask->set_active(spot.enaLMask);
blendmaskL->setValue(spot.blendmaskL);
radmaskL->setValue(spot.radmaskL);
chromaskL->setValue(spot.chromaskL);
LmaskshapeL->setCurve(spot.LmaskcurveL);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Update Log Encoding GUI according to autocompute button state
updateLogGUI();
updateLogGUI2();
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabLog::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.explog = exp->getEnabled();
spot.visilog = exp->get_visible();
spot.complexlog = complexity->get_active_row_number();
spot.autocompute = autocompute->get_active();
spot.repar = repar->getValue();
spot.blackEv = blackEv->getValue();
spot.whiteEv = whiteEv->getValue();
spot.whiteslog = whiteslog->getIntValue();
spot.blackslog = blackslog->getIntValue();
spot.comprlog = comprlog->getValue();
spot.strelog = strelog->getValue();
spot.fullimage = fullimage->get_active();
spot.ciecam = ciecam->get_active();
spot.satlog = satlog->get_active();
spot.Autogray = Autogray->get_active();
spot.sourceGray = sourceGray->getValue();
spot.sourceabs = sourceabs->getValue();
spot.targabs = targabs->getValue();
spot.targetGray = targetGray->getValue();
spot.catad = catad->getValue();
spot.saturl = saturl->getValue();
spot.chroml = chroml->getValue();
spot.lightl = lightl->getValue();
spot.lightq = lightq->getValue();
spot.contl = contl->getValue();
spot.contthres = contthres->getValue();
spot.contq = contq->getValue();
spot.colorfl = colorfl->getValue();
//spot.LcurveL = LshapeL->getCurve();
spot.detail = detail->getValue();
spot.baselog = baselog->getValue();
spot.sensilog = sensilog->getIntValue();
spot.strlog = strlog->getValue();
spot.anglog = anglog->getValue();
spot.featherlog = featherlog->getValue();
spot.CCmaskcurveL = CCmaskshapeL->getCurve();
spot.LLmaskcurveL = LLmaskshapeL->getCurve();
spot.HHmaskcurveL = HHmaskshapeL->getCurve();
spot.enaLMask = enaLMask->get_active();
spot.blendmaskL = blendmaskL->getValue();
spot.radmaskL = radmaskL->getValue();
spot.chromaskL = chromaskL->getValue();
spot.LmaskcurveL = LmaskshapeL->getCurve();
spot.recothresl = recothresl->getValue();
spot.lowthresl = lowthresl->getValue();
spot.higthresl = higthresl->getValue();
spot.decayl = decayl->getValue();
if (sursour->get_active_row_number() == 0) {
spot.sursour = "Average";
} else if (sursour->get_active_row_number() == 1) {
spot.sursour = "Dim";
} else if (sursour->get_active_row_number() == 2) {
spot.sursour = "Dark";
} else if (sursour->get_active_row_number() == 3) {
spot.sursour = "exDark";
}
if (surround->get_active_row_number() == 0) {
spot.surround = "Average";
} else if (surround->get_active_row_number() == 1) {
spot.surround = "Dim";
} else if (surround->get_active_row_number() == 2) {
spot.surround = "Dark";
} else if (surround->get_active_row_number() == 3) {
spot.surround = "ExtremelyDark";
}
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabLog::enaLMaskChanged()
{
if (enaLMask->get_active()) {
maskusablel->show();
maskunusablel->hide();
} else {
maskusablel->hide();
maskunusablel->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enaLMask->get_active()) {
listener->panelChanged(EvLocallabEnaLMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnaLMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
ciecam->hide();
ciecam->set_active(true);
sourceabs->hide();
targabs->hide();
saturl->hide();
chroml->hide();
contl->show();
contthres->hide();
lightl->hide();
lightq->hide();
contq->hide();
colorfl->hide();
catad->hide();
surrHBox->hide();
expL->hide();
surHBox->hide();
expmaskL->hide();
gradlogFrame->hide();
exprecovl->hide();
maskusablel->hide();
maskunusablel->hide();
decayl->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
ciecam->hide();
ciecam->set_active(true);
sourceabs->show();
targabs->show();
catad->show();
saturl->show();
chroml->show();
lightl->show();
lightq->show();
contl->show();
contthres->show();
contq->hide();
colorfl->show();
surrHBox->show();
expL->hide();
surHBox->hide();
expmaskL->show();
gradlogFrame->show();
if (enaLMask->get_active()) {
maskusablel->show();
maskunusablel->hide();
} else {
maskusablel->hide();
maskunusablel->show();
}
exprecovl->show();
decayl->hide();
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
ciecam->hide();
ciecam->set_active(true);
sourceabs->show();
targabs->show();
catad->show();
saturl->show();
chroml->show();
lightl->show();
lightq->show();
contl->show();
contthres->show();
contq->show();
colorfl->show();
surrHBox->show();
expL->show();
expmaskL->show();
gradlogFrame->show();
surHBox->show();
if (enaLMask->get_active()) {
maskusablel->show();
maskunusablel->hide();
} else {
maskusablel->hide();
maskunusablel->show();
}
exprecovl->show();
decayl->show();
}
}
void LocallabLog::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
ciecam->set_active(false);
contq->setValue(defSpot.contq);
contthres->setValue(defSpot.contthres);
colorfl->setValue(defSpot.colorfl);
lightl->setValue(defSpot.lightl);
lightq->setValue(defSpot.lightq);
sursour->set_active(0);
strlog->setValue(defSpot.strlog);
anglog->setValue(defSpot.anglog);
featherlog->setValue(defSpot.featherlog);
enaLMask->set_active(false);
showmaskLMethod->set_active(0);
recothresl->setValue(defSpot.recothresl);
lowthresl->setValue(defSpot.lowthresl);
higthresl->setValue(defSpot.higthresl);
decayl->setValue(defSpot.decayl);
// Enable all listeners
enableListener();
}
void LocallabLog::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
ciecam->set_active(true);
contq->setValue(defSpot.contq);
colorfl->setValue(defSpot.colorfl);
lightl->setValue(defSpot.lightl);
lightq->setValue(defSpot.lightq);
sursour->set_active(0);
// enaLMask->set_active(true);
decayl->setValue(defSpot.decayl);
// Enable all listeners
enableListener();
}
void LocallabLog::showmaskLMethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void LocallabLog::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == HHmaskshapeL) {
if (listener) {
listener->panelChanged(EvlocallabHHmaskshapeL,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmaskshapeL) {
if (listener) {
listener->panelChanged(EvlocallabLLmaskshapeL,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == CCmaskshapeL) {
if (listener) {
listener->panelChanged(EvlocallabCCmaskshapeL,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LmaskshapeL) {
if (listener) {
listener->panelChanged(EvlocallabLmaskshapeL,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
//if (ce == LshapeL) {
// if (listener) {
// listener->panelChanged(EvlocallabLshapeL,
// M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
// }
//}
}
}
void LocallabLog::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default value for adjuster widgets
repar->setDefault(defSpot.repar);
blackEv->setDefault(defSpot.blackEv);
whiteEv->setDefault(defSpot.whiteEv);
whiteslog->setDefault(defSpot.whiteslog);
blackslog->setDefault(defSpot.blackslog);
comprlog->setDefault(defSpot.comprlog);
strelog->setDefault(defSpot.strelog);
sourceGray->setDefault(defSpot.sourceGray);
sourceabs->setDefault(defSpot.sourceabs);
targabs->setDefault(defSpot.targabs);
targetGray->setDefault(defSpot.targetGray);
catad->setDefault(defSpot.catad);
saturl->setDefault(defSpot.saturl);
chroml->setDefault(defSpot.chroml);
lightl->setDefault(defSpot.lightl);
lightq->setDefault(defSpot.lightq);
contl->setDefault(defSpot.contl);
contthres->setDefault(defSpot.contthres);
contq->setDefault(defSpot.contq);
colorfl->setDefault(defSpot.colorfl);
detail->setDefault(defSpot.detail);
baselog->setDefault(defSpot.baselog);
sensilog->setDefault((double)defSpot.sensilog);
strlog->setDefault(defSpot.strlog);
anglog->setDefault(defSpot.anglog);
featherlog->setDefault(defSpot.featherlog);
blendmaskL->setDefault(defSpot.blendmaskL);
radmaskL->setDefault(defSpot.radmaskL);
chromaskL->setDefault(defSpot.chromaskL);
recothresl->setDefault((double)defSpot.recothresl);
lowthresl->setDefault((double)defSpot.lowthresl);
higthresl->setDefault((double)defSpot.higthresl);
decayl->setDefault((double)defSpot.decayl);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabLog::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->getEnabled()) {
if (a == repar) {
if (listener) {
listener->panelChanged(Evlocallabrepar,
repar->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blackEv) {
if (listener) {
listener->panelChanged(EvlocallabblackEv,
blackEv->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == whiteEv) {
if (listener) {
listener->panelChanged(EvlocallabwhiteEv,
whiteEv->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == whiteslog) {
if (listener) {
listener->panelChanged(Evlocallabwhiteslog,
whiteslog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blackslog) {
if (listener) {
listener->panelChanged(Evlocallabblackslog,
blackslog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == comprlog) {
if (listener) {
listener->panelChanged(Evlocallabcomprlog,
comprlog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == strelog) {
if (listener) {
listener->panelChanged(Evlocallabstrelog,
strelog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sourceGray) {
if (listener) {
listener->panelChanged(EvlocallabsourceGray,
sourceGray->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sourceabs) {
if (listener) {
listener->panelChanged(Evlocallabsourceabs,
sourceabs->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == targabs) {
if (listener) {
listener->panelChanged(Evlocallabtargabs,
targabs->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == targetGray) {
if (listener) {
listener->panelChanged(EvlocallabtargetGray,
targetGray->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == catad) {
if (listener) {
listener->panelChanged(Evlocallabcatad,
catad->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == saturl) {
if (listener) {
listener->panelChanged(Evlocallabsaturl,
saturl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chroml) {
if (listener) {
listener->panelChanged(Evlocallabchroml,
chroml->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lightl) {
if (listener) {
listener->panelChanged(Evlocallablightl,
lightl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lightq) {
if (listener) {
listener->panelChanged(Evlocallablightq,
lightq->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == contl) {
if (listener) {
listener->panelChanged(Evlocallabcontl,
contl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == contthres) {
if (listener) {
listener->panelChanged(Evlocallabcontthres,
contthres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == contq) {
if (listener) {
listener->panelChanged(Evlocallabcontq,
contq->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == colorfl) {
if (listener) {
listener->panelChanged(Evlocallabcolorfl,
colorfl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == detail) {
if (listener) {
listener->panelChanged(Evlocallabdetail,
detail->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == baselog) {
if (listener) {
listener->panelChanged(Evlocallabbaselog,
baselog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == recothresl) {
if (listener) {
listener->panelChanged(Evlocallabrecothresl,
recothresl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lowthresl) {
if (listener) {
listener->panelChanged(Evlocallablowthresl,
lowthresl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == higthresl) {
if (listener) {
listener->panelChanged(Evlocallabhigthresl,
higthresl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == decayl) {
if (listener) {
listener->panelChanged(Evlocallabdecayl,
decayl->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == sensilog) {
if (listener) {
listener->panelChanged(Evlocallabsensilog,
sensilog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == strlog) {
if (listener) {
listener->panelChanged(Evlocallabstrlog,
strlog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == anglog) {
if (listener) {
listener->panelChanged(Evlocallabanglog,
anglog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == featherlog) {
if (listener) {
listener->panelChanged(Evlocallabfeatherlog,
featherlog->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blendmaskL) {
if (listener) {
listener->panelChanged(EvLocallabblendmaskL,
blendmaskL->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radmaskL) {
if (listener) {
listener->panelChanged(EvLocallabradmaskL,
radmaskL->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromaskL) {
if (listener) {
listener->panelChanged(EvLocallabchromaskL,
chromaskL->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const float jz1)
{
if (autocompute->get_active()) {
idle_register.add(
[this, blackev, whiteev, sourceg, sourceab, targetg]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update adjuster values according to autocomputed ones
disableListener();
blackEv->setValue(blackev);
whiteEv->setValue(whiteev);
sourceGray->setValue(sourceg);
sourceabs->setValue(sourceab);
targetGray->setValue(targetg);
enableListener();
return false;
}
);
}
}
void LocallabLog::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenalog,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocenalog,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::sursourChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(Evlocallabsursour,
sursour->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabLog::surroundChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(Evlocallabsurround,
surround->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabLog::autocomputeToggled()
{
// Update Log Encoding GUI according to autocompute button state
updateLogGUI();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (autocompute->get_active()) {
listener->panelChanged(EvLocallabAuto,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabAuto,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::ciecamChanged()
{
/*
if(ciecam->get_active()){
sourceabs->set_sensitive(true);
targabs->set_sensitive(true);
catad->set_sensitive(true);
surrHBox->set_sensitive(true);
sourceabs->show();
targabs->show();
catad->show();
saturl->show();
lightl->show();
contl->show();
contq->show();
surrHBox->show();
} else {
sourceabs->hide();
targabs->hide();
saturl->hide();
contl->hide();
lightl->hide();
contq->hide();
catad->hide();
surrHBox->hide();
}
*/
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (ciecam->get_active()) {
listener->panelChanged(Evlocallabciecam,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabciecam,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::satlogChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (satlog->get_active()) {
listener->panelChanged(Evlocallabsatlog,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsatlog,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::fullimageChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (fullimage->get_active()) {
listener->panelChanged(Evlocallabfullimage,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabfullimage,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
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 mask background
CCmaskshapeL->updateLocallabBackground(normChromar);
LLmaskshapeL->updateLocallabBackground(normLumar);
HHmaskshapeL->updateLocallabBackground(normHuer);
LmaskshapeL->updateLocallabBackground(normLumar);
return false;
}
);
}
void LocallabLog::AutograyChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (Autogray->get_active()) {
listener->panelChanged(EvlocallabAutogray,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvlocallabAutogray,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabLog::updateLogGUI2()
{
/*
if(ciecam->get_active()){
sourceabs->show();
targabs->show();
catad->show();
saturl->show();
contl->show();
lightl->show();
contq->show();
surrHBox->show();
} else {
sourceabs->hide();
targabs->hide();
catad->hide();
saturl->hide();
lightl->hide();
contl->hide();
contq->hide();
surrHBox->hide();
}
*/
}
void LocallabLog::updateLogGUI()
{
const int mode = complexity->get_active_row_number();
if (autocompute->get_active()) {
blackEv->set_sensitive(false);
whiteEv->set_sensitive(false);
sourceGray->set_sensitive(false);
blackslog->set_sensitive(true);
whiteslog->set_sensitive(true);
if (mode == Expert || mode == Normal) {
sourceabs->set_sensitive(false);
} else {
sourceabs->hide();
}
} else {
blackEv->set_sensitive(true);
whiteEv->set_sensitive(true);
sourceGray->set_sensitive(true);
blackslog->set_sensitive(false);
whiteslog->set_sensitive(false);
if (mode == Expert || mode == Normal) {
sourceabs->set_sensitive(true);
} else {
sourceabs->hide();
}
}
if (mode == Expert || mode == Normal) { // Keep widget hidden in Simple mode
exprecovl->show();
}
}
/* ==== LocallabMask ==== */
LocallabMask::LocallabMask():
LocallabTool(this, M("TP_LOCALLAB_MASKCOM_TOOLNAME"), M("TP_LOCALLAB_MASKCOM"), false),
// Common mask specific widgets
sensimask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
previewmas(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))),
blendmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMASK"), -100., 100., 0.1, -10.))),
blendmaskab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKMASKAB"), -100., 100., 0.1, -10.))),
softradiusmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 1.))),
showmask_Method(Gtk::manage(new MyComboBoxText())),
enamask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
// mask_CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKCOL"))),
mask_CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmask_shape(static_cast<FlatCurveEditor*>(mask_CurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmask_shape(static_cast<FlatCurveEditor*>(mask_CurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmask_shape(static_cast<FlatCurveEditor *>(mask_CurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
struFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))),
strumaskmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))),
toolmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))),
blurFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABBLURM")))),
fftmask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTCOL_MASK")))),
contmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTCOL"), 0., 200., 0.5, 0.))),
blurmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCOL"), 0.2, 100., 0.5, 0.2))),
toolmaskFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK")))),
radmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
slopmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
shadmask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))),
mask_HCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASKH"))),
HHhmask_shape(static_cast<FlatCurveEditor *>(mask_HCurveEditorG->addCurve(CT_Flat, "h(h)", nullptr, false, true))),
mask2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmask_shape(static_cast<DiagonalCurveEditor*>(mask2CurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
mask2CurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))),
LLmask_shapewav(static_cast<FlatCurveEditor*>(mask2CurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
csThresholdmask(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false))),
gradFramemask(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADFRA")))),
str_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))),
feather_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FEATVALUE"), 10., 100., 0.1, 25.))),
ang_mask(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.)))
{
auto m = ProcEventMapper::getInstance();
Evlocallabpreviewmas = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWMAS");
Evlocallabfeather_mask = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_FEATHERMAS");
set_orientation(Gtk::ORIENTATION_VERTICAL);
const LocallabParams::LocallabSpot defSpot;
// Parameter Mask common specific widgets
sensimask->setAdjusterListener(this);
blendmask->setLogScale(10, 0);
blendmask->setAdjusterListener(this);
blendmaskab->setLogScale(10, 0);
blendmaskab->setAdjusterListener(this);
softradiusmask->setAdjusterListener(this);
previewmas->set_active(false);
previewmasConn = previewmas->signal_clicked().connect(
sigc::mem_fun(
*this, &LocallabMask::previewmasChanged));
showmask_Method->append(M("TP_LOCALLAB_SHOWMNONE"));
showmask_Method->append(M("TP_LOCALLAB_SHOWMODIFMASK"));
showmask_Method->append(M("TP_LOCALLAB_SHOWMASK"));
showmask_Method->append(M("TP_LOCALLAB_SHOWREF"));
showmask_Method->set_active(0);
showmask_Method->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmask_MethodConn = showmask_Method->signal_changed().connect(sigc::mem_fun(*this, &LocallabMask::showmask_MethodChanged));
enamaskConn = enamask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::enamaskChanged));
mask_CurveEditorG->setCurveListener(this);
CCmask_shape->setIdentityValue(0.);
CCmask_shape->setResetCurve(FlatCurveType(defSpot.CCmask_curve.at(0)), defSpot.CCmask_curve);
CCmask_shape->setBottomBarColorProvider(this, 1);
LLmask_shape->setIdentityValue(0.);
LLmask_shape->setResetCurve(FlatCurveType(defSpot.LLmask_curve.at(0)), defSpot.LLmask_curve);
LLmask_shape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmask_shape->setIdentityValue(0.);
HHmask_shape->setResetCurve(FlatCurveType(defSpot.HHmask_curve.at(0)), defSpot.HHmask_curve);
HHmask_shape->setCurveColorProvider(this, 2);
HHmask_shape->setBottomBarColorProvider(this, 2);
mask_CurveEditorG->curveListComplete();
struFrame->set_label_align(0.025, 0.5);
strumaskmask->setAdjusterListener(this);
toolmaskConn = toolmask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::toolmaskChanged));
blurFrame->set_label_align(0.025, 0.5);
fftmaskConn = fftmask->signal_toggled().connect(sigc::mem_fun(*this, &LocallabMask::fftmaskChanged));
contmask->setAdjusterListener(this);
blurmask->setAdjusterListener(this);
toolmaskFrame->set_label_align(0.025, 0.5);
radmask->setAdjusterListener(this);
lapmask->setAdjusterListener(this);
chromask->setAdjusterListener(this);
gammask->setAdjusterListener(this);
slopmask->setAdjusterListener(this);
shadmask->setAdjusterListener(this);
mask_HCurveEditorG->setCurveListener(this);
HHhmask_shape->setIdentityValue(0.);
HHhmask_shape->setResetCurve(FlatCurveType(defSpot.HHhmask_curve.at(0)), defSpot.HHhmask_curve);
HHhmask_shape->setCurveColorProvider(this, 2);
HHhmask_shape->setBottomBarColorProvider(this, 2);
mask_HCurveEditorG->curveListComplete();
mask2CurveEditorG->setCurveListener(this);
Lmask_shape->setResetCurve(DiagonalCurveType(defSpot.Lmask_curve.at(0)), defSpot.Lmask_curve);
Lmask_shape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
Lmask_shape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2CurveEditorG->curveListComplete();
mask2CurveEditorGwav->setCurveListener(this);
LLmask_shapewav->setIdentityValue(0.);
LLmask_shapewav->setResetCurve(FlatCurveType(defSpot.LLmask_curvewav.at(0)), defSpot.LLmask_curvewav);
// LLmask_shapewav->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2CurveEditorGwav->curveListComplete();
csThresholdmask->setAdjusterListener(this);
gradFramemask->set_label_align(0.025, 0.5);
str_mask->setAdjusterListener(this);
ang_mask->setAdjusterListener(this);
ang_mask->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP"));
feather_mask->setAdjusterListener(this);
// Add Common mask specific widgets to GUI
pack_start(*sensimask);
pack_start(*previewmas);
pack_start(*blendmask);
pack_start(*blendmaskab);
pack_start(*softradiusmask);
pack_start(*showmask_Method);
pack_start(*enamask);
pack_start(*mask_CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
ToolParamBlock* const strumBox = Gtk::manage(new ToolParamBlock());
strumBox->pack_start(*strumaskmask);
strumBox->pack_start(*toolmask);
struFrame->add(*strumBox);
pack_start(*struFrame);
ToolParamBlock* const blurmBox = Gtk::manage(new ToolParamBlock());
blurmBox->pack_start(*fftmask, Gtk::PACK_SHRINK, 0);
blurmBox->pack_start(*contmask);
blurmBox->pack_start(*blurmask);
blurFrame->add(*blurmBox);
pack_start(*blurFrame);
ToolParamBlock* const toolmaskBox = Gtk::manage(new ToolParamBlock());
toolmaskBox->pack_start(*radmask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*lapmask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*chromask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*gammask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*slopmask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*shadmask, Gtk::PACK_SHRINK, 0);
toolmaskBox->pack_start(*mask_HCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
toolmaskBox->pack_start(*mask2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
toolmaskBox->pack_start(*mask2CurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
toolmaskBox->pack_start(*csThresholdmask, Gtk::PACK_SHRINK, 0);
ToolParamBlock* const gradmaskBox = Gtk::manage(new ToolParamBlock());
gradmaskBox->pack_start(*str_mask);
gradmaskBox->pack_start(*ang_mask);
gradmaskBox->pack_start(*feather_mask);
gradFramemask->add(*gradmaskBox);
toolmaskBox->pack_start(*gradFramemask, Gtk::PACK_SHRINK, 0);
toolmaskFrame->add(*toolmaskBox);
pack_start(*toolmaskFrame);
}
LocallabMask::~LocallabMask()
{
delete mask_CurveEditorG;
delete mask_HCurveEditorG;
delete mask2CurveEditorG;
delete mask2CurveEditorGwav;
}
bool LocallabMask::isMaskViewActive()
{
return ((showmask_Method->get_active_row_number() != 0));
}
void LocallabMask::resetMaskView()
{
showmask_MethodConn.block(true);
showmask_Method->set_active(0);
showmask_MethodConn.block(false);
}
void LocallabMask::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
maskMask = showmask_Method->get_active_row_number();
}
Gtk::ToggleButton *LocallabMask::getPreviewDeltaEButton() const
{
return previewmas;
}
sigc::connection *LocallabMask::getPreviewDeltaEButtonConnection()
{
return &previewmasConn;
}
//new function Global
void LocallabMask::updateguimask(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensimask->hide();
previewmas->hide();
previewmas->set_active(false);
blendmask->hide();
blendmaskab->hide();
softradiusmask->hide();
showmask_Method->hide();
enamask->hide();
enamask->set_active(false);
mask_CurveEditorG->hide();
struFrame->hide();
blurFrame->hide();
toolmaskFrame->hide();
} else {
sensimask->show();
previewmas->show();
blendmask->show();
blendmaskab->show();
softradiusmask->show();
showmask_Method->show();
enamask->show();
mask_CurveEditorG->show();
struFrame->show();
blurFrame->show();
toolmaskFrame->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
void LocallabMask::previewmasChanged()
{
if(previewmas->get_active()) {
showmask_Method->set_active(3);
} else {
showmask_Method->set_active(0);
}
if (isLocActivated) {
if (listener) {
listener->panelChanged(Evlocallabpreviewmas,"");
}
}
}
void LocallabMask::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
exp->set_tooltip_text(M("TP_LOCALLAB_MASKCOM_TOOLTIP"));
sensimask->set_tooltip_text(M("TP_LOCALLAB_SENSIMASK_TOOLTIP"));
blendmask->set_tooltip_text(M("TP_LOCALLAB_BLENDMASKMASK_TOOLTIP"));
blendmaskab->set_tooltip_text(M("TP_LOCALLAB_BLENDMASKMASK_TOOLTIP"));
CCmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP"));
LLmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP"));
HHmask_shape->setTooltip(M("TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP"));
struFrame->set_tooltip_text(M("TP_LOCALLAB_STRUMASK_TOOLTIP"));
radmask->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
mask_HCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_HHMASK_TOOLTIP"));
mask2CurveEditorG->set_tooltip_text(M("TP_LOCALLAB_WAVMASK_TOOLTIP"));
Lmask_shape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
mask2CurveEditorGwav->set_tooltip_text(M("TP_LOCALLAB_WAVMASK_TOOLTIP"));
LLmask_shapewav->setTooltip(M("TP_LOCALLAB_LMASK_LEVEL_TOOLTIP"));
mask_CurveEditorG->set_tooltip_markup(M("TP_LOCALLAB_MASKCURVE_TOOLTIP"));
strumaskmask->set_tooltip_text(M("TP_LOCALLAB_STRUSTRMASK_TOOLTIP"));
blurFrame->set_tooltip_text(M("TP_LOCALLAB_BLURMASK_TOOLTIP"));
toolmask->set_tooltip_text(M("TP_LOCALLAB_TOOLMASK_TOOLTIP"));
toolmaskFrame->set_tooltip_text(M("TP_LOCALLAB_TOOLCOLFRMASK_TOOLTIP"));
fftmask->set_tooltip_text(M("TP_LOCALLAB_FFTMASK_TOOLTIP"));
gammask->set_tooltip_text(M("TP_LOCALLAB_GAMMASK_TOOLTIP"));
chromask->set_tooltip_text(M("TP_LOCALLAB_CHROMASK_TOOLTIP"));
slopmask->set_tooltip_text(M("TP_LOCALLAB_SLOMASK_TOOLTIP"));
shadmask->set_tooltip_text(M("TP_LOCALLAB_SHADMASK_TOOLTIP"));
contmask->set_tooltip_text(M("TP_LOCALLAB_CONTTHMASK_TOOLTIP"));
blurmask->set_tooltip_text(M("TP_LOCALLAB_BLURRMASK_TOOLTIP"));
lapmask->set_tooltip_text(M("TP_LOCALLAB_LAPRAD1_TOOLTIP"));
csThresholdmask->set_tooltip_text(M("TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP"));
} else {
exp->set_tooltip_text("");
sensimask->set_tooltip_text("");
blendmask->set_tooltip_text("");
blendmaskab->set_tooltip_text("");
CCmask_shape->setTooltip("");
LLmask_shape->setTooltip("");
HHmask_shape->setTooltip("");
struFrame->set_tooltip_text("");
radmask->set_tooltip_text("");
mask_HCurveEditorG->set_tooltip_text("");
mask2CurveEditorG->set_tooltip_text("");
Lmask_shape->setTooltip("");
mask2CurveEditorGwav->set_tooltip_text("");
LLmask_shapewav->setTooltip("");
mask_CurveEditorG->set_tooltip_markup("");
strumaskmask->set_tooltip_text("");
blurFrame->set_tooltip_text("");
toolmask->set_tooltip_text("");
toolmaskFrame->set_tooltip_text("");
fftmask->set_tooltip_text("");
gammask->set_tooltip_text("");
chromask->set_tooltip_text("");
slopmask->set_tooltip_text("");
shadmask->set_tooltip_text("");
contmask->set_tooltip_text("");
blurmask->set_tooltip_text("");
lapmask->set_tooltip_text("");
csThresholdmask->set_tooltip_text("");
}
}
void LocallabMask::disableListener()
{
LocallabTool::disableListener();
showmask_MethodConn.block(true);
enamaskConn.block(true);
toolmaskConn.block(true);
fftmaskConn.block(true);
}
void LocallabMask::enableListener()
{
LocallabTool::enableListener();
showmask_MethodConn.block(false);
enamaskConn.block(false);
toolmaskConn.block(false);
fftmaskConn.block(false);
}
void LocallabMask::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
// Disable all listeners
disableListener();
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visimask);
exp->setEnabled(spot.expmask);
complexity->set_active(spot.complexmask);
sensimask->setValue((double)spot.sensimask);
blendmask->setValue(spot.blendmask);
blendmaskab->setValue(spot.blendmaskab);
softradiusmask->setValue(spot.softradiusmask);
enamask->set_active(spot.enamask);
CCmask_shape->setCurve(spot.CCmask_curve);
LLmask_shape->setCurve(spot.LLmask_curve);
HHmask_shape->setCurve(spot.HHmask_curve);
strumaskmask->setValue(spot.strumaskmask);
toolmask->set_active(spot.toolmask);
fftmask->set_active(spot.fftmask);
contmask->setValue(spot.contmask);
// Update Common mask GUI according to fftmask button state
// Note: Contrary to the others, shall be called before setting blurmask value
updateMaskGUI();
blurmask->setValue(spot.blurmask);
radmask->setValue(spot.radmask);
lapmask->setValue(spot.lapmask);
chromask->setValue(spot.chromask);
gammask->setValue(spot.gammask);
slopmask->setValue(spot.slopmask);
shadmask->setValue(spot.shadmask);
HHhmask_shape->setCurve(spot.HHhmask_curve);
Lmask_shape->setCurve(spot.Lmask_curve);
LLmask_shapewav->setCurve(spot.LLmask_curvewav);
csThresholdmask->setValue<int>(spot.csthresholdmask);
str_mask->setValue((double)spot.str_mask);
ang_mask->setValue((double)spot.ang_mask);
feather_mask->setValue((double)spot.feather_mask);
}
// Enable all listeners
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabMask::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.expmask = exp->getEnabled();
spot.visimask = exp->get_visible();
spot.complexmask = complexity->get_active_row_number();
spot.sensimask = sensimask->getIntValue();
spot.blendmask = blendmask->getValue();
spot.blendmaskab = blendmaskab->getValue();
spot.softradiusmask = softradiusmask->getValue();
spot.enamask = enamask->get_active();
spot.CCmask_curve = CCmask_shape->getCurve();
spot.LLmask_curve = LLmask_shape->getCurve();
spot.HHmask_curve = HHmask_shape->getCurve();
spot.strumaskmask = strumaskmask->getValue();
spot.toolmask = toolmask->get_active();
spot.fftmask = fftmask->get_active();
spot.contmask = contmask->getValue();
spot.blurmask = blurmask->getValue();
spot.radmask = radmask->getValue();
spot.lapmask = lapmask->getValue();
spot.chromask = chromask->getValue();
spot.gammask = gammask->getValue();
spot.slopmask = slopmask->getValue();
spot.shadmask = shadmask->getValue();
spot.HHhmask_curve = HHhmask_shape->getCurve();
spot.Lmask_curve = Lmask_shape->getCurve();
spot.LLmask_curvewav = LLmask_shapewav->getCurve();
spot.csthresholdmask = csThresholdmask->getValue<int>();
spot.str_mask = str_mask->getIntValue();
spot.ang_mask = ang_mask->getIntValue();
spot.feather_mask = feather_mask->getIntValue();
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabMask::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
// Set default value for adjuster widgets
sensimask->setDefault((double)defSpot.sensimask);
blendmask->setDefault(defSpot.blendmask);
blendmaskab->setDefault(defSpot.blendmaskab);
softradiusmask->setDefault(defSpot.softradiusmask);
strumaskmask->setDefault(defSpot.strumaskmask);
contmask->setDefault(defSpot.contmask);
blurmask->setDefault(defSpot.blurmask);
radmask->setDefault(defSpot.radmask);
lapmask->setDefault(defSpot.lapmask);
chromask->setDefault(defSpot.chromask);
gammask->setDefault(defSpot.lapmask);
slopmask->setDefault(defSpot.slopmask);
shadmask->setDefault(defSpot.shadmask);
csThresholdmask->setDefault<int>(defSpot.csthresholdmask);
str_mask->setDefault((double)defSpot.str_mask);
ang_mask->setDefault((double)defSpot.ang_mask);
feather_mask->setDefault((double)defSpot.feather_mask);
}
// Note: No need to manage pedited as batch mode is deactivated for Locallab
}
void LocallabMask::adjusterChanged(Adjuster* a, double newval)
{
if (isLocActivated && exp->getEnabled()) {
if (a == sensimask) {
if (listener) {
listener->panelChanged(Evlocallabsensimask,
sensimask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blendmask) {
if (listener) {
listener->panelChanged(Evlocallabblendmask,
blendmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blendmaskab) {
if (listener) {
listener->panelChanged(Evlocallabblendmaskab,
blendmaskab->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == softradiusmask) {
if (listener) {
listener->panelChanged(Evlocallabsoftradiusmask,
softradiusmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == strumaskmask) {
if (listener) {
listener->panelChanged(Evlocallabstrumaskmask,
strumaskmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == contmask) {
if (listener) {
listener->panelChanged(Evlocallabcontmask,
contmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blurmask) {
if (listener) {
listener->panelChanged(Evlocallabblurmask,
blurmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radmask) {
if (listener) {
listener->panelChanged(Evlocallabradmask,
radmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lapmask) {
if (listener) {
listener->panelChanged(Evlocallablapmask,
lapmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromask) {
if (listener) {
listener->panelChanged(Evlocallabchromask,
chromask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == gammask) {
if (listener) {
listener->panelChanged(Evlocallabgammask,
gammask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == slopmask) {
if (listener) {
listener->panelChanged(Evlocallabslopmask,
slopmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == shadmask) {
if (listener) {
listener->panelChanged(Evlocallabshadmask,
shadmask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == str_mask) {
if (listener) {
listener->panelChanged(Evlocallabstr_mask,
str_mask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == ang_mask) {
if (listener) {
listener->panelChanged(Evlocallabang_mask,
ang_mask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == feather_mask) {
if (listener) {
listener->panelChanged(Evlocallabfeather_mask,
feather_mask->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR)
{
if (isLocActivated && exp->getEnabled()) {
if (a == csThresholdmask) {
if (listener) {
listener->panelChanged(EvlocallabcsThresholdmask,
csThresholdmask->getHistoryString() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
if (ce == CCmask_shape) {
if (listener) {
listener->panelChanged(EvlocallabCCmask_shape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmask_shape) {
if (listener) {
listener->panelChanged(EvlocallabLLmask_shape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHmask_shape) {
if (listener) {
listener->panelChanged(EvlocallabHHmask_shape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHhmask_shape) {
if (listener) {
listener->panelChanged(EvlocallabHHhmask_shape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == Lmask_shape) {
if (listener) {
listener->panelChanged(EvlocallabLmask_shape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmask_shapewav) {
if (listener) {
listener->panelChanged(EvlocallabLLmask_shapewav,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::complexityModeChanged()
{
if (complexity->get_active_row_number() == Simple) { // New selected mode is Simple one
// Convert tool widget parameters
convertParamToNormal(); // From Expert mode to Normal mode
convertParamToSimple(); // From Normal mode to Simple mode
// Update GUI based on new mode
updateGUIToMode(Simple);
if (listener && isLocActivated) {
listener->panelChanged(EvlocallabcomplexityWithRefresh,
M("TP_LOCALLAB_MODE_SIMPLE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
} else if (complexity->get_active_row_number() == Normal) { // New selected mode is Normal one
// Convert tool widget parameters
convertParamToNormal();
// Update GUI based on new mode
updateGUIToMode(Normal);
if (listener && isLocActivated) {
listener->panelChanged(EvlocallabcomplexityWithRefresh,
M("TP_LOCALLAB_MODE_NORMAL") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
} else if (complexity->get_active_row_number() == Expert) { // New selected mode is Expert one
// Update GUI based on new mode
updateGUIToMode(Expert);
if (listener && isLocActivated) {
listener->panelChanged(EvlocallabcomplexityWithRefresh,
M("TP_LOCALLAB_MODE_EXPERT") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void LocallabMask::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocena_mask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocena_mask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden GUI widgets in Normal mode to default spot values
softradiusmask->setValue(defSpot.softradiusmask);
strumaskmask->setValue(defSpot.strumaskmask);
toolmask->set_active(defSpot.toolmask);
fftmask->set_active(defSpot.fftmask);
contmask->setValue(defSpot.contmask);
blurmask->setValue(defSpot.blurmask);
lapmask->setValue(defSpot.lapmask);
gammask->setValue(defSpot.gammask);
slopmask->setValue(defSpot.slopmask);
shadmask->setValue(defSpot.shadmask);
HHhmask_shape->setCurve(defSpot.HHhmask_curve);
LLmask_shapewav->setCurve(defSpot.LLmask_curvewav);
csThresholdmask->setValue<int>(defSpot.csthresholdmask);
str_mask->setValue((double)defSpot.str_mask);
ang_mask->setValue((double)defSpot.ang_mask);
feather_mask->setValue((double)defSpot.feather_mask);
// Enable all listeners
enableListener();
// Update GUI based on converted widget parameters:
// - Update Common mask GUI according to fftmask button state
updateMaskGUI();
}
void LocallabMask::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
// Set hidden specific GUI widgets in Simple mode to default spot values
gammask->setValue(defSpot.gammask);
slopmask->setValue(defSpot.slopmask);
//Lmask_shape->setCurve(defSpot.Lmask_curve);
// Enable all listeners
enableListener();
}
void LocallabMask::updateGUIToMode(const modeType new_type)
{
switch (new_type) {
case Simple:
// Expert and Normal mode widgets are hidden in Simple mode
softradiusmask->show();
toolmaskFrame->show();
struFrame->hide();
blurFrame->hide();
gammask->hide();
slopmask->hide();
shadmask->hide();
lapmask->hide();
mask_HCurveEditorG->hide();
mask2CurveEditorGwav->hide();
csThresholdmask->hide();
gradFramemask->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
softradiusmask->show();
struFrame->hide();
blurFrame->hide();
lapmask->hide();
gammask->show();
slopmask->show();
shadmask->hide();
mask_HCurveEditorG->hide();
mask2CurveEditorGwav->hide();
csThresholdmask->hide();
gradFramemask->hide();
// Specific Simple mode widgets are shown in Normal mode
toolmaskFrame->show();
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
softradiusmask->show();
struFrame->show();
blurFrame->show();
toolmaskFrame->show();
lapmask->show();
gammask->show();
slopmask->show();
shadmask->show();
mask_HCurveEditorG->show();
mask2CurveEditorGwav->show();
csThresholdmask->show();
gradFramemask->show();
}
}
void LocallabMask::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
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 mask background
CCmask_shape->updateLocallabBackground(normChromar);
LLmask_shape->updateLocallabBackground(normLumar);
HHmask_shape->updateLocallabBackground(normHuer);
HHhmask_shape->updateLocallabBackground(normHuer);
Lmask_shape->updateLocallabBackground(normLumar);
return false;
}
);
}
void LocallabMask::showmask_MethodChanged()
{
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void LocallabMask::enamaskChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enamask->get_active()) {
listener->panelChanged(EvLocallabEnaMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnaMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::toolmaskChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (toolmask->get_active()) {
listener->panelChanged(EvLocallabtoolmask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabtoolmask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::fftmaskChanged()
{
// Update Common mask GUI according to fftmask button state
updateMaskGUI();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (fftmask->get_active()) {
listener->panelChanged(EvLocallabfftmask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabfftmask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void LocallabMask::updateMaskGUI()
{
const double temp = blurmask->getValue();
if (fftmask->get_active()) {
blurmask->setLimits(0.2, 1000., 0.5, 0.2);
} else {
blurmask->setLimits(0.2, 100., 0.5, 0.2);
}
blurmask->setValue(temp);
}
/*==== Locallabcie ====*/
Locallabcie::Locallabcie():
LocallabTool(this, M("TP_LOCALLAB_CIE_TOOLNAME"), M("TP_LOCALLAB_CIE"), false),
// ciecam specific widgets
sensicie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 60))),
previewcie(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_PREVIEW")))),
reparcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGREPART"), 1.0, 100.0, 1., 100.0))),
jabcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JAB")))),
modecam(Gtk::manage(new MyComboBoxText())),
modeQJ(Gtk::manage(new MyComboBoxText())),
modecie(Gtk::manage(new MyComboBoxText())),
jzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZFRA")))),
modeHBoxcam(Gtk::manage(new Gtk::Box())),
modeHBoxQJ(Gtk::manage(new Gtk::Box())),
modeHBoxcie(Gtk::manage(new Gtk::Box())),
cieFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGFRA")))),
expcamscene(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
Autograycie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AUTOGRAYCIE")))),
sourceGraycie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_GRAY"), 1.0, 100.0, 0.1, 18.0))),
sourceabscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 2000.0))),
sursourcie(Gtk::manage(new MyComboBoxText())),
surHBoxcie(Gtk::manage(new Gtk::Box())),
cie1Frame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOG1FRA")))),
cie1lightFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIELIGHTFRA")))),
cie1contFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIECONTFRA")))),
cie1colorFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIECOLORFRA")))),
czlightFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIELIGHTCONTFRA")))),
czcolorFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIECOLORFRA")))),
PQFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZPQFRA")))),
qtoj(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZQTOJ")))),
lightlcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGLIGHTL"), -100., 100., 0.01, 0.))),
lightjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZLIGHT"), -100., 100., 0.01, 0.))),
contjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZCONT"), -100., 100., 0.5, 0.))),
adapjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZADAP"), 1., 10., 0.05, 4.))),
jz100(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZ100"), 0.10, 0.90, 0.01, 0.25))),
pqremap(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZPQREMAP"), 100., 10000., 0.1, 120.))),
pqremapcam16(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CAM16PQREMAP"), 100., 10000., 1., 100.))),
expjz(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
jzshFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZSHFRA")))),
hljzcie(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), 0., 100., 1., 0.))),
hlthjzcie(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_HLTONALW"), 20., 100., 1., 70.))),
shjzcie(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_SHADOWS"), 0., 100., 1., 0.))),
shthjzcie(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_SHTONALW"), 20., 100., 1., 40.))),
radjzcie(Gtk::manage(new Adjuster(M("TP_SHADOWSHLIGHTS_RADIUS"), 0., 100., 1., 40.))),
expwavjz(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_JZWAVEXP")))),
contFramejz(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CONTWFRA")))),
sigmalcjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMAWAV"), 0.2, 2.5, 0.01, 1.))),
LocalcurveEditorwavjz(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAV"))),
wavshapejz(static_cast<FlatCurveEditor*>(LocalcurveEditorwavjz->addCurve(CT_Flat, "", nullptr, false, false))),
csThresholdjz(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 7, 4, 0, false))),
clariFramejz(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))),
clarilresjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZCLARILRES"), -20., 100., 0.5, 0.))),
claricresjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZCLARICRES"), -20., 100., 0.5, 0.))),
clarisoftjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOFTRADIUSCOL"), 0.0, 100.0, 0.5, 0.))),
expcam16(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
expcamviewing(Gtk::manage(new MyExpander(false, Gtk::manage(new Gtk::Box())))),
lightqcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGLIGHTQ"), -100., 100., 0.05, 0.))),
contlcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTL"), -100., 100., 0.5, 0.))),
contqcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONQL"), -100., 100., 0.5, 0.))),
lightsigqcie(Gtk::manage(new Adjuster(M(""), -100., 100., 0.5, 0.))),
contsigqcie(Gtk::manage(new Adjuster(M(""), -100., 100., 0.5, 0.))),
contthrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTHRES"), -1., 1., 0.01, 0.))),
logjzFrame(Gtk::manage(new Gtk::Frame())),
logjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZLOG")))),
blackEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.00, 0.00, 0.01, -5.00))),
whiteEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0.00, 32.000, 0.01, 10.00))),
targetjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZTARGET_EV"), 4., 80.0, 0.1, 18.0))),
bevwevFrame(Gtk::manage(new Gtk::Frame())),
sigybjz12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE")))),
sigBox12(Gtk::manage(new ToolParamBlock())),
sigmoidFrame12(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))),
sigq12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA")))),
slopesmoq(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTH"), 0.6, 2.0, 0.01, 1.))),
sigmoidldacie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.5, 3.5, 0.01, 1.8))),
sigmoidthcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), -1., 1., 0.01, 0., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
sigmoidblcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 50., 1000., 0.5, 100.))),
autocomprHBox(Gtk::manage(new Gtk::Box())),
comprcieauto(Gtk::manage(new Gtk::ToggleButton(M("TP_LOCALLAB_SIGMOIDLOGAUTO")))),
normcie12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE")))),
normcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDNORMCIE11")))),
modeHBoxbwev12(Gtk::manage(new Gtk::Box())),
bwevMethod12(Gtk::manage(new MyComboBoxText())),
modeHBoxbwev(Gtk::manage(new Gtk::Box())),
bwevMethod(Gtk::manage(new MyComboBoxText())),
sigBox(Gtk::manage(new ToolParamBlock())),
sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))),
sigq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA11")))),
sigmoidnormFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGNORM")))),
sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.0, 1., 0.01, 0.5))),
sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH11"), 0.1, 4., 0.01, 1.2, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
sigmoidsenscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDSENSI"), 0.1, 1.5, 0.01, 0.9))),
sigmoidblcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL11"), 0.05, 1., 0.01, 0.75))),
logcieFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGCIE")))),
logcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGCIE")))),
comprBox(Gtk::manage(new ToolParamBlock())),
comprcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COMPRCIE"), 0., 1., 0.01, 0.4))),
strcielog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENGTHCIELOG"), 0., 100., 0.5, 80.))),
satcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SATCIE")))),
logcieq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGCIEQ")))),
comprcieth(Gtk::manage(new Adjuster(M("TP_LOCALLAB_COMPRCIETH"), 0., 25., 0.01, 6.))),
expprecam(Gtk::manage(new MyExpander(true, Gtk::manage(new Gtk::Box())))),
gamjcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGGAMJCIE"), 0.7, 10., 0.01, 2.4))),
slopjcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGSLOPJCIE"), 0., 500., 0.01, 12.923))),
midtcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MIDTCIE"), -100, 100, 1, 0))),
smoothcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_SCA")))),
smoothcielnk(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_LNK")))),
smoothcietrc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_TRC")))),
smoothcietrcrel(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_TRCREL")))),
smoothcieyb(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_YB")))),
smoothcielum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_LUM")))),
smoothciehigh(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SMOOTHCIE_HIGH")))),
smoothcieth(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHCIETH"), 0.5, 1.5, 0.01, 1.0))),
ciesmoothBox(Gtk::manage(new ToolParamBlock())),
smoothBox(Gtk::manage(new Gtk::Box())),
smoothciemet(Gtk::manage(new MyComboBoxText())),
slopesmo(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTH"), 0.01, 1.6, 0.01, 1.))),
slopesmor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTHR"), 0.01, 1.6, 0.01, 1.))),
slopesmog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTHG"), 0.01, 1.6, 0.01, 1.))),
slopesmob(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTHB"), 0.01, 1.6, 0.01, 1.))),
kslopesmor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTRCR"), 0.75, 1.5, 0.01, 1.))),
kslopesmog(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTRCG"), 0.75, 1.5, 0.01, 1.))),
kslopesmob(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOPESMOOTRCB"), 0.75, 1.5, 0.01, 1.))),
contsig(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHCONTSIG"), 0.5, 3.5, 0.01, 1.15))),
skewsig(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHSKEWSIG"), -1., 1., 0.01, 0., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
whitsig(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SMOOTHWHITSIG"), 50, 1000., 0.5, 100.))),
whitescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGWHITESCIE"), -100, 100, 1, 20))),
blackscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGBLACKSSCIE"), -100, 100, 1, 0))),
willBox(Gtk::manage(new Gtk::Box())),
illMethod(Gtk::manage(new MyComboBoxText())),
wprimBox(Gtk::manage(new Gtk::Box())),
primMethod(Gtk::manage(new MyComboBoxText())),
primCoordGridl(Gtk::manage(new Gtk::Grid())),
trcFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TRCFRAME")))),
smoothFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CIE_SMOOTHFRAME12")))),
primillFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_PRIMILLFRAME")))),
redBox(Gtk::manage(new ToolParamBlock())),
redxl(Gtk::manage(new Adjuster(M("TC_PRIM_REDX"), 0.41, 1.0, 0.0001, 0.7347))),
redyl(Gtk::manage(new Adjuster(M("TC_PRIM_REDY"), 0.0, 0.70, 0.0001, 0.2653))),
grexl(Gtk::manage(new Adjuster(M("TC_PRIM_GREX"), -0.1, 0.4, 0.0001, 0.1596))),
greyl(Gtk::manage(new Adjuster(M("TC_PRIM_GREY"), 0.50, 1.0, 0.0001, 0.8404))),
bluxl(Gtk::manage(new Adjuster(M("TC_PRIM_BLUX"), -0.1, 0.4, 0.0001, 0.0366))),
bluyl(Gtk::manage(new Adjuster(M("TC_PRIM_BLUY"), -0.1, 0.49, 0.0001, 0.0001))),
refi(Gtk::manage(new Adjuster(M("TC_PRIM_REFI"), -0.5, 1., 0.0001, 0.))),
gridFramecie(Gtk::manage(new Gtk::Frame(M("TP_ICM_WORKING_CIEDIAG")))),
labgridcie(Gtk::manage(new LabGrid(EvlocallabGridciexy, M("TP_ICM_LABGRID_CIEXY"), true, true, false, false))),
colorFramecie(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_COLORFRAME")))),
catBox(Gtk::manage(new Gtk::Box())),
catMethod(Gtk::manage(new MyComboBoxText())),
gamutcieBox(Gtk::manage(new Gtk::Box())),
gamutcie(Gtk::manage(new Gtk::CheckButton(M("TP_ICM_GAMUT")))),
shiftxl(Gtk::manage(new Adjuster(M("TC_LOCALLAB_PRIM_SHIFTX"), -0.20, 0.20, 0.0001, 0.))),
shiftyl(Gtk::manage(new Adjuster(M("TC_LOCALLAB_PRIM_SHIFTY"), -0.20, 0.20, 0.0001, 0.))),
bwcieBox(Gtk::manage(new Gtk::Box())),
bwcie(Gtk::manage(new Gtk::CheckButton(M("TP_ICM_BW")))),
sigmoidjzFrame12(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))),
sigmoidjzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))),
sigmoid2Frame12(Gtk::manage(new Gtk::Frame(M("")))),
sigmoid2Frame(Gtk::manage(new Gtk::Frame(M("")))),
sigcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGCIE")))),
sigjz12(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA")))),
sigmoidldajzcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.5, 3.5, 0.01, 1.3))),
sigmoidthjzcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), -1., 1., 0.01, 0., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
sigmoidbljzcie12(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 50., 1000., 0.5, 100.))),
sigjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA11")))),
forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))),
sigmoidldajzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.5))),
sigmoidthjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH11"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
sigmoidbljzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL11"), 0.5, 1.5, 0.01, 1.))),
colorflcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCOLORFL"), -100., 100., 0.5, 0.))),
saturlcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))),
rstprotectcie(Gtk::manage(new Adjuster(M("TP_COLORAPP_RSTPRO"), 0., 100., 0.1, 0.))),
chromlcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROML"), -100., 100., 0.5, 0.))),
huecie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HUECIE"), -100., 100., 0.1, 0.))),
cieCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CURVES_CIE"))),
toneMethodcie(Gtk::manage(new MyComboBoxText())),
shapecie(static_cast<DiagonalCurveEditor*>(cieCurveEditorG->addCurve(CT_Diagonal, "", toneMethodcie))),
cieCurveEditorG2(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_COLOR_CIE"))),
toneMethodcie2(Gtk::manage(new MyComboBoxText())),
shapecie2(static_cast<DiagonalCurveEditor*>(cieCurveEditorG2->addCurve(CT_Diagonal, "", toneMethodcie2))),
chromjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZCHROM"), -100., 100., 0.5, 0.))),
saturjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZSAT"), -100., 100., 0.5, 0.))),
huejzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZHUECIE"), -100., 100., 0.1, 0.))),
jz1CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
shapejz(static_cast<DiagonalCurveEditor*>(jz1CurveEditorG->addCurve(CT_Diagonal, "Jz(J)"))),
shapecz(static_cast<DiagonalCurveEditor*>(jz1CurveEditorG->addCurve(CT_Diagonal, "Cz(C)"))),
HFramejz(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZHFRA")))),
JzHFramejz(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_JZHJZFRA")))),
jz2CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
jz3CurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
shapeczjz(static_cast<DiagonalCurveEditor*>(jz1CurveEditorG->addCurve(CT_Diagonal, "Cz(J)"))),
HHshapejz(static_cast<FlatCurveEditor*>(jz3CurveEditorG->addCurve(CT_Flat, "Hz(Hz)", nullptr, false, true))),
CHshapejz(static_cast<FlatCurveEditor*>(jz3CurveEditorG->addCurve(CT_Flat, "Cz(Hz)", nullptr, false, true))),
LHshapejz(static_cast<FlatCurveEditor*>(jz2CurveEditorG->addCurve(CT_Flat, "Jz(Hz)", nullptr, false, true))),
softjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZSOFTCIE"), 0., 100., 0.1, 0.))),
thrhjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZTHRHCIE"), 40., 150., 0.5, 60.))),
chjzcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZCH")))),
strsoftjzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZSTRSOFTCIE"), 0, 100., 0.5, 100.))),
expLcie(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_CIETOOLEXP")))),
cie2Frame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOG2FRA")))),
targetGraycie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TARGET_GRAY"), 5.0, 80.0, 0.1, 18.0))),
targabscie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 16.0))),
detailcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 100., 0.1, 30.))),
detailciejz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DETAIL"), 0., 100., 0.1, 30.))),
catadcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CATAD"), -100., 100., 0.5, 0., Gtk::manage(new RTImage("circle-blue-small")), Gtk::manage(new RTImage("circle-orange-small"))))),
surroundcie(Gtk::manage(new MyComboBoxText())),
surrHBoxcie(Gtk::manage(new Gtk::Box())),
expgradcie(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_EXPGRAD")))),
strgradcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))),
anggradcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
feathercie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FEATVALUE"), 10., 100., 0.1, 25.))),
exprecovcie(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablecie(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
maskunusablecie(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUNUSABLE")))),
recothrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKRECOTHRES"), 0., 2., 0.01, 1.))),
lowthrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHRLOW"), 1., 80., 0.5, 12.))),
higthrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKLCTHR"), 20., 99., 0.5, 85.))),
decaycie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_MASKDDECAY"), 0.5, 4., 0.1, 2.))),
expmaskcie(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_SHOWS")))),
showmaskcieMethod(Gtk::manage(new MyComboBoxText())),
enacieMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASK")))),
enacieMaskall(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ENABLE_MASKALL")))),
maskcieCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "", 1)),
CCmaskcieshape(static_cast<FlatCurveEditor*>(maskcieCurveEditorG->addCurve(CT_Flat, "C", nullptr, false, false))),
LLmaskcieshape(static_cast<FlatCurveEditor*>(maskcieCurveEditorG->addCurve(CT_Flat, "L", nullptr, false, false))),
HHmaskcieshape(static_cast<FlatCurveEditor*>(maskcieCurveEditorG->addCurve(CT_Flat, "LC(h)", nullptr, false, true))),
struFramecie(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABSTRUM")))),
strumaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUMASKCOL"), 0., 200., 0.1, 0.))),
toolcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_TOOLCOL")))),
blurFramecie(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABBLURM")))),
fftcieMask(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTCOL_MASK")))),
contcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTCOL"), 0., 200., 0.5, 0.))),
blurcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURCOL"), 0.2, 100., 0.5, 0.2))),
blendmaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
lapmaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LAPMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
slomaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
highmaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HIGHMASKCOL"), 0, 100, 1, 0))),
shadmaskcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHAMASKCOL"), 0, 100, 1, 0))),
maskcieHCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, "")),
HHhmaskcieshape(static_cast<FlatCurveEditor *>(maskcieHCurveEditorG->addCurve(CT_Flat, "h(h)", nullptr, false, true))),
mask2cieCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_MASK2"))),
Lmaskcieshape(static_cast<DiagonalCurveEditor*>(mask2cieCurveEditorG->addCurve(CT_Diagonal, "L(L)"))),
wavFramecie(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_TOOLMASK_2")))),
mask2cieCurveEditorGwav(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVMASK"))),
LLmaskcieshapewav(static_cast<FlatCurveEditor*>(mask2cieCurveEditorGwav->addCurve(CT_Flat, "L(L)", nullptr, false, false))),
quaHcieBox(Gtk::manage(new Gtk::Box())),
csThresholdcie(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLDBLUR"), 0, 9, 0, 0, 6, 5, 0, false)))
{
auto m = ProcEventMapper::getInstance();
Evlocallabpreviewcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_PREVIEWCIE");
Evlocallabnormcie12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_NORM");
Evlocallabnormcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_NORM11");
Evlocallabstrumaskcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_STRU");
EvLocallabtoolcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_STRU_TOOL");
EvLocallabfftcieMask = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_BLURFFT");
Evlocallabcontcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_BLURCONT");
Evlocallabblurcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_BLURRAD");
Evlocallabhighmaskcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_HIGH");
Evlocallabshadmaskcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_SHAD");
EvlocallabLLmaskcieshapewav = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_WLC");
EvlocallabcsThresholdcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_WLEV");
Evlocallabcomprcie = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_BRICOMP");
Evlocallabstrcielog = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_STRLOG");
Evlocallabsatcie = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_SATCIE");
Evlocallablogcieq = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_LOGCIEQ");
Evlocallabcomprcieth = m->newEvent(HDR, "HISTORY_MSG_LOCAL_CIE_BRICOMPTH");
EvlocallabHHhmaskcieshape = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIEMASK_CHH");
EvlocallabbwevMethod12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SIGMET");
Evlocallabgamjcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_GAM");
Evlocallabslopjcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOP");
Evlocallabmidtcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_MIDT");
Evlocallabcontsig = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_CONTSIG");
Evlocallabskewsig = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SKEWSIG");
Evlocallabwhitsig = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_WHITSIG");
Evlocallabslopesmo = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMO");
Evlocallabslopesmoq = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOQ");
Evlocallabslopesmor = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOR");
Evlocallabslopesmog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOG");
Evlocallabslopesmob = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SLOPESMOB");
Evlocallabkslopesmor = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_KSLOPESMOR");
Evlocallabkslopesmog = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_KSLOPESMOG");
Evlocallabkslopesmob = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_KSLOPESMOB");
Evlocallabsmoothcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTH");
Evlocallabsmoothcielnk = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHLNK");
Evlocallabsmoothcietrc = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHTRC");
Evlocallabsmoothcietrcrel = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHTRCREL");
Evlocallabsmoothcieyb = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHYB");
Evlocallabsmoothcieth = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHTH");
Evlocallabsmoothcielum = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTH_LUM");
Evlocallabsmoothciehigh = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTH_HIGH");
Evlocallabsigcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SIG");
Evlocallabillcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_ILL");
Evlocallabprimcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_PRIM");
Evlocallabcatcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_CAT");
Evlocallabwhitescie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_WHITES");
Evlocallabblackscie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_BLACKS");
Evlocallabredxl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_REDXL");
Evlocallabredyl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_REDYL");
Evlocallabgrexl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_GREXL");
Evlocallabgreyl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_GREYL");
Evlocallabbluxl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_BLUXL");
Evlocallabbluyl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_BLUYL");
EvlocallabGridciexy = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_LABGRIDCIE");
Evlocallabgamutcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_GAMUTCIE");
Evlocallabbwcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_BWCIE");
Evlocallabexpprecam = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_EXPPRECAM");
Evlocallablightsigqcie12 = m->newEvent(AUTOEXP, "");
Evlocallabcontsigqcie = m->newEvent(AUTOEXP, "");
Evlocallabrefi = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_REFI");
Evlocallabshiftxl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SHIFTXL");
Evlocallabshiftyl = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SHIFTYL");
Evlocallabanggradcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_ANGGRAD");
Evlocallabstrgradcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_STRGRAD");
Evlocallabdetailciejz = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_DETAILJZ");
EvlocallabenacieMaskall = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_ENAMASKALL");
Evlocallabsmoothciemet = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_SMOOTHMET");
Evlocallabfeathercie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_FEATHERCIE");
EvlocallabmodeQJ = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_QJMETHOD");
EvlocallabbwevMethod = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_CIE_WEVMETHOD11");
Evlocallabsigmoidldacie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGDACIE");
Evlocallabsigmoidthcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGTHCIE");
Evlocallabsigmoidblcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGBLCIE");
Evlocallabsigq = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGQ11");
Evlocallabsigq_12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGQ12");
Evlocallabsigjz = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11");
Evlocallabforcebw = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGFORCEBW");
Evlocallabsigmoidldajzcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11CONT");
Evlocallabsigmoidthjzcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11GRAY");
Evlocallabsigmoidbljzcie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGJZ11BL");
Evlocallabsigmoidsenscie = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_SIGSENSICIE");
Evlocallablogcie_12 = m->newEvent(AUTOEXP, "HISTORY_MSG_LOCAL_LOGCIE12");
set_orientation(Gtk::ORIENTATION_VERTICAL);
// Parameter Ciecam specific widgets
const LocallabParams::LocallabSpot defSpot;
reparcie->setAdjusterListener(this);
sensicie->setAdjusterListener(this);
pack_start(*sensicie);
pack_start(*previewcie);
pack_start(*reparcie);
modeHBoxcam->set_spacing(2);
Gtk::Label* modeLabelcam = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_CAMMODE") + ":"));
modeHBoxcam->pack_start(*modeLabelcam, Gtk::PACK_SHRINK);
modecam->append(M("TP_LOCALLAB_CAMMODE_CAM16"));
modecam->append(M("TP_LOCALLAB_CAMMODE_JZ"));
modecam->set_active(0);
modeHBoxcam->pack_start(*modecam);
modecamconn = modecam->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::modecamChanged));
pack_start(*modeHBoxcam);
modeHBoxQJ->set_spacing(2);
Gtk::Label* modeLabelQJ = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_QJMODE") + ":"));
modeHBoxQJ->pack_start(*modeLabelQJ, Gtk::PACK_SHRINK);
modeHBoxQJ->set_tooltip_markup(M("TP_LOCALLAB_QJMODE_TOOLTIP"));
modeQJ->append(M("TP_LOCALLAB_QJMODE_511"));
modeQJ->append(M("TP_LOCALLAB_QJMODE_512"));
modeQJ->set_active(1);
modeHBoxQJ->pack_start(*modeQJ);
modeQJconn = modeQJ->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::modeQJChanged));
pack_start(*modeHBoxQJ);
modeHBoxcie->set_spacing(2);
modeHBoxcie->set_tooltip_markup(M("TP_LOCALLAB_CIEMODE_TOOLTIP"));
Gtk::Label* modeLabel = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_CIEMODE") + ":"));
modeHBoxcie->pack_start(*modeLabel, Gtk::PACK_SHRINK);
modecie->append(M("TP_LOCALLAB_CIEMODE_COM"));
modecie->append(M("TP_LOCALLAB_CIEMODE_TM"));
modecie->append(M("TP_LOCALLAB_CIEMODE_WAV"));
modecie->append(M("TP_LOCALLAB_CIEMODE_DR"));
modecie->set_active(0);
modeHBoxcie->pack_start(*modecie);
modecieconn = modecie->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::modecieChanged));
pack_start(*modeHBoxcie);
surHBoxcie->set_spacing(2);
surHBoxcie->set_tooltip_markup(M("TP_LOCALLAB_LOGSURSOUR_TOOLTIP"));
Gtk::Label* surLabel = Gtk::manage(new Gtk::Label(M("TP_COLORAPP_SURROUND") + ":"));
surHBoxcie->pack_start(*surLabel, Gtk::PACK_SHRINK);
sursourcie->append(M("TP_COLORAPP_SURROUND_AVER"));
sursourcie->append(M("TP_COLORAPP_SURROUND_DIM"));
sursourcie->append(M("TP_COLORAPP_SURROUND_DARK"));
sursourcie->append(M("TP_COLORAPP_SURROUND_EXDARK"));
sursourcie->append(M("TP_LOCALLAB_DISAB_CIECAM"));
sursourcie->set_active(0);
surHBoxcie->pack_start(*sursourcie);
sursourcieconn = sursourcie->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::sursourcieChanged));
cieFrame->set_label_align(0.025, 0.5);
Gtk::Box *TittleVBoxcamscene;
TittleVBoxcamscene = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBoxcamscene->set_spacing(2);
Gtk::Box* const LCTitleHBoxcamscene = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabelcamscene = Gtk::manage(new Gtk::Label());
LCLabelcamscene->set_markup(Glib::ustring("<b>") + (M("TP_LOCALLAB_LOGFRA")) + Glib::ustring("</b>"));
LCTitleHBoxcamscene->pack_start(*LCLabelcamscene, Gtk::PACK_SHRINK);
TittleVBoxcamscene->pack_start(*LCTitleHBoxcamscene, Gtk::PACK_SHRINK);
expcamscene->setLabel(TittleVBoxcamscene);
setExpandAlignProperties(expcamscene, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
ToolParamBlock* const cieFBox = Gtk::manage(new ToolParamBlock());
cieFBox->pack_start(*Autograycie);
cieFBox->pack_start(*sourceGraycie);
cieFBox->pack_start(*sourceabscie);
cieFBox->pack_start(*pqremapcam16);
cieFBox->pack_start(*whitescie);
cieFBox->pack_start(*blackscie);
PQFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const PQFBox = Gtk::manage(new ToolParamBlock());
PQFBox->pack_start(*adapjzcie);
PQFBox->pack_start(*jz100);
PQFBox->pack_start(*pqremap);
PQFrame->add(*PQFBox);
cieFBox->pack_start(*PQFrame);
logjzFrame->set_label_align(0.025, 0.5);
logjzFrame->set_label_widget(*logjz);
ToolParamBlock* const logjzBox = Gtk::manage(new ToolParamBlock());
logjzBox->pack_start(*targetjz);
logjzFrame->add(*logjzBox);
cieFBox->pack_start(*logjzFrame);
bevwevFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const bevwevBox = Gtk::manage(new ToolParamBlock());
bevwevBox->pack_start(*blackEvjz);
bevwevBox->pack_start(*whiteEvjz);
bevwevFrame->add(*bevwevBox);
cieFBox->pack_start(*bevwevFrame);
sigmoidFrame12->set_label_align(0.025, 0.5);
sigmoidFrame12->set_label_widget(*sigq12);
sigmoidFrame12->set_tooltip_text(M("TP_LOCALLAB_SIGMOID16_TOOLTIP"));
Gtk::Box *TittleVBoxprecam;
TittleVBoxprecam = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBoxprecam->set_spacing(2);
Gtk::Box* const LCTitleHBoxprecam = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabelprecam = Gtk::manage(new Gtk::Label());
LCLabelprecam->set_markup(Glib::ustring("<b>") + (M("TP_LOCALLAB_SIGTRCCIE")) + Glib::ustring("</b>"));
LCTitleHBoxprecam->pack_start(*LCLabelprecam, Gtk::PACK_SHRINK);
TittleVBoxprecam->pack_start(*LCTitleHBoxprecam, Gtk::PACK_SHRINK);
expprecam->setLabel(TittleVBoxprecam);
setExpandAlignProperties(expprecam, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
sigmoid2Frame12->set_label_align(0.025, 0.5);
sigmoid2Frame->set_label_align(0.025, 0.5);
logcieFrame->set_label_align(0.025, 0.5);
logcieFrame->set_label_widget(*logcie);
Gtk::Label* illLabel = Gtk::manage(new Gtk::Label(M("TP_ICM_WORKING_ILLU") + ":"));
willBox->pack_start(*illLabel, Gtk::PACK_SHRINK);
willBox->pack_start(*illMethod, Gtk::PACK_EXPAND_WIDGET);
illMethod->append(M("TP_ICM_WORKING_ILLU_D41"));
illMethod->append(M("TP_ICM_WORKING_ILLU_D50"));
illMethod->append(M("TP_ICM_WORKING_ILLU_D55"));
illMethod->append(M("TP_ICM_WORKING_ILLU_D60"));
illMethod->append(M("TP_ICM_WORKING_ILLU_D65"));
illMethod->append(M("TP_ICM_WORKING_ILLU_D80"));
illMethod->append(M("TP_ICM_WORKING_ILLU_D120"));
illMethod->append(M("TP_ICM_WORKING_ILLU_STDA"));
illMethod->append(M("TP_ICM_WORKING_ILLU_2000"));
illMethod->append(M("TP_ICM_WORKING_ILLU_1500"));
illMethod->append(M("TP_ICM_WORKING_ILLU_E"));
illMethod->set_active(1);
illMethodconn = illMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::illMethodChanged));
Gtk::Label* primLabel = Gtk::manage(new Gtk::Label(M("TP_ICM_WORKING_PRIM") + ":"));
wprimBox->pack_start(*primLabel, Gtk::PACK_SHRINK);
wprimBox->pack_start(*primMethod, Gtk::PACK_EXPAND_WIDGET);
primMethod->append(M("TP_ICM_WORKING_PRIM_PROP"));
primMethod->append(M("TP_ICM_WORKING_PRIM_BET"));
primMethod->append(M("TP_ICM_WORKING_PRIM_WID"));
primMethod->append(M("TP_ICM_WORKING_PRIM_ACE"));
primMethod->append(M("TP_ICM_WORKING_PRIM_REC"));
primMethod->append(M("TP_ICM_WORKING_PRIM_ADOB"));
primMethod->append(M("TP_ICM_WORKING_PRIM_SRGB"));
primMethod->append(M("TP_ICM_WORKING_PRIM_JDCMAX"));
primMethod->append(M("TP_ICM_WORKING_PRIM_JDCMAXSTDA"));
primMethod->append(M("TP_ICM_WORKING_PRIM_AC0"));
primMethod->append(M("TP_ICM_WORKING_PRIM_BST"));
primMethod->append(M("TP_ICM_WORKING_PRIM_BRU"));
primMethod->append(M("TP_ICM_WORKING_PRIM_FREE"));
primMethod->set_active(0);
primMethodconn = primMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::primMethodChanged));
trcFrame->set_label_align(0.025, 0.5);
smoothFrame->set_label_align(0.025, 0.5);
primillFrame->set_label_align(0.025, 0.5);
setExpandAlignProperties(grexl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
setExpandAlignProperties(greyl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
setExpandAlignProperties(bluxl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
setExpandAlignProperties(bluyl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
setExpandAlignProperties(redxl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
setExpandAlignProperties(redyl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
primCoordGridl->set_column_homogeneous(true);
primCoordGridl->attach(*redxl, 0, 0, 1, 1);
primCoordGridl->attach_next_to(*redyl, *redxl, Gtk::PositionType::POS_RIGHT, 1, 1);
primCoordGridl->attach_next_to(*grexl, *redxl, Gtk::PositionType::POS_BOTTOM, 1, 1);
primCoordGridl->attach_next_to(*greyl, *grexl, Gtk::PositionType::POS_RIGHT, 1, 1);
primCoordGridl->attach_next_to(*bluxl, *grexl, Gtk::PositionType::POS_BOTTOM, 1, 1);
primCoordGridl->attach_next_to(*bluyl, *bluxl, Gtk::PositionType::POS_RIGHT, 1, 1);
redBox->pack_start(*primCoordGridl, Gtk::PACK_EXPAND_WIDGET);
redxl->setAdjusterListener(this);
redyl->setAdjusterListener(this);
grexl->setAdjusterListener(this);
greyl->setAdjusterListener(this);
bluxl->setAdjusterListener(this);
bluyl->setAdjusterListener(this);
refi->setAdjusterListener(this);
shiftxl->setAdjusterListener(this);
shiftyl->setAdjusterListener(this);
gridFramecie->set_label_align(0.025, 0.5);
ToolParamBlock* const gridBox = Gtk::manage(new ToolParamBlock());
gridBox->pack_start(*labgridcie);
gridFramecie->add(*gridBox);
Gtk::Label* catLabel = Gtk::manage(new Gtk::Label(M("TP_ICM_WORKING_CAT") + ":"));
catBox->pack_start(*catLabel, Gtk::PACK_SHRINK);
catBox->pack_start(*catMethod, Gtk::PACK_EXPAND_WIDGET);
catMethod->append(M("TP_ICM_WORKING_CAT_BRAD"));
catMethod->append(M("TP_ICM_WORKING_CAT_CAT16"));
catMethod->append(M("TP_ICM_WORKING_CAT_CAT02"));
catMethod->append(M("TP_ICM_WORKING_CAT_VK"));
catMethod->append(M("TP_ICM_WORKING_CAT_XYZ"));
catMethod->set_active(0);
catMethodconn = catMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::catMethodChanged));
gamutcieBox->pack_start(*gamutcie, Gtk::PACK_EXPAND_WIDGET);
gamutcieconn = gamutcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::gamutcieChanged));
bwcieBox->pack_start(*bwcie, Gtk::PACK_EXPAND_WIDGET);
bwcieconn = bwcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::bwcieChanged));
modeHBoxbwev12->set_spacing(2);
ToolParamBlock* const gamcieBox = Gtk::manage(new ToolParamBlock());
Gtk::Label* modeLabelbwev12 = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SIGMOIDQJ") + ":"));
modeHBoxbwev12->pack_start(*modeLabelbwev12, Gtk::PACK_SHRINK);
bwevMethod12->append(M("TP_LOCALLAB_BWEVSIG"));
bwevMethod12->append(M("TP_LOCALLAB_BWEVSLOP"));
bwevMethod12->set_active(1);
bwevMethod12Conn = bwevMethod12->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::bwevMethod12Changed));
modeHBoxbwev12->pack_start(*bwevMethod12);
modeHBoxbwev->set_spacing(2);
Gtk::Label* modeLabelbwev = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SIGMOIDQJ11") + ":"));
modeHBoxbwev->pack_start(*modeLabelbwev, Gtk::PACK_SHRINK);
bwevMethod->append(M("TP_LOCALLAB_BWEVNONE11"));
bwevMethod->append(M("TP_LOCALLAB_BWEVSIG11"));
bwevMethod->set_active(1);
bwevMethodConn = bwevMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::bwevMethodChanged));
modeHBoxbwev->pack_start(*bwevMethod);
comprBox->pack_start(*comprcie);
comprBox->pack_start(*strcielog);
comprBox->pack_start(*satcie);
comprBox->pack_start(*logcieq);
logcieFrame->add(*comprBox);
gamcieBox->pack_start(*logcieFrame);
ToolParamBlock* const trccieBox = Gtk::manage(new ToolParamBlock());
ToolParamBlock* const smoothcieBox = Gtk::manage(new ToolParamBlock());
ToolParamBlock* const primillBox = Gtk::manage(new ToolParamBlock());
ToolParamBlock* const colorBox = Gtk::manage(new ToolParamBlock());
trccieBox->pack_start(*gamjcie);
trccieBox->pack_start(*slopjcie);
trccieBox->pack_start(*midtcie);
smoothBox->pack_start(*smoothciemet, Gtk::PACK_EXPAND_WIDGET);
smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_NONE"));
smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_EV"));
smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_GAMMA ROLLOFF"));
smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_GAMMA"));
smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_LEVELS"));
//if need I will add an other smoothciemet with variable
smoothciemet->append(M("TP_LOCALLAB_CIE_SMOOTH_SIG"));
smoothciemet->set_active(0);
smoothciemet->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP"));
ciesmoothBox->pack_start(*smoothBox);
ciesmoothBox->pack_start(*slopesmo);
ciesmoothBox->pack_start(*slopesmor);
ciesmoothBox->pack_start(*slopesmog);
ciesmoothBox->pack_start(*slopesmob);
ciesmoothBox->pack_start(*kslopesmor);
ciesmoothBox->pack_start(*kslopesmog);
ciesmoothBox->pack_start(*kslopesmob);
ciesmoothBox->pack_start(*contsig);
ciesmoothBox->pack_start(*skewsig);
ciesmoothBox->pack_start(*whitsig);
ciesmoothBox->pack_start(*smoothcielnk);
ciesmoothBox->pack_start(*smoothciehigh);
ciesmoothBox->pack_start(*smoothcielum);
ciesmoothBox->pack_start(*smoothcieyb);
ciesmoothBox->pack_start(*smoothcie);
ciesmoothBox->pack_start(*smoothcietrc);
ciesmoothBox->pack_start(*smoothcietrcrel);
ciesmoothBox->pack_start(*smoothcieth);
smoothciemetconn = smoothciemet->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::smoothciemetChanged));
smoothcieBox->pack_start(*ciesmoothBox);
smoothFrame->add(*smoothcieBox);
trccieBox->pack_start(*smoothFrame);
trccieBox->pack_start(*bwcieBox);
trcFrame->add(*trccieBox);
gamcieBox->pack_start(*trcFrame);
primillBox->pack_start(*willBox);
colorFramecie->set_label_align(0.025, 0.5);
primillBox->pack_start(*wprimBox);
primillBox->pack_start(*redBox);
primillBox->pack_start(*gridFramecie);
primillBox->pack_start(*gamutcieBox);
primillBox->pack_start(*catBox);
colorBox->pack_start(*refi);
colorBox->pack_start(*shiftxl);
colorBox->pack_start(*shiftyl);
colorFramecie->add(*colorBox);
primillBox->pack_start(*colorFramecie);
primillFrame->add(*primillBox);
gamcieBox->pack_start(*primillFrame);
expprecam->add(*gamcieBox, false);
ToolParamBlock* const sigfraBox12 = Gtk::manage(new ToolParamBlock());
sigfraBox12->pack_start(*modeHBoxbwev12);
sigfraBox12->pack_start(*slopesmoq);
sigfraBox12->pack_start(*sigmoidldacie12);
sigfraBox12->pack_start(*sigmoidthcie12);
sigfraBox12->pack_start(*sigmoidblcie12);
sigmoid2Frame12->add(*sigfraBox12);
sigBox12->pack_start(*sigmoid2Frame12);
sigmoidFrame12->add(*sigBox12);
sigmoidFrame->set_label_align(0.025, 0.5);
sigmoidFrame->set_label_widget(*sigq);
sigmoidnormFrame->set_label_align(0.025, 0.5);
sigmoidnormFrame->set_label_widget(*normcie);
ToolParamBlock* const sigfraBox = Gtk::manage(new ToolParamBlock());
sigfraBox->pack_start(*modeHBoxbwev);
sigfraBox->pack_start(*sigmoidldacie);
sigfraBox->pack_start(*sigmoidthcie);
sigfraBox->pack_start(*sigmoidsenscie);
sigmoid2Frame->add(*sigfraBox);
sigBox->pack_start(*sigmoid2Frame);
ToolParamBlock* const signormBox = Gtk::manage(new ToolParamBlock());
signormBox->pack_start(*sigmoidblcie);
sigmoidnormFrame->add(*signormBox);
sigBox->pack_start(*sigmoidnormFrame);
sigmoidFrame->add(*sigBox);
sigmoidjzFrame12->set_label_align(0.025, 0.5);
sigmoidjzFrame12->set_label_widget(*sigjz12);
ToolParamBlock* const sigjzBox12 = Gtk::manage(new ToolParamBlock());
sigjzBox12->pack_start(*sigmoidldajzcie12);
sigjzBox12->pack_start(*sigmoidthjzcie12);
sigjzBox12->pack_start(*sigmoidbljzcie12);
sigjzBox12->pack_start(*sigybjz12);
sigmoidjzFrame12->add(*sigjzBox12);
sigmoidjzFrame12->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP"));
cieFBox->pack_start(*sigmoidjzFrame12);
sigmoidjzFrame->set_label_align(0.025, 0.5);
sigmoidjzFrame->set_label_widget(*sigjz);
ToolParamBlock* const sigjzBox = Gtk::manage(new ToolParamBlock());
sigjzBox->pack_start(*sigmoidldajzcie);
sigjzBox->pack_start(*sigmoidthjzcie);
sigjzBox->pack_start(*sigmoidbljzcie);
sigjzBox->pack_start(*forcebw);
sigmoidjzFrame->add(*sigjzBox);
cieFBox->pack_start(*sigmoidjzFrame);
cieFBox->pack_start(*surHBoxcie);
expcamscene->add(*cieFBox, false);
pack_start(*expcamscene, false, false);
pack_start(*expprecam, false, false);
ToolParamBlock* const jzallBox = Gtk::manage(new ToolParamBlock());
Gtk::Box *TittleVBoxjz;
TittleVBoxjz = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBoxjz->set_spacing(2);
Gtk::Box* const LCTitleHBoxjz = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabeljz = Gtk::manage(new Gtk::Label());
LCLabeljz->set_markup(Glib::ustring("<b>") + (M("TP_LOCALLAB_JZFRA")) + Glib::ustring("</b>"));
LCTitleHBoxjz->pack_start(*LCLabeljz, Gtk::PACK_SHRINK);
TittleVBoxjz->pack_start(*LCTitleHBoxjz, Gtk::PACK_SHRINK);
expjz->setLabel(TittleVBoxjz);
setExpandAlignProperties(expjz, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
float R, G, B;
std::vector<GradientMilestone> six_shape;
for (int i = 0; i < 6; i++) {
const float x = static_cast<float>(i) * (1.f / 6.f);
Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B);
six_shape.emplace_back(x, R, G, B);
}
std::vector<GradientMilestone> milestone;
milestone.push_back(GradientMilestone(0., 0., 0., 0.));
milestone.push_back(GradientMilestone(1., 1., 1., 1.));
jz1CurveEditorG->setCurveListener(this);
shapejz->setResetCurve(DiagonalCurveType(defSpot.jzcurve.at(0)), defSpot.jzcurve);
shapejz->setBottomBarBgGradient(milestone);
shapejz->setLeftBarBgGradient(milestone);
shapecz->setResetCurve(DiagonalCurveType(defSpot.czcurve.at(0)), defSpot.czcurve);
std::vector<GradientMilestone> shapeczMilestones;
shapecz->setBottomBarColorProvider(this, 1);
shapecz->setLeftBarColorProvider(this, 1);
shapecz->setRangeDefaultMilestones(0.05, 0.2, 0.58);
for (int i = 0; i < 7; i++) {
float x = float (i) * (1.0f / 6.f);
Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B);
shapeczMilestones.push_back(GradientMilestone(double (x), double (R), double (G), double (B)));
}
shapecz->setBottomBarBgGradient(shapeczMilestones);
shapecz->setLeftBarBgGradient(shapeczMilestones);
shapecz->setRangeDefaultMilestones(0.05, 0.2, 0.58);
shapeczjz->setLeftBarColorProvider(this, 1);
shapeczjz->setRangeDefaultMilestones(0.05, 0.2, 0.58);
shapeczjz->setResetCurve(DiagonalCurveType(defSpot.czjzcurve.at(0)), defSpot.czjzcurve);
shapeczjz->setBottomBarBgGradient(milestone);
shapeczjz->setLeftBarBgGradient(shapeczMilestones);
shapeczjz->setRangeDefaultMilestones(0.05, 0.2, 0.58);
jz1CurveEditorG->curveListComplete();
jz2CurveEditorG->setCurveListener(this);
LHshapejz->setIdentityValue(0.);
LHshapejz->setResetCurve(FlatCurveType(defSpot.LHcurvejz.at(0)), defSpot.LHcurvejz);
LHshapejz->setCurveColorProvider(this, 3);
LHshapejz->setBottomBarBgGradient(six_shape);
jz2CurveEditorG->curveListComplete();
jz3CurveEditorG->setCurveListener(this);
CHshapejz->setIdentityValue(0.);
CHshapejz->setResetCurve(FlatCurveType(defSpot.CHcurvejz.at(0)), defSpot.CHcurvejz);
CHshapejz->setCurveColorProvider(this, 3);
CHshapejz->setBottomBarBgGradient(six_shape);
HHshapejz->setIdentityValue(0.);
HHshapejz->setResetCurve(FlatCurveType(defSpot.HHcurvejz.at(0)), defSpot.HHcurvejz);
HHshapejz->setCurveColorProvider(this, 3);
HHshapejz->setBottomBarBgGradient(six_shape);
jz3CurveEditorG->curveListComplete();
jzFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const jzBox = Gtk::manage(new ToolParamBlock());
jzBox->pack_start(*qtoj);
czlightFrame->set_label_align(0.025, 0.5);
czcolorFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const ciePzlightBox = Gtk::manage(new ToolParamBlock());
ciePzlightBox->pack_start(*lightjzcie);
ciePzlightBox->pack_start(*contjzcie);
ciePzlightBox->pack_start(*detailciejz);
czlightFrame->add(*ciePzlightBox);
jzBox->pack_start(*czlightFrame);
ToolParamBlock* const ciePzcolorBox = Gtk::manage(new ToolParamBlock());
ciePzcolorBox->pack_start(*chromjzcie);
ciePzcolorBox->pack_start(*saturjzcie);
ciePzcolorBox->pack_start(*huejzcie);
czcolorFrame->add(*ciePzcolorBox);
jzBox->pack_start(*czcolorFrame);
jzBox->pack_start(*jz1CurveEditorG, Gtk::PACK_SHRINK, 4);
HFramejz->set_label_align(0.025, 0.5);
ToolParamBlock* const jzHHBox = Gtk::manage(new ToolParamBlock());
JzHFramejz->set_label_align(0.025, 0.5);
ToolParamBlock* const jzHBox = Gtk::manage(new ToolParamBlock());
jzHBox->pack_start(*jz2CurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
jzHBox->pack_start(*thrhjzcie);
JzHFramejz->add(*jzHBox);
jzHHBox->pack_start(*JzHFramejz);
jzHHBox->pack_start(*jz3CurveEditorG, Gtk::PACK_SHRINK, 4); // jzBox->pack_start(*adapjzcie);
jzHHBox->pack_start(*softjzcie);
HFramejz->add(*jzHHBox);
jzBox->pack_start(*HFramejz);
jzshFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const jzshBox = Gtk::manage(new ToolParamBlock());
jzshBox->pack_start(*hljzcie);
jzshBox->pack_start(*hlthjzcie);
jzshBox->pack_start(*shjzcie);
jzshBox->pack_start(*shthjzcie);
jzshBox->pack_start(*radjzcie);
jzshFrame->add(*jzshBox);
jzBox->pack_start(*jzshFrame);
setExpandAlignProperties(expwavjz, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
contFramejz->set_label_align(0.025, 0.5);
sigmalcjz->setAdjusterListener(this);
LocalcurveEditorwavjz->setCurveListener(this);
wavshapejz->setIdentityValue(0.);
wavshapejz->setResetCurve(FlatCurveType(defSpot.locwavcurvejz.at(0)), defSpot.locwavcurvejz);
LocalcurveEditorwavjz->curveListComplete();
csThresholdjz->setAdjusterListener(this);
ToolParamBlock* const coBox2jz = Gtk::manage(new ToolParamBlock());
coBox2jz->pack_start(*csThresholdjz);
ToolParamBlock* const coBoxjz = Gtk::manage(new ToolParamBlock());
coBoxjz->pack_start(*sigmalcjz);
coBoxjz->pack_start(*LocalcurveEditorwavjz, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
contFramejz->add(*coBoxjz);
coBox2jz->pack_start(*contFramejz);
clarilresjz->setAdjusterListener(this);
claricresjz->setAdjusterListener(this);
clarisoftjz->setAdjusterListener(this);
clariFramejz->set_label_align(0.025, 0.5);
ToolParamBlock* const coBox3jz = Gtk::manage(new ToolParamBlock());
coBox3jz->pack_start(*clarilresjz);
coBox3jz->pack_start(*claricresjz);
coBox3jz->pack_start(*clarisoftjz);
clariFramejz->add(*coBox3jz);
coBox2jz->pack_start(*clariFramejz);
expwavjz->add(*coBox2jz, false);
jzBox->pack_start(*expwavjz, false, false);
jzallBox->add(*jzBox);
expjz->add(*jzallBox, false);
jabcieConn = jabcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::jabcieChanged));
AutograycieConn = Autograycie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::AutograycieChanged));
comprcieautoconn = comprcieauto->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::comprcieautoChanged));
normcie12conn = normcie12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::normcie12Changed));
normcieconn = normcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::normcieChanged));
expprecamconn = expprecam->signal_enabled_toggled().connect(sigc::mem_fun(*this, &Locallabcie::expprecamChanged));
sigcieconn = sigcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigcieChanged));
logcieconn = logcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logcieChanged));
satcieconn = satcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::satcieChanged));
logcieqconn = logcieq->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logcieqChanged));
smoothcieconn = smoothcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcieChanged));
smoothcielnkconn = smoothcielnk->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcielnkChanged));
smoothcietrcconn = smoothcietrc->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcietrcChanged));
smoothcietrcrelconn = smoothcietrcrel->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcietrcrelChanged));
smoothcieybconn = smoothcieyb->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcieybChanged));
smoothcielumconn = smoothcielum->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothcielumChanged));
smoothciehighconn = smoothciehigh->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::smoothciehighChanged));
logjzconn = logjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logjzChanged));
sigjz12conn = sigjz12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigjz12Changed));
sigjzconn = sigjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigjzChanged));
forcebwconn = forcebw->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::forcebwChanged));
sigq12conn = sigq12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigq12Changed));
sigqconn = sigq->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigqChanged));
qtojConn = qtoj->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::qtojChanged));
chjzcieconn = chjzcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::chjzcieChanged));
sigybjz12Conn = sigybjz12->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigybjz12Changed));
sourceGraycie->setAdjusterListener(this);
sourceGraycie->setLogScale(10, 18, true);
sourceabscie->setLogScale(500, 0);
sourceabscie->setAdjusterListener(this);
setExpandAlignProperties(expLcie, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
saturlcie->setAdjusterListener(this);
rstprotectcie->setAdjusterListener(this);
chromlcie->setAdjusterListener(this);
huecie->setAdjusterListener(this);
cieCurveEditorG->setCurveListener(this);
toneMethodcie->append(M("TP_COLORAPP_TCMODE_LIGHTNESS"));
toneMethodcie->append(M("TP_COLORAPP_TCMODE_BRIGHTNESS"));
toneMethodcie->set_active(0);
toneMethodcieConn = toneMethodcie->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::toneMethodcieChanged));
shapecie->setResetCurve(DiagonalCurveType(defSpot.ciecurve.at(0)), defSpot.ciecurve);
shapecie->setBottomBarBgGradient(milestone);
shapecie->setLeftBarBgGradient(milestone);
cieCurveEditorG->curveListComplete();
cieCurveEditorG2->setCurveListener(this);
toneMethodcie2->append(M("TP_COLORAPP_TCMODE_CHROMA"));
toneMethodcie2->append(M("TP_COLORAPP_TCMODE_SATUR"));
toneMethodcie2->append(M("TP_COLORAPP_TCMODE_COLORF"));
toneMethodcie2->set_active(0);
toneMethodcieConn2 = toneMethodcie2->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::toneMethodcie2Changed));
shapecie2->setResetCurve(DiagonalCurveType(defSpot.ciecurve2.at(0)), defSpot.ciecurve2);
shapecie2->setBottomBarColorProvider(this, 1);
shapecie2->setLeftBarColorProvider(this, 1);
shapecie2->setRangeDefaultMilestones(0.05, 0.2, 0.58);
std::vector<GradientMilestone> shape2Milestones;
for (int i = 0; i < 7; i++) {
float x = float (i) * (1.0f / 6.f);
Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B);
shape2Milestones.push_back(GradientMilestone(double (x), double (R), double (G), double (B)));
}
shapecie2->setBottomBarBgGradient(shape2Milestones);
shapecie2->setLeftBarBgGradient(shape2Milestones);
shapecie2->setRangeDefaultMilestones(0.05, 0.2, 0.58);
cieCurveEditorG2->curveListComplete();
chromjzcie->setAdjusterListener(this);
saturjzcie->setAdjusterListener(this);
huejzcie->setAdjusterListener(this);
softjzcie->setAdjusterListener(this);
thrhjzcie->setAdjusterListener(this);
strsoftjzcie->setAdjusterListener(this);
lightlcie->setAdjusterListener(this);
lightjzcie->setAdjusterListener(this);
lightqcie->setAdjusterListener(this);
lightsigqcie->setAdjusterListener(this);
contlcie->setAdjusterListener(this);
contjzcie->setAdjusterListener(this);
adapjzcie->setAdjusterListener(this);
jz100->setAdjusterListener(this);
pqremap->setAdjusterListener(this);
pqremapcam16->setAdjusterListener(this);
pqremapcam16->setLogScale(500, 100);
hljzcie->setAdjusterListener(this);
hlthjzcie->setAdjusterListener(this);
shjzcie->setAdjusterListener(this);
shthjzcie->setAdjusterListener(this);
radjzcie->setAdjusterListener(this);
contthrescie->setAdjusterListener(this);
blackEvjz->setLogScale(2, -8);
blackEvjz->setAdjusterListener(this);
whiteEvjz->setLogScale(16, 0);
whiteEvjz->setAdjusterListener(this);
targetjz->setAdjusterListener(this);
targetjz->setLogScale(10, 18, true);
sigmoidldacie12->setAdjusterListener(this);
sigmoidthcie12->setAdjusterListener(this);
sigmoidblcie12->setAdjusterListener(this);
sigmoidldacie->setAdjusterListener(this);
sigmoidthcie->setAdjusterListener(this);
sigmoidblcie->setAdjusterListener(this);
sigmoidsenscie->setAdjusterListener(this);
comprcie->setAdjusterListener(this);
strcielog->setAdjusterListener(this);
comprcieth->setAdjusterListener(this);
gamjcie->setAdjusterListener(this);
slopjcie->setAdjusterListener(this);
slopjcie->setLogScale(100, 1);
smoothcieth->setAdjusterListener(this);
midtcie->setAdjusterListener(this);
whitescie->setAdjusterListener(this);
blackscie->setAdjusterListener(this);
sigmoidldajzcie12->setAdjusterListener(this);
sigmoidthjzcie12->setAdjusterListener(this);
sigmoidbljzcie12->setAdjusterListener(this);
sigmoidldajzcie->setAdjusterListener(this);
sigmoidthjzcie->setAdjusterListener(this);
sigmoidbljzcie->setAdjusterListener(this);
contqcie->setAdjusterListener(this);
contsigqcie->setAdjusterListener(this);
colorflcie->setAdjusterListener(this);
targetGraycie->setAdjusterListener(this);
targetGraycie->setLogScale(10, 18, true);
targabscie->setLogScale(500, 0);
targabscie->setAdjusterListener(this);
detailcie->setAdjusterListener(this);
detailciejz->setAdjusterListener(this);
catadcie->setAdjusterListener(this);
slopesmo->setAdjusterListener(this);
slopesmoq->setAdjusterListener(this);
slopesmor->setAdjusterListener(this);
slopesmog->setAdjusterListener(this);
slopesmob->setAdjusterListener(this);
kslopesmor->setAdjusterListener(this);
kslopesmog->setAdjusterListener(this);
kslopesmob->setAdjusterListener(this);
contsig->setAdjusterListener(this);
skewsig->setAdjusterListener(this);
whitsig->setAdjusterListener(this);
Gtk::Box *TittleVBoxcam16;
TittleVBoxcam16 = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBoxcam16->set_spacing(2);
Gtk::Box* const LCTitleHBoxcam16 = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabelcam16 = Gtk::manage(new Gtk::Label());
LCLabelcam16->set_markup(Glib::ustring("<b>") + (M("TP_LOCALLAB_CAM16_FRA")) + Glib::ustring("</b>"));
LCTitleHBoxcam16->pack_start(*LCLabelcam16, Gtk::PACK_SHRINK);
TittleVBoxcam16->pack_start(*LCTitleHBoxcam16, Gtk::PACK_SHRINK);
expcam16->setLabel(TittleVBoxcam16);
setExpandAlignProperties(expcam16, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
Gtk::Box *TittleVBoxcamviewing;
TittleVBoxcamviewing = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
TittleVBoxcamviewing->set_spacing(2);
Gtk::Box* const LCTitleHBoxcamviewing = Gtk::manage(new Gtk::Box());
Gtk::Label* const LCLabelcamviewing = Gtk::manage(new Gtk::Label());
LCLabelcamviewing->set_markup(Glib::ustring("<b>") + (M("TP_LOCALLAB_LOG2FRA")) + Glib::ustring("</b>"));
LCTitleHBoxcamviewing->pack_start(*LCLabelcamviewing, Gtk::PACK_SHRINK);
TittleVBoxcamviewing->pack_start(*LCTitleHBoxcamviewing, Gtk::PACK_SHRINK);
expcamviewing->setLabel(TittleVBoxcamviewing);
setExpandAlignProperties(expcamviewing, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
surrHBoxcie->set_spacing(2);
surrHBoxcie->set_tooltip_markup(M("TP_COLORAPP_SURROUND_TOOLTIP"));
Gtk::Label* surrLabelcie = Gtk::manage(new Gtk::Label(M("TP_COLORAPP_SURROUND") + ":"));
surrHBoxcie->pack_start(*surrLabelcie, Gtk::PACK_SHRINK);
surroundcie->append(M("TP_COLORAPP_SURROUND_AVER"));
surroundcie->append(M("TP_COLORAPP_SURROUND_DIM"));
surroundcie->append(M("TP_COLORAPP_SURROUND_DARK"));
surroundcie->set_active(0);
surrHBoxcie->pack_start(*surroundcie);
surroundcieconn = surroundcie->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::surroundcieChanged));
cie1Frame->set_label_align(0.025, 0.5);
cie1lightFrame->set_label_align(0.025, 0.5);
cie1contFrame->set_label_align(0.025, 0.5);
cie1colorFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const cieP11Box = Gtk::manage(new ToolParamBlock());
cieP11Box->pack_start(*cieCurveEditorG);
cieP11Box->pack_start(*cieCurveEditorG2);
expLcie->add(*cieP11Box, false);
ToolParamBlock* const cieP1Box = Gtk::manage(new ToolParamBlock());
cieP1Box->pack_start(*expLcie, false, false);
ToolParamBlock* const cieP1lightBox = Gtk::manage(new ToolParamBlock());
cieP1lightBox->pack_start(*lightlcie);
cieP1lightBox->pack_start(*lightqcie);
cieP1lightBox->pack_start(*lightsigqcie);
cie1lightFrame->add(*cieP1lightBox);
cieP1Box->pack_start(*cie1lightFrame);
ToolParamBlock* const cieP1contBox = Gtk::manage(new ToolParamBlock());
cieP1contBox->pack_start(*detailcie);
cieP1contBox->pack_start(*contlcie);
cieP1contBox->pack_start(*contqcie);
cieP1contBox->pack_start(*contsigqcie);
cieP1contBox->pack_start(*contthrescie);
contsigqcie->hide();
lightsigqcie->hide();
cie1contFrame->add(*cieP1contBox);
cieP1Box->pack_start(*cie1contFrame);
ToolParamBlock* const cieP1colorBox = Gtk::manage(new ToolParamBlock());
cieP1colorBox->pack_start(*chromlcie);
cieP1colorBox->pack_start(*saturlcie);
cieP1colorBox->pack_start(*colorflcie);
cieP1colorBox->pack_start(*huecie);
cieP1colorBox->pack_start(*rstprotectcie);
cie1colorFrame->add(*cieP1colorBox);
cieP1Box->pack_start(*cie1colorFrame);
cieP1Box->pack_start(*sigmoidFrame12);
cieP1Box->pack_start(*sigmoidFrame);
expcam16->add(*cieP1Box, false);
pack_start(*expcam16, false, false);
pack_start(*expjz, false, false);
cie2Frame->set_label_align(0.025, 0.5);
ToolParamBlock* const cieP2Box = Gtk::manage(new ToolParamBlock());
cieP2Box->pack_start(*targetGraycie);
cieP2Box->pack_start(*targabscie);
cieP2Box->pack_start(*catadcie);
cieP2Box->pack_start(*surrHBoxcie);
expcamviewing->add(*cieP2Box, false);
pack_start(*expcamviewing, false, false);
recothrescie->setAdjusterListener(this);
lowthrescie->setAdjusterListener(this);
higthrescie->setAdjusterListener(this);
decaycie->setAdjusterListener(this);
setExpandAlignProperties(expgradcie, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
setExpandAlignProperties(exprecovcie, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
setExpandAlignProperties(expmaskcie, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
previewcie->set_active(false);
previewcieConn = previewcie->signal_clicked().connect(
sigc::mem_fun(
*this, &Locallabcie::previewcieChanged));
showmaskcieMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
showmaskcieMethod->append(M("TP_LOCALLAB_SHOWMODIF"));
showmaskcieMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK"));
showmaskcieMethod->append(M("TP_LOCALLAB_SHOWMASK"));
showmaskcieMethod->append(M("TP_LOCALLAB_SHOWREF"));
showmaskcieMethod->set_active(0);
showmaskcieMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
showmaskcieMethodConn = showmaskcieMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallabcie::showmaskcieMethodChanged));
enacieMaskConn = enacieMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::enacieMaskChanged));
enacieMaskallConn = enacieMaskall->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::enacieMaskallChanged));
maskcieCurveEditorG->setCurveListener(this);
CCmaskcieshape->setIdentityValue(0.);
CCmaskcieshape->setResetCurve(FlatCurveType(defSpot.CCmaskciecurve.at(0)), defSpot.CCmaskciecurve);
CCmaskcieshape->setBottomBarColorProvider(this, 1);
LLmaskcieshape->setIdentityValue(0.);
LLmaskcieshape->setResetCurve(FlatCurveType(defSpot.LLmaskciecurve.at(0)), defSpot.LLmaskciecurve);
LLmaskcieshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
HHmaskcieshape->setIdentityValue(0.);
HHmaskcieshape->setResetCurve(FlatCurveType(defSpot.HHmaskciecurve.at(0)), defSpot.HHmaskciecurve);
HHmaskcieshape->setCurveColorProvider(this, 2);
HHmaskcieshape->setBottomBarColorProvider(this, 2);
maskcieCurveEditorG->curveListComplete();
struFramecie->set_label_align(0.025, 0.5);
strumaskcie->setAdjusterListener(this);
toolcieConn = toolcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::toolcieChanged));
blurFramecie->set_label_align(0.025, 0.5);
fftcieMaskConn = fftcieMask->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::fftcieMaskChanged));
contcie->setAdjusterListener(this);
blurcie->setAdjusterListener(this);
blendmaskcie->setAdjusterListener(this);
radmaskcie->setAdjusterListener(this);
lapmaskcie->setAdjusterListener(this);
gammaskcie->setAdjusterListener(this);
slomaskcie->setAdjusterListener(this);
highmaskcie->setAdjusterListener(this);
shadmaskcie->setAdjusterListener(this);
maskcieHCurveEditorG->setCurveListener(this);
HHhmaskcieshape->setIdentityValue(0.);
HHhmaskcieshape->setResetCurve(FlatCurveType(defSpot.HHhmaskciecurve.at(0)), defSpot.HHhmaskciecurve);
HHhmaskcieshape->setCurveColorProvider(this, 2);
HHhmaskcieshape->setBottomBarColorProvider(this, 2);
maskcieHCurveEditorG->curveListComplete();
chromaskcie->setAdjusterListener(this);
mask2cieCurveEditorG->setCurveListener(this);
Lmaskcieshape->setResetCurve(DiagonalCurveType(defSpot.Lmaskciecurve.at(0)), defSpot.Lmaskciecurve);
Lmaskcieshape->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
Lmaskcieshape->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2cieCurveEditorG->curveListComplete();
mask2cieCurveEditorGwav->setCurveListener(this);
LLmaskcieshapewav->setIdentityValue(0.);
LLmaskcieshapewav->setResetCurve(FlatCurveType(defSpot.LLmaskciecurvewav.at(0)), defSpot.LLmaskciecurvewav);
LLmaskcieshapewav->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
mask2cieCurveEditorGwav->curveListComplete();
csThresholdcie->setAdjusterListener(this);
strgradcie->setAdjusterListener(this);
anggradcie->setAdjusterListener(this);
feathercie->setAdjusterListener(this);
ToolParamBlock* const cieBoxgrad = Gtk::manage(new ToolParamBlock());
cieBoxgrad->pack_start(*strgradcie);
cieBoxgrad->pack_start(*anggradcie);
cieBoxgrad->pack_start(*feathercie);
expgradcie->add(*cieBoxgrad, false);
pack_start(*expgradcie, false, false);
ToolParamBlock* const cieBox3 = Gtk::manage(new ToolParamBlock());
cieBox3->pack_start(*maskusablecie, Gtk::PACK_SHRINK, 0);
cieBox3->pack_start(*maskunusablecie, Gtk::PACK_SHRINK, 0);
cieBox3->pack_start(*recothrescie);
cieBox3->pack_start(*lowthrescie);
cieBox3->pack_start(*higthrescie);
cieBox3->pack_start(*decaycie);
exprecovcie->add(*cieBox3, false);
pack_start(*exprecovcie, false, false);
ToolParamBlock* const maskcieBox = Gtk::manage(new ToolParamBlock());
maskcieBox->pack_start(*showmaskcieMethod, Gtk::PACK_SHRINK, 4);
maskcieBox->pack_start(*enacieMask, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*enacieMaskall, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*maskcieCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
ToolParamBlock* const strumBoxcie = Gtk::manage(new ToolParamBlock());
strumBoxcie->pack_start(*strumaskcie);
strumBoxcie->pack_start(*toolcie);
struFramecie->add(*strumBoxcie);
maskcieBox->pack_start(*struFramecie, Gtk::PACK_SHRINK, 0);
ToolParamBlock* const blurcieBox = Gtk::manage(new ToolParamBlock());
blurcieBox->pack_start(*fftcieMask, Gtk::PACK_SHRINK, 0);
blurcieBox->pack_start(*contcie);
blurcieBox->pack_start(*blurcie);
blurFramecie->add(*blurcieBox);
maskcieBox->pack_start(*blurFramecie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*blendmaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*radmaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*chromaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*gammaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*slomaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*highmaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*shadmaskcie, Gtk::PACK_SHRINK, 0);
maskcieBox->pack_start(*maskcieHCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
maskcieBox->pack_start(*mask2cieCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
wavFramecie->set_label_align(0.025, 0.5);
ToolParamBlock* const toolcieBox2 = Gtk::manage(new ToolParamBlock());
toolcieBox2->pack_start(*mask2cieCurveEditorGwav, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
toolcieBox2->pack_start(*csThresholdcie, Gtk::PACK_SHRINK, 0);
wavFramecie->add(*toolcieBox2);
maskcieBox->pack_start(*wavFramecie);
expmaskcie->add(*maskcieBox, false);
pack_start(*expmaskcie, false, false);
}
void Locallabcie::setListener(ToolPanelListener* tpl)
{
LocallabTool::setListener(tpl);
// labgridcie->setListener(tpl);
}
Locallabcie::~Locallabcie()
{
delete jz1CurveEditorG;
delete jz2CurveEditorG;
delete jz3CurveEditorG;
delete cieCurveEditorG;
delete cieCurveEditorG2;
delete maskcieCurveEditorG;
delete maskcieHCurveEditorG;
delete mask2cieCurveEditorG;
delete LocalcurveEditorwavjz;
delete mask2cieCurveEditorGwav;
}
bool Locallabcie::isMaskViewActive()
{
return ((showmaskcieMethod->get_active_row_number() != 0));
}
void Locallabcie::resetMaskView()
{
showmaskcieMethodConn.block(true);
showmaskcieMethod->set_active(0);
showmaskcieMethodConn.block(false);
}
void Locallabcie::getMaskView(int &colorMask, int &colorMaskinv, int &expMask, int &expMaskinv, int &shMask, int &shMaskinv, int &vibMask, int &softMask, int &blMask, int &tmMask, int &retiMask, int &sharMask, int &lcMask, int &cbMask, int &logMask, int &maskMask, int &cieMask)
{
cieMask = showmaskcieMethod->get_active_row_number();
}
Gtk::ToggleButton *Locallabcie::getPreviewDeltaEButton() const
{
return previewcie;
}
sigc::connection *Locallabcie::getPreviewDeltaEButtonConnection()
{
return &previewcieConn;
}
//new function Global
void Locallabcie::updateguicie(int spottype)
{
{
idle_register.add(
[this, spottype]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update GUI fullimage or main
disableListener();
if(spottype == 3) {
sensicie->hide();
previewcie->hide();
exprecovcie->hide();
expmaskcie->hide();
enacieMask->set_active(false);
enacieMaskall->set_active(false);
previewcie->set_active(false);
} else {
sensicie->show();
previewcie->show();
exprecovcie->show();
expmaskcie->show();
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
}
enableListener();
return false;
}
);
}
}
void Locallabcie::previewcieChanged()
{
if(previewcie->get_active()) {
showmaskcieMethod->set_active(4);
} else {
showmaskcieMethod->set_active(0);
}
if (isLocActivated) {
if (listener) {
listener->panelChanged(Evlocallabpreviewcie,"");
}
}
}
void Locallabcie::setDefaultExpanderVisibility()
{
expLcie->set_expanded(true);
expjz->set_expanded(false);
expwavjz->set_expanded(false);
expcamscene->set_expanded(false);
expcam16->set_expanded(false);
expcamviewing->set_expanded(false);
expprecam->set_expanded(false);
expmaskcie->set_expanded(false);
exprecovcie->set_expanded(false);
expgradcie->set_expanded(false);
}
void Locallabcie::updateAdviceTooltips(const bool showTooltips)
{
if (showTooltips) {
recothrescie->set_tooltip_text(M("TP_LOCALLAB_RECOTHRES02_TOOLTIP"));
reparcie->set_tooltip_text(M("TP_LOCALLAB_LOGREPART_TOOLTIP"));
expcamscene->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP"));
PQFrame->set_tooltip_text(M("TP_LOCALLAB_JZPQFRA_TOOLTIP"));
qtoj->set_tooltip_text(M("TP_LOCALLAB_JZQTOJ_TOOLTIP"));
logcie->set_tooltip_text(M("TP_LOCALLAB_LOGCIE_TOOLTIP"));
smoothcie->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP"));
slopesmo->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP"));
// smoothciemet->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP"));
modecam->set_tooltip_text(M("TP_LOCALLAB_JZMODECAM_TOOLTIP"));
adapjzcie->set_tooltip_text(M("TP_LOCALLAB_JABADAP_TOOLTIP"));
jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP"));
pqremap->set_tooltip_text(M("TP_LOCALLAB_JZPQREMAP_TOOLTIP"));
pqremapcam16->set_tooltip_text(M("TP_LOCALLAB_CAM16PQREMAP_TOOLTIP"));
Autograycie->set_tooltip_text(M("TP_LOCALLAB_LOGAUTOGRAYJZ_TOOLTIP"));
sigmalcjz->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
logjzFrame->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP"));
blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP"));
whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP"));
clariFramejz->set_tooltip_markup(M("TP_LOCALLAB_CLARIJZ_TOOLTIP"));
clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIL_TOOLTIP"));
claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIC_TOOLTIP"));
clarisoftjz->set_tooltip_markup(M("TP_LOCALLAB_CLARISOFTJZ_TOOLTIP"));
wavshapejz->setTooltip(M("TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP"));
LocalcurveEditorwavjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP"));
csThresholdjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP"));
sourceGraycie->set_tooltip_text(M("TP_LOCALLAB_JZLOGYBOUT_TOOLTIP"));
sourceabscie->set_tooltip_text(M("TP_COLORAPP_ADAPSCEN_TOOLTIP"));
cie1Frame->set_tooltip_text(M("TP_LOCALLAB_LOGIMAGE_TOOLTIP"));
smoothFrame->set_tooltip_text(M("TP_LOCALLAB_SMOOTHCIE_TOOLTIP"));
// sigmoidFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID16_TOOLTIP"));
// sigmoidjzFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP"));
contlcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTL_TOOLTIP"));
contqcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTQ_TOOLTIP"));
contthrescie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTTHRES_TOOLTIP"));
colorflcie->set_tooltip_text(M("TP_LOCALLAB_LOGCOLORF_TOOLTIP"));
lightlcie->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTL_TOOLTIP"));
lightqcie->set_tooltip_text(M("TP_LOCALLAB_LOGLIGHTQ_TOOLTIP"));
saturlcie->set_tooltip_text(M("TP_LOCALLAB_LOGSATURL_TOOLTIP"));
rstprotectcie->set_tooltip_text(M("TP_LOCALLAB_RSTPROTECT_TOOLTIP"));
chromlcie->set_tooltip_text(M("TP_COLORAPP_CHROMA_TOOLTIP"));
targabscie->set_tooltip_text(M("TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP"));
targetGraycie->set_tooltip_text(M("TP_COLORAPP_YBOUT_TOOLTIP"));
detailcie->set_tooltip_text(M("TP_LOCALLAB_LOGDETAIL_TOOLTIP"));
catadcie->set_tooltip_text(M("TP_LOCALLAB_LOGCATAD_TOOLTIP"));
expcamviewing->set_tooltip_text(M("TP_LOCALLAB_LOGVIEWING_TOOLTIP"));
sensicie->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP"));
CCmaskcieshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
LLmaskcieshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
HHmaskcieshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP"));
expmaskcie->set_tooltip_markup(M("TP_LOCALLAB_MASK_TOOLTIP"));
blendmaskcie->set_tooltip_text(M("TP_LOCALLAB_BLENDMASK_TOOLTIP"));
radmaskcie->set_tooltip_text(M("TP_LOCALLAB_LAPRAD_TOOLTIP"));
mask2cieCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP"));
Lmaskcieshape->setTooltip(M("TP_LOCALLAB_LMASK_LL_TOOLTIP"));
exprecovcie->set_tooltip_markup(M("TP_LOCALLAB_MASKRESH_TOOLTIP"));
expgradcie->set_tooltip_text(M("TP_LOCALLAB_EXPGRADCOL_TOOLTIP"));
strumaskcie->set_tooltip_text(M("TP_LOCALLAB_STRUSTRMASK_TOOLTIP"));
fftcieMask->set_tooltip_text(M("TP_LOCALLAB_FFTMASK_TOOLTIP"));
contcie->set_tooltip_text(M("TP_LOCALLAB_CONTTHMASK_TOOLTIP"));
blurcie->set_tooltip_text(M("TP_LOCALLAB_BLURRMASK_TOOLTIP"));
LLmaskcieshapewav->setTooltip(M("TP_LOCALLAB_LMASK_LEVEL_TOOLTIP"));
maskcieHCurveEditorG->set_tooltip_text(M("TP_LOCALLAB_HHMASK_TOOLTIP"));
comprcieth->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDQJCOMPRCIE_TOOLTIP"));
gamjcie->set_tooltip_text(M("TP_LOCALLAB_PRECAM_TOOLTIP"));
slopjcie->set_tooltip_text(M("TP_LOCALLAB_PRECAM_TOOLTIP"));
trcFrame->set_tooltip_text(M("TP_LOCALLAB_PRECAM_TOOLTIP"));
midtcie->set_tooltip_text(M("TP_LOCALLAB_PRECAM_TOOLTIP"));
whitescie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP"));
blackscie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDWHITESCIE_TOOLTIP"));
normcie12->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIE_TOOLTIP"));
sigmoidblcie12->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIEDISP_TOOLTIP"));
sigmoidbljzcie12->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIEDISP_TOOLTIP"));
sigmoidblcie->set_tooltip_text(M("TP_LOCALLAB_SIGMOIDNORMCIEBLEND_TOOLTIP"));
catBox->set_tooltip_text(M("TP_ICM_WORKING_CAT_TOOLTIP"));
wprimBox->set_tooltip_text(M("TP_ICM_WORKING_PRIM_TOOLTIP"));
expprecam->set_tooltip_text(M("TP_LOCALLAB_PRECAM_TOOLTIP"));
refi->set_tooltip_text(M("TP_LOCALLAB_PRECAMREFI_TOOLTIP"));
colorFramecie->set_tooltip_text(M("TP_LOCALLAB_PRECAMREFIMAIN_TOOLTIP"));
gamutcie->set_tooltip_text(M("TP_LOCALLAB_PRECAMGAMUT_TOOLTIP"));
shiftxl->set_tooltip_text(M("TC_LOCALLAB_PRIM_SHIFTX_TOOLTIP"));
shiftyl->set_tooltip_text(M("TC_LOCALLAB_PRIM_SHIFTX_TOOLTIP"));
} else {
reparcie->set_tooltip_text("");
recothrescie->set_tooltip_text("");
expcamscene->set_tooltip_text("");
PQFrame->set_tooltip_text("");
modecam->set_tooltip_text("");
qtoj->set_tooltip_text("");
logcie->set_tooltip_text("");
jabcie->set_tooltip_text("");
adapjzcie->set_tooltip_text("");
jz100->set_tooltip_text("");
logjzFrame->set_tooltip_text("");
blackEvjz->set_tooltip_text("");
whiteEvjz->set_tooltip_text("");
pqremap->set_tooltip_text("");
pqremapcam16->set_tooltip_text("");
Autograycie->set_tooltip_text("");
sourceGraycie->set_tooltip_text("");
sourceabscie->set_tooltip_text("");
cie1Frame->set_tooltip_text("");
// sigmoidFrame->set_tooltip_text("");
// sigmoidjzFrame->set_tooltip_text("");
contlcie->set_tooltip_text("");
contqcie->set_tooltip_text("");
contthrescie->set_tooltip_text("");
colorflcie->set_tooltip_text("");
lightlcie->set_tooltip_text("");
lightqcie->set_tooltip_text("");
saturlcie->set_tooltip_text("");
rstprotectcie->set_tooltip_text("");
chromlcie->set_tooltip_text("");
targabscie->set_tooltip_text("");
targetGraycie->set_tooltip_text("");
detailcie->set_tooltip_text("");
catadcie->set_tooltip_text("");
expcamviewing->set_tooltip_text("");
sensicie->set_tooltip_text("");
CCmaskcieshape->setTooltip("");
LLmaskcieshape->setTooltip("");
HHmaskcieshape->setTooltip("");
expmaskcie->set_tooltip_markup("");
blendmaskcie->set_tooltip_text("");
radmaskcie->set_tooltip_text("");
mask2cieCurveEditorG->set_tooltip_text("");
Lmaskcieshape->setTooltip("");
exprecovcie->set_tooltip_markup("");
expgradcie->set_tooltip_markup("");
sigmalcjz->set_tooltip_text("");
clarilresjz->set_tooltip_text("");
claricresjz->set_tooltip_text("");
clarisoftjz->set_tooltip_markup("");
clariFramejz->set_tooltip_markup("");
wavshapejz->setTooltip("");
LocalcurveEditorwavjz->set_tooltip_markup("");
csThresholdjz->set_tooltip_markup("");
strumaskcie->set_tooltip_text("");
fftcieMask->set_tooltip_text("");
contcie->set_tooltip_text("");
blurcie->set_tooltip_text("");
LLmaskcieshapewav->setTooltip("");
maskcieHCurveEditorG->set_tooltip_text("");
comprcieth->set_tooltip_text("");
gamjcie->set_tooltip_text("");
slopjcie->set_tooltip_text("");
trcFrame->set_tooltip_text("");
midtcie->set_tooltip_text("");
smoothcie->set_tooltip_text("");
slopesmo->set_tooltip_text("");
smoothFrame->set_tooltip_text("");
// smoothciemet->set_tooltip_text("");
whitescie->set_tooltip_text("");
blackscie->set_tooltip_text("");
normcie12->set_tooltip_text("");
sigmoidblcie12->set_tooltip_text("");
sigmoidbljzcie12->set_tooltip_text("");
catBox->set_tooltip_text("");
expprecam->set_tooltip_text("");
wprimBox->set_tooltip_text("");
refi->set_tooltip_text("");
gamutcie->set_tooltip_text("");
colorFramecie->set_tooltip_text("");
shiftxl->set_tooltip_text("");
shiftyl->set_tooltip_text("");
}
}
void Locallabcie::disableListener()
{
LocallabTool::disableListener();
AutograycieConn.block(true);
sigybjz12Conn.block(true);
qtojConn.block(true);
jabcieConn.block(true);
comprcieautoconn.block(true);
normcie12conn.block(true);
normcieconn.block(true);
expprecamconn.block(true);
gamutcieconn.block(true);
bwcieconn.block(true);
primMethodconn.block(true);
illMethodconn.block(true);
smoothciemetconn.block(true);
catMethodconn.block(true);
sigcieconn.block(true);
logcieconn.block(true);
satcieconn.block(true);
logcieqconn.block(true);
smoothcieconn.block(true);
smoothcielnkconn.block(true);
smoothcietrcconn.block(true);
smoothcietrcrelconn.block(true);
smoothcieybconn.block(true);
smoothcielumconn.block(true);
smoothciehighconn.block(true);
logjzconn.block(true);
sigjz12conn.block(true);
sigjzconn.block(true);
forcebwconn.block(true);
sigq12conn.block(true);
sigqconn.block(true);
chjzcieconn.block(true);
sursourcieconn.block(true);
surroundcieconn.block(true);
modecieconn.block(true);
modecamconn.block(true);
modeQJconn.block(true);
bwevMethod12Conn.block(true);
bwevMethodConn.block(true);
toneMethodcieConn.block(true);
toneMethodcieConn2.block(true);
showmaskcieMethodConn.block(true);
toolcieConn.block(true);
enacieMaskConn.block(true);
enacieMaskallConn.block(true);
fftcieMaskConn.block(true);
}
void Locallabcie::enableListener()
{
LocallabTool::enableListener();
AutograycieConn.block(false);
sigybjz12Conn.block(false);
qtojConn.block(false);
jabcieConn.block(false);
comprcieautoconn.block(false);
normcie12conn.block(false);
normcieconn.block(false);
expprecamconn.block(false);
gamutcieconn.block(false);
bwcieconn.block(false);
primMethodconn.block(false);
illMethodconn.block(false);
smoothciemetconn.block(false);
catMethodconn.block(false);
sigcieconn.block(false);
logcieconn.block(false);
satcieconn.block(false);
logcieqconn.block(false);
smoothcieconn.block(false);
smoothcielnkconn.block(false);
smoothcietrcconn.block(false);
smoothcietrcrelconn.block(false);
smoothcieybconn.block(false);
smoothcielumconn.block(false);
smoothciehighconn.block(false);
logjzconn.block(false);
sigjz12conn.block(false);
sigjzconn.block(false);
forcebwconn.block(false);
sigq12conn.block(false);
sigqconn.block(false);
chjzcieconn.block(false);
sursourcieconn.block(false);
surroundcieconn.block(false);
modecieconn.block(false);
modecamconn.block(false);
modeQJconn.block(false);
bwevMethod12Conn.block(false);
bwevMethodConn.block(false);
toneMethodcieConn.block(false);
toneMethodcieConn2.block(false);
showmaskcieMethodConn.block(false);
toolcieConn.block(false);
enacieMaskConn.block(false);
enacieMaskallConn.block(false);
fftcieMaskConn.block(false);
}
void Locallabcie::showmaskcieMethodChanged()
{
// If mask preview is activated, deactivate other Shadow highlight mask preview
// If mask preview is activated, deactivate all other tool mask preview
if (locToolListener) {
// locToolListener->resetOtherMaskView(this);
}
if (exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabshowmaskMethod, "");
}
}
}
void Locallabcie::enacieMaskChanged()
{
if (enacieMask->get_active()) {
maskusablecie->show();
maskunusablecie->hide();
} else {
maskusablecie->hide();
maskunusablecie->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enacieMask->get_active()) {
listener->panelChanged(EvLocallabEnacieMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabEnacieMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::enacieMaskallChanged2()
{
const LocallabParams::LocallabSpot defSpot;
if(!enacieMaskall->get_active()) {
lapmaskcie->setValue(defSpot.lapmaskcie);
gammaskcie->setValue(defSpot.gammaskcie);
slomaskcie->setValue(defSpot.slomaskcie);
highmaskcie->setValue(defSpot.highmaskcie);
shadmaskcie->setValue(defSpot.shadmaskcie);
HHhmaskcieshape->setCurve(defSpot.HHhmaskciecurve);
strumaskcie->setValue(defSpot.strumaskcie);
toolcie->set_active(defSpot.toolcie);
fftcieMask->set_active(defSpot.fftcieMask);
LLmaskcieshapewav->setCurve(defSpot.LLmaskciecurvewav);
lapmaskcie->hide();
gammaskcie->hide();
slomaskcie->hide();
highmaskcie->hide();
shadmaskcie->hide();
maskcieHCurveEditorG->hide();
struFramecie->hide();
blurFramecie->hide();
strumaskcie->hide();
contcie->setValue(defSpot.contcie);
blurcie->setValue(defSpot.blurcie);
toolcie->hide();
fftcieMask->hide();
mask2cieCurveEditorGwav->hide();
wavFramecie->hide();
} else {
lapmaskcie->show();
gammaskcie->show();
slomaskcie->show();
highmaskcie->show();
shadmaskcie->show();
maskcieHCurveEditorG->show();
struFramecie->show();
blurFramecie->show();
strumaskcie->show();
toolcie->show();
fftcieMask->show();
mask2cieCurveEditorGwav->show();
wavFramecie->show();
}
}
void Locallabcie::enacieMaskallChanged()
{
enacieMaskallChanged2();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (enacieMaskall->get_active()) {
listener->panelChanged(EvlocallabenacieMaskall,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvlocallabenacieMaskall,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::toolcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (toolcie->get_active()) {
listener->panelChanged(EvLocallabtoolcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabtoolcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::fftcieMaskChanged()
{
// updateColorGUI3(); // Update GUI according to fftColorMash button state
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (fftcieMask->get_active()) {
listener->panelChanged(EvLocallabfftcieMask,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocallabfftcieMask,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
disableListener();
nbmaskcie = 0;
// Update GUI to selected spot value
const int index = pp->locallab.selspot;
Glib::ustring prof = pp->icm.workingProfile;
if (index < (int)pp->locallab.spots.size()) {
const LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
exp->set_visible(spot.visicie);
exp->setEnabled(spot.expcie);
complexity->set_active(spot.complexcie);
expprecam->setEnabled(spot.expprecam);
reparcie->setValue(spot.reparcie);
sensicie->setValue(spot.sensicie);
if (spot.modecam == "cam16") {
modecam->set_active(0);
} else if (spot.modecam == "jz") {
modecam->set_active(1);
}
if (spot.modeQJ == "511") {
modeQJ->set_active(0);
} else if (spot.modeQJ == "512") {
modeQJ->set_active(1);
}
if (spot.modecie == "com") {
modecie->set_active(0);
} else if (spot.modecie == "tm") {
modecie->set_active(1);
} else if (spot.modecie == "wav") {
modecie->set_active(2);
} else if (spot.modecie == "dr") {
modecie->set_active(3);
// } else if (spot.modecie == "log") {
// modecie->set_active (4);
}
if (spot.toneMethodcie == "one") {
toneMethodcie->set_active(0);
} else if (spot.toneMethodcie == "two") {
toneMethodcie->set_active(1);
}
if (spot.toneMethodcie2 == "onec") {
toneMethodcie2->set_active(0);
} else if (spot.toneMethodcie2 == "twoc") {
toneMethodcie2->set_active(1);
} else if (spot.toneMethodcie2 == "thrc") {
toneMethodcie2->set_active(2);
}
Autograycie->set_active(spot.Autograycie);
sigybjz12->set_active(spot.sigybjz12);
qtoj->set_active(spot.qtoj);
sourceGraycie->setValue(spot.sourceGraycie);
comprcieauto->set_active(spot.comprcieauto);
if (Autograycie->get_active()) {
comprcieauto->set_active(true);
}
if (spot.smoothciemet == "none") {
smoothciemet->set_active(0);
} else if (spot.smoothciemet == "Ev") {
smoothciemet->set_active(1);
} else if (spot.smoothciemet == "gam") {
smoothciemet->set_active(2);
} else if (spot.smoothciemet == "gamnorol") {
smoothciemet->set_active(3);
} else if (spot.smoothciemet == "level") {
smoothciemet->set_active(4);
} else if (spot.smoothciemet == "sigm") {
smoothciemet->set_active(5);
}
if (spot.illMethod == "d41") {
illMethod->set_active(0);
} else if (spot.illMethod == "d50") {
illMethod->set_active(1);
} else if (spot.illMethod == "d55") {
illMethod->set_active(2);
} else if (spot.illMethod == "d60") {
illMethod->set_active(3);
} else if (spot.illMethod == "d65") {
illMethod->set_active(4);
} else if (spot.illMethod == "d80") {
illMethod->set_active(5);
} else if (spot.illMethod == "d120") {
illMethod->set_active(6);
} else if (spot.illMethod == "stda") {
illMethod->set_active(7);
} else if (spot.illMethod == "T2000") {
illMethod->set_active(8);
} else if (spot.illMethod == "T1500") {
illMethod->set_active(9);
} else if (spot.illMethod == "iE") {
illMethod->set_active(10);
}
illMethod->set_sensitive(false);
if (spot.primMethod == "pro") {
primMethod->set_active(0);
illMethod->set_active(1);
} else if (spot.primMethod == "beta") {
primMethod->set_active(1);
illMethod->set_active(1);
} else if (spot.primMethod == "wid") {
primMethod->set_active(2);
illMethod->set_active(1);
} else if (spot.primMethod == "ac1") {
primMethod->set_active(3);
illMethod->set_active(3);
} else if (spot.primMethod == "rec") {
primMethod->set_active(4);
illMethod->set_active(4);
} else if (spot.primMethod == "ado") {
primMethod->set_active(5);
illMethod->set_active(4);
} else if (spot.primMethod == "srgb") {
primMethod->set_active(6);
illMethod->set_active(4);
} else if (spot.primMethod == "jdcmax") {
primMethod->set_active(7);
illMethod->set_active(1);
} else if (spot.primMethod == "jdcmaxstdA") {
primMethod->set_active(8);
illMethod->set_active(7);
} else if (spot.primMethod == "ac0") {
primMethod->set_active(9);
illMethod->set_active(3);
} else if (spot.primMethod == "best") {
primMethod->set_active(10);
illMethod->set_active(1);
} else if (spot.primMethod == "bru") {
primMethod->set_active(11);
illMethod->set_active(4);
} else if (spot.primMethod == "free") {
primMethod->set_active(12);
illMethod->set_sensitive(true);
}
if (spot.catMethod == "brad") {
catMethod->set_active(0);
} else if (spot.catMethod == "cat16") {
catMethod->set_active(1);
} else if (spot.catMethod == "cat02") {
catMethod->set_active(2);
} else if (spot.catMethod == "vky") {
catMethod->set_active(3);
} else if (spot.catMethod == "xyz") {
catMethod->set_active(4);
}
normcie12->set_active(spot.normcie12);
normcie->set_active(spot.normcie);
gamutcie->set_active(spot.gamutcie);
bwcie->set_active(spot.bwcie);
sigcie->set_active(spot.sigcie);
logcie->set_active(spot.logcie);
satcie->set_active(spot.satcie);
logcieq->set_active(spot.logcieq);
smoothcie->set_active(spot.smoothcie);
smoothcielnk->set_active(spot.smoothcielnk);
smoothcietrc->set_active(spot.smoothcietrc);
smoothcietrcrel->set_active(spot.smoothcietrcrel);
smoothcieyb->set_active(spot.smoothcieyb);
smoothcielum->set_active(spot.smoothcielum);
smoothciehigh->set_active(spot.smoothciehigh);
logjz->set_active(spot.logjz);
sigjz12->set_active(spot.sigjz12);
sigjz->set_active(spot.sigjz);
forcebw->set_active(spot.forcebw);
sigq12->set_active(spot.sigq12);
sigq->set_active(spot.sigq);
chjzcie->set_active(true);//force to true to avoid other mode
sourceabscie->setValue(spot.sourceabscie);
jabcie->set_active(spot.jabcie);
jabcieChanged();
modecamChanged();
modeQJChanged();
sursourcieChanged();
bwevMethod12Changed();
bwevMethodChanged();
normcie12Changed();
normcieChanged();
expprecamChanged();
gamutcieChanged();
bwcieChanged();
sigcieChanged();
comprcieautoChanged();
sigq12Changed();
sigqChanged();
logcieChanged();
satcieChanged();
logcieqChanged();
smoothcieChanged();
smoothcielnkChanged();
smoothcietrcChanged();
smoothcietrcrelChanged();
smoothcieybChanged();
smoothcielumChanged();
smoothciehighChanged();
primMethodChanged();
illMethodChanged();
smoothciemetChanged();
if (spot.bwevMethod12 == "sigQ") {
bwevMethod12->set_active(0);
} else if (spot.bwevMethod12 == "slop") {
bwevMethod12->set_active(1);
}
if (spot.bwevMethod == "none") {
bwevMethod->set_active(0);
} else if (spot.bwevMethod == "sig") {
bwevMethod->set_active(1);
}
if (spot.sursourcie == "Average") {
sursourcie->set_active(0);
} else if (spot.sursourcie == "Dim") {
sursourcie->set_active(1);
} else if (spot.sursourcie == "Dark") {
sursourcie->set_active(2);
} else if (spot.sursourcie == "exDark") {
sursourcie->set_active(3);
} else if (spot.sursourcie == "disacie") {
sursourcie->set_active(4);
}
if (spot.surroundcie == "Average") {
surroundcie->set_active(0);
} else if (spot.surroundcie == "Dim") {
surroundcie->set_active(1);
} else if (spot.surroundcie == "Dark") {
surroundcie->set_active(2);
}
shapecie->setCurve(spot.ciecurve);
shapecie2->setCurve(spot.ciecurve2);
shapejz->setCurve(spot.jzcurve);
shapecz->setCurve(spot.czcurve);
shapeczjz->setCurve(spot.czjzcurve);
HHshapejz->setCurve(spot.HHcurvejz);
CHshapejz->setCurve(spot.CHcurvejz);
LHshapejz->setCurve(spot.LHcurvejz);
saturlcie->setValue(spot.saturlcie);
rstprotectcie->setValue(spot.rstprotectcie);
chromlcie->setValue(spot.chromlcie);
huecie->setValue(spot.huecie);
chromjzcie->setValue(spot.chromjzcie);
saturjzcie->setValue(spot.saturjzcie);
huejzcie->setValue(spot.huejzcie);
softjzcie->setValue(spot.softjzcie);
strsoftjzcie->setValue(spot.strsoftjzcie);
thrhjzcie->setValue(spot.thrhjzcie);
lightlcie->setValue(spot.lightlcie);
lightjzcie->setValue(spot.lightjzcie);
lightqcie->setValue(spot.lightqcie);
lightsigqcie->setValue(spot.lightsigqcie);
contlcie->setValue(spot.contlcie);
contjzcie->setValue(spot.contjzcie);
detailciejz->setValue(spot.detailciejz);
adapjzcie->setValue(spot.adapjzcie);
jz100->setValue(spot.jz100);
pqremap->setValue(spot.pqremap);
pqremapcam16->setValue(spot.pqremapcam16);
hljzcie->setValue(spot.hljzcie);
hlthjzcie->setValue(spot.hlthjzcie);
shjzcie->setValue(spot.shjzcie);
shthjzcie->setValue(spot.shthjzcie);
radjzcie->setValue(spot.radjzcie);
sigmalcjz->setValue(spot.sigmalcjz);
wavshapejz->setCurve(spot.locwavcurvejz);
csThresholdjz->setValue<int>(spot.csthresholdjz);
clarilresjz->setValue(spot.clarilresjz);
claricresjz->setValue(spot.claricresjz);
clarisoftjz->setValue(spot.clarisoftjz);
contthrescie->setValue(spot.contthrescie);
blackEvjz->setValue(spot.blackEvjz);
whiteEvjz->setValue(spot.whiteEvjz);
targetjz->setValue(spot.targetjz);
sigmoidldacie12->setValue(spot.sigmoidldacie12);
sigmoidthcie12->setValue(spot.sigmoidthcie12);
sigmoidblcie12->setValue(spot.sigmoidblcie12);
sigmoidldacie->setValue(spot.sigmoidldacie);
sigmoidthcie->setValue(spot.sigmoidthcie);
sigmoidblcie->setValue(spot.sigmoidblcie);
sigmoidsenscie->setValue(spot.sigmoidsenscie);
comprcie->setValue(spot.comprcie);
strcielog->setValue(spot.strcielog);
comprcieth->setValue(spot.comprcieth);
gamjcie->setValue(spot.gamjcie);
smoothcieth->setValue(spot.smoothcieth);
slopjcie->setValue(spot.slopjcie);
contsig->setValue(spot.contsig);
skewsig->setValue(spot.skewsig);
whitsig->setValue(spot.whitsig);
slopesmo->setValue(spot.slopesmo);
slopesmoq->setValue(spot.slopesmoq);
slopesmor->setValue(spot.slopesmor);
slopesmog->setValue(spot.slopesmog);
slopesmob->setValue(spot.slopesmob);
kslopesmor->setValue(spot.kslopesmor);
kslopesmog->setValue(spot.kslopesmog);
kslopesmob->setValue(spot.kslopesmob);
midtcie->setValue(spot.midtcie);
whitescie->setValue(spot.whitescie);
blackscie->setValue(spot.blackscie);
sigmoidldajzcie12->setValue(spot.sigmoidldajzcie12);
sigmoidthjzcie12->setValue(spot.sigmoidthjzcie12);
sigmoidbljzcie12->setValue(spot.sigmoidbljzcie12);
sigmoidldajzcie->setValue(spot.sigmoidldajzcie);
sigmoidthjzcie->setValue(spot.sigmoidthjzcie);
sigmoidbljzcie->setValue(spot.sigmoidbljzcie);
contqcie->setValue(spot.contqcie);
contsigqcie->setValue(spot.contsigqcie);
colorflcie->setValue(spot.colorflcie);
targabscie->setValue(spot.targabscie);
targetGraycie->setValue(spot.targetGraycie);
detailcie->setValue(spot.detailcie);
catadcie->setValue(spot.catadcie);
grexl->setValue(spot.grexl);
greyl->setValue(spot.greyl);
bluxl->setValue(spot.bluxl);
bluyl->setValue(spot.bluyl);
redxl->setValue(spot.redxl);
redyl->setValue(spot.redyl);
refi->setValue(spot.refi);
shiftxl->setValue(spot.shiftxl);
shiftyl->setValue(spot.shiftyl);
labgridcie->setParams(spot.labgridcieALow,
spot.labgridcieBLow,
spot.labgridcieAHigh,
spot.labgridcieBHigh,
spot.labgridcieGx,
spot.labgridcieGy,
spot.labgridcieWx,
spot.labgridcieWy,
spot.labgridcieMx,
spot.labgridcieMy,
false);
strgradcie->setValue((double)spot.strgradcie);
anggradcie->setValue((double)spot.anggradcie);
feathercie->setValue((double)spot.feathercie);
enacieMask->set_active(spot.enacieMask);
enacieMaskall->set_active(spot.enacieMaskall);
CCmaskcieshape->setCurve(spot.CCmaskciecurve);
LLmaskcieshape->setCurve(spot.LLmaskciecurve);
HHmaskcieshape->setCurve(spot.HHmaskciecurve);
blendmaskcie->setValue((double)spot.blendmaskcie);
radmaskcie->setValue(spot.radmaskcie);
chromaskcie->setValue(spot.chromaskcie);
lapmaskcie->setValue(spot.lapmaskcie);
gammaskcie->setValue(spot.gammaskcie);
slomaskcie->setValue(spot.slomaskcie);
highmaskcie->setValue(spot.highmaskcie);
shadmaskcie->setValue(spot.shadmaskcie);
HHhmaskcieshape->setCurve(spot.HHhmaskciecurve);
Lmaskcieshape->setCurve(spot.Lmaskciecurve);
recothrescie->setValue((double)spot.recothrescie);
lowthrescie->setValue((double)spot.lowthrescie);
higthrescie->setValue((double)spot.higthrescie);
decaycie->setValue((double)spot.decaycie);
strumaskcie->setValue(spot.strumaskcie);
toolcie->set_active(spot.toolcie);
fftcieMask->set_active(spot.fftcieMask);
contcie->setValue(spot.contcie);
blurcie->setValue(spot.blurcie);
LLmaskcieshapewav->setCurve(spot.LLmaskciecurvewav);
csThresholdcie->setValue<int>(spot.csthresholdcie);
}
enableListener();
// Update GUI according to complexity mode
updateGUIToMode(static_cast<modeType>(complexity->get_active_row_number()));
// Update Ciecam GUI
updatecieGUI();
updatecielnkGUI();
}
void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
const int index = pp->locallab.selspot;
if (index < (int)pp->locallab.spots.size()) {
LocallabParams::LocallabSpot& spot = pp->locallab.spots.at(index);
spot.expcie = exp->getEnabled();
spot.visicie = exp->get_visible();
spot.complexcie = complexity->get_active_row_number();
spot.expprecam = expprecam->getEnabled();
spot.reparcie = reparcie->getValue();
spot.sensicie = sensicie->getIntValue();
if (modecam->get_active_row_number() == 0) {
spot.modecam = "cam16";
} else if (modecam->get_active_row_number() == 1) {
spot.modecam = "jz";
}
if (modeQJ->get_active_row_number() == 0) {
spot.modeQJ = "511";
} else if (modeQJ->get_active_row_number() == 1) {
spot.modeQJ = "512";
}
if (modecie->get_active_row_number() == 0) {
spot.modecie = "com";
} else if (modecie->get_active_row_number() == 1) {
spot.modecie = "tm";
} else if (modecie->get_active_row_number() == 2) {
spot.modecie = "wav";
} else if (modecie->get_active_row_number() == 3) {
spot.modecie = "dr";
// } else if (modecie->get_active_row_number() == 4) {
// spot.modecie = "log";
}
if (toneMethodcie->get_active_row_number() == 0) {
spot.toneMethodcie = "one";
} else if (toneMethodcie->get_active_row_number() == 1) {
spot.toneMethodcie = "two";
}
if (toneMethodcie2->get_active_row_number() == 0) {
spot.toneMethodcie2 = "onec";
} else if (toneMethodcie2->get_active_row_number() == 1) {
spot.toneMethodcie2 = "twoc";
} else if (toneMethodcie2->get_active_row_number() == 2) {
spot.toneMethodcie2 = "thrc";
}
spot.redxl = redxl->getValue();
spot.redyl = redyl->getValue();
spot.grexl = grexl->getValue();
spot.greyl = greyl->getValue();
spot.bluxl = bluxl->getValue();
spot.bluyl = bluyl->getValue();
spot.refi = refi->getValue();
spot.shiftxl = shiftxl->getValue();
spot.shiftyl = shiftyl->getValue();
labgridcie->getParams(spot.labgridcieALow,
spot.labgridcieBLow,
spot.labgridcieAHigh,
spot.labgridcieBHigh,
spot.labgridcieGx,
spot.labgridcieGy,
spot.labgridcieWx,
spot.labgridcieWy,
spot.labgridcieMx,
spot.labgridcieMy
);
spot.Autograycie = Autograycie->get_active();
spot.sigybjz12 = sigybjz12->get_active();
spot.qtoj = qtoj->get_active();
spot.jabcie = jabcie->get_active();
spot.sourceGraycie = sourceGraycie->getValue();
spot.sourceabscie = sourceabscie->getValue();
spot.comprcieauto = comprcieauto->get_active();
spot.normcie12 = normcie12->get_active();
spot.normcie = normcie->get_active();
spot.gamutcie = gamutcie->get_active();
spot.bwcie = bwcie->get_active();
spot.sigcie = sigcie->get_active();
spot.logcie = logcie->get_active();
spot.satcie = satcie->get_active();
spot.logcieq = logcieq->get_active();
spot.smoothcie = smoothcie->get_active();
spot.smoothcielnk = smoothcielnk->get_active();
spot.smoothcietrc = smoothcietrc->get_active();
spot.smoothcietrcrel = smoothcietrcrel->get_active();
spot.smoothcieyb = smoothcieyb->get_active();
spot.smoothcielum = smoothcielum->get_active();
spot.smoothciehigh = smoothciehigh->get_active();
spot.logjz = logjz->get_active();
spot.sigjz = sigjz->get_active();
spot.forcebw = forcebw->get_active();
spot.sigjz12 = sigjz12->get_active();
spot.chjzcie = chjzcie->get_active();
spot.sigq12 = sigq12->get_active();
spot.sigq = sigq->get_active();
if (sursourcie->get_active_row_number() == 0) {
spot.sursourcie = "Average";
} else if (sursourcie->get_active_row_number() == 1) {
spot.sursourcie = "Dim";
} else if (sursourcie->get_active_row_number() == 2) {
spot.sursourcie = "Dark";
} else if (sursourcie->get_active_row_number() == 3) {
spot.sursourcie = "exDark";
} else if (sursourcie->get_active_row_number() == 4) {
spot.sursourcie = "disacie";
}
if (bwevMethod12->get_active_row_number() == 0) {
spot.bwevMethod12 = "sigQ";
} else if (bwevMethod12->get_active_row_number() == 1) {
spot.bwevMethod12 = "slop";
}
if (bwevMethod->get_active_row_number() == 0) {
spot.bwevMethod = "none";
} else if (bwevMethod->get_active_row_number() == 1) {
spot.bwevMethod = "sig";
}
if (smoothciemet->get_active_row_number() == 0) {
spot.smoothciemet = "none";
} else if (smoothciemet->get_active_row_number() == 1) {
spot.smoothciemet = "Ev";
} else if (smoothciemet->get_active_row_number() == 2) {
spot.smoothciemet = "gam";
} else if (smoothciemet->get_active_row_number() == 3) {
spot.smoothciemet = "gamnorol";
} else if (smoothciemet->get_active_row_number() == 4) {
spot.smoothciemet = "level";
} else if (smoothciemet->get_active_row_number() == 5) {
spot.smoothciemet = "sigm";
}
if (illMethod->get_active_row_number() == 0) {
spot.illMethod = "d41";
} else if (illMethod->get_active_row_number() == 1) {
spot.illMethod = "d50";
} else if (illMethod->get_active_row_number() == 2) {
spot.illMethod = "d55";
} else if (illMethod->get_active_row_number() == 3) {
spot.illMethod = "d60";
} else if (illMethod->get_active_row_number() == 4) {
spot.illMethod = "d65";
} else if (illMethod->get_active_row_number() == 5) {
spot.illMethod = "d80";
} else if (illMethod->get_active_row_number() == 6) {
spot.illMethod = "d120";
} else if (illMethod->get_active_row_number() == 7) {
spot.illMethod = "stda";
} else if (illMethod->get_active_row_number() == 8) {
spot.illMethod = "T2000";
} else if (illMethod->get_active_row_number() == 9) {
spot.illMethod = "T1500";
} else if (illMethod->get_active_row_number() == 10) {
spot.illMethod = "iE";
}
if (primMethod->get_active_row_number() == 0) {
spot.primMethod = "pro";
} else if (primMethod->get_active_row_number() == 1) {
spot.primMethod = "beta";
} else if (primMethod->get_active_row_number() == 2) {
spot.primMethod = "wid";
} else if (primMethod->get_active_row_number() == 3) {
spot.primMethod = "ac1";
} else if (primMethod->get_active_row_number() == 4) {
spot.primMethod = "rec";
} else if (primMethod->get_active_row_number() == 5) {
spot.primMethod = "ado";
} else if (primMethod->get_active_row_number() == 6) {
spot.primMethod = "srgb";
} else if (primMethod->get_active_row_number() == 7) {
spot.primMethod = "jdcmax";
} else if (primMethod->get_active_row_number() == 8) {
spot.primMethod = "jdcmaxstdA";
} else if (primMethod->get_active_row_number() == 9) {
spot.primMethod = "ac0";
} else if (primMethod->get_active_row_number() == 10) {
spot.primMethod = "best";
} else if (primMethod->get_active_row_number() == 11) {
spot.primMethod = "bru";
} else if (primMethod->get_active_row_number() == 12) {
spot.primMethod = "free";
}
if (catMethod->get_active_row_number() == 0) {
spot.catMethod = "brad";
} else if (catMethod->get_active_row_number() == 1) {
spot.catMethod = "cat16";
} else if (catMethod->get_active_row_number() == 2) {
spot.catMethod = "cat02";
} else if (catMethod->get_active_row_number() == 3) {
spot.catMethod = "vky";
} else if (catMethod->get_active_row_number() == 4) {
spot.catMethod = "xyz";
}
if (surroundcie->get_active_row_number() == 0) {
spot.surroundcie = "Average";
} else if (surroundcie->get_active_row_number() == 1) {
spot.surroundcie = "Dim";
} else if (surroundcie->get_active_row_number() == 2) {
spot.surroundcie = "Dark";
}
spot.jzcurve = shapejz->getCurve();
spot.czcurve = shapecz->getCurve();
spot.czjzcurve = shapeczjz->getCurve();
spot.HHcurvejz = HHshapejz->getCurve();
spot.CHcurvejz = CHshapejz->getCurve();
spot.LHcurvejz = LHshapejz->getCurve();
spot.ciecurve = shapecie->getCurve();
spot.ciecurve2 = shapecie2->getCurve();
spot.saturlcie = saturlcie->getValue();
spot.rstprotectcie = rstprotectcie->getValue();
spot.chromlcie = chromlcie->getValue();
spot.huejzcie = huejzcie->getValue();
spot.softjzcie = softjzcie->getValue();
spot.strsoftjzcie = strsoftjzcie->getValue();
spot.thrhjzcie = thrhjzcie->getValue();
spot.chromjzcie = chromjzcie->getValue();
spot.saturjzcie = saturjzcie->getValue();
spot.huecie = huecie->getValue();
spot.lightlcie = lightlcie->getValue();
spot.lightjzcie = lightjzcie->getValue();
spot.lightqcie = lightqcie->getValue();
spot.lightsigqcie = lightsigqcie->getValue();
spot.contlcie = contlcie->getValue();
spot.detailciejz = detailciejz->getValue();
spot.contjzcie = contjzcie->getValue();
spot.adapjzcie = adapjzcie->getValue();
spot.jz100 = jz100->getValue();
spot.pqremap = pqremap->getValue();
spot.pqremapcam16 = pqremapcam16->getValue();
spot.hljzcie = hljzcie->getValue();
spot.hlthjzcie = hlthjzcie->getValue();
spot.shjzcie = shjzcie->getValue();
spot.shthjzcie = shthjzcie->getValue();
spot.radjzcie = radjzcie->getValue();
spot.sigmalcjz = sigmalcjz->getValue();
spot.locwavcurvejz = wavshapejz->getCurve();
spot.csthresholdjz = csThresholdjz->getValue<int>();
spot.clarilresjz = clarilresjz->getValue();
spot.claricresjz = claricresjz->getValue();
spot.clarisoftjz = clarisoftjz->getValue();
spot.contthrescie = contthrescie->getValue();
spot.blackEvjz = blackEvjz->getValue();
spot.whiteEvjz = whiteEvjz->getValue();
spot.targetjz = targetjz->getValue();
spot.sigmoidldacie12 = sigmoidldacie12->getValue();
spot.sigmoidthcie12 = sigmoidthcie12->getValue();
spot.sigmoidblcie12 = sigmoidblcie12->getValue();
spot.sigmoidldacie = sigmoidldacie->getValue();
spot.sigmoidthcie = sigmoidthcie->getValue();
spot.sigmoidblcie = sigmoidblcie->getValue();
spot.sigmoidsenscie = sigmoidsenscie->getValue();
spot.comprcie = comprcie->getValue();
spot.strcielog = strcielog->getValue();
spot.comprcieth = comprcieth->getValue();
spot.gamjcie = gamjcie->getValue();
spot.smoothcieth = smoothcieth->getValue();
spot.slopjcie = slopjcie->getValue();
spot.contsig = contsig->getValue();
spot.skewsig = skewsig->getValue();
spot.whitsig = whitsig->getValue();
spot.slopesmo = slopesmo->getValue();
spot.slopesmoq = slopesmoq->getValue();
spot.slopesmor = slopesmor->getValue();
spot.slopesmog = slopesmog->getValue();
spot.slopesmob = slopesmob->getValue();
spot.kslopesmor = kslopesmor->getValue();
spot.kslopesmog = kslopesmog->getValue();
spot.kslopesmob = kslopesmob->getValue();
spot.midtcie = midtcie->getIntValue();
spot.whitescie = whitescie->getIntValue();
spot.blackscie = blackscie->getIntValue();
spot.sigmoidldajzcie12 = sigmoidldajzcie12->getValue();
spot.sigmoidthjzcie12 = sigmoidthjzcie12->getValue();
spot.sigmoidbljzcie12 = sigmoidbljzcie12->getValue();
spot.sigmoidldajzcie = sigmoidldajzcie->getValue();
spot.sigmoidthjzcie = sigmoidthjzcie->getValue();
spot.sigmoidbljzcie = sigmoidbljzcie->getValue();
spot.contqcie = contqcie->getValue();
spot.contsigqcie = contsigqcie->getValue();
spot.colorflcie = colorflcie->getValue();
spot.targabscie = targabscie->getValue();
spot.targetGraycie = targetGraycie->getValue();
spot.catadcie = catadcie->getValue();
spot.detailcie = detailcie->getValue();
spot.strgradcie = strgradcie->getValue();
spot.anggradcie = anggradcie->getValue();
spot.feathercie = feathercie->getValue();
spot.enacieMask = enacieMask->get_active();
spot.enacieMaskall = enacieMaskall->get_active();
spot.LLmaskciecurve = LLmaskcieshape->getCurve();
spot.CCmaskciecurve = CCmaskcieshape->getCurve();
spot.HHmaskciecurve = HHmaskcieshape->getCurve();
spot.blendmaskcie = blendmaskcie->getIntValue();
spot.radmaskcie = radmaskcie->getValue();
spot.chromaskcie = chromaskcie->getValue();
spot.lapmaskcie = lapmaskcie->getValue();
spot.gammaskcie = gammaskcie->getValue();
spot.slomaskcie = slomaskcie->getValue();
spot.highmaskcie = highmaskcie->getValue();
spot.shadmaskcie = shadmaskcie->getValue();
spot.HHhmaskciecurve = HHhmaskcieshape->getCurve();
spot.Lmaskciecurve = Lmaskcieshape->getCurve();
spot.recothrescie = recothrescie->getValue();
spot.lowthrescie = lowthrescie->getValue();
spot.higthrescie = higthrescie->getValue();
spot.decaycie = decaycie->getValue();
spot.strumaskcie = strumaskcie->getValue();
spot.toolcie = toolcie->get_active();
spot.fftcieMask = fftcieMask->get_active();
spot.contcie = contcie->getValue();
spot.blurcie = blurcie->getValue();
spot.LLmaskciecurvewav = LLmaskcieshapewav->getCurve();
spot.csthresholdcie = csThresholdcie->getValue<int>();
}
}
void Locallabcie::toneMethodcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvLocallabtoneMethodcie,
toneMethodcie->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::toneMethodcie2Changed()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvLocallabtoneMethodcie2,
toneMethodcie2->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz)
{
idle_register.add(
[this, normHuerjz, normHuer, normLumar, normChromar]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update mask background
HHshapejz->updateLocallabBackground(normHuerjz);
CHshapejz->updateLocallabBackground(normHuerjz);
LHshapejz->updateLocallabBackground(normHuerjz);
shapejz->updateLocallabBackground(normLumar);
shapecz->updateLocallabBackground(normChromar);
shapeczjz->updateLocallabBackground(normLumar);
shapecie->updateLocallabBackground(normLumar);
shapecie2->updateLocallabBackground(normChromar);
CCmaskcieshape->updateLocallabBackground(normChromar);
LLmaskcieshape->updateLocallabBackground(normLumar);
HHmaskcieshape->updateLocallabBackground(normHuer);
Lmaskcieshape->updateLocallabBackground(normLumar);
HHhmaskcieshape->updateLocallabBackground(normHuer);
return false;
}
);
}
void Locallabcie::updatePrimloc(const float redx, const float redy, const float grex, const float grey, const float blux, const float bluy)
{
idle_register.add(
[this, redx, redy, grex, grey, blux, bluy]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update adjuster values according to autocomputed ones
disableListener();
redxl->setValue(redx);
redyl->setValue(redy);
grexl->setValue(grex);
greyl->setValue(grey);
bluxl->setValue(blux);
bluyl->setValue(bluy);
enableListener();
return false;
}
);
}
void Locallabcie::updatesigloc(const float cont_sig, const float light_sig)
{
idle_register.add(
[this, cont_sig, light_sig]() -> bool {
GThreadLock lock;
disableListener();
contsigqcie->setValue(cont_sig);
lightsigqcie->setValue(light_sig);
enableListener();
return false;
}
);
}
void Locallabcie::updateiPrimloc(const float r_x, const float r_y, const float g_x, const float g_y, const float b_x, const float b_y, const float w_x, const float w_y, const float m_x, const float m_y, const float me_x, const float me_y, const int pri_, const float slg, const bool lkg)
{
nextrx = r_x;
nextry = r_y;
nextbx = b_x;
nextby = b_y;
nextgx = g_x;
nextgy = g_y;
nextwx = w_x;
nextwy = w_y;
nextmx = m_x;
nextmy = m_y;
//convert xy datas in datas for labgrid areas
nextrx = 1.81818f * (nextrx + 0.1f) - 1.f;
nextry = 1.81818f * (nextry + 0.1f) - 1.f;
nextbx = 1.81818f * (nextbx + 0.1f) - 1.f;
nextby = 1.81818f * (nextby + 0.1f) - 1.f;
nextgx = 1.81818f * (nextgx + 0.1f) - 1.f;
nextgy = 1.81818f * (nextgy + 0.1f) - 1.f;
nextwx = 1.81818f * (nextwx + 0.1f) - 1.f;
nextwy = 1.81818f * (nextwy + 0.1f) - 1.f;
nextmx = 1.81818f * (nextmx + 0.1f) - 1.f;
nextmy = 1.81818f * (nextmy + 0.1f) - 1.f;
idle_register.add(
[this, r_x, r_y, g_x, g_y, b_x, b_y, slg, lkg]() -> bool {
GThreadLock lock;
disableListener();
redxl->setValue(r_x);
redyl->setValue(r_y);
grexl->setValue(g_x);
greyl->setValue(g_y);
bluxl->setValue(b_x);
bluyl->setValue(b_y);
labgridcie->setParams(nextrx, nextry, nextbx, nextby, nextgx, nextgy, nextwx, nextwy, nextmx, nextmy, false);
/*
if(lkg) {
slopesmor->setValue(slg);
slopesmob->setValue(slg);
adjusterChanged(slopesmor, 0.);
adjusterChanged(slopesmob, 0.);
}
*/
enableListener();
return false;
}
);
}
void Locallabcie::updateAutocompute(const float blackev, const float whiteev, const float sourceg, const float sourceab, const float targetg, const float jz1)
{
if (Autograycie->get_active()) {
idle_register.add(
[this, blackev, whiteev, sourceg, sourceab, jz1]() -> bool {
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
// Update adjuster values according to autocomputed ones
disableListener();
blackEvjz->setValue(blackev);
whiteEvjz->setValue(whiteev);
sourceGraycie->setValue(sourceg);
sourceabscie->setValue(sourceab);
pqremap->setValue(sourceab);
float sour = std::min((double) sourceab, 10000.) / 10000.f;
float pal = std::max(10. * (double) sqrt(sour), 1.5);
adapjzcie->setValue(pal);//max = 10 and min 1.5
jz100->setValue(jz1);
enableListener();
return false;
}
);
}
}
void Locallabcie::AutograycieChanged()
{
if (Autograycie->get_active()) {
sourceGraycie->set_sensitive(false);
sourceabscie->set_sensitive(false);
adapjzcie->set_sensitive(false);
jz100->set_sensitive(false);
blackEvjz->set_sensitive(false);
whiteEvjz->set_sensitive(false);
comprcieauto->set_active(true);
whitescie->set_sensitive(true);
blackscie->set_sensitive(true);
} else {
sourceGraycie->set_sensitive(true);
sourceabscie->set_sensitive(true);
adapjzcie->set_sensitive(true);
jz100->set_sensitive(true);
blackEvjz->set_sensitive(true);
whiteEvjz->set_sensitive(true);
whitescie->set_sensitive(false);
blackscie->set_sensitive(false);
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (Autograycie->get_active()) {
listener->panelChanged(EvlocallabAutograycie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvlocallabAutograycie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::sigybjz12Changed()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigybjz12->get_active()) {
listener->panelChanged(Evlocallabsigybjz12,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigybjz12,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::qtojChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (qtoj->get_active()) {
listener->panelChanged(Evlocallabqtoj,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabqtoj,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::jabcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (jabcie->get_active()) {
listener->panelChanged(Evlocallabjabcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabjabcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::comprcieautoChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (comprcieauto->get_active()) {
listener->panelChanged(Evlocallabcomprcieauto,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabcomprcieauto,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::normcie12Changed()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (normcie12->get_active()) {
listener->panelChanged(Evlocallabnormcie12,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabnormcie12,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::normcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (normcie->get_active()) {
listener->panelChanged(Evlocallabnormcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabnormcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::gamutcieChanged()
{
if (gamutcie->get_active()) {
catBox->set_sensitive(true);
} else {
catBox->set_sensitive(false);
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (gamutcie->get_active()) {
listener->panelChanged(Evlocallabgamutcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabgamutcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::bwcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (bwcie->get_active()) {
listener->panelChanged(Evlocallabbwcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabbwcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::expprecamChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (expprecam->getEnabled()) {
listener->panelChanged(Evlocallabexpprecam,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabexpprecam,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::sigcieChanged()
{
contsigqcie->hide();
lightsigqcie->hide();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigcie->get_active()) {
listener->panelChanged(Evlocallabsigcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::logcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (logcie->get_active()) {
listener->panelChanged(Evlocallablogcie_12,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallablogcie_12,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::satcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (satcie->get_active()) {
listener->panelChanged(Evlocallabsatcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsatcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::logcieqChanged()
{
if (logcieq->get_active()) {
satcie->hide();
sigmoidnormFrame->hide();
} else {
satcie->show();
sigmoidnormFrame->show();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (logcieq->get_active()) {
listener->panelChanged(Evlocallablogcieq,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallablogcieq,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::smoothcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothcie->get_active()) {
listener->panelChanged(Evlocallabsmoothcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::updatecielnkGUI()
{
if(smoothcielnk->get_active()) {
slopesmob->setValue(slopesmog->getValue());
slopesmor->setValue(slopesmog->getValue());
} else {
//
}
}
void Locallabcie::smoothcielnkChanged()
{
updatecielnkGUI();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothcielnk->get_active()) {
listener->panelChanged(Evlocallabsmoothcielnk,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothcielnk,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::smoothcietrcChanged()
{
if (smoothcietrc->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothcietrc->get_active()) {
listener->panelChanged(Evlocallabsmoothcietrc,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothcietrc,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::smoothcietrcrelChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothcietrcrel->get_active()) {
listener->panelChanged(Evlocallabsmoothcietrcrel,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothcietrcrel,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::smoothcieybChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothcieyb->get_active()) {
listener->panelChanged(Evlocallabsmoothcieyb,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothcieyb,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::smoothcielumChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothcielum->get_active()) {
listener->panelChanged(Evlocallabsmoothcielum,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothcielum,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::smoothciehighChanged()
{
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (smoothciehigh->get_active()) {
listener->panelChanged(Evlocallabsmoothciehigh,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsmoothciehigh,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::logjzChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (logjz->get_active()) {
listener->panelChanged(Evlocallablogjz,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallablogjz,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::sigjz12Changed()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigjz12->get_active()) {
listener->panelChanged(Evlocallabsigjz12,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigjz12,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::forcebwChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (forcebw->get_active()) {
listener->panelChanged(Evlocallabforcebw,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabforcebw,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::sigjzChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigjz->get_active()) {
listener->panelChanged(Evlocallabsigjz,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigjz,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::sigq12Changed()
{
contsigqcie->hide();
lightsigqcie->hide();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigq12->get_active()) {
listener->panelChanged(Evlocallabsigq_12,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigq_12,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::sigqChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigq->get_active()) {
listener->panelChanged(Evlocallabsigq,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigq,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::chjzcieChanged()
{
if (chjzcie->get_active()) {
thrhjzcie->set_sensitive(true);
} else {
thrhjzcie->set_sensitive(false);
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (chjzcie->get_active()) {
listener->panelChanged(Evlocallabchjzcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabchjzcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::modeQJChanged()
{
qjmodall();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabmodeQJ,
modeQJ->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::modecamChanged()
{
const int mode = complexity->get_active_row_number();
contsigqcie->hide();
lightsigqcie->hide();
const LocallabParams::LocallabSpot defSpot;
if (modecam->get_active_row_number() == 1) {
expjz->show();
jzFrame->show();
adapjzcie->show();
jz100->show();
pqremap->show();
jabcie->show();
PQFrame->show();
logjzFrame->show();
bevwevFrame->show();
qjmodjz();
sigmoidFrame12->hide();
expprecam->hide();
expcam16->hide();
expcamviewing->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
} else {
expjz->hide();
lapmaskcie->show();
jzFrame->hide();
adapjzcie->hide();
jz100->hide();
pqremap->hide();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
if (mode == Expert) {
pqremapcam16->show();
} else {
pqremapcam16->hide();
}
jabcie->hide();
PQFrame->hide();
logjzFrame->hide();
if (modecam->get_active_row_number() == 0) {
bevwevFrame->show();
sigmoidFrame12->show();
expprecam->show();
qjmodcam();
}
sigmoidjzFrame12->hide();
catadcie->show();
}
surHBoxcie->show();
cie1Frame->show();
expcam16->show();
expcamviewing->show();
sourceGraycie->show();
expcamscene->show();
if (modecam->get_active_row_number() == 1) {
guijzczhz();
surHBoxcie->show();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
if (mode == Expert) {
exprecovcie->show();
expmaskcie->show();
expgradcie->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
qjmodjz();
}
} else if (mode != Simple){
exprecovcie->show();
expmaskcie->show();
qjmodcam();
}
if (mode != Expert) {
expjz->hide();
jzFrame->hide();
adapjzcie->hide();
jz100->hide();
pqremap->show();
jabcie->hide();
PQFrame->hide();
logjzFrame->hide();
sigmoidjzFrame12->hide();
sigmoidFrame12->hide();
bevwevFrame->hide();
if (modecam->get_active_row_number() == 0) {
bevwevFrame->show();
sigmoidFrame12->show();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
qjmodcam();
}
if (mode == Expert) {
pqremapcam16->show();
} else {
pqremapcam16->hide();
}
catadcie->show();
sourceGraycie->show();
if (modecam->get_active_row_number() == 1) {
pqremapcam16->hide();
expcamscene->hide();
cie1Frame->hide();
expcam16->hide();
expcamviewing->hide();
catadcie->hide();
expcam16->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
} else if (mode != Simple){
exprecovcie->show();
expmaskcie->show();
}
} else {
expcamscene->show();
expcamviewing->show();
if (modecam->get_active_row_number() == 0) {
bevwevFrame->show();
sigmoidjzFrame12->hide();
expprecam->show();
lapmaskcie->show();
sigmoidjzFrame->hide();
qjmodcam();
}
if (modecam->get_active_row_number() == 1) {
targetGraycie->hide();
targabscie->hide();
surrHBoxcie->hide();
pqremapcam16->hide();
PQFrame->show();
logjzFrame->show();
sigmoidjzFrame12->show();
sigmoidFrame12->hide();
bevwevFrame->show();
catadcie->hide();
expcamviewing->hide();
expcam16->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
qjmodjz();
if (chjzcie->get_active()) {
thrhjzcie->set_sensitive(true);
} else {
thrhjzcie->set_sensitive(false);
}
}
updatecieGUI();
}
if (modecam->get_active_row_number() == 0) {
targetGraycie->show();
targabscie->show();
surrHBoxcie->show();
expprecam->show();
expcamviewing->show();
if (mode != Simple){
exprecovcie->show();
expmaskcie->show();
}
if (mode == Expert) {
pqremapcam16->show();
} else {
pqremapcam16->hide();
}
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
qjmodcam();
}
contsigqcie->hide();
lightsigqcie->hide();
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(Evlocallabmodecam,
modecam->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::modecieChanged()
{
if (isLocActivated && exp->getEnabled()) {
const int mode = complexity->get_active_row_number();
exprecovcie->show();
expmaskcie->show();
if (modecie->get_active_row_number() > 0 && mode == Expert) {
sensicie->hide();
reparcie->hide();
exprecovcie->show();
expmaskcie->show();
} else {
sensicie->show();
reparcie->show();
if (mode == Expert) {
exprecovcie->show();
expmaskcie->show();
}
}
contsigqcie->hide();
lightsigqcie->hide();
if (mode == Simple || mode == Normal) { // Keep widget hidden in Normal and Simple mode
modecie->set_active(0);
sensicie->show();
reparcie->show();
}
if (listener) {
listener->panelChanged(Evlocallabmodecie,
modecie->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::sursourcieChanged()
{
const LocallabParams::LocallabSpot defSpot;
if (sursourcie->get_active_row_number() == 4) {
expcam16->hide();
expcamviewing->hide();
} else {
expcam16->show();
expcamviewing->show();
if(modecam->get_active_row_number() == 1) {
expcam16->hide();
expcamviewing->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
}
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(Evlocallabsursourcie,
sursourcie->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::catMethodChanged()
{
if (listener) {
listener->panelChanged(Evlocallabcatcie, catMethod->get_active_text());
}
}
void Locallabcie::illMethodChanged()
{
if (listener) {
listener->panelChanged(Evlocallabillcie, illMethod->get_active_text());
}
}
void Locallabcie::smoothciemetChanged()
{
if(smoothciemet->get_active_row_number() == 3) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->show();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcieyb->hide();
smoothcieth->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
} else if(smoothciemet->get_active_row_number() == 4) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
slopesmor->show();
slopesmog->show();
slopesmob->show();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->show();
smoothciehigh->show();
smoothcielnk->show();
smoothcieyb->show();
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
} else if(smoothciemet->get_active_row_number() >= 5) {
contsig->show();
skewsig->show();
whitsig->hide();
smoothcie->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcieyb->hide();
smoothcieth->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
} else {
contsig->hide();
skewsig->hide();
whitsig->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
smoothcie->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
}
updatecieGUI();
if (listener) {
listener->panelChanged(Evlocallabsmoothciemet, smoothciemet->get_active_text());
}
}
void Locallabcie::primMethodChanged()
{
if (primMethod->get_active_row_number() == 0) {
illMethod->set_active(1);
} else if (primMethod->get_active_row_number() == 1) {
illMethod->set_active(1);
} else if (primMethod->get_active_row_number() == 2) {
illMethod->set_active(1);
} else if (primMethod->get_active_row_number() == 3) {
illMethod->set_active(3);
} else if (primMethod->get_active_row_number() == 4) {
illMethod->set_active(4);
} else if (primMethod->get_active_row_number() == 5) {
illMethod->set_active(4);
} else if (primMethod->get_active_row_number() == 6) {
illMethod->set_active(4);
} else if (primMethod->get_active_row_number() == 7) {
illMethod->set_active(1);
} else if (primMethod->get_active_row_number() == 8) {
illMethod->set_active(7);
} else if (primMethod->get_active_row_number() == 9) {
illMethod->set_active(3);
} else if (primMethod->get_active_row_number() == 10) {
illMethod->set_active(1);
} else if (primMethod->get_active_row_number() == 11) {
illMethod->set_active(4);
}
illMethod->set_sensitive(false);
if (primMethod->get_active_row_number() == 12) {
redBox->set_sensitive(true);
illMethod->set_sensitive(true);
} else {
redBox->set_sensitive(false);
}
if (listener) {
listener->panelChanged(Evlocallabprimcie, primMethod->get_active_text());
}
}
void Locallabcie::bwevMethod12Changed()
{
const LocallabParams::LocallabSpot defSpot;
const int mode = complexity->get_active_row_number();
if (bwevMethod12->get_active_row_number() == 0) {//sigmoid Q
slopesmoq->hide();
sigmoidldacie12->show();
sigmoidthcie12->show();
sigmoidblcie12->hide();
if(mode == Expert) {
sigmoidblcie12->show();
}
}
if (bwevMethod12->get_active_row_number() == 1) {//Slope based Q
slopesmoq->show();
sigmoidldacie12->hide();
sigmoidthcie12->hide();
sigmoidblcie12->hide();
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabbwevMethod12,
bwevMethod12->get_active_text());
}
}
}
void Locallabcie::bwevMethodChanged()
{
const LocallabParams::LocallabSpot defSpot;
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabbwevMethod,
bwevMethod->get_active_text());
}
}
}
void Locallabcie::surroundcieChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(Evlocallabsurroundcie,
surroundcie->get_active_text() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::guijzczhz()
{
expcamscene->hide();
cie1Frame->hide();
expcam16->hide();
pqremapcam16->hide();
PQFrame->hide();
logjzFrame->hide();
bevwevFrame->hide();
sigmoidjzFrame12->hide();
sigmoidFrame12->hide();
catadcie->hide();
expcamviewing->hide();
maskusablecie->hide();
maskunusablecie->hide();
decaycie->hide();
expmaskcie->hide();
expprecam->hide();
exprecovcie->hide();
lapmaskcie->hide();
}
void Locallabcie::qjmodcam() // enable - disable function 5.11 or 5.12 Q Cam16 tone mapper brightness
{
const int mode = complexity->get_active_row_number();
if(mode != Simple) {
if (modeQJ->get_active_row_number() == 1) { //512
sigmoidFrame12->show();
sigmoidFrame->hide();
logcieq->hide();
logcieq->set_active(false);
if(sigq->get_active()) {
sigq->set_active(false);
}
} else { //511
sigmoidFrame12->hide();
sigmoidFrame->show();
if(sigq12->get_active()) {
sigq12->set_active(false);
}
if(mode == Expert){
logcieq->show();
}
}
} else {//nothing in basic (Simple)
sigmoidFrame12->hide();
sigmoidFrame->hide();
logcieq->hide();
logcieq->set_active(false);
}
}
void Locallabcie::qjmodjz() // enable - disable function 5.11 or 5.12 J Jz tone mapper brightness
{
const int mode = complexity->get_active_row_number();
if(mode == Expert) {
if (modeQJ->get_active_row_number() == 1) {
sigmoidjzFrame12->show();
sigmoidjzFrame->hide();
if(sigjz->get_active()) {
sigjz->set_active(false);
}
} else {
sigmoidjzFrame12->hide();
sigmoidjzFrame->show();
if(sigjz12->get_active()) {
sigjz12->set_active(false);
}
}
} else {//nothing in basic (Simple) and Standard
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
}
}
void Locallabcie::qjmodall() // enable all Q and J tone mapper 5.11 5.12
{
if (modecam->get_active_row_number() == 1) {// Jz
qjmodjz();
}
if (modecam->get_active_row_number() == 0) {// Cam16
qjmodcam();
}
}
void Locallabcie::updateGUIToMode(const modeType new_type)
{
const LocallabParams::LocallabSpot defSpot;
switch (new_type) {
case Simple:
catadcie->show();
saturlcie->show();
rstprotectcie->show();
chromlcie->hide();
huecie->hide();
lightlcie->show();
lightqcie->hide();
contlcie->show();
contthrescie->show();
contqcie->hide();
colorflcie->hide();
surrHBoxcie->show();
expLcie->show();
surHBoxcie->show();
sourceabscie->show();
targabscie->show();
detailcie->show();
jabcie->hide();
modeHBoxcie->hide();
sensicie->show();
reparcie->show();
pqremapcam16->hide();
expjz->hide();
jzFrame->hide();
adapjzcie->hide();
jz100->hide();
pqremap->show();
jabcie->hide();
targetGraycie->show();
targabscie->show();
surrHBoxcie->show();
sourceGraycie->show();
expcamscene->show();
exprecovcie->hide();
maskusablecie->hide();
maskunusablecie->hide();
decaycie->hide();
expmaskcie->hide();
comprcie->show();
strcielog->show();
satcie->show();
logcieq->hide();
blackEvjz->hide();
whiteEvjz->hide();
whitescie->hide();
blackscie->hide();
logcieFrame->hide();
comprcieth->hide();
comprcieauto->hide();
comprBox->show();
whitsig->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->hide();
smoothcielum->hide();
smoothcieyb->hide();
smoothciehigh->hide();
smoothcielnk->hide();
sigmoidblcie12->hide();
if (modecam->get_active_row_number() == 0) {
bevwevFrame->show();
sigmoidFrame12->hide();
expprecam->show();
primillFrame->hide();
expmaskcie->hide();
exprecovcie->hide();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
sigmoidFrame12->hide();
sigmoidFrame->hide();
if(smoothciemet->get_active_row_number() == 3) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->show();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
} else if(smoothciemet->get_active_row_number() == 4) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
slopesmor->show();
slopesmog->show();
slopesmob->show();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothcielnk->show();
smoothciehigh->show();
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
smoothcieyb->hide();
} else if(smoothciemet->get_active_row_number() >= 5) {
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcieyb->hide();
smoothcieth->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
contsig->show();
smoothcie->hide();
skewsig->show();
whitsig->hide();
} else {
contsig->hide();
skewsig->hide();
whitsig->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
smoothcie->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
}
} else {
slopesmo->hide();
contsig->hide();
skewsig->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
smoothcieth->hide();
}
if (modecam->get_active_row_number() == 1) {
guijzczhz();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
enacieMaskall->hide();
}
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
contsigqcie->hide();
lightsigqcie->hide();
expmaskcie->hide();
exprecovcie->hide();
break;
case Normal:
// Expert mode widgets are hidden in Normal mode
catadcie->show();
saturlcie->show();
rstprotectcie->show();
chromlcie->show();
huecie->show();
lightlcie->show();
lightqcie->show();
contlcie->show();
contthrescie->show();
contqcie->show();
colorflcie->hide();
surrHBoxcie->show();
expLcie->show();
surHBoxcie->show();
sourceabscie->show();
targabscie->show();
detailcie->show();
jabcie->hide();
modeHBoxcie->hide();
sensicie->show();
reparcie->show();
if (bwevMethod12->get_active_row_number() == 0) {//sigmoid Q
slopesmoq->hide();
sigmoidldacie12->show();
sigmoidthcie12->show();
sigmoidblcie12->hide();
}
if (bwevMethod12->get_active_row_number() == 1) {//Slope based Q
slopesmoq->show();
sigmoidldacie12->hide();
sigmoidthcie12->hide();
sigmoidblcie12->hide();
}
sigmoidblcie12->show();
expjz->hide();
comprcie->show();
strcielog->show();
satcie->show();
logcieq->hide();
blackEvjz->show();
whiteEvjz->show();
whitescie->show();
blackscie->show();
logcieFrame->show();
comprcieth->show();
comprcieauto->show();
comprBox->show();
jzFrame->hide();
adapjzcie->hide();
jz100->hide();
pqremap->show();
jabcie->hide();
targetGraycie->show();
targabscie->show();
surrHBoxcie->show();
pqremapcam16->hide();
sourceGraycie->show();
expcamscene->show();
exprecovcie->show();
expmaskcie->show();
decaycie->hide();
lapmaskcie->hide();
gammaskcie->hide();
slomaskcie->hide();
highmaskcie->hide();
shadmaskcie->hide();
struFramecie->hide();
blurFramecie->hide();
wavFramecie->hide();
maskcieHCurveEditorG->hide();
sigmoidblcie12->hide();
if (enacieMask->get_active()) {
maskusablecie->show();
maskunusablecie->hide();
} else {
maskusablecie->hide();
maskunusablecie->show();
}
if (modecam->get_active_row_number() == 0 && modeQJ->get_active_row_number() == 1) {
bevwevFrame->show();
sigmoidFrame12->show();
expprecam->show();
primillFrame->hide();
enacieMaskall->hide();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
qjmodcam();
if(smoothciemet->get_active_row_number() == 3) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->show();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
} else if(smoothciemet->get_active_row_number() == 4) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
slopesmor->show();
slopesmog->show();
slopesmob->show();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothciehigh->show();
smoothcielnk->show();
smoothcieyb->hide();
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
} else if(smoothciemet->get_active_row_number() >= 5) {
contsig->show();
skewsig->show();
whitsig->hide();
slopesmo->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
smoothcie->hide();
} else {
contsig->hide();
skewsig->hide();
whitsig->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
smoothcie->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
}
}
if (modecam->get_active_row_number() == 1 ) {
guijzczhz();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
enacieMaskall->hide();
qjmodjz();
} else {
exprecovcie->show();
expmaskcie->show();
}
if (modecie->get_active_row_number() > 0) {
exprecovcie->hide();
expmaskcie->hide();
}
contsigqcie->hide();
lightsigqcie->hide();
break;
case Expert:
// Show widgets hidden in Normal and Simple mode
catadcie->show();
saturlcie->show();
rstprotectcie->show();
chromlcie->show();
huecie->show();
lightlcie->show();
lightqcie->show();
contlcie->show();
contthrescie->show();
contqcie->show();
colorflcie->show();
surrHBoxcie->show();
expLcie->show();
surHBoxcie->show();
sourceabscie->show();
targabscie->show();
detailcie->show();
modeHBoxcie->show();
if (bwevMethod12->get_active_row_number() == 0) {//sigmoid Q
slopesmoq->hide();
sigmoidldacie12->show();
sigmoidthcie12->show();
sigmoidblcie12->show();
}
if (bwevMethod12->get_active_row_number() == 1) {//Slope based Q
slopesmoq->show();
sigmoidldacie12->hide();
sigmoidthcie12->hide();
sigmoidblcie12->hide();
}
pqremapcam16->show();
comprcie->show();
strcielog->show();
logcieq->show();
blackEvjz->show();
whiteEvjz->show();
whitescie->show();
blackscie->show();
logcieFrame->show();
comprcieth->show();
comprcieauto->show();
if (logcieq->get_active()) {
satcie->hide();
sigmoidnormFrame->hide();
} else {
satcie->show();
sigmoidnormFrame->show();
}
targetGraycie->show();
targabscie->show();
surrHBoxcie->show();
sourceGraycie->show();
expcamscene->show();
exprecovcie->show();
decaycie->show();
lapmaskcie->show();
gammaskcie->show();
slomaskcie->show();
highmaskcie->show();
shadmaskcie->show();
maskcieHCurveEditorG->show();
expmaskcie->show();
struFramecie->show();
blurFramecie->show();
wavFramecie->show();
comprBox->show();
if (enacieMask->get_active()) {
maskusablecie->show();
maskunusablecie->hide();
} else {
maskusablecie->hide();
maskunusablecie->show();
}
if (modecam->get_active_row_number() == 0) {
bevwevFrame->show();
expprecam->show();
primillFrame->show();
enacieMaskallChanged2();
enacieMaskall->show();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
qjmodcam();
if(smoothciemet->get_active_row_number() == 3) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->show();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
} else if(smoothciemet->get_active_row_number() == 4) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
slopesmor->show();
slopesmog->show();
slopesmob->show();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->show();
smoothciehigh->show();
smoothcielnk->show();
smoothcieyb->show();
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
} else if(smoothciemet->get_active_row_number() >= 5) {
contsig->show();
skewsig->show();
whitsig->show();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
smoothcie->hide();
} else {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcielum->hide();
smoothcieyb->hide();
smoothcieth->hide();
}
}
if (modecam->get_active_row_number() == 1 && modeQJ->get_active_row_number() == 1) {
jabcie->show();
expjz->show();
jzFrame->show();
adapjzcie->show();
jz100->show();
pqremap->show();
PQFrame->show();
logjzFrame->show();
bevwevFrame->show();
sigmoidjzFrame12->show();
sigmoidFrame12->hide();
expprecam->hide();
expcam16->hide();
exprecovcie->show();
expmaskcie->show();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
enacieMaskall->show();
qjmodjz();
}
expcamscene->show();
expcamviewing->show();
if (modecam->get_active_row_number() == 0 && modeQJ->get_active_row_number() == 1) {
targetGraycie->show();
targabscie->show();
surrHBoxcie->show();
pqremapcam16->show();
PQFrame->hide();
logjzFrame->hide();
sigmoidjzFrame12->hide();
bevwevFrame->hide();
bevwevFrame->show();
sigmoidFrame12->show();
expprecam->show();
primillFrame->show();
enacieMaskallChanged2();
enacieMaskall->show();
sigmoidjzFrame12->hide();
sigmoidjzFrame->hide();
qjmodcam();
if(smoothciemet->get_active_row_number() == 3) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->show();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
} else if(smoothciemet->get_active_row_number() == 4) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
slopesmor->show();
slopesmog->show();
slopesmob->show();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->show();
smoothciehigh->show();
smoothcielnk->show();
smoothcieyb->show();
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
} else if(smoothciemet->get_active_row_number() >= 5) {
contsig->show();
skewsig->show();
whitsig->show();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
smoothcie->hide();
} else {
contsig->hide();
skewsig->hide();
whitsig->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
smoothcie->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
}
}
if (modecam->get_active_row_number() == 1) {
surHBoxcie->show();
targetGraycie->hide();
targabscie->hide();
surrHBoxcie->hide();
pqremapcam16->hide();
PQFrame->show();
logjzFrame->show();
sigmoidjzFrame12->show();
sigmoidFrame12->hide();
bevwevFrame->show();
catadcie->hide();
expcamviewing->hide();
exprecovcie->show();
expmaskcie->show();
maskusablecie->show();
maskunusablecie->show();
expprecam->hide();
expcam16->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
enacieMaskall->show();
if (chjzcie->get_active()) {
thrhjzcie->set_sensitive(true);
} else {
thrhjzcie->set_sensitive(false);
}
qjmodjz();
}
if (modecie->get_active_row_number() > 0) {
exprecovcie->hide();
expmaskcie->hide();
}
contsigqcie->hide();
lightsigqcie->hide();
}
}
void Locallabcie::updatecieGUI()
{
const LocallabParams::LocallabSpot defSpot;
const int mode = complexity->get_active_row_number();
expmaskcie->show();
exprecovcie->show();
contsigqcie->hide();
lightsigqcie->hide();
if (modecie->get_active_row_number() > 0) {
sensicie->hide();
reparcie->hide();
exprecovcie->hide();
expmaskcie->hide();
} else {
sensicie->show();
reparcie->show();
exprecovcie->show();
expmaskcie->show();
}
surHBoxcie->show();
cie1Frame->show();
expcam16->show();
expcamviewing->show();
if (modecam->get_active_row_number() == 0) {
bevwevFrame->show();
expprecam->show();
if (mode == Simple) {
expmaskcie->hide();
exprecovcie->hide();
primillFrame->hide();
} else if (mode == Normal) {
primillFrame->hide();
} else {
primillFrame->show();
}
if(smoothciemet->get_active_row_number() == 3) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->show();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcie->show();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
} else if(smoothciemet->get_active_row_number() == 4) {
contsig->hide();
skewsig->hide();
whitsig->hide();
slopesmo->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
slopesmor->show();
slopesmog->show();
slopesmob->show();
smoothcie->show();
if (mode == Expert) {
smoothcielum->show();
smoothcieyb->show();
} else {
smoothcielum->hide();
smoothcieyb->hide();
}
if (smoothciehigh->get_active()) {
smoothcieth->show();
} else {
smoothcieth->hide();
}
smoothciehigh->show();
smoothcielnk->show();
} else if(smoothciemet->get_active_row_number() >= 5) {
contsig->show();
skewsig->show();
whitsig->hide();
if (mode == Expert) {
whitsig->show();
}
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
smoothcie->hide();
} else {
contsig->hide();
skewsig->hide();
whitsig->hide();
kslopesmor->hide();
kslopesmog->hide();
kslopesmob->hide();
smoothcietrc->hide();
smoothcietrcrel->hide();
slopesmo->hide();
slopesmor->hide();
slopesmog->hide();
slopesmob->hide();
smoothcie->hide();
smoothcielum->hide();
smoothciehigh->hide();
smoothcielnk->hide();
smoothcieyb->hide();
smoothcieth->hide();
}
qjmodcam();
}
if (modecam->get_active_row_number() == 1) {
qjmodjz();
}
sourceGraycie->show();
expcamscene->show();
if (enacieMask->get_active() && mode != Simple) {
maskusablecie->show();
maskunusablecie->hide();
} else {
maskusablecie->hide();
maskunusablecie->show();
}
if (Autograycie->get_active()) {
sourceGraycie->set_sensitive(false);
sourceabscie->set_sensitive(false);
adapjzcie->set_sensitive(false);
jz100->set_sensitive(false);
blackEvjz->set_sensitive(false);
whiteEvjz->set_sensitive(false);
whitescie->set_sensitive(true);
blackscie->set_sensitive(true);
comprcieauto->set_active(true);
} else {
sourceGraycie->set_sensitive(true);
sourceabscie->set_sensitive(true);
adapjzcie->set_sensitive(true);
blackEvjz->set_sensitive(true);
whiteEvjz->set_sensitive(true);
whitescie->set_sensitive(false);
blackscie->set_sensitive(false);
jz100->set_sensitive(true);
}
if (mode == Simple || mode == Normal) { // Keep widget hidden in Normal and Simple mode
modecie->set_active(0);
sensicie->show();
reparcie->show();
}
qjmodall();
if (sursourcie->get_active_row_number() == 4) {
expcam16->hide();
expcamviewing->hide();
} else {
expcam16->show();
expcamviewing->show();
if(modecam->get_active_row_number() == 1) {
expcam16->hide();
expcamviewing->hide();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
}
}
if (modecie->get_active_row_number() > 0) {
exprecovcie->hide();
expmaskcie->hide();
}
if (modecam->get_active_row_number() == 1 && (mode == Expert)) {
surHBoxcie->show();
cie1Frame->hide();
expcam16->hide();
targetGraycie->hide();
targabscie->hide();
surrHBoxcie->hide();
pqremapcam16->hide();
PQFrame->show();
logjzFrame->show();
sigmoidjzFrame12->show();
bevwevFrame->show();
sigmoidFrame12->hide();
catadcie->hide();
expprecam->hide();
expcamviewing->hide();
expcam16->hide();
exprecovcie->show();
expmaskcie->show();
lapmaskcie->hide();
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
enacieMaskall->show();
qjmodjz();
}
}
void Locallabcie::convertParamToSimple()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
sigmoidblcie12->setValue(defSpot.sigmoidblcie12);
normcie12->set_active(defSpot.normcie12);
normcie->set_active(defSpot.normcie);
logcieq->set_active(defSpot.logcieq);
blackEvjz->setValue(defSpot.blackEvjz);
whiteEvjz->setValue(defSpot.whiteEvjz);
whitescie->setValue(defSpot.whitescie);
blackscie->setValue(defSpot.blackscie);
smoothcielum->set_active(defSpot.smoothcielum);
smoothcieyb->set_active(defSpot.smoothcieyb);
sigq12->set_active(defSpot.sigq12);
pqremapcam16->setValue(defSpot.pqremapcam16);
showmaskcieMethod->set_active(0);
enacieMask->set_active(defSpot.enacieMask);
enacieMaskall->set_active(defSpot.enacieMaskall);
//strgradcie->setValue(defSpot.strgradcie);
//anggradcie->setValue(defSpot.anggradcie);
//feathercie->setValue(defSpot.feathercie);
refi->setValue(defSpot.refi);
modecie->set_active(0);
primMethod->set_active(0);//Prophoto
illMethod->set_active(1);//D50
catMethod->set_active(0);
// Enable all listeners
enableListener();
}
void Locallabcie::convertParamToNormal()
{
const LocallabParams::LocallabSpot defSpot;
// Disable all listeners
disableListener();
contqcie->setValue(defSpot.contqcie);
sigmoidblcie12->setValue(defSpot.sigmoidblcie12);
normcie12->set_active(defSpot.normcie12);
normcie->set_active(defSpot.normcie);
logcieq->set_active(defSpot.logcieq);
smoothcielum->set_active(defSpot.smoothcielum);
smoothcieyb->set_active(defSpot.smoothcieyb);
colorflcie->setValue(defSpot.colorflcie);
lightqcie->setValue(defSpot.lightqcie);
chromlcie->setValue(defSpot.chromlcie);
huecie->setValue(defSpot.huecie);
jabcie->set_active(defSpot.jabcie);
LHshapejz->setCurve(defSpot.LHcurvejz);
CHshapejz->setCurve(defSpot.CHcurvejz);
HHshapejz->setCurve(defSpot.HHcurvejz);
shapejz->setCurve(defSpot.jzcurve);
shapecz->setCurve(defSpot.czcurve);
shapeczjz->setCurve(defSpot.czjzcurve);
lightjzcie->setValue(defSpot.lightjzcie);
contjzcie->setValue(defSpot.contjzcie);
detailciejz->setValue(defSpot.detailciejz);
sigmoidldajzcie12->setValue(defSpot.sigmoidldajzcie12);
sigmoidldajzcie->setValue(defSpot.sigmoidldajzcie);
hljzcie->setValue(defSpot.hljzcie);
shjzcie->setValue(defSpot.shjzcie);
chromjzcie->setValue(defSpot.chromjzcie);
saturjzcie->setValue(defSpot.saturjzcie);
huejzcie->setValue(defSpot.huejzcie);
softjzcie->setValue(defSpot.softjzcie);
strsoftjzcie->setValue(defSpot.strsoftjzcie);
thrhjzcie->setValue(defSpot.thrhjzcie);
modecie->set_active(0);
catMethod->set_active(0);
primMethod->set_active(0);//Prophoto
illMethod->set_active(1);//D50
refi->setValue(defSpot.refi);
whitsig->setValue(defSpot.whitsig);
pqremapcam16->setValue(defSpot.pqremapcam16);
logcieChanged();
satcieChanged();
logcieqChanged();
if (modecam->get_active_row_number() == 1) {
showmaskcieMethod->set_active(0);
enacieMask->set_active(defSpot.enacieMask);
logjz->set_active(defSpot.logjz);
sigjz12->set_active(defSpot.sigjz12);
lapmaskcie->setValue(defSpot.lapmaskcie);
enacieMaskallChanged2();
}
lapmaskcie->setValue(defSpot.lapmaskcie);
gammaskcie->setValue(defSpot.gammaskcie);
slomaskcie->setValue(defSpot.slomaskcie);
highmaskcie->setValue(defSpot.highmaskcie);
shadmaskcie->setValue(defSpot.shadmaskcie);
HHhmaskcieshape->setCurve(defSpot.HHhmaskciecurve);
strumaskcie->setValue(defSpot.strumaskcie);
toolcie->set_active(defSpot.toolcie);
fftcieMask->set_active(defSpot.fftcieMask);
contcie->setValue(defSpot.contcie);
blurcie->setValue(defSpot.blurcie);
LLmaskcieshapewav->setCurve(defSpot.LLmaskciecurvewav);
csThresholdcie->setValue<int>(defSpot.csthresholdcie);
// Enable all listeners
enableListener();
updatecielnkGUI();
}
void Locallabcie::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
{
const int index = defParams->locallab.selspot;
if (index < (int)defParams->locallab.spots.size()) {
const LocallabParams::LocallabSpot& defSpot = defParams->locallab.spots.at(index);
reparcie->setDefault(defSpot.reparcie);
sensicie->setDefault(defSpot.sensicie);
sourceGraycie->setDefault(defSpot.sourceGraycie);
sourceabscie->setDefault(defSpot.sourceabscie);
saturlcie->setDefault(defSpot.saturlcie);
rstprotectcie->setDefault(defSpot.rstprotectcie);
chromjzcie->setDefault(defSpot.chromjzcie);
saturjzcie->setDefault(defSpot.saturjzcie);
huejzcie->setDefault(defSpot.huejzcie);
softjzcie->setDefault(defSpot.softjzcie);
strsoftjzcie->setDefault(defSpot.strsoftjzcie);
thrhjzcie->setDefault(defSpot.thrhjzcie);
lightlcie->setDefault(defSpot.lightlcie);
lightjzcie->setDefault(defSpot.lightjzcie);
lightsigqcie->setDefault(defSpot.lightsigqcie);
contlcie->setDefault(defSpot.contlcie);
contjzcie->setDefault(defSpot.contjzcie);
detailciejz->setDefault(defSpot.detailciejz);
adapjzcie->setDefault(defSpot.adapjzcie);
jz100->setDefault(defSpot.jz100);
pqremap->setDefault(defSpot.pqremap);
pqremapcam16->setDefault(defSpot.pqremapcam16);
hljzcie->setDefault(defSpot.hljzcie);
hlthjzcie->setDefault(defSpot.hlthjzcie);
shjzcie->setDefault(defSpot.shjzcie);
shthjzcie->setDefault(defSpot.shthjzcie);
radjzcie->setDefault(defSpot.radjzcie);
sigmalcjz->setDefault(defSpot.sigmalcjz);
csThresholdjz->setDefault<int>(defSpot.csthresholdjz);
clarilresjz->setDefault(defSpot.clarilresjz);
claricresjz->setDefault(defSpot.claricresjz);
clarisoftjz->setDefault(defSpot.clarisoftjz);
contthrescie->setDefault(defSpot.contthrescie);
blackEvjz->setDefault(defSpot.blackEvjz);
whiteEvjz->setDefault(defSpot.whiteEvjz);
targetjz->setDefault(defSpot.targetjz);
sigmoidldacie12->setDefault(defSpot.sigmoidldacie12);
sigmoidthcie12->setDefault(defSpot.sigmoidthcie12);
sigmoidblcie12->setDefault(defSpot.sigmoidblcie12);
sigmoidldacie->setDefault(defSpot.sigmoidldacie);
sigmoidthcie->setDefault(defSpot.sigmoidthcie);
sigmoidblcie->setDefault(defSpot.sigmoidblcie);
sigmoidsenscie->setDefault(defSpot.sigmoidsenscie);
comprcie->setDefault(defSpot.comprcie);
strcielog->setDefault(defSpot.strcielog);
comprcieth->setDefault(defSpot.comprcieth);
gamjcie->setDefault(defSpot.gamjcie);
smoothcieth->setDefault(defSpot.smoothcieth);
whitescie->setDefault(defSpot.whitescie);
blackscie->setDefault(defSpot.blackscie);
slopjcie->setDefault(defSpot.slopjcie);
slopesmo->setDefault(defSpot.slopesmo);
slopesmoq->setDefault(defSpot.slopesmoq);
contsig->setDefault(defSpot.contsig);
skewsig->setDefault(defSpot.skewsig);
whitsig->setDefault(defSpot.whitsig);
slopesmor->setDefault(defSpot.slopesmor);
slopesmog->setDefault(defSpot.slopesmog);
slopesmob->setDefault(defSpot.slopesmob);
kslopesmor->setDefault(defSpot.kslopesmor);
kslopesmog->setDefault(defSpot.kslopesmog);
kslopesmob->setDefault(defSpot.kslopesmob);
sigmoidldajzcie12->setDefault(defSpot.sigmoidldajzcie12);
sigmoidthjzcie12->setDefault(defSpot.sigmoidthjzcie12);
sigmoidbljzcie12->setDefault(defSpot.sigmoidbljzcie12);
sigmoidldajzcie->setDefault(defSpot.sigmoidldajzcie);
sigmoidthjzcie->setDefault(defSpot.sigmoidthjzcie);
sigmoidbljzcie->setDefault(defSpot.sigmoidbljzcie);
contsigqcie->setDefault(defSpot.contsigqcie);
colorflcie->setDefault(defSpot.colorflcie);
targabscie->setDefault(defSpot.targabscie);
targetGraycie->setDefault(defSpot.targetGraycie);
catadcie->setDefault(defSpot.catadcie);
strgradcie->setDefault((double)defSpot.strgradcie);
anggradcie->setDefault((double)defSpot.anggradcie);
feathercie->setDefault((double)defSpot.feathercie);
blendmaskcie->setDefault((double)defSpot.blendmaskcie);
radmaskcie->setDefault(defSpot.radmaskcie);
chromaskcie->setDefault(defSpot.chromaskcie);
lapmaskcie->setDefault(defSpot.lapmaskcie);
gammaskcie->setDefault(defSpot.gammaskcie);
slomaskcie->setDefault(defSpot.slomaskcie);
highmaskcie->setDefault(defSpot.highmaskcie);
shadmaskcie->setDefault(defSpot.shadmaskcie);
recothrescie->setDefault((double)defSpot.recothrescie);
lowthrescie->setDefault((double)defSpot.lowthrescie);
higthrescie->setDefault((double)defSpot.higthrescie);
decaycie->setDefault((double)defSpot.decaycie);
strumaskcie->setDefault(defSpot.strumaskcie);
contcie->setDefault(defSpot.contcie);
blurcie->setDefault(defSpot.blurcie);
csThresholdcie->setDefault<int>(defSpot.csthresholdcie);
redxl->setDefault(defSpot.redxl);
redyl->setDefault(defSpot.redyl);
grexl->setDefault(defSpot.grexl);
greyl->setDefault(defSpot.greyl);
bluxl->setDefault(defSpot.bluxl);
bluyl->setDefault(defSpot.bluyl);
shiftxl->setDefault(defSpot.shiftxl);
shiftyl->setDefault(defSpot.shiftyl);
refi->setDefault(defSpot.refi);
labgridcie->setDefault(defSpot.labgridcieALow,
defSpot.labgridcieBLow,
defSpot.labgridcieAHigh,
defSpot.labgridcieBHigh,
defSpot.labgridcieGx,
defSpot.labgridcieGy,
defSpot.labgridcieWx,
defSpot.labgridcieWy,
defSpot.labgridcieMx,
defSpot.labgridcieMy
);
}
}
void Locallabcie::curveChanged(CurveEditor* ce)
{
if (isLocActivated && exp->getEnabled()) {
const auto spName = M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")";
if (ce == shapejz) {
if (listener) {
listener->panelChanged(Evlocallabshapejz, spName);
}
}
if (ce == shapecz) {
if (listener) {
listener->panelChanged(Evlocallabshapecz, spName);
}
}
if (ce == shapeczjz) {
if (listener) {
listener->panelChanged(Evlocallabshapeczjz, spName);
}
}
if (ce == HHshapejz) {
if (listener) {
listener->panelChanged(EvlocallabHHshapejz, spName);
}
}
if (ce == CHshapejz) {
if (listener) {
listener->panelChanged(EvlocallabCHshapejz, spName);
}
}
if (ce == LHshapejz) {
if (listener) {
listener->panelChanged(EvlocallabLHshapejz, spName);
}
}
if (ce == shapecie) {
if (listener) {
listener->panelChanged(Evlocallabshapecie, spName);
}
}
if (ce == shapecie2) {
if (listener) {
listener->panelChanged(Evlocallabshapecie2, spName);
}
}
if (ce == CCmaskcieshape) {
if (listener) {
listener->panelChanged(EvlocallabCCmaskcieshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmaskcieshape) {
if (listener) {
listener->panelChanged(EvlocallabLLmaskcieshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHmaskcieshape) {
if (listener) {
listener->panelChanged(EvlocallabHHmaskcieshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == HHhmaskcieshape) {
if (listener) {
listener->panelChanged(EvlocallabHHhmaskcieshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == Lmaskcieshape) {
if (listener) {
listener->panelChanged(EvlocallabLmaskcieshape,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == wavshapejz) {
if (listener) {
listener->panelChanged(EvlocallabwavCurvejz,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (ce == LLmaskcieshapewav) {
if (listener) {
listener->panelChanged(EvlocallabLLmaskcieshapewav,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR)
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabcsThresholdjz,
csThresholdjz->getHistoryString() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
listener->panelChanged(EvlocallabcsThresholdcie,
csThresholdcie->getHistoryString() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
void Locallabcie::adjusterChanged(Adjuster* a, double newval)
{
const LocallabParams::LocallabSpot defSpot;
if (isLocActivated && exp->getEnabled()) {
const auto spName = " (" + escapeHtmlChars(getSpotName()) + ")";
if (a == reparcie) {
if (listener) {
listener->panelChanged(Evlocallabreparcie,
reparcie->getTextValue() + spName);
}
}
if (a == sensicie) {
if (listener) {
listener->panelChanged(Evlocallabsensicie,
sensicie->getTextValue() + spName);
}
}
if (a == sourceGraycie) {
if (listener) {
listener->panelChanged(EvlocallabsourceGraycie,
sourceGraycie->getTextValue() + spName);
}
}
if (a == sourceabscie) {
float sour = std::min(sourceabscie->getValue(), 10000.) / 10000.f;
float pal = std::max(10. * (double) sqrt(sour), 1.5);
adapjzcie->setValue(pal);//max to 10 if La > 10000 and mini to 1.5
jz100->setValue(defSpot.jz100);
if (listener) {
listener->panelChanged(Evlocallabsourceabscie,
sourceabscie->getTextValue() + spName);
}
}
if (a == saturlcie) {
if (listener) {
listener->panelChanged(Evlocallabsaturlcie,
saturlcie->getTextValue() + spName);
}
}
if (a == rstprotectcie) {
if (listener) {
listener->panelChanged(Evlocallabrstprotectcie,
rstprotectcie->getTextValue() + spName);
}
}
if (a == chromlcie) {
if (listener) {
listener->panelChanged(Evlocallabchromlcie,
chromlcie->getTextValue() + spName);
}
}
if (a == chromjzcie) {
if (listener) {
listener->panelChanged(Evlocallabchromjzcie,
chromjzcie->getTextValue() + spName);
}
}
if (a == saturjzcie) {
if (listener) {
listener->panelChanged(Evlocallabsaturjzcie,
saturjzcie->getTextValue() + spName);
}
}
if (a == huecie) {
if (listener) {
listener->panelChanged(Evlocallabhuecie,
huecie->getTextValue() + spName);
}
}
if (a == huejzcie) {
if (listener) {
listener->panelChanged(Evlocallabhuejzcie,
huejzcie->getTextValue() + spName);
}
}
if (a == softjzcie) {
if (listener) {
listener->panelChanged(Evlocallabsoftjzcie,
softjzcie->getTextValue() + spName);
}
}
if (a == strsoftjzcie) {
if (listener) {
listener->panelChanged(Evlocallabstrsoftjzcie,
strsoftjzcie->getTextValue() + spName);
}
}
if (a == thrhjzcie) {
if (listener) {
listener->panelChanged(Evlocallabthrhjzcie,
thrhjzcie->getTextValue() + spName);
}
}
if (a == lightlcie) {
if (listener) {
listener->panelChanged(Evlocallablightlcie,
lightlcie->getTextValue() + spName);
}
}
if (a == lightjzcie) {
if (listener) {
listener->panelChanged(Evlocallablightjzcie,
lightjzcie->getTextValue() + spName);
}
}
if (a == lightqcie) {
if (listener) {
listener->panelChanged(Evlocallablightqcie,
lightqcie->getTextValue() + spName);
}
}
if (a == lightsigqcie) {
if (listener) {
listener->panelChanged(Evlocallablightsigqcie12,
lightsigqcie->getTextValue() + spName);
}
}
if (a == contlcie) {
if (listener) {
listener->panelChanged(Evlocallabcontlcie,
contlcie->getTextValue() + spName);
}
}
if (a == contjzcie) {
if (listener) {
listener->panelChanged(Evlocallabcontjzcie,
contjzcie->getTextValue() + spName);
}
}
if (a == detailciejz) {
if (listener) {
listener->panelChanged(Evlocallabdetailciejz,
detailciejz->getTextValue() + spName);
}
}
if (a == adapjzcie) {
if (listener) {
listener->panelChanged(Evlocallabadapjzcie,
adapjzcie->getTextValue() + spName);
}
}
if (a == jz100) {
if (listener) {
listener->panelChanged(Evlocallabjz100,
jz100->getTextValue() + spName);
}
}
if (a == pqremap) {
if (listener) {
listener->panelChanged(Evlocallabpqremap,
pqremap->getTextValue() + spName);
}
}
if (a == pqremapcam16) {
if (listener) {
listener->panelChanged(Evlocallabpqremapcam16,
pqremapcam16->getTextValue() + spName);
}
}
if (a == hljzcie) {
if (listener) {
listener->panelChanged(Evlocallabhljzcie,
hljzcie->getTextValue() + spName);
}
}
if (a == hlthjzcie) {
if (listener) {
listener->panelChanged(Evlocallabhlthjzcie,
hlthjzcie->getTextValue() + spName);
}
}
if (a == shjzcie) {
if (listener) {
listener->panelChanged(Evlocallabshjzcie,
shjzcie->getTextValue() + spName);
}
}
if (a == shthjzcie) {
if (listener) {
listener->panelChanged(Evlocallabshthjzcie,
shthjzcie->getTextValue() + spName);
}
}
if (a == radjzcie) {
if (listener) {
listener->panelChanged(Evlocallabradjzcie,
radjzcie->getTextValue() + spName);
}
}
if (a == sigmalcjz) {
if (listener) {
listener->panelChanged(Evlocallabsigmalcjz,
sigmalcjz->getTextValue() + spName);
}
}
if (a == clarilresjz) {
if (listener) {
listener->panelChanged(Evlocallabclarilresjz,
clarilresjz->getTextValue() + spName);
}
}
if (a == claricresjz) {
if (listener) {
listener->panelChanged(Evlocallabclaricresjz,
claricresjz->getTextValue() + spName);
}
}
if (a == clarisoftjz) {
if (listener) {
listener->panelChanged(Evlocallabclarisoftjz,
clarisoftjz->getTextValue() + spName);
}
}
if (a == contthrescie) {
if (listener) {
listener->panelChanged(Evlocallabcontthrescie,
contthrescie->getTextValue() + spName);
}
}
if (a == blackEvjz) {
if (listener) {
listener->panelChanged(EvlocallabblackEvjz,
blackEvjz->getTextValue() + spName);
}
}
if (a == whiteEvjz) {
if (listener) {
listener->panelChanged(EvlocallabwhiteEvjz,
whiteEvjz->getTextValue() + spName);
}
}
if (a == targetjz) {
if (listener) {
listener->panelChanged(Evlocallabtargetjz,
targetjz->getTextValue() + spName);
}
}
if (a == sigmoidldacie12) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidldacie12,
sigmoidldacie12->getTextValue() + spName);
}
}
if (a == sigmoidldacie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidldacie,
sigmoidldacie->getTextValue() + spName);
}
}
if (a == sigmoidldajzcie12) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidldajzcie12,
sigmoidldajzcie12->getTextValue() + spName);
}
}
if (a == sigmoidldajzcie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidldajzcie,
sigmoidldajzcie->getTextValue() + spName);
}
}
if (a == sigmoidbljzcie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidbljzcie,
sigmoidbljzcie->getTextValue() + spName);
}
}
if (a == sigmoidthjzcie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidthjzcie,
sigmoidthjzcie->getTextValue() + spName);
}
}
if (a == sigmoidthcie12) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidthcie12,
sigmoidthcie12->getTextValue() + spName);
}
}
if (a == sigmoidthcie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidthcie,
sigmoidthcie->getTextValue() + spName);
}
}
if (a == sigmoidsenscie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidsenscie,
sigmoidsenscie->getTextValue() + spName);
}
}
if (a == sigmoidthjzcie12) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidthjzcie12,
sigmoidthjzcie12->getTextValue() + spName);
}
}
if (a == sigmoidblcie12) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidblcie12,
sigmoidblcie12->getTextValue() + spName);
}
}
if (a == sigmoidblcie) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidblcie,
sigmoidblcie->getTextValue() + spName);
}
}
if (a == comprcie) {
if (listener) {
listener->panelChanged(Evlocallabcomprcie,
comprcie->getTextValue() + spName);
}
}
if (a == strcielog) {
if (listener) {
listener->panelChanged(Evlocallabstrcielog,
strcielog->getTextValue() + spName);
}
}
if (a == comprcieth) {
nextcomprciecount = 0;
if (listener) {
listener->panelChanged(Evlocallabcomprcieth,
comprcieth->getTextValue() + spName);
}
}
if (a == gamjcie) {
if (listener) {
listener->panelChanged(Evlocallabgamjcie,
gamjcie->getTextValue() + spName);
}
}
if (a == smoothcieth) {
if (listener) {
listener->panelChanged(Evlocallabsmoothcieth,
smoothcieth->getTextValue() + spName);
}
}
if (a == slopjcie) {
if (listener) {
listener->panelChanged(Evlocallabslopjcie,
slopjcie->getTextValue() + spName);
}
}
if (a == contsig) {
if (listener) {
listener->panelChanged(Evlocallabcontsig,
contsig->getTextValue() + spName);
}
}
if (a == skewsig) {
if (listener) {
listener->panelChanged(Evlocallabskewsig,
skewsig->getTextValue() + spName);
}
}
if (a == whitsig) {
if (listener) {
listener->panelChanged(Evlocallabwhitsig,
whitsig->getTextValue() + spName);
}
}
if (a == slopesmo) {
if (listener) {
listener->panelChanged(Evlocallabslopesmo,
slopesmo->getTextValue() + spName);
}
}
if (a == slopesmoq) {
if (listener) {
listener->panelChanged(Evlocallabslopesmoq,
slopesmoq->getTextValue() + spName);
}
}
if (a == slopesmog ) {
if(smoothcielnk->get_active()) {
BlockAdjusterEvents block_slopesmob(slopesmob);
BlockAdjusterEvents block_slopesmor(slopesmor);
slopesmob->setValue(newval);
slopesmor->setValue(newval);
if (listener) {
listener->panelChanged(Evlocallabslopesmog,
slopesmog->getTextValue() + spName);
}
} else {
if (listener) {
listener->panelChanged(Evlocallabslopesmog,
slopesmog->getTextValue() + spName);
}
}
}
if (a == slopesmor ) {
if(smoothcielnk->get_active()) {
BlockAdjusterEvents block_slopesmob(slopesmob);
BlockAdjusterEvents block_slopesmog(slopesmog);
slopesmob->setValue(newval);
slopesmog->setValue(newval);
if (listener) {
listener->panelChanged(Evlocallabslopesmor,
slopesmor->getTextValue() + spName);
}
} else {
if (listener) {
listener->panelChanged(Evlocallabslopesmor,
slopesmor->getTextValue() + spName);
}
}
}
if (a == slopesmob ) {
if(smoothcielnk->get_active()) {
BlockAdjusterEvents block_slopesmor(slopesmor);
BlockAdjusterEvents block_slopesmog(slopesmog);
slopesmor->setValue(newval);
slopesmog->setValue(newval);
if (listener) {
listener->panelChanged(Evlocallabslopesmob,
slopesmob->getTextValue() + spName);
}
} else {
if (listener) {
listener->panelChanged(Evlocallabslopesmob,
slopesmob->getTextValue() + spName);
}
}
}
if (a == kslopesmor) {
if (listener) {
listener->panelChanged(Evlocallabkslopesmor,
kslopesmor->getTextValue() + spName);
}
}
if (a == kslopesmog) {
if (listener) {
listener->panelChanged(Evlocallabkslopesmog,
kslopesmog->getTextValue() + spName);
}
}
if (a == kslopesmob) {
if (listener) {
listener->panelChanged(Evlocallabkslopesmob,
kslopesmob->getTextValue() + spName);
}
}
if (a == midtcie) {
if (listener) {
listener->panelChanged(Evlocallabmidtcie,
midtcie->getTextValue() + spName);
}
}
if (a == redxl) {
if (listener) {
listener->panelChanged(Evlocallabredxl,
redxl->getTextValue() + spName);
}
}
if (a == redyl) {
if (listener) {
listener->panelChanged(Evlocallabredyl,
redyl->getTextValue() + spName);
}
}
if (a == grexl) {
if (listener) {
listener->panelChanged(Evlocallabgrexl,
grexl->getTextValue() + spName);
}
}
if (a == greyl) {
if (listener) {
listener->panelChanged(Evlocallabgreyl,
greyl->getTextValue() + spName);
}
}
if (a == bluxl) {
if (listener) {
listener->panelChanged(Evlocallabbluxl,
bluxl->getTextValue() + spName);
}
}
if (a == bluyl) {
if (listener) {
listener->panelChanged(Evlocallabbluyl,
bluyl->getTextValue() + spName);
}
}
if (a == refi) {
if (listener) {
listener->panelChanged(Evlocallabrefi,
refi->getTextValue() + spName);
}
}
if (a == shiftxl) {
if (listener) {
listener->panelChanged(Evlocallabshiftxl,
shiftxl->getTextValue() + spName);
}
}
if (a == shiftyl) {
if (listener) {
listener->panelChanged(Evlocallabshiftyl,
shiftyl->getTextValue() + spName);
}
}
if (a == whitescie) {
if (listener) {
listener->panelChanged(Evlocallabwhitescie,
whitescie->getTextValue() + spName);
}
}
if (a == blackscie) {
if (listener) {
listener->panelChanged(Evlocallabblackscie,
blackscie->getTextValue() + spName);
}
}
if (a == sigmoidbljzcie12) {
if (listener) {
listener->panelChanged(Evlocallabsigmoidbljzcie12,
sigmoidbljzcie12->getTextValue() + spName);
}
}
if (a == contqcie) {
if (listener) {
listener->panelChanged(Evlocallabcontqcie,
contqcie->getTextValue() + spName);
}
}
if (a == contsigqcie) {
if (listener) {
listener->panelChanged(Evlocallabcontsigqcie,
contsigqcie->getTextValue() + spName);
}
}
if (a == colorflcie) {
if (listener) {
listener->panelChanged(Evlocallabcolorflcie,
colorflcie->getTextValue() + spName);
}
}
if (a == targabscie) {
if (listener) {
listener->panelChanged(Evlocallabtargabscie,
targabscie->getTextValue() + spName);
}
}
if (a == targetGraycie) {
if (listener) {
listener->panelChanged(EvlocallabtargetGraycie,
targetGraycie->getTextValue() + spName);
}
}
if (a == catadcie) {
if (listener) {
listener->panelChanged(Evlocallabcatadcie,
catadcie->getTextValue() + spName);
}
}
if (a == detailcie) {
if (listener) {
listener->panelChanged(Evlocallabdetailcie,
detailcie->getTextValue() + spName);
}
}
if (a == strgradcie) {
if (listener) {
listener->panelChanged(Evlocallabstrgradcie,
strgradcie->getTextValue() + spName);
}
}
if (a == anggradcie) {
if (listener) {
listener->panelChanged(Evlocallabanggradcie,
anggradcie->getTextValue() + spName);
}
}
if (a == feathercie) {
if (listener) {
listener->panelChanged(Evlocallabfeathercie,
feathercie->getTextValue() + spName);
}
}
if (a == blendmaskcie) {
if (listener) {
listener->panelChanged(Evlocallabblendmaskcie,
blendmaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == radmaskcie) {
if (listener) {
listener->panelChanged(Evlocallabradmaskcie,
radmaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == chromaskcie) {
if (listener) {
listener->panelChanged(Evlocallabchromaskcie,
chromaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lapmaskcie) {
if (listener) {
listener->panelChanged(Evlocallablapmaskcie,
lapmaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == gammaskcie) {
if (listener) {
listener->panelChanged(Evlocallabgammaskcie,
gammaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == slomaskcie) {
if (listener) {
listener->panelChanged(Evlocallabslomaskcie,
slomaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == highmaskcie) {
if (listener) {
listener->panelChanged(Evlocallabhighmaskcie,
highmaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == shadmaskcie) {
if (listener) {
listener->panelChanged(Evlocallabshadmaskcie,
shadmaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == recothrescie) {
if (listener) {
listener->panelChanged(Evlocallabrecothrescie,
recothrescie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == lowthrescie) {
if (listener) {
listener->panelChanged(Evlocallablowthrescie,
lowthrescie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == higthrescie) {
if (listener) {
listener->panelChanged(Evlocallabhigthrescie,
higthrescie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == decaycie) {
if (listener) {
listener->panelChanged(Evlocallabdecaycie,
decaycie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == strumaskcie) {
if (listener) {
listener->panelChanged(Evlocallabstrumaskcie,
strumaskcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == contcie) {
if (listener) {
listener->panelChanged(Evlocallabcontcie,
contcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
if (a == blurcie) {
if (listener) {
listener->panelChanged(Evlocallabblurcie,
blurcie->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::enabledChanged()
{
if (isLocActivated) {
if (listener) {
if (exp->getEnabled()) {
listener->panelChanged(EvLocenacie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(EvLocenacie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}