SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GUIParameterTableWindow.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // The window that holds the table of an object's parameter
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
12 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <string>
34 #include <fx.h>
37 #include <utils/common/ToString.h>
43 
44 #ifdef CHECK_MEMORY_LEAKS
45 #include <foreign/nvwa/debug_new.h>
46 #endif // CHECK_MEMORY_LEAKS
47 
48 
49 // ===========================================================================
50 // FOX callback mapping
51 // ===========================================================================
52 FXDEFMAP(GUIParameterTableWindow) GUIParameterTableWindowMap[] = {
53  FXMAPFUNC(SEL_COMMAND, MID_SIMSTEP, GUIParameterTableWindow::onSimStep),
54  FXMAPFUNC(SEL_SELECTED, MID_TABLE, GUIParameterTableWindow::onTableSelected),
55  FXMAPFUNC(SEL_DESELECTED, MID_TABLE, GUIParameterTableWindow::onTableDeselected),
56  FXMAPFUNC(SEL_RIGHTBUTTONPRESS, MID_TABLE, GUIParameterTableWindow::onRightButtonPress),
57 };
58 
59 FXIMPLEMENT(GUIParameterTableWindow, FXMainWindow, GUIParameterTableWindowMap, ARRAYNUMBER(GUIParameterTableWindowMap))
60 
61 
62 // ===========================================================================
63 // method definitions
64 // ===========================================================================
66  GUIGlObject& o, size_t noRows)
67  : FXMainWindow(app.getApp(), (o.getFullName() + " Parameter").c_str(),
68  NULL, NULL, DECOR_ALL, 20, 20, 400, (FXint)(noRows * 20 + 60)),
69  myObject(&o),
70  myApplication(&app), myCurrentPos(0) {
71  myTable = new FXTable(this, this, MID_TABLE, TABLE_COL_SIZABLE | TABLE_ROW_SIZABLE | LAYOUT_FILL_X | LAYOUT_FILL_Y);
72  myTable->setVisibleRows((FXint)(noRows + 1));
73  myTable->setVisibleColumns(3);
74  myTable->setTableSize((FXint)(noRows + 1), 3);
75  myTable->setBackColor(FXRGB(255, 255, 255));
76  myTable->setColumnText(0, "Name");
77  myTable->setColumnText(1, "Value");
78  myTable->setColumnText(2, "Dynamic");
79  myTable->getRowHeader()->setWidth(0);
80  FXHeader* header = myTable->getColumnHeader();
81  header->setItemJustify(0, JUSTIFY_CENTER_X);
82  header->setItemSize(0, 250);
83  header->setItemJustify(1, JUSTIFY_CENTER_X);
84  header->setItemSize(1, 80);
85  header->setItemJustify(2, JUSTIFY_CENTER_X);
86  header->setItemSize(2, 60);
88  myLock.lock();
89  myObject->addParameterTable(this);
90  myLock.unlock();
91 }
92 
93 
96  myLock.lock();
97  for (std::vector<GUIParameterTableItemInterface*>::iterator i = myItems.begin(); i != myItems.end(); ++i) {
98  delete(*i);
99  }
100  if (myObject != 0) {
102  }
103  myLock.unlock();
104 }
105 
106 
107 void
110  myObject = 0;
111 }
112 
113 
114 long
116  updateTable();
117  update();
118  return 1;
119 }
120 
121 
122 long
124  return 1;
125 }
126 
127 
128 long
130  return 1;
131 }
132 
133 
134 long
136  FXSelector sel,
137  void* data) {
138  // check which value entry was pressed
139  myTable->onLeftBtnPress(sender, sel, data);
140  int row = myTable->getCurrentRow();
141  if (row == -1 || row >= (int)(myItems.size())) {
142  return 1;
143  }
145  if (!i->dynamic()) {
146  return 1;
147  }
148 
150  new FXMenuCommand(p, "Open in new Tracker", 0, p, MID_OPENTRACKER);
151  // set geometry
152  p->setX(static_cast<FXEvent*>(data)->root_x);
153  p->setY(static_cast<FXEvent*>(data)->root_y);
154  p->create();
155  // show
156  p->show();
157  return 1;
158 }
159 
160 
161 
162 void
163 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
164  ValueSource<unsigned>* src) {
166  myItems.push_back(i);
167 }
168 
169 
170 void
171 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
172  ValueSource<SUMOReal>* src) {
174  myItems.push_back(i);
175 }
176 
177 
178 #ifndef HAVE_SUBSECOND_TIMESTEPS
179 void
180 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
181  ValueSource<SUMOTime>* src) {
183  myItems.push_back(i);
184 }
185 #endif
186 
187 
188 void
189 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
190  std::string value) {
191  // T = SUMOReal is only a dummy type here
193  myItems.push_back(i);
194 }
195 
196 
197 void
198 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
199  SUMOReal value) {
201  myItems.push_back(i);
202 }
203 
204 
205 void
206 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
207  unsigned value) {
209  myItems.push_back(i);
210 }
211 
212 
213 #ifndef HAVE_SUBSECOND_TIMESTEPS
214 void
215 GUIParameterTableWindow::mkItem(const char* name, bool dynamic,
216  SUMOTime value) {
218  myItems.push_back(i);
219 }
220 #endif
221 
222 
223 void
226  if (myObject == 0) {
227  return;
228  }
229  for (std::vector<GUIParameterTableItemInterface*>::iterator i = myItems.begin(); i != myItems.end(); i++) {
230  (*i)->update();
231  }
232 }
233 
234 
235 void
237  myApplication->addChild(this, true);
238  create();
239  show();
240 }
241 
242 
243 
244 /****************************************************************************/
245