Add ability of duplicating spot and managing its visibility

Other minor improvement: Remaining strings have been added to language
file
This commit is contained in:
Pandagrapher
2019-01-03 10:15:31 +01:00
parent bf859cf935
commit 14f8937bff
4 changed files with 290 additions and 54 deletions

View File

@@ -1065,7 +1065,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
spotId = expsettings->getNewId();
r = new ControlSpotPanel::SpotRow();
r->id = newSpot->id = spotId;
r->name = newSpot->name = "Control Spot #" + std::to_string(spotId);
r->name = newSpot->name = M("TP_LOCALLAB_SPOTNAME") + std::to_string(spotId);
r->isvisible = newSpot->isvisible;
if (newSpot->shape == "ELI") {
@@ -1234,6 +1234,106 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
break;
case (4): // 4 = Spot duplication event
newSpot = nullptr;
spotId = expsettings->getSelectedSpot();
for (int i = 0; i < pp->locallab.nbspot && i < (int)pp->locallab.spots.size(); i++) {
if (pp->locallab.spots.at(i).id == spotId) {
newSpot = new LocallabParams::LocallabSpot(pp->locallab.spots.at(i));
break;
}
}
if (!newSpot) {
break;
}
// Spot creation (initialization at currently selected spot)
spotId = expsettings->getNewId();
r = new ControlSpotPanel::SpotRow();
r->id = newSpot->id = spotId;
r->name = newSpot->name = newSpot->name + " - " + M("TP_LOCALLAB_DUPLSPOTNAME");
r->isvisible = newSpot->isvisible;
if (newSpot->shape == "ELI") {
r->shape = 0;
} else {
r->shape = 1;
}
if (newSpot->spotMethod == "norm") {
r->spotMethod = 0;
} else {
r->spotMethod = 1;
}
r->sensiexclu = newSpot->sensiexclu;
r->struc = newSpot->struc;
if (newSpot->shapeMethod == "IND") {
r->shapeMethod = 0;
} else if (newSpot->shapeMethod == "SYM") {
r->shapeMethod = 1;
} else if (newSpot->shapeMethod == "INDSL") {
r->shapeMethod = 2;
} else {
r->shapeMethod = 3;
}
r->locX = newSpot->locX;
r->locXL = newSpot->locXL;
r->locY = newSpot->locY;
r->locYT = newSpot->locYT;
r->centerX = newSpot->centerX;
r->centerY = newSpot->centerY;
r->circrad = newSpot->circrad;
if (newSpot->qualityMethod == "std") {
r->qualityMethod = 0;
} else if (newSpot->qualityMethod == "enh") {
r->qualityMethod = 1;
} else {
r->qualityMethod = 2;
}
r->transit = newSpot->transit;
r->thresh = newSpot->thresh;
r->iter = newSpot->iter;
expsettings->addControlSpot(r);
// ProcParams update
pp->locallab.nbspot++;
pp->locallab.selspot = pp->locallab.nbspot - 1;
pp->locallab.spots.push_back(*newSpot);
// New created spot selection
expsettings->setSelectedSpot(spotId);
// Update Locallab tools GUI with new created spot
disableListener();
if (pe) {
pe->locallab.spots.push_back(new LocallabParamsEdited::LocallabSpotEdited(true));
}
updateLocallabGUI(pp, pe, pp->locallab.selspot);
enableListener();
// Update default values according to selected spot
setDefaults(defparams, defpedited, spotId);
// ParamsEdited update
if (pedited) {
pedited->locallab.nbspot = true;
pedited->locallab.selspot = true;
pedited->locallab.id = true;
pedited->locallab.spots.push_back(new LocallabParamsEdited::LocallabSpotEdited(true));
}
break;
default: // Spot or locallab GUI updated
if (pp->locallab.nbspot > 0) {
r = expsettings->getSpot(expsettings->getSelectedSpot());