00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef _MSC_VER
00025 #include <windows_config.h>
00026 #else
00027 #include <config.h>
00028 #endif
00029
00030 #include <fstream>
00031 #include "GUIDialog_ViewSettings.h"
00032 #include <utils/gui/windows/GUIAppEnum.h>
00033 #include <gui/GUIGlobals.h>
00034 #include <utils/gui/images/GUIImageGlobals.h>
00035 #include <utils/gui/windows/GUISUMOAbstractView.h>
00036 #include <utils/foxtools/MFXUtils.h>
00037 #include <utils/common/RGBColor.h>
00038 #include <utils/foxtools/MFXAddEditTypedTable.h>
00039 #include <utils/common/ToString.h>
00040 #include <utils/common/StringUtils.h>
00041 #include <utils/common/TplConvert.h>
00042 #include <utils/gui/settings/GUICompleteSchemeStorage.h>
00043 #include <utils/gui/images/GUIIconSubSys.h>
00044 #include <utils/gui/div/GUIIOGlobals.h>
00045 #include <utils/importio/LineReader.h>
00046 #include <utils/iodevices/OutputDevice.h>
00047 #include <utils/gui/settings/GUISettingsHandler.h>
00048
00049 #ifdef CHECK_MEMORY_LEAKS
00050 #include <foreign/nvwa/debug_new.h>
00051 #endif // CHECK_MEMORY_LEAKS
00052
00053
00054
00055
00056
00057 FXDEFMAP(GUIDialog_ViewSettings) GUIDialog_ViewSettingsMap[]= {
00058 FXMAPFUNC(SEL_CHANGED, MID_SIMPLE_VIEW_COLORCHANGE, GUIDialog_ViewSettings::onCmdColorChange),
00059 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_COLORCHANGE, GUIDialog_ViewSettings::onCmdColorChange),
00060 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_NAMECHANGE, GUIDialog_ViewSettings::onCmdNameChange),
00061 FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_OK, GUIDialog_ViewSettings::onCmdOk),
00062 FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_CANCEL, GUIDialog_ViewSettings::onCmdCancel),
00063 FXMAPFUNC(SEL_CHANGED, MFXAddEditTypedTable::ID_TEXT_CHANGED, GUIDialog_ViewSettings::onCmdEditTable),
00064
00065 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_SAVE, GUIDialog_ViewSettings::onCmdSaveSetting),
00066 FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_SAVE, GUIDialog_ViewSettings::onUpdSaveSetting),
00067 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_DELETE, GUIDialog_ViewSettings::onCmdDeleteSetting),
00068 FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_DELETE, GUIDialog_ViewSettings::onUpdDeleteSetting),
00069 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_EXPORT, GUIDialog_ViewSettings::onCmdExportSetting),
00070 FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_EXPORT, GUIDialog_ViewSettings::onUpdExportSetting),
00071 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_IMPORT, GUIDialog_ViewSettings::onCmdImportSetting),
00072 FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_IMPORT, GUIDialog_ViewSettings::onUpdImportSetting),
00073
00074 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_LOAD_DECALS, GUIDialog_ViewSettings::onCmdLoadDecals),
00075 FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_SAVE_DECALS, GUIDialog_ViewSettings::onCmdSaveDecals),
00076
00077 };
00078
00079
00080 FXIMPLEMENT(GUIDialog_ViewSettings, FXDialogBox, GUIDialog_ViewSettingsMap, ARRAYNUMBER(GUIDialog_ViewSettingsMap))
00081
00082
00083
00084
00085
00086 GUIDialog_ViewSettings::GUIDialog_ViewSettings(
00087 GUISUMOAbstractView *parent,
00088 GUIVisualizationSettings *settings,
00089 std::vector<GUISUMOAbstractView::Decal> *decals,
00090 MFXMutex *decalsLock) throw()
00091 : FXDialogBox(parent, "View Settings", DECOR_TITLE|DECOR_BORDER, 0,0,0,0, 0,0,0,0, 0,0),
00092 myParent(parent), mySettings(settings),
00093 myDecals(decals), myDecalsLock(decalsLock), myDecalsTable(0) {
00094 myBackup = (*mySettings);
00095
00096 FXVerticalFrame *contentFrame =
00097 new FXVerticalFrame(this, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
00098 0,0,0,0, 0,0,0,0, 2,2);
00099
00100 {
00101 FXHorizontalFrame *frame0 =
00102 new FXHorizontalFrame(contentFrame,FRAME_THICK, 0,0,0,0, 0,0,0,0, 2,2);
00103 mySchemeName = new FXComboBox(frame0, 20, this, MID_SIMPLE_VIEW_NAMECHANGE, COMBOBOX_INSERT_LAST|FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_CENTER_Y|COMBOBOX_STATIC);
00104 const std::vector<std::string> &names = gSchemeStorage.getNames();
00105 for (std::vector<std::string>::const_iterator i=names.begin(); i!=names.end(); ++i) {
00106 size_t index = mySchemeName->appendItem((*i).c_str());
00107 if ((*i) == mySettings->name) {
00108 mySchemeName->setCurrentItem((FXint) index);
00109 }
00110 }
00111 mySchemeName->setNumVisible(5);
00112
00113 new FXButton(frame0,"\t\tSave the setting to registry",
00114 GUIIconSubSys::getIcon(ICON_SAVEDB), this, MID_SIMPLE_VIEW_SAVE,
00115 ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00116 new FXButton(frame0,"\t\tRemove the setting from registry",
00117 GUIIconSubSys::getIcon(ICON_REMOVEDB), this, MID_SIMPLE_VIEW_DELETE,
00118 ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00119 new FXButton(frame0,"\t\tExport setting to file",
00120 GUIIconSubSys::getIcon(ICON_SAVE), this, MID_SIMPLE_VIEW_EXPORT,
00121 ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00122 new FXButton(frame0,"\t\tLoad setting from file",
00123 GUIIconSubSys::getIcon(ICON_OPEN_CONFIG), this, MID_SIMPLE_VIEW_IMPORT,
00124 ICON_ABOVE_TEXT|BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00125
00126 }
00127
00128 FXTabBook *tabbook =
00129 new FXTabBook(contentFrame,0,0,TABBOOK_LEFTTABS|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT,
00130 0,0,0,0, 0,0,0,0);
00131 {
00132
00133 new FXTabItem(tabbook,"Background",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00134 FXVerticalFrame *frame1 =
00135 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00136
00137 FXMatrix *m11 =
00138 new FXMatrix(frame1,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00139 0,0,0,0, 10,10,10,10, 5,5);
00140 new FXLabel(m11, "Color", 0, LAYOUT_CENTER_Y);
00141 myBackgroundColor = new FXColorWell(m11, convert(settings->backgroundColor),
00142 this, MID_SIMPLE_VIEW_COLORCHANGE,
00143 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|LAYOUT_SIDE_TOP|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
00144 0, 0, 100, 0, 0, 0, 0, 0);
00145
00146 new FXHorizontalSeparator(frame1,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00147
00148 FXVerticalFrame *frame11 =
00149 new FXVerticalFrame(frame1,LAYOUT_FILL_Y, 0,0,0,0, 10,10,10,10, 5,5);
00150 new FXLabel(frame11, "Decals:");
00151 myDecalsFrame = new FXVerticalFrame(frame11);
00152 FXHorizontalFrame *frame111 = new FXHorizontalFrame(frame11, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,0,0,0,0, 10,10,5,5);
00153 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);
00154 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);
00155
00156 new FXHorizontalSeparator(frame1,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00157
00158 FXMatrix *m12 =
00159 new FXMatrix(frame1,2,LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00160 0,0,0,0, 10,10,10,10, 5,5);
00161 myShowGrid =
00162 new FXCheckButton(m12, "Show grid", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00163 myShowGrid->setCheck(mySettings->showGrid);
00164 new FXLabel(m12, "");
00165 FXMatrix *m121 =
00166 new FXMatrix(m12,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00167 0,0,0,0, 10,10,0,0, 5,5);
00168 new FXLabel(m121, "x-spacing", 0, LAYOUT_CENTER_Y);
00169 myGridXSizeDialer =
00170 new FXRealSpinDial(m121, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00171 LAYOUT_CENTER_Y|LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00172 myGridXSizeDialer->setRange(1, 10000);
00173 myGridXSizeDialer->setValue(mySettings->gridXSize);
00174 FXMatrix *m122 =
00175 new FXMatrix(m12,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00176 0,0,0,0, 10,10,0,0, 5,5);
00177 new FXLabel(m122, "y-spacing", 0, LAYOUT_CENTER_Y);
00178 myGridYSizeDialer =
00179 new FXRealSpinDial(m122, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00180 LAYOUT_CENTER_Y|LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00181 myGridYSizeDialer->setRange(1, 10000);
00182 myGridYSizeDialer->setValue(mySettings->gridXSize);
00183 }
00184 {
00185
00186 new FXTabItem(tabbook,"Streets",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00187
00188 FXVerticalFrame *frame2 =
00189 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00190 FXMatrix *m21 =
00191 new FXMatrix(frame2,3,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00192 0,0,0,0, 10,10,10,2, 5,5);
00193 new FXLabel(m21, "Color by", 0, LAYOUT_CENTER_Y);
00194 myLaneEdgeColorMode = new FXComboBox(m21, 30, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_TOP|COMBOBOX_STATIC);
00195 myLaneEdgeColorMode->setNumVisible(10);
00196 myLaneColorInterpolation = new FXCheckButton(m21, "Interpolate", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00197 FXScrollWindow *genScroll = new FXScrollWindow(frame2, LAYOUT_FILL_X|LAYOUT_SIDE_TOP|FRAME_RAISED|FRAME_THICK|LAYOUT_FIX_HEIGHT, 0,0,0,80);
00198 myLaneColorSettingFrame =
00199 new FXVerticalFrame(genScroll, LAYOUT_FILL_X|LAYOUT_FILL_Y, 0,0,0,0, 10,10,2,8, 5,2);
00200
00201 #ifdef HAVE_MESOSIM
00202 if (MSGlobals::gUseMesoSim) {
00203 mySettings->edgeColorer.fill(*myLaneEdgeColorMode);
00204 } else {
00205 #endif
00206 mySettings->laneColorer.fill(*myLaneEdgeColorMode);
00207 #ifdef HAVE_MESOSIM
00208 }
00209 #endif
00210
00211 new FXHorizontalSeparator(frame2,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00212 FXMatrix *m22 =
00213 new FXMatrix(frame2,2,LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00214 0,0,0,0, 10,10,10,10, 5,5);
00215 myShowLaneBorders = new FXCheckButton(m22, "Show lane borders", this, MID_SIMPLE_VIEW_COLORCHANGE);
00216 myShowLaneBorders->setCheck(mySettings->laneShowBorders);
00217 new FXLabel(m22, " ", 0, LAYOUT_CENTER_Y);
00218 myShowLaneDecals = new FXCheckButton(m22, "Show link decals", this, MID_SIMPLE_VIEW_COLORCHANGE);
00219 myShowLaneDecals->setCheck(mySettings->showLinkDecals);
00220 new FXLabel(m22, " ", 0, LAYOUT_CENTER_Y);
00221 myShowRails = new FXCheckButton(m22, "Show rails", this, MID_SIMPLE_VIEW_COLORCHANGE);
00222 myShowRails->setCheck(mySettings->showRails);
00223 new FXLabel(m22, " ", 0, LAYOUT_CENTER_Y);
00224 myHideMacroConnectors = new FXCheckButton(m22, "Hide macro connectors", this, MID_SIMPLE_VIEW_COLORCHANGE);
00225 myHideMacroConnectors->setCheck(mySettings->hideConnectors);
00226 new FXLabel(m22, " ", 0, LAYOUT_CENTER_Y);
00227 myShowEdgeName = new FXCheckButton(m22, "Show edge name", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00228 myShowEdgeName->setCheck(mySettings->drawEdgeName);
00229 new FXLabel(m22, "");
00230 FXMatrix *m221 =
00231 new FXMatrix(m22,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00232 0,0,0,0, 10,10,0,0, 5,5);
00233 new FXLabel(m221, "Size", 0, LAYOUT_CENTER_Y);
00234 myEdgeNameSizeDialer =
00235 new FXRealSpinDial(m221, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00236 LAYOUT_CENTER_Y|LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00237 myEdgeNameSizeDialer->setRange(10, 1000);
00238 myEdgeNameSizeDialer->setValue(mySettings->edgeNameSize);
00239 FXMatrix *m222 =
00240 new FXMatrix(m22,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00241 0,0,0,0, 10,10,0,0, 5,5);
00242 new FXLabel(m222, "Color", 0, LAYOUT_CENTER_Y);
00243 myEdgeNameColor = new FXColorWell(m222, convert(settings->edgeNameColor),
00244 this, MID_SIMPLE_VIEW_COLORCHANGE,
00245 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|LAYOUT_SIDE_TOP|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
00246 0, 0, 100, 0, 0, 0, 0, 0);
00247 myShowInternalEdgeName = new FXCheckButton(m22, "Show internal edge name", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00248 myShowInternalEdgeName->setCheck(mySettings->drawInternalEdgeName);
00249 new FXLabel(m22, "");
00250 FXMatrix *m223 =
00251 new FXMatrix(m22,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00252 0,0,0,0, 10,10,0,0, 5,5);
00253 new FXLabel(m223, "Size", 0, LAYOUT_CENTER_Y);
00254 myInternalEdgeNameSizeDialer =
00255 new FXRealSpinDial(m223, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00256 LAYOUT_CENTER_Y|LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00257 myInternalEdgeNameSizeDialer->setRange(10, 1000);
00258 myInternalEdgeNameSizeDialer->setValue(mySettings->internalEdgeNameSize);
00259 FXMatrix *m224 =
00260 new FXMatrix(m22,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00261 0,0,0,0, 10,10,0,0, 5,5);
00262 new FXLabel(m224, "Color", 0, LAYOUT_CENTER_Y);
00263 myInternalEdgeNameColor = new FXColorWell(m224, convert(settings->internalEdgeNameColor),
00264 this, MID_SIMPLE_VIEW_COLORCHANGE,
00265 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|LAYOUT_SIDE_TOP|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
00266 0, 0, 100, 0, 0, 0, 0, 0);
00267 }
00268 {
00269 new FXTabItem(tabbook,"Vehicles",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00270 FXVerticalFrame *frame3 =
00271 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00272
00273 FXMatrix *m31 =
00274 new FXMatrix(frame3,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00275 0,0,0,0, 10,10,10,2, 5,5);
00276 new FXLabel(m31, "Show As", 0, LAYOUT_CENTER_Y);
00277 myVehicleShapeDetail = new FXComboBox(m31, 20, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_TOP|COMBOBOX_STATIC);
00278 myVehicleShapeDetail->appendItem("'triangles'");
00279 myVehicleShapeDetail->appendItem("'boxes'");
00280 myVehicleShapeDetail->appendItem("'simple shapes'");
00281 myVehicleShapeDetail->setNumVisible(3);
00282 myVehicleShapeDetail->setCurrentItem(settings->vehicleQuality);
00283
00284 new FXHorizontalSeparator(frame3,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00285
00286 FXMatrix *m32 =
00287 new FXMatrix(frame3,3,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00288 0,0,0,0, 10,10,10,2, 5,5);
00289 new FXLabel(m32, "Color by", 0, LAYOUT_CENTER_Y);
00290 myVehicleColorMode = new FXComboBox(m32, 20, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_TOP|COMBOBOX_STATIC);
00291 mySettings->vehicleColorer.fill(*myVehicleColorMode);
00292 myVehicleColorMode->setNumVisible(10);
00293 myVehicleColorInterpolation = new FXCheckButton(m32, "Interpolate", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00294
00295 FXScrollWindow *genScroll = new FXScrollWindow(frame3, LAYOUT_FILL_X|LAYOUT_SIDE_TOP|FRAME_RAISED|FRAME_THICK|LAYOUT_FIX_HEIGHT, 0,0,0,80);
00296 myVehicleColorSettingFrame =
00297 new FXVerticalFrame(genScroll, LAYOUT_FILL_X|LAYOUT_FILL_Y, 0,0,0,0, 10,10,2,8, 5,2);
00298
00299 new FXHorizontalSeparator(frame3,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00300
00301 FXMatrix *m33 =
00302 new FXMatrix(frame3,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00303 0,0,0,0, 10,10,10,10, 5,5);
00304 myShowBlinker = new FXCheckButton(m33, "Show blinker", this, MID_SIMPLE_VIEW_COLORCHANGE);
00305 myShowBlinker->setCheck(mySettings->showBlinker);
00306 new FXLabel(m33, " ", 0, LAYOUT_CENTER_Y);
00307
00308
00309
00310
00311
00312 myShowVehicleName = new FXCheckButton(m33, "Show vehicle name", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00313 myShowVehicleName->setCheck(mySettings->drawVehicleName);
00314 new FXLabel(m33, "");
00315 FXMatrix *m331 =
00316 new FXMatrix(m33,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00317 0,0,0,0, 10,10,0,0, 5,5);
00318 new FXLabel(m331, "Size", 0, LAYOUT_CENTER_Y);
00319 myVehicleNameSizeDialer =
00320 new FXRealSpinDial(m331, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00321 LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL|FRAME_SUNKEN|FRAME_THICK);
00322 myVehicleNameSizeDialer->setRange(10, 1000);
00323 myVehicleNameSizeDialer->setValue(mySettings->vehicleNameSize);
00324 FXMatrix *m332 =
00325 new FXMatrix(m33,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00326 0,0,0,0, 10,10,0,0, 5,5);
00327 new FXLabel(m332, "Color", 0, LAYOUT_CENTER_Y);
00328 myVehicleNameColor = new FXColorWell(m332, convert(settings->vehicleNameColor),
00329 this, MID_SIMPLE_VIEW_COLORCHANGE,
00330 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|LAYOUT_SIDE_TOP|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
00331 0, 0, 100, 0, 0, 0, 0, 0);
00332
00333
00334
00335
00336
00337
00338
00339 new FXHorizontalSeparator(frame3,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00340
00341 FXMatrix *m34 =
00342 new FXMatrix(frame3,2,LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00343 0,0,0,0, 10,10,10,10, 5,5);
00344 FXMatrix *m341 =
00345 new FXMatrix(m34,2,LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00346 0,0,0,0, 10,10,0,0, 5,5);
00347 new FXLabel(m341, "Minimum size", 0, LAYOUT_CENTER_Y);
00348 myVehicleMinSizeDialer =
00349 new FXRealSpinDial(m341, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00350 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00351 myVehicleMinSizeDialer->setValue(mySettings->minVehicleSize);
00352 FXMatrix *m342 =
00353 new FXMatrix(m34,2,LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00354 0,0,0,0, 10,10,0,0, 5,5);
00355 new FXLabel(m342, "Exaggerate by", 0, LAYOUT_CENTER_Y);
00356 myVehicleUpscaleDialer =
00357 new FXRealSpinDial(m342, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00358 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00359 myVehicleUpscaleDialer->setRange(1, 100);
00360 myVehicleUpscaleDialer->setValue(mySettings->vehicleExaggeration);
00361 } {
00362 new FXTabItem(tabbook,"Nodes",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00363 FXVerticalFrame *frame4 =
00364 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00365
00366 FXMatrix *m33 =
00367 new FXMatrix(frame4,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00368 0,0,0,0, 10,10,10,10, 5,5);
00369 myShowTLIndex = new FXCheckButton(m33, "Show link tls index", this, MID_SIMPLE_VIEW_COLORCHANGE);
00370 myShowTLIndex->setCheck(mySettings->drawLinkTLIndex);
00371 new FXLabel(m33, " ", 0, LAYOUT_CENTER_Y);
00372 myShowJunctionIndex = new FXCheckButton(m33, "Show link junction index", this, MID_SIMPLE_VIEW_COLORCHANGE);
00373 myShowJunctionIndex->setCheck(mySettings->drawLinkJunctionIndex);
00374 new FXLabel(m33, " ", 0, LAYOUT_CENTER_Y);
00375 myShowLane2Lane = new FXCheckButton(m33, "Show lane to lane connections", this, MID_SIMPLE_VIEW_COLORCHANGE);
00376 myShowLane2Lane->setCheck(mySettings->showLane2Lane);
00377 new FXLabel(m33, " ", 0, LAYOUT_CENTER_Y);
00378
00379 myShowJunctionName = new FXCheckButton(m33, "Show junction name", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00380 myShowJunctionName->setCheck(mySettings->drawJunctionName);
00381 new FXLabel(m33, "");
00382 FXMatrix *m331 =
00383 new FXMatrix(m33,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00384 0,0,0,0, 10,10,0,0, 5,5);
00385 new FXLabel(m331, "Size", 0, LAYOUT_CENTER_Y);
00386 myJunctionNameSizeDialer =
00387 new FXRealSpinDial(m331, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00388 FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y);
00389 myJunctionNameSizeDialer->setRange(10, 1000);
00390 myJunctionNameSizeDialer->setValue(mySettings->junctionNameSize);
00391 FXMatrix *m332 =
00392 new FXMatrix(m33,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00393 0,0,0,0, 10,10,0,0, 5,5);
00394 new FXLabel(m332, "Color", 0, LAYOUT_CENTER_Y);
00395 myJunctionNameColor = new FXColorWell(m332, convert(settings->junctionNameColor),
00396 this, MID_SIMPLE_VIEW_COLORCHANGE,
00397 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|LAYOUT_SIDE_TOP|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
00398 0, 0, 100, 0, 0, 0, 0, 0);
00399 } {
00400 new FXTabItem(tabbook,"Detectors/Trigger",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00401 FXVerticalFrame *frame5 =
00402 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00403
00404 FXMatrix *m51 =
00405 new FXMatrix(frame5,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00406 0,0,0,0, 10,10,10,10, 5,5);
00407 myShowAddName = new FXCheckButton(m51, "Show detector name", this, MID_SIMPLE_VIEW_COLORCHANGE);
00408 myShowAddName->setCheck(mySettings->drawAddName);
00409 new FXLabel(m51, "");
00410 FXMatrix *m511 =
00411 new FXMatrix(m51,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00412 0,0,0,0, 10,10,0,0, 5,5);
00413 new FXLabel(m511, "Size", 0, LAYOUT_CENTER_Y);
00414 myAddNameSizeDialer =
00415 new FXRealSpinDial(m511, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00416 FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y);
00417 myAddNameSizeDialer->setRange(10, 1000);
00418 myAddNameSizeDialer->setValue(mySettings->addNameSize);
00419 FXMatrix *m512 =
00420 new FXMatrix(m51,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00421 0,0,0,0, 10,10,0,0, 5,5);
00422 new FXLabel(m512, "");
00423 new FXLabel(m512, "");
00424
00425 new FXHorizontalSeparator(frame5 ,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00426
00427 FXMatrix *m52 =
00428 new FXMatrix(frame5,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00429 0,0,0,0, 10,10,10,10, 5,5);
00430 FXMatrix *m521 =
00431 new FXMatrix(m52,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00432 0,0,0,0, 10,10,0,0, 5,5);
00433 new FXLabel(m521, "Minimum size", 0, LAYOUT_CENTER_Y);
00434 myDetectorMinSizeDialer =
00435 new FXRealSpinDial(m521, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00436 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00437 FXMatrix *m522 =
00438 new FXMatrix(m52,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00439 0,0,0,0, 10,10,0,0, 5,5);
00440 myDetectorMinSizeDialer->setValue(mySettings->minAddSize);
00441 new FXLabel(m522, "Exaggerate by", 0, LAYOUT_CENTER_Y);
00442 myDetectorUpscaleDialer =
00443 new FXRealSpinDial(m522, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00444 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00445 myDetectorUpscaleDialer->setRange(1, 100);
00446 myDetectorUpscaleDialer->setValue(mySettings->addExaggeration);
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456 } {
00457 new FXTabItem(tabbook,"POIs",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00458 FXVerticalFrame *frame6 =
00459 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00460
00461 FXMatrix *m61 =
00462 new FXMatrix(frame6,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00463 0,0,0,0, 10,10,10,10, 5,5);
00464 myShowPOIName = new FXCheckButton(m61, "Show poi name", this, MID_SIMPLE_VIEW_COLORCHANGE, LAYOUT_CENTER_Y|CHECKBUTTON_NORMAL);
00465 myShowPOIName->setCheck(mySettings->drawPOIName);
00466 new FXLabel(m61, "");
00467 FXMatrix *m611 =
00468 new FXMatrix(m61,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00469 0,0,0,0, 10,10,0,0, 5,5);
00470 new FXLabel(m611, "Size", 0, LAYOUT_CENTER_Y);
00471 myPOINameSizeDialer =
00472 new FXRealSpinDial(m611, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00473 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00474 myPOINameSizeDialer->setRange(10, 1000);
00475 myPOINameSizeDialer->setValue(mySettings->poiNameSize);
00476 FXMatrix *m612 =
00477 new FXMatrix(m61,2,LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_BOTTOM|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00478 0,0,0,0, 10,10,0,0, 5,5);
00479 new FXLabel(m612, "Color", 0, LAYOUT_CENTER_Y);
00480 myPOINameColor = new FXColorWell(m612, convert(settings->poiNameColor),
00481 this, MID_SIMPLE_VIEW_COLORCHANGE,
00482 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|LAYOUT_SIDE_TOP|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
00483 0, 0, 100, 0, 0, 0, 0, 0);
00484
00485 new FXHorizontalSeparator(frame6 ,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00486
00487 FXMatrix *m62 =
00488 new FXMatrix(frame6,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00489 0,0,0,0, 10,10,10,10, 5,5);
00490 FXMatrix *m621 =
00491 new FXMatrix(m62,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00492 0,0,0,0, 10,10,0,0, 5,5);
00493 new FXLabel(m621, "Minimum size to show", 0, LAYOUT_CENTER_Y);
00494 myPOIMinSizeDialer =
00495 new FXRealSpinDial(m621, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00496 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00497 FXMatrix *m622 =
00498 new FXMatrix(m62,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00499 0,0,0,0, 10,10,0,0, 5,5);
00500 myPOIMinSizeDialer->setValue(mySettings->minPOISize);
00501 new FXLabel(m622, "Exaggerate by", 0, LAYOUT_CENTER_Y);
00502 myPOIUpscaleDialer =
00503 new FXRealSpinDial(m622, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
00504 LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK);
00505 myPOIUpscaleDialer->setRange(1, 1000);
00506 myPOIUpscaleDialer->setValue(mySettings->addExaggeration);
00507
00508
00509 } {
00510 new FXTabItem(tabbook,"Legend",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00511 FXVerticalFrame *frame7 =
00512 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00513
00514 FXMatrix *m72 =
00515 new FXMatrix(frame7,2,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00516 0,0,0,0, 10,10,10,10, 5,5);
00517 myShowSizeLegend = new FXCheckButton(m72, "Show Size Legend", this, MID_SIMPLE_VIEW_COLORCHANGE);
00518 myShowSizeLegend->setCheck(mySettings->showSizeLegend);
00519 new FXLabel(m72, "");
00520 } {
00521 new FXTabItem(tabbook,"openGL",NULL,TAB_LEFT_NORMAL, 0,0,0,0, 4,8,4,4);
00522 FXVerticalFrame *frame8 =
00523 new FXVerticalFrame(tabbook,FRAME_THICK|FRAME_RAISED, 0,0,0,0, 0,0,0,0, 2,2);
00524
00525 FXMatrix *m82 =
00526 new FXMatrix(frame8,1,LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT|MATRIX_BY_COLUMNS,
00527 0,0,0,0, 10,10,10,10, 5,5);
00528 myAntialiase = new FXCheckButton(m82, "Antialiase", this, MID_SIMPLE_VIEW_COLORCHANGE);
00529 myAntialiase->setCheck(mySettings->antialiase);
00530 myDither = new FXCheckButton(m82, "Dither", this, MID_SIMPLE_VIEW_COLORCHANGE);
00531 myDither->setCheck(mySettings->dither);
00532 }
00533 FXHorizontalFrame *f2 = new FXHorizontalFrame(contentFrame, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,0,0,0,0, 10,10,5,5);
00534 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);
00535 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);
00536 initial->setFocus();
00537
00538 rebuildColorMatrices(false);
00539 setIcon(GUIIconSubSys::getIcon(ICON_EMPTY));
00540 }
00541
00542
00543 GUIDialog_ViewSettings::~GUIDialog_ViewSettings() throw() {
00544 myParent->remove(this);
00545 }
00546
00547
00548 void
00549 GUIDialog_ViewSettings::setCurrent(GUIVisualizationSettings *settings) throw() {
00550 mySettings = settings;
00551 myBackup = (*settings);
00552 onCmdNameChange(0, 0, 0);
00553 }
00554
00555
00556 long
00557 GUIDialog_ViewSettings::onCmdOk(FXObject*,FXSelector,void*) {
00558 hide();
00559 return 1;
00560 }
00561
00562
00563 long
00564 GUIDialog_ViewSettings::onCmdCancel(FXObject*,FXSelector,void*) {
00565 hide();
00566 (*mySettings) = myBackup;
00567 return 1;
00568 }
00569
00570
00571 long
00572 GUIDialog_ViewSettings::onCmdNameChange(FXObject*,FXSelector,void*data) {
00573 if (data!=0) {
00574 FXString dataS = (char*) data;
00575
00576 if (dataS==mySchemeName->getItemText(mySchemeName->getNumItems()-1)) {
00577 for (int i=0; i<mySchemeName->getNumItems()-1; ++i) {
00578 if (dataS==mySchemeName->getItemText(i)) {
00579 mySchemeName->removeItem(i);
00580 }
00581 }
00582 }
00583 myBackup = gSchemeStorage.get(dataS.text());
00584 mySettings = &gSchemeStorage.get(dataS.text());
00585 }
00586 rebuildColorMatrices(true);
00587
00588 myBackgroundColor->setRGBA(convert(mySettings->backgroundColor));
00589
00590 myLaneEdgeColorMode->setCurrentItem((FXint) mySettings->getLaneEdgeMode());
00591 myShowLaneBorders->setCheck(mySettings->laneShowBorders);
00592 myShowLaneDecals->setCheck(mySettings->showLinkDecals);
00593 myShowRails->setCheck(mySettings->showRails);
00594 myShowEdgeName->setCheck(mySettings->drawEdgeName);
00595 myEdgeNameSizeDialer->setValue(mySettings->edgeNameSize);
00596 myEdgeNameColor->setRGBA(convert(mySettings->edgeNameColor));
00597 myShowInternalEdgeName->setCheck(mySettings->drawInternalEdgeName);
00598 myInternalEdgeNameSizeDialer->setValue(mySettings->internalEdgeNameSize);
00599 myInternalEdgeNameColor->setRGBA(convert(mySettings->internalEdgeNameColor));
00600 myHideMacroConnectors->setCheck(mySettings->hideConnectors);
00601
00602 myVehicleColorMode->setCurrentItem((FXint) mySettings->vehicleColorer.getActive());
00603 myVehicleShapeDetail->setCurrentItem(mySettings->vehicleQuality);
00604 myVehicleUpscaleDialer->setValue(mySettings->vehicleExaggeration);
00605 myVehicleMinSizeDialer->setValue(mySettings->minVehicleSize);
00606 myShowBlinker->setCheck(mySettings->showBlinker);
00607
00608
00609
00610 myShowVehicleName->setCheck(mySettings->drawVehicleName);
00611 myVehicleNameSizeDialer->setValue(mySettings->vehicleNameSize);
00612 myVehicleNameColor->setRGBA(convert(mySettings->vehicleNameColor));
00613
00614 myShowTLIndex->setCheck(mySettings->drawLinkTLIndex);
00615 myShowJunctionIndex->setCheck(mySettings->drawLinkJunctionIndex);
00616 myShowJunctionName->setCheck(mySettings->drawJunctionName);
00617 myJunctionNameSizeDialer->setValue(mySettings->junctionNameSize);
00618 myJunctionNameColor->setRGBA(convert(mySettings->junctionNameColor));
00619
00620 myDetectorUpscaleDialer->setValue(mySettings->addExaggeration);
00621 myDetectorMinSizeDialer->setValue(mySettings->minAddSize);
00622 myShowAddName->setCheck(mySettings->drawAddName);
00623 myAddNameSizeDialer->setValue(mySettings->addNameSize);
00624
00625
00626 myPOIUpscaleDialer->setValue(mySettings->poiExaggeration);
00627 myPOIMinSizeDialer->setValue(mySettings->minPOISize);
00628 myShowPOIName->setCheck(mySettings->drawPOIName);
00629 myPOINameSizeDialer->setValue(mySettings->poiNameSize);
00630 myPOINameColor->setRGBA(convert(mySettings->poiNameColor));
00631
00632 myShowLane2Lane->setCheck(mySettings->showLane2Lane);
00633 myAntialiase->setCheck(mySettings->antialiase);
00634 myDither->setCheck(mySettings->dither);
00635 myShowSizeLegend->setCheck(mySettings->showSizeLegend);
00636
00637 myParent->setColorScheme(mySettings->name);
00638 update();
00639 myParent->update();
00640 return 1;
00641 }
00642
00643
00644 long
00645 GUIDialog_ViewSettings::onCmdColorChange(FXObject*sender,FXSelector,void*val) {
00646 GUIVisualizationSettings tmpSettings = *mySettings;
00647 size_t prevLaneMode = mySettings->getLaneEdgeMode();
00648 size_t prevVehicleMode = mySettings->vehicleColorer.getActive();
00649 bool doRebuildColorMatrices = false;
00650
00651 tmpSettings.name = mySettings->name;
00652 tmpSettings.backgroundColor = convert(myBackgroundColor->getRGBA());
00653 tmpSettings.showGrid = myShowGrid->getCheck()!=0;
00654 tmpSettings.gridXSize = (SUMOReal) myGridXSizeDialer->getValue();
00655 tmpSettings.gridYSize = (SUMOReal) myGridYSizeDialer->getValue();
00656
00657 #ifdef HAVE_MESOSIM
00658 if (MSGlobals::gUseMesoSim) {
00659 tmpSettings.edgeColorer.setActive(myLaneEdgeColorMode->getCurrentItem());
00660 } else {
00661 #endif
00662 tmpSettings.laneColorer.setActive(myLaneEdgeColorMode->getCurrentItem());
00663 #ifdef HAVE_MESOSIM
00664 }
00665 #endif
00666 tmpSettings.laneShowBorders = myShowLaneBorders->getCheck()!=0;
00667 tmpSettings.showLinkDecals = myShowLaneDecals->getCheck()!=0;
00668 tmpSettings.showRails = myShowRails->getCheck()!=0;
00669 tmpSettings.drawEdgeName = myShowEdgeName->getCheck()!=0;
00670 tmpSettings.edgeNameSize = (SUMOReal) myEdgeNameSizeDialer->getValue();
00671 tmpSettings.edgeNameColor = convert(myEdgeNameColor->getRGBA());
00672 tmpSettings.drawInternalEdgeName = myShowInternalEdgeName->getCheck()!=0;
00673 tmpSettings.internalEdgeNameSize = (SUMOReal) myInternalEdgeNameSizeDialer->getValue();
00674 tmpSettings.internalEdgeNameColor = convert(myInternalEdgeNameColor->getRGBA());
00675 tmpSettings.hideConnectors = myHideMacroConnectors->getCheck()!=0;
00676
00677 tmpSettings.vehicleColorer.setActive(myVehicleColorMode->getCurrentItem());
00678 tmpSettings.vehicleQuality = myVehicleShapeDetail->getCurrentItem();
00679 tmpSettings.vehicleExaggeration = (SUMOReal) myVehicleUpscaleDialer->getValue();
00680 tmpSettings.minVehicleSize = (SUMOReal) myVehicleMinSizeDialer->getValue();
00681 tmpSettings.showBlinker = myShowBlinker->getCheck()!=0;
00682
00683
00684
00685 tmpSettings.drawVehicleName = myShowVehicleName->getCheck()!=0;
00686 tmpSettings.vehicleNameSize = (SUMOReal) myVehicleNameSizeDialer->getValue();
00687 tmpSettings.vehicleNameColor = convert(myVehicleNameColor->getRGBA());
00688
00689 tmpSettings.drawLinkTLIndex = myShowTLIndex->getCheck()!=0;
00690 tmpSettings.drawLinkJunctionIndex = myShowJunctionIndex->getCheck()!=0;
00691 tmpSettings.drawJunctionName = myShowJunctionName->getCheck()!=0;
00692 tmpSettings.junctionNameSize = (SUMOReal) myJunctionNameSizeDialer->getValue();
00693 tmpSettings.junctionNameColor = convert(myJunctionNameColor->getRGBA());
00694
00695 tmpSettings.addExaggeration = (SUMOReal) myDetectorUpscaleDialer->getValue();
00696 tmpSettings.minAddSize = (SUMOReal) myDetectorMinSizeDialer->getValue();
00697 tmpSettings.drawAddName = myShowAddName->getCheck()!=0;
00698 tmpSettings.addNameSize = (SUMOReal) myAddNameSizeDialer->getValue();
00699
00700
00701 tmpSettings.poiExaggeration = (SUMOReal) myPOIUpscaleDialer->getValue();
00702 tmpSettings.minPOISize = (SUMOReal) myPOIMinSizeDialer->getValue();
00703 tmpSettings.drawPOIName = myShowPOIName->getCheck()!=0;
00704 tmpSettings.poiNameSize = (SUMOReal) myPOINameSizeDialer->getValue();
00705 tmpSettings.poiNameColor = convert(myPOINameColor->getRGBA());
00706
00707 tmpSettings.showLane2Lane = myShowLane2Lane->getCheck()!=0;
00708 tmpSettings.antialiase = myAntialiase->getCheck()!=0;
00709 tmpSettings.dither = myDither->getCheck()!=0;
00710 tmpSettings.showSizeLegend = myShowSizeLegend->getCheck()!=0;
00711
00712
00713 if (tmpSettings.getLaneEdgeMode()==prevLaneMode) {
00714 std::vector<FXColorWell*>::const_iterator colIt = myLaneColors.begin();
00715 std::vector<FXRealSpinDial*>::const_iterator threshIt = myLaneThresholds.begin();
00716 std::vector<FXButton*>::const_iterator buttonIt = myLaneButtons.begin();
00717 GUIColorScheme &scheme = tmpSettings.getLaneEdgeScheme();
00718 size_t pos = 0;
00719 while (colIt != myLaneColors.end()) {
00720 if (scheme.isFixed()) {
00721 if (sender == *colIt) {
00722 scheme.setColor(pos, convert((*colIt)->getRGBA()));
00723 }
00724 } else {
00725 if (sender == *threshIt) {
00726 const SUMOReal val = (*threshIt)->getValue();
00727 double lo, hi;
00728 if (pos != 0) {
00729 threshIt--;
00730 (*threshIt)->getRange(lo, hi);
00731 (*threshIt)->setRange(lo, val);
00732 threshIt++;
00733 }
00734 threshIt++;
00735 if (threshIt != myLaneThresholds.end()) {
00736 (*threshIt)->getRange(lo, hi);
00737 (*threshIt)->setRange(val, hi);
00738 }
00739 scheme.setThreshold(pos, val);
00740 break;
00741 }
00742 if (sender == *colIt) {
00743 scheme.setColor(pos, convert((*colIt)->getRGBA()));
00744 break;
00745 }
00746 if (sender == *buttonIt) {
00747 if (pos == 0) {
00748 scheme.addColor(convert((*colIt)->getRGBA()), (*threshIt)->getValue());
00749 } else {
00750 scheme.removeColor(pos);
00751 }
00752 doRebuildColorMatrices = true;
00753 break;
00754 }
00755 ++threshIt;
00756 ++buttonIt;
00757 }
00758 ++colIt;
00759 pos++;
00760 }
00761 if (sender == myLaneColorInterpolation) {
00762 scheme.setInterpolated(myLaneColorInterpolation->getCheck());
00763 doRebuildColorMatrices = true;
00764 }
00765 } else {
00766 doRebuildColorMatrices = true;
00767 }
00768
00769 if (tmpSettings.vehicleColorer.getActive()==prevVehicleMode) {
00770 std::vector<FXColorWell*>::const_iterator colIt = myVehicleColors.begin();
00771 std::vector<FXRealSpinDial*>::const_iterator threshIt = myVehicleThresholds.begin();
00772 std::vector<FXButton*>::const_iterator buttonIt = myVehicleButtons.begin();
00773 GUIColorScheme &scheme = tmpSettings.vehicleColorer.getScheme();
00774 size_t pos = 0;
00775 while (colIt != myVehicleColors.end()) {
00776 if (scheme.isFixed()) {
00777 if (sender == *colIt) {
00778 scheme.setColor(pos, convert((*colIt)->getRGBA()));
00779 }
00780 } else {
00781 if (sender == *threshIt) {
00782 const SUMOReal val = (*threshIt)->getValue();
00783 double lo, hi;
00784 if (pos != 0) {
00785 threshIt--;
00786 (*threshIt)->getRange(lo, hi);
00787 (*threshIt)->setRange(lo, val);
00788 threshIt++;
00789 }
00790 threshIt++;
00791 if (threshIt != myVehicleThresholds.end()) {
00792 (*threshIt)->getRange(lo, hi);
00793 (*threshIt)->setRange(val, hi);
00794 }
00795 scheme.setThreshold(pos, val);
00796 break;
00797 }
00798 if (sender == *colIt) {
00799 scheme.setColor(pos, convert((*colIt)->getRGBA()));
00800 break;
00801 }
00802 if (sender == *buttonIt) {
00803 if (pos == 0) {
00804 scheme.addColor(convert((*colIt)->getRGBA()), (*threshIt)->getValue());
00805 } else {
00806 scheme.removeColor(pos);
00807 }
00808 doRebuildColorMatrices = true;
00809 break;
00810 }
00811 ++threshIt;
00812 ++buttonIt;
00813 }
00814 ++colIt;
00815 pos++;
00816 }
00817 if (sender == myVehicleColorInterpolation) {
00818 scheme.setInterpolated(myVehicleColorInterpolation->getCheck());
00819 doRebuildColorMatrices = true;
00820 }
00821 } else {
00822 doRebuildColorMatrices = true;
00823 }
00824
00825 if (tmpSettings==*mySettings) {
00826 return 1;
00827 }
00828
00829 if (tmpSettings.name[0]!='*') {
00830 tmpSettings.name = '*' + tmpSettings.name;
00831 }
00832 gSchemeStorage.add(tmpSettings);
00833 int index = mySchemeName->getCurrentItem();
00834 if (index<(int) gSchemeStorage.getNumInitialSettings()) {
00835 index = mySchemeName->appendItem(tmpSettings.name.c_str());
00836 gSchemeStorage.add(tmpSettings);
00837 mySchemeName->setCurrentItem(index);
00838 myParent->getColoringSchemesCombo().appendItem(tmpSettings.name.c_str());
00839 myParent->getColoringSchemesCombo().setCurrentItem(index);
00840 myParent->setColorScheme(tmpSettings.name);
00841 } else {
00842 mySchemeName->setItemText(index, tmpSettings.name.c_str());
00843 myParent->getColoringSchemesCombo().setItemText(index, tmpSettings.name.c_str());
00844 myParent->setColorScheme(tmpSettings.name);
00845 }
00846 mySettings = &gSchemeStorage.get(tmpSettings.name);
00847
00848 if (doRebuildColorMatrices) {
00849 rebuildColorMatrices(true);
00850 }
00851 myParent->forceRefresh();
00852 getApp()->forceRefresh();
00853 return 1;
00854 }
00855
00856
00857 void
00858 GUIDialog_ViewSettings::loadSettings(const std::string &file) throw() {
00859 GUISettingsHandler handler(file);
00860 std::string settingsName = handler.addSettings(myParent);
00861 if (settingsName != "") {
00862 FXint index = mySchemeName->appendItem(settingsName.c_str());
00863 mySchemeName->setCurrentItem(index);
00864 mySettings = &gSchemeStorage.get(settingsName);
00865 }
00866 }
00867
00868
00869 void
00870 GUIDialog_ViewSettings::saveDecals(const std::string &file) const throw() {
00871 try {
00872 OutputDevice &dev = OutputDevice::getDevice(file);
00873 dev << "<decals>\n";
00874 std::vector<GUISUMOAbstractView::Decal>::iterator j;
00875 for (j=myDecals->begin(); j!=myDecals->end(); ++j) {
00876 GUISUMOAbstractView::Decal &d = *j;
00877 dev << " <decal filename=\"" << d.filename
00878 << "\" centerX=\"" << d.centerX
00879 << "\" centerY=\"" << d.centerY
00880 << "\" width=\"" << d.width
00881 << "\" height=\"" << d.height
00882 << "\" rotation=\"" << d.rot
00883 << "\"/>\n";
00884 }
00885 dev << "</decals>\n";
00886 dev.close();
00887 } catch (IOError &e) {
00888 FXMessageBox::error(myParent, MBOX_OK, "Storing failed!", e.what());
00889 }
00890 }
00891
00892
00893 void
00894 GUIDialog_ViewSettings::loadDecals(const std::string &file) throw() {
00895 myDecalsLock->lock();
00896 GUISettingsHandler handler(file);
00897 if (handler.hasDecals()) {
00898 (*myDecals) = handler.getDecals();
00899 }
00900 rebuildList();
00901 myParent->update();
00902 myDecalsLock->unlock();
00903 }
00904
00905
00906 long
00907 GUIDialog_ViewSettings::onCmdSaveSetting(FXObject*,FXSelector,void*data) {
00908 int index = mySchemeName->getCurrentItem();
00909 if (index<(int) gSchemeStorage.getNumInitialSettings()) {
00910 return 1;
00911 }
00912
00913 while (true) {
00914 FXDialogBox dialog(this,"Enter a name",DECOR_TITLE|DECOR_BORDER);
00915 FXVerticalFrame* content=new FXVerticalFrame(&dialog,LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,10,10,10,10,10,10);
00916 new FXLabel(content,"Please enter an alphanumeric name: ",NULL,LAYOUT_FILL_X|JUSTIFY_LEFT);
00917 FXTextField *text=new FXTextField(content,40,&dialog,FXDialogBox::ID_ACCEPT,TEXTFIELD_ENTER_ONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X);
00918 new FXHorizontalSeparator(content,SEPARATOR_GROOVE|LAYOUT_FILL_X);
00919 FXHorizontalFrame* buttons=new FXHorizontalFrame(content,LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,0,0,0,0,0,0,0,0);
00920 new FXButton(buttons,"&OK",NULL,&dialog,FXDialogBox::ID_ACCEPT,BUTTON_INITIAL|BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT);
00921 new FXButton(buttons,"&Cancel",NULL,&dialog,FXDialogBox::ID_CANCEL,BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT,0,0,0,0,20,20);
00922 dialog.create();
00923 text->setFocus();
00924 if (dialog.execute()) {
00925 std::string name = text->getText().text();
00926 bool isAlphaNum = true;
00927 for (size_t i=0; i<name.length(); ++i) {
00928 if (name[i]=='_' || (name[i]>='a'&&name[i]<='z') || (name[i]>='A'&&name[i]<='Z') || (name[i]>='0'&&name[i]<='9')) {
00929 continue;
00930 }
00931 isAlphaNum = false;
00932 }
00933 isAlphaNum = isAlphaNum & (name.length()>0);
00934 if (isAlphaNum) {
00935 GUIVisualizationSettings tmpSettings = *mySettings;
00936 gSchemeStorage.remove(mySettings->name);
00937 tmpSettings.name = name;
00938 gSchemeStorage.add(tmpSettings);
00939 mySchemeName->setItemText(index, tmpSettings.name.c_str());
00940 myParent->getColoringSchemesCombo().setItemText(index, tmpSettings.name.c_str());
00941 myParent->setColorScheme(tmpSettings.name);
00942 mySettings = &gSchemeStorage.get(name);
00943 myBackup = *mySettings;
00944 gSchemeStorage.writeSettings(getApp());
00945 return 1;
00946 }
00947 } else {
00948 return 1;
00949 }
00950 }
00951
00952 return 1;
00953 }
00954
00955
00956 long
00957 GUIDialog_ViewSettings::onUpdSaveSetting(FXObject*sender,FXSelector,void*ptr) {
00958 sender->handle(this,
00959 mySchemeName->getCurrentItem()<(int) gSchemeStorage.getNumInitialSettings()
00960 ? FXSEL(SEL_COMMAND,ID_DISABLE) : FXSEL(SEL_COMMAND,ID_ENABLE),
00961 ptr);
00962 return 1;
00963 }
00964
00965
00966 long
00967 GUIDialog_ViewSettings::onCmdDeleteSetting(FXObject*,FXSelector,void*data) {
00968 int index = mySchemeName->getCurrentItem();
00969 if (index<(int) gSchemeStorage.getNumInitialSettings()) {
00970 return 1;
00971 }
00972 std::string name = mySchemeName->getItem(index).text();
00973 gSchemeStorage.remove(name);
00974 mySchemeName->removeItem(index);
00975 onCmdNameChange(0, 0, (void*) mySchemeName->getItem(0).text());
00976 gSchemeStorage.writeSettings(getApp());
00977 return 1;
00978 }
00979
00980
00981 long
00982 GUIDialog_ViewSettings::onUpdDeleteSetting(FXObject*sender,FXSelector,void*ptr) {
00983 sender->handle(this,
00984 mySchemeName->getCurrentItem()<(int) gSchemeStorage.getNumInitialSettings()
00985 ? FXSEL(SEL_COMMAND,ID_DISABLE) : FXSEL(SEL_COMMAND,ID_ENABLE),
00986 ptr);
00987 return 1;
00988 }
00989
00990
00991 long
00992 GUIDialog_ViewSettings::onCmdExportSetting(FXObject*,FXSelector,void*data) {
00993 FXFileDialog opendialog(this, "Export view settings");
00994 opendialog.setIcon(GUIIconSubSys::getIcon(ICON_EMPTY));
00995 opendialog.setSelectMode(SELECTFILE_ANY);
00996 opendialog.setPatternList("*.xml");
00997 if (gCurrentFolder.length()!=0) {
00998 opendialog.setDirectory(gCurrentFolder);
00999 }
01000 if (!opendialog.execute()||!MFXUtils::userPermitsOverwritingWhenFileExists(this, opendialog.getFilename())) {
01001 return 1;
01002 }
01003 try {
01004 OutputDevice &dev = OutputDevice::getDevice(opendialog.getFilename().text());
01005 mySettings->save(dev);
01006 dev.close();
01007 } catch (IOError &e) {
01008 FXMessageBox::error(this, MBOX_OK, "Storing failed!", e.what());
01009 }
01010 return 1;
01011 }
01012
01013
01014 long
01015 GUIDialog_ViewSettings::onUpdExportSetting(FXObject*sender,FXSelector,void*ptr) {
01016 sender->handle(this,
01017 mySchemeName->getCurrentItem()<(int) gSchemeStorage.getNumInitialSettings()
01018 ? FXSEL(SEL_COMMAND,ID_DISABLE) : FXSEL(SEL_COMMAND,ID_ENABLE),
01019 ptr);
01020 return 1;
01021 }
01022
01023
01024 long
01025 GUIDialog_ViewSettings::onCmdImportSetting(FXObject*,FXSelector,void*data) {
01026 FXFileDialog opendialog(this, "Import view settings");
01027 opendialog.setIcon(GUIIconSubSys::getIcon(ICON_EMPTY));
01028 opendialog.setSelectMode(SELECTFILE_ANY);
01029 opendialog.setPatternList("*.xml");
01030 if (gCurrentFolder.length()!=0) {
01031 opendialog.setDirectory(gCurrentFolder);
01032 }
01033 if (opendialog.execute()) {
01034 gCurrentFolder = opendialog.getDirectory();
01035 loadSettings(opendialog.getFilename().text());
01036 }
01037 return 1;
01038 }
01039
01040
01041 long
01042 GUIDialog_ViewSettings::onCmdLoadDecals(FXObject*,FXSelector,void*data) {
01043 FXFileDialog opendialog(this, "Load Decals");
01044 opendialog.setIcon(GUIIconSubSys::getIcon(ICON_EMPTY));
01045 opendialog.setSelectMode(SELECTFILE_ANY);
01046 opendialog.setPatternList("*.xml");
01047 if (gCurrentFolder.length()!=0) {
01048 opendialog.setDirectory(gCurrentFolder);
01049 }
01050 if (opendialog.execute()) {
01051 gCurrentFolder = opendialog.getDirectory();
01052 loadDecals(opendialog.getFilename().text());
01053 }
01054 return 1;
01055 }
01056
01057
01058 long
01059 GUIDialog_ViewSettings::onCmdSaveDecals(FXObject*,FXSelector,void*data) {
01060 FXFileDialog opendialog(this, "Save Decals");
01061 opendialog.setIcon(GUIIconSubSys::getIcon(ICON_EMPTY));
01062 opendialog.setSelectMode(SELECTFILE_ANY);
01063 opendialog.setPatternList("*.xml");
01064 if (gCurrentFolder.length()!=0) {
01065 opendialog.setDirectory(gCurrentFolder);
01066 }
01067 if (!opendialog.execute()||!MFXUtils::userPermitsOverwritingWhenFileExists(this, opendialog.getFilename())) {
01068 return 1;
01069 }
01070 saveDecals(opendialog.getFilename().text());
01071 return 1;
01072 }
01073
01074
01075
01076
01077 long
01078 GUIDialog_ViewSettings::onUpdImportSetting(FXObject*sender,FXSelector,void*ptr) {
01079 sender->handle(this, FXSEL(SEL_COMMAND,ID_ENABLE), ptr);
01080 return 1;
01081 }
01082
01083
01084 RGBColor
01085 GUIDialog_ViewSettings::convert(const FXColor c) const throw() {
01086 return RGBColor(
01087 (SUMOReal) FXREDVAL(c) / (SUMOReal) 255.,
01088 (SUMOReal) FXGREENVAL(c) / (SUMOReal) 255.,
01089 (SUMOReal) FXBLUEVAL(c) / (SUMOReal) 255.);
01090 }
01091
01092
01093 FXColor
01094 GUIDialog_ViewSettings::convert(const RGBColor &c) const throw() {
01095 return FXRGB(c.red()*255., c.green()*255., c.blue()*255.);
01096 }
01097
01098
01099 void
01100 GUIDialog_ViewSettings::rebuildList() throw() {
01101 myDecalsTable->clearItems();
01102
01103 myDecalsTable->setTableSize(10, 6);
01104 myDecalsTable->setColumnText(0, "picture file");
01105 myDecalsTable->setColumnText(1, "center x");
01106 myDecalsTable->setColumnText(2, "center y");
01107 myDecalsTable->setColumnText(3, "width");
01108 myDecalsTable->setColumnText(4, "height");
01109 myDecalsTable->setColumnText(5, "rotation");
01110 FXHeader *header = myDecalsTable->getColumnHeader();
01111 header->setHeight(getApp()->getNormalFont()->getFontHeight()+getApp()->getNormalFont()->getFontAscent());
01112 int k;
01113 for (k=0; k<6; k++) {
01114 header->setItemJustify(k, JUSTIFY_CENTER_X|JUSTIFY_TOP);
01115 header->setItemSize(k, 60);
01116 }
01117 header->setItemSize(0, 150);
01118
01119 FXint row = 0;
01120 std::vector<GUISUMOAbstractView::Decal>::iterator j;
01121 for (j=myDecals->begin(); j!=myDecals->end(); ++j) {
01122 GUISUMOAbstractView::Decal &d = *j;
01123 myDecalsTable->setItemText(row, 0, d.filename.c_str());
01124 myDecalsTable->setItemText(row, 1, toString<SUMOReal>(d.centerX).c_str());
01125 myDecalsTable->setItemText(row, 2, toString<SUMOReal>(d.centerY).c_str());
01126 myDecalsTable->setItemText(row, 3, toString<SUMOReal>(d.width).c_str());
01127 myDecalsTable->setItemText(row, 4, toString<SUMOReal>(d.height).c_str());
01128 myDecalsTable->setItemText(row, 5, toString<SUMOReal>(d.rot).c_str());
01129 row++;
01130 }
01131
01132 for (k=0; k<6; k++) {
01133 myDecalsTable->setItemText(row, k, " ");
01134 }
01135 }
01136
01137
01138 void
01139 GUIDialog_ViewSettings::rebuildColorMatrices(bool doCreate) throw() {
01140
01141 delete myDecalsTable;
01142 myDecalsTable = new MFXAddEditTypedTable(myDecalsFrame, this, MID_TABLE,
01143 LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH, 0,0, 470, 0);
01144 myDecalsTable->setVisibleRows(5);
01145 myDecalsTable->setVisibleColumns(6);
01146 myDecalsTable->setTableSize(5,6);
01147 myDecalsTable->setBackColor(FXRGB(255,255,255));
01148 myDecalsTable->getRowHeader()->setWidth(0);
01149 for (int i=1; i<5; ++i) {
01150 myDecalsTable->setCellType(i, CT_REAL);
01151 myDecalsTable->setNumberCellParams(i, -10000000, 10000000, 1, 10, 100, "%.2f");
01152 }
01153 myDecalsTable->setCellType(5, CT_REAL);
01154 myDecalsTable->setNumberCellParams(5, -10000000, 10000000, .1, 1, 10, "%.2f");
01155 rebuildList();
01156 if (doCreate) {
01157 myDecalsTable->create();
01158 }
01159 {
01160
01161 MFXUtils::deleteChildren(myLaneColorSettingFrame);
01162 FXMatrix *m = new FXMatrix(myLaneColorSettingFrame,3,
01163 LAYOUT_FILL_X|MATRIX_BY_COLUMNS,
01164 0,0,0,0,10,10,0,0, 5,3);
01165 myLaneColors.clear();
01166 myLaneThresholds.clear();
01167 myLaneButtons.clear();
01168 GUIColorScheme &scheme = mySettings->getLaneEdgeScheme();
01169 const bool interpolate = scheme.isInterpolated();
01170 const bool fixed = scheme.isFixed();
01171 const std::vector<RGBColor> &colors = scheme.getColors();
01172 std::vector<RGBColor>::const_iterator colIt = colors.begin();
01173 std::vector<SUMOReal>::const_iterator threshIt = scheme.getThresholds().begin();
01174 std::vector<std::string>::const_iterator nameIt = scheme.getNames().begin();
01175 FX::FXString buttonText = "Add";
01176 while (colIt != colors.end()) {
01177 myLaneColors.push_back(new FXColorWell(m , convert(*colIt),
01178 this, MID_SIMPLE_VIEW_COLORCHANGE,
01179 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
01180 0, 0, 100, 0, 0, 0, 0, 0));
01181 if (fixed) {
01182 new FXLabel(m, nameIt->c_str());
01183 new FXLabel(m, "");
01184 } else {
01185 FXRealSpinDial* threshDialer =
01186 new FXRealSpinDial(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
01187 LAYOUT_CENTER_Y|LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK|SPINDIAL_NOMAX);
01188 threshDialer->setValue(*threshIt);
01189 myLaneThresholds.push_back(threshDialer);
01190 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));
01191 buttonText = "Remove";
01192 }
01193 colIt++;
01194 threshIt++;
01195 nameIt++;
01196 }
01197 myLaneColorInterpolation->setCheck(scheme.isInterpolated());
01198 if (fixed) {
01199 myLaneColorInterpolation->disable();
01200 } else {
01201 if (colors.size() > 1) {
01202 myLaneColorInterpolation->enable();
01203 if (myLaneColorInterpolation->getCheck()) {
01204 myLaneThresholds.front()->enable();
01205 } else {
01206 myLaneThresholds.front()->disable();
01207 }
01208 } else {
01209 myLaneColorInterpolation->disable();
01210 myLaneThresholds.front()->disable();
01211 }
01212 }
01213 if (doCreate) {
01214 m->create();
01215 }
01216 myLaneColorSettingFrame->getParent()->recalc();
01217 }
01218 {
01219
01220 MFXUtils::deleteChildren(myVehicleColorSettingFrame);
01221 FXMatrix *m = new FXMatrix(myVehicleColorSettingFrame,3,
01222 LAYOUT_FILL_X|MATRIX_BY_COLUMNS,
01223 0,0,0,0,10,10,0,0, 5,3);
01224 myVehicleColors.clear();
01225 myVehicleThresholds.clear();
01226 myVehicleButtons.clear();
01227 const bool interpolate = mySettings->vehicleColorer.getScheme().isInterpolated();
01228 const bool fixed = mySettings->vehicleColorer.getScheme().isFixed();
01229 const std::vector<RGBColor> &colors = mySettings->vehicleColorer.getScheme().getColors();
01230 std::vector<RGBColor>::const_iterator colIt = colors.begin();
01231 std::vector<SUMOReal>::const_iterator threshIt = mySettings->vehicleColorer.getScheme().getThresholds().begin();
01232 std::vector<std::string>::const_iterator nameIt = mySettings->vehicleColorer.getScheme().getNames().begin();
01233 FX::FXString buttonText = "Add";
01234 while (colIt != colors.end()) {
01235 myVehicleColors.push_back(new FXColorWell(m , convert(*colIt),
01236 this, MID_SIMPLE_VIEW_COLORCHANGE,
01237 LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y|FRAME_SUNKEN|FRAME_THICK|ICON_AFTER_TEXT,
01238 0, 0, 100, 0, 0, 0, 0, 0));
01239 if (fixed) {
01240 new FXLabel(m, nameIt->c_str());
01241 new FXLabel(m, "");
01242 } else {
01243 FXRealSpinDial* threshDialer =
01244 new FXRealSpinDial(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE,
01245 LAYOUT_CENTER_Y|LAYOUT_TOP|FRAME_SUNKEN|FRAME_THICK|SPINDIAL_NOMAX);
01246 threshDialer->setValue(*threshIt);
01247 myVehicleThresholds.push_back(threshDialer);
01248 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));
01249 buttonText = "Remove";
01250 }
01251 colIt++;
01252 threshIt++;
01253 nameIt++;
01254 }
01255 myVehicleColorInterpolation->setCheck(mySettings->vehicleColorer.getScheme().isInterpolated());
01256 if (fixed) {
01257 myVehicleColorInterpolation->disable();
01258 } else {
01259 if (colors.size() > 1) {
01260 myVehicleColorInterpolation->enable();
01261 if (myVehicleColorInterpolation->getCheck()) {
01262 myVehicleThresholds.front()->enable();
01263 } else {
01264 myVehicleThresholds.front()->disable();
01265 }
01266 } else {
01267 myVehicleColorInterpolation->disable();
01268 myVehicleThresholds.front()->disable();
01269 }
01270 }
01271 if (doCreate) {
01272 m->create();
01273 }
01274 myVehicleColorSettingFrame->getParent()->recalc();
01275 }
01276 layout();
01277 update();
01278 }
01279
01280
01281 long
01282 GUIDialog_ViewSettings::onCmdEditTable(FXObject*,FXSelector,void*data) {
01283 MFXEditedTableItem *i = (MFXEditedTableItem*) data;
01284 std::string value = i->item->getText().text();
01285
01286 if (value.find_first_not_of(" ")==std::string::npos) {
01287 return 1;
01288 }
01289 GUISUMOAbstractView::Decal d;
01290 int row = i->row;
01291 if (row==myDecals->size()) {
01292 d.filename = "";
01293 d.centerX = SUMOReal(myParent->getGridWidth() / 2.);
01294 d.centerY = SUMOReal(myParent->getGridHeight() / 2.);
01295 d.width = SUMOReal(myParent->getGridWidth());
01296 d.height = SUMOReal(myParent->getGridHeight());
01297 d.initialised = false;
01298 d.rot = 0;
01299 myDecalsLock->lock();
01300 myDecals->push_back(d);
01301 myDecalsLock->unlock();
01302 } else {
01303 d = (*myDecals)[row];
01304 }
01305
01306 switch (i->col) {
01307 case 0:
01308 if (d.initialised&&d.filename!=value) {
01309 d.initialised = false;
01310 }
01311 d.filename = value;
01312 break;
01313 case 1:
01314 try {
01315 d.centerX = TplConvert<char>::_2SUMOReal(value.c_str());
01316 } catch (NumberFormatException &) {
01317 std::string msg = "The value must be a float, is:" + value;
01318 FXMessageBox::error(this, MBOX_OK, "Number format error", msg.c_str());
01319 }
01320 break;
01321 case 2:
01322 try {
01323 d.centerY = TplConvert<char>::_2SUMOReal(value.c_str());
01324 } catch (NumberFormatException &) {
01325 std::string msg = "The value must be a float, is:" + value;
01326 FXMessageBox::error(this, MBOX_OK, "Number format error", msg.c_str());
01327 }
01328 break;
01329 case 3:
01330 try {
01331 d.width = TplConvert<char>::_2SUMOReal(value.c_str());
01332 } catch (NumberFormatException &) {
01333 std::string msg = "The value must be a float, is:" + value;
01334 FXMessageBox::error(this, MBOX_OK, "Number format error", msg.c_str());
01335 }
01336 break;
01337 case 4:
01338 try {
01339 d.height = TplConvert<char>::_2SUMOReal(value.c_str());
01340 } catch (NumberFormatException &) {
01341 std::string msg = "The value must be a float, is:" + value;
01342 FXMessageBox::error(this, MBOX_OK, "Number format error", msg.c_str());
01343 }
01344 break;
01345 case 5:
01346 try {
01347 d.rot = TplConvert<char>::_2SUMOReal(value.c_str());
01348 } catch (NumberFormatException &) {
01349 std::string msg = "The value must be a float, is:" + value;
01350 FXMessageBox::error(this, MBOX_OK, "Number format error", msg.c_str());
01351 }
01352 break;
01353 default:
01354 throw 1;
01355 }
01356 (*myDecals)[row] = d;
01357 if (!i->updateOnly) {
01358 rebuildList();
01359 }
01360 myParent->update();
01361 return 1;
01362 }
01363
01364
01365 std::string
01366 GUIDialog_ViewSettings::getCurrentScheme() const throw() {
01367 return mySchemeName->getItem(mySchemeName->getCurrentItem()).text();
01368 }
01369
01370
01371 void
01372 GUIDialog_ViewSettings::setCurrentScheme(const std::string &name) throw() {
01373 if (name.c_str()==mySchemeName->getItemText(mySchemeName->getCurrentItem())) {
01374 return;
01375 }
01376 for (int i=0; i<mySchemeName->getNumItems(); ++i) {
01377 if (name.c_str()==mySchemeName->getItemText(i)) {
01378 mySchemeName->setCurrentItem(i);
01379 onCmdNameChange(0,0,(void*)name.c_str());
01380 return;
01381 }
01382 }
01383 }
01384
01385
01386
01387