Path: blob/main/src/netedit/dialogs/elements/GNETemplateElementDialog.h
193700 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 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 GNETemplateElementDialog.h14/// @author Pablo Alvarez Lopez15/// @date Aug 202516///17// A template based on GNEDialog used for editing elements18/****************************************************************************/19#pragma once20#include <config.h>2122#include <netedit/dialogs/GNEDialog.h>23#include <netedit/GNETagPropertiesDatabase.h>2425// ===========================================================================26// class definitions27// ===========================================================================2829template <typename T>30class GNETemplateElementDialog : public GNEDialog {3132public:33/// @brief constructor34GNETemplateElementDialog(T* element, DialogType type) :35GNEDialog(element->getNet()->getGNEApplicationWindow(),36TLF("Edit % '%'", element->getTagStr(), element->getID()).c_str(),37element->getTagProperty()->getGUIIcon(), type, Buttons::ACCEPT_CANCEL_RESET,38OpenType::MODAL, ResizeMode::STATIC),39myElement(element),40myChangesDescription(TLF("change % values", element->getTagStr())) {41// init commandGroup42myElement->getNet()->getUndoList()->begin(myElement, myChangesDescription);43}4445/// @brief constructor with parent dialog46GNETemplateElementDialog(T* element, GNEDialog* parentDialog, DialogType type) :47GNEDialog(element->getNet()->getGNEApplicationWindow(), parentDialog,48TLF("Edit % '%'", element->getTagStr(), element->getID()).c_str(),49element->getTagProperty()->getGUIIcon(), type, Buttons::ACCEPT_CANCEL_RESET,50OpenType::MODAL, ResizeMode::STATIC),51myElement(element),52myChangesDescription(TLF("change % values", element->getTagStr())) {53// init commandGroup54myElement->getNet()->getUndoList()->begin(myElement, myChangesDescription);55}5657/// @brief destructor58~GNETemplateElementDialog() {}5960/// @brief get edited element61T* getElement() const {62return myElement;63}6465/// @brief run internal test66virtual void runInternalTest(const InternalTestStep::DialogArgument* dialogArgument) = 0;6768/// @name FOX-callbacks69/// @{70/// @brief event after press accept button71virtual long onCmdAccept(FXObject* sender, FXSelector sel, void* ptr) = 0;7273/// @brief event after press cancel button74virtual long onCmdReset(FXObject*, FXSelector, void*) = 0;7576/// @brief called when cancel or no button is pressed77long onCmdCancel(FXObject*, FXSelector, void*) {78myElement->getNet()->getUndoList()->abortLastChangeGroup();79return closeDialogCanceling();80}8182/// @brief called when abort is called either closing dialog or pressing abort button83long onCmdAbort(FXObject*, FXSelector, void*) {84myElement->getNet()->getUndoList()->abortLastChangeGroup();85return closeDialogAborting();86}8788/// @}8990protected:91/// @brief default constructor92GNETemplateElementDialog() :93GNEDialog() {}9495/// @brief pointer to edited element96T* myElement = nullptr;9798/// @brief close dialog commiting changes99long acceptElementDialog() {100myElement->getNet()->getUndoList()->end();101return closeDialogAccepting();102}103104/// @brief reset changes did in this dialog.105void resetChanges() {106// abort last command group an start editing again107myElement->getNet()->getUndoList()->abortLastChangeGroup();108myElement->getNet()->getUndoList()->begin(myElement, myChangesDescription);109}110111private:112/// @brief description of changes did in this element dialog113std::string myChangesDescription;114115/// @brief Invalidated copy constructor116GNETemplateElementDialog(const GNETemplateElementDialog&) = delete;117118/// @brief Invalidated assignment operator119GNETemplateElementDialog& operator=(const GNETemplateElementDialog&) = delete;120};121122123