Changing lens correction method triggers processing twice, fixes #4740

This commit is contained in:
heckflosse 2018-08-19 16:38:02 +02:00
parent ab79434beb
commit ce8ead804b
2 changed files with 79 additions and 75 deletions

View File

@ -139,10 +139,10 @@ LensProfilePanel::LensProfilePanel () :
lensfunCameras->signal_changed().connect(sigc::mem_fun(*this, &LensProfilePanel::onLensfunCameraChanged)); lensfunCameras->signal_changed().connect(sigc::mem_fun(*this, &LensProfilePanel::onLensfunCameraChanged));
lensfunLenses->signal_changed().connect(sigc::mem_fun(*this, &LensProfilePanel::onLensfunLensChanged)); lensfunLenses->signal_changed().connect(sigc::mem_fun(*this, &LensProfilePanel::onLensfunLensChanged));
corrOff->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged)); corrOff->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged), corrOff));
corrLensfunAuto->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged)); corrLensfunAuto->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged), corrLensfunAuto));
corrLensfunManual->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged)); corrLensfunManual->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged), corrLensfunManual));
corrLcpFile->signal_toggled().connect(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged)); corrLcpFile->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged), corrLcpFile));
corrUnchanged->hide(); corrUnchanged->hide();
@ -499,84 +499,88 @@ void LensProfilePanel::onLensfunLensChanged()
} }
void LensProfilePanel::onCorrModeChanged() void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton *rbChanged)
{ {
Glib::ustring mode; if (rbChanged->get_active()) {
// because the method gets called for the enabled AND the disabled RadioButton, we do the processing only for the enabled one
Glib::ustring mode;
if (corrOff->get_active()) { if (rbChanged == corrOff) {
useLensfunChanged = true; useLensfunChanged = true;
lensfunAutoChanged = true; lensfunAutoChanged = true;
lcpFileChanged = true; lcpFileChanged = true;
ckbUseDist->set_sensitive(false); ckbUseDist->set_sensitive(false);
ckbUseVign->set_sensitive(false); ckbUseVign->set_sensitive(false);
ckbUseCA->set_sensitive(false); ckbUseCA->set_sensitive(false);
mode = M("GENERAL_NONE"); mode = M("GENERAL_NONE");
} else if (corrLensfunAuto->get_active()) { } else if (rbChanged == corrLensfunAuto) {
useLensfunChanged = true; useLensfunChanged = true;
lensfunAutoChanged = true; lensfunAutoChanged = true;
lcpFileChanged = true; lcpFileChanged = true;
useDistChanged = true; useDistChanged = true;
useVignChanged = true; useVignChanged = true;
ckbUseDist->set_sensitive(true); ckbUseDist->set_sensitive(true);
ckbUseVign->set_sensitive(true); ckbUseVign->set_sensitive(true);
ckbUseCA->set_sensitive(false); ckbUseCA->set_sensitive(false);
if (metadata) { if (metadata) {
bool b = disableListener(); bool b = disableListener();
const LFDatabase *db = LFDatabase::getInstance(); const LFDatabase *db = LFDatabase::getInstance();
LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel()); LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel());
LFLens l = db->findLens(c, metadata->getLens()); LFLens l = db->findLens(c, metadata->getLens());
setLensfunCamera(c.getMake(), c.getModel()); setLensfunCamera(c.getMake(), c.getModel());
setLensfunLens(l.getLens()); setLensfunLens(l.getLens());
if (b) { if (b) {
enableListener(); enableListener();
}
} }
mode = M("LENSPROFILE_CORRECTION_AUTOMATCH");
} else if (rbChanged == corrLensfunManual) {
useLensfunChanged = true;
lensfunAutoChanged = true;
lcpFileChanged = true;
useDistChanged = true;
useVignChanged = true;
ckbUseDist->set_sensitive(true);
ckbUseVign->set_sensitive(true);
ckbUseCA->set_sensitive(false);
mode = M("LENSPROFILE_CORRECTION_MANUAL");
} else if (rbChanged == corrLcpFile) {
useLensfunChanged = true;
lensfunAutoChanged = true;
lcpFileChanged = true;
useDistChanged = true;
useVignChanged = true;
updateDisabled(true);
mode = M("LENSPROFILE_CORRECTION_LCPFILE");
} else if (rbChanged == corrUnchanged) {
useLensfunChanged = false;
lensfunAutoChanged = false;
lcpFileChanged = false;
lensfunCameraChanged = false;
lensfunLensChanged = false;
ckbUseDist->set_sensitive(true);
ckbUseVign->set_sensitive(true);
ckbUseCA->set_sensitive(true);
mode = M("GENERAL_UNCHANGED");
} }
mode = M("LENSPROFILE_CORRECTION_AUTOMATCH"); lcModeChanged = true;
} else if (corrLensfunManual->get_active()) { updateLensfunWarning();
useLensfunChanged = true;
lensfunAutoChanged = true;
lcpFileChanged = true;
useDistChanged = true;
useVignChanged = true;
ckbUseDist->set_sensitive(true); if (listener) {
ckbUseVign->set_sensitive(true); listener->panelChanged(EvLensCorrMode, mode);
ckbUseCA->set_sensitive(false); }
mode = M("LENSPROFILE_CORRECTION_MANUAL");
} else if (corrLcpFile->get_active()) {
useLensfunChanged = true;
lensfunAutoChanged = true;
lcpFileChanged = true;
useDistChanged = true;
useVignChanged = true;
updateDisabled(true);
mode = M("LENSPROFILE_CORRECTION_LCPFILE");
} else if (corrUnchanged->get_active()) {
useLensfunChanged = false;
lensfunAutoChanged = false;
lcpFileChanged = false;
lensfunCameraChanged = false;
lensfunLensChanged = false;
ckbUseDist->set_sensitive(true);
ckbUseVign->set_sensitive(true);
ckbUseCA->set_sensitive(true);
mode = M("GENERAL_UNCHANGED");
}
lcModeChanged = true;
updateLensfunWarning();
if (listener) {
listener->panelChanged(EvLensCorrMode, mode);
} }
} }

View File

@ -105,7 +105,7 @@ public:
void onLensfunCameraChanged(); void onLensfunCameraChanged();
void onLensfunLensChanged(); void onLensfunLensChanged();
void onCorrModeChanged(); void onCorrModeChanged(const Gtk::RadioButton *rbChanged);
}; };
#endif #endif