SUMO - Simulation of Urban MObility
GNEVariableSpeedSignDialog.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
17 // A class for edit phases of Variable Speed Signals
18 /****************************************************************************/
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #ifdef _MSC_VER
24 #include <windows_config.h>
25 #else
26 #include <config.h>
27 #endif
28 
29 #include <iostream>
33 
35 #include "GNEVariableSpeedSign.h"
36 #include "GNEViewNet.h"
37 #include "GNENet.h"
38 #include "GNEUndoList.h"
40 
41 
42 // ===========================================================================
43 // FOX callback mapping
44 // ===========================================================================
45 
46 FXDEFMAP(GNEVariableSpeedSignDialog) GNERerouterDialogMap[] = {
52 };
53 
54 // Object implementation
55 FXIMPLEMENT(GNEVariableSpeedSignDialog, GNEAdditionalDialog, GNERerouterDialogMap, ARRAYNUMBER(GNERerouterDialogMap))
56 
57 // ===========================================================================
58 // member method definitions
59 // ===========================================================================
60 
62  GNEAdditionalDialog(editedVariableSpeedSign, 300, 400),
63  myEditedVariableSpeedSign(editedVariableSpeedSign),
64  myStepsValids(false) {
65 
66  // create Horizontal frame for row elements
67  myAddStepFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
68  // create Button and Label
69  myAddStepButton = new FXButton(myAddStepFrame, "", GUIIconSubSys::getIcon(ICON_ADD), this, MID_GNE_VARIABLESPEEDSIGN_ADDROW, GUIDesignButtonIcon);
70  new FXLabel(myAddStepFrame, ("Add new " + toString(SUMO_TAG_STEP)).c_str(), 0, GUIDesignLabelThick);
71 
72  // create List with the data
73  myStepsTable = new FXTable(myContentFrame, this, MID_GNE_VARIABLESPEEDSIGN_TABLE_STEPS, GUIDesignTableAdditionals);
74  myStepsTable->setSelBackColor(FXRGBA(255, 255, 255, 255));
75  myStepsTable->setSelTextColor(FXRGBA(0, 0, 0, 255));
76 
77  // update table
78  updateTableSteps();
79 
80  // start a undo list for editing local to this additional
81  initChanges();
82 
83  // Open dialog as modal
84  openAsModalDialog();
85 }
86 
87 
89 
90 
94 }
95 
96 
97 long
98 GNEVariableSpeedSignDialog::onCmdAddStep(FXObject*, FXSelector, void*) {
99  // Declare variables for time and speed
102  // Update table
104  return 1;
105 }
106 
107 
108 long
109 GNEVariableSpeedSignDialog::onCmdEditStep(FXObject*, FXSelector, void*) {
110  myStepsValids = true;
111  // iterate over table and check that all parameters are correct
112  for (int i = 0; i < myStepsTable->getNumRows(); i++) {
114  if (step->isValid(SUMO_ATTR_TIME, myStepsTable->getItem(i, 0)->getText().text()) == false) {
115  myStepsValids = false;
116  myStepsTable->getItem(i, 2)->setIcon(GUIIconSubSys::getIcon(ICON_ERROR));
117  } else if (step->isValid(SUMO_ATTR_SPEED, myStepsTable->getItem(i, 1)->getText().text()) == false) {
118  myStepsValids = false;
119  myStepsTable->getItem(i, 2)->setIcon(GUIIconSubSys::getIcon(ICON_ERROR));
120  } else {
121  // set new values in Closing reroute
122  step->setAttribute(SUMO_ATTR_TIME, myStepsTable->getItem(i, 0)->getText().text(), myEditedVariableSpeedSign->getViewNet()->getUndoList());
123  step->setAttribute(SUMO_ATTR_SPEED, myStepsTable->getItem(i, 1)->getText().text(), myEditedVariableSpeedSign->getViewNet()->getUndoList());
124  // set Correct label
125  myStepsTable->getItem(i, 2)->setIcon(GUIIconSubSys::getIcon(ICON_CORRECT));
126  }
127  }
128  // update list
129  myStepsTable->update();
130  return 1;
131 }
132 
133 
134 long
135 GNEVariableSpeedSignDialog::onCmdClickedStep(FXObject*, FXSelector, void*) {
136  // check if some delete button was pressed
137  for (int i = 0; i < (int)myEditedVariableSpeedSign->getVariableSpeedSignSteps().size(); i++) {
138  if (myStepsTable->getItem(i, 3)->hasFocus()) {
139  myStepsTable->removeRows(i);
141  // Update table
143  return 1;
144  }
145  }
146  return 0;
147 }
148 
149 
150 long
151 GNEVariableSpeedSignDialog::onCmdAccept(FXObject*, FXSelector, void*) {
152  if (myStepsValids == false) {
153  // write warning if netedit is running in testing mode
154  if (OptionsCont::getOptions().getBool("gui-testing-debug")) {
155  WRITE_WARNING("Opening FXMessageBox of type 'warning'");
156  }
157  //
158  // open warning Box
159  FXMessageBox::warning(getApp(), MBOX_OK, ("Error updating " + toString(SUMO_TAG_VSS) + " " + toString(SUMO_TAG_STEP)).c_str(), "%s",
160  (toString(SUMO_TAG_VSS) + " " + toString(SUMO_TAG_STEP) + "cannot be updated because there are invalid values").c_str());
161  // write warning if netedit is running in testing mode
162  if (OptionsCont::getOptions().getBool("gui-testing-debug")) {
163  WRITE_WARNING("Closed FXMessageBox of type 'warning' with 'OK'");
164  }
165  return 0;
166  } else {
167  // accept changes before closing dialog
168  acceptChanges();
169  // sort steps after finish
171  // stop dialgo sucesfully
172  getApp()->stopModal(this, TRUE);
173  return 1;
174  }
175 }
176 
177 
178 long
179 GNEVariableSpeedSignDialog::onCmdCancel(FXObject*, FXSelector, void*) {
180  // cancel changes
181  cancelChanges();
182  // Stop Modal
183  getApp()->stopModal(this, FALSE);
184  return 1;
185 }
186 
187 
188 long
189 GNEVariableSpeedSignDialog::onCmdReset(FXObject*, FXSelector, void*) {
190  // reset changes
191  resetChanges();
192  // update steps tables
194  return 1;
195 }
196 
197 
198 void
200  // clear table
201  myStepsTable->clearItems();
202  // set number of rows
203  myStepsTable->setTableSize(int(myEditedVariableSpeedSign->getVariableSpeedSignSteps().size()), 4);
204  // Configure list
205  myStepsTable->setVisibleColumns(4);
206  myStepsTable->setColumnWidth(0, 115);
207  myStepsTable->setColumnWidth(1, 114);
208  myStepsTable->setColumnWidth(2, GUIDesignTableIconCellWidth);
209  myStepsTable->setColumnWidth(3, GUIDesignTableIconCellWidth);
210  myStepsTable->setColumnText(0, "timeStep");
211  myStepsTable->setColumnText(1, "speed (km/h)");
212  myStepsTable->setColumnText(2, "");
213  myStepsTable->setColumnText(3, "");
214  myStepsTable->getRowHeader()->setWidth(0);
215  // Declare index for rows and pointer to FXTableItem
216  FXTableItem* item = 0;
217  // iterate over values
218  for (int i = 0; i < (int)myEditedVariableSpeedSign->getVariableSpeedSignSteps().size(); i++) {
219  // Set time
220  item = new FXTableItem(myEditedVariableSpeedSign->getVariableSpeedSignSteps().at(i)->getAttribute(SUMO_ATTR_TIME).c_str());
221  myStepsTable->setItem(i, 0, item);
222  // Set speed
223  item = new FXTableItem(myEditedVariableSpeedSign->getVariableSpeedSignSteps().at(i)->getAttribute(SUMO_ATTR_SPEED).c_str());
224  myStepsTable->setItem(i, 1, item);
225  // set valid icon
226  item = new FXTableItem("");
227  item->setIcon(GUIIconSubSys::getIcon(ICON_CORRECT));
228  item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
229  item->setEnabled(false);
230  myStepsTable->setItem(i, 2, item);
231  // set remove Icon
232  item = new FXTableItem("", GUIIconSubSys::getIcon(ICON_REMOVE));
233  item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
234  item->setEnabled(false);
235  myStepsTable->setItem(i, 3, item);
236  }
237 }
238 
239 /****************************************************************************/
#define GUIDesignTableIconCellWidth
width of cells that only contains an Icon
Definition: GUIDesigns.h:414
void resetChanges()
reset changes did in this dialog.
GNEVariableSpeedSign * myEditedVariableSpeedSign
Pointer to Variable Speed Signal.
void sortVariableSpeedSignSteps()
sort steps
const std::vector< GNEVariableSpeedSignStep * > & getVariableSpeedSignSteps() const
get values of variable speed signal
void updateTableSteps()
update data table
Dialog to edit sequences, parameters, etc.. of Additionals.
FXTable * myStepsTable
Table with the data.
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:199
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:64
GNEUndoList * getUndoList() const
get the undoList object
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:55
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:246
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
long onCmdClickedStep(FXObject *, FXSelector, void *)
event called after clicked a row
GNEVariableSpeedSign * getEditedVariableSpeedSign() const
get edited Variable Speed Sign
#define GUIDesignTableAdditionals
design for tables used in additional dialogs
Definition: GUIDesigns.h:411
long onCmdAccept(FXObject *, FXSelector, void *)
event called after press accept button
#define GUIDesignButtonIcon
button only with icon (23x23)
Definition: GUIDesigns.h:65
bool isValid(SumoXMLAttr key, const std::string &value)
trigger: the time of the step
void acceptChanges()
Accept changes did in this dialog.
GNEViewNet * getViewNet() const
Returns a pointer to GNEViewNet in which additional element is located.
void cancelChanges()
Cancel changes did in this dialog.
#define GUIDesignLabelThick
label extended over frame with thick and with text justify to left and height of 23 ...
Definition: GUIDesigns.h:152
long onCmdCancel(FXObject *, FXSelector, void *)
event called after press cancel button
long onCmdAddStep(FXObject *, FXSelector, void *)
A variable speed sign.
long onCmdReset(FXObject *, FXSelector, void *)
event called after press cancel button
long onCmdEditStep(FXObject *, FXSelector, void *)
event called after edit row
FXDEFMAP(GNEVariableSpeedSignDialog) GNERerouterDialogMap[]
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
trigger: a step description