Eclipse SUMO - Simulation of Urban MObility
GNEDemandElementDialog.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
18 // A abstract class for editing additional elements
19 /****************************************************************************/
20 
23 #include <netedit/GNENet.h>
24 #include <netedit/GNEViewNet.h>
25 #include <netedit/GNEUndoList.h>
26 
27 #include "GNEDemandElementDialog.h"
28 
29 // ===========================================================================
30 // FOX callback mapping
31 // ===========================================================================
32 
33 FXDEFMAP(GNEDemandElementDialog) GNEDemandElementDialogMap[] = {
34  FXMAPFUNC(SEL_KEYPRESS, 0, GNEDemandElementDialog::onKeyPress),
35  FXMAPFUNC(SEL_KEYRELEASE, 0, GNEDemandElementDialog::onKeyRelease),
36  FXMAPFUNC(SEL_CLOSE, 0, GNEDemandElementDialog::onCmdCancel),
41 };
42 
43 // Object abstract implementation
44 FXIMPLEMENT_ABSTRACT(GNEDemandElementDialog, FXTopWindow, GNEDemandElementDialogMap, ARRAYNUMBER(GNEDemandElementDialogMap))
45 
46 // ===========================================================================
47 // member method definitions
48 // ===========================================================================
49 
50 GNEDemandElementDialog::GNEDemandElementDialog(GNEDemandElement* editedDemandElement, bool updatingElement, int width, int height) :
51  FXTopWindow(editedDemandElement->getNet()->getViewNet(), ("Edit '" + editedDemandElement->getID() + "' data").c_str(), editedDemandElement->getACIcon(), editedDemandElement->getACIcon(), GUIDesignDialogBoxExplicit(width, height)),
52  myEditedDemandElement(editedDemandElement),
53  myUpdatingElement(updatingElement),
54  myChangesDescription("Change " + editedDemandElement->getTagStr() + " values"),
55  myNumberOfChanges(0) {
56  // create main frame
57  FXVerticalFrame* mainFrame = new FXVerticalFrame(this, GUIDesignAuxiliarFrame);
58  // Create frame for contents
59  myContentFrame = new FXVerticalFrame(mainFrame, GUIDesignContentsFrame);
60  // create buttons centered
61  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(mainFrame, GUIDesignHorizontalFrame);
62  new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
63  myAcceptButton = GUIDesigns::buildFXButton(buttonsFrame, TL("&Accept"), "", TL("close accepting changes"), GUIIconSubSys::getIcon(GUIIcon::ACCEPT), this, MID_GNE_BUTTON_ACCEPT, GUIDesignButtonAccept);
64  myCancelButton = GUIDesigns::buildFXButton(buttonsFrame, TL("&Cancel"), "", TL("close discarding changes"), GUIIconSubSys::getIcon(GUIIcon::CANCEL), this, MID_GNE_BUTTON_CANCEL, GUIDesignButtonCancel);
65  myResetButton = GUIDesigns::buildFXButton(buttonsFrame, TL("&Reset"), "", TL("reset to previous values"), GUIIconSubSys::getIcon(GUIIcon::RESET), this, MID_GNE_BUTTON_RESET, GUIDesignButtonReset);
66  myFocusButton = GUIDesigns::buildFXButton(buttonsFrame, "&F", "", "", nullptr, this, MID_GNE_BUTTON_FOCUS, GUIDesignButtonFocus);
67 
68  new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
69 }
70 
71 
73  // return focus to GNEViewNet to avoid minimization
74  getParent()->setFocus();
75 }
76 
77 
78 FXint
80  // create Dialog
81  create();
82  // show in the given position
83  show(placement);
84  // refresh APP
85  getApp()->refresh();
86  // open as modal dialog (will block all windows until stop() or stopModal() is called)
87  return getApp()->runModalFor(this);
88 }
89 
90 
93  return myEditedDemandElement;
94 }
95 
96 
97 long
98 GNEDemandElementDialog::onKeyPress(FXObject* sender, FXSelector sel, void* ptr) {
99  return FXTopWindow::onKeyPress(sender, sel, ptr);
100 }
101 
102 
103 long
104 GNEDemandElementDialog::onKeyRelease(FXObject* sender, FXSelector sel, void* ptr) {
105  return FXTopWindow::onKeyRelease(sender, sel, ptr);
106 }
107 
108 
109 long
110 GNEDemandElementDialog::onCmdFocusOnFrame(FXObject*, FXSelector, void*) {
111  setFocus();
112  return 1;
113 }
114 
115 
116 void
118  // change FXDialogBox title
119  setTitle(newHeader.c_str());
120 }
121 
122 
123 void
125  // init commandGroup
127  // save number of command group changes
129 }
130 
131 
132 void
134  // commit changes or abort last command group depending of number of changes did
135  if (myNumberOfChanges < myEditedDemandElement->getNet()->getViewNet()->getUndoList()->currentCommandGroupSize()) {
137  } else {
139  }
140 }
141 
142 
143 void
146 }
147 
148 
149 void
151  // abort last command group an start editing again
154 }
155 
156 
157 /****************************************************************************/
FXDEFMAP(GNEDemandElementDialog) GNEDemandElementDialogMap[]
@ MID_GNE_BUTTON_CANCEL
cancel button
Definition: GUIAppEnum.h:1421
@ MID_GNE_BUTTON_RESET
reset button
Definition: GUIAppEnum.h:1423
@ MID_GNE_BUTTON_FOCUS
focus button
Definition: GUIAppEnum.h:1433
@ MID_GNE_BUTTON_ACCEPT
accept button
Definition: GUIAppEnum.h:1419
#define GUIDesignDialogBoxExplicit(width, height)
design for dialog box with specific width and height (for example, additional dialogs)
Definition: GUIDesigns.h:617
#define GUIDesignButtonAccept
Accept Button.
Definition: GUIDesigns.h:162
#define GUIDesignButtonCancel
Cancel Button.
Definition: GUIDesigns.h:168
#define GUIDesignContentsFrame
design for the main content frame of every frame/dialog with padding and spacing
Definition: GUIDesigns.h:393
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition: GUIDesigns.h:405
#define GUIDesignButtonFocus
Focus Button.
Definition: GUIDesigns.h:180
#define GUIDesignButtonReset
Reset Button.
Definition: GUIDesigns.h:171
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frame extended in all directions
Definition: GUIDesigns.h:396
#define GUIDesignHorizontalFrame
Horizontal frame extended over frame parent with padding and spacing.
Definition: GUIDesigns.h:334
#define TL(string)
Definition: MsgHandler.h:315
GNENet * getNet() const
get pointer to net
Dialog to edit sequences, parameters, etc.. of DemandElements.
virtual long onCmdAccept(FXObject *sender, FXSelector sel, void *ptr)=0
void acceptChanges()
Accept changes did in this dialog.
GNEDemandElement * myEditedDemandElement
pointer to edited additional
long onCmdFocusOnFrame(FXObject *sender, FXSelector sel, void *ptr)
focus on frame
FXint openAsModalDialog(FXuint placement=PLACEMENT_CURSOR)
execute dialog as modal
GNEDemandElement * getEditedDemandElement() const
get edited DemandElement
long onKeyRelease(FXObject *sender, FXSelector sel, void *ptr)
event after release a key
void initChanges()
init a new group of changes that will be do it in dialog
virtual long onCmdCancel(FXObject *sender, FXSelector sel, void *ptr)=0
event after press cancel button
void cancelChanges()
Cancel changes did in this dialog.
void changeDemandElementDialogHeader(const std::string &newHeader)
change additional dialog header
virtual long onCmdReset(FXObject *, FXSelector, void *)=0
event after press cancel button
std::string myChangesDescription
description of changes did in this additional dialog
void resetChanges()
reset changes did in this dialog.
int myNumberOfChanges
number of GNEChanges_... in dialog
long onKeyPress(FXObject *sender, FXSelector sel, void *ptr)
event after press a key
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:2136
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
int currentCommandGroupSize() const
get size of current CommandGroup
void abortLastChangeGroup()
reverts last active chained change group
GNEUndoList * getUndoList() const
get the undoList object
static FXButton * buildFXButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXIcon *ic, FXObject *tgt, FXSelector sel, FXuint opts=BUTTON_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
build button
Definition: GUIDesigns.cpp:128
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon