Improve batch mode with Locallab

Batch mode is now correctly managed by Locallab. It works only if the
pictures have the same control spot number with coherent id

Other improvements:
- If there is no control spot, all Locallab tools are now disabled
This commit is contained in:
Pandagrapher
2018-12-26 10:31:57 +01:00
parent 23b0836603
commit 39c53119eb
16 changed files with 2190 additions and 1394 deletions

View File

@@ -57,6 +57,9 @@ ControlSpotPanel::ControlSpotPanel():
lastObject_(-1),
lastCoord_(new Coord()),
nbSpotChanged_(false),
selSpotChanged_(false),
nameChanged_(false),
eventType(0)
{
@@ -221,15 +224,6 @@ ControlSpotPanel::ControlSpotPanel():
artifFrame->add(*artifBox);
pack_start(*artifFrame);
// Set param widgets sensitive if there is at least one control spot
auto s = treeview_.get_selection();
if (!s->count_selected_rows()) {
setParamEditable(false);
} else {
setParamEditable(true);
}
show_all();
}
@@ -279,6 +273,8 @@ void ControlSpotPanel::on_button_add()
}
// Raise event
nbSpotChanged_ = true;
selSpotChanged_ = true;
eventType = 1; // 1 = Spot creation event
const int newId = getNewId();
listener->panelChanged(EvLocallabSpotCreated, "ID#" + std::to_string(newId));
@@ -293,6 +289,8 @@ void ControlSpotPanel::on_button_delete()
}
// Raise event
nbSpotChanged_ = true;
selSpotChanged_ = true;
eventType = 2; // 2 = Spot deletion event
const int delId = getSelectedSpot();
listener->panelChanged(EvLocallabSpotDeleted, "ID#" + std::to_string(delId));
@@ -324,6 +322,7 @@ void ControlSpotPanel::on_button_rename()
// Update actual name and raise event
if (status == 1) {
nameChanged_ = true;
const auto newname = d.get_new_name();
row[spots_.name] = newname;
treeview_.columns_autosize();
@@ -372,6 +371,7 @@ void ControlSpotPanel::controlspotChanged()
}
// Raise event
selSpotChanged_ = true;
eventType = 3; // 3 = Spot selection event
const int selId = getSelectedSpot();
listener->panelChanged(EvLocallabSpotSelected, "ID#" + std::to_string(selId));
@@ -693,7 +693,8 @@ void ControlSpotPanel::disableParamlistener(bool cond)
void ControlSpotPanel::setParamEditable(bool cond)
{
printf("setParamEditable: %d\n", cond);
// printf("setParamEditable: %d\n", cond);
shape_->set_sensitive(cond);
spotMethod_->set_sensitive(cond);
sensiexclu_->set_sensitive(cond);
@@ -1449,7 +1450,6 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
row[spots_.transit] = newSpot->transit;
row[spots_.thresh] = newSpot->thresh;
row[spots_.iter] = newSpot->iter;
setParamEditable(true);
updateParamVisibility();
disableParamlistener(false);
@@ -1520,13 +1520,6 @@ void ControlSpotPanel::deleteControlSpot(int id)
}
}
// Set param widgets unsensitive if there is no more control spot
auto s = treeview_.get_selection();
if (!s->count_selected_rows()) {
setParamEditable(false);
}
disableParamlistener(false);
}
@@ -1536,10 +1529,27 @@ ControlSpotPanel::SpotEdited* ControlSpotPanel::getEditedStates()
SpotEdited* se = new SpotEdited();
se->treeview = treeview_.is_sensitive();
se->addbutton = button_add_.is_sensitive();
se->deletebutton = button_delete_.is_sensitive();
se->name = button_rename_.is_sensitive();
if (nbSpotChanged_) {
se->nbspot = true;
// nbSpotChanged_ = false;
} else {
se->nbspot = false;
}
if (selSpotChanged_) {
se->selspot = true;
// selSpotChanged_ = false;
} else {
se->selspot = false;
}
if (nameChanged_) {
se->name = true;
// nameChanged_ = false;
} else {
se->name = false;
}
se->isvisible = false; // TODO isvisible
se->shape = shape_->get_active_row_number() != 2;
se->spotMethod = spotMethod_->get_active_row_number() != 2;
@@ -1565,14 +1575,26 @@ void ControlSpotPanel::setEditedStates(SpotEdited* se)
{
printf("setEditedStates\n");
// Reset treeview edited states
nbSpotChanged_ = false;
selSpotChanged_ = false;
nameChanged_ = false;
// Disable params listeners
disableParamlistener(true);
// Set widgets edited states
treeview_.set_sensitive(se->treeview);
button_add_.set_sensitive(se->addbutton);
button_delete_.set_sensitive(se->deletebutton);
button_rename_.set_sensitive(se->name);
if (!se->nbspot || !se->selspot) {
treeview_.set_sensitive(false);
button_add_.set_sensitive(false);
button_delete_.set_sensitive(false);
button_rename_.set_sensitive(false);
} else {
treeview_.set_sensitive(true);
button_add_.set_sensitive(true);
button_delete_.set_sensitive(true);
button_rename_.set_sensitive(se->name);
}
// TODO Add isvisible
if (!se->shape) {
@@ -1610,30 +1632,45 @@ void ControlSpotPanel::setEditedStates(SpotEdited* se)
disableParamlistener(false);
}
void ControlSpotPanel::setDefaults(const ProcParams * defParams, const ParamsEdited * pedited)
void ControlSpotPanel::setDefaults(const ProcParams * defParams, const ParamsEdited * pedited, int id)
{
// Set default values for adjusters
if (defParams->locallab.selspot < (int)defParams->locallab.spots.size()) {
updateDefaultsValues(defParams, defParams->locallab.spots.at(defParams->locallab.selspot).id);
} else {
updateDefaultsValues(defParams);
// Find vector index of given spot id (index = -1 if not found)
int index = -1;
for (int i = 0; i < (int)defParams->locallab.spots.size(); i++) {
printf("Test\n");
if (defParams->locallab.spots.at(i).id == id) {
index = i;
break;
}
}
printf("index: %d\n", index);
// Set default values for adjusters
const LocallabParams::LocallabSpot* defSpot = new LocallabParams::LocallabSpot();
if (index != -1 && index < (int)defParams->locallab.spots.size()) {
defSpot = &defParams->locallab.spots.at(index);
}
sensiexclu_->setDefault((double)defSpot->sensiexclu);
struc_->setDefault((double)defSpot->struc);
locX_->setDefault((double)defSpot->locX);
locXL_->setDefault((double)defSpot->locXL);
locY_->setDefault((double)defSpot->locY);
locYT_->setDefault((double)defSpot->locYT);
centerX_->setDefault((double)defSpot->centerX);
centerY_->setDefault((double)defSpot->centerY);
circrad_->setDefault((double)defSpot->circrad);
transit_->setDefault((double)defSpot->transit);
thresh_->setDefault((double)defSpot->thresh);
iter_->setDefault((double)defSpot->iter);
// Set default edited states for adjusters
if (pedited) {
sensiexclu_->setDefaultEditedState(pedited->locallab.sensiexclu ? Edited : UnEdited);
struc_->setDefaultEditedState(pedited->locallab.struc ? Edited : UnEdited);
locX_->setDefaultEditedState(pedited->locallab.locX ? Edited : UnEdited);
locXL_->setDefaultEditedState(pedited->locallab.locXL ? Edited : UnEdited);
locY_->setDefaultEditedState(pedited->locallab.locY ? Edited : UnEdited);
locYT_->setDefaultEditedState(pedited->locallab.locYT ? Edited : UnEdited);
centerX_->setDefaultEditedState(pedited->locallab.centerX ? Edited : UnEdited);
centerY_->setDefaultEditedState(pedited->locallab.centerY ? Edited : UnEdited);
circrad_->setDefaultEditedState(pedited->locallab.circrad ? Edited : UnEdited);
transit_->setDefaultEditedState(pedited->locallab.transit ? Edited : UnEdited);
thresh_->setDefaultEditedState(pedited->locallab.thresh ? Edited : UnEdited);
iter_->setDefaultEditedState(pedited->locallab.iter ? Edited : UnEdited);
} else {
if (!pedited) {
sensiexclu_->setDefaultEditedState(Irrelevant);
struc_->setDefaultEditedState(Irrelevant);
locX_->setDefaultEditedState(Irrelevant);
@@ -1646,9 +1683,29 @@ void ControlSpotPanel::setDefaults(const ProcParams * defParams, const ParamsEdi
transit_->setDefaultEditedState(Irrelevant);
thresh_->setDefaultEditedState(Irrelevant);
iter_->setDefaultEditedState(Irrelevant);
} else {
const LocallabParamsEdited::LocallabSpotEdited* defSpotState = new LocallabParamsEdited::LocallabSpotEdited(true);
if (index != 1 && index < (int)pedited->locallab.spots.size()) {
defSpotState = &pedited->locallab.spots.at(index);
}
sensiexclu_->setDefaultEditedState(defSpotState->sensiexclu ? Edited : UnEdited);
struc_->setDefaultEditedState(defSpotState->struc ? Edited : UnEdited);
locX_->setDefaultEditedState(defSpotState->locX ? Edited : UnEdited);
locXL_->setDefaultEditedState(defSpotState->locXL ? Edited : UnEdited);
locY_->setDefaultEditedState(defSpotState->locY ? Edited : UnEdited);
locYT_->setDefaultEditedState(defSpotState->locYT ? Edited : UnEdited);
centerX_->setDefaultEditedState(defSpotState->centerX ? Edited : UnEdited);
centerY_->setDefaultEditedState(defSpotState->centerY ? Edited : UnEdited);
circrad_->setDefaultEditedState(defSpotState->circrad ? Edited : UnEdited);
transit_->setDefaultEditedState(defSpotState->transit ? Edited : UnEdited);
thresh_->setDefaultEditedState(defSpotState->thresh ? Edited : UnEdited);
iter_->setDefaultEditedState(defSpotState->iter ? Edited : UnEdited);
}
}
/*
void ControlSpotPanel::updateDefaultsValues(const rtengine::procparams::ProcParams* defParams, int id)
{
const LocallabParams::LocallabSpot* defSpot = new LocallabParams::LocallabSpot();
@@ -1676,6 +1733,30 @@ void ControlSpotPanel::updateDefaultsValues(const rtengine::procparams::ProcPara
iter_->setDefault((double)defSpot->iter);
}
void ControlSpotPanel::updateDefaultsStates(const ParamsEdited* pedited, int id = 0)
{
}
*/
void ControlSpotPanel::setBatchMode(bool batchMode)
{
ToolPanel::setBatchMode(batchMode);
// Set batch mode for adjusters
sensiexclu_->showEditedCB();
struc_->showEditedCB();
locX_->showEditedCB();
locXL_->showEditedCB();
locY_->showEditedCB();
locYT_->showEditedCB();
centerX_->showEditedCB();
centerY_->showEditedCB();
circrad_->showEditedCB();
transit_->showEditedCB();
thresh_->showEditedCB();
iter_->showEditedCB();
}
//-----------------------------------------------------------------------------
// ControlSpots
//-----------------------------------------------------------------------------