| 556 | } |
| 557 | |
| 558 | void 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 | |
| 615 | void SimulationParametersMainWindow::onDeleteLocation() |
nothing calls this directly
no test coverage detected