LCOV - code coverage report
Current view: top level - src/utils/gui/settings - GUISettingsHandler.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 343 406 84.5 %
Date: 2024-09-16 15:39:55 Functions: 13 17 76.5 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4             : // This program and the accompanying materials are made available under the
       5             : // terms of the Eclipse Public License 2.0 which is available at
       6             : // https://www.eclipse.org/legal/epl-2.0/
       7             : // This Source Code may also be made available under the following Secondary
       8             : // Licenses when the conditions for such availability set forth in the Eclipse
       9             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10             : // or later which is available at
      11             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13             : /****************************************************************************/
      14             : /// @file    GUISettingsHandler.cpp
      15             : /// @author  Michael Behrisch
      16             : /// @author  Daniel Krajzewicz
      17             : /// @author  Jakob Erdmann
      18             : /// @author  Laura Bieker
      19             : /// @author  Mirko Barthauer
      20             : /// @date    Fri, 24. Apr 2009
      21             : ///
      22             : // The dialog to change the view (gui) settings.
      23             : /****************************************************************************/
      24             : #include <config.h>
      25             : 
      26             : #include <vector>
      27             : #include <utils/common/StringUtils.h>
      28             : #include <utils/common/ToString.h>
      29             : #include <utils/common/RGBColor.h>
      30             : #include <utils/common/MsgHandler.h>
      31             : #include <utils/common/FileHelpers.h>
      32             : #include <utils/gui/settings/GUIVisualizationSettings.h>
      33             : #include <utils/gui/settings/GUICompleteSchemeStorage.h>
      34             : #include <utils/gui/windows/GUIPerspectiveChanger.h>
      35             : #include <utils/foxtools/MFXImageHelper.h>
      36             : #include <utils/xml/SUMOSAXReader.h>
      37             : #include <utils/xml/XMLSubSys.h>
      38             : #include "GUISettingsHandler.h"
      39             : 
      40             : 
      41             : // ===========================================================================
      42             : // method definitions
      43             : // ===========================================================================
      44          38 : GUISettingsHandler::GUISettingsHandler(const std::string& content, bool isFile, bool netedit) :
      45             :     SUMOSAXHandler(content),
      46          38 :     mySettings("TEMPORARY_NAME", netedit),
      47          38 :     myDelay(-1), myLookFrom(-1, -1, -1), myLookAt(-1, -1, -1), myZCoordSet(true),
      48          38 :     myRotation(0),
      49          38 :     myZoom(-1),
      50          38 :     myCurrentColorer(SUMO_TAG_NOTHING),
      51          38 :     myCurrentScheme(nullptr),
      52         114 :     myJamSoundTime(-1) {
      53          38 :     if (isFile) {
      54          38 :         XMLSubSys::runParser(*this, content);
      55             :     } else {
      56           0 :         setFileName("registrySettings");
      57           0 :         SUMOSAXReader* reader = XMLSubSys::getSAXReader(*this);
      58           0 :         reader->parseString(content);
      59           0 :         delete reader;
      60             :     }
      61          38 : }
      62             : 
      63             : 
      64          38 : GUISettingsHandler::~GUISettingsHandler() {
      65          76 : }
      66             : 
      67             : 
      68             : void
      69       17312 : GUISettingsHandler::myStartElement(int element, const SUMOSAXAttributes& attrs) {
      70       17312 :     bool ok = true;
      71       17312 :     switch (element) {
      72           0 :         case SUMO_TAG_BREAKPOINT:
      73           0 :             if (attrs.hasAttribute(SUMO_ATTR_TIME)) {
      74           0 :                 myBreakpoints.push_back(attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, nullptr, ok));
      75             :             } else {
      76           0 :                 myBreakpoints.push_back(attrs.getSUMOTimeReporting(SUMO_ATTR_VALUE, nullptr, ok));
      77           0 :                 WRITE_WARNING(TL("The 'value' attribute is deprecated for breakpoints. Please use 'time'."));
      78             :             }
      79             :             break;
      80             :         case SUMO_TAG_VIEWSETTINGS:
      81          70 :             myViewType = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, nullptr, ok, "default");
      82          35 :             myViewType = StringUtils::to_lower_case(myViewType);
      83          35 :             break;
      84           2 :         case SUMO_TAG_VIEWSETTINGS_3D:
      85           4 :             mySettings.show3DTLSLinkMarkers = StringUtils::toBool(attrs.getStringSecure("show3DTLSLinkMarkers", toString(mySettings.show3DTLSLinkMarkers)));
      86           2 :             mySettings.show3DTLSDomes = StringUtils::toBool(attrs.getStringSecure("show3DTLSDomes", toString(mySettings.show3DTLSDomes)));
      87           4 :             mySettings.show3DHeadUpDisplay = StringUtils::toBool(attrs.getStringSecure("show3DHeadUpDisplay", toString(mySettings.show3DHeadUpDisplay)));
      88           4 :             mySettings.generate3DTLSModels = StringUtils::toBool(attrs.getStringSecure("generate3DTLSModels", toString(mySettings.generate3DTLSModels)));
      89           2 :             mySettings.ambient3DLight = parseColor(attrs, "ambient3DLight", mySettings.ambient3DLight);
      90           2 :             mySettings.diffuse3DLight = parseColor(attrs, "diffuse3DLight", mySettings.diffuse3DLight);
      91           2 :             break;
      92           8 :         case SUMO_TAG_DELAY:
      93           8 :             myDelay = attrs.getOpt<double>(SUMO_ATTR_VALUE, nullptr, ok, myDelay);
      94           8 :             break;
      95           6 :         case SUMO_TAG_VIEWPORT: {
      96           6 :             const double x = attrs.getOpt<double>(SUMO_ATTR_X, nullptr, ok, myLookFrom.x());
      97           6 :             const double y = attrs.getOpt<double>(SUMO_ATTR_Y, nullptr, ok, myLookFrom.y());
      98           6 :             const double z = attrs.getOpt<double>(SUMO_ATTR_Z, nullptr, ok, myLookFrom.z());
      99           6 :             attrs.get<double>(SUMO_ATTR_Z, nullptr, myZCoordSet, false);
     100             :             myLookFrom.set(x, y, z);
     101           6 :             myZoom = attrs.getOpt<double>(SUMO_ATTR_ZOOM, nullptr, ok, myZoom);
     102           6 :             const double cx = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, myLookFrom.x());
     103           6 :             const double cy = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, myLookFrom.y());
     104           6 :             const double cz = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, 0.);
     105             :             myLookAt.set(cx, cy, cz);
     106           6 :             myRotation = attrs.getOpt<double>(SUMO_ATTR_ANGLE, nullptr, ok, myRotation);
     107           6 :             break;
     108             :         }
     109           2 :         case SUMO_TAG_SNAPSHOT: {
     110           2 :             std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, nullptr, ok);
     111           2 :             if (file != "" && !FileHelpers::isAbsolute(file)) {
     112           4 :                 file = FileHelpers::getConfigurationRelative(getFileName(), file);
     113             :             }
     114           2 :             mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, file.c_str(), ok, 0)].push_back(file);
     115             :         }
     116           2 :         break;
     117          32 :         case SUMO_TAG_VIEWSETTINGS_SCHEME: {
     118          64 :             mySettings.name = attrs.getOpt<std::string>(SUMO_ATTR_NAME, nullptr, ok, mySettings.name);
     119          32 :             if (gSchemeStorage.contains(mySettings.name)) {
     120           0 :                 mySettings.copy(gSchemeStorage.get(mySettings.name));
     121             :             }
     122             :         }
     123             :         break;
     124          32 :         case SUMO_TAG_VIEWSETTINGS_OPENGL:
     125          32 :             mySettings.dither = StringUtils::toBool(attrs.getStringSecure("dither", toString(mySettings.dither)));
     126          32 :             mySettings.fps = StringUtils::toBool(attrs.getStringSecure("fps", toString(mySettings.fps)));
     127          32 :             mySettings.trueZ = StringUtils::toBool(attrs.getStringSecure("trueZ", toString(mySettings.trueZ)));
     128          32 :             mySettings.drawBoundaries = StringUtils::toBool(attrs.getStringSecure("drawBoundaries", toString(mySettings.drawBoundaries)));
     129          64 :             mySettings.forceDrawForRectangleSelection = StringUtils::toBool(attrs.getStringSecure("forceDrawRectangleSelection", toString(mySettings.forceDrawForRectangleSelection)));
     130          64 :             mySettings.disableDottedContours = StringUtils::toBool(attrs.getStringSecure("disableDottedContours", toString(mySettings.disableDottedContours)));
     131          32 :             mySettings.geometryIndices = parseTextSettings("geometryIndices", attrs, mySettings.geometryIndices);
     132          32 :             break;
     133             :         case SUMO_TAG_VIEWSETTINGS_BACKGROUND:
     134          64 :             mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", nullptr, true, ok);
     135          32 :             mySettings.showGrid = StringUtils::toBool(attrs.getStringSecure("showGrid", toString(mySettings.showGrid)));
     136          32 :             mySettings.gridXSize = StringUtils::toDouble(attrs.getStringSecure("gridXSize", toString(mySettings.gridXSize)));
     137          32 :             mySettings.gridYSize = StringUtils::toDouble(attrs.getStringSecure("gridYSize", toString(mySettings.gridYSize)));
     138          32 :             break;
     139          32 :         case SUMO_TAG_VIEWSETTINGS_EDGES: {
     140          64 :             int laneEdgeMode = StringUtils::toInt(attrs.getStringSecure("laneEdgeMode", "0"));
     141          64 :             int laneEdgeScaleMode = StringUtils::toInt(attrs.getStringSecure("scaleMode", "0"));
     142          32 :             mySettings.laneShowBorders = StringUtils::toBool(attrs.getStringSecure("laneShowBorders", toString(mySettings.laneShowBorders)));
     143          64 :             mySettings.showBikeMarkings = StringUtils::toBool(attrs.getStringSecure("showBikeMarkings", toString(mySettings.showBikeMarkings)));
     144          32 :             mySettings.showLinkDecals = StringUtils::toBool(attrs.getStringSecure("showLinkDecals", toString(mySettings.showLinkDecals)));
     145          64 :             mySettings.realisticLinkRules = StringUtils::toBool(attrs.getStringSecure("realisticLinkRules", toString(mySettings.realisticLinkRules)));
     146          32 :             mySettings.showLinkRules = StringUtils::toBool(attrs.getStringSecure("showLinkRules", toString(mySettings.showLinkRules)));
     147          32 :             mySettings.showRails = StringUtils::toBool(attrs.getStringSecure("showRails", toString(mySettings.showRails)));
     148          32 :             mySettings.secondaryShape = StringUtils::toBool(attrs.getStringSecure("secondaryShape", toString(mySettings.secondaryShape)));
     149          32 :             mySettings.edgeName = parseTextSettings("edgeName", attrs, mySettings.edgeName);
     150          32 :             mySettings.internalEdgeName = parseTextSettings("internalEdgeName", attrs, mySettings.internalEdgeName);
     151          32 :             mySettings.cwaEdgeName = parseTextSettings("cwaEdgeName", attrs, mySettings.cwaEdgeName);
     152          32 :             mySettings.streetName = parseTextSettings("streetName", attrs, mySettings.streetName);
     153          32 :             mySettings.edgeValue = parseTextSettings("edgeValue", attrs, mySettings.edgeValue);
     154          32 :             mySettings.edgeScaleValue = parseTextSettings("edgeScaleValue", attrs, mySettings.edgeScaleValue);
     155          32 :             mySettings.hideConnectors = StringUtils::toBool(attrs.getStringSecure("hideConnectors", toString(mySettings.hideConnectors)));
     156          64 :             mySettings.laneWidthExaggeration = StringUtils::toDouble(attrs.getStringSecure("widthExaggeration", toString(mySettings.laneWidthExaggeration)));
     157          32 :             mySettings.laneMinSize = StringUtils::toDouble(attrs.getStringSecure("minSize", toString(mySettings.laneMinSize)));
     158          32 :             mySettings.showLaneDirection = StringUtils::toBool(attrs.getStringSecure("showDirection", toString(mySettings.showLaneDirection)));
     159          32 :             mySettings.showSublanes = StringUtils::toBool(attrs.getStringSecure("showSublanes", toString(mySettings.showSublanes)));
     160          64 :             mySettings.spreadSuperposed = StringUtils::toBool(attrs.getStringSecure("spreadSuperposed", toString(mySettings.spreadSuperposed)));
     161          64 :             mySettings.disableHideByZoom = StringUtils::toBool(attrs.getStringSecure("disableHideByZoom", toString(mySettings.disableHideByZoom)));
     162          64 :             mySettings.edgeParam = attrs.getStringSecure("edgeParam", mySettings.edgeParam);
     163          64 :             mySettings.laneParam = attrs.getStringSecure("laneParam", mySettings.laneParam);
     164          64 :             mySettings.vehicleParam = attrs.getStringSecure("vehicleParam", mySettings.vehicleParam);
     165          64 :             mySettings.vehicleScaleParam = attrs.getStringSecure("vehicleScaleParam", mySettings.vehicleScaleParam);
     166          64 :             mySettings.vehicleTextParam = attrs.getStringSecure("vehicleTextParam", mySettings.vehicleTextParam);
     167          64 :             mySettings.edgeData = attrs.getStringSecure("edgeData", mySettings.edgeData);
     168          64 :             mySettings.edgeDataID = attrs.getStringSecure("edgeDataID", mySettings.edgeDataID);
     169          64 :             mySettings.edgeDataScaling = attrs.getStringSecure("edgeDataScaling", mySettings.edgeDataScaling);
     170          64 :             mySettings.edgeValueRainBow = parseRainbowSettings("edgeValue", attrs, mySettings.edgeValueRainBow);
     171          32 :             myCurrentColorer = element;
     172             :             mySettings.edgeColorer.setActive(laneEdgeMode);
     173             :             mySettings.edgeScaler.setActive(laneEdgeScaleMode);
     174             :             mySettings.laneColorer.setActive(laneEdgeMode);
     175             :             mySettings.laneScaler.setActive(laneEdgeScaleMode);
     176             :         }
     177             :         break;
     178        3044 :         case SUMO_TAG_COLORSCHEME: {
     179        3044 :             myCurrentScheme = nullptr;
     180        3044 :             myCurrentScaleScheme = nullptr;
     181        3044 :             const std::string name = attrs.getStringSecure(SUMO_ATTR_NAME, "");
     182        3044 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_EDGES) {
     183        2824 :                 if (StringUtils::startsWith(name, "meso:")) {
     184             :                     // see edgeColorer.save() in GUIVisualizationSettings::save
     185        1140 :                     myCurrentScheme = mySettings.edgeColorer.getSchemeByName(name.substr(5));
     186             :                 } else {
     187        1822 :                     myCurrentScheme = mySettings.laneColorer.getSchemeByName(name);
     188             :                 }
     189        1412 :                 if (myCurrentScheme == nullptr) {
     190             :                     // legacy: meso schemes without prefix
     191         132 :                     myCurrentScheme = mySettings.edgeColorer.getSchemeByName(name);
     192             :                 }
     193             :             }
     194        3044 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_VEHICLES) {
     195        1454 :                 myCurrentScheme = mySettings.vehicleColorer.getSchemeByName(name);
     196             :             }
     197        3044 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_PERSONS) {
     198         332 :                 myCurrentScheme = mySettings.personColorer.getSchemeByName(name);
     199             :             }
     200        3044 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_JUNCTIONS) {
     201         102 :                 myCurrentScheme = mySettings.junctionColorer.getSchemeByName(name);
     202             :             }
     203        3044 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_POIS) {
     204          66 :                 myCurrentScheme = mySettings.poiColorer.getSchemeByName(name);
     205             :             }
     206        3044 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_POLYS) {
     207          90 :                 myCurrentScheme = mySettings.polyColorer.getSchemeByName(name);
     208             :             }
     209        3044 :             if (myCurrentScheme && !myCurrentScheme->isFixed()) {
     210        1764 :                 myCurrentScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, nullptr, ok, false));
     211        1764 :                 myCurrentScheme->clear();
     212             :             }
     213             :         }
     214        3044 :         break;
     215         757 :         case SUMO_TAG_SCALINGSCHEME:
     216         757 :             myCurrentScheme = nullptr;
     217         757 :             myCurrentScaleScheme = nullptr;
     218         757 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_EDGES) {
     219        2019 :                 myCurrentScaleScheme = mySettings.laneScaler.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
     220         727 :                 if (myCurrentScaleScheme == nullptr) {
     221         380 :                     myCurrentScaleScheme = mySettings.edgeScaler.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
     222             :                 }
     223             :             }
     224         757 :             if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_VEHICLES) {
     225          72 :                 myCurrentScaleScheme = mySettings.vehicleScaler.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
     226             :             }
     227         757 :             if (myCurrentScaleScheme && !myCurrentScaleScheme->isFixed()) {
     228         661 :                 myCurrentScaleScheme->setInterpolated(attrs.getOpt<bool>(SUMO_ATTR_INTERPOLATED, nullptr, ok, false));
     229         661 :                 myCurrentScaleScheme->clear();
     230             :             }
     231             :             break;
     232       12915 :         case SUMO_TAG_ENTRY:
     233       12915 :             if (myCurrentScheme != nullptr) {
     234       10476 :                 RGBColor color = attrs.get<RGBColor>(SUMO_ATTR_COLOR, nullptr, ok);
     235       10476 :                 if (myCurrentScheme->isFixed()) {
     236        3940 :                     myCurrentScheme->setColor(attrs.getStringSecure(SUMO_ATTR_NAME, ""), color);
     237             :                 } else {
     238        8506 :                     myCurrentScheme->addColor(color,
     239             :                                               attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, nullptr, ok, std::numeric_limits<double>::max()),
     240       17012 :                                               attrs.getStringSecure(SUMO_ATTR_NAME, ""));
     241             :                 }
     242        2439 :             } else if (myCurrentScaleScheme != nullptr) {
     243        1729 :                 double scale = attrs.get<double>(SUMO_ATTR_COLOR, nullptr, ok);
     244        1729 :                 if (myCurrentScaleScheme->isFixed()) {
     245         280 :                     myCurrentScaleScheme->setColor(attrs.getStringSecure(SUMO_ATTR_NAME, ""), scale);
     246             :                 } else {
     247        1589 :                     myCurrentScaleScheme->addColor(scale,
     248             :                                                    attrs.getOpt<double>(SUMO_ATTR_THRESHOLD, nullptr, ok, std::numeric_limits<double>::max()),
     249        3178 :                                                    attrs.getStringSecure(SUMO_ATTR_NAME, ""));
     250             :                 }
     251             :             }
     252             :             break;
     253          32 :         case SUMO_TAG_VIEWSETTINGS_VEHICLES:
     254          64 :             mySettings.vehicleColorer.setActive(StringUtils::toInt(attrs.getStringSecure("vehicleMode", "0")));
     255          96 :             mySettings.vehicleScaler.setActive(StringUtils::toInt(attrs.getStringSecure("vehicleScaleMode", "0")));
     256          32 :             mySettings.vehicleQuality = StringUtils::toInt(attrs.getStringSecure("vehicleQuality", toString(mySettings.vehicleQuality)));
     257          32 :             mySettings.showBlinker = StringUtils::toBool(attrs.getStringSecure("showBlinker", toString(mySettings.showBlinker)));
     258          32 :             mySettings.drawMinGap = StringUtils::toBool(attrs.getStringSecure("drawMinGap", toString(mySettings.drawMinGap)));
     259          32 :             mySettings.drawBrakeGap = StringUtils::toBool(attrs.getStringSecure("drawBrakeGap", toString(mySettings.drawBrakeGap)));
     260          32 :             mySettings.showBTRange = StringUtils::toBool(attrs.getStringSecure("showBTRange", toString(mySettings.showBTRange)));
     261          32 :             mySettings.showRouteIndex = StringUtils::toBool(attrs.getStringSecure("showRouteIndex", toString(mySettings.showRouteIndex)));
     262          32 :             mySettings.scaleLength = StringUtils::toBool(attrs.getStringSecure("scaleLength", toString(mySettings.scaleLength)));
     263          32 :             mySettings.drawReversed = StringUtils::toBool(attrs.getStringSecure("drawReversed", toString(mySettings.drawReversed)));
     264          32 :             mySettings.showParkingInfo = StringUtils::toBool(attrs.getStringSecure("showParkingInfo", toString(mySettings.showParkingInfo)));
     265          64 :             mySettings.showChargingInfo = StringUtils::toBool(attrs.getStringSecure("showChargingInfo", toString(mySettings.showChargingInfo)));
     266          32 :             mySettings.vehicleSize = parseSizeSettings("vehicle", attrs, mySettings.vehicleSize);
     267          32 :             mySettings.vehicleName = parseTextSettings("vehicleName", attrs, mySettings.vehicleName);
     268          32 :             mySettings.vehicleValue = parseTextSettings("vehicleValue", attrs, mySettings.vehicleValue);
     269          32 :             mySettings.vehicleScaleValue = parseTextSettings("vehicleScaleValue", attrs, mySettings.vehicleScaleValue);
     270          32 :             mySettings.vehicleText = parseTextSettings("vehicleText", attrs, mySettings.vehicleText);
     271          32 :             myCurrentColorer = element;
     272          32 :             break;
     273          24 :         case SUMO_TAG_VIEWSETTINGS_PERSONS:
     274          48 :             mySettings.personColorer.setActive(StringUtils::toInt(attrs.getStringSecure("personMode", "0")));
     275          24 :             mySettings.personQuality = StringUtils::toInt(attrs.getStringSecure("personQuality", toString(mySettings.personQuality)));
     276          24 :             mySettings.personSize = parseSizeSettings("person", attrs, mySettings.personSize);
     277          24 :             mySettings.personName = parseTextSettings("personName", attrs, mySettings.personName);
     278          24 :             mySettings.personValue = parseTextSettings("personValue", attrs, mySettings.personValue);
     279          48 :             mySettings.showPedestrianNetwork = StringUtils::toBool(attrs.getStringSecure("showPedestrianNetwork", toString(mySettings.showPedestrianNetwork)));
     280          72 :             mySettings.pedestrianNetworkColor = RGBColor::parseColorReporting(attrs.getStringSecure("pedestrianNetworkColor", toString(mySettings.pedestrianNetworkColor)), "pedestrianNetworkColor", nullptr, true, ok);
     281          24 :             myCurrentColorer = element;
     282          24 :             break;
     283          24 :         case SUMO_TAG_VIEWSETTINGS_CONTAINERS:
     284          48 :             mySettings.containerColorer.setActive(StringUtils::toInt(attrs.getStringSecure("containerMode", "0")));
     285          48 :             mySettings.containerQuality = StringUtils::toInt(attrs.getStringSecure("containerQuality", toString(mySettings.containerQuality)));
     286          24 :             mySettings.containerSize = parseSizeSettings("container", attrs, mySettings.containerSize);
     287          24 :             mySettings.containerName = parseTextSettings("containerName", attrs, mySettings.containerName);
     288          24 :             myCurrentColorer = element;
     289          24 :             break;
     290          32 :         case SUMO_TAG_VIEWSETTINGS_JUNCTIONS:
     291          64 :             mySettings.junctionColorer.setActive(StringUtils::toInt(attrs.getStringSecure("junctionMode", "0")));
     292          32 :             mySettings.drawLinkTLIndex = parseTextSettings("drawLinkTLIndex", attrs, mySettings.drawLinkTLIndex);
     293          32 :             mySettings.drawLinkJunctionIndex = parseTextSettings("drawLinkJunctionIndex", attrs, mySettings.drawLinkJunctionIndex);
     294          32 :             mySettings.junctionID = parseTextSettings("junctionID", attrs, mySettings.junctionID);
     295          32 :             mySettings.junctionName = parseTextSettings("junctionName", attrs, mySettings.junctionName);
     296          32 :             mySettings.internalJunctionName = parseTextSettings("internalJunctionName", attrs, mySettings.internalJunctionName);
     297          32 :             mySettings.tlsPhaseIndex = parseTextSettings("tlsPhaseIndex", attrs, mySettings.tlsPhaseIndex);
     298          32 :             mySettings.tlsPhaseName = parseTextSettings("tlsPhaseName", attrs, mySettings.tlsPhaseName);
     299          32 :             mySettings.showLane2Lane = StringUtils::toBool(attrs.getStringSecure("showLane2Lane", toString(mySettings.showLane2Lane)));
     300          32 :             mySettings.drawJunctionShape = StringUtils::toBool(attrs.getStringSecure("drawShape", toString(mySettings.drawJunctionShape)));
     301          64 :             mySettings.drawCrossingsAndWalkingareas = StringUtils::toBool(attrs.getStringSecure(
     302          32 :                         "drawCrossingsAndWalkingareas", toString(mySettings.drawCrossingsAndWalkingareas)));
     303          32 :             mySettings.junctionSize = parseSizeSettings("junction", attrs, mySettings.junctionSize);
     304          64 :             mySettings.junctionValueRainBow = parseRainbowSettings("junctionValue", attrs, mySettings.junctionValueRainBow);
     305          32 :             myCurrentColorer = element;
     306          32 :             break;
     307          32 :         case SUMO_TAG_VIEWSETTINGS_ADDITIONALS:
     308          32 :             mySettings.addMode = StringUtils::toInt(attrs.getStringSecure("addMode", toString(mySettings.addMode)));
     309          32 :             mySettings.addSize = parseSizeSettings("add", attrs, mySettings.addSize);
     310          32 :             mySettings.addName = parseTextSettings("addName", attrs, mySettings.addName);
     311          32 :             mySettings.addFullName = parseTextSettings("addFullName", attrs, mySettings.addFullName);
     312             :             // color settings (temporal, will be integrated in a schema
     313          32 :             mySettings.colorSettings.busStopColorSign = parseColor(attrs, "busStopColorSign", mySettings.colorSettings.busStopColorSign);
     314          32 :             mySettings.colorSettings.chargingStationColor = parseColor(attrs, "chargingStationColor", mySettings.colorSettings.chargingStationColor);
     315          32 :             mySettings.colorSettings.chargingStationColorCharge = parseColor(attrs, "chargingStationColorCharge", mySettings.colorSettings.chargingStationColorCharge);
     316          32 :             mySettings.colorSettings.chargingStationColorSign = parseColor(attrs, "chargingStationColorSign", mySettings.colorSettings.chargingStationColorSign);
     317          32 :             mySettings.colorSettings.containerStopColor = parseColor(attrs, "containerStopColor", mySettings.colorSettings.containerStopColor);
     318          32 :             mySettings.colorSettings.containerStopColorSign = parseColor(attrs, "containerStopColorSign", mySettings.colorSettings.containerStopColorSign);
     319          32 :             mySettings.colorSettings.parkingAreaColor = parseColor(attrs, "parkingAreaColor", mySettings.colorSettings.parkingAreaColor);
     320          32 :             mySettings.colorSettings.parkingAreaColorSign = parseColor(attrs, "parkingAreaColorSign", mySettings.colorSettings.parkingAreaColorSign);
     321          32 :             mySettings.colorSettings.parkingSpaceColor = parseColor(attrs, "parkingSpaceColor", mySettings.colorSettings.parkingSpaceColor);
     322          32 :             mySettings.colorSettings.parkingSpaceColorContour = parseColor(attrs, "parkingSpaceColorContour", mySettings.colorSettings.parkingSpaceColorContour);
     323          32 :             mySettings.colorSettings.personTripColor = parseColor(attrs, "personTripColor", mySettings.colorSettings.personTripColor);
     324          32 :             mySettings.colorSettings.rideColor = parseColor(attrs, "rideColor", mySettings.colorSettings.rideColor);
     325          32 :             mySettings.colorSettings.selectedAdditionalColor = parseColor(attrs, "selectedAdditionalColor", mySettings.colorSettings.selectedAdditionalColor);
     326          32 :             mySettings.colorSettings.selectedConnectionColor = parseColor(attrs, "selectedConnectionColor", mySettings.colorSettings.selectedConnectionColor);
     327          32 :             mySettings.colorSettings.selectedContainerColor = parseColor(attrs, "selectedContainerColor", mySettings.colorSettings.selectedContainerColor);
     328          32 :             mySettings.colorSettings.selectedContainerPlanColor = parseColor(attrs, "selectedContainerPlanColor", mySettings.colorSettings.selectedContainerPlanColor);
     329          32 :             mySettings.colorSettings.selectedCrossingColor = parseColor(attrs, "selectedCrossingColor", mySettings.colorSettings.selectedCrossingColor);
     330          32 :             mySettings.colorSettings.selectedEdgeColor = parseColor(attrs, "selectedEdgeColor", mySettings.colorSettings.selectedEdgeColor);
     331          32 :             mySettings.colorSettings.selectedEdgeDataColor = parseColor(attrs, "selectedEdgeDataColor", mySettings.colorSettings.selectedEdgeDataColor);
     332          32 :             mySettings.colorSettings.selectedLaneColor = parseColor(attrs, "selectedLaneColor", mySettings.colorSettings.selectedLaneColor);
     333          32 :             mySettings.colorSettings.selectedPersonColor = parseColor(attrs, "selectedPersonColor", mySettings.colorSettings.selectedPersonColor);
     334          32 :             mySettings.colorSettings.selectedPersonPlanColor = parseColor(attrs, "selectedPersonPlanColor", mySettings.colorSettings.selectedPersonPlanColor);
     335          32 :             mySettings.colorSettings.selectedProhibitionColor = parseColor(attrs, "selectedProhibitionColor", mySettings.colorSettings.selectedProhibitionColor);
     336          32 :             mySettings.colorSettings.selectedRouteColor = parseColor(attrs, "selectedRouteColor", mySettings.colorSettings.selectedRouteColor);
     337          32 :             mySettings.colorSettings.selectedVehicleColor = parseColor(attrs, "selectedVehicleColor", mySettings.colorSettings.selectedVehicleColor);
     338          32 :             mySettings.colorSettings.selectionColor = parseColor(attrs, "selectionColor", mySettings.colorSettings.selectionColor);
     339          32 :             mySettings.colorSettings.stopColor = parseColor(attrs, "stopColor", mySettings.colorSettings.stopColor);
     340          32 :             mySettings.colorSettings.waypointColor = parseColor(attrs, "waypointColor", mySettings.colorSettings.waypointColor);
     341          32 :             mySettings.colorSettings.stopContainerColor = parseColor(attrs, "stopContainerColor", mySettings.colorSettings.stopContainerColor);
     342          32 :             mySettings.colorSettings.stopPersonColor = parseColor(attrs, "stopPersonColor", mySettings.colorSettings.stopPersonColor);
     343          32 :             mySettings.colorSettings.trainStopColor = parseColor(attrs, "trainStopColor", mySettings.colorSettings.trainStopColor);
     344          32 :             mySettings.colorSettings.trainStopColorSign = parseColor(attrs, "trainStopColorSign", mySettings.colorSettings.trainStopColorSign);
     345          32 :             mySettings.colorSettings.transhipColor = parseColor(attrs, "transhipColor", mySettings.colorSettings.transhipColor);
     346          32 :             mySettings.colorSettings.transportColor = parseColor(attrs, "transportColor", mySettings.colorSettings.transportColor);
     347          32 :             mySettings.colorSettings.vehicleTripColor = parseColor(attrs, "vehicleTripColor", mySettings.colorSettings.vehicleTripColor);
     348          32 :             mySettings.colorSettings.walkColor = parseColor(attrs, "walkColor", mySettings.colorSettings.walkColor);
     349          32 :             mySettings.widthSettings.personTripWidth = StringUtils::toDouble(attrs.getStringSecure("personTripWidth", toString(mySettings.widthSettings.personTripWidth)));
     350          32 :             mySettings.widthSettings.rideWidth = StringUtils::toDouble(attrs.getStringSecure("rideWidth", toString(mySettings.widthSettings.rideWidth)));
     351          32 :             mySettings.widthSettings.transhipWidth = StringUtils::toDouble(attrs.getStringSecure("transhipWidth", toString(mySettings.widthSettings.transhipWidth)));
     352          32 :             mySettings.widthSettings.transportWidth = StringUtils::toDouble(attrs.getStringSecure("transportWidth", toString(mySettings.widthSettings.transportWidth)));
     353          32 :             mySettings.widthSettings.tripWidth = StringUtils::toDouble(attrs.getStringSecure("tripWidth", toString(mySettings.widthSettings.tripWidth)));
     354          32 :             mySettings.widthSettings.walkWidth = StringUtils::toDouble(attrs.getStringSecure("walkWidth", toString(mySettings.widthSettings.walkWidth)));
     355          32 :             mySettings.colorSettings.busStopColor = parseColor(attrs, "busStopColor", mySettings.colorSettings.busStopColor);
     356          32 :             break;
     357          32 :         case SUMO_TAG_VIEWSETTINGS_POIS:
     358          64 :             mySettings.poiTextParam = attrs.getStringSecure("poiTextParam", mySettings.poiTextParam);
     359          32 :             mySettings.poiSize = parseSizeSettings("poi", attrs, mySettings.poiSize);
     360          32 :             mySettings.poiDetail = StringUtils::toInt(attrs.getStringSecure("poiDetail", toString(mySettings.poiDetail)));
     361          32 :             mySettings.poiName = parseTextSettings("poiName", attrs, mySettings.poiName);
     362          32 :             mySettings.poiType = parseTextSettings("poiType", attrs, mySettings.poiType);
     363          32 :             mySettings.poiText = parseTextSettings("poiText", attrs, mySettings.poiText);
     364          64 :             mySettings.poiColorer.setActive(StringUtils::toInt(attrs.getStringSecure("personMode", "0")));
     365          32 :             myCurrentColorer = element;
     366          32 :             break;
     367             :         case SUMO_TAG_VIEWSETTINGS_POLYS:
     368          28 :             mySettings.polySize = parseSizeSettings("poly", attrs, mySettings.polySize);
     369          28 :             mySettings.polyName = parseTextSettings("polyName", attrs, mySettings.polyName);
     370          28 :             mySettings.polyType = parseTextSettings("polyType", attrs, mySettings.polyType);
     371          56 :             mySettings.polyColorer.setActive(StringUtils::toInt(attrs.getStringSecure("personMode", "0")));
     372          28 :             myCurrentColorer = element;
     373          28 :             break;
     374          32 :         case SUMO_TAG_VIEWSETTINGS_LEGEND:
     375          32 :             mySettings.showSizeLegend = StringUtils::toBool(attrs.getStringSecure("showSizeLegend", toString(mySettings.showSizeLegend)));
     376          32 :             mySettings.showColorLegend = StringUtils::toBool(attrs.getStringSecure("showColorLegend", toString(mySettings.showColorLegend)));
     377          64 :             mySettings.showVehicleColorLegend = StringUtils::toBool(attrs.getStringSecure("showVehicleColorLegend", toString(mySettings.showVehicleColorLegend)));
     378          32 :             break;
     379             :         case SUMO_TAG_VIEWSETTINGS_DECAL: {
     380             :             GUISUMOAbstractView::Decal d;
     381           7 :             if (attrs.hasAttribute(SUMO_ATTR_FILE)) {
     382          12 :                 d.filename = StringUtils::substituteEnvironment(attrs.get<std::string>(SUMO_ATTR_FILE, nullptr, ok));
     383             :             } else {
     384           2 :                 d.filename = attrs.getStringSecure("filename", d.filename);
     385           2 :                 WRITE_WARNING(TL("The 'filename' attribute is deprecated for decals. Please use 'file'."));
     386             :             }
     387           7 :             if (d.filename != "" && !FileHelpers::isAbsolute(d.filename)) {
     388          14 :                 d.filename = FileHelpers::getConfigurationRelative(getFileName(), d.filename);
     389             :             }
     390           7 :             d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, d.centerX);
     391           7 :             d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, d.centerY);
     392           7 :             d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, d.centerZ);
     393           7 :             d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, nullptr, ok, d.width);
     394           7 :             d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, nullptr, ok, d.height);
     395           7 :             d.altitude = StringUtils::toDouble(attrs.getStringSecure("altitude", "0"));
     396           7 :             d.rot = StringUtils::toDouble(attrs.getStringSecure("rotation", toString(d.rot)));
     397           7 :             d.tilt = StringUtils::toDouble(attrs.getStringSecure("tilt", toString(d.tilt)));
     398           7 :             d.roll = StringUtils::toDouble(attrs.getStringSecure("roll", toString(d.roll)));
     399           7 :             d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, nullptr, ok, d.layer);
     400           7 :             d.screenRelative = StringUtils::toBool(attrs.getStringSecure("screenRelative", toString(d.screenRelative)));
     401           7 :             d.initialised = false;
     402           7 :             myDecals.push_back(d);
     403             :         }
     404           7 :         break;
     405             :         case SUMO_TAG_VIEWSETTINGS_LIGHT: {
     406             :             GUISUMOAbstractView::Decal d;
     407           0 :             d.filename = "light" + attrs.getOpt<std::string>(SUMO_ATTR_INDEX, nullptr, ok, "0");
     408           0 :             d.centerX = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, d.centerX);
     409           0 :             d.centerY = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, d.centerY);
     410           0 :             d.centerZ = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, d.centerZ);
     411           0 :             d.width = attrs.getOpt<double>(SUMO_ATTR_WIDTH, nullptr, ok, d.width);
     412           0 :             d.height = attrs.getOpt<double>(SUMO_ATTR_HEIGHT, nullptr, ok, d.height);
     413           0 :             d.altitude = StringUtils::toDouble(attrs.getStringSecure("altitude", "0"));
     414           0 :             d.rot = StringUtils::toDouble(attrs.getStringSecure("rotation", toString(d.rot)));
     415           0 :             d.tilt = StringUtils::toDouble(attrs.getStringSecure("tilt", toString(d.tilt)));
     416           0 :             d.roll = StringUtils::toDouble(attrs.getStringSecure("roll", toString(d.roll)));
     417           0 :             d.layer = attrs.getOpt<double>(SUMO_ATTR_LAYER, nullptr, ok, d.layer);
     418           0 :             d.initialised = false;
     419           0 :             myDecals.push_back(d);
     420             :         }
     421           0 :         break;
     422           0 :         case SUMO_TAG_VIEWSETTINGS_EVENT: {
     423           0 :             const std::string id = attrs.get<std::string>(SUMO_ATTR_ID, nullptr, ok);
     424           0 :             const std::string cmd = attrs.get<std::string>(SUMO_ATTR_COMMAND, nullptr, ok);
     425           0 :             const double prob = attrs.get<double>(SUMO_ATTR_PROB, id.c_str(), ok);
     426           0 :             myEventDistributions[id].add(cmd, prob);
     427             :         }
     428           0 :         break;
     429           0 :         case SUMO_TAG_VIEWSETTINGS_EVENT_JAM_TIME:
     430           0 :             myJamSoundTime = attrs.get<double>(SUMO_ATTR_VALUE, nullptr, ok);
     431           0 :             break;
     432             :         default:
     433             :             break;
     434             :     }
     435       17312 : }
     436             : 
     437             : void
     438       17312 : GUISettingsHandler::myEndElement(int element) {
     439       17312 :     switch (element) {
     440          32 :         case SUMO_TAG_VIEWSETTINGS_SCHEME: {
     441          32 :             if (mySettings.name != "") {
     442          32 :                 gSchemeStorage.add(mySettings);
     443          32 :                 myLoadedSettingNames.push_back(mySettings.name);
     444             :             }
     445             :         }
     446             :     }
     447       17312 : }
     448             : 
     449             : 
     450             : RGBColor
     451        1188 : GUISettingsHandler::parseColor(const SUMOSAXAttributes& attrs, const std::string attribute, const RGBColor& defaultValue) const {
     452        1188 :     bool ok = true;
     453        3208 :     return RGBColor::parseColorReporting(attrs.getStringSecure(attribute, toString(defaultValue)), attribute.c_str(), nullptr, true, ok);
     454             : }
     455             : 
     456             : 
     457             : GUIVisualizationTextSettings
     458         864 : GUISettingsHandler::parseTextSettings(
     459             :     const std::string& prefix, const SUMOSAXAttributes& attrs,
     460             :     GUIVisualizationTextSettings defaults) {
     461         864 :     bool ok = true;
     462             :     return GUIVisualizationTextSettings(
     463        2256 :                StringUtils::toBool(attrs.getStringSecure(prefix + "_show", toString(defaults.showText))),
     464        2256 :                StringUtils::toDouble(attrs.getStringSecure(prefix + "_size", toString(defaults.size))),
     465        2344 :                RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_color", toString(defaults.color)), "textSettings", nullptr, true, ok),
     466        2464 :                RGBColor::parseColorReporting(attrs.getStringSecure(prefix + "_bgColor", toString(defaults.bgColor)), "textSettings", nullptr, true, ok),
     467        2592 :                StringUtils::toBool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constSize))),
     468        8640 :                StringUtils::toBool(attrs.getStringSecure(prefix + "_onlySelected", toString(defaults.onlySelected))));
     469             : }
     470             : 
     471             : 
     472             : GUIVisualizationSizeSettings
     473         204 : GUISettingsHandler::parseSizeSettings(
     474             :     const std::string& prefix, const SUMOSAXAttributes& attrs,
     475             :     GUIVisualizationSizeSettings defaults) {
     476             :     return GUIVisualizationSizeSettings(
     477         464 :                StringUtils::toDouble(attrs.getStringSecure(prefix + "_minSize", toString(defaults.minSize))),
     478         612 :                StringUtils::toDouble(attrs.getStringSecure(prefix + "_exaggeration", toString(defaults.exaggeration))),
     479         612 :                StringUtils::toBool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constantSize))),
     480        1224 :                StringUtils::toBool(attrs.getStringSecure(prefix + "_constantSizeSelected", toString(defaults.constantSizeSelected))));
     481             : }
     482             : 
     483             : GUIVisualizationRainbowSettings
     484          64 : GUISettingsHandler::parseRainbowSettings(
     485             :     const std::string& prefix, const SUMOSAXAttributes& attrs,
     486             :     GUIVisualizationRainbowSettings defaults) {
     487             :     return GUIVisualizationRainbowSettings(
     488         192 :                StringUtils::toBool(attrs.getStringSecure(prefix + "HideCheck", toString(defaults.hideMin))),
     489         192 :                StringUtils::toDouble(attrs.getStringSecure(prefix + "HideThreshold", toString(defaults.minThreshold))),
     490         192 :                StringUtils::toBool(attrs.getStringSecure(prefix + "HideCheck2", toString(defaults.hideMax))),
     491         192 :                StringUtils::toDouble(attrs.getStringSecure(prefix + "HideThreshold2", toString(defaults.maxThreshold))),
     492         192 :                StringUtils::toBool(attrs.getStringSecure(prefix + "SetNeutral", toString(defaults.hideMax))),
     493         192 :                StringUtils::toDouble(attrs.getStringSecure(prefix + "NeutralThreshold", toString(defaults.neutralThreshold))),
     494         576 :                StringUtils::toBool(attrs.getStringSecure(prefix + "FixRange", toString(defaults.fixRange))));
     495             : }
     496             : 
     497             : const std::vector<std::string>&
     498           0 : GUISettingsHandler::addSettings(GUISUMOAbstractView* view) const {
     499           0 :     if (view) {
     500           0 :         for (std::string name : myLoadedSettingNames) {
     501           0 :             FXint index = view->getColoringSchemesCombo()->appendIconItem(name.c_str());
     502           0 :             view->getColoringSchemesCombo()->setCurrentItem(index);
     503           0 :             view->setColorScheme(name);
     504             :         }
     505             :     }
     506           0 :     return myLoadedSettingNames;
     507             : }
     508             : 
     509             : 
     510             : void
     511          38 : GUISettingsHandler::applyViewport(GUISUMOAbstractView* view) const {
     512          38 :     if (myLookFrom.z() > 0 || myZoom > 0) {
     513             :         // z value stores zoom so we must convert first
     514           6 :         double z = (view->is3DView()) ? myLookFrom.z() : view->getChanger().zoom2ZPos(myZoom);
     515           6 :         if (view->is3DView() && !myZCoordSet) { // set view angle to ground to at least 45 degrees if no Z coordinate is given
     516           0 :             z = myLookFrom.distanceTo2D(myLookAt) * sin(PI * 0.25);
     517             :         }
     518             :         Position lookFrom(myLookFrom.x(), myLookFrom.y(), z);
     519           6 :         view->setViewportFromToRot(lookFrom, myLookAt, myRotation);
     520           6 :         if (view->is3DView() && !myZCoordSet) {
     521           0 :             view->recenterView();
     522             :         }
     523             :     }
     524          38 : }
     525             : 
     526             : 
     527             : void
     528          38 : GUISettingsHandler::setSnapshots(GUISUMOAbstractView* view) const {
     529          38 :     if (!mySnapshots.empty()) {
     530           2 :         for (auto item : mySnapshots) {
     531           3 :             for (auto file : item.second) {
     532           2 :                 view->addSnapshot(item.first, file);
     533             :             }
     534             :         }
     535             :     }
     536          38 : }
     537             : 
     538             : 
     539             : bool
     540           0 : GUISettingsHandler::hasDecals() const {
     541           0 :     return !myDecals.empty();
     542             : }
     543             : 
     544             : 
     545             : const std::vector<GUISUMOAbstractView::Decal>&
     546          38 : GUISettingsHandler::getDecals() const {
     547          38 :     return myDecals;
     548             : }
     549             : 
     550             : 
     551             : double
     552          46 : GUISettingsHandler::getDelay() const {
     553          46 :     return myDelay;
     554             : }
     555             : 
     556             : 
     557             : std::vector<SUMOTime>
     558           0 : GUISettingsHandler::loadBreakpoints(const std::string& file) {
     559             :     std::vector<SUMOTime> result;
     560           0 :     std::ifstream strm(file.c_str());
     561           0 :     if (!strm.good()) {
     562           0 :         WRITE_ERRORF(TL("Could not open '%'."), file);
     563           0 :         return result;
     564             :     }
     565           0 :     while (strm.good()) {
     566             :         std::string val;
     567           0 :         strm >> val;
     568           0 :         if (val.length() == 0) {
     569             :             continue;
     570             :         }
     571             :         try {
     572           0 :             SUMOTime value = string2time(val);
     573           0 :             result.push_back(value);
     574           0 :         } catch (NumberFormatException& e) {
     575           0 :             WRITE_ERRORF(TL("A breakpoint value must be a time description (%)."), toString(e.what()));
     576           0 :         } catch (EmptyData&) {
     577           0 :         } catch (ProcessError&) {
     578           0 :             WRITE_ERRORF(TL("Could not decode breakpoint '%'."), val);
     579           0 :         }
     580             :     }
     581             :     return result;
     582           0 : }
     583             : 
     584             : 
     585             : RandomDistributor<std::string>
     586          76 : GUISettingsHandler::getEventDistribution(const std::string& id) {
     587          76 :     RandomDistributor<std::string> result = myEventDistributions[id];
     588          76 :     if (result.getOverallProb() > 0 && result.getOverallProb() < 1) {
     589             :         // unscaled probabilities are assumed, fill up with dummy event
     590           0 :         result.add("", 1. - result.getOverallProb());
     591             :     }
     592          76 :     return result;
     593           0 : }
     594             : 
     595             : 
     596             : /****************************************************************************/

Generated by: LCOV version 1.14