Path: blob/main/src/netedit/changes/GNEChange_Children.cpp
169678 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEChange_Children.cpp14/// @author Pablo Alvarez Lopez15/// @date Jul 201916///17// A network change used to modify sorting of hierarchical element children18/****************************************************************************/1920#include <netedit/GNENet.h>21#include <netedit/GNEViewNet.h>22#include <netedit/GNEViewParent.h>23#include <netedit/GNEApplicationWindow.h>2425#include "GNEChange_Children.h"2627// ===========================================================================28// FOX-declarations29// ===========================================================================3031FXIMPLEMENT_ABSTRACT(GNEChange_Children, GNEChange, nullptr, 0)3233// ===========================================================================34// member method definitions35// ===========================================================================3637GNEChange_Children::GNEChange_Children(GNEDemandElement* demandElementParent, GNEDemandElement* demandElementChild, const Operation operation) :38GNEChange(Supermode::DEMAND, true, demandElementChild->isAttributeCarrierSelected()),39myParentDemandElement(demandElementParent),40myChildDemandElement(demandElementChild),41myOperation(operation),42myOriginalChildElements(demandElementParent->getChildDemandElements()),43myEditedChildElements(demandElementParent->getChildDemandElements()) {44myParentDemandElement->incRef("GNEChange_Children");45// obtain iterator to demandElementChild46auto it = std::find(myEditedChildElements.begin(), myEditedChildElements.end(), myChildDemandElement);47// edit myEditedChildElements vector48if (it != myEditedChildElements.end()) {49if ((operation == Operation::MOVE_FRONT) && (it != (myEditedChildElements.end() - 1))) {50// remove element51it = myEditedChildElements.erase(it);52// insert again in a different position53myEditedChildElements.insert(it + 1, myChildDemandElement);54} else if ((operation == Operation::MOVE_BACK) && (it != myEditedChildElements.begin())) {55// remove element56it = myEditedChildElements.erase(it);57// insert again in a different position58myEditedChildElements.insert(it - 1, myChildDemandElement);59}60}61}626364GNEChange_Children::~GNEChange_Children() {65// only continue we have undo-redo mode enabled66if (myParentDemandElement->getNet()->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed()) {67myParentDemandElement->decRef("GNEChange_Children");68// remove if is unreferenced69if (myParentDemandElement->unreferenced()) {70// delete AC71delete myParentDemandElement;72}73}74}757677void78GNEChange_Children::undo() {79if (myForward) {80// continue depending of myOperation81if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {82// restore child demand element original vector in myChildDemandElement83// myParentDemandElement->myChildDemandElements = myOriginalChildElements;84} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {85// restore child demand element original vector in myChildDemandElement86// myParentDemandElement->myChildDemandElements = myOriginalChildElements;87}88} else {89// continue depending of myOperation90if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {91// set child demand element edited vector in myChildDemandElement92// myParentDemandElement- myChildDemandElements = myEditedChildElements;93} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {94// set child demand element edited vector in myChildDemandElement95// myParentDemandElement->myChildDemandElements = myEditedChildElements;96}97}98// require always save children99myParentDemandElement->getNet()->getSavingStatus()->requireSaveDemandElements();100}101102103void104GNEChange_Children::redo() {105if (myForward) {106// continue depending of myOperation107if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {108// set child demand element edited vector in myChildDemandElement109// myParentDemandElement->myChildDemandElements = myEditedChildElements;110} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {111// set child demand element edited vector in myChildDemandElement112// myParentDemandElement->myChildDemandElements = myEditedChildElements;113}114} else {115// continue depending of myOperation116if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {117// restore child demand element original vector in myChildDemandElement118// myParentDemandElement->myChildDemandElements = myOriginalChildElements;119} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {120// restore child demand element original vector in myChildDemandElement121// myParentDemandElement->myChildDemandElements = myOriginalChildElements;122}123}124// require always save children125myParentDemandElement->getNet()->getSavingStatus()->requireSaveDemandElements();126}127128129std::string130GNEChange_Children::undoName() const {131if (myForward) {132// check myOperation133if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {134return (TL("Undo moving up ") + myChildDemandElement->getTagStr());135} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {136return (TL("Undo moving down ") + myChildDemandElement->getTagStr());137} else {138return (TL("Invalid operation"));139}140} else {141// check myOperation142if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {143return (TL("Undo moving down ") + myChildDemandElement->getTagStr());144} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {145return (TL("Undo moving up ") + myChildDemandElement->getTagStr());146} else {147return (TL("Invalid operation"));148}149}150}151152153std::string154GNEChange_Children::redoName() const {155if (myForward) {156// check myOperation157if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {158return (TL("Redo moving front ") + myParentDemandElement->getTagStr());159} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {160return (TL("Redo moving back ") + myParentDemandElement->getTagStr());161} else {162return (TL("Invalid operation"));163}164} else {165// check myOperation166if (myOperation == GNEChange_Children::Operation::MOVE_FRONT) {167return (TL("Redo moving front ") + myParentDemandElement->getTagStr());168} else if (myOperation == GNEChange_Children::Operation::MOVE_BACK) {169return (TL("Redo moving back ") + myParentDemandElement->getTagStr());170} else {171return (TL("Invalid operation"));172}173}174}175176177