Flatfield tool.

This commit is contained in:
Emil Martinec
2011-01-17 21:07:59 -06:00
parent d1a479a4bc
commit 40c936504e
29 changed files with 914 additions and 121 deletions

View File

@@ -24,12 +24,15 @@ PartialPasteDlg::PartialPasteDlg () {
set_modal (true);
set_title (M("PARTIALPASTE_DIALOGLABEL"));
everything = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EVERYTHING")));
basic = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_BASICGROUP")));
luminance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LUMINANCEGROUP")));
color = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORGROUP")));
lens = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LENSGROUP")));
composition = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COMPOSITIONGROUP")));
metaicm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_METAICMGROUP")));
raw = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWGROUP")));
// options in basic:
wb = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_WHITEBALANCE")));
@@ -38,7 +41,7 @@ PartialPasteDlg::PartialPasteDlg () {
// options in luminance:
sharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENING")));
impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
lumaden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LUMADENOISE")));
labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE")));
sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS")));
@@ -69,9 +72,18 @@ PartialPasteDlg::PartialPasteDlg () {
iptc = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IPTCINFO")));
icm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMSETTINGS")));
Gtk::VBox* vboxes[6];
Gtk::HSeparator* hseps[6];
for (int i=0; i<6; i++) {
// options in raw:
df_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEFILE")));
df_AutoSelect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEAUTOSELECT")));
ff_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDFILE")));
ff_AutoSelect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDAUTOSELECT")));
ff_BlurRadius = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDBLURRADIUS")));
ff_BlurType = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDBLURTYPE")));
Gtk::VBox* vboxes[7];
Gtk::HSeparator* hseps[7];
for (int i=0; i<7; i++) {
vboxes[i] = Gtk::manage (new Gtk::VBox ());
vboxes[i]->set_border_width (16);
hseps[i] = Gtk::manage (new Gtk::HSeparator ());
@@ -86,7 +98,7 @@ PartialPasteDlg::PartialPasteDlg () {
vboxes[1]->pack_start (*luminance, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*hseps[1], Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*sharpen, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*lumaden, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*labcurve, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*sh, Gtk::PACK_SHRINK, 2);
@@ -98,7 +110,7 @@ PartialPasteDlg::PartialPasteDlg () {
vboxes[2]->pack_start (*colormixer, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*colorshift, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*colorboost, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*hsveq, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*hsveq, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*colorden, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2);
@@ -116,54 +128,80 @@ PartialPasteDlg::PartialPasteDlg () {
vboxes[4]->pack_start (*crop, Gtk::PACK_SHRINK, 2);
vboxes[4]->pack_start (*resize, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*metaicm, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*hseps[5], 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 (*icm, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*df_file, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*df_AutoSelect, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*ff_file, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*ff_AutoSelect, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*ff_BlurType, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*ff_BlurRadius, Gtk::PACK_SHRINK, 2);
Gtk::VBox* vbleft = Gtk::manage (new Gtk::VBox ());
Gtk::VBox* vbright = Gtk::manage (new Gtk::VBox ());
vboxes[6]->pack_start (*metaicm, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
vbleft->set_border_width (16);
vbright->set_border_width (16);
Gtk::VBox* vbCol1 = Gtk::manage (new Gtk::VBox ());
Gtk::VBox* vbCol2 = Gtk::manage (new Gtk::VBox ());
Gtk::VBox* vbCol3 = Gtk::manage (new Gtk::VBox ());
vbCol1->set_border_width (16);
vbCol2->set_border_width (16);
vbCol3->set_border_width (16);
for (int i=0; i<3; i++)
vbleft->pack_start (*vboxes[i]);
vbCol1->pack_start (*vboxes[i]);
for (int i=3; i<6; i++)
vbright->pack_start (*vboxes[i]);
vbCol2->pack_start (*vboxes[i]);
for (int i=6; i<7; i++)
vbCol3->pack_start (*vboxes[i]);
Gtk::VBox* vbtop = Gtk::manage (new Gtk::VBox ());
vbtop->pack_start (*everything, Gtk::PACK_SHRINK, 2);
vbtop->pack_start (*(Gtk::manage (new Gtk::HSeparator ())));
vbtop->set_border_width (8);
get_vbox()->pack_start (*vbtop);
Gtk::HBox* hbmain = Gtk::manage (new Gtk::HBox ());
hbmain->pack_start (*vbleft);
hbmain->pack_start (*vbCol1);
hbmain->pack_start (*(Gtk::manage (new Gtk::VSeparator ())));
hbmain->pack_start (*vbright);
hbmain->pack_start (*vbCol2);
hbmain->pack_start (*(Gtk::manage (new Gtk::VSeparator ())));
hbmain->pack_start (*vbCol3);
get_vbox()->pack_start (*hbmain);
// This can be improved
// there is currently no binding of subsettings to CheckButton 'everything' for its inconsistent status
everythingConn = everything->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::everythingToggled));
basicConn = basic->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::basicToggled));
luminanceConn = luminance->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::luminanceToggled));
colorConn = color->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::colorToggled));
lensConn = lens->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::lensToggled));
compositionConn = composition->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::compositionToggled));
metaicmConn = metaicm->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::metaicmToggled));
metaicmConn = metaicm->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::metaicmToggled));
rawConn = raw->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::rawToggled));
wbConn = wb->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
hlrecConn = hlrec->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
lumadenConn = lumaden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
waveqConn = waveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
waveqConn = waveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*luminance, &Gtk::CheckButton::set_inconsistent), true));
colormixerConn = colormixer->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
colorshiftConn = colorshift->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
colorboostConn = colorboost->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
hsveqConn = hsveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
colordenConn = colorden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
hsveqConn = hsveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
colordenConn = colorden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
dirpyrdenConn = dirpyrden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
distortionConn = distortion->signal_toggled().connect (sigc::bind (sigc::mem_fun(*lens, &Gtk::CheckButton::set_inconsistent), true));
@@ -179,6 +217,13 @@ PartialPasteDlg::PartialPasteDlg () {
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));
df_fileConn = df_file->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
df_AutoSelectConn = df_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_fileConn = ff_file->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_AutoSelectConn = ff_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_BlurRadiusConn = ff_BlurRadius->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_BlurTypeConn = ff_BlurType->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
add_button (Gtk::StockID("gtk-ok"), 1);
add_button (Gtk::StockID("gtk-cancel"), 0);
set_response_sensitive (1);
@@ -186,6 +231,71 @@ PartialPasteDlg::PartialPasteDlg () {
show_all_children ();
}
void PartialPasteDlg::everythingToggled () {
basicConn.block (true);
luminanceConn.block (true);
colorConn.block (true);
lensConn.block (true);
compositionConn.block (true);
metaicmConn.block (true);
rawConn.block (true);
everything->set_inconsistent (false);
//toggle group headings
basic->set_active(everything->get_active());
luminance->set_active(everything->get_active());
color->set_active(everything->get_active());
lens->set_active(everything->get_active());
composition->set_active(everything->get_active());
metaicm->set_active(everything->get_active());
raw->set_active(everything->get_active());
//toggle group children
PartialPasteDlg::basicToggled ();
PartialPasteDlg::luminanceToggled ();
PartialPasteDlg::colorToggled ();
PartialPasteDlg::lensToggled ();
PartialPasteDlg::compositionToggled ();
PartialPasteDlg::metaicmToggled ();
PartialPasteDlg::rawToggled ();
basicConn.block (false);
luminanceConn.block (false);
colorConn.block (false);
lensConn.block (false);
compositionConn.block (false);
metaicmConn.block (false);
rawConn.block (false);
}
void PartialPasteDlg::rawToggled () {
df_fileConn.block (true);
df_AutoSelectConn.block (true);
ff_fileConn.block (true);
ff_AutoSelectConn.block (true);
ff_BlurRadiusConn.block (true);
ff_BlurTypeConn.block (true);
raw->set_inconsistent (false);
df_file->set_active (raw->get_active ());
df_AutoSelect->set_active (raw->get_active ());
ff_file->set_active (raw->get_active ());
ff_AutoSelect->set_active (raw->get_active ());
ff_BlurRadius->set_active (raw->get_active ());
ff_BlurType->set_active (raw->get_active ());
df_fileConn.block (false);
df_AutoSelectConn.block (false);
ff_fileConn.block (false);
ff_AutoSelectConn.block (false);
ff_BlurRadiusConn.block (false);
ff_BlurTypeConn.block (false);
}
void PartialPasteDlg::basicToggled () {
wbConn.block (true);
@@ -206,7 +316,7 @@ void PartialPasteDlg::basicToggled () {
void PartialPasteDlg::luminanceToggled () {
sharpenConn.block (true);
impdenConn.block (true);
impdenConn.block (true);
lumadenConn.block (true);
labcurveConn.block (true);
shConn.block (true);
@@ -216,7 +326,7 @@ void PartialPasteDlg::luminanceToggled () {
luminance->set_inconsistent (false);
sharpen->set_active (luminance->get_active ());
impden->set_active (luminance->get_active ());
impden->set_active (luminance->get_active ());
lumaden->set_active (luminance->get_active ());
labcurve->set_active (luminance->get_active ());
sh->set_active (luminance->get_active ());
@@ -237,6 +347,7 @@ void PartialPasteDlg::colorToggled () {
colormixerConn.block (true);
colorshiftConn.block (true);
colorboostConn.block (true);
hsveqConn.block (true);
colordenConn.block (true);
dirpyrdenConn.block (true);
@@ -245,15 +356,16 @@ void PartialPasteDlg::colorToggled () {
colormixer->set_active (color->get_active ());
colorshift->set_active (color->get_active ());
colorboost->set_active (color->get_active ());
hsveq->set_active (color->get_active ());
hsveq->set_active (color->get_active ());
colorden->set_active (color->get_active ());
dirpyrden->set_active (color->get_active ());
colormixerConn.block (false);
colorshiftConn.block (false);
colorboostConn.block (false);
hsveqConn.block (false);
colordenConn.block (false);
dirpyrdenConn.block (false);
dirpyrdenConn.block (false);
}
void PartialPasteDlg::lensToggled () {
@@ -328,7 +440,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
if (colormixer->get_active ()) dst->chmixer = src->chmixer;
if (colorshift->get_active ()) dst->colorShift = src->colorShift;
if (colorboost->get_active ()) dst->colorBoost = src->colorBoost;
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
if (colorden->get_active ()) dst->colorDenoise = src->colorDenoise;
if (dirpyrden->get_active ()) dst->dirpyrDenoise = src->dirpyrDenoise;
@@ -343,6 +455,13 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
if (exifch->get_active ()) dst->exif = src->exif;
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 (df_file->get_active ()) dst->raw.dark_frame = src->raw.dark_frame;
if (df_AutoSelect->get_active ()) dst->raw.df_autoselect = src->raw.df_autoselect;
if (ff_file->get_active ()) dst->raw.ff_file = src->raw.ff_file;
if (ff_AutoSelect->get_active ()) dst->raw.ff_AutoSelect = src->raw.ff_AutoSelect;
if (ff_BlurRadius->get_active ()) dst->raw.ff_BlurRadius = src->raw.ff_BlurRadius;
if (ff_BlurType->get_active ()) dst->raw.ff_BlurType = src->raw.ff_BlurType;
}