diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 440049d17..aa8c499da 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -416,7 +416,6 @@ !PREFERENCES_DIRSELECTDLG;Select Image Directory at Startup... !PREFERENCES_DIRSOFTWARE;Installation directory !PREFERENCES_DMETHOD;Method -PREFERENCES_DMETHODBATCH;Batch !PREFERENCES_EDITORCMDLINE;Other command line !PREFERENCES_EXTERNALEDITOR;External editor !PREFERENCES_FALSECOLOR;False color suppression steps diff --git a/rtdata/languages/default b/rtdata/languages/default index a2acbba04..3d1f679dc 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -412,7 +412,8 @@ PREFERENCES_DIRLAST;Last visited directory PREFERENCES_DIROTHER;Other PREFERENCES_DIRSELECTDLG;Select Image Directory at Startup... PREFERENCES_DIRSOFTWARE;Installation directory -PREFERENCES_DMETHOD;Method +PREFERENCES_DMETHOD;Preview +PREFERENCES_DMETHODBATCH;Batch PREFERENCES_EDITORCMDLINE;Other command line PREFERENCES_EXTERNALEDITOR;External editor PREFERENCES_FALSECOLOR;False color suppression steps @@ -470,6 +471,10 @@ PREFERENCES_TAB_GENERAL;General PREFERENCES_TAB_IMPROC;Image Processing PREFERENCES_TAB_OUTPUT;Output Options PREFERENCES_THUMBSIZE;Thumbnail Size +PREFERENCES_WORKFLOW;Workflow +PREFERENCES_EDITORLAYOUT;Editor Layout +PREFERENCES_SINGLETAB;Single tab mode +PREFERENCES_MULTITAB;Multiple tabs mode PROFILEPANEL_FILEDLGFILTERANY;Any files PROFILEPANEL_FILEDLGFILTERPP;Postprocessing profiles PROFILEPANEL_LABEL;Postprocessing Profiles diff --git a/rtdata/options/options.lin b/rtdata/options/options.lin index a865a324d..5dc0b9389 100644 --- a/rtdata/options/options.lin +++ b/rtdata/options/options.lin @@ -1,5 +1,6 @@ [General] +TabbedEditor=true StoreLastProfile=true StartupDirectory=last StartupPath= diff --git a/rtdata/options/options.osx b/rtdata/options/options.osx index d656f77f9..1dc8880c3 100644 --- a/rtdata/options/options.osx +++ b/rtdata/options/options.osx @@ -1,5 +1,6 @@ [General] +TabbedEditor=true StoreLastProfile=true StartupDirectory=last StartupPath= diff --git a/rtdata/options/options.win b/rtdata/options/options.win index e7137b5be..2021a0fb5 100644 --- a/rtdata/options/options.win +++ b/rtdata/options/options.win @@ -1,5 +1,6 @@ [General] +TabbedEditor=true StoreLastProfile=true StartupDirectory=last StartupPath= diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index 50d2f1664..a9e647d6c 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -151,14 +151,15 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnectorreturnValue() && thm) { - if (options.tabbedUI) - { + if (options.tabbedUI){ EditorPanel* epanel = Gtk::manage (new EditorPanel ()); parent->addEditorPanel (epanel,Glib::path_get_basename (thm->getFileName())); epanel->open(thm, pc->returnValue() ); } - else - parent->epanel->open(thm, pc->returnValue() ); + else{ + parent->SetEditorCurrent(); + parent->epanel->open(thm, pc->returnValue() ); + } }else { diff --git a/rtgui/filterpanel.cc.orig b/rtgui/filterpanel.cc.orig new file mode 100644 index 000000000..2c7efe0c9 --- /dev/null +++ b/rtgui/filterpanel.cc.orig @@ -0,0 +1,243 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ +#include +#include +#include + +using namespace rtengine; + +FilterPanel::FilterPanel () : listener (NULL) { + + set_border_width (4); + + enabled = Gtk::manage (new Gtk::CheckButton (M("EXIFFILTER_METADATAFILTER"))); + pack_start (*enabled, Gtk::PACK_SHRINK, 2); + pack_start (*Gtk::manage(new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 2); + + enaFNumber = Gtk::manage (new Gtk::CheckButton (M("EXIFFILTER_APERTURE")+":")); + Gtk::VBox* fnvb = Gtk::manage(new Gtk::VBox ()); + Gtk::HBox* fnhb = Gtk::manage(new Gtk::HBox ()); + fnvb->pack_start (*enaFNumber, Gtk::PACK_SHRINK, 0); + fnumberFrom = Gtk::manage(new Gtk::Entry ()); + fnumberTo = Gtk::manage(new Gtk::Entry ()); + fnhb->pack_start (*fnumberFrom, true, true, 2); + fnhb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); + fnhb->pack_start (*fnumberTo, true, true, 2); + fnvb->pack_start (*fnhb, Gtk::PACK_SHRINK, 0); + pack_start (*fnvb, Gtk::PACK_SHRINK, 4); + + enaShutter = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_SHUTTER")+":")); + Gtk::VBox* svb = Gtk::manage(new Gtk::VBox ()); + Gtk::HBox* shb = Gtk::manage(new Gtk::HBox ()); + svb->pack_start (*enaShutter, Gtk::PACK_SHRINK, 0); + shutterFrom = Gtk::manage(new Gtk::Entry ()); + shutterTo = Gtk::manage(new Gtk::Entry ()); + shb->pack_start (*shutterFrom, true, true, 2); + shb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); + shb->pack_start (*shutterTo, true, true, 2); + svb->pack_start (*shb, Gtk::PACK_SHRINK, 0); + pack_start (*svb, Gtk::PACK_SHRINK, 4); + + enaISO = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_ISO")+":")); + Gtk::VBox* ivb = Gtk::manage(new Gtk::VBox ()); + Gtk::HBox* ihb = Gtk::manage(new Gtk::HBox ()); + ivb->pack_start (*enaISO, Gtk::PACK_SHRINK, 0); + isoFrom = Gtk::manage(new Gtk::Entry ()); + isoTo = Gtk::manage(new Gtk::Entry ()); + ihb->pack_start (*isoFrom, true, true, 2); + ihb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); + ihb->pack_start (*isoTo, true, true, 2); + ivb->pack_start (*ihb, Gtk::PACK_SHRINK, 0); + pack_start (*ivb, Gtk::PACK_SHRINK, 4); + + enaFocalLen = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_FOCALLEN")+":")); + Gtk::VBox* fvb = Gtk::manage(new Gtk::VBox ()); + Gtk::HBox* fhb = Gtk::manage(new Gtk::HBox ()); + fvb->pack_start (*enaFocalLen, Gtk::PACK_SHRINK, 0); + focalFrom = Gtk::manage(new Gtk::Entry ()); + focalTo = Gtk::manage(new Gtk::Entry ()); + fhb->pack_start (*focalFrom, true, true, 2); + fhb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); + fhb->pack_start (*focalTo, true, true, 2); + fvb->pack_start (*fhb, Gtk::PACK_SHRINK, 0); + pack_start (*fvb, Gtk::PACK_SHRINK, 4); + + enaCamera = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_CAMERA")+":")); + Gtk::VBox* cvb = Gtk::manage(new Gtk::VBox ()); + cvb->pack_start (*enaCamera, Gtk::PACK_SHRINK, 0); + camera = Gtk::manage(new Gtk::ListViewText (1, false, Gtk::SELECTION_MULTIPLE)); + camera->set_headers_visible (false); + Gtk::ScrolledWindow* scamera = Gtk::manage(new Gtk::ScrolledWindow()); + scamera->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); + scamera->add(*camera); + cvb->pack_start (*scamera, Gtk::PACK_SHRINK, 0); + pack_start (*cvb, Gtk::PACK_SHRINK, 4); + + enaLens = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_LENS")+":")); + Gtk::VBox* lvb = Gtk::manage(new Gtk::VBox ()); + lvb->pack_start (*enaLens, Gtk::PACK_SHRINK, 0); + lens = Gtk::manage(new Gtk::ListViewText (1, false, Gtk::SELECTION_MULTIPLE)); + lens->set_headers_visible (false); + Gtk::ScrolledWindow* slens = Gtk::manage(new Gtk::ScrolledWindow()); + slens->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); + slens->add(*lens); + lvb->pack_start (*slens, Gtk::PACK_SHRINK, 0); + pack_start (*lvb, Gtk::PACK_SHRINK, 4); + + conns = 0; + sChange[conns++] = fnumberFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = fnumberTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = shutterFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = shutterTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = isoFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = isoTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = focalFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = focalTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = camera->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = lens->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &FilterPanel::valueChanged)); + sChange[conns++] = enaFNumber->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + sChange[conns++] = enaShutter->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + sChange[conns++] = enaFocalLen->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + sChange[conns++] = enaISO->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + sChange[conns++] = enaCamera->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + sChange[conns++] = enaLens->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + sChange[conns++] = enabled->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) ); + + set_size_request (0, -1); + + show_all (); +} + +void FilterPanel::setFilter (ExifFilterSettings& defefs, bool updateLists) { + + + for (int i=0; iset_active (curefs.filterFNumber); + fnumberFrom->set_text (ImageMetaData::apertureToString (defefs.fnumberFrom)); + curefs.fnumberFrom = defefs.fnumberFrom; + fnumberTo->set_text (ImageMetaData::apertureToString (defefs.fnumberTo)); + curefs.fnumberTo = defefs.fnumberTo; + +// enaShutter->set_active (curefs.filterShutter); + shutterFrom->set_text (ImageMetaData::shutterToString (defefs.shutterFrom)); + curefs.shutterFrom = defefs.shutterFrom; + shutterTo->set_text (ImageMetaData::shutterToString (defefs.shutterTo)); + curefs.shutterTo = defefs.shutterTo; + +// enaISO->set_active (curefs.filterISO); + std::stringstream out; + out << defefs.isoFrom; + isoFrom->set_text ( out.str() ); + curefs.isoFrom = defefs.isoFrom; + isoTo->set_text (Glib::ustring::format ((double)defefs.isoTo)); + curefs.isoTo = defefs.isoTo; + +// enaFocalLen->set_active (curefs.filterFocalLen); + focalFrom->set_text (Glib::ustring::format (defefs.focalFrom)); + curefs.focalFrom = defefs.focalFrom; + focalTo->set_text (Glib::ustring::format (defefs.focalTo)); + curefs.focalTo = defefs.focalTo; + +// enaCamera->set_active (curefs.filterCamera); + Glib::RefPtr cselection = camera->get_selection (); + +// enaLens->set_active (curefs.filterLens); + Glib::RefPtr lselection = lens->get_selection (); + if( updateLists ){ + lens->clear_items(); + curefs.lenses.clear(); + for (std::set::iterator i = defefs.lenses.begin(); i!=defefs.lenses.end(); i++) { + lens->append_text (*i); + curefs.lenses.insert(*i); + } + lselection->select_all(); + + camera->clear_items(); + curefs.cameras.clear(); + for (std::set::iterator i = defefs.cameras.begin(); i!=defefs.cameras.end(); i++) { + camera->append_text(*i); + curefs.cameras.insert(*i); + } + cselection->select_all(); + }else{ + for( Gtk::TreeModel::Children::iterator iter = lens->get_model()->children().begin(); iter != lens->get_model()->children().end();iter++){ + Glib::ustring v; + iter->get_value(0,v); + if( defefs.lenses.find( v ) != defefs.lenses.end() ) + lselection->select( iter ); + else + lselection->unselect( iter ); + } + for( Gtk::TreeModel::Children::iterator iter = camera->get_model()->children().begin(); iter != camera->get_model()->children().end();iter++){ + Glib::ustring v; + iter->get_value(0,v); + if( defefs.cameras.find( v ) != defefs.cameras.end() ) + cselection->select(iter); + else + cselection->unselect(iter); + } + } + + curefs = defefs; + + for (int i=0; iget_active () && is_sensitive(); +} + +ExifFilterSettings FilterPanel::getFilter () { + + ExifFilterSettings efs; + efs.fnumberFrom = atof (fnumberFrom->get_text().c_str()); + efs.fnumberTo = atof (fnumberTo->get_text().c_str()); + efs.focalFrom = atof (focalFrom->get_text().c_str()); + efs.focalTo = atof (focalTo->get_text().c_str()); + efs.isoFrom = atoi (isoFrom->get_text().c_str()); + efs.isoTo = atoi (isoTo->get_text().c_str()); + efs.shutterFrom = ImageMetaData::shutterFromString (shutterFrom->get_text()); + efs.shutterTo = ImageMetaData::shutterFromString (shutterTo->get_text()); + + efs.filterFNumber = enaFNumber->get_active (); + efs.filterShutter = enaShutter->get_active (); + efs.filterFocalLen = enaFocalLen->get_active (); + efs.filterISO = enaISO->get_active (); + efs.filterCamera = enaCamera->get_active (); + efs.filterLens = enaLens->get_active (); + + std::vector sel = camera->get_selected (); + for (int i=0; iget_text (sel[i])); + sel = lens->get_selected (); + for (int i=0; iget_text (sel[i])); + + return efs; +} + +void FilterPanel::valueChanged () { + + if (listener) + listener->exifFilterChanged (); +} diff --git a/rtgui/options.cc b/rtgui/options.cc index fd894bef1..7f1de6407 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -161,8 +161,8 @@ int Options::readFromFile (Glib::ustring fname) { setDefaults (); -if (keyFile.has_group ("General")) { - Glib::ustring stup; +if (keyFile.has_group ("General")) { + if (keyFile.has_key ("General", "TabbedEditor")) tabbedUI= keyFile.get_boolean ("General", "TabbedEditor"); if (keyFile.has_key ("General", "StartupDirectory") && keyFile.get_string ("General", "StartupDirectory") == "home") startupDir = STARTUPDIR_HOME; else if (keyFile.has_key ("General", "StartupDirectory") && keyFile.get_string ("General", "StartupDirectory") == "current") @@ -300,7 +300,8 @@ if (keyFile.has_group ("Batch Processing")) { int Options::saveToFile (Glib::ustring fname) { rtengine::SafeKeyFile keyFile; - + keyFile.set_boolean ("General", "TabbedEditor", tabbedUI); + keyFile.set_boolean ("General", "StoreLastProfile", savesParamsAtExit); if (startupDir==STARTUPDIR_HOME) keyFile.set_string ("General", "StartupDirectory", "home"); diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 3ef9802eb..cc3e0db36 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -874,7 +874,7 @@ void Preferences::fillPreferences () { blinkClipped->set_active (moptions.blinkClipped); hlThresh->set_value (moptions.highlightThreshold); shThresh->set_value (moptions.shadowThreshold); - + edGimp->set_active (moptions.editorToSendTo==1); edOther->set_active (moptions.editorToSendTo==3); #ifdef _WIN32 @@ -967,6 +967,7 @@ void Preferences::fillPreferences () { saveParamsCache->set_active (moptions.saveParamsCache); loadParamsPreference->set_active (moptions.paramsLoadLocation); + editorLayout->set_active(moptions.tabbedUI); addc.block (true); setc.block (true); if (moptions.baBehav.size() == ADDSET_PARAM_NUM) { diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 7eb907a7e..47dcb6065 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -298,6 +298,11 @@ void RTWindow::error (Glib::ustring descr){ prLabel.set_text ( descr ); } +void RTWindow::SetEditorCurrent() +{ + mainNB->set_current_page (mainNB->page_num (*epanel)); +} + bool RTWindow::on_expose_event_epanel(GdkEventExpose* event) { diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h index a615b252f..9956aae42 100644 --- a/rtgui/rtwindow.h +++ b/rtgui/rtwindow.h @@ -64,6 +64,7 @@ class RTWindow : public Gtk::Window, public rtengine::ProgressListener{ void error (Glib::ustring descr); rtengine::ProgressListener* getProgressListener () { return pldBridge; } EditorPanel* epanel; + void SetEditorCurrent(); }; #endif