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);
241 new FXTabItem(tabbook,
"Vehicles", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
242 FXVerticalFrame* frame3 =
243 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
246 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
247 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
248 new FXLabel(m31,
"Show As", 0, LAYOUT_CENTER_Y);
249 myVehicleShapeDetail =
new FXComboBox(m31, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
250 myVehicleShapeDetail->appendItem(
"'triangles'");
251 myVehicleShapeDetail->appendItem(
"'boxes'");
252 myVehicleShapeDetail->appendItem(
"'simple shapes'");
253 myVehicleShapeDetail->appendItem(
"'raster images'");
254 myVehicleShapeDetail->setNumVisible(4);
255 myVehicleShapeDetail->setCurrentItem(settings->vehicleQuality);
257 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
260 new FXMatrix(frame3, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
261 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
262 new FXLabel(m32,
"Color", 0, LAYOUT_CENTER_Y);
263 myVehicleColorMode =
new FXComboBox(m32, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
264 mySettings->vehicleColorer.fill(*myVehicleColorMode);
265 myVehicleColorMode->setNumVisible(10);
266 myVehicleColorInterpolation =
new FXCheckButton(m32,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
268 FXScrollWindow* genScroll =
new FXScrollWindow(frame3, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
269 myVehicleColorSettingFrame =
270 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
272 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
275 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
276 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
278 myShowBlinker->setCheck(mySettings->showBlinker);
279 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
281 myShowMinGap->setCheck(mySettings->drawMinGap);
282 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
288 myVehicleNamePanel =
new NamePanel(m33,
this,
"Show vehicle name", mySettings->vehicleName);
296 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
299 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
300 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
302 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
303 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
304 new FXLabel(m341,
"Minimum size", 0, LAYOUT_CENTER_Y);
305 myVehicleMinSizeDialer =
307 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
308 myVehicleMinSizeDialer->setValue(mySettings->minVehicleSize);
310 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
311 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
312 new FXLabel(m342,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
313 myVehicleUpscaleDialer =
315 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
316 myVehicleUpscaleDialer->setRange(0, 10000);
317 myVehicleUpscaleDialer->setValue(mySettings->vehicleExaggeration);
319 new FXTabItem(tabbook,
"Nodes", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
320 FXVerticalFrame* frame4 =
321 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
323 new FXMatrix(frame4, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
324 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
325 new FXLabel(m41,
"Color", 0, LAYOUT_CENTER_Y);
326 myJunctionColorMode =
new FXComboBox(m41, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
327 mySettings->junctionColorer.fill(*myJunctionColorMode);
328 myJunctionColorMode->setNumVisible(2);
329 myJunctionColorInterpolation =
new FXCheckButton(m41,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
331 FXScrollWindow* genScroll =
new FXScrollWindow(frame4, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
332 myJunctionColorSettingFrame =
333 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
335 new FXHorizontalSeparator(frame4, SEPARATOR_GROOVE | LAYOUT_FILL_X);
337 new FXMatrix(frame4, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
338 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
340 myShowTLIndex->setCheck(mySettings->drawLinkTLIndex);
341 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
343 myShowJunctionIndex->setCheck(mySettings->drawLinkJunctionIndex);
344 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
346 myShowLane2Lane->setCheck(mySettings->showLane2Lane);
347 new FXLabel(m42,
" ", 0, LAYOUT_CENTER_Y);
348 myJunctionNamePanel =
new NamePanel(m42,
this,
"Show junction name", mySettings->junctionName);
349 myInternalJunctionNamePanel =
new NamePanel(m42,
this,
"Show internal junction name", mySettings->internalJunctionName);
351 new FXTabItem(tabbook,
"Detectors/Trigger", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
352 FXVerticalFrame* frame5 =
353 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
356 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
357 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
358 myAddNamePanel =
new NamePanel(m51,
this,
"Show detector name", mySettings->addName);
359 new FXHorizontalSeparator(frame5 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
362 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
363 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
365 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
366 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
367 new FXLabel(m521,
"Minimum size", 0, LAYOUT_CENTER_Y);
368 myDetectorMinSizeDialer =
370 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
372 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
373 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
374 myDetectorMinSizeDialer->setValue(mySettings->minAddSize);
375 new FXLabel(m522,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
376 myDetectorUpscaleDialer =
378 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
379 myDetectorUpscaleDialer->setRange(0, 10000);
380 myDetectorUpscaleDialer->setValue(mySettings->addExaggeration);
391 new FXTabItem(tabbook,
"POIs", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
392 FXVerticalFrame* frame6 =
393 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
396 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
397 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
398 myPOINamePanel =
new NamePanel(m61,
this,
"Show poi names", mySettings->poiName);
399 new FXHorizontalSeparator(frame6 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
402 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
403 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
405 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
406 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
407 new FXLabel(m621,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
410 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
412 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
413 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
414 myPOIMinSizeDialer->setValue(mySettings->minPOISize);
415 new FXLabel(m622,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
418 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
419 myPOIUpscaleDialer->setRange(0, 10000);
420 myPOIUpscaleDialer->setValue(mySettings->addExaggeration);
424 new FXTabItem(tabbook,
"Polygons", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
425 FXVerticalFrame* frame9 =
426 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
429 new FXMatrix(frame9, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
430 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
431 myPolyNamePanel =
new NamePanel(m91,
this,
"Show polygon names", mySettings->polyName);
432 new FXHorizontalSeparator(frame9 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
435 new FXMatrix(frame9, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
436 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
438 new FXMatrix(m92, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
439 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
440 new FXLabel(m921,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
441 myPolyMinSizeDialer =
443 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
445 new FXMatrix(m92, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
446 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
447 myPolyMinSizeDialer->setValue(mySettings->minPolySize);
448 new FXLabel(m922,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
449 myPolyUpscaleDialer =
451 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
452 myPolyUpscaleDialer->setRange(0, 10000);
453 myPolyUpscaleDialer->setValue(mySettings->addExaggeration);
457 new FXTabItem(tabbook,
"Legend", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
458 FXVerticalFrame* frame7 =
459 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
462 new FXMatrix(frame7, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
463 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
465 myShowSizeLegend->setCheck(mySettings->showSizeLegend);
468 new FXTabItem(tabbook,
"openGL", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
469 FXVerticalFrame* frame8 =
470 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
473 new FXMatrix(frame8, 1, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
474 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
476 myAntialiase->setCheck(mySettings->antialiase);
478 myDither->setCheck(mySettings->dither);
481 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);
482 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);
485 rebuildColorMatrices(
false);
530 FXString dataS = (
char*) data;
533 for (
int i = 0; i <
mySchemeName->getNumItems() - 1; ++i) {
599 std::vector<FXColorWell*>::const_iterator colEnd,
600 std::vector<FXRealSpinDial*>::const_iterator threshIt,
601 std::vector<FXRealSpinDial*>::const_iterator threshEnd,
602 std::vector<FXButton*>::const_iterator buttonIt,
605 while (colIt != colEnd) {
607 if (sender == *colIt) {
611 if (sender == *threshIt) {
612 const SUMOReal val = (*threshIt)->getValue();
616 (*threshIt)->getRange(lo, hi);
617 (*threshIt)->setRange(lo, val);
621 if (threshIt != threshEnd) {
622 (*threshIt)->getRange(lo, hi);
623 (*threshIt)->setRange(val, hi);
628 if (sender == *colIt) {
632 if (sender == *buttonIt) {
656 bool doRebuildColorMatrices =
false;
665 if (GUIVisualizationSettings::UseMesoSim) {
721 doRebuildColorMatrices =
true;
725 doRebuildColorMatrices =
true;
728 doRebuildColorMatrices =
true;
735 doRebuildColorMatrices =
true;
739 doRebuildColorMatrices =
true;
742 doRebuildColorMatrices =
true;
749 doRebuildColorMatrices =
true;
753 doRebuildColorMatrices =
true;
756 doRebuildColorMatrices =
true;
786 if (doRebuildColorMatrices) {
790 getApp()->forceRefresh();
799 if (settingsName !=
"") {
800 FXint index =
mySchemeName->appendItem(settingsName.c_str());
812 std::vector<GUISUMOAbstractView::Decal>::iterator j;
815 dev <<
" <decal filename=\"" << d.
filename
816 <<
"\" centerX=\"" << d.
centerX
817 <<
"\" centerY=\"" << d.
centerY
818 <<
"\" centerZ=\"" << d.
centerZ
819 <<
"\" width=\"" << d.
width
820 <<
"\" height=\"" << d.
height
822 <<
"\" rotation=\"" << d.
rot
823 <<
"\" tilt=\"" << d.
tilt
824 <<
"\" roll=\"" << d.
roll
825 <<
"\" layer=\"" << d.
layer
828 dev <<
"</decals>\n";
831 FXMessageBox::error(
myParent, MBOX_OK,
"Storing failed!",
"%s", e.what());
856 std::string name =
"";
857 while (name.length() == 0) {
858 FXDialogBox dialog(
this,
"Enter a name", DECOR_TITLE | DECOR_BORDER);
859 FXVerticalFrame* content =
new FXVerticalFrame(&dialog, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10);
860 new FXLabel(content,
"Please enter an alphanumeric name: ", NULL, LAYOUT_FILL_X | JUSTIFY_LEFT);
861 FXTextField* text =
new FXTextField(content, 40, &dialog, FXDialogBox::ID_ACCEPT, TEXTFIELD_ENTER_ONLY | FRAME_SUNKEN | FRAME_THICK | LAYOUT_FILL_X);
862 new FXHorizontalSeparator(content, SEPARATOR_GROOVE | LAYOUT_FILL_X);
864 new FXButton(buttons,
"&OK", NULL, &dialog, FXDialogBox::ID_ACCEPT, BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT);
865 new FXButton(buttons,
"&Cancel", NULL, &dialog, FXDialogBox::ID_CANCEL, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT, 0, 0, 0, 0, 20, 20);
868 if (!dialog.execute()) {
871 name = text->getText().text();
872 for (
size_t i = 0; i < name.length(); ++i) {
873 if (name[i] !=
'_' && (name[i] <
'a' || name[i] >
'z') && (name[i] <
'A' || name[i] >
'Z') && (name[i] <
'0' || name[i] >
'9')) {
881 tmpSettings.
name = name;
897 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
922 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
930 FXFileDialog opendialog(
this,
"Export view settings");
932 opendialog.setSelectMode(SELECTFILE_ANY);
933 opendialog.setPatternList(
"*.xml");
945 FXMessageBox::error(
this, MBOX_OK,
"Storing failed!",
"%s", e.what());
955 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
963 FXFileDialog opendialog(
this,
"Import view settings");
965 opendialog.setSelectMode(SELECTFILE_ANY);
966 opendialog.setPatternList(
"*.xml");
970 if (opendialog.execute()) {
980 FXFileDialog opendialog(
this,
"Load Decals");
982 opendialog.setSelectMode(SELECTFILE_ANY);
983 opendialog.setPatternList(
"*.xml");
987 if (opendialog.execute()) {
997 FXFileDialog opendialog(
this,
"Save Decals");
999 opendialog.setSelectMode(SELECTFILE_ANY);
1000 opendialog.setPatternList(
"*.xml");
1016 sender->handle(
this, FXSEL(SEL_COMMAND, ID_ENABLE), ptr);
1034 header->setHeight(getApp()->getNormalFont()->getFontHeight() + getApp()->getNormalFont()->getFontAscent());
1036 for (k = 0; k < 7; k++) {
1037 header->setItemJustify(k, JUSTIFY_CENTER_X | JUSTIFY_TOP);
1038 header->setItemSize(k, 60);
1040 header->setItemSize(0, 150);
1043 std::vector<GUISUMOAbstractView::Decal>::iterator j;
1056 for (k = 0; k < 7; k++) {
1064 std::vector<FXColorWell*>& colors,
1065 std::vector<FXRealSpinDial*>& thresholds,
1066 std::vector<FXButton*>& buttons,
1067 FXCheckButton* interpolation,
1070 FXMatrix* m =
new FXMatrix(frame, 3,
1071 LAYOUT_FILL_X | MATRIX_BY_COLUMNS,
1072 0, 0, 0, 0, 10, 10, 0, 0, 5, 3);
1076 const bool fixed = scheme.
isFixed();
1077 std::vector<RGBColor>::const_iterator colIt = scheme.
getColors().begin();
1078 std::vector<SUMOReal>::const_iterator threshIt = scheme.
getThresholds().begin();
1079 std::vector<std::string>::const_iterator nameIt = scheme.
getNames().begin();
1080 FX::FXString buttonText =
"Add";
1081 while (colIt != scheme.
getColors().end()) {
1084 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1085 0, 0, 100, 0, 0, 0, 0, 0));
1087 new FXLabel(m, nameIt->c_str());
1092 threshDialer->setValue(*threshIt);
1093 thresholds.push_back(threshDialer);
1094 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));
1095 buttonText =
"Remove";
1103 interpolation->disable();
1105 if (colors.size() > 1) {
1106 interpolation->enable();
1107 if (interpolation->getCheck() != FALSE) {
1108 thresholds.front()->enable();
1110 thresholds.front()->disable();
1113 interpolation->disable();
1114 thresholds.front()->disable();
1126 LAYOUT_FILL_Y | LAYOUT_FIX_WIDTH, 0, 0, 470, 0);
1132 for (
int i = 1; i <= 5; ++i) {
1163 std::string value = i->
item->getText().text();
1165 if (value.find_first_not_of(
" ") == std::string::npos) {
1171 if (row == static_cast<int>(
myDecals->size())) {
1183 }
else if (row > static_cast<int>(
myDecals->size())) {
1187 d = (*myDecals)[row];
1201 std::string msg =
"The value must be a float, is:" + value;
1202 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1209 std::string msg =
"The value must be a float, is:" + value;
1210 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1217 std::string msg =
"The value must be a float, is:" + value;
1218 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1225 std::string msg =
"The value must be a float, is:" + value;
1226 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1233 std::string msg =
"The value must be a float, is:" + value;
1234 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1241 std::string msg =
"The value must be a float, is:" + value;
1242 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1248 (*myDecals)[row] = d;
1268 for (
int i = 0; i <
mySchemeName->getNumItems(); ++i) {
1280 const std::string& title,
1285 FXMatrix* m1 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1286 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1287 new FXLabel(m1,
"Size", 0, LAYOUT_CENTER_Y);
1288 mySizeDial =
new FXRealSpinDial(m1, 10, target, MID_SIMPLE_VIEW_COLORCHANGE,
1289 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
1292 FXMatrix* m2 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1293 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1294 new FXLabel(m2,
"Color", 0, LAYOUT_CENTER_Y);
1296 target, MID_SIMPLE_VIEW_COLORCHANGE,
1297 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | LAYOUT_SIDE_TOP | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1298 0, 0, 100, 0, 0, 0, 0, 0);
1310 myCheck->setCheck(settings.
show);
1311 mySizeDial->setValue(settings.
size);