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);
239 myCwaEdgeNamePanel =
new NamePanel(m22,
this,
"Show crossing and walkingarea name", mySettings->cwaEdgeName);
243 new FXTabItem(tabbook,
"Vehicles", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
244 FXVerticalFrame* frame3 =
245 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
248 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
249 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
250 new FXLabel(m31,
"Show As", 0, LAYOUT_CENTER_Y);
251 myVehicleShapeDetail =
new FXComboBox(m31, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
252 myVehicleShapeDetail->appendItem(
"'triangles'");
253 myVehicleShapeDetail->appendItem(
"'boxes'");
254 myVehicleShapeDetail->appendItem(
"'simple shapes'");
255 myVehicleShapeDetail->appendItem(
"'raster images'");
256 myVehicleShapeDetail->setNumVisible(4);
257 myVehicleShapeDetail->setCurrentItem(settings->vehicleQuality);
259 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
262 new FXMatrix(frame3, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
263 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
264 new FXLabel(m32,
"Color", 0, LAYOUT_CENTER_Y);
265 myVehicleColorMode =
new FXComboBox(m32, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
266 mySettings->vehicleColorer.fill(*myVehicleColorMode);
267 myVehicleColorMode->setNumVisible(10);
268 myVehicleColorInterpolation =
new FXCheckButton(m32,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
270 FXScrollWindow* genScroll =
new FXScrollWindow(frame3, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
271 myVehicleColorSettingFrame =
272 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
274 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
277 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
278 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
280 myShowBlinker->setCheck(mySettings->showBlinker);
281 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
283 myShowMinGap->setCheck(mySettings->drawMinGap);
284 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
290 myVehicleNamePanel =
new NamePanel(m33,
this,
"Show vehicle name", mySettings->vehicleName);
298 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
301 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
302 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
304 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
305 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
306 new FXLabel(m341,
"Minimum size", 0, LAYOUT_CENTER_Y);
307 myVehicleMinSizeDialer =
309 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
310 myVehicleMinSizeDialer->setValue(mySettings->minVehicleSize);
312 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
313 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
314 new FXLabel(m342,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
315 myVehicleUpscaleDialer =
317 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
318 myVehicleUpscaleDialer->setRange(0, 10000);
319 myVehicleUpscaleDialer->setValue(mySettings->vehicleExaggeration);
324 new FXTabItem(tabbook,
"Persons", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
325 FXVerticalFrame* frame3 =
326 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
329 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
330 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
331 new FXLabel(m101,
"Show As", 0, LAYOUT_CENTER_Y);
332 myPersonShapeDetail =
new FXComboBox(m101, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
333 myPersonShapeDetail->appendItem(
"'triangles'");
334 myPersonShapeDetail->appendItem(
"'boxes'");
335 myPersonShapeDetail->appendItem(
"'simple shapes'");
336 myPersonShapeDetail->appendItem(
"'raster images'");
337 myPersonShapeDetail->setNumVisible(4);
338 myPersonShapeDetail->setCurrentItem(settings->personQuality);
340 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
343 new FXMatrix(frame3, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
344 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
345 new FXLabel(m102,
"Color", 0, LAYOUT_CENTER_Y);
346 myPersonColorMode =
new FXComboBox(m102, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
347 mySettings->personColorer.fill(*myPersonColorMode);
348 myPersonColorMode->setNumVisible(10);
349 myPersonColorInterpolation =
new FXCheckButton(m102,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
351 FXScrollWindow* genScroll =
new FXScrollWindow(frame3, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
352 myPersonColorSettingFrame =
353 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
355 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
358 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
359 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
360 myPersonNamePanel =
new NamePanel(m103,
this,
"Show person name", mySettings->personName);
362 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
365 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
366 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
368 new FXMatrix(m104, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
369 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
370 new FXLabel(m1041,
"Minimum size", 0, LAYOUT_CENTER_Y);
371 myPersonMinSizeDialer =
373 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
374 myPersonMinSizeDialer->setValue(mySettings->minPersonSize);
376 new FXMatrix(m104, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
377 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
378 new FXLabel(m1042,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
379 myPersonUpscaleDialer =
381 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
382 myPersonUpscaleDialer->setRange(0, 10000);
383 myPersonUpscaleDialer->setValue(mySettings->personExaggeration);
387 new FXTabItem(tabbook,
"Junctions", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
388 FXVerticalFrame* frame4 =
389 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
391 new FXMatrix(frame4, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
392 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
393 new FXLabel(m41,
"Color", 0, LAYOUT_CENTER_Y);
394 myJunctionColorMode =
new FXComboBox(m41, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
395 mySettings->junctionColorer.fill(*myJunctionColorMode);
396 myJunctionColorMode->setNumVisible(2);
397 myJunctionColorInterpolation =
new FXCheckButton(m41,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
399 FXScrollWindow* genScroll =
new FXScrollWindow(frame4, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
400 myJunctionColorSettingFrame =
401 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
403 new FXHorizontalSeparator(frame4, SEPARATOR_GROOVE | LAYOUT_FILL_X);
405 new FXMatrix(frame4, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
406 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
408 myShowTLIndex->setCheck(mySettings->drawLinkTLIndex);
409 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
411 myShowJunctionIndex->setCheck(mySettings->drawLinkJunctionIndex);
412 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
414 myShowLane2Lane->setCheck(mySettings->showLane2Lane);
415 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
416 myJunctionNamePanel =
new NamePanel(m42,
this,
"Show junction name", mySettings->junctionName);
417 myInternalJunctionNamePanel =
new NamePanel(m42,
this,
"Show internal junction name", mySettings->internalJunctionName);
419 myDrawJunctionShape->setCheck(mySettings->drawJunctionShape);
421 new FXTabItem(tabbook,
"Detectors/Trigger", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
422 FXVerticalFrame* frame5 =
423 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
426 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
427 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
428 myAddNamePanel =
new NamePanel(m51,
this,
"Show detector name", mySettings->addName);
429 new FXHorizontalSeparator(frame5 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
432 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
433 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
435 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
436 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
437 new FXLabel(m521,
"Minimum size", 0, LAYOUT_CENTER_Y);
438 myDetectorMinSizeDialer =
440 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
442 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
443 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
444 myDetectorMinSizeDialer->setValue(mySettings->minAddSize);
445 new FXLabel(m522,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
446 myDetectorUpscaleDialer =
448 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
449 myDetectorUpscaleDialer->setRange(0, 10000);
450 myDetectorUpscaleDialer->setValue(mySettings->addExaggeration);
461 new FXTabItem(tabbook,
"POIs", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
462 FXVerticalFrame* frame6 =
463 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
466 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
467 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
468 myPOINamePanel =
new NamePanel(m61,
this,
"Show poi names", mySettings->poiName);
469 new FXHorizontalSeparator(frame6 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
472 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
473 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
475 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
476 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
477 new FXLabel(m621,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
480 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
482 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
483 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
484 myPOIMinSizeDialer->setValue(mySettings->minPOISize);
485 new FXLabel(m622,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
488 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
489 myPOIUpscaleDialer->setRange(0, 10000);
490 myPOIUpscaleDialer->setValue(mySettings->addExaggeration);
494 new FXTabItem(tabbook,
"Polygons", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
495 FXVerticalFrame* frame9 =
496 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
499 new FXMatrix(frame9, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
500 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
501 myPolyNamePanel =
new NamePanel(m91,
this,
"Show polygon names", mySettings->polyName);
502 new FXHorizontalSeparator(frame9 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
505 new FXMatrix(frame9, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
506 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
508 new FXMatrix(m92, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
509 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
510 new FXLabel(m921,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
511 myPolyMinSizeDialer =
513 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
515 new FXMatrix(m92, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
516 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
517 myPolyMinSizeDialer->setValue(mySettings->minPolySize);
518 new FXLabel(m922,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
519 myPolyUpscaleDialer =
521 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
522 myPolyUpscaleDialer->setRange(0, 10000);
523 myPolyUpscaleDialer->setValue(mySettings->addExaggeration);
527 new FXTabItem(tabbook,
"Legend", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
528 FXVerticalFrame* frame7 =
529 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
532 new FXMatrix(frame7, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
533 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
535 myShowSizeLegend->setCheck(mySettings->showSizeLegend);
538 new FXTabItem(tabbook,
"openGL", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
539 FXVerticalFrame* frame8 =
540 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
543 new FXMatrix(frame8, 1, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
544 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
546 myAntialiase->setCheck(mySettings->antialiase);
548 myDither->setCheck(mySettings->dither);
551 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);
552 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);
555 rebuildColorMatrices(
false);
601 FXString dataS = (
char*) data;
604 for (
int i = 0; i <
mySchemeName->getNumItems() - 1; ++i) {
678 std::vector<FXColorWell*>::const_iterator colEnd,
679 std::vector<FXRealSpinDial*>::const_iterator threshIt,
680 std::vector<FXRealSpinDial*>::const_iterator threshEnd,
681 std::vector<FXButton*>::const_iterator buttonIt,
684 while (colIt != colEnd) {
686 if (sender == *colIt) {
690 if (sender == *threshIt) {
691 const SUMOReal val = (*threshIt)->getValue();
695 (*threshIt)->getRange(lo, hi);
696 (*threshIt)->setRange(lo, val);
700 if (threshIt != threshEnd) {
701 (*threshIt)->getRange(lo, hi);
702 (*threshIt)->setRange(val, hi);
707 if (sender == *colIt) {
711 if (sender == *buttonIt) {
736 bool doRebuildColorMatrices =
false;
745 if (GUIVisualizationSettings::UseMesoSim) {
809 doRebuildColorMatrices =
true;
813 doRebuildColorMatrices =
true;
816 doRebuildColorMatrices =
true;
823 doRebuildColorMatrices =
true;
827 doRebuildColorMatrices =
true;
830 doRebuildColorMatrices =
true;
837 doRebuildColorMatrices =
true;
841 doRebuildColorMatrices =
true;
844 doRebuildColorMatrices =
true;
851 doRebuildColorMatrices =
true;
855 doRebuildColorMatrices =
true;
858 doRebuildColorMatrices =
true;
888 if (doRebuildColorMatrices) {
892 getApp()->forceRefresh();
901 if (settingsName !=
"") {
902 FXint index =
mySchemeName->appendItem(settingsName.c_str());
914 std::vector<GUISUMOAbstractView::Decal>::iterator j;
917 dev <<
" <decal filename=\"" << d.
filename
918 <<
"\" centerX=\"" << d.
centerX
919 <<
"\" centerY=\"" << d.
centerY
920 <<
"\" centerZ=\"" << d.
centerZ
921 <<
"\" width=\"" << d.
width
922 <<
"\" height=\"" << d.
height
924 <<
"\" rotation=\"" << d.
rot
925 <<
"\" tilt=\"" << d.
tilt
926 <<
"\" roll=\"" << d.
roll
927 <<
"\" layer=\"" << d.
layer
930 dev <<
"</decals>\n";
933 FXMessageBox::error(
myParent, MBOX_OK,
"Storing failed!",
"%s", e.what());
958 std::string name =
"";
959 while (name.length() == 0) {
960 FXDialogBox dialog(
this,
"Enter a name", DECOR_TITLE | DECOR_BORDER);
961 FXVerticalFrame* content =
new FXVerticalFrame(&dialog, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10);
962 new FXLabel(content,
"Please enter an alphanumeric name: ", NULL, LAYOUT_FILL_X | JUSTIFY_LEFT);
963 FXTextField* text =
new FXTextField(content, 40, &dialog, FXDialogBox::ID_ACCEPT, TEXTFIELD_ENTER_ONLY | FRAME_SUNKEN | FRAME_THICK | LAYOUT_FILL_X);
964 new FXHorizontalSeparator(content, SEPARATOR_GROOVE | LAYOUT_FILL_X);
966 new FXButton(buttons,
"&OK", NULL, &dialog, FXDialogBox::ID_ACCEPT, BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT);
967 new FXButton(buttons,
"&Cancel", NULL, &dialog, FXDialogBox::ID_CANCEL, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT, 0, 0, 0, 0, 20, 20);
970 if (!dialog.execute()) {
973 name = text->getText().text();
974 for (
size_t i = 0; i < name.length(); ++i) {
975 if (name[i] !=
'_' && (name[i] <
'a' || name[i] >
'z') && (name[i] <
'A' || name[i] >
'Z') && (name[i] <
'0' || name[i] >
'9')) {
983 tmpSettings.
name = name;
999 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1011 std::string name =
mySchemeName->getItem(index).text();
1022 sender->handle(
this,
1024 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1032 FXFileDialog opendialog(
this,
"Export view settings");
1034 opendialog.setSelectMode(SELECTFILE_ANY);
1035 opendialog.setPatternList(
"*.xml");
1047 FXMessageBox::error(
this, MBOX_OK,
"Storing failed!",
"%s", e.what());
1055 sender->handle(
this,
1057 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1065 FXFileDialog opendialog(
this,
"Import view settings");
1067 opendialog.setSelectMode(SELECTFILE_ANY);
1068 opendialog.setPatternList(
"*.xml");
1072 if (opendialog.execute()) {
1082 FXFileDialog opendialog(
this,
"Load Decals");
1084 opendialog.setSelectMode(SELECTFILE_ANY);
1085 opendialog.setPatternList(
"*.xml");
1089 if (opendialog.execute()) {
1099 FXFileDialog opendialog(
this,
"Save Decals");
1101 opendialog.setSelectMode(SELECTFILE_ANY);
1102 opendialog.setPatternList(
"*.xml");
1118 sender->handle(
this, FXSEL(SEL_COMMAND, ID_ENABLE), ptr);
1136 header->setHeight(getApp()->getNormalFont()->getFontHeight() + getApp()->getNormalFont()->getFontAscent());
1138 for (k = 0; k < 7; k++) {
1139 header->setItemJustify(k, JUSTIFY_CENTER_X | JUSTIFY_TOP);
1140 header->setItemSize(k, 60);
1142 header->setItemSize(0, 150);
1145 std::vector<GUISUMOAbstractView::Decal>::iterator j;
1158 for (k = 0; k < 7; k++) {
1166 std::vector<FXColorWell*>& colors,
1167 std::vector<FXRealSpinDial*>& thresholds,
1168 std::vector<FXButton*>& buttons,
1169 FXCheckButton* interpolation,
1172 FXMatrix* m =
new FXMatrix(frame, 3,
1173 LAYOUT_FILL_X | MATRIX_BY_COLUMNS,
1174 0, 0, 0, 0, 10, 10, 0, 0, 5, 3);
1178 const bool fixed = scheme.
isFixed();
1179 std::vector<RGBColor>::const_iterator colIt = scheme.
getColors().begin();
1180 std::vector<SUMOReal>::const_iterator threshIt = scheme.
getThresholds().begin();
1181 std::vector<std::string>::const_iterator nameIt = scheme.
getNames().begin();
1182 FX::FXString buttonText =
"Add";
1183 while (colIt != scheme.
getColors().end()) {
1186 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1187 0, 0, 100, 0, 0, 0, 0, 0));
1189 new FXLabel(m, nameIt->c_str());
1194 threshDialer->setValue(*threshIt);
1195 thresholds.push_back(threshDialer);
1196 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));
1197 buttonText =
"Remove";
1205 interpolation->disable();
1207 if (colors.size() > 1) {
1208 interpolation->enable();
1209 if (interpolation->getCheck() != FALSE) {
1210 thresholds.front()->enable();
1212 thresholds.front()->disable();
1215 interpolation->disable();
1216 thresholds.front()->disable();
1228 LAYOUT_FILL_Y | LAYOUT_FIX_WIDTH, 0, 0, 470, 0);
1234 for (
int i = 1; i <= 5; ++i) {
1270 std::string value = i->
item->getText().text();
1272 if (value.find_first_not_of(
" ") == std::string::npos) {
1278 if (row == static_cast<int>(
myDecals->size())) {
1290 }
else if (row > static_cast<int>(
myDecals->size())) {
1294 d = (*myDecals)[row];
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());
1348 std::string msg =
"The value must be a float, is:" + value;
1349 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1355 (*myDecals)[row] = d;
1375 for (
int i = 0; i <
mySchemeName->getNumItems(); ++i) {
1387 const std::string& title,
1392 FXMatrix* m1 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1393 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1394 new FXLabel(m1,
"Size", 0, LAYOUT_CENTER_Y);
1395 mySizeDial =
new FXRealSpinDial(m1, 10, target, MID_SIMPLE_VIEW_COLORCHANGE,
1396 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
1399 FXMatrix* m2 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1400 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1401 new FXLabel(m2,
"Color", 0, LAYOUT_CENTER_Y);
1403 target, MID_SIMPLE_VIEW_COLORCHANGE,
1404 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | LAYOUT_SIDE_TOP | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1405 0, 0, 100, 0, 0, 0, 0, 0);
1417 myCheck->setCheck(settings.
show);
1418 mySizeDial->setValue(settings.
size);