@@ -519,6 +519,9 @@ PREFERENCES_CACHETHUMBFORM;Cache Thumbnail Format
|
|||||||
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
|
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
|
||||||
PREFERENCES_CLIPPINGIND;Clipping indication
|
PREFERENCES_CLIPPINGIND;Clipping indication
|
||||||
PREFERENCES_CMETRICINTENT;Colorimetric Intent
|
PREFERENCES_CMETRICINTENT;Colorimetric Intent
|
||||||
|
PREFERENCES_CUSTPROFBUILD;Custom image profile builder
|
||||||
|
PREFERENCES_CUSTPROFBUILDHINT;Executable (or script) file called when a new initial profile should be generated an image.\nReceives command line params to allow a rules based .pp3 generation:\n[Path RAW/JPG] [Path default profile] [f-no] [exposure in secs] [focal length in mm] [ISO] [Lens] [Camera]
|
||||||
|
PREFERENCES_CUSTPROFBUILDPATH;Executable path
|
||||||
PREFERENCES_CUTOVERLAYBRUSH;Crop mask color/transparency
|
PREFERENCES_CUTOVERLAYBRUSH;Crop mask color/transparency
|
||||||
PREFERENCES_DARKFRAME;Dark frame
|
PREFERENCES_DARKFRAME;Dark frame
|
||||||
PREFERENCES_DARKFRAMEFOUND;Found
|
PREFERENCES_DARKFRAMEFOUND;Found
|
||||||
|
@@ -383,37 +383,14 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) {
|
|||||||
navigator->previewWindow->setPreviewHandler (previewHandler);
|
navigator->previewWindow->setPreviewHandler (previewHandler);
|
||||||
navigator->previewWindow->setImageArea (iarea->imageArea);
|
navigator->previewWindow->setImageArea (iarea->imageArea);
|
||||||
|
|
||||||
// try to load the last saved parameters from the cache or from the paramfile file
|
|
||||||
ProcParams* ldprof = NULL;
|
|
||||||
|
|
||||||
Glib::ustring defProf = openThm->getType()==FT_Raw ? options.defProfRaw : options.defProfImg;
|
|
||||||
|
|
||||||
const CacheImageData* cfs=openThm->getCacheImageData();
|
|
||||||
if (!options.customProfileBuilder.empty() && !openThm->hasProcParams() && cfs && cfs->exifValid) {
|
|
||||||
// For the filename etc. do NOT use streams, since they are not UTF8 safe
|
|
||||||
Glib::ustring cmdLine=Glib::ustring("\"") + options.customProfileBuilder + Glib::ustring("\" \"") + fname + Glib::ustring("\" \"")
|
|
||||||
+ options.rtdir + Glib::ustring("/") + options.profilePath + Glib::ustring("/") + defProf + Glib::ustring(".pp3") + Glib::ustring("\" ");
|
|
||||||
|
|
||||||
// ustring doesn't know int etc formatting, so take these via (unsafe) stream
|
|
||||||
std::ostringstream strm;
|
|
||||||
strm << cfs->fnumber << Glib::ustring(" ") << cfs->shutter << Glib::ustring(" ");
|
|
||||||
strm << cfs->focalLen << Glib::ustring(" ") << cfs->iso << Glib::ustring(" \"");
|
|
||||||
strm << cfs->lens << Glib::ustring("\" \"") << cfs->camera << Glib::ustring("\"");
|
|
||||||
|
|
||||||
bool success = safe_spawn_command_line_sync (cmdLine + strm.str());
|
|
||||||
|
|
||||||
// Now they SHOULD be there, so try to load them
|
|
||||||
if (success) openThm->loadProcParams();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (openThm->hasProcParams()) {
|
|
||||||
ldprof = new ProcParams ();
|
|
||||||
*ldprof = openThm->getProcParams ();
|
|
||||||
}
|
|
||||||
|
|
||||||
rtengine::ImageSource* is=isrc->getImageSource();
|
rtengine::ImageSource* is=isrc->getImageSource();
|
||||||
is->setProgressListener( this );
|
is->setProgressListener( this );
|
||||||
|
|
||||||
|
// try to load the last saved parameters from the cache or from the paramfile file
|
||||||
|
ProcParams* ldprof = openThm->createProcParamsForUpdate(); // will be freed by initProfile
|
||||||
|
|
||||||
// initialize profile
|
// initialize profile
|
||||||
|
Glib::ustring defProf = openThm->getType()==FT_Raw ? options.defProfRaw : options.defProfImg;
|
||||||
profilep->initProfile (defProf, ldprof, NULL);
|
profilep->initProfile (defProf, ldprof, NULL);
|
||||||
|
|
||||||
openThm->addThumbnailListener (this);
|
openThm->addThumbnailListener (this);
|
||||||
|
@@ -568,6 +568,27 @@ Gtk::Widget* Preferences::getGeneralPanel () {
|
|||||||
fdg->add (*dgvb);
|
fdg->add (*dgvb);
|
||||||
mvbsd->pack_start (*fdg, Gtk::PACK_SHRINK, 4);
|
mvbsd->pack_start (*fdg, Gtk::PACK_SHRINK, 4);
|
||||||
|
|
||||||
|
|
||||||
|
// Custom profile builder box
|
||||||
|
Gtk::Frame* cpfrm = Gtk::manage( new Gtk::Frame (M("PREFERENCES_CUSTPROFBUILD")) );
|
||||||
|
|
||||||
|
Gtk::HBox* cphb = Gtk::manage( new Gtk::HBox () );
|
||||||
|
cphb->set_border_width (4);
|
||||||
|
cphb->set_spacing (4);
|
||||||
|
|
||||||
|
Gtk::Label* cplab = Gtk::manage( new Gtk::Label (M("PREFERENCES_CUSTPROFBUILDPATH")+":") );
|
||||||
|
cphb->pack_start (*cplab, Gtk::PACK_SHRINK,4);
|
||||||
|
|
||||||
|
txtCustProfBuilderPath = Gtk::manage( new Gtk::Entry () );
|
||||||
|
txtCustProfBuilderPath->set_tooltip_markup (M("PREFERENCES_CUSTPROFBUILDHINT"));
|
||||||
|
cphb->set_tooltip_markup (M("PREFERENCES_CUSTPROFBUILDHINT"));
|
||||||
|
cphb->pack_start (*txtCustProfBuilderPath);
|
||||||
|
|
||||||
|
cpfrm->add (*cphb);
|
||||||
|
|
||||||
|
mvbsd->pack_start (*cpfrm, Gtk::PACK_SHRINK, 4);
|
||||||
|
|
||||||
|
|
||||||
mvbsd->set_border_width (4);
|
mvbsd->set_border_width (4);
|
||||||
|
|
||||||
tconn = theme->signal_changed().connect( sigc::mem_fun(*this, &Preferences::themeChanged) );
|
tconn = theme->signal_changed().connect( sigc::mem_fun(*this, &Preferences::themeChanged) );
|
||||||
@@ -842,6 +863,7 @@ void Preferences::storePreferences () {
|
|||||||
else if (edOther->get_active ())
|
else if (edOther->get_active ())
|
||||||
moptions.editorToSendTo = 3;
|
moptions.editorToSendTo = 3;
|
||||||
|
|
||||||
|
moptions.customProfileBuilder = txtCustProfBuilderPath->get_text();
|
||||||
|
|
||||||
moptions.rtSettings.monitorProfile = monProfile->get_filename ();
|
moptions.rtSettings.monitorProfile = monProfile->get_filename ();
|
||||||
moptions.rtSettings.autoMonitorProfile = cbAutoMonProfile->get_active ();
|
moptions.rtSettings.autoMonitorProfile = cbAutoMonProfile->get_active ();
|
||||||
@@ -955,6 +977,8 @@ void Preferences::fillPreferences () {
|
|||||||
#endif
|
#endif
|
||||||
editorToSendTo->set_text (moptions.customEditorProg);
|
editorToSendTo->set_text (moptions.customEditorProg);
|
||||||
|
|
||||||
|
txtCustProfBuilderPath->set_text(moptions.customProfileBuilder);
|
||||||
|
|
||||||
if (moptions.startupDir==STARTUPDIR_CURRENT)
|
if (moptions.startupDir==STARTUPDIR_CURRENT)
|
||||||
sdcurrent->set_active ();
|
sdcurrent->set_active ();
|
||||||
else if (moptions.startupDir==STARTUPDIR_LAST)
|
else if (moptions.startupDir==STARTUPDIR_LAST)
|
||||||
|
@@ -117,6 +117,9 @@ class Preferences : public Gtk::Dialog {
|
|||||||
Gtk::CheckButton* ckbTunnelMetaData;
|
Gtk::CheckButton* ckbTunnelMetaData;
|
||||||
Gtk::CheckButton* ckbInternalThumbIfUntouched;
|
Gtk::CheckButton* ckbInternalThumbIfUntouched;
|
||||||
|
|
||||||
|
Gtk::Entry* txtCustProfBuilderPath;
|
||||||
|
|
||||||
|
|
||||||
Options moptions;
|
Options moptions;
|
||||||
sigc::connection tconn, fconn, usethcon, addc, setc, dfconn, ffconn, autoMonProfileConn;
|
sigc::connection tconn, fconn, usethcon, addc, setc, dfconn, ffconn, autoMonProfileConn;
|
||||||
Glib::ustring initialTheme;
|
Glib::ustring initialTheme;
|
||||||
|
@@ -161,6 +161,39 @@ const ProcParams& Thumbnail::getProcParams () {
|
|||||||
return pparams; // there is no valid pp to return, but we have to return something
|
return pparams; // there is no valid pp to return, but we have to return something
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create default params on demand and returns a new updatable object
|
||||||
|
rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate() {
|
||||||
|
// try to load the last saved parameters from the cache or from the paramfile file
|
||||||
|
ProcParams* ldprof = NULL;
|
||||||
|
|
||||||
|
Glib::ustring defProf = getType()==FT_Raw ? options.defProfRaw : options.defProfImg;
|
||||||
|
|
||||||
|
const CacheImageData* cfs=getCacheImageData();
|
||||||
|
if (!options.customProfileBuilder.empty() && !hasProcParams() && cfs && cfs->exifValid) {
|
||||||
|
// For the filename etc. do NOT use streams, since they are not UTF8 safe
|
||||||
|
Glib::ustring cmdLine=Glib::ustring("\"") + options.customProfileBuilder + Glib::ustring("\" \"") + fname + Glib::ustring("\" \"")
|
||||||
|
+ options.rtdir + Glib::ustring("/") + options.profilePath + Glib::ustring("/") + defProf + Glib::ustring(".pp3") + Glib::ustring("\" ");
|
||||||
|
|
||||||
|
// ustring doesn't know int etc formatting, so take these via (unsafe) stream
|
||||||
|
std::ostringstream strm;
|
||||||
|
strm << cfs->fnumber << Glib::ustring(" ") << cfs->shutter << Glib::ustring(" ");
|
||||||
|
strm << cfs->focalLen << Glib::ustring(" ") << cfs->iso << Glib::ustring(" \"");
|
||||||
|
strm << cfs->lens << Glib::ustring("\" \"") << cfs->camera << Glib::ustring("\"");
|
||||||
|
|
||||||
|
bool success = safe_spawn_command_line_sync (cmdLine + strm.str());
|
||||||
|
|
||||||
|
// Now they SHOULD be there, so try to load them
|
||||||
|
if (success) loadProcParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasProcParams()) {
|
||||||
|
ldprof = new ProcParams ();
|
||||||
|
*ldprof = getProcParams ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ldprof;
|
||||||
|
}
|
||||||
|
|
||||||
void Thumbnail::loadProcParams () {
|
void Thumbnail::loadProcParams () {
|
||||||
// TODO: Check for Linux
|
// TODO: Check for Linux
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -79,6 +79,10 @@ class Thumbnail {
|
|||||||
|
|
||||||
bool hasProcParams ();
|
bool hasProcParams ();
|
||||||
const rtengine::procparams::ProcParams& getProcParams ();
|
const rtengine::procparams::ProcParams& getProcParams ();
|
||||||
|
|
||||||
|
// Use this to create params on demand for update
|
||||||
|
rtengine::procparams::ProcParams* createProcParamsForUpdate ();
|
||||||
|
|
||||||
void setProcParams (const rtengine::procparams::ProcParams& pp, int whoChangedIt=-1, bool updateCacheNow=true);
|
void setProcParams (const rtengine::procparams::ProcParams& pp, int whoChangedIt=-1, bool updateCacheNow=true);
|
||||||
void clearProcParams (int whoClearedIt=-1);
|
void clearProcParams (int whoClearedIt=-1);
|
||||||
void loadProcParams ();
|
void loadProcParams ();
|
||||||
|
Reference in New Issue
Block a user