Enhanced Filters for Flat-Field and Dark-Frame filechoosers (see issue 2440)
This commit is contained in:
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
@@ -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:
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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:
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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 ();
|
||||||
|
Reference in New Issue
Block a user