SUMO - Simulation of Urban MObility
GNECalibratorDialog.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>
31 #include <utils/common/TplCheck.h>
35 
36 #include "GNECalibratorDialog.h"
37 
38 #ifdef CHECK_MEMORY_LEAKS
39 #include <foreign/nvwa/debug_new.h>
40 #endif
41 
42 // ===========================================================================
43 // FOX callback mapping
44 // ===========================================================================
45 
46 FXDEFMAP(GNECalibratorDialog) GNECalibratorDialogMap[] = {
52 };
53 
54 // Object implementation
55 FXIMPLEMENT(GNECalibratorDialog, FXDialogBox, GNECalibratorDialogMap, ARRAYNUMBER(GNECalibratorDialogMap))
56 
57 // ===========================================================================
58 // member method definitions
59 // ===========================================================================
60 
62  GNEAdditionalDialog(calibratorParent, 1024, 360),
63  myCalibratorParent(calibratorParent) {
64 
65  // create List with the data
66  myDataList = new FXTable(myContentFrame, this, MID_GNE_MODE_CALIBRATOR_TABLE, GUIDesignTableLimitedHeight);
67  myDataList->setEditable(false);
68 
69  // create Horizontal frame for row elements
70  myRowFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
71 
72  // create Text field for id
73  myTextFieldId = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
74 
75  // create Text field for begin
76  myTextFieldBegin = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldReal);
77 
78  // create Text field for end
79  myTextFieldEnd = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldReal);
80 
81  // create Text field for type
82  myTextFieldType = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
83 
84  // create Text field for route
85  myTextFieldRoute = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
86 
87  // create Text field for color
88  myTextFieldColor = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
89 
90  // create Text field for depart lane
91  myTextFieldDepartLane = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
92 
93  // create Text field for depart pos
94  myTextFieldDepartPos = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
95 
96  // create Text field for depart speed
97  myTextFieldDepartSpeed = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
98 
99  // create Text field for arrival lane
100  myTextFieldArrivalLane = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
101 
102  // create Text field for arrival pos
103  myTextFieldArrivalPos = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
104 
105  // create Text field for arrival speed
106  myTextFieldArrivalSpeed = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
107 
108  // create Text field for line
109  myTextFieldLine = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignLabelThick);
110 
111  // create Text field for person number
112  myTextFieldPersonNumber = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldInt);
113 
114  // create Text field for container number
115  myTextFieldContainerNumber = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldInt);
116 
117  // create Text field for vehsPerHour
118  myTextFieldVehsPerHour = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldReal);
119 
120  // create Text field for period
121  myTextFieldPeriod = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldReal);
122 
123  // create Text field for probability
124  myTextFieldProbability = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldReal);
125 
126  // create Text field for number
127  myTextFieldNumber = new FXTextField(myRowFrame, 10, this, MID_GNE_MODE_CALIBRATOR_EDITVALUE, GUIDesignTextFieldInt);
128 
129  // create Button for insert row
130  myAddRow = new FXButton(myRowFrame, "Add", 0, this, MID_GNE_MODE_CALIBRATOR_TABLE, GUIDesignLabelThick);
131 
132  // Get values of variable speed signal
133  myFlowValues = myCalibratorParent->getFlowValues();
134 
135  // Fill table
136  updateTable();
137 
138  // Execute additional dialog (To make it modal)
139  execute();
140 }
141 
142 
144 }
145 
146 
147 long
148 GNECalibratorDialog::onCmdAddRow(FXObject*, FXSelector, void*) {
149  // Declare new calibrator
151  // set ID
152  std::string id = myTextFieldId->getText().text();
153 
154  // set Start
155  if (myTextFieldBegin->getText().empty()) {
156  return 0;
157  } else {
158  calibratorFlow->setBegin(TplConvert::_str2SUMOReal(myTextFieldBegin->getText().text()));
159  }
160 
161  // set End
162  if (myTextFieldEnd->getText().empty()) {
163  return 0;
164  } else {
165  calibratorFlow->setEnd(TplConvert::_str2SUMOReal(myTextFieldEnd->getText().text()));
166  }
167 
168  // set Type
169  if (myTextFieldType->getText().empty()) {
170  return 0;
171  } else {
172  calibratorFlow->setType(myTextFieldType->getText().text());
173  }
174 
175  // set Route
176  if (myTextFieldType->getText().empty()) {
177  return 0;
178  } else {
179  calibratorFlow->setRoute(myTextFieldRoute->getText().text());
180  }
181 
182  // Set color
183  calibratorFlow->setColor(myTextFieldColor->getText().text());
184 
185  // Set depart lane
186  calibratorFlow->setDepartLane(myTextFieldDepartLane->getText().text());
187 
188  // Set depart pos
189  calibratorFlow->setDepartPos(myTextFieldDepartPos->getText().text());
190 
191  // Set depart speed
192  calibratorFlow->setDepartSpeed(myTextFieldDepartSpeed->getText().text());
193 
194  // Set arrival lane
195  calibratorFlow->setArrivalLane(myTextFieldArrivalLane->getText().text());
196 
197  // Set arrival pos
198  calibratorFlow->setArrivalPos(myTextFieldArrivalPos->getText().text());
199 
200  // Set arrival speed
201  calibratorFlow->setArrivalSpeed(myTextFieldArrivalSpeed->getText().text());
202 
203  // Set Line
204  calibratorFlow->setLine(myTextFieldLine->getText().text());
205 
206  // set PersionNumber
207  calibratorFlow->setPersonNumber(TplConvert::_str2int(myTextFieldPersonNumber->getText().text()));
208 
209  // set Container Number
210  calibratorFlow->setContainerNumber(TplConvert::_str2int(myTextFieldContainerNumber->getText().text()));
211 
212  // Set vehsPerHour
213  calibratorFlow->setVehsPerHour(TplConvert::_str2SUMOReal(myTextFieldVehsPerHour->getText().text()));
214 
215  // set Period
216  calibratorFlow->setPeriod(TplConvert::_str2SUMOReal(myTextFieldPeriod->getText().text()));
217 
218  // set Probability
219  calibratorFlow->setProbability(TplCheck::_str2SUMOReal(myTextFieldProbability->getText().text()));
220 
221  // set Number
222  calibratorFlow->setNumber(TplConvert::_str2int(myTextFieldNumber->getText().text()));
223 
224  // addd new calibrator flow to table
225  if (std::find(myFlowValues.begin(), myFlowValues.end(), calibratorFlow) == myFlowValues.end()) {
226  myFlowValues.push_back(calibratorFlow);
227  } else {
228  delete calibratorFlow;
229  return 0;
230  }
231 
232  // Update table
233  updateTable();
234  return 1;
235 }
236 
237 
238 long
239 GNECalibratorDialog::onCmdRemoveRow(FXObject*, FXSelector, void*) {
240  // Iterate over rows to find the row to erase
241  for (int i = 0; i < myDataList->getNumRows(); i++) {
242  if (myDataList->getItem(i, 19)->isSelected()) {
243  // Remove element of table and map
244  myFlowValues.erase(myFlowValues.begin() + i);
245  myDataList->removeRows(i);
246  // update table
247  updateTable();
248  return 1;
249  }
250  }
251  return 0;
252 }
253 
254 
255 long
256 GNECalibratorDialog::onCmdAccept(FXObject*, FXSelector, void*) {
257  // Get values of variable speed signal
259  // Stop Modal
260  getApp()->stopModal(this, TRUE);
261  return 1;
262 }
263 
264 
265 long
266 GNECalibratorDialog::onCmdCancel(FXObject*, FXSelector, void*) {
267  // Stop Modal
268  getApp()->stopModal(this, FALSE);
269  return 1;
270 }
271 
272 
273 long
274 GNECalibratorDialog::onCmdReset(FXObject*, FXSelector, void*) {
275  // Get values of variable speed signal
277  // Update Table
278  updateTable();
279  return 1;
280 }
281 
282 
283 void
285  // clear table
286  myDataList->clearItems();
287  // set number of rows
288  myDataList->setTableSize(int(myFlowValues.size()), 20);
289  // Configure list
290  myDataList->setVisibleColumns(20);
291  myDataList->setColumnWidth(0, getWidth() / 20);
292  myDataList->setColumnWidth(1, getWidth() / 20);
293  myDataList->setColumnWidth(2, getWidth() / 20);
294  myDataList->setColumnWidth(3, getWidth() / 20);
295  myDataList->setColumnWidth(4, getWidth() / 20);
296  myDataList->setColumnWidth(5, getWidth() / 20);
297  myDataList->setColumnWidth(6, getWidth() / 20);
298  myDataList->setColumnWidth(7, getWidth() / 20);
299  myDataList->setColumnWidth(8, getWidth() / 20);
300  myDataList->setColumnWidth(9, getWidth() / 20);
301  myDataList->setColumnWidth(10, getWidth() / 20);
302  myDataList->setColumnWidth(11, getWidth() / 20);
303  myDataList->setColumnWidth(12, getWidth() / 20);
304  myDataList->setColumnWidth(13, getWidth() / 20);
305  myDataList->setColumnWidth(14, getWidth() / 20);
306  myDataList->setColumnWidth(15, getWidth() / 20);
307  myDataList->setColumnWidth(16, getWidth() / 20);
308  myDataList->setColumnWidth(17, getWidth() / 20);
309  myDataList->setColumnWidth(18, getWidth() / 20);
310  myDataList->setColumnWidth(19, getWidth() / 20 - 10);
311  myDataList->setColumnText(0, "Id");
312  myDataList->setColumnText(1, "Begin");
313  myDataList->setColumnText(2, "End");
314  myDataList->setColumnText(3, "Type");
315  myDataList->setColumnText(4, "Route");
316  myDataList->setColumnText(5, "Color");
317  myDataList->setColumnText(6, "Dep.Lane");
318  myDataList->setColumnText(7, "Dep.Pos.");
319  myDataList->setColumnText(8, "Dep.Speed");
320  myDataList->setColumnText(9, "Arr.Lane");
321  myDataList->setColumnText(10, "Arr.Pos.");
322  myDataList->setColumnText(11, "Arr.Speed");
323  myDataList->setColumnText(12, "Line");
324  myDataList->setColumnText(13, "Per.Num.");
325  myDataList->setColumnText(14, "Con.Num");
326  myDataList->setColumnText(15, "VehPerHour");
327  myDataList->setColumnText(16, "Period");
328  myDataList->setColumnText(17, "Prob.");
329  myDataList->setColumnText(18, "Number");
330  myDataList->setColumnText(19, "Del.");
331  myDataList->getRowHeader()->setWidth(0);
332 
333  // Declare index for rows and pointer to FXTableItem
334  int indexRow = 0;
335  FXTableItem* item = 0;
336 
337  // iterate over values
338  for (std::vector<GNECalibrator::GNECalibratorFlow*>::iterator i = myFlowValues.begin(); i != myFlowValues.end(); i++) {
339  // set begin
340  item = new FXTableItem(toString((*i)->getBegin()).c_str());
341  myDataList->setItem(indexRow, 1, item);
342 
343  // set end
344  item = new FXTableItem(toString((*i)->getEnd()).c_str());
345  myDataList->setItem(indexRow, 2, item);
346 
347  // set type
348  item = new FXTableItem(toString((*i)->getType()).c_str());
349  myDataList->setItem(indexRow, 3, item);
350 
351  // set route
352  item = new FXTableItem(toString((*i)->getRoute()).c_str());
353  myDataList->setItem(indexRow, 4, item);
354 
355  // set color
356  item = new FXTableItem(toString((*i)->getColor()).c_str());
357  myDataList->setItem(indexRow, 5, item);
358 
359  // set depart lane
360  item = new FXTableItem(toString((*i)->getDepartLane()).c_str());
361  myDataList->setItem(indexRow, 6, item);
362 
363  // set depart pos
364  item = new FXTableItem(toString((*i)->getDepartPos()).c_str());
365  myDataList->setItem(indexRow, 7, item);
366 
367  // set depart speed
368  item = new FXTableItem(toString((*i)->getDepartSpeed()).c_str());
369  myDataList->setItem(indexRow, 8, item);
370 
371  // set arrival lane
372  item = new FXTableItem(toString((*i)->getArrivalLane()).c_str());
373  myDataList->setItem(indexRow, 9, item);
374 
375  // set arrival pos
376  item = new FXTableItem(toString((*i)->getArrivalPos()).c_str());
377  myDataList->setItem(indexRow, 10, item);
378 
379  // set arrival speed
380  item = new FXTableItem(toString((*i)->getArrivalSpeed()).c_str());
381  myDataList->setItem(indexRow, 11, item);
382 
383  // set line
384  item = new FXTableItem(toString((*i)->getLine()).c_str());
385  myDataList->setItem(indexRow, 12, item);
386 
387  // set person number
388  item = new FXTableItem(toString((*i)->getPersonNumber()).c_str());
389  myDataList->setItem(indexRow, 13, item);
390 
391  // set container number
392  item = new FXTableItem(toString((*i)->getContainerNumber()).c_str());
393  myDataList->setItem(indexRow, 14, item);
394 
395  // set vehsPerHour
396  item = new FXTableItem(toString((*i)->getVehsPerHour()).c_str());
397  myDataList->setItem(indexRow, 15, item);
398 
399  // set period
400  item = new FXTableItem(toString((*i)->getPeriod()).c_str());
401  myDataList->setItem(indexRow, 16, item);
402 
403  // set probability
404  item = new FXTableItem(toString((*i)->getProbability()).c_str());
405  myDataList->setItem(indexRow, 17, item);
406 
407  // set number
408  item = new FXTableItem(toString((*i)->getNumber()).c_str());
409  myDataList->setItem(indexRow, 18, item);
410 
411  // set remove
412  item = new FXTableItem("", GUIIconSubSys::getIcon(ICON_REMOVE));
413  item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
414  myDataList->setItem(indexRow, 19, item);
415 
416  // Update index
417  indexRow++;
418  }
419 }
420 
421 /****************************************************************************/
FXTextField * myTextFieldContainerNumber
textField for insert a flow&#39;s ContainerNumber
bool setDepartSpeed(std::string departSpeed)
set depart speed
bool setPersonNumber(int personNumber)
set number of persons
static SUMOReal _str2SUMOReal(const std::string &sData)
converts a string into the SUMOReal value described by it by calling the char-type converter ...
Definition: TplConvert.h:348
void setFlowValues(std::vector< GNECalibrator::GNECalibratorFlow * > calibratorFlowValues)
set Calbratorflow values
FXTextField * myTextFieldRoute
textField for insert a flow&#39;s Route
FXTable * myDataList
Table with the data.
FXTextField * myTextFieldProbability
textField for insert a flow&#39;s probability
#define GUIDesignTableLimitedHeight
design for table extended over frame but with limited Height
Definition: GUIDesigns.h:420
FXTextField * myTextFieldArrivalLane
textField for insert a flow&#39;s ArrivalLane
Dialog to edit sequences, parameters, etc.. of Additionals.
bool setArrivalSpeed(std::string arrivalSpeed)
set arrival speed
std::vector< GNECalibrator::GNECalibratorFlow * > getFlowValues() const
get Calbratorflow values
void updateTable()
update data table
bool setVehsPerHour(SUMOReal vehsPerHour)
set vehicles per hour
bool setPeriod(SUMOReal period)
set period of vehicles
FXTextField * myTextFieldDepartLane
textField for insert a flow&#39;s DepartLane
bool setNumber(int number)
set number of vehicles
FXTextField * myTextFieldLine
textField for insert a flow&#39;s Line
GNECalibrator * myCalibratorParent
pointer to calibrator parent
bool setBegin(SUMOReal begin)
set begin step
bool setArrivalLane(std::string arrivalLane)
set arrival lane
long onCmdReset(FXObject *, FXSelector, void *)
event after press reset button
bool setEnd(SUMOReal end)
set end step
FXTextField * myTextFieldId
textField for insert a flow&#39;s Id
long onCmdRemoveRow(FXObject *, FXSelector, void *)
event called after press remove row
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:55
long onCmdAddRow(FXObject *, FXSelector, void *)
bool setRoute(std::string route)
set route in which this flow is used
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:226
FXTextField * myTextFieldType
textField for insert a flow&#39;s Type
static int _str2int(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter...
Definition: TplConvert.h:160
bool setContainerNumber(int containerNumber)
set number of container
FXTextField * myTextFieldDepartPos
textField for insert a flow&#39;s DepartPos
bool setDepartPos(std::string departPos)
set depart position
FXTextField * myTextFieldVehsPerHour
textField for insert a flow&#39;s vehsPerHour
FXTextField * myTextFieldPersonNumber
textField for insert a flow&#39;s PersonNumber
Calibrator dialog.
Definition: GUIAppEnum.h:496
Dialog for edit calibrators.
bool setLine(std::string line)
set line of busStop/containerStop
FXTextField * myTextFieldArrivalPos
textField for insert a flow&#39;s ArrivalPos
FXTextField * myTextFieldBegin
textField for insert a flow&#39;s begin
bool setProbability(SUMOReal probability)
set probability of vehicle
bool setArrivalPos(std::string arrivalPos)
set arrival position
FXTextField * myTextFieldPeriod
textField for insert a flow&#39;s period
FXTextField * myTextFieldEnd
textField for insert a flow&#39;s end
FXTextField * myTextFieldDepartSpeed
textField for insert a flow&#39;s DepartSpeed
bool setColor(std::string color)
set color of flow
#define GUIDesignLabelThick
label extended over over frame with thick and with text justify to left
Definition: GUIDesigns.h:148
#define GUIDesignTextFieldInt
text field extended over Frame with thick frame and limited to Integers
Definition: GUIDesigns.h:44
FXDEFMAP(GNECalibratorDialog) GNECalibratorDialogMap[]
std::vector< GNECalibrator::GNECalibratorFlow * > myFlowValues
Map with the temporal FlowValues.
#define GUIDesignTextFieldReal
text field extended over Frame with thick frame and limited to Doubles/SUMOReals
Definition: GUIDesigns.h:47
bool setDepartLane(std::string departLane)
set depart lane
static bool _str2SUMOReal(const std::string &data)
check if a String can be parsed into a SUMOReal check overflows
Definition: TplCheck.h:67
bool setType(std::string type)
set type of vehicle
FXTextField * myTextFieldColor
textField for insert a flow&#39;s color
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
FXTextField * myTextFieldNumber
textField for insert a flow&#39;s number
long onCmdAccept(FXObject *, FXSelector, void *)
event after press accept button
FXTextField * myTextFieldArrivalSpeed
textField for insert a flow&#39;s ArrivalSpeed