dynamic profile: merge "make" and "model" into "camera", and allow to use regexps
This commit is contained in:
@@ -1078,6 +1078,7 @@ PREFERENCES_TAB_GENERAL;General
|
|||||||
PREFERENCES_TAB_IMPROC;Image Processing
|
PREFERENCES_TAB_IMPROC;Image Processing
|
||||||
PREFERENCES_TAB_PERFORMANCE;Performance & Quality
|
PREFERENCES_TAB_PERFORMANCE;Performance & Quality
|
||||||
PREFERENCES_TAB_SOUND;Sounds
|
PREFERENCES_TAB_SOUND;Sounds
|
||||||
|
PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
|
||||||
PREFERENCES_TIMAX;High
|
PREFERENCES_TIMAX;High
|
||||||
PREFERENCES_TINB;Number of tiles
|
PREFERENCES_TINB;Number of tiles
|
||||||
PREFERENCES_TISTD;Standard
|
PREFERENCES_TISTD;Standard
|
||||||
@@ -1105,6 +1106,7 @@ PROFILEPANEL_PCUSTOM;Custom
|
|||||||
PROFILEPANEL_PFILE;From file
|
PROFILEPANEL_PFILE;From file
|
||||||
PROFILEPANEL_PINTERNAL;Neutral
|
PROFILEPANEL_PINTERNAL;Neutral
|
||||||
PROFILEPANEL_PLASTSAVED;Last Saved
|
PROFILEPANEL_PLASTSAVED;Last Saved
|
||||||
|
PROFILEPANEL_PDYNAMIC;Dynamic
|
||||||
PROFILEPANEL_SAVEDLGLABEL;Save Processing Parameters...
|
PROFILEPANEL_SAVEDLGLABEL;Save Processing Parameters...
|
||||||
PROFILEPANEL_SAVEPPASTE;Parameters to save
|
PROFILEPANEL_SAVEPPASTE;Parameters to save
|
||||||
PROFILEPANEL_TOOLTIPCOPY;Copy current processing profile to clipboard.\n<b>Ctrl-click</b> to select the parameters to copy.
|
PROFILEPANEL_TOOLTIPCOPY;Copy current processing profile to clipboard.\n<b>Ctrl-click</b> to select the parameters to copy.
|
||||||
@@ -2037,3 +2039,11 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: <b>Alt</b>-<b>f</b>
|
|||||||
ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: <b>f</b>
|
ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: <b>f</b>
|
||||||
ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: <b>+</b>
|
ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: <b>+</b>
|
||||||
ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: <b>-</b>
|
ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: <b>-</b>
|
||||||
|
DYNPROFILEEDITOR_PROFILE;Processing profile
|
||||||
|
DYNPROFILEEDITOR_MOVE_UP;Move up
|
||||||
|
DYNPROFILEEDITOR_MOVE_DOWN;Move down
|
||||||
|
DYNPROFILEEDITOR_NEW;New
|
||||||
|
DYNPROFILEEDITOR_EDIT;Edit
|
||||||
|
DYNPROFILEEDITOR_DELETE;Delete
|
||||||
|
DYNPROFILEEDITOR_NEW_RULE;New dynamic profile rule
|
||||||
|
DYNPROFILEEDITOR_EDIT_RULE;Edit dynamic profile rule
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "dynamicprofile.h"
|
#include "dynamicprofile.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <glibmm/regex.h>
|
||||||
|
|
||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
using namespace rtengine::procparams;
|
using namespace rtengine::procparams;
|
||||||
@@ -36,6 +37,22 @@ const double EXPCOMP_MAX = 20.0;
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
|
bool DynamicProfileEntry::Optional::operator()(const Glib::ustring &val) const
|
||||||
|
{
|
||||||
|
if (!enabled) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (value.find("re:") == 0) {
|
||||||
|
// this is a regexp
|
||||||
|
return Glib::Regex::match_simple(value.substr(3), val,
|
||||||
|
Glib::REGEX_CASELESS);
|
||||||
|
} else {
|
||||||
|
// normal string comparison
|
||||||
|
return value.casefold() == val.casefold();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DynamicProfileEntry::DynamicProfileEntry():
|
DynamicProfileEntry::DynamicProfileEntry():
|
||||||
serial_number(0),
|
serial_number(0),
|
||||||
iso(0, ISO_MAX),
|
iso(0, ISO_MAX),
|
||||||
@@ -60,8 +77,7 @@ bool DynamicProfileEntry::matches(const rtengine::ImageMetaData *im)
|
|||||||
&& focallen(im->getFocalLen())
|
&& focallen(im->getFocalLen())
|
||||||
&& shutterspeed(im->getShutterSpeed())
|
&& shutterspeed(im->getShutterSpeed())
|
||||||
&& expcomp(im->getExpComp())
|
&& expcomp(im->getExpComp())
|
||||||
&& make(im->getMake())
|
&& camera(im->getCamera())
|
||||||
&& model(im->getModel())
|
|
||||||
&& lens(im->getLens()));
|
&& lens(im->getLens()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +115,7 @@ void get_double_range(DynamicProfileEntry::Range<double> &dest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void get_optional(DynamicProfileEntry::Optional<Glib::ustring> &dest,
|
void get_optional(DynamicProfileEntry::Optional &dest,
|
||||||
const Glib::KeyFile &kf, const Glib::ustring &group,
|
const Glib::KeyFile &kf, const Glib::ustring &group,
|
||||||
const Glib::ustring &key)
|
const Glib::ustring &key)
|
||||||
{
|
{
|
||||||
@@ -132,7 +148,7 @@ void set_double_range(Glib::KeyFile &kf, const Glib::ustring &group,
|
|||||||
|
|
||||||
void set_optional(Glib::KeyFile &kf, const Glib::ustring &group,
|
void set_optional(Glib::KeyFile &kf, const Glib::ustring &group,
|
||||||
const Glib::ustring &key,
|
const Glib::ustring &key,
|
||||||
const DynamicProfileEntry::Optional<Glib::ustring> &val)
|
const DynamicProfileEntry::Optional &val)
|
||||||
{
|
{
|
||||||
kf.set_boolean(group, key + "_enabled", val.enabled);
|
kf.set_boolean(group, key + "_enabled", val.enabled);
|
||||||
kf.set_string(group, key + "_value", val.value);
|
kf.set_string(group, key + "_value", val.value);
|
||||||
@@ -175,8 +191,7 @@ bool loadDynamicProfileEntries(std::vector<DynamicProfileEntry> &out)
|
|||||||
get_double_range(entry.focallen, kf, group, "focallen");
|
get_double_range(entry.focallen, kf, group, "focallen");
|
||||||
get_double_range(entry.shutterspeed, kf, group, "shutterspeed");
|
get_double_range(entry.shutterspeed, kf, group, "shutterspeed");
|
||||||
get_double_range(entry.expcomp, kf, group, "expcomp");
|
get_double_range(entry.expcomp, kf, group, "expcomp");
|
||||||
get_optional(entry.make, kf, group, "make");
|
get_optional(entry.camera, kf, group, "camera");
|
||||||
get_optional(entry.model, kf, group, "model");
|
|
||||||
get_optional(entry.lens, kf, group, "lens");
|
get_optional(entry.lens, kf, group, "lens");
|
||||||
try {
|
try {
|
||||||
entry.profilepath = kf.get_string(group, "profilepath");
|
entry.profilepath = kf.get_string(group, "profilepath");
|
||||||
@@ -202,8 +217,7 @@ bool storeDynamicProfileEntries(const std::vector<DynamicProfileEntry> &entries)
|
|||||||
set_double_range(kf, group, "focallen", entry.focallen);
|
set_double_range(kf, group, "focallen", entry.focallen);
|
||||||
set_double_range(kf, group, "shutterspeed", entry.shutterspeed);
|
set_double_range(kf, group, "shutterspeed", entry.shutterspeed);
|
||||||
set_double_range(kf, group, "expcomp", entry.expcomp);
|
set_double_range(kf, group, "expcomp", entry.expcomp);
|
||||||
set_optional(kf, group, "make", entry.make);
|
set_optional(kf, group, "camera", entry.camera);
|
||||||
set_optional(kf, group, "model", entry.model);
|
|
||||||
set_optional(kf, group, "lens", entry.lens);
|
set_optional(kf, group, "lens", entry.lens);
|
||||||
kf.set_string(group, "profilepath", entry.profilepath);
|
kf.set_string(group, "profilepath", entry.profilepath);
|
||||||
}
|
}
|
||||||
|
@@ -38,16 +38,13 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct Optional {
|
struct Optional {
|
||||||
T value;
|
Glib::ustring value;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
explicit Optional(T v=T(), bool e=false): value(v), enabled(e) {}
|
explicit Optional(const Glib::ustring v="", bool e=false):
|
||||||
|
value(v), enabled(e) {}
|
||||||
|
|
||||||
bool operator()(const T &val) const
|
bool operator()(const Glib::ustring &val) const;
|
||||||
{
|
|
||||||
return !enabled || value == val;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DynamicProfileEntry();
|
DynamicProfileEntry();
|
||||||
@@ -60,9 +57,8 @@ public:
|
|||||||
Range<double> focallen;
|
Range<double> focallen;
|
||||||
Range<double> shutterspeed;
|
Range<double> shutterspeed;
|
||||||
Range<double> expcomp;
|
Range<double> expcomp;
|
||||||
Optional<Glib::ustring> make;
|
Optional camera;
|
||||||
Optional<Glib::ustring> model;
|
Optional lens;
|
||||||
Optional<Glib::ustring> lens;
|
|
||||||
Glib::ustring profilepath;
|
Glib::ustring profilepath;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -68,9 +68,8 @@ DynamicProfilePanel::EditDialog::EditDialog(const Glib::ustring &title,
|
|||||||
hb->pack_start(*profilepath_, true, true, 2);
|
hb->pack_start(*profilepath_, true, true, 2);
|
||||||
get_content_area()->pack_start(*hb, Gtk::PACK_SHRINK, 4);
|
get_content_area()->pack_start(*hb, Gtk::PACK_SHRINK, 4);
|
||||||
|
|
||||||
add_optional(M("DYNPROFILEEDITOR_CAMERA_MAKE"), has_make, make);
|
add_optional(M("EXIFFILTER_CAMERA"), has_camera_, camera_);
|
||||||
add_optional(M("DYNPROFILEEDITOR_CAMERA_MODEL"), has_model, model);
|
add_optional(M("EXIFFILTER_LENS"), has_lens_, lens_);
|
||||||
add_optional(M("EXIFFILTER_LENS"), has_lens, lens);
|
|
||||||
|
|
||||||
add_range(M("EXIFFILTER_ISO"), iso_min_, iso_max_);
|
add_range(M("EXIFFILTER_ISO"), iso_min_, iso_max_);
|
||||||
add_range(M("EXIFFILTER_APERTURE"), fnumber_min_, fnumber_max_);
|
add_range(M("EXIFFILTER_APERTURE"), fnumber_min_, fnumber_max_);
|
||||||
@@ -105,14 +104,11 @@ void DynamicProfilePanel::EditDialog::set_entry(
|
|||||||
expcomp_min_->set_value(entry.expcomp.min);
|
expcomp_min_->set_value(entry.expcomp.min);
|
||||||
expcomp_max_->set_value(entry.expcomp.max);
|
expcomp_max_->set_value(entry.expcomp.max);
|
||||||
|
|
||||||
has_make->set_active(entry.make.enabled);
|
has_camera_->set_active(entry.camera.enabled);
|
||||||
make->set_text(entry.make.value);
|
camera_->set_text(entry.camera.value);
|
||||||
|
|
||||||
has_model->set_active(entry.model.enabled);
|
has_lens_->set_active(entry.lens.enabled);
|
||||||
model->set_text(entry.model.value);
|
lens_->set_text(entry.lens.value);
|
||||||
|
|
||||||
has_lens->set_active(entry.lens.enabled);
|
|
||||||
lens->set_text(entry.lens.value);
|
|
||||||
|
|
||||||
profilepath_->updateProfileList();
|
profilepath_->updateProfileList();
|
||||||
if (!profilepath_->setActiveRowFromFullPath(entry.profilepath)) {
|
if (!profilepath_->setActiveRowFromFullPath(entry.profilepath)) {
|
||||||
@@ -139,14 +135,11 @@ DynamicProfileEntry DynamicProfilePanel::EditDialog::get_entry()
|
|||||||
ret.expcomp.min = expcomp_min_->get_value();
|
ret.expcomp.min = expcomp_min_->get_value();
|
||||||
ret.expcomp.max = expcomp_max_->get_value();
|
ret.expcomp.max = expcomp_max_->get_value();
|
||||||
|
|
||||||
ret.make.enabled = has_make->get_active();
|
ret.camera.enabled = has_camera_->get_active();
|
||||||
ret.make.value = make->get_text();
|
ret.camera.value = camera_->get_text();
|
||||||
|
|
||||||
ret.model.enabled = has_model->get_active();
|
ret.lens.enabled = has_lens_->get_active();
|
||||||
ret.model.value = model->get_text();
|
ret.lens.value = lens_->get_text();
|
||||||
|
|
||||||
ret.lens.enabled = has_lens->get_active();
|
|
||||||
ret.lens.value = lens->get_text();
|
|
||||||
|
|
||||||
ret.profilepath = profilepath_->getFullPathFromActiveRow();
|
ret.profilepath = profilepath_->getFullPathFromActiveRow();
|
||||||
|
|
||||||
@@ -273,21 +266,12 @@ DynamicProfilePanel::DynamicProfilePanel():
|
|||||||
}
|
}
|
||||||
cell = Gtk::manage(new Gtk::CellRendererText());
|
cell = Gtk::manage(new Gtk::CellRendererText());
|
||||||
cols_count = treeview_.append_column(
|
cols_count = treeview_.append_column(
|
||||||
M("DYNPROFILEEDITOR_CAMERA_MAKE"), *cell);
|
M("EXIFFILTER_CAMERA"), *cell);
|
||||||
col = treeview_.get_column(cols_count - 1);
|
col = treeview_.get_column(cols_count - 1);
|
||||||
if (col) {
|
if (col) {
|
||||||
col->set_cell_data_func(
|
col->set_cell_data_func(
|
||||||
*cell, sigc::mem_fun(
|
*cell, sigc::mem_fun(
|
||||||
*this, &DynamicProfilePanel::render_make));
|
*this, &DynamicProfilePanel::render_camera));
|
||||||
}
|
|
||||||
cell = Gtk::manage(new Gtk::CellRendererText());
|
|
||||||
cols_count = treeview_.append_column(
|
|
||||||
M("DYNPROFILEEDITOR_CAMERA_MODEL"), *cell);
|
|
||||||
col = treeview_.get_column(cols_count - 1);
|
|
||||||
if (col) {
|
|
||||||
col->set_cell_data_func(
|
|
||||||
*cell, sigc::mem_fun(
|
|
||||||
*this, &DynamicProfilePanel::render_model));
|
|
||||||
}
|
}
|
||||||
cell = Gtk::manage(new Gtk::CellRendererText());
|
cell = Gtk::manage(new Gtk::CellRendererText());
|
||||||
cols_count = treeview_.append_column(M("EXIFFILTER_LENS"), *cell);
|
cols_count = treeview_.append_column(M("EXIFFILTER_LENS"), *cell);
|
||||||
@@ -358,8 +342,7 @@ void DynamicProfilePanel::update_entry(Gtk::TreeModel::Row row,
|
|||||||
row[columns_.focallen] = entry.focallen;
|
row[columns_.focallen] = entry.focallen;
|
||||||
row[columns_.shutterspeed] = entry.shutterspeed;
|
row[columns_.shutterspeed] = entry.shutterspeed;
|
||||||
row[columns_.expcomp] = entry.expcomp;
|
row[columns_.expcomp] = entry.expcomp;
|
||||||
row[columns_.make] = entry.make;
|
row[columns_.camera] = entry.camera;
|
||||||
row[columns_.model] = entry.model;
|
|
||||||
row[columns_.lens] = entry.lens;
|
row[columns_.lens] = entry.lens;
|
||||||
row[columns_.profilepath] = entry.profilepath;
|
row[columns_.profilepath] = entry.profilepath;
|
||||||
}
|
}
|
||||||
@@ -381,8 +364,7 @@ DynamicProfileEntry DynamicProfilePanel::to_entry(Gtk::TreeModel::Row row,
|
|||||||
ret.focallen = row[columns_.focallen];
|
ret.focallen = row[columns_.focallen];
|
||||||
ret.shutterspeed = row[columns_.shutterspeed];
|
ret.shutterspeed = row[columns_.shutterspeed];
|
||||||
ret.expcomp = row[columns_.expcomp];
|
ret.expcomp = row[columns_.expcomp];
|
||||||
ret.make = row[columns_.make];
|
ret.camera = row[columns_.camera];
|
||||||
ret.model = row[columns_.model];
|
|
||||||
ret.lens = row[columns_.lens];
|
ret.lens = row[columns_.lens];
|
||||||
ret.profilepath = row[columns_.profilepath];
|
ret.profilepath = row[columns_.profilepath];
|
||||||
return ret;
|
return ret;
|
||||||
@@ -445,24 +427,17 @@ void DynamicProfilePanel::render_expcomp(
|
|||||||
#define RENDER_OPTIONAL_(name) \
|
#define RENDER_OPTIONAL_(name) \
|
||||||
auto row = *iter; \
|
auto row = *iter; \
|
||||||
Gtk::CellRendererText *ct = static_cast<Gtk::CellRendererText *>(cell); \
|
Gtk::CellRendererText *ct = static_cast<Gtk::CellRendererText *>(cell); \
|
||||||
DynamicProfileEntry::Optional<Glib::ustring> o = row[columns_. name]; \
|
DynamicProfileEntry::Optional o = row[columns_. name]; \
|
||||||
if (o.enabled) { \
|
if (o.enabled) { \
|
||||||
ct->property_text() = o.value; \
|
ct->property_text() = o.value; \
|
||||||
} else { \
|
} else { \
|
||||||
ct->property_text() = ""; \
|
ct->property_text() = ""; \
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicProfilePanel::render_make(
|
void DynamicProfilePanel::render_camera(
|
||||||
Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator &iter)
|
Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator &iter)
|
||||||
{
|
{
|
||||||
RENDER_OPTIONAL_(make);
|
RENDER_OPTIONAL_(camera);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DynamicProfilePanel::render_model(
|
|
||||||
Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator &iter)
|
|
||||||
{
|
|
||||||
RENDER_OPTIONAL_(model);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -34,7 +34,6 @@ private:
|
|||||||
void add_entry(const DynamicProfileEntry &entry);
|
void add_entry(const DynamicProfileEntry &entry);
|
||||||
DynamicProfileEntry to_entry(Gtk::TreeModel::Row row, int serial=0);
|
DynamicProfileEntry to_entry(Gtk::TreeModel::Row row, int serial=0);
|
||||||
|
|
||||||
//Signal handlers:
|
|
||||||
void on_button_quit();
|
void on_button_quit();
|
||||||
void on_button_up();
|
void on_button_up();
|
||||||
void on_button_down();
|
void on_button_down();
|
||||||
@@ -42,7 +41,6 @@ private:
|
|||||||
void on_button_edit();
|
void on_button_edit();
|
||||||
void on_button_delete();
|
void on_button_delete();
|
||||||
|
|
||||||
//Tree model columns:
|
|
||||||
class DynamicProfileColumns: public Gtk::TreeModel::ColumnRecord {
|
class DynamicProfileColumns: public Gtk::TreeModel::ColumnRecord {
|
||||||
public:
|
public:
|
||||||
DynamicProfileColumns()
|
DynamicProfileColumns()
|
||||||
@@ -52,8 +50,7 @@ private:
|
|||||||
add(focallen);
|
add(focallen);
|
||||||
add(shutterspeed);
|
add(shutterspeed);
|
||||||
add(expcomp);
|
add(expcomp);
|
||||||
add(make);
|
add(camera);
|
||||||
add(model);
|
|
||||||
add(lens);
|
add(lens);
|
||||||
add(profilepath);
|
add(profilepath);
|
||||||
}
|
}
|
||||||
@@ -63,9 +60,8 @@ private:
|
|||||||
Gtk::TreeModelColumn<DynamicProfileEntry::Range<double>> focallen;
|
Gtk::TreeModelColumn<DynamicProfileEntry::Range<double>> focallen;
|
||||||
Gtk::TreeModelColumn<DynamicProfileEntry::Range<double>> shutterspeed;
|
Gtk::TreeModelColumn<DynamicProfileEntry::Range<double>> shutterspeed;
|
||||||
Gtk::TreeModelColumn<DynamicProfileEntry::Range<double>> expcomp;
|
Gtk::TreeModelColumn<DynamicProfileEntry::Range<double>> expcomp;
|
||||||
Gtk::TreeModelColumn<DynamicProfileEntry::Optional<Glib::ustring>> make;
|
Gtk::TreeModelColumn<DynamicProfileEntry::Optional> camera;
|
||||||
Gtk::TreeModelColumn<DynamicProfileEntry::Optional<Glib::ustring>> model;
|
Gtk::TreeModelColumn<DynamicProfileEntry::Optional> lens;
|
||||||
Gtk::TreeModelColumn<DynamicProfileEntry::Optional<Glib::ustring>> lens;
|
|
||||||
Gtk::TreeModelColumn<Glib::ustring> profilepath;
|
Gtk::TreeModelColumn<Glib::ustring> profilepath;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -80,10 +76,8 @@ private:
|
|||||||
const Gtk::TreeModel::iterator& iter);
|
const Gtk::TreeModel::iterator& iter);
|
||||||
void render_expcomp(Gtk::CellRenderer* cell,
|
void render_expcomp(Gtk::CellRenderer* cell,
|
||||||
const Gtk::TreeModel::iterator& iter);
|
const Gtk::TreeModel::iterator& iter);
|
||||||
void render_make(Gtk::CellRenderer* cell,
|
void render_camera(Gtk::CellRenderer* cell,
|
||||||
const Gtk::TreeModel::iterator& iter);
|
const Gtk::TreeModel::iterator& iter);
|
||||||
void render_model(Gtk::CellRenderer* cell,
|
|
||||||
const Gtk::TreeModel::iterator& iter);
|
|
||||||
void render_lens(Gtk::CellRenderer* cell,
|
void render_lens(Gtk::CellRenderer* cell,
|
||||||
const Gtk::TreeModel::iterator& iter);
|
const Gtk::TreeModel::iterator& iter);
|
||||||
void render_profilepath(Gtk::CellRenderer* cell,
|
void render_profilepath(Gtk::CellRenderer* cell,
|
||||||
@@ -117,14 +111,11 @@ private:
|
|||||||
Gtk::SpinButton *expcomp_min_;
|
Gtk::SpinButton *expcomp_min_;
|
||||||
Gtk::SpinButton *expcomp_max_;
|
Gtk::SpinButton *expcomp_max_;
|
||||||
|
|
||||||
Gtk::CheckButton *has_make;
|
Gtk::CheckButton *has_camera_;
|
||||||
Gtk::Entry *make;
|
Gtk::Entry *camera_;
|
||||||
|
|
||||||
Gtk::CheckButton *has_model;
|
|
||||||
Gtk::Entry *model;
|
|
||||||
|
|
||||||
Gtk::CheckButton *has_lens;
|
Gtk::CheckButton *has_lens_;
|
||||||
Gtk::Entry *lens;
|
Gtk::Entry *lens_;
|
||||||
|
|
||||||
ProfileStoreComboBox *profilepath_;
|
ProfileStoreComboBox *profilepath_;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user