add output gamma to partialpast and suppress crash when no output file #issue1081
This commit is contained in:
parent
800e03fdf6
commit
22f9910edb
@ -527,6 +527,7 @@ PARTIALPASTE_HLRECOVERY;Highlight recovery
|
|||||||
PARTIALPASTE_HLRECOVERYTHRESHOLD;Highlight recovery threshold
|
PARTIALPASTE_HLRECOVERYTHRESHOLD;Highlight recovery threshold
|
||||||
PARTIALPASTE_HSVEQUALIZER;HSV Equalizer
|
PARTIALPASTE_HSVEQUALIZER;HSV Equalizer
|
||||||
PARTIALPASTE_ICMSETTINGS;ICM settings
|
PARTIALPASTE_ICMSETTINGS;ICM settings
|
||||||
|
PARTIALPASTE_ICMGAMMA;Output gamma
|
||||||
PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction
|
PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction
|
||||||
PARTIALPASTE_IPTCINFO;IPTC info
|
PARTIALPASTE_IPTCINFO;IPTC info
|
||||||
PARTIALPASTE_LABCURVE;Lab adjustments
|
PARTIALPASTE_LABCURVE;Lab adjustments
|
||||||
|
@ -330,7 +330,7 @@ Image16* ImProcFunctions::lab2rgb16b (LabImage* lab, int cx, int cy, int cw, int
|
|||||||
int t50;
|
int t50;
|
||||||
int select_temp =1;//5003K
|
int select_temp =1;//5003K
|
||||||
double eps=0.000000001;// not divide by zero
|
double eps=0.000000001;// not divide by zero
|
||||||
//primaries
|
//primaries for 7 working profiles ==> output profiles
|
||||||
if(profi=="ProPhoto") {p1=0.7347; p2=0.2653; p3=0.1596; p4=0.8404; p5=0.0366; p6=0.0001;select_temp=1;}//Prophoto primaries
|
if(profi=="ProPhoto") {p1=0.7347; p2=0.2653; p3=0.1596; p4=0.8404; p5=0.0366; p6=0.0001;select_temp=1;}//Prophoto primaries
|
||||||
else if (profi=="WideGamut") {p1=0.7350; p2=0.2650; p3=0.1150; p4=0.8260; p5=0.1570; p6=0.0180;select_temp=1;}//Widegamut primaries
|
else if (profi=="WideGamut") {p1=0.7350; p2=0.2650; p3=0.1150; p4=0.8260; p5=0.1570; p6=0.0180;select_temp=1;}//Widegamut primaries
|
||||||
else if (profi=="Adobe RGB") {p1=0.6400; p2=0.3300; p3=0.2100; p4=0.7100; p5=0.1500; p6=0.0600;select_temp=2;}//Adobe primaries
|
else if (profi=="Adobe RGB") {p1=0.6400; p2=0.3300; p3=0.2100; p4=0.7100; p5=0.1500; p6=0.0600;select_temp=2;}//Adobe primaries
|
||||||
@ -376,7 +376,7 @@ Image16* ImProcFunctions::lab2rgb16b (LabImage* lab, int cx, int cy, int cw, int
|
|||||||
// 7 parameters for smoother curves
|
// 7 parameters for smoother curves
|
||||||
cmsWhitePointFromTemp(&xyD, t50);
|
cmsWhitePointFromTemp(&xyD, t50);
|
||||||
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(NULL, 5, Parameters);//5 = more smoother than 4
|
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(NULL, 5, Parameters);//5 = more smoother than 4
|
||||||
cmsHPROFILE oprofdef = cmsCreateRGBProfileTHR(NULL, &xyD, &Primaries, GammaTRC);
|
cmsHPROFILE oprofdef = cmsCreateRGBProfileTHR(NULL, &xyD, &Primaries, GammaTRC); //oprofdef become Outputprofile
|
||||||
|
|
||||||
cmsFreeToneCurve(GammaTRC[0]);
|
cmsFreeToneCurve(GammaTRC[0]);
|
||||||
|
|
||||||
|
@ -489,6 +489,8 @@ class ProcParams {
|
|||||||
HRecParams hlrecovery; ///< Highlight recovery parameters
|
HRecParams hlrecovery; ///< Highlight recovery parameters
|
||||||
ResizeParams resize; ///< Resize parameters
|
ResizeParams resize; ///< Resize parameters
|
||||||
ColorManagementParams icm; ///< profiles/color spaces used during the image processing
|
ColorManagementParams icm; ///< profiles/color spaces used during the image processing
|
||||||
|
ColorManagementParams gam; ///< profiles/color spaces used during the image processing
|
||||||
|
|
||||||
RAWParams raw; ///< RAW parameters before demosaicing
|
RAWParams raw; ///< RAW parameters before demosaicing
|
||||||
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
|
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
|
||||||
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters
|
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
|
|
||||||
namespace rtengine {
|
namespace rtengine {
|
||||||
|
extern const Settings* settings;
|
||||||
|
|
||||||
IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool tunnelMetaData) {
|
IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool tunnelMetaData) {
|
||||||
|
|
||||||
errorCode = 0;
|
errorCode = 0;
|
||||||
@ -217,14 +219,48 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
|||||||
if(params.icm.gamma != "default" || params.icm.freegamma)
|
if(params.icm.gamma != "default" || params.icm.freegamma)
|
||||||
{ // if select gamma output between BT709, sRGB, linear, low, high, 2.2 , 1.8
|
{ // if select gamma output between BT709, sRGB, linear, low, high, 2.2 , 1.8
|
||||||
//or selected Free gamma
|
//or selected Free gamma
|
||||||
|
Image16* readyImgP;
|
||||||
Image16* readyImg = ipf.lab2rgb16b (labView, cx, cy, cw, ch, params.icm.output, params.icm.working, params.icm.gamma, params.icm.freegamma, params.icm.gampos, params.icm.slpos);
|
Image16* readyImg = ipf.lab2rgb16b (labView, cx, cy, cw, ch, params.icm.output, params.icm.working, params.icm.gamma, params.icm.freegamma, params.icm.gampos, params.icm.slpos);
|
||||||
|
readyImgP=readyImg;
|
||||||
delete labView;
|
delete labView;
|
||||||
if (pl) pl->setProgress (0.70);
|
if (pl) pl->setProgress (0.70);
|
||||||
|
int drapeau=0;
|
||||||
// get the resize parameters
|
// get the resize parameters
|
||||||
int refw, refh;
|
int refw, refh;
|
||||||
double tmpScale;
|
double tmpScale;
|
||||||
|
Glib::ustring chpro, outProfile;
|
||||||
|
int present_space[7]={0,0,0,0,0,0,0};
|
||||||
|
std::vector<std::string> opnames = iccStore->getOutputProfiles ();
|
||||||
|
//test if files are in system
|
||||||
|
for (int j=0; j<7;j++) {
|
||||||
|
// one can modify "option" [Color Management] to adapt name of profile if there are different for windows, MacOS, Linux ??
|
||||||
|
if(j==0) chpro=options.rtSettings.prophoto;
|
||||||
|
else if(j==1) chpro=options.rtSettings.adobe;
|
||||||
|
else if(j==2) chpro=options.rtSettings.widegamut;
|
||||||
|
else if(j==3) chpro=options.rtSettings.beta;
|
||||||
|
else if(j==4) chpro=options.rtSettings.best;
|
||||||
|
else if(j==5) chpro=options.rtSettings.bruce;
|
||||||
|
else if(j==6) chpro=options.rtSettings.srgb;
|
||||||
|
for (int i=0; i<opnames.size(); i++)
|
||||||
|
if(chpro.compare(opnames[i]) ==0) present_space[j]=1;
|
||||||
|
if (present_space[j]==0) {
|
||||||
|
if (pl) pl->setProgressStr ("Missing file..");pl->setProgress (0.0);// display file not present: not very good display information...!!
|
||||||
|
if (settings->verbose) printf("Missing file: %s \n", chpro.c_str());} //c_str()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that output profiles exist, otherwise use LCMS2
|
||||||
|
if (params.icm.working=="ProPhoto" && present_space[0]==1) outProfile=options.rtSettings.prophoto;//in option we can change the name of file - if different...
|
||||||
|
else if (params.icm.working=="Adobe RGB" && present_space[1]==1) outProfile=options.rtSettings.adobe;
|
||||||
|
else if (params.icm.working=="WideGamut" && present_space[2]==1) outProfile=options.rtSettings.widegamut;
|
||||||
|
else if (params.icm.working=="Beta RGB" && present_space[3]==1) outProfile=options.rtSettings.beta;
|
||||||
|
else if (params.icm.working=="BestRGB" && present_space[4]==1) outProfile=options.rtSettings.best;
|
||||||
|
else if (params.icm.working=="BruceRGB" && present_space[5]==1) outProfile=options.rtSettings.bruce;
|
||||||
|
else if (params.icm.working== "sRGB" && present_space[6]==1) outProfile=options.rtSettings.srgb;
|
||||||
|
//OutProfile become Profile's system
|
||||||
|
else {if (settings->verbose) printf("No file:%s in system - use LCMS2 substitution\n",params.icm.working.c_str() ); drapeau=1; }
|
||||||
|
|
||||||
|
if (settings->verbose && drapeau==0) printf("Output profile: %s \n", outProfile.c_str()); //c_str()
|
||||||
|
|
||||||
|
|
||||||
if (params.resize.enabled) {
|
if (params.resize.enabled) {
|
||||||
|
|
||||||
@ -293,34 +329,8 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
|||||||
|
|
||||||
|
|
||||||
ProfileContent pc;
|
ProfileContent pc;
|
||||||
Glib::ustring chpro, outProfile;
|
|
||||||
int present_space[7]={0,0,0,0,0,0,0};
|
|
||||||
std::vector<std::string> opnames = iccStore->getOutputProfiles ();
|
|
||||||
//test if files are in system
|
|
||||||
for (int j=0; j<7;j++) {
|
|
||||||
// one can modify "option" [Color Management] to adapt name of profile if there are different for windows, MacOS, Linux ??
|
|
||||||
if(j==0) chpro=options.rtSettings.prophoto;
|
|
||||||
else if(j==1) chpro=options.rtSettings.adobe;
|
|
||||||
else if(j==2) chpro=options.rtSettings.widegamut;
|
|
||||||
else if(j==3) chpro=options.rtSettings.beta;
|
|
||||||
else if(j==4) chpro=options.rtSettings.best;
|
|
||||||
else if(j==5) chpro=options.rtSettings.bruce;
|
|
||||||
else if(j==6) chpro=options.rtSettings.srgb;
|
|
||||||
for (int i=0; i<opnames.size(); i++)
|
|
||||||
if(chpro.compare(opnames[i]) ==0) present_space[j]=1;
|
|
||||||
if (present_space[j]==0) { if (pl) pl->setProgressStr ("Missing file..");pl->setProgress (0.0);}// display file not present: not very good display information...!!
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check that output profiles exist, otherwise revert to sRGB
|
if (drapeau==0) pc = iccStore->getContent (outProfile);// use profile in system (Prophoto.icm, sRGB.icm, etc.) if present, otherwise use LCMS2 profile generate by lab2rgb16b
|
||||||
if (params.icm.output=="ProPhoto" && present_space[0]==1) outProfile=options.rtSettings.prophoto;
|
|
||||||
else if (params.icm.output=="Adobe RGB" && present_space[1]==1) outProfile=options.rtSettings.adobe;
|
|
||||||
else if (params.icm.output=="WideGamut" && present_space[2]==1) outProfile=options.rtSettings.widegamut;
|
|
||||||
else if (params.icm.output=="Beta RGB" && present_space[3]==1) outProfile=options.rtSettings.beta;
|
|
||||||
else if (params.icm.output=="BestRGB" && present_space[4]==1) outProfile=options.rtSettings.best;
|
|
||||||
else if (params.icm.output=="BruceRGB" && present_space[5]==1) outProfile=options.rtSettings.bruce;
|
|
||||||
else outProfile=options.rtSettings.srgb; //if not found or choice=srgb
|
|
||||||
|
|
||||||
pc = iccStore->getContent (outProfile);
|
|
||||||
|
|
||||||
readyImg->setOutputProfile (pc.data, pc.length);
|
readyImg->setOutputProfile (pc.data, pc.length);
|
||||||
|
|
||||||
@ -337,7 +347,6 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{//if default mode : profil = selection by choice in list (Prophoto.icm, sRGB.icm, etc., etc.) , gamma = gamma of profile or not selected Free gamma
|
{//if default mode : profil = selection by choice in list (Prophoto.icm, sRGB.icm, etc., etc.) , gamma = gamma of profile or not selected Free gamma
|
||||||
|
|
||||||
Image16* readyImg = ipf.lab2rgb16 (labView, cx, cy, cw, ch, params.icm.output);
|
Image16* readyImg = ipf.lab2rgb16 (labView, cx, cy, cw, ch, params.icm.output);
|
||||||
delete labView;
|
delete labView;
|
||||||
if (pl) pl->setProgress (0.70);
|
if (pl) pl->setProgress (0.70);
|
||||||
|
@ -50,8 +50,10 @@
|
|||||||
#define ADDSET_VIBRANCE_PASTELS 40
|
#define ADDSET_VIBRANCE_PASTELS 40
|
||||||
#define ADDSET_VIBRANCE_SATURATED 41
|
#define ADDSET_VIBRANCE_SATURATED 41
|
||||||
#define ADDSET_VIBRANCE_PSTHRESHOLD 42
|
#define ADDSET_VIBRANCE_PSTHRESHOLD 42
|
||||||
|
#define ADDSET_FREE_OUPUT_GAMMA 43
|
||||||
|
#define ADDSET_FREE_OUTPUT_SLOPE 44
|
||||||
|
|
||||||
// When adding items, make sure to update ADDSET_PARAM_NUM
|
// When adding items, make sure to update ADDSET_PARAM_NUM
|
||||||
#define ADDSET_PARAM_NUM 43 // THIS IS USED AS A DELIMITER!!
|
#define ADDSET_PARAM_NUM 45 // THIS IS USED AS A DELIMITER!!
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -131,6 +131,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
sharpening->setAdjusterBehavior (false);
|
sharpening->setAdjusterBehavior (false);
|
||||||
sharpenEdge->setAdjusterBehavior (false, false);
|
sharpenEdge->setAdjusterBehavior (false, false);
|
||||||
sharpenMicro->setAdjusterBehavior (false, false);
|
sharpenMicro->setAdjusterBehavior (false, false);
|
||||||
|
icm->setAdjusterBehavior (false, false);
|
||||||
|
|
||||||
chmixer->setAdjusterBehavior (false);
|
chmixer->setAdjusterBehavior (false);
|
||||||
shadowshighlights->setAdjusterBehavior (false, false, false);
|
shadowshighlights->setAdjusterBehavior (false, false, false);
|
||||||
@ -154,6 +155,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_AMOUNT]);
|
sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_AMOUNT]);
|
||||||
sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT],options.baBehav[ADDSET_SHARPENEDGE_PASS]);
|
sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT],options.baBehav[ADDSET_SHARPENEDGE_PASS]);
|
||||||
sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT],options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]);
|
sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT],options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]);
|
||||||
|
icm->setAdjusterBehavior (options.baBehav[ADDSET_FREE_OUPUT_GAMMA],options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]);
|
||||||
|
|
||||||
chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER]);
|
chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER]);
|
||||||
shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]);
|
shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]);
|
||||||
@ -194,6 +196,9 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) pparams.vibrance.pastels = 0;
|
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) pparams.vibrance.pastels = 0;
|
||||||
if (options.baBehav[ADDSET_VIBRANCE_SATURATED]) pparams.vibrance.saturated = 0;
|
if (options.baBehav[ADDSET_VIBRANCE_SATURATED]) pparams.vibrance.saturated = 0;
|
||||||
|
|
||||||
|
if (options.baBehav[ADDSET_FREE_OUPUT_GAMMA]) pparams.icm.gampos = 0;
|
||||||
|
if (options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]) pparams.icm.slpos = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_CBOOST_AMOUNT]) pparams.colorBoost.amount = 0;
|
if (options.baBehav[ADDSET_CBOOST_AMOUNT]) pparams.colorBoost.amount = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_CS_BLUEYELLOW]) pparams.colorShift.a = 0;
|
if (options.baBehav[ADDSET_CS_BLUEYELLOW]) pparams.colorShift.a = 0;
|
||||||
|
@ -127,16 +127,16 @@ ICMPanel::ICMPanel () : Gtk::VBox(), FoldableToolPanel(this), iunchanged(NULL),
|
|||||||
freegamma->set_active (false);
|
freegamma->set_active (false);
|
||||||
pack_start( *freegamma);
|
pack_start( *freegamma);
|
||||||
|
|
||||||
g_ampos = Gtk::manage(new Adjuster (M("TP_GAMMA_CURV"),1,3.5,0.01,2.22));
|
gampos = Gtk::manage(new Adjuster (M("TP_GAMMA_CURV"),1,3.5,0.01,2.22));
|
||||||
g_ampos->setAdjusterListener (this);
|
gampos->setAdjusterListener (this);
|
||||||
if (g_ampos->delay < 1000) g_ampos->delay = 1000;
|
if (gampos->delay < 1000) gampos->delay = 1000;
|
||||||
g_ampos->show();
|
gampos->show();
|
||||||
s_lpos = Gtk::manage(new Adjuster (M("TP_GAMMA_SLOP"),0,15,0.01,4.5));
|
slpos = Gtk::manage(new Adjuster (M("TP_GAMMA_SLOP"),0,15,0.01,4.5));
|
||||||
s_lpos->setAdjusterListener (this);
|
slpos->setAdjusterListener (this);
|
||||||
if (s_lpos->delay < 1000) s_lpos->delay = 1000;
|
if (slpos->delay < 1000) slpos->delay = 1000;
|
||||||
s_lpos->show();
|
slpos->show();
|
||||||
pack_start( *g_ampos, Gtk::PACK_SHRINK, 4);//gamma
|
pack_start( *gampos, Gtk::PACK_SHRINK, 4);//gamma
|
||||||
pack_start( *s_lpos, Gtk::PACK_SHRINK, 4);//slope
|
pack_start( *slpos, Gtk::PACK_SHRINK, 4);//slope
|
||||||
|
|
||||||
gamcsconn = freegamma->signal_toggled().connect ( sigc::mem_fun(*this, &ICMPanel::GamChanged));
|
gamcsconn = freegamma->signal_toggled().connect ( sigc::mem_fun(*this, &ICMPanel::GamChanged));
|
||||||
|
|
||||||
@ -243,8 +243,8 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
|
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
|
||||||
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
|
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
|
||||||
}
|
}
|
||||||
g_ampos->setEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
gampos->setEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
||||||
s_lpos->setEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
slpos->setEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,8 +253,8 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
gamcsconn.block (false);
|
gamcsconn.block (false);
|
||||||
|
|
||||||
lastgamfree = pp->icm.freegamma;
|
lastgamfree = pp->icm.freegamma;
|
||||||
g_ampos->setValue (pp->icm.gampos);
|
gampos->setValue (pp->icm.gampos);
|
||||||
s_lpos->setValue (pp->icm.slpos);
|
slpos->setValue (pp->icm.slpos);
|
||||||
|
|
||||||
|
|
||||||
ipc.block (false);
|
ipc.block (false);
|
||||||
@ -290,8 +290,8 @@ void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pp->icm.output = onames->get_active_text();
|
pp->icm.output = onames->get_active_text();
|
||||||
pp->icm.freegamma = freegamma->get_active();
|
pp->icm.freegamma = freegamma->get_active();
|
||||||
pp->icm.blendCMSMatrix = ckbBlendCMSMatrix->get_active ();
|
pp->icm.blendCMSMatrix = ckbBlendCMSMatrix->get_active ();
|
||||||
pp->icm.gampos =(double) g_ampos->getValue();
|
pp->icm.gampos =(double) gampos->getValue();
|
||||||
pp->icm.slpos =(double) s_lpos->getValue();
|
pp->icm.slpos =(double) slpos->getValue();
|
||||||
|
|
||||||
if (pedited) {
|
if (pedited) {
|
||||||
pedited->icm.input = !iunchanged->get_active ();
|
pedited->icm.input = !iunchanged->get_active ();
|
||||||
@ -300,35 +300,42 @@ void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pedited->icm.blendCMSMatrix = !ckbBlendCMSMatrix->get_inconsistent ();
|
pedited->icm.blendCMSMatrix = !ckbBlendCMSMatrix->get_inconsistent ();
|
||||||
pedited->icm.gamma = wgamma->get_active_text()!=M("GENERAL_UNCHANGED");
|
pedited->icm.gamma = wgamma->get_active_text()!=M("GENERAL_UNCHANGED");
|
||||||
pedited->icm.freegamma =!freegamma->get_inconsistent();
|
pedited->icm.freegamma =!freegamma->get_inconsistent();
|
||||||
pedited->icm.gampos = g_ampos->getEditedState ();
|
pedited->icm.gampos = gampos->getEditedState ();
|
||||||
pedited->icm.slpos = s_lpos->getEditedState ();
|
pedited->icm.slpos = slpos->getEditedState ();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void ICMPanel::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) {
|
void ICMPanel::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) {
|
||||||
g_ampos->setDefault (defParams->icm.gampos);
|
gampos->setDefault (defParams->icm.gampos);
|
||||||
s_lpos->setDefault (defParams->icm.slpos);
|
slpos->setDefault (defParams->icm.slpos);
|
||||||
|
|
||||||
if (pedited) {
|
if (pedited) {
|
||||||
g_ampos->setDefaultEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
gampos->setDefaultEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
||||||
s_lpos->setDefaultEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
slpos->setDefaultEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_ampos->setDefaultEditedState (Irrelevant);
|
gampos->setDefaultEditedState (Irrelevant);
|
||||||
s_lpos->setDefaultEditedState (Irrelevant);
|
slpos->setDefaultEditedState (Irrelevant);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ICMPanel::setAdjusterBehavior (bool gammaadd, bool slopeadd) {
|
||||||
|
gampos->setAddMode (gammaadd);
|
||||||
|
slpos->setAddMode (slopeadd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ICMPanel::adjusterChanged (Adjuster* a, double newval) {
|
void ICMPanel::adjusterChanged (Adjuster* a, double newval) {
|
||||||
|
|
||||||
if (listener && freegamma->get_active()) {
|
if (listener && freegamma->get_active()) {
|
||||||
|
|
||||||
Glib::ustring costr = Glib::ustring::format ((int)a->getValue());
|
Glib::ustring costr = Glib::ustring::format ((int)a->getValue());
|
||||||
|
|
||||||
if (a==g_ampos)
|
if (a==gampos)
|
||||||
listener->panelChanged (EvGAMPOS, costr);
|
listener->panelChanged (EvGAMPOS, costr);
|
||||||
else if (a==s_lpos)
|
else if (a==slpos)
|
||||||
listener->panelChanged (EvSLPOS, costr);
|
listener->panelChanged (EvSLPOS, costr);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -468,8 +475,8 @@ void ICMPanel::setBatchMode (bool batchMode) {
|
|||||||
onames->append_text (M("GENERAL_UNCHANGED"));
|
onames->append_text (M("GENERAL_UNCHANGED"));
|
||||||
wnames->append_text (M("GENERAL_UNCHANGED"));
|
wnames->append_text (M("GENERAL_UNCHANGED"));
|
||||||
wgamma->append_text (M("GENERAL_UNCHANGED"));
|
wgamma->append_text (M("GENERAL_UNCHANGED"));
|
||||||
g_ampos->showEditedCB ();
|
gampos->showEditedCB ();
|
||||||
s_lpos->showEditedCB ();
|
slpos->showEditedCB ();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,8 @@ class ICMPanelListener {
|
|||||||
class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
|
class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Adjuster* g_ampos;
|
Adjuster* gampos;
|
||||||
Adjuster* s_lpos;
|
Adjuster* slpos;
|
||||||
bool lastgamfree;
|
bool lastgamfree;
|
||||||
sigc::connection gamcsconn;
|
sigc::connection gamcsconn;
|
||||||
//bool freegamma;
|
//bool freegamma;
|
||||||
@ -74,6 +74,7 @@ class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolP
|
|||||||
void setBatchMode (bool batchMode);
|
void setBatchMode (bool batchMode);
|
||||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
||||||
void adjusterChanged (Adjuster* a, double newval);
|
void adjusterChanged (Adjuster* a, double newval);
|
||||||
|
void setAdjusterBehavior (bool gammaadd, bool slopeadd);
|
||||||
|
|
||||||
void wpChanged ();
|
void wpChanged ();
|
||||||
void opChanged ();
|
void opChanged ();
|
||||||
|
@ -212,7 +212,9 @@ void Options::setDefaults () {
|
|||||||
0, // ADDSET_SHARPENMICRO_UNIFORMITY
|
0, // ADDSET_SHARPENMICRO_UNIFORMITY
|
||||||
1, // ADDSET_VIBRANCE_PASTELS
|
1, // ADDSET_VIBRANCE_PASTELS
|
||||||
1, // ADDSET_VIBRANCE_SATURATED
|
1, // ADDSET_VIBRANCE_SATURATED
|
||||||
0 // ADDSET_VIBRANCE_SATURATED
|
0, // ADDSET_VIBRANCE_PSTHRESHOLD
|
||||||
|
0, // ADDSET_FREE_OUPUT_GAMMA
|
||||||
|
0, // ADDSET_FREE_OUTPUT_SLOPE
|
||||||
|
|
||||||
};
|
};
|
||||||
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);
|
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);
|
||||||
|
@ -431,6 +431,11 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (vibrance.protectskins) toEdit.vibrance.protectskins = mods.vibrance.protectskins;
|
if (vibrance.protectskins) toEdit.vibrance.protectskins = mods.vibrance.protectskins;
|
||||||
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
|
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
|
||||||
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;
|
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount;
|
if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount;
|
||||||
if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
|
if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
|
||||||
if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
|
if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
|
||||||
@ -509,8 +514,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
if (icm.blendCMSMatrix) toEdit.icm.blendCMSMatrix = mods.icm.blendCMSMatrix;
|
if (icm.blendCMSMatrix) toEdit.icm.blendCMSMatrix = mods.icm.blendCMSMatrix;
|
||||||
if (icm.working) toEdit.icm.working = mods.icm.working;
|
if (icm.working) toEdit.icm.working = mods.icm.working;
|
||||||
if (icm.output) toEdit.icm.output = mods.icm.output;
|
if (icm.output) toEdit.icm.output = mods.icm.output;
|
||||||
if (icm.gampos) toEdit.icm.gampos = mods.icm.gampos;
|
//if (icm.gampos) toEdit.icm.gampos = mods.icm.gampos;
|
||||||
if (icm.slpos) toEdit.icm.slpos = mods.icm.slpos;
|
//if (icm.slpos) toEdit.icm.slpos = mods.icm.slpos;
|
||||||
|
if (icm.gampos) toEdit.icm.gampos = dontforceSet && options.baBehav[ADDSET_FREE_OUPUT_GAMMA] ? toEdit.icm.gampos + mods.icm.gampos : mods.icm.gampos;
|
||||||
|
if (icm.slpos) toEdit.icm.slpos = dontforceSet && options.baBehav[ADDSET_FREE_OUTPUT_SLOPE] ? toEdit.icm.slpos + mods.icm.slpos : mods.icm.slpos;
|
||||||
if (icm.gamma) toEdit.icm.gamma = mods.icm.gamma;
|
if (icm.gamma) toEdit.icm.gamma = mods.icm.gamma;
|
||||||
if (icm.freegamma) toEdit.icm.freegamma = mods.icm.freegamma;
|
if (icm.freegamma) toEdit.icm.freegamma = mods.icm.freegamma;
|
||||||
if (raw.ccSteps) toEdit.raw.ccSteps = mods.raw.ccSteps;
|
if (raw.ccSteps) toEdit.raw.ccSteps = mods.raw.ccSteps;
|
||||||
|
@ -80,6 +80,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
exifch = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXIFCHANGES")));
|
exifch = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXIFCHANGES")));
|
||||||
iptc = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IPTCINFO")));
|
iptc = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IPTCINFO")));
|
||||||
icm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMSETTINGS")));
|
icm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMSETTINGS")));
|
||||||
|
gam = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMGAMMA")));
|
||||||
|
|
||||||
// options in raw:
|
// options in raw:
|
||||||
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
|
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
|
||||||
@ -158,6 +159,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
vboxes[5]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
|
vboxes[5]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[5]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
|
vboxes[5]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[5]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
|
vboxes[5]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
|
||||||
|
vboxes[5]->pack_start (*gam, Gtk::PACK_SHRINK, 2);
|
||||||
|
|
||||||
vboxes[6]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
|
vboxes[6]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
|
||||||
vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
|
vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
|
||||||
@ -262,6 +264,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
|||||||
exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
|
gamcsconn = gam->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
|
|
||||||
raw_dmethodConn = raw_dmethod->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
raw_dmethodConn = raw_dmethod->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
||||||
@ -459,16 +462,19 @@ void PartialPasteDlg::colorToggled () {
|
|||||||
vibranceConn.block (true);
|
vibranceConn.block (true);
|
||||||
chmixerConn.block (true);
|
chmixerConn.block (true);
|
||||||
hsveqConn.block (true);
|
hsveqConn.block (true);
|
||||||
|
gamcsconn.block (true);
|
||||||
color->set_inconsistent (false);
|
color->set_inconsistent (false);
|
||||||
|
|
||||||
vibrance->set_active (color->get_active ());
|
vibrance->set_active (color->get_active ());
|
||||||
chmixer->set_active (color->get_active ());
|
chmixer->set_active (color->get_active ());
|
||||||
hsveq->set_active (color->get_active ());
|
hsveq->set_active (color->get_active ());
|
||||||
|
icm->set_active (color->get_active ());
|
||||||
|
|
||||||
vibranceConn.block (false);
|
vibranceConn.block (false);
|
||||||
chmixerConn.block (false);
|
chmixerConn.block (false);
|
||||||
hsveqConn.block (false);
|
hsveqConn.block (false);
|
||||||
|
gamcsconn.block (false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PartialPasteDlg::lensToggled () {
|
void PartialPasteDlg::lensToggled () {
|
||||||
@ -519,16 +525,19 @@ void PartialPasteDlg::metaicmToggled () {
|
|||||||
exifchConn.block (true);
|
exifchConn.block (true);
|
||||||
iptcConn.block (true);
|
iptcConn.block (true);
|
||||||
icmConn.block (true);
|
icmConn.block (true);
|
||||||
|
gamcsconn.block (true);
|
||||||
metaicm->set_inconsistent (false);
|
metaicm->set_inconsistent (false);
|
||||||
|
|
||||||
exifch->set_active (metaicm->get_active ());
|
exifch->set_active (metaicm->get_active ());
|
||||||
iptc->set_active (metaicm->get_active ());
|
iptc->set_active (metaicm->get_active ());
|
||||||
icm->set_active (metaicm->get_active ());
|
icm->set_active (metaicm->get_active ());
|
||||||
|
gam->set_active (metaicm->get_active ());
|
||||||
|
|
||||||
exifchConn.block (false);
|
exifchConn.block (false);
|
||||||
iptcConn.block (false);
|
iptcConn.block (false);
|
||||||
icmConn.block (false);
|
icmConn.block (false);
|
||||||
|
gamcsconn.block (false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -551,6 +560,8 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
|
|||||||
if (vibrance->get_active ()) dst->vibrance = src->vibrance;
|
if (vibrance->get_active ()) dst->vibrance = src->vibrance;
|
||||||
if (chmixer->get_active ()) dst->chmixer = src->chmixer;
|
if (chmixer->get_active ()) dst->chmixer = src->chmixer;
|
||||||
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
|
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
|
||||||
|
if (icm->get_active ()) dst->icm = src->icm;
|
||||||
|
|
||||||
if (distortion->get_active ()) dst->distortion = src->distortion;
|
if (distortion->get_active ()) dst->distortion = src->distortion;
|
||||||
if (cacorr->get_active ()) dst->cacorrection = src->cacorrection;
|
if (cacorr->get_active ()) dst->cacorrection = src->cacorrection;
|
||||||
if (vignetting->get_active ()) dst->vignetting = src->vignetting;
|
if (vignetting->get_active ()) dst->vignetting = src->vignetting;
|
||||||
@ -565,6 +576,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
|
|||||||
if (exifch->get_active ()) dst->exif = src->exif;
|
if (exifch->get_active ()) dst->exif = src->exif;
|
||||||
if (iptc->get_active ()) dst->iptc = src->iptc;
|
if (iptc->get_active ()) dst->iptc = src->iptc;
|
||||||
if (icm->get_active ()) dst->icm = src->icm;
|
if (icm->get_active ()) dst->icm = src->icm;
|
||||||
|
if (gam->get_active ()) dst->gam = src->gam;
|
||||||
|
|
||||||
if (raw_dmethod->get_active ()) dst->raw.dmethod =src->raw.dmethod;
|
if (raw_dmethod->get_active ()) dst->raw.dmethod =src->raw.dmethod;
|
||||||
if (raw_ccSteps->get_active ()) dst->raw.ccSteps =src->raw.ccSteps;
|
if (raw_ccSteps->get_active ()) dst->raw.ccSteps =src->raw.ccSteps;
|
||||||
|
@ -58,6 +58,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
Gtk::CheckButton* vibrance;
|
Gtk::CheckButton* vibrance;
|
||||||
Gtk::CheckButton* chmixer;
|
Gtk::CheckButton* chmixer;
|
||||||
Gtk::CheckButton* hsveq;
|
Gtk::CheckButton* hsveq;
|
||||||
|
// Gtk::CheckButton* icm;
|
||||||
|
|
||||||
// options in lens:
|
// options in lens:
|
||||||
Gtk::CheckButton* distortion;
|
Gtk::CheckButton* distortion;
|
||||||
@ -76,6 +77,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
Gtk::CheckButton* exifch;
|
Gtk::CheckButton* exifch;
|
||||||
Gtk::CheckButton* iptc;
|
Gtk::CheckButton* iptc;
|
||||||
Gtk::CheckButton* icm;
|
Gtk::CheckButton* icm;
|
||||||
|
Gtk::CheckButton* gam;
|
||||||
|
|
||||||
// options in raw:
|
// options in raw:
|
||||||
Gtk::CheckButton* raw_expos;
|
Gtk::CheckButton* raw_expos;
|
||||||
@ -107,7 +109,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
|||||||
sigc::connection vibranceConn, chmixerConn, hsveqConn;
|
sigc::connection vibranceConn, chmixerConn, hsveqConn;
|
||||||
sigc::connection distortionConn, cacorrConn, vignettingConn;
|
sigc::connection distortionConn, cacorrConn, vignettingConn;
|
||||||
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
|
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
|
||||||
sigc::connection exifchConn, iptcConn, icmConn;
|
sigc::connection exifchConn, iptcConn, icmConn, gamcsconn;
|
||||||
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn;
|
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn;
|
||||||
sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_all_enhanceConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
|
sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_all_enhanceConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
|
||||||
|
|
||||||
|
@ -195,6 +195,12 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
|
|||||||
appendBehavList (mi, M("TP_VIBRANCE_SATURATED"), ADDSET_VIBRANCE_SATURATED, false);
|
appendBehavList (mi, M("TP_VIBRANCE_SATURATED"), ADDSET_VIBRANCE_SATURATED, false);
|
||||||
appendBehavList (mi, M("TP_VIBRANCE_PSTHRESHOLD"), ADDSET_VIBRANCE_PSTHRESHOLD, false);
|
appendBehavList (mi, M("TP_VIBRANCE_PSTHRESHOLD"), ADDSET_VIBRANCE_PSTHRESHOLD, false);
|
||||||
|
|
||||||
|
mi = behModel->append ();
|
||||||
|
mi->set_value (behavColumns.label, M("TP_GAMMA_OUTPUT"));
|
||||||
|
appendBehavList (mi, M("TP_GAMMA_CURV"), ADDSET_FREE_OUPUT_GAMMA, false);
|
||||||
|
appendBehavList (mi, M("TP_GAMMA_SLOP"), ADDSET_FREE_OUTPUT_SLOPE, false);
|
||||||
|
|
||||||
|
|
||||||
mi = behModel->append ();
|
mi = behModel->append ();
|
||||||
mi->set_value (behavColumns.label, M("TP_CHMIXER_LABEL"));
|
mi->set_value (behavColumns.label, M("TP_CHMIXER_LABEL"));
|
||||||
appendBehavList (mi, M("TP_CHMIXER_RED")+", "+M("TP_CHMIXER_GREEN")+", "+M("TP_CHMIXER_BLUE"), ADDSET_CHMIXER, false);
|
appendBehavList (mi, M("TP_CHMIXER_RED")+", "+M("TP_CHMIXER_GREEN")+", "+M("TP_CHMIXER_BLUE"), ADDSET_CHMIXER, false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user