51 #ifdef CHECK_MEMORY_LEAKS
53 #endif // CHECK_MEMORY_LEAKS
97 FXDialogBox(parent, "View Settings", DECOR_TITLE | DECOR_BORDER, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
98 myParent(parent), mySettings(settings),
99 myDecals(decals), myDecalsLock(decalsLock), myDecalsTable(0) {
100 myBackup = (*mySettings);
102 FXVerticalFrame* contentFrame =
103 new FXVerticalFrame(
this, LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y,
104 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
108 new FXHorizontalFrame(contentFrame, FRAME_THICK, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
109 mySchemeName =
new FXComboBox(frame0, 20,
this,
MID_SIMPLE_VIEW_NAMECHANGE, COMBOBOX_INSERT_LAST | FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_CENTER_Y | COMBOBOX_STATIC);
111 for (std::vector<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) {
112 size_t index = mySchemeName->appendItem((*i).c_str());
113 if ((*i) == mySettings->name) {
114 mySchemeName->setCurrentItem((FXint) index);
117 mySchemeName->setNumVisible(5);
119 new FXButton(frame0,
"\t\tSave the setting to registry",
121 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
122 new FXButton(frame0,
"\t\tRemove the setting from registry",
124 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
125 new FXButton(frame0,
"\t\tExport setting to file",
127 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
128 new FXButton(frame0,
"\t\tLoad setting from file",
130 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
135 new FXTabBook(contentFrame, 0, 0, TABBOOK_LEFTTABS | PACK_UNIFORM_WIDTH | PACK_UNIFORM_HEIGHT | LAYOUT_FILL_X | LAYOUT_FILL_Y | LAYOUT_RIGHT,
136 0, 0, 0, 0, 0, 0, 0, 0);
139 new FXTabItem(tabbook,
"Background", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
140 FXVerticalFrame* frame1 =
141 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
144 new FXMatrix(frame1, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
145 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
146 new FXLabel(m11,
"Color", 0, LAYOUT_CENTER_Y);
147 myBackgroundColor =
new FXColorWell(m11,
convert(settings->backgroundColor),
149 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | LAYOUT_SIDE_TOP | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
150 0, 0, 100, 0, 0, 0, 0, 0);
152 new FXHorizontalSeparator(frame1, SEPARATOR_GROOVE | LAYOUT_FILL_X);
154 FXVerticalFrame* frame11 =
155 new FXVerticalFrame(frame1, LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
156 new FXLabel(frame11,
"Decals:");
157 myDecalsFrame =
new FXVerticalFrame(frame11);
159 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);
160 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);
162 new FXHorizontalSeparator(frame1, SEPARATOR_GROOVE | LAYOUT_FILL_X);
165 new FXMatrix(frame1, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
166 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
169 myShowGrid->setCheck(mySettings->showGrid);
172 new FXMatrix(m12, 2, LAYOUT_CENTER_Y | LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
173 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
174 new FXLabel(m121,
"x-spacing", 0, LAYOUT_CENTER_Y);
177 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
178 myGridXSizeDialer->setRange(1, 10000);
179 myGridXSizeDialer->setValue(mySettings->gridXSize);
181 new FXMatrix(m12, 2, LAYOUT_CENTER_Y | LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
182 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
183 new FXLabel(m122,
"y-spacing", 0, LAYOUT_CENTER_Y);
186 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
187 myGridYSizeDialer->setRange(1, 10000);
188 myGridYSizeDialer->setValue(mySettings->gridXSize);
192 new FXTabItem(tabbook,
"Streets", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
194 FXVerticalFrame* frame2 =
195 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
197 new FXMatrix(frame2, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
198 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
199 new FXLabel(m21,
"Color by", 0, LAYOUT_CENTER_Y);
200 myLaneEdgeColorMode =
new FXComboBox(m21, 30,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
201 myLaneEdgeColorMode->setNumVisible(10);
202 myLaneColorInterpolation =
new FXCheckButton(m21,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
203 FXScrollWindow* genScroll =
new FXScrollWindow(frame2, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
204 myLaneColorSettingFrame =
205 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
208 if (GUIVisualizationSettings::UseMesoSim) {
209 mySettings->edgeColorer.fill(*myLaneEdgeColorMode);
212 mySettings->laneColorer.fill(*myLaneEdgeColorMode);
217 new FXHorizontalSeparator(frame2, SEPARATOR_GROOVE | LAYOUT_FILL_X);
219 new FXMatrix(frame2, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
220 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
222 myShowLaneBorders->setCheck(mySettings->laneShowBorders);
223 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
225 myShowLaneDecals->setCheck(mySettings->showLinkDecals);
226 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
228 myShowRails->setCheck(mySettings->showRails);
229 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
231 myHideMacroConnectors->setCheck(mySettings->hideConnectors);
232 new FXLabel(m22,
" ", 0, LAYOUT_CENTER_Y);
233 new FXLabel(m22,
"Exaggerate width by", 0, LAYOUT_CENTER_Y);
234 myLaneWidthUpscaleDialer =
236 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
237 myLaneWidthUpscaleDialer->setRange(0, 10000);
238 myLaneWidthUpscaleDialer->setValue(mySettings->laneWidthExaggeration);
241 myEdgeNamePanel =
new NamePanel(m22,
this,
"Show edge name", mySettings->edgeName);
242 myStreetNamePanel =
new NamePanel(m22,
this,
"Show street name", mySettings->streetName);
243 myInternalEdgeNamePanel =
new NamePanel(m22,
this,
"Show internal edge name", mySettings->internalEdgeName);
246 new FXTabItem(tabbook,
"Vehicles", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
247 FXVerticalFrame* frame3 =
248 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
251 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
252 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
253 new FXLabel(m31,
"Show As", 0, LAYOUT_CENTER_Y);
254 myVehicleShapeDetail =
new FXComboBox(m31, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
255 myVehicleShapeDetail->appendItem(
"'triangles'");
256 myVehicleShapeDetail->appendItem(
"'boxes'");
257 myVehicleShapeDetail->appendItem(
"'simple shapes'");
258 myVehicleShapeDetail->appendItem(
"'raster images'");
259 myVehicleShapeDetail->setNumVisible(4);
260 myVehicleShapeDetail->setCurrentItem(settings->vehicleQuality);
262 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
265 new FXMatrix(frame3, 3, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
266 0, 0, 0, 0, 10, 10, 10, 2, 5, 5);
267 new FXLabel(m32,
"Color by", 0, LAYOUT_CENTER_Y);
268 myVehicleColorMode =
new FXComboBox(m32, 20,
this,
MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC);
269 mySettings->vehicleColorer.fill(*myVehicleColorMode);
270 myVehicleColorMode->setNumVisible(10);
271 myVehicleColorInterpolation =
new FXCheckButton(m32,
"Interpolate",
this,
MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y | CHECKBUTTON_NORMAL);
273 FXScrollWindow* genScroll =
new FXScrollWindow(frame3, LAYOUT_FILL_X | LAYOUT_SIDE_TOP | FRAME_RAISED | FRAME_THICK | LAYOUT_FIX_HEIGHT, 0, 0, 0, 80);
274 myVehicleColorSettingFrame =
275 new FXVerticalFrame(genScroll, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 2, 8, 5, 2);
277 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
280 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
281 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
283 myShowBlinker->setCheck(mySettings->showBlinker);
284 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
286 myShowMinGap->setCheck(mySettings->drawMinGap);
287 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
293 myVehicleNamePanel =
new NamePanel(m33,
this,
"Show vehicle name", mySettings->vehicleName);
301 new FXHorizontalSeparator(frame3, SEPARATOR_GROOVE | LAYOUT_FILL_X);
304 new FXMatrix(frame3, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
305 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
307 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
308 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
309 new FXLabel(m341,
"Minimum size", 0, LAYOUT_CENTER_Y);
310 myVehicleMinSizeDialer =
312 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
313 myVehicleMinSizeDialer->setValue(mySettings->minVehicleSize);
315 new FXMatrix(m34, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
316 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
317 new FXLabel(m342,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
318 myVehicleUpscaleDialer =
320 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
321 myVehicleUpscaleDialer->setRange(0, 10000);
322 myVehicleUpscaleDialer->setValue(mySettings->vehicleExaggeration);
324 new FXTabItem(tabbook,
"Nodes", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
325 FXVerticalFrame* frame4 =
326 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
329 new FXMatrix(frame4, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
330 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
332 myShowTLIndex->setCheck(mySettings->drawLinkTLIndex);
333 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
335 myShowJunctionIndex->setCheck(mySettings->drawLinkJunctionIndex);
336 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
338 myShowLane2Lane->setCheck(mySettings->showLane2Lane);
339 new FXLabel(m33,
" ", 0, LAYOUT_CENTER_Y);
340 myJunctionNamePanel =
new NamePanel(m33,
this,
"Show junction name", mySettings->junctionName);
341 myInternalJunctionNamePanel =
new NamePanel(m33,
this,
"Show internal junction name", mySettings->internalJunctionName);
343 new FXTabItem(tabbook,
"Detectors/Trigger", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
344 FXVerticalFrame* frame5 =
345 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
348 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
349 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
350 myAddNamePanel =
new NamePanel(m51,
this,
"Show detector name", mySettings->addName);
351 new FXHorizontalSeparator(frame5 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
354 new FXMatrix(frame5, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
355 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
357 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
358 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
359 new FXLabel(m521,
"Minimum size", 0, LAYOUT_CENTER_Y);
360 myDetectorMinSizeDialer =
362 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
364 new FXMatrix(m52, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
365 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
366 myDetectorMinSizeDialer->setValue(mySettings->minAddSize);
367 new FXLabel(m522,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
368 myDetectorUpscaleDialer =
370 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
371 myDetectorUpscaleDialer->setRange(0, 10000);
372 myDetectorUpscaleDialer->setValue(mySettings->addExaggeration);
383 new FXTabItem(tabbook,
"POIs", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
384 FXVerticalFrame* frame6 =
385 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
388 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
389 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
390 myPoiNamePanel =
new NamePanel(m61,
this,
"Show poi name", mySettings->poiName);
391 new FXHorizontalSeparator(frame6 , SEPARATOR_GROOVE | LAYOUT_FILL_X);
394 new FXMatrix(frame6, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
395 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
397 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
398 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
399 new FXLabel(m621,
"Minimum size to show", 0, LAYOUT_CENTER_Y);
402 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
404 new FXMatrix(m62, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
405 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
406 myPOIMinSizeDialer->setValue(mySettings->minPOISize);
407 new FXLabel(m622,
"Exaggerate by", 0, LAYOUT_CENTER_Y);
410 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
411 myPOIUpscaleDialer->setRange(0, 10000);
412 myPOIUpscaleDialer->setValue(mySettings->addExaggeration);
416 new FXTabItem(tabbook,
"Legend", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
417 FXVerticalFrame* frame7 =
418 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
421 new FXMatrix(frame7, 2, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
422 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
424 myShowSizeLegend->setCheck(mySettings->showSizeLegend);
427 new FXTabItem(tabbook,
"openGL", NULL, TAB_LEFT_NORMAL, 0, 0, 0, 0, 4, 8, 4, 4);
428 FXVerticalFrame* frame8 =
429 new FXVerticalFrame(tabbook, FRAME_THICK | FRAME_RAISED, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2);
432 new FXMatrix(frame8, 1, LAYOUT_FILL_X | LAYOUT_TOP | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
433 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
435 myAntialiase->setCheck(mySettings->antialiase);
437 myDither->setCheck(mySettings->dither);
440 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);
441 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);
444 rebuildColorMatrices(
false);
488 FXString dataS = (
char*) data;
491 for (
int i = 0; i <
mySchemeName->getNumItems() - 1; ++i) {
555 bool doRebuildColorMatrices =
false;
564 if (GUIVisualizationSettings::UseMesoSim) {
612 std::vector<FXColorWell*>::const_iterator colIt =
myLaneColors.begin();
613 std::vector<FXRealSpinDial*>::const_iterator threshIt =
myLaneThresholds.begin();
614 std::vector<FXButton*>::const_iterator buttonIt =
myLaneButtons.begin();
619 if (sender == *colIt) {
623 if (sender == *threshIt) {
624 const SUMOReal val = (*threshIt)->getValue();
628 (*threshIt)->getRange(lo, hi);
629 (*threshIt)->setRange(lo, val);
634 (*threshIt)->getRange(lo, hi);
635 (*threshIt)->setRange(val, hi);
640 if (sender == *colIt) {
644 if (sender == *buttonIt) {
646 scheme.
addColor(
convert((*colIt)->getRGBA()), (*threshIt)->getValue());
650 doRebuildColorMatrices =
true;
661 doRebuildColorMatrices =
true;
664 doRebuildColorMatrices =
true;
668 std::vector<FXColorWell*>::const_iterator colIt =
myVehicleColors.begin();
675 if (sender == *colIt) {
679 if (sender == *threshIt) {
680 const SUMOReal val = (*threshIt)->getValue();
684 (*threshIt)->getRange(lo, hi);
685 (*threshIt)->setRange(lo, val);
690 (*threshIt)->getRange(lo, hi);
691 (*threshIt)->setRange(val, hi);
696 if (sender == *colIt) {
700 if (sender == *buttonIt) {
702 scheme.
addColor(
convert((*colIt)->getRGBA()), (*threshIt)->getValue());
706 doRebuildColorMatrices =
true;
717 doRebuildColorMatrices =
true;
720 doRebuildColorMatrices =
true;
747 if (doRebuildColorMatrices) {
751 getApp()->forceRefresh();
760 if (settingsName !=
"") {
761 FXint index =
mySchemeName->appendItem(settingsName.c_str());
773 std::vector<GUISUMOAbstractView::Decal>::iterator j;
776 dev <<
" <decal filename=\"" << d.
filename
777 <<
"\" centerX=\"" << d.
centerX
778 <<
"\" centerY=\"" << d.
centerY
779 <<
"\" width=\"" << d.
width
780 <<
"\" height=\"" << d.
height
781 <<
"\" rotation=\"" << d.
rot
782 <<
"\" layer=\"" << d.
layer
785 dev <<
"</decals>\n";
788 FXMessageBox::error(
myParent, MBOX_OK,
"Storing failed!",
"%s", e.what());
813 std::string name =
"";
814 while (name.length() == 0) {
815 FXDialogBox dialog(
this,
"Enter a name", DECOR_TITLE | DECOR_BORDER);
816 FXVerticalFrame* content =
new FXVerticalFrame(&dialog, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10);
817 new FXLabel(content,
"Please enter an alphanumeric name: ", NULL, LAYOUT_FILL_X | JUSTIFY_LEFT);
818 FXTextField* text =
new FXTextField(content, 40, &dialog, FXDialogBox::ID_ACCEPT, TEXTFIELD_ENTER_ONLY | FRAME_SUNKEN | FRAME_THICK | LAYOUT_FILL_X);
819 new FXHorizontalSeparator(content, SEPARATOR_GROOVE | LAYOUT_FILL_X);
821 new FXButton(buttons,
"&OK", NULL, &dialog, FXDialogBox::ID_ACCEPT, BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT);
822 new FXButton(buttons,
"&Cancel", NULL, &dialog, FXDialogBox::ID_CANCEL, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_RIGHT, 0, 0, 0, 0, 20, 20);
825 if (!dialog.execute()) {
828 name = text->getText().text();
829 for (
size_t i = 0; i < name.length(); ++i) {
830 if (name[i] !=
'_' && (name[i] <
'a' || name[i] >
'z') && (name[i] <
'A' || name[i] >
'Z') && (name[i] <
'0' || name[i] >
'9')) {
838 tmpSettings.
name = name;
854 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
879 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
887 FXFileDialog opendialog(
this,
"Export view settings");
889 opendialog.setSelectMode(SELECTFILE_ANY);
890 opendialog.setPatternList(
"*.xml");
902 FXMessageBox::error(
this, MBOX_OK,
"Storing failed!",
"%s", e.what());
912 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
920 FXFileDialog opendialog(
this,
"Import view settings");
922 opendialog.setSelectMode(SELECTFILE_ANY);
923 opendialog.setPatternList(
"*.xml");
927 if (opendialog.execute()) {
937 FXFileDialog opendialog(
this,
"Load Decals");
939 opendialog.setSelectMode(SELECTFILE_ANY);
940 opendialog.setPatternList(
"*.xml");
944 if (opendialog.execute()) {
954 FXFileDialog opendialog(
this,
"Save Decals");
956 opendialog.setSelectMode(SELECTFILE_ANY);
957 opendialog.setPatternList(
"*.xml");
973 sender->handle(
this, FXSEL(SEL_COMMAND, ID_ENABLE), ptr);
989 return FXRGB(c.
red() * 255., c.
green() * 255., c.
blue() * 255.);
1006 header->setHeight(getApp()->getNormalFont()->getFontHeight() + getApp()->getNormalFont()->getFontAscent());
1008 for (k = 0; k < 7; k++) {
1009 header->setItemJustify(k, JUSTIFY_CENTER_X | JUSTIFY_TOP);
1010 header->setItemSize(k, 60);
1012 header->setItemSize(0, 150);
1015 std::vector<GUISUMOAbstractView::Decal>::iterator j;
1028 for (k = 0; k < 7; k++) {
1039 LAYOUT_FILL_Y | LAYOUT_FIX_WIDTH, 0, 0, 470, 0);
1045 for (
int i = 1; i <= 5; ++i) {
1057 LAYOUT_FILL_X | MATRIX_BY_COLUMNS,
1058 0, 0, 0, 0, 10, 10, 0, 0, 5, 3);
1063 const bool fixed = scheme.
isFixed();
1064 const std::vector<RGBColor>& colors = scheme.
getColors();
1065 std::vector<RGBColor>::const_iterator colIt = colors.begin();
1066 std::vector<SUMOReal>::const_iterator threshIt = scheme.
getThresholds().begin();
1067 std::vector<std::string>::const_iterator nameIt = scheme.
getNames().begin();
1068 FX::FXString buttonText =
"Add";
1069 while (colIt != colors.end()) {
1072 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1073 0, 0, 100, 0, 0, 0, 0, 0));
1075 new FXLabel(m, nameIt->c_str());
1080 threshDialer->setValue(*threshIt);
1082 myLaneButtons.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));
1083 buttonText =
"Remove";
1093 if (colors.size() > 1) {
1114 LAYOUT_FILL_X | MATRIX_BY_COLUMNS,
1115 0, 0, 0, 0, 10, 10, 0, 0, 5, 3);
1121 std::vector<RGBColor>::const_iterator colIt = colors.begin();
1124 FX::FXString buttonText =
"Add";
1125 while (colIt != colors.end()) {
1128 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1129 0, 0, 100, 0, 0, 0, 0, 0));
1131 new FXLabel(m, nameIt->c_str());
1134 FXRealSpinDial* threshDialer =
1136 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK |
SPINDIAL_NOMAX);
1137 threshDialer->setValue(*threshIt);
1139 myVehicleButtons.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));
1140 buttonText =
"Remove";
1150 if (colors.size() > 1) {
1175 std::string value = i->
item->getText().text();
1177 if (value.find_first_not_of(
" ") == std::string::npos) {
1183 if (row == static_cast<int>(
myDecals->size())) {
1195 }
else if (row > static_cast<int>(
myDecals->size())) {
1199 d = (*myDecals)[row];
1213 std::string msg =
"The value must be a float, is:" + value;
1214 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1221 std::string msg =
"The value must be a float, is:" + value;
1222 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1229 std::string msg =
"The value must be a float, is:" + value;
1230 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1237 std::string msg =
"The value must be a float, is:" + value;
1238 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1245 std::string msg =
"The value must be a float, is:" + value;
1246 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1253 std::string msg =
"The value must be a float, is:" + value;
1254 FXMessageBox::error(
this, MBOX_OK,
"Number format error",
"%s", msg.c_str());
1260 (*myDecals)[row] = d;
1280 for (
int i = 0; i <
mySchemeName->getNumItems(); ++i) {
1292 const std::string& title,
1297 FXMatrix* m1 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1298 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1299 new FXLabel(m1,
"Size", 0, LAYOUT_CENTER_Y);
1300 mySizeDial =
new FXRealSpinDial(m1, 10, target, MID_SIMPLE_VIEW_COLORCHANGE,
1301 LAYOUT_CENTER_Y | LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
1304 FXMatrix* m2 =
new FXMatrix(parent, 2, LAYOUT_FILL_X | LAYOUT_BOTTOM | LAYOUT_LEFT | MATRIX_BY_COLUMNS,
1305 0, 0, 0, 0, 10, 10, 0, 0, 5, 5);
1306 new FXLabel(m2,
"Color", 0, LAYOUT_CENTER_Y);
1308 target, MID_SIMPLE_VIEW_COLORCHANGE,
1309 LAYOUT_FIX_WIDTH | LAYOUT_CENTER_Y | LAYOUT_SIDE_TOP | FRAME_SUNKEN | FRAME_THICK | ICON_AFTER_TEXT,
1310 0, 0, 100, 0, 0, 0, 0, 0);
1316 mySizeDial->getValue(),
convert(myColorWell->getRGBA()));
1322 myCheck->setCheck(settings.
show);
1323 mySizeDial->setValue(settings.
size);