51 #ifdef CHECK_MEMORY_LEAKS
53 #endif // CHECK_MEMORY_LEAKS
92 FXDialogBox(parent, "View Settings", DECOR_TITLE | DECOR_BORDER, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
93 myParent(parent), mySettings(settings),
94 myDecals(decals), myDecalsLock(decalsLock), myDecalsTable(0) {
95 myBackup = (*mySettings);
97 FXVerticalFrame* contentFrame =
98 new FXVerticalFrame(
this, LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y,
99 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
103 new FXHorizontalFrame(contentFrame, FRAME_THICK, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
104 mySchemeName =
new FXComboBox(frame0, 20,
this,
MID_SIMPLE_VIEW_NAMECHANGE, COMBOBOX_INSERT_LAST | FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_CENTER_Y | COMBOBOX_STATIC);
106 for (std::vector<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) {
107 size_t index = mySchemeName->appendItem((*i).c_str());
108 if ((*i) == mySettings->name) {
109 mySchemeName->setCurrentItem((FXint) index);
112 mySchemeName->setNumVisible(5);
114 new FXButton(frame0,
"\t\tSave the setting to registry",
116 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
117 new FXButton(frame0,
"\t\tRemove the setting from registry",
119 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
120 new FXButton(frame0,
"\t\tExport setting to file",
122 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
123 new FXButton(frame0,
"\t\tLoad setting from file",
125 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
130 new FXTabBook(contentFrame, 0, 0, TABBOOK_LEFTTABS | PACK_UNIFORM_WIDTH | PACK_UNIFORM_HEIGHT | LAYOUT_FILL_X | LAYOUT_FILL_Y | LAYOUT_RIGHT,
131 0, 0, 0, 0, 0, 0, 0, 0);
134 new FXTabItem(tabbook,
"Background", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
135 FXVerticalFrame* frame1 =
136 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
139 new FXMatrix(frame1, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
140 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
141 new FXLabel(m11,
"Color", 0, LAYOUT_CENTER_Y);
144 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | LAYOUT_SIDE_TOP | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
145 0, 0, 100, 0, 0, 0, 0, 0);
147 new FXHorizontalSeparator(frame1, SEPARATOR_GROOVE | LAYOUT_FILL_X);
149 FXVerticalFrame* frame11 =
150 new FXVerticalFrame(frame1, LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
151 new FXLabel(frame11,
"Decals:");
152 myDecalsFrame =
new FXVerticalFrame(frame11);
154 new FXButton(frame111,
"&Load Decals", NULL,
this,
MID_SIMPLE_VIEW_LOAD_DECALS, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 20, 20, 4, 4);
155 new FXButton(frame111,
"&Save Decals", NULL,
this,
MID_SIMPLE_VIEW_SAVE_DECALS, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 20, 20, 4, 4);
157 new FXHorizontalSeparator(frame1, SEPARATOR_GROOVE | LAYOUT_FILL_X);
160 new FXMatrix(frame1, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
161 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
164 myShowGrid->setCheck(mySettings->showGrid);
167 new FXMatrix(m12, 2, LAYOUT_CENTER_Y | LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
168 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
169 new FXLabel(m121,
"x-spacing", 0, LAYOUT_CENTER_Y);
172 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
173 myGridXSizeDialer->setRange(1, 10000);
174 myGridXSizeDialer->setValue(mySettings->gridXSize);
176 new FXMatrix(m12, 2, LAYOUT_CENTER_Y | LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
177 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
178 new FXLabel(m122,
"y-spacing", 0, LAYOUT_CENTER_Y);
181 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
182 myGridYSizeDialer->setRange(1, 10000);
183 myGridYSizeDialer->setValue(mySettings->gridXSize);
187 new FXTabItem(tabbook,
"Streets", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
189 FXVerticalFrame* frame2 =
190 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
192 new FXMatrix(frame2, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
193 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
194 new FXLabel(m21,
"Color", 0, LAYOUT_CENTER_Y);
195 myLaneEdgeColorMode =
new FXComboBox(m21, 30,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
196 myLaneEdgeColorMode->setNumVisible(10);
197 myLaneColorInterpolation =
new FXCheckButton(m21,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
198 FXScrollWindow* genScroll =
new FXScrollWindow(frame2, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
199 myLaneColorSettingFrame =
200 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
203 if (GUIVisualizationSettings::UseMesoSim) {
204 mySettings->edgeColorer.fill(*myLaneEdgeColorMode);
207 mySettings->laneColorer.fill(*myLaneEdgeColorMode);
212 new FXHorizontalSeparator(frame2, SEPARATOR_GROOVE | LAYOUT_FILL_X);
214 new FXMatrix(frame2, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
215 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
217 myShowLaneBorders->setCheck(mySettings->laneShowBorders);
218 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
220 myShowLaneDecals->setCheck(mySettings->showLinkDecals);
221 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
223 myShowRails->setCheck(mySettings->showRails);
224 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
226 myHideMacroConnectors->setCheck(mySettings->hideConnectors);
227 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
228 new FXLabel(m22,
"Exaggerate width by", 0, LAYOUT_CENTER_Y);
229 myLaneWidthUpscaleDialer =
231 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
232 myLaneWidthUpscaleDialer->setRange(0, 10000);
233 myLaneWidthUpscaleDialer->setValue(mySettings->laneWidthExaggeration);
236 myEdgeNamePanel =
new NamePanel(m22,
this,
"Show edge name", mySettings->edgeName);
237 myStreetNamePanel =
new NamePanel(m22,
this,
"Show street name", mySettings->streetName);
238 myInternalEdgeNamePanel =
new NamePanel(m22,
this,
"Show internal edge name", mySettings->internalEdgeName);
242 new FXTabItem(tabbook,
"Vehicles", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
243 FXVerticalFrame* frame3 =
244 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
247 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
248 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
249 new FXLabel(m31,
"Show As", 0, LAYOUT_CENTER_Y);
250 myVehicleShapeDetail =
new FXComboBox(m31, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
251 myVehicleShapeDetail->appendItem(
"'triangles'");
252 myVehicleShapeDetail->appendItem(
"'boxes'");
253 myVehicleShapeDetail->appendItem(
"'simple shapes'");
254 myVehicleShapeDetail->appendItem(
"'raster images'");
255 myVehicleShapeDetail->setNumVisible(4);
256 myVehicleShapeDetail->setCurrentItem(settings->vehicleQuality);
258 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
261 new FXMatrix(frame3, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
262 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
263 new FXLabel(m32,
"Color", 0, LAYOUT_CENTER_Y);
264 myVehicleColorMode =
new FXComboBox(m32, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
265 mySettings->vehicleColorer.fill(*myVehicleColorMode);
266 myVehicleColorMode->setNumVisible(10);
267 myVehicleColorInterpolation =
new FXCheckButton(m32,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
269 FXScrollWindow* genScroll =
new FXScrollWindow(frame3, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
270 myVehicleColorSettingFrame =
271 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
273 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
276 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
277 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
279 myShowBlinker->setCheck(mySettings->showBlinker);
280 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
282 myShowMinGap->setCheck(mySettings->drawMinGap);
283 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
289 myVehicleNamePanel =
new NamePanel(m33,
this,
"Show vehicle name", mySettings->vehicleName);
297 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
300 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
301 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
303 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
304 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
305 new FXLabel(m341,
"Minimum size", 0, LAYOUT_CENTER_Y);
306 myVehicleMinSizeDialer =
308 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
309 myVehicleMinSizeDialer->setValue(mySettings->minVehicleSize);
311 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
312 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
313 new FXLabel(m342,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
314 myVehicleUpscaleDialer =
316 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
317 myVehicleUpscaleDialer->setRange(0, 10000);
318 myVehicleUpscaleDialer->setValue(mySettings->vehicleExaggeration);
323 new FXTabItem(tabbook,
"Persons", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
324 FXVerticalFrame* frame3 =
325 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
328 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
329 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
330 new FXLabel(m101,
"Show As", 0, LAYOUT_CENTER_Y);
331 myPersonShapeDetail =
new FXComboBox(m101, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
332 myPersonShapeDetail->appendItem(
"'triangles'");
333 myPersonShapeDetail->appendItem(
"'boxes'");
334 myPersonShapeDetail->appendItem(
"'simple shapes'");
335 myPersonShapeDetail->appendItem(
"'raster images'");
336 myPersonShapeDetail->setNumVisible(4);
337 myPersonShapeDetail->setCurrentItem(settings->personQuality);
339 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
342 new FXMatrix(frame3, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
343 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
344 new FXLabel(m102,
"Color", 0, LAYOUT_CENTER_Y);
345 myPersonColorMode =
new FXComboBox(m102, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
346 mySettings->personColorer.fill(*myPersonColorMode);
347 myPersonColorMode->setNumVisible(10);
348 myPersonColorInterpolation =
new FXCheckButton(m102,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
350 FXScrollWindow* genScroll =
new FXScrollWindow(frame3, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
351 myPersonColorSettingFrame =
352 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
354 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
357 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
358 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
359 myPersonNamePanel =
new NamePanel(m103,
this,
"Show person name", mySettings->personName);
361 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
364 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
365 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
367 new FXMatrix(m104, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
368 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
369 new FXLabel(m1041,
"Minimum size", 0, LAYOUT_CENTER_Y);
370 myPersonMinSizeDialer =
372 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
373 myPersonMinSizeDialer->setValue(mySettings->minPersonSize);
375 new FXMatrix(m104, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
376 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
377 new FXLabel(m1042,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
378 myPersonUpscaleDialer =
380 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
381 myPersonUpscaleDialer->setRange(0, 10000);
382 myPersonUpscaleDialer->setValue(mySettings->personExaggeration);
386 new FXTabItem(tabbook,
"Nodes", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
387 FXVerticalFrame* frame4 =
388 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
390 new FXMatrix(frame4, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
391 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
392 new FXLabel(m41,
"Color", 0, LAYOUT_CENTER_Y);
393 myJunctionColorMode =
new FXComboBox(m41, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
394 mySettings->junctionColorer.fill(*myJunctionColorMode);
395 myJunctionColorMode->setNumVisible(2);
396 myJunctionColorInterpolation =
new FXCheckButton(m41,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
398 FXScrollWindow* genScroll =
new FXScrollWindow(frame4, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
399 myJunctionColorSettingFrame =
400 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
402 new FXHorizontalSeparator(frame4, SEPARATOR_GROOVE | LAYOUT_FILL_X);
404 new FXMatrix(frame4, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
405 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
407 myShowTLIndex->setCheck(mySettings->drawLinkTLIndex);
408 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
410 myShowJunctionIndex->setCheck(mySettings->drawLinkJunctionIndex);
411 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
413 myShowLane2Lane->setCheck(mySettings->showLane2Lane);
414 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
415 myJunctionNamePanel =
new NamePanel(m42,
this,
"Show junction name", mySettings->junctionName);
416 myInternalJunctionNamePanel =
new NamePanel(m42,
this,
"Show internal junction name", mySettings->internalJunctionName);
418 new FXTabItem(tabbook,
"Detectors/Trigger", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
419 FXVerticalFrame* frame5 =
420 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
423 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
424 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
425 myAddNamePanel =
new NamePanel(m51,
this,
"Show detector name", mySettings->addName);
426 new FXHorizontalSeparator(frame5 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
429 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
430 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
432 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
433 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
434 new FXLabel(m521,
"Minimum size", 0, LAYOUT_CENTER_Y);
435 myDetectorMinSizeDialer =
437 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
439 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
440 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
441 myDetectorMinSizeDialer->setValue(mySettings->minAddSize);
442 new FXLabel(m522,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
443 myDetectorUpscaleDialer =
445 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
446 myDetectorUpscaleDialer->setRange(0, 10000);
447 myDetectorUpscaleDialer->setValue(mySettings->addExaggeration);
458 new FXTabItem(tabbook,
"POIs", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
459 FXVerticalFrame* frame6 =
460 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
463 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
464 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
465 myPOINamePanel =
new NamePanel(m61,
this,
"Show poi names", mySettings->poiName);
466 new FXHorizontalSeparator(frame6 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
469 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
470 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
472 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
473 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
474 new FXLabel(m621,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
477 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
479 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
480 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
481 myPOIMinSizeDialer->setValue(mySettings->minPOISize);
482 new FXLabel(m622,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
485 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
486 myPOIUpscaleDialer->setRange(0, 10000);
487 myPOIUpscaleDialer->setValue(mySettings->addExaggeration);
491 new FXTabItem(tabbook,
"Polygons", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
492 FXVerticalFrame* frame9 =
493 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
496 new FXMatrix(frame9, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
497 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
498 myPolyNamePanel =
new NamePanel(m91,
this,
"Show polygon names", mySettings->polyName);
499 new FXHorizontalSeparator(frame9 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
502 new FXMatrix(frame9, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
503 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
505 new FXMatrix(m92, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
506 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
507 new FXLabel(m921,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
508 myPolyMinSizeDialer =
510 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
512 new FXMatrix(m92, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
513 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
514 myPolyMinSizeDialer->setValue(mySettings->minPolySize);
515 new FXLabel(m922,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
516 myPolyUpscaleDialer =
518 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
519 myPolyUpscaleDialer->setRange(0, 10000);
520 myPolyUpscaleDialer->setValue(mySettings->addExaggeration);
524 new FXTabItem(tabbook,
"Legend", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
525 FXVerticalFrame* frame7 =
526 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
529 new FXMatrix(frame7, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
530 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
532 myShowSizeLegend->setCheck(mySettings->showSizeLegend);
535 new FXTabItem(tabbook,
"openGL", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
536 FXVerticalFrame* frame8 =
537 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
540 new FXMatrix(frame8, 1, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
541 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
543 myAntialiase->setCheck(mySettings->antialiase);
545 myDither->setCheck(mySettings->dither);
548 FXButton* initial =
new FXButton(f2,
"&Use", NULL,
this,
MID_SETTINGS_OK, BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
549 new FXButton(f2,
"&Discard", NULL,
this,
MID_SETTINGS_CANCEL, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
552 rebuildColorMatrices(
false);
597 FXString dataS = (
char*) data;
600 for (
int i = 0; i <
mySchemeName->getNumItems() - 1; ++i) {
672 std::vector<FXColorWell*>::const_iterator colEnd,
673 std::vector<FXRealSpinDial*>::const_iterator threshIt,
674 std::vector<FXRealSpinDial*>::const_iterator threshEnd,
675 std::vector<FXButton*>::const_iterator buttonIt,
678 while (colIt != colEnd) {
680 if (sender == *colIt) {
684 if (sender == *threshIt) {
685 const SUMOReal val = (*threshIt)->getValue();
689 (*threshIt)->getRange(lo, hi);
690 (*threshIt)->setRange(lo, val);
694 if (threshIt != threshEnd) {
695 (*threshIt)->getRange(lo, hi);
696 (*threshIt)->setRange(val, hi);
701 if (sender == *colIt) {
705 if (sender == *buttonIt) {
730 bool doRebuildColorMatrices =
false;
739 if (GUIVisualizationSettings::UseMesoSim) {
801 doRebuildColorMatrices =
true;
805 doRebuildColorMatrices =
true;
808 doRebuildColorMatrices =
true;
815 doRebuildColorMatrices =
true;
819 doRebuildColorMatrices =
true;
822 doRebuildColorMatrices =
true;
829 doRebuildColorMatrices =
true;
833 doRebuildColorMatrices =
true;
836 doRebuildColorMatrices =
true;
843 doRebuildColorMatrices =
true;
847 doRebuildColorMatrices =
true;
850 doRebuildColorMatrices =
true;
880 if (doRebuildColorMatrices) {
884 getApp()->forceRefresh();
893 if (settingsName !=
"") {
894 FXint index =
mySchemeName->appendItem(settingsName.c_str());
906 std::vector<GUISUMOAbstractView::Decal>::iterator j;
909 dev <<
" <decal filename=\"" << d.
filename
910 <<
"\" centerX=\"" << d.
centerX
911 <<
"\" centerY=\"" << d.
centerY
912 <<
"\" centerZ=\"" << d.
centerZ
913 <<
"\" width=\"" << d.
width
914 <<
"\" height=\"" << d.
height
916 <<
"\" rotation=\"" << d.
rot
917 <<
"\" tilt=\"" << d.
tilt
918 <<
"\" roll=\"" << d.
roll
919 <<
"\" layer=\"" << d.
layer
922 dev <<
"</decals>\n";
925 FXMessageBox::error(
myParent, MBOX_OK,
"Storing failed!",
"%s", e.what());
950 std::string name =
"";
951 while (name.length() == 0) {
952 FXDialogBox dialog(
this,
"Enter a name", DECOR_TITLE | DECOR_BORDER);
953 FXVerticalFrame* content =
new FXVerticalFrame(&dialog, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10);
954 new FXLabel(content,
"Please enter an alphanumeric name: ", NULL, LAYOUT_FILL_X | JUSTIFY_LEFT);
955 FXTextField* text =
new FXTextField(content, 40, &dialog, FXDialogBox::ID_ACCEPT, TEXTFIELD_ENTER_ONLY | FRAME_SUNKEN | FRAME_THICK | LAYOUT_FILL_X);
956 new FXHorizontalSeparator(content, SEPARATOR_GROOVE | LAYOUT_FILL_X);
958 new FXButton(buttons,
"&OK", NULL, &dialog, FXDialogBox::ID_ACCEPT, BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT);
959 new FXButton(buttons,
"&Cancel", NULL, &dialog, FXDialogBox::ID_CANCEL, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT, 0, 0, 0, 0, 20, 20);
962 if (!dialog.execute()) {
965 name = text->getText().text();
966 for (
size_t i = 0; i < name.length(); ++i) {
967 if (name[i] !=
'_' && (name[i] <
'a' || name[i] >
'z') && (name[i] <
'A' || name[i] >
'Z') && (name[i] <
'0' || name[i] >
'9')) {
975 tmpSettings.
name = name;
991 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1003 std::string name =
mySchemeName->getItem(index).text();
1014 sender->handle(
this,
1016 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1024 FXFileDialog opendialog(
this,
"Export view settings");
1026 opendialog.setSelectMode(SELECTFILE_ANY);
1027 opendialog.setPatternList(
"*.xml");
1039 FXMessageBox::error(
this, MBOX_OK,
"Storing failed!",
"%s", e.what());
1047 sender->handle(
this,
1049 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1057 FXFileDialog opendialog(
this,
"Import view settings");
1059 opendialog.setSelectMode(SELECTFILE_ANY);
1060 opendialog.setPatternList(
"*.xml");
1064 if (opendialog.execute()) {
1074 FXFileDialog opendialog(
this,
"Load Decals");
1076 opendialog.setSelectMode(SELECTFILE_ANY);
1077 opendialog.setPatternList(
"*.xml");
1081 if (opendialog.execute()) {
1091 FXFileDialog opendialog(
this,
"Save Decals");
1093 opendialog.setSelectMode(SELECTFILE_ANY);
1094 opendialog.setPatternList(
"*.xml");
1110 sender->handle(
this, FXSEL(SEL_COMMAND, ID_ENABLE), ptr);
1128 header->setHeight(getApp()->getNormalFont()->getFontHeight() + getApp()->getNormalFont()->getFontAscent());
1130 for (k = 0; k < 7; k++) {
1131 header->setItemJustify(k, JUSTIFY_CENTER_X | JUSTIFY_TOP);
1132 header->setItemSize(k, 60);
1134 header->setItemSize(0, 150);
1137 std::vector<GUISUMOAbstractView::Decal>::iterator j;
1150 for (k = 0; k < 7; k++) {
1158 std::vector<FXColorWell*>& colors,
1159 std::vector<FXRealSpinDial*>& thresholds,
1160 std::vector<FXButton*>& buttons,
1161 FXCheckButton* interpolation,
1164 FXMatrix* m =
new FXMatrix(frame, 3,
1165 LAYOUT_FILL_X | MATRIX_BY_COLUMNS,
1166 0, 0, 0, 0, 10, 10, 0, 0, 5, 3);
1170 const bool fixed = scheme.
isFixed();
1171 std::vector<RGBColor>::const_iterator colIt = scheme.
getColors().begin();
1172 std::vector<SUMOReal>::const_iterator threshIt = scheme.
getThresholds().begin();
1173 std::vector<std::string>::const_iterator nameIt = scheme.
getNames().begin();
1174 FX::FXString buttonText =
"Add";
1175 while (colIt != scheme.
getColors().end()) {
1178 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1179 0, 0, 100, 0, 0, 0, 0, 0));
1181 new FXLabel(m, nameIt->c_str());
1186 threshDialer->setValue(*threshIt);
1187 thresholds.push_back(threshDialer);
1188 buttons.push_back(
new FXButton(m, buttonText, NULL,
this,
MID_SIMPLE_VIEW_COLORCHANGE, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 20, 20, 4, 4));
1189 buttonText =
"Remove";
1197 interpolation->disable();
1199 if (colors.size() > 1) {
1200 interpolation->enable();
1201 if (interpolation->getCheck() != FALSE) {
1202 thresholds.front()->enable();
1204 thresholds.front()->disable();
1207 interpolation->disable();
1208 thresholds.front()->disable();
1220 LAYOUT_FILL_Y | LAYOUT_FIX_WIDTH, 0, 0, 470, 0);
1226 for (
int i = 1; i <= 5; ++i) {
1262 std::string value = i->
item->getText().text();
1264 if (value.find_first_not_of(
" ") == std::string::npos) {
1270 if (row == static_cast<int>(
myDecals->size())) {
1282 }
else if (row > static_cast<int>(
myDecals->size())) {
1286 d = (*myDecals)[row];
1300 std::string msg =
"The value must be a float, is:" + value;
1301 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1308 std::string msg =
"The value must be a float, is:" + value;
1309 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1316 std::string msg =
"The value must be a float, is:" + value;
1317 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1324 std::string msg =
"The value must be a float, is:" + value;
1325 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1332 std::string msg =
"The value must be a float, is:" + value;
1333 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1340 std::string msg =
"The value must be a float, is:" + value;
1341 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1347 (*myDecals)[row] = d;
1367 for (
int i = 0; i <
mySchemeName->getNumItems(); ++i) {
1379 const std::string& title,
1384 FXMatrix* m1 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1385 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1386 new FXLabel(m1,
"Size", 0, LAYOUT_CENTER_Y);
1387 mySizeDial =
new FXRealSpinDial(m1, 10, target, MID_SIMPLE_VIEW_COLORCHANGE,
1388 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
1391 FXMatrix* m2 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1392 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1393 new FXLabel(m2,
"Color", 0, LAYOUT_CENTER_Y);
1395 target, MID_SIMPLE_VIEW_COLORCHANGE,
1396 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | LAYOUT_SIDE_TOP | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1397 0, 0, 100, 0, 0, 0, 0, 0);
1409 myCheck->setCheck(settings.
show);
1410 mySizeDial->setValue(settings.
size);