Enhanced Filters for Flat-Field and Dark-Frame filechoosers (see issue 2440)

This commit is contained in:
michael
2014-07-09 23:19:49 -04:00
parent 617b888fa0
commit 3290ae57ad
7 changed files with 131 additions and 1 deletions

View File

@@ -1249,6 +1249,8 @@ TP_FLATFIELD_BT_VERTHORIZ;Vertical + Horizontal
TP_FLATFIELD_BT_VERTICAL;Vertical TP_FLATFIELD_BT_VERTICAL;Vertical
TP_FLATFIELD_CLIPCONTROL;Clip control TP_FLATFIELD_CLIPCONTROL;Clip control
TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, clip control can lead to color cast. TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, clip control can lead to color cast.
TP_FLATFIELD_FILEDLGFILTERANY;Any files
TP_FLATFIELD_FILEDLGFILTERFF;Same format as current photo
TP_FLATFIELD_LABEL;Flat-Field TP_FLATFIELD_LABEL;Flat-Field
TP_GAMMA_CURV;Gamma TP_GAMMA_CURV;Gamma
TP_GAMMA_FREE;Free gamma TP_GAMMA_FREE;Free gamma

View File

@@ -49,6 +49,26 @@ DarkFrame::DarkFrame () : FoldableToolPanel(this)
dfautoconn = dfAuto->signal_toggled().connect ( sigc::mem_fun(*this, &DarkFrame::dfAutoChanged), true); dfautoconn = dfAuto->signal_toggled().connect ( sigc::mem_fun(*this, &DarkFrame::dfAutoChanged), true);
dfFile = darkFrameFile->signal_file_set().connect ( sigc::mem_fun(*this, &DarkFrame::darkFrameChanged), true); dfFile = darkFrameFile->signal_file_set().connect ( sigc::mem_fun(*this, &DarkFrame::darkFrameChanged), true);
btnReset->signal_clicked().connect( sigc::mem_fun(*this, &DarkFrame::darkFrameReset), true ); btnReset->signal_clicked().connect( sigc::mem_fun(*this, &DarkFrame::darkFrameReset), true );
// Set filename filters
b_filter_asCurrent = false;
Gtk::FileFilter *filter_any = Gtk::manage(new Gtk::FileFilter);
filter_any->add_pattern("*");
filter_any->set_name(M("TP_FLATFIELD_FILEDLGFILTERANY"));
darkFrameFile->add_filter (*filter_any);
// filters for all supported non-raw extensions
for (size_t i=0; i<options.parseExtensions.size(); i++) {
if (options.parseExtensionsEnabled[i] && options.parseExtensions[i].uppercase()!="JPG" && options.parseExtensions[i].uppercase()!="JPEG" && options.parseExtensions[i].uppercase()!="PNG" && options.parseExtensions[i].uppercase()!="TIF" && options.parseExtensions[i].uppercase()!="TIFF" )
{
Gtk::FileFilter *filter_df = Gtk::manage(new Gtk::FileFilter);
filter_df->add_pattern("*." + options.parseExtensions[i]);
filter_df->add_pattern("*." + options.parseExtensions[i].uppercase());
filter_df->set_name(options.parseExtensions[i].uppercase());
darkFrameFile->add_filter (*filter_df);
//printf("adding filter %s \n",options.parseExtensions[i].uppercase().c_str());
}
}
} }
void DarkFrame::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited) void DarkFrame::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
@@ -84,6 +104,42 @@ void DarkFrame::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi
dfautoconn.block(false); dfautoconn.block(false);
enableListener (); enableListener ();
// Add filter with the current file extension if the current file is raw
if (dfp && !batchMode){
if (b_filter_asCurrent){
//First, remove last filter_asCurrent if it was set for a raw file
std::vector<const Gtk::FileFilter*> filters = darkFrameFile->list_filters();
darkFrameFile->remove_filter(**(filters.end()-1));
b_filter_asCurrent = false;
}
Glib::ustring fname = Glib::path_get_basename(dfp->GetCurrentImageFilePath());
Glib::ustring filetype;
if (fname!=""){
// get image filetype, set filter to the same as current image's filetype
std::string::size_type idx;
idx = fname.rfind('.');
if(idx != std::string::npos){
filetype = fname.substr(idx+1);
israw = filetype.uppercase()!="JPG" && filetype.uppercase()!="JPEG" && filetype.uppercase()!="PNG" && filetype.uppercase()!="TIF" && filetype.uppercase()!="TIFF";
//exclude non-raw
if (israw)
{
b_filter_asCurrent = true;
Gtk::FileFilter *filter_asCurrent = Gtk::manage(new Gtk::FileFilter);
filter_asCurrent->add_pattern("*." + filetype);
filter_asCurrent->set_name(M("TP_FLATFIELD_FILEDLGFILTERFF") + " (" + filetype + ")");
darkFrameFile->add_filter (*filter_asCurrent);
darkFrameFile->set_filter (*filter_asCurrent);
}
}
}
}
} }
void DarkFrame::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) void DarkFrame::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)

View File

@@ -28,6 +28,7 @@
class DFProvider { class DFProvider {
public: public:
virtual rtengine::RawImage* getDF() = 0; virtual rtengine::RawImage* getDF() = 0;
virtual Glib::ustring GetCurrentImageFilePath() {};
// add other info here // add other info here
}; };
@@ -46,6 +47,8 @@ protected:
bool lastDFauto; bool lastDFauto;
DFProvider *dfp; DFProvider *dfp;
sigc::connection dfautoconn, dfFile; sigc::connection dfautoconn, dfFile;
bool b_filter_asCurrent;
bool israw;
public: public:

View File

