From 03ec1abca8886a788613e0f0ca1029031aad9cc1 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Sat, 9 Sep 2017 18:42:16 +0200 Subject: [PATCH] properly disable auto-matched lens correction when not available --- rtgui/lensprofile.cc | 39 +++++++++++++++++++++++++++++++-------- rtgui/lensprofile.h | 1 + 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/rtgui/lensprofile.cc b/rtgui/lensprofile.cc index 5f98ef4af..b6af0d8d0 100644 --- a/rtgui/lensprofile.cc +++ b/rtgui/lensprofile.cc @@ -183,7 +183,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa } if (!setLensfunCamera(pp->lensProf.lfCameraMake, pp->lensProf.lfCameraModel) && pp->lensProf.lfAutoMatch) { - setLensfunCamera(c.getMake(), c.getModel()); + setLensfunCamera(c.getMake(), c.getModel()); } if (!setLensfunLens(pp->lensProf.lfLens) && pp->lensProf.lfAutoMatch) { setLensfunLens(l.getLens()); @@ -192,16 +192,26 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa lcpFileChanged = useDistChanged = useVignChanged = useCAChanged = false; useLensfunChanged = lensfunAutoChanged = lensfunCameraChanged = lensfunLensChanged = false; - if (metadata) { - std::unique_ptr mod(LFDatabase::findModifier(pp->lensProf, metadata, 100, 100, pp->coarse, -1)); - if (!mod) { - if (pp->lensProf.useLensfun) { - corrOff->set_active(true); - } - corrLensfunAuto->set_sensitive(false); + if (!checkLensfunCanCorrect(true)) { + if (corrLensfunAuto->get_active()) { + corrOff->set_active(true); } + corrLensfunAuto->set_sensitive(false); } + if (corrLensfunManual->get_active() && !checkLensfunCanCorrect(false)) { + corrOff->set_active(true); + } + // if (metadata) { + // std::unique_ptr mod(LFDatabase::findModifier(pp->lensProf, metadata, 100, 100, pp->coarse, -1)); + // if (!mod) { + // if (pp->lensProf.useLensfun) { + // corrOff->set_active(true); + // } + // corrLensfunAuto->set_sensitive(false); + // } + // } + enableListener (); conUseDist.block(false); } @@ -526,3 +536,16 @@ void LensProfilePanel::onCorrModeChanged() listener->panelChanged(EvLensCorrMode, mode); } } + + +bool LensProfilePanel::checkLensfunCanCorrect(bool automatch) +{ + if (!metadata) { + return false; + } + rtengine::procparams::ProcParams lpp; + write(&lpp); + lpp.lensProf.lfAutoMatch = automatch; + std::unique_ptr mod(LFDatabase::findModifier(lpp.lensProf, metadata, 100, 100, lpp.coarse, -1)); + return mod.get() != nullptr; +} diff --git a/rtgui/lensprofile.h b/rtgui/lensprofile.h index e1e9b0e5f..0894d7a98 100644 --- a/rtgui/lensprofile.h +++ b/rtgui/lensprofile.h @@ -79,6 +79,7 @@ protected: void fillLensfunLenses(); bool setLensfunCamera(const Glib::ustring &make, const Glib::ustring &model); bool setLensfunLens(const Glib::ustring &lens); + bool checkLensfunCanCorrect(bool automatch); public: