MCPcopy Create free account
hub / github.com/chrxh/alien / onCloneLocation

Method onCloneLocation

source/Gui/SimulationParametersMainWindow.cpp:558–613  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

556}
557
558void SimulationParametersMainWindow::onCloneLocation()
559{
560 auto parameters = _simulationFacade->getSimulationParameters();
561 auto origParameters = _simulationFacade->getOriginalSimulationParameters();
562
563 auto location = LocationHelper::findLocation(parameters, _selectedLocationIndex);
564
565 if (std::holds_alternative<SimulationParametersZone*>(location)) {
566 if (!checkNumZones(parameters)) {
567 return;
568 }
569 } else {
570 if (!checkNumSources(parameters)) {
571 return;
572 }
573 }
574
575 ++_selectedLocationIndex;
576 LocationHelper::adaptLocationIndex(parameters, _selectedLocationIndex, 1);
577 LocationHelper::adaptLocationIndex(origParameters, _selectedLocationIndex, 1);
578
579 if (std::holds_alternative<SimulationParametersZone*>(location)) {
580 auto zone = std::get<SimulationParametersZone*>(location);
581 auto clone = *zone;
582
583 StringHelper::copy(clone.name, sizeof(clone.name), LocationHelper::generateZoneName(parameters));
584 clone.locationIndex = _selectedLocationIndex;
585
586 int index = parameters.numZones;
587 parameters.zone[index] = clone;
588 origParameters.zone[index] = clone;
589 ++parameters.numZones;
590 ++origParameters.numZones;
591 } else {
592 auto source = std::get<RadiationSource*>(location);
593 auto clone = *source;
594
595 auto& editService = SimulationParametersEditService::get();
596 auto strengths = editService.getRadiationStrengths(parameters);
597 auto newStrengths = editService.calcRadiationStrengthsForAddingZone(strengths);
598
599 StringHelper::copy(clone.name, sizeof(clone.name), LocationHelper::generateSourceName(parameters));
600 clone.locationIndex = _selectedLocationIndex;
601 auto index = parameters.numRadiationSources;
602 parameters.radiationSource[index] = clone;
603 origParameters.radiationSource[index] = clone;
604 ++parameters.numRadiationSources;
605 ++origParameters.numRadiationSources;
606
607 editService.applyRadiationStrengths(parameters, newStrengths);
608 editService.applyRadiationStrengths(origParameters, newStrengths);
609 }
610
611 _simulationFacade->setSimulationParameters(parameters);
612 _simulationFacade->setOriginalSimulationParameters(origParameters);
613}
614
615void SimulationParametersMainWindow::onDeleteLocation()

Callers

nothing calls this directly

Tested by

no test coverage detected