add options option for layout and make it switch to editor in single mode. Done!

This commit is contained in:
Andrey Skvortsov
2010-10-04 18:13:13 -07:00
parent 60fea52af1
commit 7853327bc7
11 changed files with 269 additions and 10 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -1,5 +1,6 @@
[General]
TabbedEditor=true
StoreLastProfile=true
StartupDirectory=last
StartupPath=

View File

@@ -1,5 +1,6 @@
[General]
TabbedEditor=true
StoreLastProfile=true
StartupDirectory=last
StartupPath=

View File

@@ -1,5 +1,6 @@
[General]
TabbedEditor=true
StoreLastProfile=true
StartupDirectory=last
StartupPath=

View File

@@ -151,14 +151,15 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector<rtengine::Initial
if (pc->returnValue() && 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 {

243
rtgui/filterpanel.cc.orig Normal file
View File

@@ -0,0 +1,243 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include <filterpanel.h>
#include <multilangmgr.h>
#include <rtengine.h>
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; i<conns; i++)
sChange[i].block (true);
// enaFNumber->set_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<Gtk::TreeSelection> cselection = camera->get_selection ();
// enaLens->set_active (curefs.filterLens);
Glib::RefPtr<Gtk::TreeSelection> lselection = lens->get_selection ();
if( updateLists ){
lens->clear_items();
curefs.lenses.clear();
for (std::set<std::string>::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<std::string>::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; i<conns; i++)
sChange[i].block (false);
}
bool FilterPanel::isEnabled () {
return enabled->get_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<int> sel = camera->get_selected ();
for (int i=0; i<sel.size(); i++)
efs.cameras.insert (camera->get_text (sel[i]));
sel = lens->get_selected ();
for (int i=0; i<sel.size(); i++)
efs.lenses.insert (lens->get_text (sel[i]));
return efs;
}
void FilterPanel::valueChanged () {
if (listener)
listener->exifFilterChanged ();
}

View File

@@ -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");

View File

@@ -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) {

View File

@@ -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)
{

View File

@@ -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