@@ -76,6 +76,26 @@ FlatField::FlatField () : FoldableToolPanel(this)
flatFieldAutoSelectconn = flatFieldAutoSelect->signal_toggled().connect ( sigc::mem_fun(*this, &FlatField::flatFieldAutoSelectChanged), true); flatFieldAutoSelectconn = flatFieldAutoSelect->signal_toggled().connect ( sigc::mem_fun(*this, &FlatField::flatFieldAutoSelectChanged), true);
flatFieldBlurTypeconn = flatFieldBlurType->signal_changed().connect( sigc::mem_fun(*this, &FlatField::flatFieldBlurTypeChanged) ); flatFieldBlurTypeconn = flatFieldBlurType->signal_changed().connect( sigc::mem_fun(*this, &FlatField::flatFieldBlurTypeChanged) );
lastShortcutPath = ""; lastShortcutPath = "";
// Set filename filters
b_filter_asCurrent = false;
Gtk::FileFilter *filter_any = Gtk::manage(new Gtk::FileFilter);
filter_any->add_pattern("*");
filter_any->set_name(M("TP_FLATFIELD_FILEDLGFILTERANY"));
flatFieldFile->add_filter (*filter_any);
// filters for all supported non-raw extensions
for (size_t i=0; i<options.parseExtensions.size(); i++) {
if (options.parseExtensionsEnabled[i] && options.parseExtensions[i].uppercase()!="JPG" && options.parseExtensions[i].uppercase()!="JPEG" && options.parseExtensions[i].uppercase()!="PNG" && options.parseExtensions[i].uppercase()!="TIF" && options.parseExtensions[i].uppercase()!="TIFF" )
{
Gtk::FileFilter *filter_ff = Gtk::manage(new Gtk::FileFilter);
filter_ff->add_pattern("*." + options.parseExtensions[i]);
filter_ff->add_pattern("*." + options.parseExtensions[i].uppercase());
filter_ff->set_name(options.parseExtensions[i].uppercase());
flatFieldFile->add_filter (*filter_ff);
//printf("adding filter %s \n",options.parseExtensions[i].uppercase().c_str());
}
}
} }
void FlatField::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited) void FlatField::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
@@ -134,6 +154,42 @@ void FlatField::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi
flatFieldAutoSelectconn.block (false); flatFieldAutoSelectconn.block (false);
flatFieldBlurTypeconn.block (false); flatFieldBlurTypeconn.block (false);
enableListener (); enableListener ();
// Add filter with the current file extension if the current file is raw
if (ffp && !batchMode){
if (b_filter_asCurrent){
//First, remove last filter_asCurrent if it was set for a raw file
std::vector<const Gtk::FileFilter*> filters = flatFieldFile->list_filters();
flatFieldFile->remove_filter(**(filters.end()-1));
b_filter_asCurrent = false;
}
Glib::ustring fname = Glib::path_get_basename(ffp->GetCurrentImageFilePath());
Glib::ustring filetype;
if (fname!=""){
// get image filetype, set filter to the same as current image's filetype
std::string::size_type idx;
idx = fname.rfind('.');
if(idx != std::string::npos){
filetype = fname.substr(idx+1);
//exclude non-raw
israw = filetype.uppercase()!="JPG" && filetype.uppercase()!="JPEG" && filetype.uppercase()!="PNG" && filetype.uppercase()!="TIF" && filetype.uppercase()!="TIFF";
if (israw)
{
b_filter_asCurrent = true; //prevent re-adding this filter on every pp3 file read
Gtk::FileFilter *filter_asCurrent = Gtk::manage(new Gtk::FileFilter);
filter_asCurrent->add_pattern("*." + filetype);
filter_asCurrent->set_name(M("TP_FLATFIELD_FILEDLGFILTERFF") + " (" + filetype + ")");
flatFieldFile->add_filter (*filter_asCurrent);
flatFieldFile->set_filter (*filter_asCurrent);
}
}
}
}
} }
void FlatField::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) void FlatField::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)

View File

@@ -30,6 +30,7 @@ class FFProvider {
public: public:
virtual ~FFProvider() {} virtual ~FFProvider() {}
virtual rtengine::RawImage* getFF() = 0; virtual rtengine::RawImage* getFF() = 0;
virtual Glib::ustring GetCurrentImageFilePath() {};
// add other info here // add other info here
}; };
@@ -53,6 +54,8 @@ protected:
FFProvider *ffp; FFProvider *ffp;
sigc::connection flatFieldFileconn, flatFieldAutoSelectconn, flatFieldBlurTypeconn; sigc::connection flatFieldFileconn, flatFieldAutoSelectconn, flatFieldBlurTypeconn;
Glib::ustring lastShortcutPath; Glib::ustring lastShortcutPath;
bool b_filter_asCurrent;
bool israw;
public: public:

View File

@@ -518,6 +518,15 @@ rtengine::RawImage* ToolPanelCoordinator::getFF()
} }
return NULL; return NULL;
} }
Glib::ustring ToolPanelCoordinator::GetCurrentImageFilePath()
{
if (!ipc){
return "";
}
return ipc->getInitialImage()->getFileName();
}
void ToolPanelCoordinator::straightenRequested () { void ToolPanelCoordinator::straightenRequested () {
if (!ipc) if (!ipc)

View File

@@ -242,6 +242,7 @@ class ToolPanelCoordinator : public ToolPanelListener,
//FFProvider interface //FFProvider interface
rtengine::RawImage* getFF(); rtengine::RawImage* getFF();
Glib::ustring GetCurrentImageFilePath();
// rotatelistener interface // rotatelistener interface
void straightenRequested (); void straightenRequested ();