Proper check for rawzor libraries.
[rawtherapee-fixes.git] / rtgui / filterpanel.cc
blobf8970942d6e4bd1f39cd2c7f4be7816cbc5ed7e6
1 /*
2 * This file is part of RawTherapee.
4 * Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
6 * RawTherapee is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * RawTherapee is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
19 #include <filterpanel.h>
20 #include <multilangmgr.h>
21 #include <rtengine.h>
23 using namespace rtengine;
25 FilterPanel::FilterPanel () : listener (NULL) {
27 set_border_width (4);
29 enabled = Gtk::manage (new Gtk::CheckButton ("Enable Metadata Filters"));
30 pack_start (*enabled, Gtk::PACK_SHRINK, 2);
31 pack_start (*Gtk::manage(new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 2);
33 enaFNumber = Gtk::manage (new Gtk::CheckButton (M("EXIFFILTER_APERTURE")+":"));
34 Gtk::VBox* fnvb = Gtk::manage(new Gtk::VBox ());
35 Gtk::HBox* fnhb = Gtk::manage(new Gtk::HBox ());
36 fnvb->pack_start (*enaFNumber, Gtk::PACK_SHRINK, 0);
37 fnumberFrom = Gtk::manage(new Gtk::Entry ());
38 fnumberTo = Gtk::manage(new Gtk::Entry ());
39 fnhb->pack_start (*fnumberFrom, true, true, 2);
40 fnhb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4);
41 fnhb->pack_start (*fnumberTo, true, true, 2);
42 fnvb->pack_start (*fnhb, Gtk::PACK_SHRINK, 0);
43 pack_start (*fnvb, Gtk::PACK_SHRINK, 4);
45 enaShutter = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_SHUTTER")+":"));
46 Gtk::VBox* svb = Gtk::manage(new Gtk::VBox ());
47 Gtk::HBox* shb = Gtk::manage(new Gtk::HBox ());
48 svb->pack_start (*enaShutter, Gtk::PACK_SHRINK, 0);
49 shutterFrom = Gtk::manage(new Gtk::Entry ());
50 shutterTo = Gtk::manage(new Gtk::Entry ());
51 shb->pack_start (*shutterFrom, true, true, 2);
52 shb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4);
53 shb->pack_start (*shutterTo, true, true, 2);
54 svb->pack_start (*shb, Gtk::PACK_SHRINK, 0);
55 pack_start (*svb, Gtk::PACK_SHRINK, 4);
57 enaISO = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_ISO")+":"));
58 Gtk::VBox* ivb = Gtk::manage(new Gtk::VBox ());
59 Gtk::HBox* ihb = Gtk::manage(new Gtk::HBox ());
60 ivb->pack_start (*enaISO, Gtk::PACK_SHRINK, 0);
61 isoFrom = Gtk::manage(new Gtk::Entry ());
62 isoTo = Gtk::manage(new Gtk::Entry ());
63 ihb->pack_start (*isoFrom, true, true, 2);
64 ihb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4);
65 ihb->pack_start (*isoTo, true, true, 2);
66 ivb->pack_start (*ihb, Gtk::PACK_SHRINK, 0);
67 pack_start (*ivb, Gtk::PACK_SHRINK, 4);
69 enaFocalLen = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_FOCALLEN")+":"));
70 Gtk::VBox* fvb = Gtk::manage(new Gtk::VBox ());
71 Gtk::HBox* fhb = Gtk::manage(new Gtk::HBox ());
72 fvb->pack_start (*enaFocalLen, Gtk::PACK_SHRINK, 0);
73 focalFrom = Gtk::manage(new Gtk::Entry ());
74 focalTo = Gtk::manage(new Gtk::Entry ());
75 fhb->pack_start (*focalFrom, true, true, 2);
76 fhb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4);
77 fhb->pack_start (*focalTo, true, true, 2);
78 fvb->pack_start (*fhb, Gtk::PACK_SHRINK, 0);
79 pack_start (*fvb, Gtk::PACK_SHRINK, 4);
81 enaCamera = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_CAMERA")+":"));
82 Gtk::VBox* cvb = Gtk::manage(new Gtk::VBox ());
83 cvb->pack_start (*enaCamera, Gtk::PACK_SHRINK, 0);
84 camera = Gtk::manage(new Gtk::ListViewText (1, false, Gtk::SELECTION_MULTIPLE));
85 camera->set_headers_visible (false);
86 Gtk::ScrolledWindow* scamera = Gtk::manage(new Gtk::ScrolledWindow());
87 scamera->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS);
88 scamera->add(*camera);
89 cvb->pack_start (*scamera, Gtk::PACK_SHRINK, 0);
90 pack_start (*cvb, Gtk::PACK_SHRINK, 4);
92 enaLens = Gtk::manage(new Gtk::CheckButton(M("EXIFFILTER_LENS")+":"));
93 Gtk::VBox* lvb = Gtk::manage(new Gtk::VBox ());
94 lvb->pack_start (*enaLens, Gtk::PACK_SHRINK, 0);
95 lens = Gtk::manage(new Gtk::ListViewText (1, false, Gtk::SELECTION_MULTIPLE));
96 lens->set_headers_visible (false);
97 Gtk::ScrolledWindow* slens = Gtk::manage(new Gtk::ScrolledWindow());
98 slens->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS);
99 slens->add(*lens);
100 lvb->pack_start (*slens, Gtk::PACK_SHRINK, 0);
101 pack_start (*lvb, Gtk::PACK_SHRINK, 4);
103 conns = 0;
104 sChange[conns++] = fnumberFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
105 sChange[conns++] = fnumberTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
106 sChange[conns++] = shutterFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
107 sChange[conns++] = shutterTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
108 sChange[conns++] = isoFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
109 sChange[conns++] = isoTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
110 sChange[conns++] = focalFrom->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
111 sChange[conns++] = focalTo->signal_changed().connect (sigc::mem_fun(*this, &FilterPanel::valueChanged));
112 sChange[conns++] = camera->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &FilterPanel::valueChanged));
113 sChange[conns++] = lens->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &FilterPanel::valueChanged));
114 sChange[conns++] = enaFNumber->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
115 sChange[conns++] = enaShutter->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
116 sChange[conns++] = enaFocalLen->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
117 sChange[conns++] = enaISO->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
118 sChange[conns++] = enaCamera->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
119 sChange[conns++] = enaLens->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
120 sChange[conns++] = enabled->signal_toggled().connect( sigc::mem_fun(*this, &FilterPanel::valueChanged) );
122 set_size_request (0, -1);
124 show_all ();
127 void FilterPanel::setFilter (ExifFilterSettings& defefs) {
129 curefs = defefs;
131 for (int i=0; i<conns; i++)
132 sChange[i].block (true);
134 // enaFNumber->set_active (curefs.filterFNumber);
135 fnumberFrom->set_text (ImageMetaData::apertureToString (curefs.fnumberFrom));
136 fnumberTo->set_text (ImageMetaData::apertureToString (curefs.fnumberTo));
138 // enaShutter->set_active (curefs.filterShutter);
139 shutterFrom->set_text (ImageMetaData::shutterToString (curefs.shutterFrom));
140 shutterTo->set_text (ImageMetaData::shutterToString (curefs.shutterTo));
142 // enaISO->set_active (curefs.filterISO);
143 isoFrom->set_text (Glib::ustring::format (curefs.isoFrom));
144 isoTo->set_text (Glib::ustring::format (curefs.isoTo));
146 // enaFocalLen->set_active (curefs.filterFocalLen);
147 focalFrom->set_text (Glib::ustring::format (curefs.focalFrom));
148 focalTo->set_text (Glib::ustring::format (curefs.focalTo));
150 // enaCamera->set_active (curefs.filterCamera);
151 Glib::RefPtr<Gtk::TreeSelection> cselection = camera->get_selection ();
152 int j=0;
153 for (std::set<std::string>::iterator i = defefs.cameras.begin(); i!=defefs.cameras.end(); i++, j++) {
154 camera->append_text (*i);
155 if (curefs.cameras.count (*i)>0)
156 cselection->select (camera->get_model()->children()[j]);
159 // enaLens->set_active (curefs.filterLens);
160 Glib::RefPtr<Gtk::TreeSelection> lselection = lens->get_selection ();
161 j = 0;
162 for (std::set<std::string>::iterator i = defefs.lenses.begin(); i!=defefs.lenses.end(); i++, j++) {
163 lens->append_text (*i);
164 if (curefs.lenses.count (*i)>0)
165 lselection->select (lens->get_model()->children()[j]);
168 for (int i=0; i<conns; i++)
169 sChange[i].block (false);
172 bool FilterPanel::isEnabled () {
174 return enabled->get_active () && is_sensitive();
177 ExifFilterSettings FilterPanel::getFilter () {
179 ExifFilterSettings efs;
180 efs.fnumberFrom = atof (fnumberFrom->get_text().c_str());
181 efs.fnumberTo = atof (fnumberTo->get_text().c_str());
182 efs.focalFrom = atof (focalFrom->get_text().c_str());
183 efs.focalTo = atof (focalTo->get_text().c_str());
184 efs.isoFrom = atoi (isoFrom->get_text().c_str());
185 efs.isoTo = atoi (isoTo->get_text().c_str());
186 efs.shutterFrom = ImageMetaData::shutterFromString (shutterFrom->get_text());
187 efs.shutterTo = ImageMetaData::shutterFromString (shutterTo->get_text());
189 efs.filterFNumber = enaFNumber->get_active ();
190 efs.filterShutter = enaShutter->get_active ();
191 efs.filterFocalLen = enaFocalLen->get_active ();
192 efs.filterISO = enaISO->get_active ();
193 efs.filterCamera = enaCamera->get_active ();
194 efs.filterLens = enaLens->get_active ();
196 std::vector<int> sel = camera->get_selected ();
197 for (int i=0; i<sel.size(); i++)
198 efs.cameras.insert (camera->get_text (sel[i]));
199 sel = lens->get_selected ();
200 for (int i=0; i<sel.size(); i++)
201 efs.lenses.insert (lens->get_text (sel[i]));
203 return efs;
206 void FilterPanel::valueChanged () {
208 if (listener)
209 listener->exifFilterChanged ();