SUMO - Simulation of Urban MObility
GNEVariableSpeedSignDialog.cpp
Go to the documentation of this file.
1 /****************************************************************************/
8 /****************************************************************************/
9 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
10 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
11 /****************************************************************************/
12 //
13 // This file is part of SUMO.
14 // SUMO is free software; you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation; either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 /****************************************************************************/
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #ifdef _MSC_VER
25 #include <windows_config.h>
26 #else
27 #include <config.h>
28 #endif
29 
30 #include <iostream>
34 
36 #include "GNEVariableSpeedSign.h"
37 
38 
39 // ===========================================================================
40 // FOX callback mapping
41 // ===========================================================================
42 
43 FXDEFMAP(GNEVariableSpeedSignDialog) GNERerouterDialogMap[] = {
49 };
50 
51 // Object implementation
52 FXIMPLEMENT(GNEVariableSpeedSignDialog, FXDialogBox, GNERerouterDialogMap, ARRAYNUMBER(GNERerouterDialogMap))
53 
54 // ===========================================================================
55 // member method definitions
56 // ===========================================================================
57 
59  GNEAdditionalDialog(variableSpeedSignParent, 240, 240),
60  myVariableSpeedSignParent(variableSpeedSignParent) {
61 
62  // create List with the data
63  myDataList = new FXTable(myContentFrame, this, MID_GNE_VARIABLESPEEDSIGN_REMOVEROW, GUIDesignTableLimitedHeight);
64  myDataList->setEditable(false);
65 
66  // create Horizontal frame for row elements
67  myRowFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
68 
69  // create Text field for the timeStep
70  myRowStep = new FXTextField(myRowFrame, 10, this, MID_GNE_VARIABLESPEEDSIGN_CHANGEVALUE, GUIDesignTextField);
71 
72  // create Text field for the speed
73  myRowSpeed = new FXTextField(myRowFrame, 10, this, MID_GNE_VARIABLESPEEDSIGN_CHANGEVALUE, GUIDesignTextField);
74 
75  // create Button for insert row
76  myAddRow = new FXButton(myRowFrame, "Add", 0, this, MID_GNE_VARIABLESPEEDSIGN_ADDROW, GUIDesignButtonIcon);
77 
78  // Get values of variable speed signal
79  mySteps = myVariableSpeedSignParent->getSteps();
80 
81  // update table
82  updateTable();
83 
84  // Execute additional dialog (To make it modal)
85  execute();
86 }
87 
89 }
90 
91 
92 long
93 GNEVariableSpeedSignDialog::onCmdAddRow(FXObject*, FXSelector, void*) {
94  // Declare variables for time and speed
96 
97  // Get Time
98  if (GNEAttributeCarrier::canParse<double>(myRowStep->getText().text()) == false) {
99  return 0;
100  } else {
101  step.setTime(GNEAttributeCarrier::parse<double>(myRowStep->getText().text()));
102  }
103 
104  // get SPeed
105  if (GNEAttributeCarrier::canParse<double>(myRowSpeed->getText().text()) == false) {
106  return 0;
107  } else {
108  step.setSpeed(GNEAttributeCarrier::parse<double>(myRowSpeed->getText().text()));
109  }
110 
111  // Set new time and their speed if don't exist already
112  if (std::find(mySteps.begin(), mySteps.end(), step) == mySteps.end()) {
113  mySteps.push_back(step);
114  } else {
115  return false;
116  }
117 
118  // Update table
119  updateTable();
120  return 1;
121 }
122 
123 
124 long
125 GNEVariableSpeedSignDialog::onCmdRemoveRow(FXObject*, FXSelector, void*) {
126  // Iterate over rows to find the row to erase
127  for (int i = 0; i < myDataList->getNumRows(); i++) {
128  if (myDataList->getItem(i, 2)->isSelected()) {
129  // Remove element of table and map
130  mySteps.erase(mySteps.begin() + i);
131  myDataList->removeRows(i);
132  // update table
133  updateTable();
134  return 1;
135  }
136  }
137  return 0;
138 }
139 
140 
141 long
142 GNEVariableSpeedSignDialog::onCmdAccept(FXObject*, FXSelector, void*) {
143  // Save new data in Variable Speed Signal edited
145  // Stop Modal with positive out
146  getApp()->stopModal(this, TRUE);
147  return 1;
148 }
149 
150 
151 long
152 GNEVariableSpeedSignDialog::onCmdCancel(FXObject*, FXSelector, void*) {
153  // Stop Modal with negative out
154  getApp()->stopModal(this, FALSE);
155  return 1;
156 }
157 
158 
159 long
160 GNEVariableSpeedSignDialog::onCmdReset(FXObject*, FXSelector, void*) {
161  // Get old values
163  updateTable();
164  return 1;
165 }
166 
167 
168 void
170  // clear table
171  myDataList->clearItems();
172  // set number of rows
173  myDataList->setTableSize(int(mySteps.size()), 3);
174  // Configure list
175  myDataList->setVisibleColumns(3);
176  myDataList->setColumnWidth(0, getWidth() / 3);
177  myDataList->setColumnWidth(1, getWidth() / 3);
178  myDataList->setColumnWidth(2, getWidth() / 3 - 10);
179  myDataList->setColumnText(0, "timeStep");
180  myDataList->setColumnText(1, "speed (km/h)");
181  myDataList->setColumnText(2, "remove");
182  myDataList->getRowHeader()->setWidth(0);
183  // Declare index for rows and pointer to FXTableItem
184  int indexRow = 0;
185  FXTableItem* item = 0;
186  // iterate over values
187  for (std::vector<GNEVariableSpeedSignStep>::iterator i = mySteps.begin(); i != mySteps.end(); i++) {
188  // Set time
189  item = new FXTableItem(toString(i->getTime()).c_str());
190  myDataList->setItem(indexRow, 0, item);
191  // Set speed
192  item = new FXTableItem(toString(i->getSpeed()).c_str());
193  myDataList->setItem(indexRow, 1, item);
194  // set remove
195  item = new FXTableItem("", GUIIconSubSys::getIcon(ICON_REMOVE));
196  item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
197  myDataList->setItem(indexRow, 2, item);
198  // Update index
199  indexRow++;
200  }
201 }
202 
203 /****************************************************************************/
FXTextField * myRowStep
Text field with step
#define GUIDesignTableLimitedHeight
design for table extended over frame but with limited Height
Definition: GUIDesigns.h:406
Dialog to edit sequences, parameters, etc.. of Additionals.
FXTextField * myRowSpeed
Text field with speed.
long onCmdAddRow(FXObject *, FXSelector, void *)
bool setTime(double time)
set time
Variable Speed Signal dialog.
Definition: GUIAppEnum.h:480
long onCmdRemoveRow(FXObject *, FXSelector, void *)
event called after press remove row
GNEVariableSpeedSign * myVariableSpeedSignParent
Pointer to Variable Speed Signal.
#define GUIDesignTextField
Definition: GUIDesigns.h:41
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:56
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:244
FXTable * myDataList
Table with the data.
void setVariableSpeedSignSteps(const std::vector< GNEVariableSpeedSignStep > &steps)
set values of variable speed signal
long onCmdAccept(FXObject *, FXSelector, void *)
event called after press accept button
#define GUIDesignButtonIcon
button only with icon (23x23)
Definition: GUIDesigns.h:66
std::vector< GNEVariableSpeedSignStep > mySteps
Map with the temporal VSSValues.
const std::vector< GNEVariableSpeedSignStep > & getSteps() const
get values of variable speed signal
long onCmdCancel(FXObject *, FXSelector, void *)
event called after press cancel button
long onCmdReset(FXObject *, FXSelector, void *)
event called after press cancel button
FXDEFMAP(GNEVariableSpeedSignDialog) GNERerouterDialogMap[]
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
bool setSpeed(double speed)
set speed time