added GUI for lensfun
This commit is contained in:
parent
940577ce45
commit
30f62b0560
@ -511,6 +511,10 @@ enum ProcEvent {
|
|||||||
EvCATgreensc = 481,
|
EvCATgreensc = 481,
|
||||||
EvCATybscen = 482,
|
EvCATybscen = 482,
|
||||||
EvCATAutoyb = 483,
|
EvCATAutoyb = 483,
|
||||||
|
// profiled lens correction new events
|
||||||
|
EvLensCorrMode = 484,
|
||||||
|
EvLensCorrLensfunCamera = 488,
|
||||||
|
EvLensCorrLensfunLens = 489,
|
||||||
|
|
||||||
NUMOFEVENTS
|
NUMOFEVENTS
|
||||||
|
|
||||||
|
@ -510,8 +510,10 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
|||||||
LUMINANCECURVE, // EvCATtempsc
|
LUMINANCECURVE, // EvCATtempsc
|
||||||
LUMINANCECURVE, // EvCATgreensc
|
LUMINANCECURVE, // EvCATgreensc
|
||||||
LUMINANCECURVE, // EvCATybscen
|
LUMINANCECURVE, // EvCATybscen
|
||||||
LUMINANCECURVE // EvCATAutoyb
|
LUMINANCECURVE, // EvCATAutoyb
|
||||||
|
DARKFRAME, // EvLensCorrMode
|
||||||
|
DARKFRAME, // EvLensCorrLensfunCamera
|
||||||
|
DARKFRAME // EvLensCorrLensfunLens
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -215,17 +215,16 @@ std::vector<LFCamera> LFDatabase::getCameras() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<LFLens> LFDatabase::getLenses(const LFCamera &camera) const
|
std::vector<LFLens> LFDatabase::getLenses() const
|
||||||
{
|
{
|
||||||
std::vector<LFLens> ret;
|
std::vector<LFLens> ret;
|
||||||
if (data_) {
|
if (data_) {
|
||||||
auto lenses = data_->FindLenses(camera.data_, NULL, "", LF_SEARCH_LOOSE /*| LF_SEARCH_SORT_AND_UNIQUIFY*/);
|
auto lenses = data_->GetLenses();
|
||||||
while (*lenses) {
|
while (*lenses) {
|
||||||
ret.emplace_back(LFLens());
|
ret.emplace_back(LFLens());
|
||||||
ret.back().data_ = *lenses;
|
ret.back().data_ = *lenses;
|
||||||
++lenses;
|
++lenses;
|
||||||
}
|
}
|
||||||
lf_free(lenses);
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ public:
|
|||||||
~LFDatabase();
|
~LFDatabase();
|
||||||
|
|
||||||
std::vector<LFCamera> getCameras() const;
|
std::vector<LFCamera> getCameras() const;
|
||||||
std::vector<LFLens> getLenses(const LFCamera &camera) const;
|
std::vector<LFLens> getLenses() const;
|
||||||
LFCamera findCamera(const Glib::ustring &make, const Glib::ustring &model) const;
|
LFCamera findCamera(const Glib::ustring &make, const Glib::ustring &model) const;
|
||||||
LFLens findLens(const LFCamera &camera, const Glib::ustring &name) const;
|
LFLens findLens(const LFCamera &camera, const Glib::ustring &name) const;
|
||||||
LFModifier *getModifier(const LFCamera &camera, const LFLens &lens,
|
LFModifier *getModifier(const LFCamera &camera, const LFLens &lens,
|
||||||
|
@ -22,15 +22,66 @@
|
|||||||
#include "../rtengine/lcp.h"
|
#include "../rtengine/lcp.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "rtimage.h"
|
#include "rtimage.h"
|
||||||
|
#include "../rtengine/rtlensfun.h"
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
using namespace rtengine::procparams;
|
using namespace rtengine::procparams;
|
||||||
|
|
||||||
LensProfilePanel::LensProfilePanel () : FoldableToolPanel(this, "lensprof", M("TP_LENSPROFILE_LABEL")), lcpFileChanged(false), useDistChanged(false), useVignChanged(false), useCAChanged(false), isRaw(true), lensgeomLcpFill(nullptr)
|
LensProfilePanel::LensProfilePanel () :
|
||||||
|
FoldableToolPanel(this, "lensprof", M("TP_LENSPROFILE_LABEL")),
|
||||||
|
lcpFileChanged(false),
|
||||||
|
useDistChanged(false),
|
||||||
|
useVignChanged(false),
|
||||||
|
useCAChanged(false),
|
||||||
|
isRaw(true),
|
||||||
|
lensgeomLcpFill(nullptr),
|
||||||
|
useLensfunChanged(false),
|
||||||
|
lensfunAutoChanged(false),
|
||||||
|
lensfunCameraChanged(false),
|
||||||
|
lensfunLensChanged(false)
|
||||||
{
|
{
|
||||||
hbLCPFile = Gtk::manage(new Gtk::HBox());
|
corrOff = Gtk::manage(new Gtk::RadioButton(M("LENSPROFILE_CORRECTION_OFF")));
|
||||||
|
pack_start(*corrOff);
|
||||||
|
|
||||||
lLCPFileHead = Gtk::manage(new Gtk::Label(M("GENERAL_FILE")));
|
corrGroup = corrOff->get_group();
|
||||||
|
|
||||||
|
corrLensfunAuto = Gtk::manage(new Gtk::RadioButton(corrGroup, M("LENSPROFILE_CORRECTION_AUTOMATCH")));
|
||||||
|
pack_start(*corrLensfunAuto);
|
||||||
|
|
||||||
|
corrLensfunManual = Gtk::manage(new Gtk::RadioButton(corrGroup, M("LENSPROFILE_CORRECTION_MANUAL")));
|
||||||
|
pack_start(*corrLensfunManual);
|
||||||
|
|
||||||
|
lensfunCameraModel = Gtk::TreeStore::create(lensfunModelCam);
|
||||||
|
lensfunLensModel = Gtk::TreeStore::create(lensfunModelLens);
|
||||||
|
|
||||||
|
lensfunCameras = Gtk::manage(new MyComboBox());
|
||||||
|
lensfunCameras->set_model(lensfunCameraModel);
|
||||||
|
lensfunCameras->pack_start(lensfunModelCam.model);
|
||||||
|
lensfunLenses = Gtk::manage(new MyComboBox());
|
||||||
|
lensfunLenses->set_model(lensfunLensModel);
|
||||||
|
lensfunLenses->pack_start(lensfunModelLens.lens);
|
||||||
|
|
||||||
|
Gtk::HBox *hb = Gtk::manage(new Gtk::HBox());
|
||||||
|
hb->pack_start(*Gtk::manage(new Gtk::Label(M("LENSFUN_CAMERA"))), Gtk::PACK_SHRINK, 4);
|
||||||
|
hb->pack_start(*lensfunCameras);
|
||||||
|
pack_start(*hb);
|
||||||
|
|
||||||
|
fillLensfunCameras();
|
||||||
|
|
||||||
|
hb = Gtk::manage(new Gtk::HBox());
|
||||||
|
hb->pack_start(*Gtk::manage(new Gtk::Label(M("LENSFUN_LENS"))), Gtk::PACK_SHRINK, 4);
|
||||||
|
hb->pack_start(*lensfunLenses);
|
||||||
|
pack_start(*hb);
|
||||||
|
|
||||||
|
fillLensfunLenses();
|
||||||
|
|
||||||
|
corrLcpFile = Gtk::manage(new Gtk::RadioButton(corrGroup));
|
||||||
|
hbLCPFile = Gtk::manage(new Gtk::HBox());
|
||||||
|
hbLCPFile->pack_start(*corrLcpFile, Gtk::PACK_SHRINK);
|
||||||
|
|
||||||
|
lLCPFileHead = Gtk::manage(new Gtk::Label(M("LENSPROFILE_CORRECTION_LCPFILE")));
|
||||||
hbLCPFile->pack_start(*lLCPFileHead, Gtk::PACK_SHRINK, 4);
|
hbLCPFile->pack_start(*lLCPFileHead, Gtk::PACK_SHRINK, 4);
|
||||||
|
|
||||||
fcbLCPFile = Gtk::manage(new MyFileChooserButton(M("TP_LENSPROFILE_LABEL"), Gtk::FILE_CHOOSER_ACTION_OPEN));
|
fcbLCPFile = Gtk::manage(new MyFileChooserButton(M("TP_LENSPROFILE_LABEL"), Gtk::FILE_CHOOSER_ACTION_OPEN));
|
||||||
@ -74,6 +125,13 @@ LensProfilePanel::LensProfilePanel () : FoldableToolPanel(this, "lensprof", M("T
|
|||||||
ckbUseVign->signal_toggled().connect( sigc::mem_fun(*this, &LensProfilePanel::onUseVignChanged) );
|
ckbUseVign->signal_toggled().connect( sigc::mem_fun(*this, &LensProfilePanel::onUseVignChanged) );
|
||||||
ckbUseCA->signal_toggled().connect( sigc::mem_fun(*this, &LensProfilePanel::onUseCAChanged) );
|
ckbUseCA->signal_toggled().connect( sigc::mem_fun(*this, &LensProfilePanel::onUseCAChanged) );
|
||||||
|
|
||||||
|
lensfunCameras->signal_changed().connect(sigc::mem_fun(*this, &LensProfilePanel::onLensfunCameraChanged));
|
||||||
|
lensfunLenses->signal_changed().connect(sigc::mem_fun(*this, &LensProfilePanel::onLensfunLensChanged));
|
||||||
|
corrOff->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged));
|
||||||
|
corrLensfunAuto->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged));
|
||||||
|
corrLensfunManual->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged));
|
||||||
|
corrLcpFile->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged));
|
||||||
|
|
||||||
allowFocusDep = true;
|
allowFocusDep = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +140,15 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
|
|||||||
disableListener ();
|
disableListener ();
|
||||||
conUseDist.block(true);
|
conUseDist.block(true);
|
||||||
|
|
||||||
if (!pp->lensProf.lcpFile.empty() && lcpStore->isValidLCPFileName(pp->lensProf.lcpFile)) {
|
corrOff->set_active(true);
|
||||||
|
if (pp->lensProf.useLensfun) {
|
||||||
|
if (pp->lensProf.lfAutoMatch) {
|
||||||
|
corrLensfunAuto->set_active(true);
|
||||||
|
} else {
|
||||||
|
corrLensfunManual->set_active(true);
|
||||||
|
}
|
||||||
|
} else if (!pp->lensProf.lcpFile.empty() && lcpStore->isValidLCPFileName(pp->lensProf.lcpFile)) {
|
||||||
|
corrLcpFile->set_active(true);
|
||||||
fcbLCPFile->set_filename (pp->lensProf.lcpFile);
|
fcbLCPFile->set_filename (pp->lensProf.lcpFile);
|
||||||
updateDisabled(true);
|
updateDisabled(true);
|
||||||
} else {
|
} else {
|
||||||
@ -104,7 +170,48 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
|
|||||||
ckbUseVign->set_active (pp->lensProf.useVign && isRaw);
|
ckbUseVign->set_active (pp->lensProf.useVign && isRaw);
|
||||||
ckbUseCA->set_active (pp->lensProf.useCA && isRaw);
|
ckbUseCA->set_active (pp->lensProf.useCA && isRaw);
|
||||||
|
|
||||||
|
if (!pp->lensProf.lfCameraMake.empty() && !pp->lensProf.lfCameraModel.empty()) {
|
||||||
|
// search for the active row
|
||||||
|
for (auto row : lensfunCameraModel->children()) {
|
||||||
|
if (row[lensfunModelCam.make] == pp->lensProf.lfCameraMake) {
|
||||||
|
auto &c = row.children();
|
||||||
|
for (auto it = c.begin(), end = c.end(); it != end; ++it) {
|
||||||
|
auto &childrow = *it;
|
||||||
|
if (childrow[lensfunModelCam.model] == pp->lensProf.lfCameraModel) {
|
||||||
|
lensfunCameras->set_active(it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pp->lensProf.lfLens.empty()) {
|
||||||
|
// search for the active row
|
||||||
|
auto pos = pp->lensProf.lfLens.find_first_of(' ');
|
||||||
|
Glib::ustring make = "(Unknown)";
|
||||||
|
if (pos != Glib::ustring::npos) {
|
||||||
|
make = pp->lensProf.lfLens.substr(0, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto row : lensfunCameraModel->children()) {
|
||||||
|
if (row[lensfunModelLens.lens] == make) {
|
||||||
|
auto &c = row.children();
|
||||||
|
for (auto it = c.begin(), end = c.end(); it != end; ++it) {
|
||||||
|
auto &childrow = *it;
|
||||||
|
if (childrow[lensfunModelLens.lens] == pp->lensProf.lfLens) {
|
||||||
|
lensfunLenses->set_active(it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lcpFileChanged = useDistChanged = useVignChanged = useCAChanged = false;
|
lcpFileChanged = useDistChanged = useVignChanged = useCAChanged = false;
|
||||||
|
useLensfunChanged = lensfunAutoChanged = lensfunCameraChanged = lensfunLensChanged = false;
|
||||||
|
|
||||||
enableListener ();
|
enableListener ();
|
||||||
conUseDist.block(false);
|
conUseDist.block(false);
|
||||||
@ -128,7 +235,7 @@ void LensProfilePanel::setRawMeta(bool raw, const rtengine::ImageMetaData* pMeta
|
|||||||
|
|
||||||
void LensProfilePanel::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
|
void LensProfilePanel::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
|
||||||
{
|
{
|
||||||
if (lcpStore->isValidLCPFileName(fcbLCPFile->get_filename())) {
|
if (corrLcpFile->get_active() && lcpStore->isValidLCPFileName(fcbLCPFile->get_filename())) {
|
||||||
pp->lensProf.lcpFile = fcbLCPFile->get_filename();
|
pp->lensProf.lcpFile = fcbLCPFile->get_filename();
|
||||||
} else {
|
} else {
|
||||||
pp->lensProf.lcpFile = "";
|
pp->lensProf.lcpFile = "";
|
||||||
@ -138,11 +245,33 @@ void LensProfilePanel::write( rtengine::procparams::ProcParams* pp, ParamsEdited
|
|||||||
pp->lensProf.useVign = ckbUseVign->get_active();
|
pp->lensProf.useVign = ckbUseVign->get_active();
|
||||||
pp->lensProf.useCA = ckbUseCA->get_active();
|
pp->lensProf.useCA = ckbUseCA->get_active();
|
||||||
|
|
||||||
|
pp->lensProf.useLensfun = corrLensfunAuto->get_active() || corrLensfunManual->get_active();
|
||||||
|
pp->lensProf.lfAutoMatch = corrLensfunAuto->get_active();
|
||||||
|
auto itc = lensfunCameras->get_active();
|
||||||
|
if (itc) {
|
||||||
|
pp->lensProf.lfCameraMake = (*itc)[lensfunModelCam.make];
|
||||||
|
pp->lensProf.lfCameraModel = (*itc)[lensfunModelCam.model];
|
||||||
|
} else {
|
||||||
|
pp->lensProf.lfCameraMake = "";
|
||||||
|
pp->lensProf.lfCameraModel = "";
|
||||||
|
}
|
||||||
|
auto itl = lensfunLenses->get_active();
|
||||||
|
if (itl) {
|
||||||
|
pp->lensProf.lfLens = (*itl)[lensfunModelLens.lens];
|
||||||
|
} else {
|
||||||
|
pp->lensProf.lfLens = "";
|
||||||
|
}
|
||||||
|
|
||||||
if (pedited) {
|
if (pedited) {
|
||||||
pedited->lensProf.lcpFile = lcpFileChanged;
|
pedited->lensProf.lcpFile = lcpFileChanged;
|
||||||
pedited->lensProf.useDist = useDistChanged;
|
pedited->lensProf.useDist = useDistChanged;
|
||||||
pedited->lensProf.useVign = useVignChanged;
|
pedited->lensProf.useVign = useVignChanged;
|
||||||
pedited->lensProf.useCA = useCAChanged;
|
pedited->lensProf.useCA = useCAChanged;
|
||||||
|
pedited->lensProf.useLensfun = useLensfunChanged;
|
||||||
|
pedited->lensProf.lfAutoMatch = lensfunAutoChanged;
|
||||||
|
pedited->lensProf.lfCameraMake = lensfunCameraChanged;
|
||||||
|
pedited->lensProf.lfCameraModel = lensfunCameraChanged;
|
||||||
|
pedited->lensProf.lfLens = lensfunLensChanged;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,3 +328,146 @@ void LensProfilePanel::updateDisabled(bool enable)
|
|||||||
ckbUseVign->set_sensitive(enable && isRaw);
|
ckbUseVign->set_sensitive(enable && isRaw);
|
||||||
ckbUseCA->set_sensitive(enable && allowFocusDep);
|
ckbUseCA->set_sensitive(enable && allowFocusDep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LensProfilePanel::setBatchMode(bool yes)
|
||||||
|
{
|
||||||
|
FoldableToolPanel::setBatchMode(yes);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LensProfilePanel::fillLensfunCameras()
|
||||||
|
{
|
||||||
|
std::map<Glib::ustring, std::set<Glib::ustring>> camnames;
|
||||||
|
auto camlist = LFDatabase::getInstance()->getCameras();
|
||||||
|
for (auto &c : camlist) {
|
||||||
|
camnames[c.getMake()].insert(c.getModel());
|
||||||
|
}
|
||||||
|
for (auto &p : camnames) {
|
||||||
|
Gtk::TreeModel::Row row = *(lensfunCameraModel->append());
|
||||||
|
row[lensfunModelCam.make] = p.first;
|
||||||
|
row[lensfunModelCam.model] = "";
|
||||||
|
for (auto &c : p.second) {
|
||||||
|
Gtk::TreeModel::Row child = *(lensfunCameraModel->append(row.children()));
|
||||||
|
child[lensfunModelCam.make] = p.first;
|
||||||
|
child[lensfunModelCam.model] = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LensProfilePanel::fillLensfunLenses()
|
||||||
|
{
|
||||||
|
std::map<Glib::ustring, std::set<Glib::ustring>> lenses;
|
||||||
|
auto lenslist = LFDatabase::getInstance()->getLenses();
|
||||||
|
for (auto &l : lenslist) {
|
||||||
|
auto name = l.getDisplayString();
|
||||||
|
auto pos = name.find_first_of(' ');
|
||||||
|
Glib::ustring make = "(Unknown)";
|
||||||
|
if (pos != Glib::ustring::npos) {
|
||||||
|
make = name.substr(0, pos);
|
||||||
|
}
|
||||||
|
lenses[make].insert(name);
|
||||||
|
}
|
||||||
|
for (auto &p : lenses) {
|
||||||
|
Gtk::TreeModel::Row row = *(lensfunLensModel->append());
|
||||||
|
row[lensfunModelLens.lens] = p.first;
|
||||||
|
for (auto &c : p.second) {
|
||||||
|
Gtk::TreeModel::Row child = *(lensfunLensModel->append(row.children()));
|
||||||
|
child[lensfunModelLens.lens] = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LensProfilePanel::onLensfunCameraChanged()
|
||||||
|
{
|
||||||
|
auto iter = lensfunCameras->get_active();
|
||||||
|
|
||||||
|
if (iter) {
|
||||||
|
lensfunCameraChanged = true;
|
||||||
|
|
||||||
|
if (listener) {
|
||||||
|
Glib::ustring name = (*iter)[lensfunModelCam.model];
|
||||||
|
listener->panelChanged(EvLensCorrLensfunCamera, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LensProfilePanel::onLensfunLensChanged()
|
||||||
|
{
|
||||||
|
auto iter = lensfunLenses->get_active();
|
||||||
|
|
||||||
|
if (iter) {
|
||||||
|
lensfunLensChanged = true;
|
||||||
|
|
||||||
|
if (listener) {
|
||||||
|
Glib::ustring name = (*iter)[lensfunModelLens.lens];
|
||||||
|
listener->panelChanged(EvLensCorrLensfunLens, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LensProfilePanel::onCorrModeChanged()
|
||||||
|
{
|
||||||
|
Glib::ustring mode;
|
||||||
|
|
||||||
|
if (corrOff->get_active()) {
|
||||||
|
useLensfunChanged = true;
|
||||||
|
lcpFileChanged = true;
|
||||||
|
|
||||||
|
lensfunCameras->set_sensitive(false);
|
||||||
|
lensfunLenses->set_sensitive(false);
|
||||||
|
ckbUseDist->set_sensitive(false);
|
||||||
|
ckbUseVign->set_sensitive(false);
|
||||||
|
ckbUseCA->set_sensitive(false);
|
||||||
|
|
||||||
|
mode = M("LENSPROFILE_CORRECTION_OFF");
|
||||||
|
} else if (corrLensfunAuto->get_active()) {
|
||||||
|
useLensfunChanged = true;
|
||||||
|
lcpFileChanged = true;
|
||||||
|
useDistChanged = true;
|
||||||
|
useVignChanged = true;
|
||||||
|
|
||||||
|
lensfunCameras->set_sensitive(false);
|
||||||
|
lensfunLenses->set_sensitive(false);
|
||||||
|
|
||||||
|
ckbUseDist->set_sensitive(true);
|
||||||
|
ckbUseVign->set_sensitive(true);
|
||||||
|
ckbUseCA->set_sensitive(false);
|
||||||
|
|
||||||
|
mode = M("LENSPROFILE_CORRECTION_AUTOMATCH");
|
||||||
|
} else if (corrLensfunManual->get_active()) {
|
||||||
|
useLensfunChanged = true;
|
||||||
|
lcpFileChanged = true;
|
||||||
|
lcpFileChanged = true;
|
||||||
|
useDistChanged = true;
|
||||||
|
useVignChanged = true;
|
||||||
|
|
||||||
|
lensfunCameras->set_sensitive(true);
|
||||||
|
lensfunLenses->set_sensitive(true);
|
||||||
|
|
||||||
|
ckbUseDist->set_sensitive(true);
|
||||||
|
ckbUseVign->set_sensitive(true);
|
||||||
|
ckbUseCA->set_sensitive(false);
|
||||||
|
|
||||||
|
mode = M("LENSPROFILE_CORRECTION_MANUAL");
|
||||||
|
} else if (corrLcpFile->get_active()) {
|
||||||
|
useLensfunChanged = true;
|
||||||
|
lcpFileChanged = true;
|
||||||
|
lcpFileChanged = true;
|
||||||
|
useDistChanged = true;
|
||||||
|
useVignChanged = true;
|
||||||
|
|
||||||
|
lensfunCameras->set_sensitive(false);
|
||||||
|
lensfunLenses->set_sensitive(false);
|
||||||
|
updateDisabled(true);
|
||||||
|
|
||||||
|
mode = M("LENSPROFILE_CORRECTION_LCPFILE");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listener) {
|
||||||
|
listener->panelChanged(EvLensCorrMode, mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -41,6 +41,42 @@ protected:
|
|||||||
bool isRaw;
|
bool isRaw;
|
||||||
LensGeometry *lensgeomLcpFill;
|
LensGeometry *lensgeomLcpFill;
|
||||||
|
|
||||||
|
Gtk::RadioButton::Group corrGroup;
|
||||||
|
Gtk::RadioButton *corrOff;
|
||||||
|
Gtk::RadioButton *corrLensfunAuto;
|
||||||
|
Gtk::RadioButton *corrLensfunManual;
|
||||||
|
Gtk::RadioButton *corrLcpFile;
|
||||||
|
Gtk::RadioButton *corrUnchanged;
|
||||||
|
MyComboBox *lensfunCameras;
|
||||||
|
MyComboBox *lensfunLenses;
|
||||||
|
|
||||||
|
class LFModelCam: public Gtk::TreeModel::ColumnRecord {
|
||||||
|
public:
|
||||||
|
LFModelCam() { add(make); add(model); }
|
||||||
|
Gtk::TreeModelColumn<Glib::ustring> make;
|
||||||
|
Gtk::TreeModelColumn<Glib::ustring> model;
|
||||||
|
};
|
||||||
|
|
||||||
|
class LFModelLens: public Gtk::TreeModel::ColumnRecord {
|
||||||
|
public:
|
||||||
|
LFModelLens() { add(lens); }
|
||||||
|
Gtk::TreeModelColumn<Glib::ustring> lens;
|
||||||
|
};
|
||||||
|
|
||||||
|
LFModelCam lensfunModelCam;
|
||||||
|
LFModelLens lensfunModelLens;
|
||||||
|
|
||||||
|
Glib::RefPtr<Gtk::TreeStore> lensfunCameraModel;
|
||||||
|
Glib::RefPtr<Gtk::TreeStore> lensfunLensModel;
|
||||||
|
|
||||||
|
bool useLensfunChanged;
|
||||||
|
bool lensfunAutoChanged;
|
||||||
|
bool lensfunCameraChanged;
|
||||||
|
bool lensfunLensChanged;
|
||||||
|
|
||||||
|
void fillLensfunCameras();
|
||||||
|
void fillLensfunLenses();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
LensProfilePanel ();
|
LensProfilePanel ();
|
||||||
@ -58,6 +94,12 @@ public:
|
|||||||
{
|
{
|
||||||
lensgeomLcpFill = foo ;
|
lensgeomLcpFill = foo ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void setBatchMode(bool yes);
|
||||||
|
|
||||||
|
void onLensfunCameraChanged();
|
||||||
|
void onLensfunLensChanged();
|
||||||
|
void onCorrModeChanged();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user