GUISettingsHandler.cpp

Go to the documentation of this file.
00001 /****************************************************************************/
00007 // The dialog to change the view (gui) settings.
00008 /****************************************************************************/
00009 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
00010 // Copyright 2001-2010 DLR (http://www.dlr.de/) and contributors
00011 /****************************************************************************/
00012 //
00013 //   This program is free software; you can redistribute it and/or modify
00014 //   it under the terms of the GNU General Public License as published by
00015 //   the Free Software Foundation; either version 2 of the License, or
00016 //   (at your option) any later version.
00017 //
00018 /****************************************************************************/
00019 
00020 
00021 // ===========================================================================
00022 // included modules
00023 // ===========================================================================
00024 #ifdef _MSC_VER
00025 #include <windows_config.h>
00026 #else
00027 #include <config.h>
00028 #endif
00029 
00030 #include <vector>
00031 #include <utils/common/TplConvert.h>
00032 #include <utils/common/ToString.h>
00033 #include <utils/common/RGBColor.h>
00034 #include <utils/common/MsgHandler.h>
00035 #include <utils/common/FileHelpers.h>
00036 #include <utils/gui/settings/GUIVisualizationSettings.h>
00037 #include <utils/gui/settings/GUICompleteSchemeStorage.h>
00038 #include <utils/foxtools/MFXImageHelper.h>
00039 #include <xercesc/framework/MemBufInputSource.hpp>
00040 #include "GUISettingsHandler.h"
00041 
00042 #ifdef CHECK_MEMORY_LEAKS
00043 #include <foreign/nvwa/debug_new.h>
00044 #endif // CHECK_MEMORY_LEAKS
00045 
00046 
00047 // ===========================================================================
00048 // method definitions
00049 // ===========================================================================
00050 GUISettingsHandler::GUISettingsHandler(const std::string &content, bool isFile) throw()
00051         : SUMOSAXHandler(content), myDelay(-1), myZoom(-1), myXPos(-1), myYPos(-1), myCurrentColorer(SUMO_TAG_NOTHING), myCurrentScheme(0) {
00052     if (isFile) {
00053         XMLSubSys::runParser(*this, content);
00054     } else {
00055         setFileName("registrySettings");
00056         SAX2XMLReader *reader = XMLSubSys::getSAXReader(*this);
00057         MemBufInputSource memBufIS((const XMLByte*)content.c_str(),content.size(),"registrySettings");
00058         reader->parse(memBufIS);
00059         delete reader;
00060     }
00061 }
00062 
00063 
00064 GUISettingsHandler::~GUISettingsHandler() throw() {
00065 }
00066 
00067 
00068 void
00069 GUISettingsHandler::myStartElement(SumoXMLTag element,
00070                                    const SUMOSAXAttributes &attrs) throw(ProcessError) {
00071     bool ok = true;
00072     switch (element) {
00073     case SUMO_TAG_DELAY:
00074         myDelay = attrs.getOptSUMORealReporting(SUMO_ATTR_VALUE, "delay", 0, ok, myDelay);
00075         break;
00076     case SUMO_TAG_VIEWPORT:
00077         myZoom = attrs.getOptSUMORealReporting(SUMO_ATTR_ZOOM, "viewport", 0, ok, myZoom);
00078         myXPos = attrs.getOptSUMORealReporting(SUMO_ATTR_X, "viewport", 0, ok, myXPos);
00079         myYPos = attrs.getOptSUMORealReporting(SUMO_ATTR_Y, "viewport", 0, ok, myYPos);
00080         break;
00081     case SUMO_TAG_SNAPSHOT: {
00082         bool ok = true;
00083         std::string file = attrs.getStringReporting(SUMO_ATTR_FILE, "snapshot", 0, ok);
00084         if (file != "" && !FileHelpers::isAbsolute(file)) {
00085             file = FileHelpers::getConfigurationRelative(getFileName(), file);
00086         }
00087         mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, "snapshot", file.c_str(), ok, 0)] = file;
00088     }
00089     break;
00090     case SUMO_TAG_VIEWSETTINGS_SCHEME: {
00091         bool ok = true;
00092         mySettings.name = attrs.getOptStringReporting(SUMO_ATTR_NAME, 0, 0, ok, mySettings.name);
00093         if (gSchemeStorage.contains(mySettings.name)) {
00094             mySettings = gSchemeStorage.get(mySettings.name);
00095         }
00096     }
00097     break;
00098     case SUMO_TAG_VIEWSETTINGS_OPENGL:
00099         mySettings.antialiase = TplConvert<char>::_2bool(attrs.getStringSecure("antialiase", toString(mySettings.antialiase)).c_str());
00100         mySettings.dither = TplConvert<char>::_2bool(attrs.getStringSecure("dither", toString(mySettings.dither)).c_str());
00101         break;
00102     case SUMO_TAG_VIEWSETTINGS_BACKGROUND: {
00103         bool ok = true;
00104         mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", 0, true, ok);
00105         mySettings.showGrid = TplConvert<char>::_2bool(attrs.getStringSecure("showGrid", toString(mySettings.showGrid)).c_str());
00106         mySettings.gridXSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("gridXSize", toString(mySettings.gridXSize)).c_str());
00107         mySettings.gridYSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("gridYSize", toString(mySettings.gridYSize)).c_str());
00108     }
00109     break;
00110     case SUMO_TAG_VIEWSETTINGS_EDGES: {
00111         bool ok = true;
00112         int laneEdgeMode = TplConvert<char>::_2int(attrs.getStringSecure("laneEdgeMode", "0").c_str());
00113         mySettings.laneShowBorders = TplConvert<char>::_2bool(attrs.getStringSecure("laneShowBorders", toString(mySettings.laneShowBorders)).c_str());
00114         mySettings.showLinkDecals = TplConvert<char>::_2bool(attrs.getStringSecure("showLinkDecals", toString(mySettings.showLinkDecals)).c_str());
00115         mySettings.showRails = TplConvert<char>::_2bool(attrs.getStringSecure("showRails", toString(mySettings.showRails)).c_str());
00116         mySettings.drawEdgeName = TplConvert<char>::_2bool(attrs.getStringSecure("drawEdgeName", toString(mySettings.drawEdgeName)).c_str());
00117         mySettings.edgeNameSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("edgeNameSize", toString(mySettings.edgeNameSize)).c_str());
00118         mySettings.edgeNameColor = RGBColor::parseColorReporting(attrs.getStringSecure("edgeNameColor", toString(mySettings.edgeNameColor)), "edges", 0, true, ok);
00119         mySettings.drawInternalEdgeName = TplConvert<char>::_2bool(attrs.getStringSecure("drawInternalEdgeName", toString(mySettings.drawInternalEdgeName)).c_str());
00120         mySettings.internalEdgeNameSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("internalEdgeNameSize", toString(mySettings.internalEdgeNameSize)).c_str());
00121         mySettings.internalEdgeNameColor = RGBColor::parseColorReporting(attrs.getStringSecure("internalEdgeNameColor", toString(mySettings.internalEdgeNameColor)), "edges", 0, true, ok);
00122         mySettings.hideConnectors = TplConvert<char>::_2bool(attrs.getStringSecure("hideConnectors", toString(mySettings.hideConnectors)).c_str());
00123         myCurrentColorer = element;
00124 #ifdef HAVE_MESOSIM
00125         mySettings.edgeColorer.setActive(laneEdgeMode);
00126 #endif
00127         mySettings.laneColorer.setActive(laneEdgeMode);
00128     }
00129     break;
00130     case SUMO_TAG_COLORSCHEME:
00131         myCurrentScheme = 0;
00132         if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_EDGES) {
00133             myCurrentScheme = mySettings.laneColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
00134 #ifdef HAVE_MESOSIM
00135             if (myCurrentScheme == 0) {
00136                 myCurrentScheme = mySettings.edgeColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
00137             }
00138 #endif
00139         }
00140         if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_VEHICLES) {
00141             myCurrentScheme = mySettings.vehicleColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
00142         }
00143         if (myCurrentScheme && !myCurrentScheme->isFixed()) {
00144             bool ok = true;
00145             myCurrentScheme->setInterpolated(attrs.getOptBoolReporting(SUMO_ATTR_INTERPOLATED, "colorScheme", 0, ok, false));
00146             myCurrentScheme->clear();
00147         }
00148         break;
00149     case SUMO_TAG_ENTRY:
00150         if (myCurrentScheme) {
00151             bool ok = true;
00152             std::string colorStr = attrs.getStringReporting(SUMO_ATTR_COLOR, "entry", 0, ok);
00153             RGBColor color = RGBColor::parseColorReporting(colorStr, "edgeColoring", 0, true, ok);
00154             if (myCurrentScheme->isFixed()) {
00155                 myCurrentScheme->setColor(attrs.getStringSecure(SUMO_ATTR_NAME, ""), color);
00156             } else {
00157                 myCurrentScheme->addColor(color,
00158                                           attrs.getSUMORealReporting(SUMO_ATTR_THRESHOLD, "entry", 0, ok));
00159             }
00160         }
00161         break;
00162     case SUMO_TAG_VIEWSETTINGS_VEHICLES:
00163         mySettings.vehicleColorer.setActive(TplConvert<char>::_2int(attrs.getStringSecure("vehicleMode", "0").c_str()));
00164         mySettings.vehicleQuality = TplConvert<char>::_2int(attrs.getStringSecure("vehicleQuality", toString(mySettings.vehicleQuality)).c_str());
00165         mySettings.minVehicleSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("minVehicleSize", toString(mySettings.minVehicleSize)).c_str());
00166         mySettings.vehicleExaggeration = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("vehicleExaggeration", toString(mySettings.vehicleExaggeration)).c_str());
00167         mySettings.showBlinker = TplConvert<char>::_2bool(attrs.getStringSecure("showBlinker", toString(mySettings.showBlinker)).c_str());
00168         mySettings.drawVehicleName = TplConvert<char>::_2bool(attrs.getStringSecure("drawVehicleName", toString(mySettings.drawVehicleName)).c_str());
00169         mySettings.vehicleNameSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("vehicleNameSize", toString(mySettings.vehicleNameSize)).c_str());
00170         mySettings.vehicleNameColor = RGBColor::parseColorReporting(attrs.getStringSecure("vehicleNameColor", toString(mySettings.vehicleNameColor)), "vehicles", 0, true, ok);
00171         myCurrentColorer = element;
00172         break;
00173     case SUMO_TAG_VIEWSETTINGS_JUNCTIONS:
00174         mySettings.junctionMode = TplConvert<char>::_2int(attrs.getStringSecure("junctionMode", toString(mySettings.junctionMode)).c_str());
00175         mySettings.drawLinkTLIndex = TplConvert<char>::_2bool(attrs.getStringSecure("drawLinkTLIndex", toString(mySettings.drawLinkTLIndex)).c_str());
00176         mySettings.drawLinkJunctionIndex = TplConvert<char>::_2bool(attrs.getStringSecure("drawLinkJunctionIndex", toString(mySettings.drawLinkJunctionIndex)).c_str());
00177         mySettings.drawJunctionName = TplConvert<char>::_2bool(attrs.getStringSecure("drawJunctionName", toString(mySettings.drawJunctionName)).c_str());
00178         mySettings.junctionNameSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("junctionNameSize", toString(mySettings.junctionNameSize)).c_str());
00179         mySettings.junctionNameColor = RGBColor::parseColorReporting(attrs.getStringSecure("junctionNameColor", toString(mySettings.junctionNameColor)), "junctions", 0, true, ok);
00180         mySettings.showLane2Lane = TplConvert<char>::_2bool(attrs.getStringSecure("showLane2Lane", toString(mySettings.showLane2Lane)).c_str());
00181         break;
00182     case SUMO_TAG_VIEWSETTINGS_ADDITIONALS:
00183         mySettings.addMode = TplConvert<char>::_2int(attrs.getStringSecure("addMode", toString(mySettings.addMode)).c_str());
00184         mySettings.minAddSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("minAddSize", toString(mySettings.minAddSize)).c_str());
00185         mySettings.addExaggeration = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("addExaggeration", toString(mySettings.addExaggeration)).c_str());
00186         mySettings.drawAddName = TplConvert<char>::_2bool(attrs.getStringSecure("drawAddName", toString(mySettings.drawAddName)).c_str());
00187         mySettings.addNameSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("addNameSize", toString(mySettings.addNameSize)).c_str());
00188         break;
00189     case SUMO_TAG_VIEWSETTINGS_POIS:
00190         mySettings.poiExaggeration = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("poiExaggeration", toString(mySettings.poiExaggeration)).c_str());
00191         mySettings.minPOISize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("minPOISize", toString(mySettings.minPOISize)).c_str());
00192         mySettings.drawPOIName = TplConvert<char>::_2bool(attrs.getStringSecure("drawPOIName", toString(mySettings.drawPOIName)).c_str());
00193         mySettings.poiNameSize = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("poiNameSize", toString(mySettings.poiNameSize)).c_str());
00194         mySettings.poiNameColor = RGBColor::parseColorReporting(attrs.getStringSecure("poiNameColor", toString(mySettings.poiNameColor)), "pois", 0, true, ok);
00195         break;
00196     case SUMO_TAG_VIEWSETTINGS_LEGEND:
00197         mySettings.showSizeLegend = TplConvert<char>::_2bool(attrs.getStringSecure("showSizeLegend", toString(mySettings.showSizeLegend)).c_str());
00198         break;
00199     case SUMO_TAG_VIEWSETTINGS_DECAL: {
00200         GUISUMOAbstractView::Decal d;
00201         d.filename = attrs.getStringSecure("filename", d.filename);
00202         if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
00203             d.filename = FileHelpers::getConfigurationRelative(getFileName(), d.filename);
00204         }
00205         d.centerX = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("centerX", toString(d.centerX)).c_str());
00206         d.centerY = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("centerY", toString(d.centerY)).c_str());
00207         d.width = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("width", toString(d.width)).c_str());
00208         d.height = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("height", toString(d.height)).c_str());
00209         d.rot = TplConvert<char>::_2SUMOReal(attrs.getStringSecure("rotation", toString(d.rot)).c_str());
00210         d.initialised = false;
00211         myDecals.push_back(d);
00212     }
00213     break;
00214     }
00215 }
00216 
00217 
00218 std::string
00219 GUISettingsHandler::addSettings(GUISUMOAbstractView* view) const throw() {
00220     if (mySettings.name != "") {
00221         gSchemeStorage.add(mySettings);
00222         if (view) {
00223             size_t index = view->getColoringSchemesCombo().appendItem(mySettings.name.c_str());
00224             view->getColoringSchemesCombo().setCurrentItem(index);
00225             view->setColorScheme(mySettings.name);
00226         }
00227     }
00228     return mySettings.name;
00229 }
00230 
00231 
00232 void
00233 GUISettingsHandler::setViewport(GUISUMOAbstractView* view) const throw() {
00234     if (myZoom > 0) {
00235         view->setViewport(myZoom, myXPos, myYPos);
00236     }
00237 }
00238 
00239 
00240 void
00241 GUISettingsHandler::setViewport(SUMOReal &zoom, SUMOReal &xoff, SUMOReal &yoff) const throw() {
00242     zoom = myZoom;
00243     xoff = myXPos;
00244     yoff = myYPos;
00245 }
00246 
00247 
00248 void
00249 GUISettingsHandler::setSnapshots(GUISUMOAbstractView* view) const throw() {
00250     if (!mySnapshots.empty()) {
00251         view->setSnapshots(mySnapshots);
00252     }
00253 }
00254 
00255 
00256 bool
00257 GUISettingsHandler::hasDecals() const throw() {
00258     return !myDecals.empty();
00259 }
00260 
00261 
00262 const std::vector<GUISUMOAbstractView::Decal>&
00263 GUISettingsHandler::getDecals() const throw() {
00264     return myDecals;
00265 }
00266 
00267 
00268 SUMOReal
00269 GUISettingsHandler::getDelay() const throw() {
00270     return myDelay;
00271 }
00272 
00273 
00274 /****************************************************************************/
00275 

Generated on Wed May 5 00:06:30 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6