merge with dev
This commit is contained in:
@@ -239,10 +239,12 @@ void Adjuster::autoToggled ()
|
||||
// Disable the slider and spin button
|
||||
spin->set_sensitive(false);
|
||||
slider->set_sensitive(false);
|
||||
reset->set_sensitive(false);
|
||||
} else {
|
||||
// Enable the slider and spin button
|
||||
spin->set_sensitive(true);
|
||||
slider->set_sensitive(true);
|
||||
reset->set_sensitive(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -471,10 +473,12 @@ void Adjuster::setAutoValue (bool a)
|
||||
// Disable the slider and spin button
|
||||
spin->set_sensitive(false);
|
||||
slider->set_sensitive(false);
|
||||
reset->set_sensitive(false);
|
||||
} else {
|
||||
// Enable the slider and spin button
|
||||
spin->set_sensitive(true);
|
||||
slider->set_sensitive(true);
|
||||
reset->set_sensitive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,7 +322,7 @@ void BatchQueuePanel::addBatchQueueJobs(const std::vector<BatchQueueEntry*>& ent
|
||||
|
||||
bool BatchQueuePanel::canStartNext ()
|
||||
{
|
||||
|
||||
// GThreadLock lock;
|
||||
if (qStartStop->get_active()) {
|
||||
return true;
|
||||
} else {
|
||||
|
||||
@@ -385,9 +385,8 @@ void BatchToolPanelCoordinator::initSession ()
|
||||
}
|
||||
}
|
||||
|
||||
void BatchToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr)
|
||||
void BatchToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const Glib::ustring& descr)
|
||||
{
|
||||
|
||||
if (selected.empty()) {
|
||||
return;
|
||||
}
|
||||
@@ -613,9 +612,14 @@ void BatchToolPanelCoordinator::endBatchPParamsChange()
|
||||
* Using a Profile panel in the batch tool panel editor is actually
|
||||
* not supported by BatchToolPanelCoordinator::profileChange!
|
||||
*/
|
||||
void BatchToolPanelCoordinator::profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited)
|
||||
void BatchToolPanelCoordinator::profileChange(
|
||||
const PartialProfile* nparams,
|
||||
const rtengine::ProcEvent& event,
|
||||
const Glib::ustring& descr,
|
||||
const ParamsEdited* paramsEdited,
|
||||
bool fromLastSave
|
||||
)
|
||||
{
|
||||
|
||||
if (event == rtengine::EvProfileChanged) {
|
||||
// a profile has been selected in a hypothetical Profile panel
|
||||
// -> ACTUALLY NOT SUPPORTED
|
||||
|
||||
@@ -51,30 +51,36 @@ public:
|
||||
explicit BatchToolPanelCoordinator (FilePanel* parent);
|
||||
|
||||
// FileSelectionChangeListener interface
|
||||
void selectionChanged (const std::vector<Thumbnail*>& selected);
|
||||
void selectionChanged (const std::vector<Thumbnail*>& selected) override;
|
||||
|
||||
// toolpanellistener interface
|
||||
void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr);
|
||||
void panelChanged(const rtengine::ProcEvent& event, const Glib::ustring& descr) override;
|
||||
|
||||
// profilechangelistener interface
|
||||
void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited = nullptr);
|
||||
void profileChange(
|
||||
const rtengine::procparams::PartialProfile* nparams,
|
||||
const rtengine::ProcEvent& event,
|
||||
const Glib::ustring& descr,
|
||||
const ParamsEdited* paramsEdited = nullptr,
|
||||
bool fromLastSave = false
|
||||
) override;
|
||||
|
||||
// wbprovider interface
|
||||
void getAutoWB (double& temp, double& green, double equal, double tempBias);
|
||||
void getAutoWB (double& temp, double& green, double equal, double tempBias) override;
|
||||
void getCamWB (double& temp, double& green);
|
||||
|
||||
// thumbnaillistener interface
|
||||
void procParamsChanged (Thumbnail* thm, int whoChangedIt);
|
||||
void procParamsChanged (Thumbnail* thm, int whoChangedIt) override;
|
||||
|
||||
// batchpparamschangelistener interface
|
||||
void beginBatchPParamsChange(int numberOfEntries);
|
||||
void endBatchPParamsChange();
|
||||
void beginBatchPParamsChange(int numberOfEntries) override;
|
||||
void endBatchPParamsChange() override;
|
||||
|
||||
// imageareatoollistener interface
|
||||
void spotWBselected (int x, int y, Thumbnail* thm = nullptr);
|
||||
void cropSelectionReady ();
|
||||
void rotateSelectionReady (double rotate_deg, Thumbnail* thm = nullptr);
|
||||
CropGUIListener* startCropEditing (Thumbnail* thm = nullptr);
|
||||
void spotWBselected (int x, int y, Thumbnail* thm = nullptr) override;
|
||||
void cropSelectionReady () override;
|
||||
void rotateSelectionReady (double rotate_deg, Thumbnail* thm = nullptr) override;
|
||||
CropGUIListener* startCropEditing (Thumbnail* thm = nullptr) override;
|
||||
|
||||
void optionsChanged ();
|
||||
};
|
||||
|
||||
@@ -30,6 +30,7 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
|
||||
auto m = ProcEventMapper::getInstance();
|
||||
EvDemosaicBorder = m->newEvent(DEMOSAIC, "HISTORY_MSG_RAW_BORDER");
|
||||
EvDemosaicContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_CONTRAST");
|
||||
EvDemosaicAutoContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST");
|
||||
EvDemosaicPixelshiftDemosaicMethod = m->newEvent(DEMOSAIC, "HISTORY_MSG_PIXELSHIFT_DEMOSAIC");
|
||||
|
||||
Gtk::HBox* hb1 = Gtk::manage (new Gtk::HBox ());
|
||||
@@ -46,12 +47,12 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
|
||||
hb1->pack_end (*method, Gtk::PACK_EXPAND_WIDGET, 4);
|
||||
pack_start( *hb1, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
dualDemosaicOptions = Gtk::manage(new Gtk::VBox());
|
||||
|
||||
dualDemosaicOptions = Gtk::manage (new Gtk::VBox ());
|
||||
|
||||
dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20));
|
||||
dualDemosaicContrast->setAdjusterListener (this);
|
||||
|
||||
dualDemosaicContrast = Gtk::manage(new Adjuster(M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20));
|
||||
dualDemosaicContrast->setAdjusterListener(this);
|
||||
dualDemosaicContrast->addAutoButton(M("TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP"));
|
||||
dualDemosaicContrast->setAutoValue(true);
|
||||
if (dualDemosaicContrast->delay < options.adjusterMaxDelay) {
|
||||
dualDemosaicContrast->delay = options.adjusterMaxDelay;
|
||||
}
|
||||
@@ -250,6 +251,10 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
|
||||
|
||||
}
|
||||
|
||||
BayerProcess::~BayerProcess ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
}
|
||||
|
||||
void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
|
||||
{
|
||||
@@ -300,7 +305,9 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
|
||||
pixelShiftNonGreenCross->setValue (pp->raw.bayersensor.pixelShiftNonGreenCross);
|
||||
ccSteps->setValue (pp->raw.bayersensor.ccSteps);
|
||||
lmmseIterations->setValue (pp->raw.bayersensor.lmmse_iterations);
|
||||
dualDemosaicContrast->setAutoValue(pp->raw.bayersensor.dualDemosaicAutoContrast);
|
||||
dualDemosaicContrast->setValue (pp->raw.bayersensor.dualDemosaicContrast);
|
||||
|
||||
pixelShiftMotionMethod->set_active ((int)pp->raw.bayersensor.pixelShiftMotionCorrectionMethod);
|
||||
pixelShiftEperIso->setValue (pp->raw.bayersensor.pixelShiftEperIso);
|
||||
pixelShiftSigma->setValue (pp->raw.bayersensor.pixelShiftSigma);
|
||||
@@ -325,6 +332,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
|
||||
pixelShiftNonGreenCross->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenCross);
|
||||
lmmseIterations->setEditedState ( pedited->raw.bayersensor.lmmseIterations ? Edited : UnEdited);
|
||||
dualDemosaicContrast->setEditedState ( pedited->raw.bayersensor.dualDemosaicContrast ? Edited : UnEdited);
|
||||
dualDemosaicContrast->setAutoInconsistent (multiImage && !pedited->raw.bayersensor.dualDemosaicAutoContrast);
|
||||
pixelShiftEperIso->setEditedState ( pedited->raw.bayersensor.pixelShiftEperIso ? Edited : UnEdited);
|
||||
pixelShiftSigma->setEditedState ( pedited->raw.bayersensor.pixelShiftSigma ? Edited : UnEdited);
|
||||
|
||||
@@ -345,6 +353,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
|
||||
}
|
||||
|
||||
}
|
||||
lastAutoContrast = pp->raw.bayersensor.dualDemosaicAutoContrast;
|
||||
|
||||
if (!batchMode) {
|
||||
dcbOptions->set_visible(pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCB) || pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::DCBVNG4));
|
||||
@@ -385,6 +394,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe
|
||||
pp->raw.bayersensor.dcb_enhance = dcbEnhance->getLastActive ();
|
||||
pp->raw.bayersensor.border = border->getIntValue();
|
||||
pp->raw.bayersensor.lmmse_iterations = lmmseIterations->getIntValue();
|
||||
pp->raw.bayersensor.dualDemosaicAutoContrast = dualDemosaicContrast->getAutoValue();
|
||||
pp->raw.bayersensor.dualDemosaicContrast = dualDemosaicContrast->getValue();
|
||||
pp->raw.bayersensor.pixelShiftMotionCorrectionMethod = (RAWParams::BayerSensor::PSMotionCorrectionMethod)pixelShiftMotionMethod->get_active_row_number();
|
||||
pp->raw.bayersensor.pixelShiftEperIso = pixelShiftEperIso->getValue();
|
||||
@@ -425,6 +435,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe
|
||||
pedited->raw.bayersensor.dcbEnhance = !dcbEnhance->get_inconsistent();
|
||||
//pedited->raw.bayersensor.allEnhance = !allEnhance->get_inconsistent();
|
||||
pedited->raw.bayersensor.lmmseIterations = lmmseIterations->getEditedState ();
|
||||
pedited->raw.bayersensor.dualDemosaicAutoContrast = !dualDemosaicContrast->getAutoInconsistent ();
|
||||
pedited->raw.bayersensor.dualDemosaicContrast = dualDemosaicContrast->getEditedState ();
|
||||
pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod = pixelShiftMotionMethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||
pedited->raw.bayersensor.pixelShiftDemosaicMethod = pixelShiftDemosaicMethod->get_active_text() != M("GENERAL_UNCHANGED");
|
||||
@@ -539,10 +550,6 @@ void BayerProcess::adjusterChanged (Adjuster* a, double newval)
|
||||
}
|
||||
}
|
||||
|
||||
void BayerProcess::adjusterAutoToggled(Adjuster* a, bool newval)
|
||||
{
|
||||
}
|
||||
|
||||
void BayerProcess::methodChanged ()
|
||||
{
|
||||
const int currentSelection = method->get_active_row_number();
|
||||
@@ -660,6 +667,33 @@ void BayerProcess::checkBoxToggled (CheckBox* c, CheckValue newval)
|
||||
}
|
||||
}
|
||||
|
||||
void BayerProcess::adjusterAutoToggled(Adjuster* a, bool newval)
|
||||
{
|
||||
if (multiImage) {
|
||||
if (dualDemosaicContrast->getAutoInconsistent()) {
|
||||
dualDemosaicContrast->setAutoInconsistent (false);
|
||||
dualDemosaicContrast->setAutoValue (false);
|
||||
} else if (lastAutoContrast) {
|
||||
dualDemosaicContrast->setAutoInconsistent (true);
|
||||
}
|
||||
|
||||
lastAutoContrast = dualDemosaicContrast->getAutoValue();
|
||||
}
|
||||
|
||||
if (listener) {
|
||||
|
||||
if (a == dualDemosaicContrast) {
|
||||
if (dualDemosaicContrast->getAutoInconsistent()) {
|
||||
listener->panelChanged (EvDemosaicAutoContrast, M ("GENERAL_UNCHANGED"));
|
||||
} else if (dualDemosaicContrast->getAutoValue()) {
|
||||
listener->panelChanged (EvDemosaicAutoContrast, M ("GENERAL_ENABLED"));
|
||||
} else {
|
||||
listener->panelChanged (EvDemosaicAutoContrast, M ("GENERAL_DISABLED"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BayerProcess::pixelShiftMotionMethodChanged ()
|
||||
{
|
||||
if (!batchMode) {
|
||||
@@ -715,23 +749,23 @@ void BayerProcess::FrameCountChanged(int n, int frameNum)
|
||||
};
|
||||
|
||||
idle_register.add(func, new Data { this, n, frameNum });
|
||||
|
||||
// GThreadLock lock;
|
||||
// imageNumber->block (true);
|
||||
|
||||
// imageNumber->remove_all();
|
||||
// imageNumber->append("1");
|
||||
// for(int i = 2; i <= std::min(n, 4); ++i) {
|
||||
// std::ostringstream entry;
|
||||
// entry << i;
|
||||
// imageNumber->append(entry.str());
|
||||
// }
|
||||
// imageNumber->set_active(std::min(frameNum, n - 1));
|
||||
// if(n == 1) {
|
||||
// imageNumberBox->hide();
|
||||
// } else {
|
||||
// imageNumberBox->show();
|
||||
// }
|
||||
// imageNumber->block (false);
|
||||
}
|
||||
|
||||
void BayerProcess::autoContrastChanged (double autoContrast)
|
||||
{
|
||||
struct Data {
|
||||
BayerProcess *me;
|
||||
double autoContrast;
|
||||
};
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
Data *d = static_cast<Data *>(data);
|
||||
BayerProcess *me = d->me;
|
||||
me->disableListener();
|
||||
me->dualDemosaicContrast->setValue(d->autoContrast);
|
||||
me->enableListener();
|
||||
delete d;
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, new Data { this, autoContrast });
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include "guiutils.h"
|
||||
#include "toolpanel.h"
|
||||
|
||||
class BayerProcess : public ToolParamBlock, public AdjusterListener, public CheckBoxListener, public FoldableToolPanel, public rtengine::FrameCountListener
|
||||
class BayerProcess : public ToolParamBlock, public AdjusterListener, public CheckBoxListener, public FoldableToolPanel, public rtengine::FrameCountListener, public rtengine::AutoContrastListener
|
||||
{
|
||||
|
||||
protected:
|
||||
@@ -60,15 +60,17 @@ protected:
|
||||
Gtk::VBox *dualDemosaicOptions;
|
||||
Adjuster* dualDemosaicContrast;
|
||||
int oldMethod;
|
||||
|
||||
bool lastAutoContrast;
|
||||
IdleRegister idle_register;
|
||||
|
||||
rtengine::ProcEvent EvDemosaicBorder;
|
||||
rtengine::ProcEvent EvDemosaicAutoContrast;
|
||||
rtengine::ProcEvent EvDemosaicContrast;
|
||||
rtengine::ProcEvent EvDemosaicPixelshiftDemosaicMethod;
|
||||
public:
|
||||
|
||||
BayerProcess ();
|
||||
~BayerProcess ();
|
||||
|
||||
void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
@@ -84,6 +86,7 @@ public:
|
||||
void checkBoxToggled(CheckBox* c, CheckValue newval);
|
||||
void pixelShiftMotionMethodChanged();
|
||||
void pixelShiftDemosaicMethodChanged();
|
||||
void autoContrastChanged (double autoContrast);
|
||||
void FrameCountChanged(int n, int frameNum);
|
||||
};
|
||||
|
||||
|
||||
@@ -104,6 +104,11 @@ FlatField::FlatField () : FoldableToolPanel(this, "flatfield", M("TP_FLATFIELD_L
|
||||
}
|
||||
}
|
||||
|
||||
FlatField::~FlatField ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
}
|
||||
|
||||
void FlatField::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
|
||||
{
|
||||
disableListener ();
|
||||
@@ -403,3 +408,22 @@ void FlatField::setShortcutPath(const Glib::ustring& path)
|
||||
|
||||
} catch (Glib::Error&) {}
|
||||
}
|
||||
|
||||
void FlatField::flatFieldAutoClipValueChanged(int n)
|
||||
{
|
||||
struct Data {
|
||||
FlatField *me;
|
||||
int n;
|
||||
};
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
Data *d = static_cast<Data *>(data);
|
||||
FlatField *me = d->me;
|
||||
me->disableListener();
|
||||
me->flatFieldClipControl->setValue (d->n);
|
||||
me->enableListener();
|
||||
delete d;
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, new Data { this, n });
|
||||
}
|
||||
@@ -35,7 +35,7 @@ public:
|
||||
// add other info here
|
||||
};
|
||||
|
||||
class FlatField : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
|
||||
class FlatField : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::FlatFieldAutoClipListener
|
||||
{
|
||||
|
||||
protected:
|
||||
@@ -58,9 +58,11 @@ protected:
|
||||
bool b_filter_asCurrent;
|
||||
bool israw;
|
||||
|
||||
IdleRegister idle_register;
|
||||
public:
|
||||
|
||||
FlatField ();
|
||||
~FlatField ();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
@@ -80,6 +82,7 @@ public:
|
||||
{
|
||||
ffp = p;
|
||||
};
|
||||
void flatFieldAutoClipValueChanged(int n = 0);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -521,6 +521,7 @@ void ParamsEdited::set(bool v)
|
||||
raw.bayersensor.dcbEnhance = v;
|
||||
//raw.bayersensor.allEnhance = v;
|
||||
raw.bayersensor.lmmseIterations = v;
|
||||
raw.bayersensor.dualDemosaicAutoContrast = v;
|
||||
raw.bayersensor.dualDemosaicContrast = v;
|
||||
raw.bayersensor.pixelShiftMotionCorrectionMethod = v;
|
||||
raw.bayersensor.pixelShiftEperIso = v;
|
||||
@@ -541,6 +542,7 @@ void ParamsEdited::set(bool v)
|
||||
raw.bayersensor.linenoiseDirection = v;
|
||||
raw.bayersensor.pdafLinesFilter = v;
|
||||
raw.xtranssensor.method = v;
|
||||
raw.xtranssensor.dualDemosaicAutoContrast = v;
|
||||
raw.xtranssensor.dualDemosaicContrast = v;
|
||||
raw.xtranssensor.ccSteps = v;
|
||||
raw.xtranssensor.exBlackRed = v;
|
||||
@@ -1194,6 +1196,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
raw.bayersensor.dcbEnhance = raw.bayersensor.dcbEnhance && p.raw.bayersensor.dcb_enhance == other.raw.bayersensor.dcb_enhance;
|
||||
//raw.bayersensor.allEnhance = raw.bayersensor.allEnhance && p.raw.bayersensor.all_enhance == other.raw.bayersensor.all_enhance;
|
||||
raw.bayersensor.lmmseIterations = raw.bayersensor.lmmseIterations && p.raw.bayersensor.lmmse_iterations == other.raw.bayersensor.lmmse_iterations;
|
||||
raw.bayersensor.dualDemosaicAutoContrast = raw.bayersensor.dualDemosaicAutoContrast && p.raw.bayersensor.dualDemosaicAutoContrast == other.raw.bayersensor.dualDemosaicAutoContrast;
|
||||
raw.bayersensor.dualDemosaicContrast = raw.bayersensor.dualDemosaicContrast && p.raw.bayersensor.dualDemosaicContrast == other.raw.bayersensor.dualDemosaicContrast;
|
||||
raw.bayersensor.pixelShiftMotionCorrectionMethod = raw.bayersensor.pixelShiftMotionCorrectionMethod && p.raw.bayersensor.pixelShiftMotionCorrectionMethod == other.raw.bayersensor.pixelShiftMotionCorrectionMethod;
|
||||
raw.bayersensor.pixelShiftEperIso = raw.bayersensor.pixelShiftEperIso && p.raw.bayersensor.pixelShiftEperIso == other.raw.bayersensor.pixelShiftEperIso;
|
||||
@@ -1214,6 +1217,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
|
||||
raw.bayersensor.linenoiseDirection = raw.bayersensor.linenoiseDirection && p.raw.bayersensor.linenoiseDirection == other.raw.bayersensor.linenoiseDirection;
|
||||
raw.bayersensor.pdafLinesFilter = raw.bayersensor.pdafLinesFilter && p.raw.bayersensor.pdafLinesFilter == other.raw.bayersensor.pdafLinesFilter;
|
||||
raw.xtranssensor.method = raw.xtranssensor.method && p.raw.xtranssensor.method == other.raw.xtranssensor.method;
|
||||
raw.xtranssensor.dualDemosaicAutoContrast = raw.xtranssensor.dualDemosaicAutoContrast && p.raw.xtranssensor.dualDemosaicAutoContrast == other.raw.xtranssensor.dualDemosaicAutoContrast;
|
||||
raw.xtranssensor.dualDemosaicContrast = raw.xtranssensor.dualDemosaicContrast && p.raw.xtranssensor.dualDemosaicContrast == other.raw.xtranssensor.dualDemosaicContrast;
|
||||
raw.xtranssensor.ccSteps = raw.xtranssensor.ccSteps && p.raw.xtranssensor.ccSteps == other.raw.xtranssensor.ccSteps;
|
||||
raw.xtranssensor.exBlackRed = raw.xtranssensor.exBlackRed && p.raw.xtranssensor.blackred == other.raw.xtranssensor.blackred;
|
||||
@@ -3169,6 +3173,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.raw.bayersensor.lmmse_iterations = mods.raw.bayersensor.lmmse_iterations;
|
||||
}
|
||||
|
||||
if (raw.bayersensor.dualDemosaicAutoContrast) {
|
||||
toEdit.raw.bayersensor.dualDemosaicAutoContrast = mods.raw.bayersensor.dualDemosaicAutoContrast;
|
||||
}
|
||||
|
||||
if (raw.bayersensor.dualDemosaicContrast) {
|
||||
toEdit.raw.bayersensor.dualDemosaicContrast = mods.raw.bayersensor.dualDemosaicContrast;
|
||||
}
|
||||
@@ -3249,6 +3257,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
toEdit.raw.xtranssensor.method = mods.raw.xtranssensor.method;
|
||||
}
|
||||
|
||||
if (raw.xtranssensor.dualDemosaicAutoContrast) {
|
||||
toEdit.raw.xtranssensor.dualDemosaicAutoContrast = mods.raw.xtranssensor.dualDemosaicAutoContrast;
|
||||
}
|
||||
|
||||
if (raw.xtranssensor.dualDemosaicContrast) {
|
||||
toEdit.raw.xtranssensor.dualDemosaicContrast = mods.raw.xtranssensor.dualDemosaicContrast;
|
||||
}
|
||||
@@ -3769,7 +3781,7 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
|
||||
|
||||
bool RAWParamsEdited::BayerSensor::isUnchanged() const
|
||||
{
|
||||
return method && border && imageNum && dcbIterations && dcbEnhance && lmmseIterations && dualDemosaicContrast /*&& allEnhance*/ && greenEq
|
||||
return method && border && imageNum && dcbIterations && dcbEnhance && lmmseIterations && dualDemosaicAutoContrast && dualDemosaicContrast /*&& allEnhance*/ && greenEq
|
||||
&& pixelShiftMotionCorrectionMethod && pixelShiftEperIso && pixelShiftSigma && pixelShiftShowMotion && pixelShiftShowMotionMaskOnly
|
||||
&& pixelShiftHoleFill && pixelShiftMedian && pixelShiftNonGreenCross && pixelShiftDemosaicMethod && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftEqualBright && pixelShiftEqualBrightChannel
|
||||
&& linenoise && linenoiseDirection && pdafLinesFilter && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen;
|
||||
@@ -3777,7 +3789,7 @@ bool RAWParamsEdited::BayerSensor::isUnchanged() const
|
||||
|
||||
bool RAWParamsEdited::XTransSensor::isUnchanged() const
|
||||
{
|
||||
return method && exBlackRed && exBlackGreen && exBlackBlue;
|
||||
return method && exBlackRed && exBlackGreen && exBlackBlue && dualDemosaicAutoContrast && dualDemosaicContrast;
|
||||
}
|
||||
|
||||
bool RAWParamsEdited::isUnchanged() const
|
||||
|
||||
@@ -857,6 +857,7 @@ public:
|
||||
bool dcbIterations;
|
||||
bool dcbEnhance;
|
||||
bool lmmseIterations;
|
||||
bool dualDemosaicAutoContrast;
|
||||
bool dualDemosaicContrast;
|
||||
bool pixelShiftMotionCorrectionMethod;
|
||||
bool pixelShiftEperIso;
|
||||
@@ -887,6 +888,7 @@ public:
|
||||
|
||||
public:
|
||||
bool method;
|
||||
bool dualDemosaicAutoContrast;
|
||||
bool dualDemosaicContrast;
|
||||
bool ccSteps;
|
||||
bool exBlackRed;
|
||||
|
||||
@@ -828,8 +828,10 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
|
||||
|
||||
if (!raw_method->get_active ()) {
|
||||
filterPE.raw.bayersensor.method = falsePE.raw.bayersensor.method;
|
||||
filterPE.raw.bayersensor.dualDemosaicAutoContrast = falsePE.raw.bayersensor.dualDemosaicAutoContrast;
|
||||
filterPE.raw.bayersensor.dualDemosaicContrast = falsePE.raw.bayersensor.dualDemosaicContrast;
|
||||
filterPE.raw.xtranssensor.method = falsePE.raw.xtranssensor.method;
|
||||
filterPE.raw.xtranssensor.dualDemosaicAutoContrast = falsePE.raw.xtranssensor.dualDemosaicAutoContrast;
|
||||
filterPE.raw.xtranssensor.dualDemosaicContrast = falsePE.raw.xtranssensor.dualDemosaicContrast;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
// This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes
|
||||
#define PPVERSION 345
|
||||
#define PPVERSION 346
|
||||
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
|
||||
|
||||
/*
|
||||
Log of version changes
|
||||
345 2018-09-25
|
||||
Added Locallab tool parameters
|
||||
346 2018-09-25
|
||||
Added Locallab tool parameters
|
||||
345 2018-10-21
|
||||
dual demosaic auto contrast threshold
|
||||
344 2018-10-04
|
||||
added Lab/RGB color space selection for shadows/highlights
|
||||
343 2018-09-06
|
||||
|
||||
@@ -598,6 +598,9 @@ void ToolPanelCoordinator::initImage(rtengine::StagedImageProcessor* ipc_, bool
|
||||
ipc->setAutoCamListener(colorappearance);
|
||||
ipc->setAutoBWListener(blackwhite);
|
||||
ipc->setFrameCountListener(bayerprocess);
|
||||
ipc->setFlatFieldAutoClipListener (flatfield);
|
||||
ipc->setBayerAutoContrastListener (bayerprocess);
|
||||
ipc->setXtransAutoContrastListener (xtransprocess);
|
||||
ipc->setAutoWBListener(whitebalance);
|
||||
ipc->setAutoColorTonListener(colortoning);
|
||||
ipc->setAutoChromaListener(dirpyrdenoise);
|
||||
|
||||
@@ -237,6 +237,7 @@ public:
|
||||
|
||||
void imageTypeChanged(bool isRaw, bool isBayer, bool isXtrans, bool isMono = false);
|
||||
|
||||
// void autoContrastChanged (double autoContrast);
|
||||
// profilechangelistener interface
|
||||
void profileChange(
|
||||
const rtengine::procparams::PartialProfile* nparams,
|
||||
|
||||
@@ -28,6 +28,7 @@ XTransProcess::XTransProcess () : FoldableToolPanel(this, "xtransprocess", M("TP
|
||||
{
|
||||
auto m = ProcEventMapper::getInstance();
|
||||
EvDemosaicContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_CONTRAST");
|
||||
EvDemosaicAutoContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST");
|
||||
|
||||
Gtk::HBox* hb1 = Gtk::manage (new Gtk::HBox ());
|
||||
hb1->pack_start (*Gtk::manage (new Gtk::Label ( M("TP_RAW_DMETHOD") + ": ")), Gtk::PACK_SHRINK, 4);
|
||||
@@ -71,6 +72,8 @@ XTransProcess::XTransProcess () : FoldableToolPanel(this, "xtransprocess", M("TP
|
||||
|
||||
dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20));
|
||||
dualDemosaicContrast->setAdjusterListener (this);
|
||||
dualDemosaicContrast->addAutoButton(M("TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP"));
|
||||
dualDemosaicContrast->setAutoValue(true);
|
||||
|
||||
if (dualDemosaicContrast->delay < options.adjusterMaxDelay) {
|
||||
dualDemosaicContrast->delay = options.adjusterMaxDelay;
|
||||
@@ -94,6 +97,9 @@ XTransProcess::XTransProcess () : FoldableToolPanel(this, "xtransprocess", M("TP
|
||||
methodconn = method->signal_changed().connect( sigc::mem_fun(*this, &XTransProcess::methodChanged) );
|
||||
}
|
||||
|
||||
XTransProcess::~XTransProcess () {
|
||||
idle_register.destroy();
|
||||
}
|
||||
|
||||
void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
|
||||
{
|
||||
@@ -108,6 +114,7 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param
|
||||
}
|
||||
|
||||
if(pedited ) {
|
||||
dualDemosaicContrast->setAutoInconsistent (multiImage && !pedited->raw.xtranssensor.dualDemosaicAutoContrast);
|
||||
dualDemosaicContrast->setEditedState ( pedited->raw.xtranssensor.dualDemosaicContrast ? Edited : UnEdited);
|
||||
ccSteps->setEditedState (pedited->raw.xtranssensor.ccSteps ? Edited : UnEdited);
|
||||
|
||||
@@ -115,8 +122,12 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param
|
||||
method->set_active_text(M("GENERAL_UNCHANGED"));
|
||||
}
|
||||
}
|
||||
dualDemosaicContrast->setAutoValue(pp->raw.xtranssensor.dualDemosaicAutoContrast);
|
||||
dualDemosaicContrast->setValue (pp->raw.xtranssensor.dualDemosaicContrast);
|
||||
ccSteps->setValue (pp->raw.xtranssensor.ccSteps);
|
||||
|
||||
lastAutoContrast = pp->raw.bayersensor.dualDemosaicAutoContrast;
|
||||
|
||||
if (!batchMode) {
|
||||
dualDemosaicOptions->set_visible(pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::FOUR_PASS)
|
||||
|| pp->raw.xtranssensor.method == procparams::RAWParams::XTransSensor::getMethodString(procparams::RAWParams::XTransSensor::Method::TWO_PASS));
|
||||
@@ -129,6 +140,7 @@ void XTransProcess::read(const rtengine::procparams::ProcParams* pp, const Param
|
||||
|
||||
void XTransProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
|
||||
{
|
||||
pp->raw.xtranssensor.dualDemosaicAutoContrast = dualDemosaicContrast->getAutoValue();
|
||||
pp->raw.xtranssensor.dualDemosaicContrast = dualDemosaicContrast->getValue();
|
||||
pp->raw.xtranssensor.ccSteps = ccSteps->getIntValue();
|
||||
|
||||
@@ -140,6 +152,7 @@ void XTransProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* p
|
||||
|
||||
if (pedited) {
|
||||
pedited->raw.xtranssensor.method = method->get_active_text() != M("GENERAL_UNCHANGED");
|
||||
pedited->raw.xtranssensor.dualDemosaicAutoContrast = !dualDemosaicContrast->getAutoInconsistent ();
|
||||
pedited->raw.xtranssensor.dualDemosaicContrast = dualDemosaicContrast->getEditedState ();
|
||||
pedited->raw.xtranssensor.ccSteps = ccSteps->getEditedState ();
|
||||
}
|
||||
@@ -187,6 +200,29 @@ void XTransProcess::adjusterChanged(Adjuster* a, double newval)
|
||||
|
||||
void XTransProcess::adjusterAutoToggled(Adjuster* a, bool newval)
|
||||
{
|
||||
if (multiImage) {
|
||||
if (dualDemosaicContrast->getAutoInconsistent()) {
|
||||
dualDemosaicContrast->setAutoInconsistent (false);
|
||||
dualDemosaicContrast->setAutoValue (false);
|
||||
} else if (lastAutoContrast) {
|
||||
dualDemosaicContrast->setAutoInconsistent (true);
|
||||
}
|
||||
|
||||
lastAutoContrast = dualDemosaicContrast->getAutoValue();
|
||||
}
|
||||
|
||||
if (listener) {
|
||||
|
||||
if (a == dualDemosaicContrast) {
|
||||
if (dualDemosaicContrast->getAutoInconsistent()) {
|
||||
listener->panelChanged (EvDemosaicAutoContrast, M ("GENERAL_UNCHANGED"));
|
||||
} else if (dualDemosaicContrast->getAutoValue()) {
|
||||
listener->panelChanged (EvDemosaicAutoContrast, M ("GENERAL_ENABLED"));
|
||||
} else {
|
||||
listener->panelChanged (EvDemosaicAutoContrast, M ("GENERAL_DISABLED"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void XTransProcess::methodChanged ()
|
||||
@@ -211,3 +247,26 @@ void XTransProcess::methodChanged ()
|
||||
: EvDemosaicMethod, method->get_active_text());
|
||||
}
|
||||
}
|
||||
|
||||
void XTransProcess::checkBoxToggled (CheckBox* c, CheckValue newval)
|
||||
{
|
||||
}
|
||||
|
||||
void XTransProcess::autoContrastChanged (double autoContrast)
|
||||
{
|
||||
struct Data {
|
||||
XTransProcess *me;
|
||||
double autoContrast;
|
||||
};
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
Data *d = static_cast<Data *>(data);
|
||||
XTransProcess *me = d->me;
|
||||
me->disableListener();
|
||||
me->dualDemosaicContrast->setValue(d->autoContrast);
|
||||
me->enableListener();
|
||||
delete d;
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, new Data { this, autoContrast });
|
||||
}
|
||||
|
||||
@@ -21,11 +21,12 @@
|
||||
|
||||
#include <gtkmm.h>
|
||||
#include "adjuster.h"
|
||||
#include "checkbox.h"
|
||||
#include "guiutils.h"
|
||||
#include "toolpanel.h"
|
||||
|
||||
|
||||
class XTransProcess : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
|
||||
class XTransProcess : public ToolParamBlock, public AdjusterListener, public CheckBoxListener, public FoldableToolPanel, public rtengine::AutoContrastListener
|
||||
{
|
||||
|
||||
protected:
|
||||
@@ -34,14 +35,18 @@ protected:
|
||||
Adjuster* ccSteps;
|
||||
Gtk::VBox *dualDemosaicOptions;
|
||||
Adjuster* dualDemosaicContrast;
|
||||
bool lastAutoContrast;
|
||||
|
||||
int oldSelection;
|
||||
sigc::connection methodconn;
|
||||
IdleRegister idle_register;
|
||||
rtengine::ProcEvent EvDemosaicAutoContrast;
|
||||
rtengine::ProcEvent EvDemosaicContrast;
|
||||
|
||||
public:
|
||||
|
||||
XTransProcess ();
|
||||
~XTransProcess ();
|
||||
|
||||
void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
@@ -50,7 +55,9 @@ public:
|
||||
void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
|
||||
void methodChanged();
|
||||
void autoContrastChanged (double autoContrast);
|
||||
void adjusterChanged(Adjuster* a, double newval);
|
||||
void checkBoxToggled(CheckBox* c, CheckValue newval);
|
||||
void adjusterAutoToggled(Adjuster* a, bool newval);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user