Path: blob/main/src/utils/gui/windows/GUIDialog_ViewSettings.cpp
169684 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GUIDialog_ViewSettings.cpp14/// @author Daniel Krajzewicz15/// @author Jakob Erdmann16/// @author Michael Behrisch17/// @author Laura Bieker18/// @author Mirko Barthauer19/// @date Wed, 21. Dec 200520///21// The dialog to change the view (gui) settings.22/****************************************************************************/23#include <config.h>2425#include <fstream>26#include <fxkeys.h>27#include <utils/gui/windows/GUIAppEnum.h>28#include <utils/gui/windows/GUISUMOAbstractView.h>29#include <utils/foxtools/MFXUtils.h>30#include <utils/foxtools/MFXComboBoxIcon.h>31#include <utils/common/RGBColor.h>32#include <utils/common/ToString.h>33#include <utils/common/StringUtils.h>34#include <utils/common/StringUtils.h>35#include <utils/options/OptionsCont.h>36#include <utils/gui/settings/GUICompleteSchemeStorage.h>37#include <utils/gui/images/GUIIconSubSys.h>38#include <utils/gui/div/GUIIOGlobals.h>39#include <utils/gui/div/GUIDesigns.h>40#include <utils/importio/LineReader.h>41#include <utils/iodevices/OutputDevice.h>42#include <utils/gui/settings/GUISettingsHandler.h>43#include <utils/gui/div/GUIGlobalViewObjectsHandler.h>4445#include "GUIDialog_EditViewport.h"46#include "GUIDialog_ViewSettings.h"474849// ===========================================================================50// FOX callback mapping51// ===========================================================================5253FXDEFMAP(GUIDialog_ViewSettings::SizePanel) GUIDialog_SizeMap[] = {54FXMAPFUNC(SEL_CHANGED, MID_SIMPLE_VIEW_SIZECHANGE, GUIDialog_ViewSettings::SizePanel::onCmdSizeChange),55FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_SIZECHANGE, GUIDialog_ViewSettings::SizePanel::onCmdSizeChange)56};5758FXDEFMAP(GUIDialog_ViewSettings) GUIDialog_ViewSettingsMap[] = {59FXMAPFUNC(SEL_CHANGED, MID_SIMPLE_VIEW_COLORCHANGE, GUIDialog_ViewSettings::onCmdColorChange),60FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_COLORCHANGE, GUIDialog_ViewSettings::onCmdColorChange),61FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_NAMECHANGE, GUIDialog_ViewSettings::onCmdNameChange),62FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_OK, GUIDialog_ViewSettings::onCmdOk),63FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_CANCEL, GUIDialog_ViewSettings::onCmdCancel),64FXMAPFUNC(SEL_KEYPRESS, 0, GUIDialog_ViewSettings::onKeyPress),65// settings66FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_SAVE, GUIDialog_ViewSettings::onCmdSaveSetting),67FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_SAVE, GUIDialog_ViewSettings::onUpdSaveSetting),68FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_DELETE, GUIDialog_ViewSettings::onCmdDeleteSetting),69FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_DELETE, GUIDialog_ViewSettings::onUpdDeleteSetting),70FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_EXPORT, GUIDialog_ViewSettings::onCmdExportSetting),71FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_EXPORT, GUIDialog_ViewSettings::onUpdExportSetting),72FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_IMPORT, GUIDialog_ViewSettings::onCmdImportSetting),73FXMAPFUNC(SEL_UPDATE, MID_SIMPLE_VIEW_IMPORT, GUIDialog_ViewSettings::onUpdImportSetting),74// decals75FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_LOAD_DECAL, GUIDialog_ViewSettings::onCmdLoadDecal),76FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_LOAD_DECALS_XML, GUIDialog_ViewSettings::onCmdLoadXMLDecals),77FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_SAVE_DECALS_XML, GUIDialog_ViewSettings::onCmdSaveXMLDecals),78FXMAPFUNC(SEL_COMMAND, MID_SIMPLE_VIEW_CLEAR_DECALS, GUIDialog_ViewSettings::onCmdClearDecals),79};8081FXIMPLEMENT(GUIDialog_ViewSettings, FXTopWindow, GUIDialog_ViewSettingsMap, ARRAYNUMBER(GUIDialog_ViewSettingsMap))82FXIMPLEMENT(GUIDialog_ViewSettings::SizePanel, FXObject, GUIDialog_SizeMap, ARRAYNUMBER(GUIDialog_SizeMap))838485// ===========================================================================86// method definitions87// ===========================================================================88#ifdef _MSC_VER89#pragma warning(push)90#pragma warning(disable: 4355) // mask warning about "this" in initializers91#endif92GUIDialog_ViewSettings::GUIDialog_ViewSettings(GUISUMOAbstractView* parent, GUIVisualizationSettings* settings) :93FXTopWindow(parent, TL("View Settings"),94GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL),95GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL),96GUIDesignViewSettingsMainDialog),97GUIPersistentWindowPos(this, "VIEWSETTINGS", true, 20, 40, 700, 500, 400, 20),98myParent(parent),99mySettings(settings),100myBackup(settings->name, settings->netedit) {101// make a backup copy102myBackup.copy(*settings);103// create content frame104FXVerticalFrame* contentFrame = new FXVerticalFrame(this, GUIDesignViewSettingsVerticalFrame1);105// build header106buildHeader(contentFrame);107// create tabbook for every section108FXTabBook* tabbook = new FXTabBook(contentFrame, nullptr, 0, GUIDesignViewSettingsTabBook1);109// build background frame110buildBackgroundFrame(tabbook);111// build streets frame112buildStreetsFrame(tabbook);113// build vehicles frame114buildVehiclesFrame(tabbook);115// build persons frame116buildPersonsFrame(tabbook);117// build containers frame118buildContainersFrame(tabbook);119// build junctions frame120buildJunctionsFrame(tabbook);121// build additionals frame122buildAdditionalsFrame(tabbook);123// build demand frame124if (mySettings->netedit) {125buildDemandFrame(tabbook);126}127// build POIs frame128buildPOIsFrame(tabbook);129// build polygons frame130buildPolygonsFrame(tabbook);131// build selection frame (only in netedit)132if (mySettings->netedit) {133buildSelectionFrame(tabbook);134}135// build data frame (only in netedit)136if (mySettings->netedit) {137buildDataFrame(tabbook);138}139// build legend frame140buildLegendFrame(tabbook);141// build 3D frame142build3DFrame(tabbook);143if (mySettings->netedit) {144myFrame3D->disable();145}146// build openGL frame147buildOpenGLFrame(tabbook);148// build buttons149buildButtons(contentFrame);150// rebuild color matrix151rebuildColorMatrices(false);152setIcon(GUIIconSubSys::getIcon(GUIIcon::EMPTY));153loadWindowPos();154}155#ifdef _MSC_VER156#pragma warning(pop)157#endif158159160GUIDialog_ViewSettings::~GUIDialog_ViewSettings() {161myParent->remove(this);162// delete name panels163delete myInternalJunctionNamePanel;164delete myInternalEdgeNamePanel;165delete myTLSPhaseIndexPanel;166delete myTLSPhaseNamePanel;167delete myCwaEdgeNamePanel;168delete myStreetNamePanel;169delete myEdgeValuePanel;170delete myEdgeScaleValuePanel;171delete myJunctionIndexPanel;172delete myTLIndexPanel;173delete myJunctionIDPanel;174delete myJunctionNamePanel;175delete myVehicleNamePanel;176delete myVehicleValuePanel;177delete myVehicleScaleValuePanel;178delete myVehicleTextPanel;179delete myPersonNamePanel;180delete myPersonValuePanel;181delete myAddNamePanel;182delete myAddFullNamePanel;183delete myPOINamePanel;184delete myPOITypePanel;185delete myPOITextPanel;186delete myPolyNamePanel;187delete myPolyTypePanel;188delete myEdgeNamePanel;189delete myDataValuePanel;190delete myGeometryIndicesPanel;191// delete size panels192delete myVehicleSizePanel;193delete myPersonSizePanel;194delete myJunctionSizePanel;195delete myPOISizePanel;196delete myPolySizePanel;197delete myAddSizePanel;198// delete rainbow panels199delete myEdgeRainbowPanel;200delete myJunctionRainbowPanel;201delete myDataRainbowPanel;202delete myVehicleRainbowPanel;203}204205206void207GUIDialog_ViewSettings::show() {208// update buttons that can be changed externally209myShowGrid->setCheck(mySettings->showGrid);210myGridXSizeDialer->setValue(mySettings->gridXSize);211myGridYSizeDialer->setValue(mySettings->gridYSize);212// create myNewDecalsTable213myDecalsTable->create();214myDecalsTable->fillTable();215FXTopWindow::show();216}217218219GUISUMOAbstractView*220GUIDialog_ViewSettings::getSUMOAbstractView() {221return myParent;222}223224225void226GUIDialog_ViewSettings::setCurrent(GUIVisualizationSettings* settings) {227mySettings = settings;228myBackup.copy(*settings);229onCmdNameChange(nullptr, 0, nullptr);230}231232233long234GUIDialog_ViewSettings::onCmdOk(FXObject*, FXSelector, void*) {235getApp()->reg().writeIntEntry("SETTINGS", "comboRows", (int)myComboRows->getValue());236hide();237return 1;238}239240241long242GUIDialog_ViewSettings::onCmdCancel(FXObject*, FXSelector, void*) {243hide();244mySettings->copy(myBackup);245myParent->update();246return 1;247}248249250long251GUIDialog_ViewSettings::onKeyPress(FXObject* o, FXSelector sel, void* ptr) {252const FXEvent* e = (FXEvent*) ptr;253if(e->code==KEY_Escape){254onCmdCancel(nullptr, 0, nullptr);255return 1;256}257return FXTopWindow::onKeyPress(o, sel, ptr);258}259260261long262GUIDialog_ViewSettings::onCmdNameChange(FXObject*, FXSelector, void* ptr) {263if (ptr != nullptr) {264FXString dataS = (char*) ptr; // !!!unicode265// check whether this item has been added twice266if (dataS.text() == mySchemeName->getItemText(mySchemeName->getNumItems() - 1)) {267for (int i = 0; i < mySchemeName->getNumItems() - 1; ++i) {268if (dataS.text() == mySchemeName->getItemText(i)) {269mySchemeName->removeItem(i);270}271}272}273myBackup.copy(gSchemeStorage.get(dataS.text()));274mySettings = &gSchemeStorage.get(dataS.text());275}276myBackgroundColor->setRGBA(MFXUtils::getFXColor(mySettings->backgroundColor));277278myBusStopColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.busStopColor));279myBusStopColorSign->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.busStopColorSign));280myTrainStopColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.trainStopColor));281myTrainStopColorSign->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.trainStopColorSign));282myContainerStopColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.containerStopColor));283myContainerStopColorSign->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.containerStopColorSign));284myChargingStationColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.chargingStationColor));285myChargingStationColorSign->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.chargingStationColorSign));286if (mySettings->netedit) {287myStopColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.stopColor));288myWaypointColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.waypointColor));289myVehicleTripsColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.vehicleTripColor));290myStopPersonsColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.stopPersonColor));291myPersonTripColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.personTripColor));292myWalkColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.walkColor));293myRideColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.rideColor));294myStopContainersColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.stopContainerColor));295myTransportColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.transportColor));296myTranshipColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.transhipColor));297298myTripWidth->setValue(mySettings->widthSettings.tripWidth);299myPersonTripWidth->setValue(mySettings->widthSettings.personTripWidth);300myWalkWidth->setValue(mySettings->widthSettings.walkWidth);301myRideWidth->setValue(mySettings->widthSettings.rideWidth);302myTransportWidth->setValue(mySettings->widthSettings.transportWidth);303myTranshipWidth->setValue(mySettings->widthSettings.transhipWidth);304305mySelectionColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectionColor));306mySelectedEdgeColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedEdgeColor));307mySelectedLaneColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedLaneColor));308mySelectedConnectionColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedConnectionColor));309mySelectedProhibitionColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedProhibitionColor));310mySelectedCrossingColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedCrossingColor));311mySelectedAdditionalColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedAdditionalColor));312mySelectedRouteColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedRouteColor));313mySelectedVehicleColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedVehicleColor));314mySelectedPersonColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedPersonColor));315mySelectedPersonPlanColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedPersonPlanColor));316mySelectedEdgeDataColor->setRGBA(MFXUtils::getFXColor(mySettings->colorSettings.selectedEdgeDataColor));317318myDataValuePanel->update(mySettings->dataValue);319myDataColorMode->setCurrentItem((FXint) mySettings->dataColorer.getActive());320myEdgeRelationUpscaleDialer->setValue(mySettings->edgeRelWidthExaggeration);321myTazRelationUpscaleDialer->setValue(mySettings->tazRelWidthExaggeration);322myDataRainbowPanel->update(mySettings->dataValueRainBow);323}324325myLaneEdgeColorMode->setCurrentItem((FXint) mySettings->getLaneEdgeMode());326myLaneEdgeScaleMode->setCurrentItem((FXint) mySettings->getLaneEdgeScaleMode());327myShowLaneBorders->setCheck(mySettings->laneShowBorders);328myShowBikeMarkings->setCheck(mySettings->showBikeMarkings);329myShowLaneDecals->setCheck(mySettings->showLinkDecals);330myRealisticLinkRules->setCheck(mySettings->realisticLinkRules);331myShowLinkRules->setCheck(mySettings->showLinkRules);332myShowRails->setCheck(mySettings->showRails);333mySecondaryShape->setCheck(mySettings->secondaryShape);334myEdgeNamePanel->update(mySettings->edgeName);335myInternalEdgeNamePanel->update(mySettings->internalEdgeName);336myCwaEdgeNamePanel->update(mySettings->cwaEdgeName);337myStreetNamePanel->update(mySettings->streetName);338myEdgeValuePanel->update(mySettings->edgeValue);339myEdgeScaleValuePanel->update(mySettings->edgeScaleValue);340myHideMacroConnectors->setCheck(mySettings->hideConnectors);341myShowLaneDirection->setCheck(mySettings->showLaneDirection);342myShowSublanes->setCheck(mySettings->showSublanes);343mySpreadSuperposed->setCheck(mySettings->spreadSuperposed);344myDisableHideByZoom->setCheck(mySettings->disableHideByZoom);345myEdgeRainbowPanel->update(mySettings->edgeValueRainBow);346myLaneWidthUpscaleDialer->setValue(mySettings->laneWidthExaggeration);347myLaneMinWidthDialer->setValue(mySettings->laneMinSize);348349myVehicleColorMode->setCurrentItem((FXint) mySettings->vehicleColorer.getActive());350myVehicleScaleMode->setCurrentItem((FXint) mySettings->vehicleScaler.getActive());351myVehicleShapeDetail->setCurrentItem(mySettings->vehicleQuality);352myShowBlinker->setCheck(mySettings->showBlinker);353myShowMinGap->setCheck(mySettings->drawMinGap);354myShowBrakeGap->setCheck(mySettings->drawBrakeGap);355myShowBTRange->setCheck(mySettings->showBTRange);356myShowRouteIndex->setCheck(mySettings->showRouteIndex);357myScaleLength->setCheck(mySettings->scaleLength);358myDrawReversed->setCheck(mySettings->drawReversed);359myShowParkingInfo->setCheck(mySettings->showParkingInfo);360myShowChargingInfo->setCheck(mySettings->showChargingInfo);361/*362myShowLaneChangePreference->setCheck(mySettings->drawLaneChangePreference);363*/364myVehicleNamePanel->update(mySettings->vehicleName);365myVehicleValuePanel->update(mySettings->vehicleValue);366myVehicleScaleValuePanel->update(mySettings->vehicleScaleValue);367myVehicleTextPanel->update(mySettings->vehicleText);368myVehicleSizePanel->update(mySettings->vehicleSize);369myVehicleRainbowPanel->update(mySettings->vehicleValueRainBow);370371myPersonColorMode->setCurrentItem((FXint) mySettings->personColorer.getActive());372myPersonShapeDetail->setCurrentItem(mySettings->personQuality);373myPersonNamePanel->update(mySettings->personName);374myPersonValuePanel->update(mySettings->personValue);375myPersonSizePanel->update(mySettings->personSize);376377myContainerColorMode->setCurrentItem((FXint) mySettings->containerColorer.getActive());378myContainerShapeDetail->setCurrentItem(mySettings->containerQuality);379myContainerNamePanel->update(mySettings->containerName);380myContainerSizePanel->update(mySettings->containerSize);381382myJunctionColorMode->setCurrentItem((FXint) mySettings->junctionColorer.getActive());383myTLIndexPanel->update(mySettings->drawLinkTLIndex);384myJunctionIndexPanel->update(mySettings->drawLinkJunctionIndex);385myJunctionIDPanel->update(mySettings->junctionID);386myJunctionNamePanel->update(mySettings->junctionName);387myInternalJunctionNamePanel->update(mySettings->internalJunctionName);388myTLSPhaseIndexPanel->update(mySettings->tlsPhaseIndex);389myTLSPhaseNamePanel->update(mySettings->tlsPhaseName);390myJunctionSizePanel->update(mySettings->junctionSize);391myJunctionRainbowPanel->update(mySettings->junctionValueRainBow);392393myAddNamePanel->update(mySettings->addName);394myAddFullNamePanel->update(mySettings->addFullName);395myAddSizePanel->update(mySettings->addSize);396397myPoiDetail->setValue(mySettings->poiDetail);398myPOIUseCustomLayer->setCheck(mySettings->poiUseCustomLayer);399myPOICustomLayer->setValue(mySettings->poiCustomLayer);400myPOINamePanel->update(mySettings->poiName);401myPOITypePanel->update(mySettings->poiType);402myPOITextPanel->update(mySettings->poiText);403myPOISizePanel->update(mySettings->poiSize);404405myPolyNamePanel->update(mySettings->polyName);406myPolyTypePanel->update(mySettings->polyType);407myPolySizePanel->update(mySettings->polySize);408myPolyUseCustomLayer->setCheck(mySettings->polyUseCustomLayer);409myPolyCustomLayer->setValue(mySettings->polyCustomLayer);410411myShowLane2Lane->setCheck(mySettings->showLane2Lane);412myDrawJunctionShape->setCheck(mySettings->drawJunctionShape);413myDrawCrossingsAndWalkingAreas->setCheck(mySettings->drawCrossingsAndWalkingareas);414myDither->setCheck(mySettings->dither);415myFPS->setCheck(mySettings->fps);416myTrueZ->setCheck(mySettings->trueZ);417myDrawBoundaries->setCheck(mySettings->drawBoundaries);418myForceDrawForRectangleSelection->setCheck(mySettings->forceDrawForRectangleSelection);419myDisableDottedContours->setCheck(mySettings->disableDottedContours);420myGeometryIndicesPanel->update(mySettings->geometryIndices);421myShowSizeLegend->setCheck(mySettings->showSizeLegend);422myShowColorLegend->setCheck(mySettings->showColorLegend);423myShowVehicleColorLegend->setCheck(mySettings->showVehicleColorLegend);424425myShowPedestrianNetwork->setCheck(mySettings->showPedestrianNetwork);426myPedestrianNetworkColor->setRGBA(MFXUtils::getFXColor(mySettings->pedestrianNetworkColor));427428myParent->setColorScheme(mySettings->name);429rebuildColorMatrices(true);430431update();432myParent->update();433return 1;434}435436437bool438GUIDialog_ViewSettings::updateColorRanges(FXObject* sender, std::vector<FXColorWell*>::const_iterator colIt,439std::vector<FXColorWell*>::const_iterator colEnd,440std::vector<FXRealSpinner*>::const_iterator threshIt,441std::vector<FXRealSpinner*>::const_iterator threshEnd,442std::vector<FXButton*>::const_iterator buttonIt,443GUIColorScheme& scheme) {444UNUSED_PARAMETER(threshEnd);445int pos = 0;446while (colIt != colEnd) {447if (scheme.isFixed()) {448if (sender == *colIt) {449scheme.setColor(pos, MFXUtils::getRGBColor((*colIt)->getRGBA()));450}451} else {452if (sender == *threshIt) {453const double val = (*threshIt)->getValue();454scheme.setThreshold(pos, val);455return false;456}457if (sender == *colIt) {458scheme.setColor(pos, MFXUtils::getRGBColor((*colIt)->getRGBA()));459return false;460}461if (sender == *buttonIt) {462scheme.addColor(MFXUtils::getRGBColor((*colIt)->getRGBA()), (*threshIt)->getValue());463return true;464} else if (sender == *(buttonIt + 1)) {465scheme.removeColor(pos);466return true;467}468// 2 buttons per item (add / remove)469threshIt++;470buttonIt += 2;471}472++colIt;473pos++;474}475return false;476}477478479bool480GUIDialog_ViewSettings::updateScaleRanges(FXObject* sender, std::vector<FXRealSpinner*>::const_iterator scaleIt,481std::vector<FXRealSpinner*>::const_iterator scaleEnd,482std::vector<FXRealSpinner*>::const_iterator threshIt,483std::vector<FXRealSpinner*>::const_iterator threshEnd,484std::vector<FXButton*>::const_iterator buttonIt,485GUIScaleScheme& scheme) {486int pos = 0;487while (scaleIt != scaleEnd) {488if (scheme.isFixed()) {489if (sender == *scaleIt) {490scheme.setColor(pos, (*scaleIt)->getValue());491}492} else {493if (sender == *threshIt) {494const double val = (*threshIt)->getValue();495double lo, hi;496if (pos != 0) {497threshIt--;498(*threshIt)->getRange(lo, hi);499(*threshIt)->setRange(lo, val);500threshIt++;501}502threshIt++;503if (threshIt != threshEnd) {504(*threshIt)->getRange(lo, hi);505(*threshIt)->setRange(val, hi);506}507scheme.setThreshold(pos, val);508return false;509}510if (sender == *scaleIt) {511scheme.setColor(pos, (*scaleIt)->getValue());512return false;513}514if (sender == *buttonIt) {515scheme.addColor((*scaleIt)->getValue(), (*threshIt)->getValue());516return true;517} else if (sender == *(buttonIt + 1)) {518scheme.removeColor(pos);519return true;520}521threshIt++;522buttonIt += 2;523}524++scaleIt;525pos++;526}527return false;528}529530531long532GUIDialog_ViewSettings::onCmdColorChange(FXObject* sender, FXSelector, void* /*val*/) {533GUIVisualizationSettings tmpSettings(mySettings->name);534tmpSettings.copy(*mySettings);535int prevLaneMode = mySettings->getLaneEdgeMode();536int prevLaneScaleMode = mySettings->getLaneEdgeScaleMode();537int prevVehicleMode = mySettings->vehicleColorer.getActive();538int prevVehicleScaleMode = mySettings->vehicleScaler.getActive();539int prevPersonMode = mySettings->personColorer.getActive();540int prevContainerMode = mySettings->containerColorer.getActive();541int prevJunctionMode = mySettings->junctionColorer.getActive();542int prevPOIMode = mySettings->poiColorer.getActive();543int prevPolyMode = mySettings->polyColorer.getActive();544int prevDataMode = mySettings->dataColorer.getActive();545bool doRebuildColorMatrices = false;546547tmpSettings.name = mySettings->name;548tmpSettings.backgroundColor = MFXUtils::getRGBColor(myBackgroundColor->getRGBA());549550// additionals551tmpSettings.colorSettings.busStopColor = MFXUtils::getRGBColor(myBusStopColor->getRGBA());552tmpSettings.colorSettings.busStopColorSign = MFXUtils::getRGBColor(myBusStopColorSign->getRGBA());553tmpSettings.colorSettings.trainStopColor = MFXUtils::getRGBColor(myTrainStopColor->getRGBA());554tmpSettings.colorSettings.trainStopColorSign = MFXUtils::getRGBColor(myTrainStopColorSign->getRGBA());555tmpSettings.colorSettings.containerStopColor = MFXUtils::getRGBColor(myContainerStopColor->getRGBA());556tmpSettings.colorSettings.containerStopColorSign = MFXUtils::getRGBColor(myContainerStopColorSign->getRGBA());557tmpSettings.colorSettings.chargingStationColor = MFXUtils::getRGBColor(myChargingStationColor->getRGBA());558tmpSettings.colorSettings.chargingStationColorSign = MFXUtils::getRGBColor(myChargingStationColorSign->getRGBA());559if (mySettings->netedit) {560tmpSettings.colorSettings.stopColor = MFXUtils::getRGBColor(myStopColor->getRGBA());561tmpSettings.colorSettings.waypointColor = MFXUtils::getRGBColor(myWaypointColor->getRGBA());562tmpSettings.colorSettings.vehicleTripColor = MFXUtils::getRGBColor(myVehicleTripsColor->getRGBA());563tmpSettings.colorSettings.stopPersonColor = MFXUtils::getRGBColor(myStopPersonsColor->getRGBA());564tmpSettings.colorSettings.personTripColor = MFXUtils::getRGBColor(myPersonTripColor->getRGBA());565tmpSettings.colorSettings.walkColor = MFXUtils::getRGBColor(myWalkColor->getRGBA());566tmpSettings.colorSettings.rideColor = MFXUtils::getRGBColor(myRideColor->getRGBA());567tmpSettings.colorSettings.stopContainerColor = MFXUtils::getRGBColor(myStopContainersColor->getRGBA());568tmpSettings.colorSettings.transportColor = MFXUtils::getRGBColor(myTransportColor->getRGBA());569tmpSettings.colorSettings.transhipColor = MFXUtils::getRGBColor(myTranshipColor->getRGBA());570571tmpSettings.widthSettings.tripWidth = myTripWidth->getValue();572tmpSettings.widthSettings.personTripWidth = myPersonTripWidth->getValue();573tmpSettings.widthSettings.walkWidth = myWalkWidth->getValue();574tmpSettings.widthSettings.rideWidth = myRideWidth->getValue();575tmpSettings.widthSettings.transportWidth = myTransportWidth->getValue();576tmpSettings.widthSettings.transhipWidth = myTranshipWidth->getValue();577578tmpSettings.colorSettings.selectionColor = MFXUtils::getRGBColor(mySelectionColor->getRGBA());579tmpSettings.colorSettings.selectedEdgeColor = MFXUtils::getRGBColor(mySelectedEdgeColor->getRGBA());580tmpSettings.colorSettings.selectedLaneColor = MFXUtils::getRGBColor(mySelectedLaneColor->getRGBA());581tmpSettings.colorSettings.selectedConnectionColor = MFXUtils::getRGBColor(mySelectedConnectionColor->getRGBA());582tmpSettings.colorSettings.selectedProhibitionColor = MFXUtils::getRGBColor(mySelectedProhibitionColor->getRGBA());583tmpSettings.colorSettings.selectedCrossingColor = MFXUtils::getRGBColor(mySelectedCrossingColor->getRGBA());584tmpSettings.colorSettings.selectedAdditionalColor = MFXUtils::getRGBColor(mySelectedAdditionalColor->getRGBA());585tmpSettings.colorSettings.selectedRouteColor = MFXUtils::getRGBColor(mySelectedRouteColor->getRGBA());586tmpSettings.colorSettings.selectedVehicleColor = MFXUtils::getRGBColor(mySelectedVehicleColor->getRGBA());587tmpSettings.colorSettings.selectedPersonColor = MFXUtils::getRGBColor(mySelectedPersonColor->getRGBA());588tmpSettings.colorSettings.selectedPersonPlanColor = MFXUtils::getRGBColor(mySelectedPersonPlanColor->getRGBA());589tmpSettings.colorSettings.selectedEdgeDataColor = MFXUtils::getRGBColor(mySelectedEdgeDataColor->getRGBA());590}591592tmpSettings.showGrid = (myShowGrid->getCheck() != FALSE);593tmpSettings.gridXSize = (double) myGridXSizeDialer->getValue();594tmpSettings.gridYSize = (double) myGridYSizeDialer->getValue();595596if (GUIVisualizationSettings::UseMesoSim) {597tmpSettings.edgeColorer.setActive(myLaneEdgeColorMode->getCurrentItem());598tmpSettings.edgeScaler.setActive(myLaneEdgeScaleMode->getCurrentItem());599} else {600tmpSettings.laneColorer.setActive(myLaneEdgeColorMode->getCurrentItem());601tmpSettings.laneScaler.setActive(myLaneEdgeScaleMode->getCurrentItem());602}603tmpSettings.laneShowBorders = (myShowLaneBorders->getCheck() != FALSE);604tmpSettings.showBikeMarkings = (myShowBikeMarkings->getCheck() != FALSE);605tmpSettings.showLinkDecals = (myShowLaneDecals->getCheck() != FALSE);606tmpSettings.realisticLinkRules = (myRealisticLinkRules->getCheck() != FALSE);607tmpSettings.showLinkRules = (myShowLinkRules->getCheck() != FALSE);608tmpSettings.showRails = (myShowRails->getCheck() != FALSE);609tmpSettings.secondaryShape = (mySecondaryShape->getCheck() != FALSE);610tmpSettings.edgeName = myEdgeNamePanel->getSettings();611tmpSettings.internalEdgeName = myInternalEdgeNamePanel->getSettings();612tmpSettings.cwaEdgeName = myCwaEdgeNamePanel->getSettings();613tmpSettings.streetName = myStreetNamePanel->getSettings();614tmpSettings.edgeValue = myEdgeValuePanel->getSettings();615tmpSettings.edgeScaleValue = myEdgeScaleValuePanel->getSettings();616tmpSettings.hideConnectors = (myHideMacroConnectors->getCheck() != FALSE);617tmpSettings.showLaneDirection = (myShowLaneDirection->getCheck() != FALSE);618tmpSettings.showSublanes = (myShowSublanes->getCheck() != FALSE);619tmpSettings.spreadSuperposed = (mySpreadSuperposed->getCheck() != FALSE);620tmpSettings.disableHideByZoom = (myDisableHideByZoom->getCheck() != FALSE);621if (sender == myParamKey) {622if (tmpSettings.getLaneEdgeScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL) {623tmpSettings.edgeParam = myParamKey->getText().text();624} else if (tmpSettings.getLaneEdgeScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL) {625tmpSettings.laneParam = myParamKey->getText().text();626} else if (tmpSettings.getLaneEdgeScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL) {627tmpSettings.edgeData = myParamKey->getText().text();628} else if (tmpSettings.getLaneEdgeScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_LIVE) {629tmpSettings.edgeData = myParamKey->getText().text();630}631} else if (sender == myScalingParamKey) {632if (tmpSettings.getLaneEdgeScaleScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL) {633tmpSettings.edgeDataScaling = myScalingParamKey->getText().text();634}635} else if (sender == myVehicleParamKey) {636if (tmpSettings.vehicleColorer.getScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL) {637tmpSettings.vehicleParam = myVehicleParamKey->getText().text();638}639} else if (sender == myVehicleScalingParamKey) {640if (tmpSettings.vehicleScaler.getScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL) {641tmpSettings.vehicleScaleParam = myVehicleScalingParamKey->getText().text();642}643} else if (sender == myDataParamKey) {644if (tmpSettings.dataColorer.getScheme().getName() == GUIVisualizationSettings::SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL) {645tmpSettings.relDataAttr = myDataParamKey->getText().text();646}647} else if (sender == myVehicleTextPanel->myCheck) {648updateVehicleParams();649} else if (sender == myVehicleTextParamKey) {650tmpSettings.vehicleTextParam = myVehicleTextParamKey->getText().text();651} else if (sender == myPOITextPanel->myCheck) {652updatePOIParams();653} else if (sender == myPOITextParamKey) {654tmpSettings.poiTextParam = myPOITextParamKey->getText().text();655} else if (sender == myMeanDataID) {656tmpSettings.edgeDataID = myMeanDataID->getText().text();657}658tmpSettings.edgeValueRainBow = myEdgeRainbowPanel->getSettings();659tmpSettings.laneWidthExaggeration = myLaneWidthUpscaleDialer->getValue();660tmpSettings.laneMinSize = myLaneMinWidthDialer->getValue();661662tmpSettings.vehicleColorer.setActive(myVehicleColorMode->getCurrentItem());663tmpSettings.vehicleScaler.setActive(myVehicleScaleMode->getCurrentItem());664tmpSettings.vehicleQuality = myVehicleShapeDetail->getCurrentItem();665tmpSettings.showBlinker = (myShowBlinker->getCheck() != FALSE);666tmpSettings.drawMinGap = (myShowMinGap->getCheck() != FALSE);667tmpSettings.drawBrakeGap = (myShowBrakeGap->getCheck() != FALSE);668tmpSettings.showBTRange = (myShowBTRange->getCheck() != FALSE);669tmpSettings.showRouteIndex = (myShowRouteIndex->getCheck() != FALSE);670tmpSettings.scaleLength = (myScaleLength->getCheck() != FALSE);671tmpSettings.drawReversed = (myDrawReversed->getCheck() != FALSE);672tmpSettings.showParkingInfo = (myShowParkingInfo->getCheck() != FALSE);673tmpSettings.showChargingInfo = (myShowChargingInfo->getCheck() != FALSE);674/*675tmpSettings.drawLaneChangePreference = (myShowLaneChangePreference->getCheck() != FALSE);676*/677tmpSettings.vehicleName = myVehicleNamePanel->getSettings();678tmpSettings.vehicleValue = myVehicleValuePanel->getSettings();679tmpSettings.vehicleScaleValue = myVehicleScaleValuePanel->getSettings();680tmpSettings.vehicleText = myVehicleTextPanel->getSettings();681tmpSettings.vehicleSize = myVehicleSizePanel->getSettings();682tmpSettings.vehicleValueRainBow = myVehicleRainbowPanel->getSettings();683684tmpSettings.personColorer.setActive(myPersonColorMode->getCurrentItem());685tmpSettings.personQuality = myPersonShapeDetail->getCurrentItem();686tmpSettings.personName = myPersonNamePanel->getSettings();687tmpSettings.personValue = myPersonValuePanel->getSettings();688tmpSettings.personSize = myPersonSizePanel->getSettings();689690tmpSettings.containerColorer.setActive(myContainerColorMode->getCurrentItem());691tmpSettings.containerQuality = myContainerShapeDetail->getCurrentItem();692tmpSettings.containerName = myContainerNamePanel->getSettings();693tmpSettings.containerSize = myContainerSizePanel->getSettings();694695tmpSettings.junctionColorer.setActive(myJunctionColorMode->getCurrentItem());696tmpSettings.drawLinkTLIndex = myTLIndexPanel->getSettings();697tmpSettings.drawLinkJunctionIndex = myJunctionIndexPanel->getSettings();698tmpSettings.junctionID = myJunctionIDPanel->getSettings();699tmpSettings.junctionName = myJunctionNamePanel->getSettings();700tmpSettings.internalJunctionName = myInternalJunctionNamePanel->getSettings();701tmpSettings.tlsPhaseIndex = myTLSPhaseIndexPanel->getSettings();702tmpSettings.tlsPhaseName = myTLSPhaseNamePanel->getSettings();703tmpSettings.junctionSize = myJunctionSizePanel->getSettings();704tmpSettings.junctionValueRainBow = myJunctionRainbowPanel->getSettings();705706tmpSettings.addName = myAddNamePanel->getSettings();707tmpSettings.addFullName = myAddFullNamePanel->getSettings();708tmpSettings.addSize = myAddSizePanel->getSettings();709710tmpSettings.poiColorer.setActive(myPOIColorMode->getCurrentItem());711tmpSettings.poiDetail = myPoiDetail->getValue();712tmpSettings.poiName = myPOINamePanel->getSettings();713tmpSettings.poiType = myPOITypePanel->getSettings();714tmpSettings.poiText = myPOITextPanel->getSettings();715tmpSettings.poiSize = myPOISizePanel->getSettings();716tmpSettings.poiUseCustomLayer = myPOIUseCustomLayer->getCheck() != FALSE;717tmpSettings.poiCustomLayer = myPOICustomLayer->getValue();718719tmpSettings.polyColorer.setActive(myPolyColorMode->getCurrentItem());720tmpSettings.polyName = myPolyNamePanel->getSettings();721tmpSettings.polyType = myPolyTypePanel->getSettings();722tmpSettings.polySize = myPolySizePanel->getSettings();723tmpSettings.polyUseCustomLayer = myPolyUseCustomLayer->getCheck() != FALSE;724tmpSettings.polyCustomLayer = myPolyCustomLayer->getValue();725726if (mySettings->netedit) {727tmpSettings.dataValue = myDataValuePanel->getSettings();728tmpSettings.dataColorer.setActive(myDataColorMode->getCurrentItem());729tmpSettings.dataValue = myDataValuePanel->getSettings();730tmpSettings.tazRelWidthExaggeration = myTazRelationUpscaleDialer->getValue();731tmpSettings.edgeRelWidthExaggeration = myEdgeRelationUpscaleDialer->getValue();732tmpSettings.dataValueRainBow = myDataRainbowPanel->getSettings();733}734735tmpSettings.showLane2Lane = (myShowLane2Lane->getCheck() != FALSE);736tmpSettings.drawJunctionShape = (myDrawJunctionShape->getCheck() != FALSE);737tmpSettings.drawCrossingsAndWalkingareas = (myDrawCrossingsAndWalkingAreas->getCheck() != FALSE);738tmpSettings.dither = (myDither->getCheck() != FALSE);739tmpSettings.fps = (myFPS->getCheck() != FALSE);740tmpSettings.trueZ = (myTrueZ->getCheck() != FALSE);741tmpSettings.drawBoundaries = (myDrawBoundaries->getCheck() != FALSE);742tmpSettings.forceDrawForRectangleSelection = (myForceDrawForRectangleSelection->getCheck() != FALSE);743tmpSettings.disableDottedContours = (myDisableDottedContours->getCheck() != FALSE);744tmpSettings.geometryIndices = myGeometryIndicesPanel->getSettings();745tmpSettings.showSizeLegend = (myShowSizeLegend->getCheck() != FALSE);746tmpSettings.showColorLegend = (myShowColorLegend->getCheck() != FALSE);747tmpSettings.showVehicleColorLegend = (myShowVehicleColorLegend->getCheck() != FALSE);748tmpSettings.ignoreColorSchemeFor3DVehicles = (myIgnoreColorSchemeFor3DVehicles->getCheck() != FALSE);749tmpSettings.show3DTLSDomes = (myShow3DTLSDomes->getCheck() != FALSE);750tmpSettings.show3DTLSLinkMarkers = (myShow3DTLSLinkMarkers->getCheck() != FALSE);751tmpSettings.show3DHeadUpDisplay = (myShow3DHeadUpDisplay->getCheck() != FALSE);752tmpSettings.generate3DTLSModels = (myGenerate3DTLSModels->getCheck() != FALSE);753const unsigned char lightFactor = (unsigned char)myLight3DFactor->getValue();754tmpSettings.ambient3DLight.set(lightFactor / 2, lightFactor / 2, lightFactor / 2, 255);755tmpSettings.diffuse3DLight.set(lightFactor, lightFactor, lightFactor, 255);756tmpSettings.skyColor = MFXUtils::getRGBColor(mySkyColor->getRGBA());757758// lanes (colors)759if (sender == myEdgeRainbowPanel->myColorRainbow) {760myParent->buildColorRainbow(tmpSettings, tmpSettings.getLaneEdgeScheme(), tmpSettings.getLaneEdgeMode(), GLO_LANE, myEdgeRainbowPanel->getSettings());761doRebuildColorMatrices = true;762} else if (sender == myJunctionRainbowPanel->myColorRainbow) {763myParent->buildColorRainbow(tmpSettings, tmpSettings.junctionColorer.getScheme(), tmpSettings.junctionColorer.getActive(), GLO_JUNCTION, myJunctionRainbowPanel->getSettings());764doRebuildColorMatrices = true;765} else if (sender == myVehicleRainbowPanel->myColorRainbow) {766myParent->buildColorRainbow(tmpSettings, tmpSettings.vehicleColorer.getScheme(), tmpSettings.vehicleColorer.getActive(), GLO_VEHICLE, myVehicleRainbowPanel->getSettings());767doRebuildColorMatrices = true;768} else if (myDataRainbowPanel && sender == myDataRainbowPanel->myColorRainbow) {769myParent->buildColorRainbow(tmpSettings, tmpSettings.dataColorer.getScheme(), tmpSettings.dataColorer.getActive(), GLO_TAZRELDATA, myDataRainbowPanel->getSettings());770doRebuildColorMatrices = true;771}772if (tmpSettings.getLaneEdgeMode() == prevLaneMode) {773if (updateColorRanges(sender, myLaneColors.begin(), myLaneColors.end(),774myLaneThresholds.begin(), myLaneThresholds.end(), myLaneButtons.begin(),775tmpSettings.getLaneEdgeScheme())) {776doRebuildColorMatrices = true;777}778if (sender == myLaneColorInterpolation) {779tmpSettings.getLaneEdgeScheme().setInterpolated(myLaneColorInterpolation->getCheck() != FALSE);780doRebuildColorMatrices = true;781}782} else {783doRebuildColorMatrices = true;784}785// lanes (scaling)786if (tmpSettings.getLaneEdgeScaleMode() == prevLaneScaleMode) {787if (updateScaleRanges(sender, myLaneScales.begin(), myLaneScales.end(),788myLaneScaleThresholds.begin(), myLaneScaleThresholds.end(), myLaneScaleButtons.begin(),789tmpSettings.getLaneEdgeScaleScheme())) {790doRebuildColorMatrices = true;791}792if (sender == myLaneScaleInterpolation) {793tmpSettings.getLaneEdgeScaleScheme().setInterpolated(myLaneScaleInterpolation->getCheck() != FALSE);794doRebuildColorMatrices = true;795}796} else {797doRebuildColorMatrices = true;798}799// vehicles800if (tmpSettings.vehicleColorer.getActive() == prevVehicleMode) {801if (updateColorRanges(sender, myVehicleColors.begin(), myVehicleColors.end(),802myVehicleThresholds.begin(), myVehicleThresholds.end(), myVehicleButtons.begin(),803tmpSettings.vehicleColorer.getScheme())) {804doRebuildColorMatrices = true;805}806if (sender == myVehicleColorInterpolation) {807tmpSettings.vehicleColorer.getScheme().setInterpolated(myVehicleColorInterpolation->getCheck() != FALSE);808doRebuildColorMatrices = true;809}810} else {811doRebuildColorMatrices = true;812}813// vehicles (scaling)814if (tmpSettings.vehicleScaler.getActive() == prevVehicleScaleMode) {815if (updateScaleRanges(sender, myVehicleScales.begin(), myVehicleScales.end(),816myVehicleScaleThresholds.begin(), myVehicleScaleThresholds.end(), myVehicleScaleButtons.begin(),817tmpSettings.vehicleScaler.getScheme())) {818doRebuildColorMatrices = true;819}820if (sender == myVehicleScaleInterpolation) {821tmpSettings.vehicleScaler.getScheme().setInterpolated(myVehicleScaleInterpolation->getCheck() != FALSE);822doRebuildColorMatrices = true;823}824} else {825doRebuildColorMatrices = true;826}827// persons828if (tmpSettings.personColorer.getActive() == prevPersonMode) {829if (updateColorRanges(sender, myPersonColors.begin(), myPersonColors.end(),830myPersonThresholds.begin(), myPersonThresholds.end(), myPersonButtons.begin(),831tmpSettings.personColorer.getScheme())) {832doRebuildColorMatrices = true;833}834if (sender == myPersonColorInterpolation) {835tmpSettings.personColorer.getScheme().setInterpolated(myPersonColorInterpolation->getCheck() != FALSE);836doRebuildColorMatrices = true;837}838} else {839doRebuildColorMatrices = true;840}841// containers842if (tmpSettings.containerColorer.getActive() == prevContainerMode) {843if (updateColorRanges(sender, myContainerColors.begin(), myContainerColors.end(),844myContainerThresholds.begin(), myContainerThresholds.end(), myContainerButtons.begin(),845tmpSettings.containerColorer.getScheme())) {846doRebuildColorMatrices = true;847}848if (sender == myContainerColorInterpolation) {849tmpSettings.containerColorer.getScheme().setInterpolated(myContainerColorInterpolation->getCheck() != FALSE);850doRebuildColorMatrices = true;851}852} else {853doRebuildColorMatrices = true;854}855// junctions856if (tmpSettings.junctionColorer.getActive() == prevJunctionMode) {857if (updateColorRanges(sender, myJunctionColors.begin(), myJunctionColors.end(),858myJunctionThresholds.begin(), myJunctionThresholds.end(), myJunctionButtons.begin(),859tmpSettings.junctionColorer.getScheme())) {860doRebuildColorMatrices = true;861}862if (sender == myJunctionColorInterpolation) {863tmpSettings.junctionColorer.getScheme().setInterpolated(myJunctionColorInterpolation->getCheck() != FALSE);864doRebuildColorMatrices = true;865}866} else {867doRebuildColorMatrices = true;868}869// POIs870if (tmpSettings.poiColorer.getActive() == prevPOIMode) {871if (updateColorRanges(sender, myPOIColors.begin(), myPOIColors.end(),872myPOIThresholds.begin(), myPOIThresholds.end(), myPOIButtons.begin(),873tmpSettings.poiColorer.getScheme())) {874doRebuildColorMatrices = true;875}876if (sender == myPOIColorInterpolation) {877tmpSettings.poiColorer.getScheme().setInterpolated(myPOIColorInterpolation->getCheck() != FALSE);878doRebuildColorMatrices = true;879}880} else {881doRebuildColorMatrices = true;882}883// polygons884if (tmpSettings.polyColorer.getActive() == prevPolyMode) {885if (updateColorRanges(sender, myPolyColors.begin(), myPolyColors.end(),886myPolyThresholds.begin(), myPolyThresholds.end(), myPolyButtons.begin(),887tmpSettings.polyColorer.getScheme())) {888doRebuildColorMatrices = true;889}890if (sender == myPolyColorInterpolation) {891tmpSettings.polyColorer.getScheme().setInterpolated(myPolyColorInterpolation->getCheck() != FALSE);892doRebuildColorMatrices = true;893}894} else {895doRebuildColorMatrices = true;896}897// data898if (tmpSettings.netedit) {899if (tmpSettings.dataColorer.getActive() == prevDataMode) {900if (updateColorRanges(sender, myDataColors.begin(), myDataColors.end(),901myDataThresholds.begin(), myDataThresholds.end(), myDataButtons.begin(),902tmpSettings.dataColorer.getScheme())) {903doRebuildColorMatrices = true;904}905if (sender == myDataColorInterpolation) {906tmpSettings.dataColorer.getScheme().setInterpolated(myDataColorInterpolation->getCheck() != FALSE);907doRebuildColorMatrices = true;908}909} else {910doRebuildColorMatrices = true;911}912}913// openGL914if (sender == myRecalculateBoundaries) {915myParent->recalculateBoundaries();916}917918if (sender == myShowPedestrianNetwork) {919tmpSettings.showPedestrianNetwork = (myShowPedestrianNetwork->getCheck() != FALSE);920myParent->drawPedestrianNetwork(tmpSettings);921}922923if (sender == myPedestrianNetworkColor) {924tmpSettings.pedestrianNetworkColor = MFXUtils::getRGBColor(myPedestrianNetworkColor->getRGBA());925myParent->changePedestrianNetworkColor(tmpSettings);926}927928if (tmpSettings == *mySettings) {929return 1;930}931932int index = mySchemeName->getCurrentItem();933if (index < (int) gSchemeStorage.getNumInitialSettings()) {934// one of the initial settings is modified935// every time this happens we create a new scheme936int suffix = 1;937while (gSchemeStorage.contains("custom_" + toString(suffix))) {938suffix++;939}940tmpSettings.name = "custom_" + toString(suffix);941// the newly created settings must be entered in several places:942// - the comboBox mySchemeName of this dialog943// - the comboBox of the parent view (set as active)944// - the comboBox of all other views (only append) XXX @todo945index = mySchemeName->appendIconItem(tmpSettings.name.c_str());946mySchemeName->setCurrentItem(index);947myParent->getColoringSchemesCombo()->appendIconItem(tmpSettings.name.c_str());948}949myParent->getColoringSchemesCombo()->setCurrentItem(950myParent->getColoringSchemesCombo()->findItem(tmpSettings.name.c_str()));951gSchemeStorage.add(tmpSettings); // overwrites existing952mySettings = &gSchemeStorage.get(tmpSettings.name);953myParent->setColorScheme(tmpSettings.name);954955if (doRebuildColorMatrices) {956rebuildColorMatrices(true);957}958myParent->handle(this, FXSEL(SEL_CHANGED, MID_SIMPLE_VIEW_COLORCHANGE), nullptr);959myParent->forceRefresh();960getApp()->forceRefresh();961return 1;962}963964965void966GUIDialog_ViewSettings::loadSettings(const std::string& file) {967GUISettingsHandler handler(file, true, mySettings->netedit);968for (std::string settingsName : handler.addSettings(myParent)) {969FXint index = mySchemeName->appendIconItem(settingsName.c_str());970mySchemeName->setCurrentItem(index);971mySettings = &gSchemeStorage.get(settingsName);972}973if (handler.hasDecals()) {974myParent->getDecalsLockMutex().lock();975myParent->getDecals() = handler.getDecals();976myDecalsTable->fillTable();977myParent->update();978myParent->getDecalsLockMutex().unlock();979}980if (handler.getDelay() >= 0) {981myParent->setDelay(handler.getDelay());982}983if (handler.getBreakpoints().size() > 0) {984myParent->setBreakpoints(handler.getBreakpoints());985}986handler.applyViewport(myParent);987onCmdNameChange(nullptr, 0, nullptr);988}989990991void992GUIDialog_ViewSettings::saveDecals(OutputDevice& dev) const {993for (const auto& decal : myParent->getDecals()) {994// only save decals with non empty filename995if (decal.filename.size() > 0) {996// check if decal is a light997const bool isLight = (decal.filename.substr(0, 5) == "light") && (decal.filename.length() == 6) && isdigit(decal.filename[5]);998if (isLight) {999dev.openTag(SUMO_TAG_VIEWSETTINGS_LIGHT);1000dev.writeAttr(SUMO_ATTR_INDEX, decal.filename.substr(5, 1));1001} else {1002dev.openTag(SUMO_TAG_VIEWSETTINGS_DECAL);1003dev.writeAttr("file", decal.filename);1004dev.writeAttr("screenRelative", decal.screenRelative);1005}1006dev.writeAttr(SUMO_ATTR_CENTER_X, decal.centerX);1007dev.writeAttr(SUMO_ATTR_CENTER_Y, decal.centerY);1008dev.writeAttr(SUMO_ATTR_CENTER_Z, decal.centerZ);1009dev.writeAttr(SUMO_ATTR_WIDTH, decal.width);1010dev.writeAttr(SUMO_ATTR_HEIGHT, decal.height);1011dev.writeAttr("altitude", decal.altitude);1012dev.writeAttr("rotation", decal.rot);1013dev.writeAttr("tilt", decal.tilt);1014dev.writeAttr("roll", decal.roll);1015dev.writeAttr(SUMO_ATTR_LAYER, decal.layer);1016dev.closeTag();1017}1018}1019}102010211022void1023GUIDialog_ViewSettings::loadDecals(const std::string& file) {1024myParent->getDecalsLockMutex().lock();1025GUISettingsHandler handler(file);1026if (handler.hasDecals()) {1027myParent->getDecals() = handler.getDecals();1028}1029myDecalsTable->fillTable();1030myParent->update();1031myParent->getDecalsLockMutex().unlock();1032}103310341035long1036GUIDialog_ViewSettings::onCmdSaveSetting(FXObject*, FXSelector, void* /*data*/) {1037int index = mySchemeName->getCurrentItem();1038if (index < (int) gSchemeStorage.getNumInitialSettings()) {1039return 1;1040}1041// get the name1042std::string name = "";1043while (name.length() == 0) {1044FXDialogBox dialog(this, TL("Enter a name"), GUIDesignViewSettingsDialog);1045FXVerticalFrame* content = new FXVerticalFrame(&dialog, GUIDesignViewSettingsVerticalFrame5);1046new FXLabel(content, TL("Please enter an alphanumeric name: "), nullptr, GUIDesignViewSettingsLabel2);1047FXTextField* text = new FXTextField(content, 40, &dialog, FXDialogBox::ID_ACCEPT, GUIDesignViewSettingsTextField1);1048new FXHorizontalSeparator(content, GUIDesignHorizontalSeparator);1049FXHorizontalFrame* buttons = new FXHorizontalFrame(content, GUIDesignViewSettingsHorizontalFrame3);1050GUIDesigns::buildFXButton(buttons, TL("&OK"), "", "", nullptr, &dialog, FXDialogBox::ID_ACCEPT, GUIDesignViewSettingsButton4);1051GUIDesigns::buildFXButton(buttons, TL("&Cancel"), "", "", nullptr, &dialog, FXDialogBox::ID_CANCEL, GUIDesignViewSettingsButton5);1052dialog.create();1053text->setFocus();1054if (!dialog.execute()) {1055return 1;1056}1057name = text->getText().text();1058for (int i = 0; i < (int)name.length(); ++i) {1059if (name[i] != '_' && (name[i] < 'a' || name[i] > 'z') && (name[i] < 'A' || name[i] > 'Z') && (name[i] < '0' || name[i] > '9')) {1060name = "";1061break;1062}1063}1064}1065GUIVisualizationSettings tmpSettings(mySettings->name, mySettings->netedit);1066tmpSettings.copy(*mySettings);1067tmpSettings.name = name;1068if (name == mySettings->name || StringUtils::startsWith(mySettings->name, "custom_")) {1069gSchemeStorage.remove(mySettings->name);1070myParent->getColoringSchemesCombo()->insertIconItem(index, name.c_str());1071} else {1072gSchemeStorage.get(mySettings->name).copy(myBackup);1073index = mySchemeName->appendIconItem(name.c_str());1074myParent->getColoringSchemesCombo()->appendIconItem(name.c_str());1075myParent->getColoringSchemesCombo()->setCurrentItem(1076myParent->getColoringSchemesCombo()->findItem(name.c_str()));1077}1078gSchemeStorage.add(tmpSettings);1079mySchemeName->insertIconItem(index, name.c_str());1080myParent->setColorScheme(name);1081mySettings = &gSchemeStorage.get(name);1082myBackup.copy(*mySettings);1083gSchemeStorage.writeSettings(getApp());1084return 1;1085}108610871088long1089GUIDialog_ViewSettings::onUpdSaveSetting(FXObject* sender, FXSelector, void* ptr) {1090sender->handle(this,1091mySchemeName->getCurrentItem() < (int) gSchemeStorage.getNumInitialSettings()1092? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),1093ptr);1094return 1;1095}109610971098long1099GUIDialog_ViewSettings::onCmdDeleteSetting(FXObject*, FXSelector, void* /*data*/) {1100int index = mySchemeName->getCurrentItem();1101if (index < (int) gSchemeStorage.getNumInitialSettings()) {1102return 1;1103}1104std::string name = mySchemeName->getItemText(index);1105gSchemeStorage.remove(name);1106mySchemeName->removeItem(index);1107onCmdNameChange(nullptr, 0, (void*) mySchemeName->getItemText(0).c_str());1108gSchemeStorage.writeSettings(getApp());1109return 1;1110}111111121113long1114GUIDialog_ViewSettings::onUpdDeleteSetting(FXObject* sender, FXSelector, void* ptr) {1115sender->handle(this,1116mySchemeName->getCurrentItem() < (int) gSchemeStorage.getNumInitialSettings()1117? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),1118ptr);1119return 1;1120}112111221123long1124GUIDialog_ViewSettings::onCmdExportSetting(FXObject*, FXSelector, void* /*data*/) {1125FXString file = MFXUtils::getFilename2Write(this, TL("Export view settings"),1126SUMOXMLDefinitions::XMLFileExtensions.getMultilineString().c_str(),1127GUIIconSubSys::getIcon(GUIIcon::SAVE), gCurrentFolder);1128if (file == "") {1129return 1;1130}1131try {1132OutputDevice& dev = OutputDevice::getDevice(file.text(), false);1133dev.openTag(SUMO_TAG_VIEWSETTINGS);1134if (myParent->is3DView()) {1135dev.writeAttr(SUMO_ATTR_TYPE, "osg");1136}1137mySettings->save(dev);1138if (mySaveViewPort->getCheck()) {1139myParent->getViewportEditor()->writeXML(dev);1140}1141if (mySaveDelay->getCheck()) {1142dev.openTag(SUMO_TAG_DELAY);1143dev.writeAttr(SUMO_ATTR_VALUE, myParent->getDelay());1144dev.closeTag();1145}1146if (mySaveDecals->getCheck()) {1147saveDecals(dev);1148}1149if (!mySettings->netedit && mySaveBreakpoints->getCheck()) {1150for (SUMOTime t : myParent->retrieveBreakpoints()) {1151dev.openTag(SUMO_TAG_BREAKPOINT);1152dev.writeAttr(SUMO_ATTR_TIME, time2string(t));1153dev.closeTag();1154}1155}1156dev.closeTag();1157dev.close();1158} catch (IOError& e) {1159FXMessageBox::error(this, MBOX_OK, TL("Storing failed!"), "%s", e.what());1160}1161return 1;1162}116311641165long1166GUIDialog_ViewSettings::onUpdExportSetting(FXObject* sender, FXSelector, void* ptr) {1167sender->handle(this,1168(mySchemeName->getCurrentItem() < (int) gSchemeStorage.getNumInitialSettings()1169&& !mySaveViewPort->getCheck() && !mySaveDelay->getCheck() && !mySaveDecals->getCheck() && !mySaveBreakpoints->getCheck()) ?1170FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),1171ptr);1172return 1;1173}117411751176long1177GUIDialog_ViewSettings::onCmdImportSetting(FXObject*, FXSelector, void* /*data*/) {1178FXFileDialog opendialog(this, TL("Import view settings"));1179opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::OPEN));1180opendialog.setSelectMode(SELECTFILE_ANY);1181opendialog.setPatternList(SUMOXMLDefinitions::ViewSettingsFileExtensions.getMultilineString().c_str());1182if (gCurrentFolder.length() != 0) {1183opendialog.setDirectory(gCurrentFolder);1184}1185if (opendialog.execute()) {1186gCurrentFolder = opendialog.getDirectory();1187loadSettings(opendialog.getFilename().text());1188}1189return 1;1190}119111921193long1194GUIDialog_ViewSettings::onCmdLoadDecal(FXObject*, FXSelector, void* /*data*/) {1195FXFileDialog opendialog(this, TL("Load Decals"));1196opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::EMPTY));1197opendialog.setSelectMode(SELECTFILE_ANY);1198opendialog.setPatternList(SUMOXMLDefinitions::ViewSettingsFileExtensions.getMultilineString().c_str());1199if (gCurrentFolder.length() != 0) {1200opendialog.setDirectory(gCurrentFolder);1201}1202if (opendialog.execute()) {1203gCurrentFolder = opendialog.getDirectory();1204loadDecals(opendialog.getFilename().text());1205}1206return 1;1207}120812091210long1211GUIDialog_ViewSettings::onCmdLoadXMLDecals(FXObject*, FXSelector, void* /*data*/) {1212FXFileDialog opendialog(this, TL("Load Decals"));1213opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::EMPTY));1214opendialog.setSelectMode(SELECTFILE_ANY);1215opendialog.setPatternList(SUMOXMLDefinitions::ViewSettingsFileExtensions.getMultilineString().c_str());1216if (gCurrentFolder.length() != 0) {1217opendialog.setDirectory(gCurrentFolder);1218}1219if (opendialog.execute()) {1220gCurrentFolder = opendialog.getDirectory();1221loadDecals(opendialog.getFilename().text());1222}1223return 1;1224}122512261227long1228GUIDialog_ViewSettings::onCmdSaveXMLDecals(FXObject*, FXSelector, void* /*data*/) {1229FXString file = MFXUtils::getFilename2Write(this, TL("Save Decals"),1230SUMOXMLDefinitions::XMLFileExtensions.getMultilineString().c_str(),1231GUIIconSubSys::getIcon(GUIIcon::EMPTY), gCurrentFolder);1232if (file == "") {1233return 1;1234}1235try {1236OutputDevice& dev = OutputDevice::getDevice(file.text());1237dev.openTag("decals");1238saveDecals(dev);1239dev.closeTag();1240dev.close();1241} catch (IOError& e) {1242FXMessageBox::error(myParent, MBOX_OK, TL("Storing failed!"), "%s", e.what());1243}1244return 1;1245}124612471248long1249GUIDialog_ViewSettings::onCmdClearDecals(FXObject*, FXSelector, void* /*data*/) {1250// lock decals mutex1251myParent->getDecalsLockMutex().lock();1252// clear decals1253myParent->getDecals().clear();1254// update view1255myParent->update();1256// fill table again1257myDecalsTable->fillTable();1258// unlock decals mutex1259myParent->getDecalsLockMutex().unlock();1260return 1;1261}126212631264long1265GUIDialog_ViewSettings::onUpdImportSetting(FXObject* sender, FXSelector, void* ptr) {1266sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), ptr);1267return 1;1268}126912701271FXMatrix*1272GUIDialog_ViewSettings::rebuildColorMatrix(FXVerticalFrame* frame,1273std::vector<FXColorWell*>& colors,1274std::vector<FXRealSpinner*>& thresholds,1275std::vector<FXButton*>& buttons,1276FXCheckButton* interpolation,1277GUIColorScheme& scheme) {1278MFXUtils::deleteChildren(frame);1279FXMatrix* m = new FXMatrix(frame, 4, GUIDesignViewSettingsMatrix4);1280colors.clear();1281thresholds.clear();1282buttons.clear();1283const bool fixed = scheme.isFixed();1284std::vector<RGBColor>::const_iterator colIt = scheme.getColors().begin();1285std::vector<double>::const_iterator threshIt = scheme.getThresholds().begin();1286std::vector<std::string>::const_iterator nameIt = scheme.getNames().begin();1287while (colIt != scheme.getColors().end()) {1288colors.push_back(new FXColorWell(m, MFXUtils::getFXColor(*colIt), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell1));1289if (fixed) {1290new FXLabel(m, nameIt->c_str());1291new FXLabel(m, "");1292new FXLabel(m, "");1293} else {1294const int dialerOptions = scheme.allowsNegativeValues() ? SPIN_NOMIN : 0;1295FXRealSpinner* threshDialer = new FXRealSpinner(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_THICK | FRAME_SUNKEN | LAYOUT_TOP | LAYOUT_CENTER_Y | SPIN_NOMAX | dialerOptions);1296threshDialer->setValue(*threshIt);1297thresholds.push_back(threshDialer);1298if (*threshIt == GUIVisualizationSettings::MISSING_DATA) {1299threshDialer->disable();1300threshDialer->hide();1301buttons.push_back(GUIDesigns::buildFXButton(m, "", "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1302buttons.back()->hide();1303buttons.push_back(GUIDesigns::buildFXButton(m, TL("No Data"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1304buttons.back()->disable();1305} else {1306buttons.push_back(GUIDesigns::buildFXButton(m, TL("Add"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1307buttons.push_back(GUIDesigns::buildFXButton(m, TL("Remove"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1308}1309}1310colIt++;1311threshIt++;1312nameIt++;1313}1314interpolation->setCheck(scheme.isInterpolated());1315if (fixed) {1316interpolation->disable();1317} else {1318if (colors.size() > 1) {1319interpolation->enable();1320if (interpolation->getCheck() != FALSE) {1321thresholds.front()->enable();1322} else {1323thresholds.front()->disable();1324}1325} else {1326interpolation->disable();1327thresholds.front()->disable();1328}1329}1330return m;1331}133213331334FXMatrix*1335GUIDialog_ViewSettings::rebuildScaleMatrix(FXVerticalFrame* frame,1336std::vector<FXRealSpinner*>& scales,1337std::vector<FXRealSpinner*>& thresholds,1338std::vector<FXButton*>& buttons,1339FXCheckButton* interpolation,1340GUIScaleScheme& scheme) {1341MFXUtils::deleteChildren(frame);1342FXMatrix* m = new FXMatrix(frame, 4, GUIDesignViewSettingsMatrix4);1343scales.clear();1344thresholds.clear();1345buttons.clear();1346const bool fixed = scheme.isFixed();1347std::vector<double>::const_iterator scaleIt = scheme.getColors().begin();1348std::vector<double>::const_iterator threshIt = scheme.getThresholds().begin();1349std::vector<std::string>::const_iterator nameIt = scheme.getNames().begin();1350while (scaleIt != scheme.getColors().end()) {1351FXRealSpinner* scaleDialer = new FXRealSpinner(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_THICK | FRAME_SUNKEN | LAYOUT_TOP | LAYOUT_CENTER_Y | SPIN_NOMAX);1352scaleDialer->setValue(*scaleIt);1353scales.push_back(scaleDialer);1354if (fixed) {1355new FXLabel(m, nameIt->c_str());1356new FXLabel(m, "");1357new FXLabel(m, "");1358} else {1359const int dialerOptions = scheme.allowsNegativeValues() ? SPIN_NOMIN : 0;1360FXRealSpinner* threshDialer = new FXRealSpinner(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_THICK | FRAME_SUNKEN | LAYOUT_TOP | LAYOUT_CENTER_Y | SPIN_NOMAX | dialerOptions);1361threshDialer->setValue(*threshIt);1362thresholds.push_back(threshDialer);1363if (*threshIt == GUIVisualizationSettings::MISSING_DATA) {1364threshDialer->disable();1365threshDialer->hide();1366buttons.push_back(GUIDesigns::buildFXButton(m, "", "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1367buttons.back()->hide();1368buttons.push_back(GUIDesigns::buildFXButton(m, TL("No Data"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1369buttons.back()->disable();1370} else {1371buttons.push_back(GUIDesigns::buildFXButton(m, TL("Add"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1372buttons.push_back(GUIDesigns::buildFXButton(m, TL("Remove"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));1373}1374}1375scaleIt++;1376threshIt++;1377nameIt++;1378}1379interpolation->setCheck(scheme.isInterpolated());1380if (fixed) {1381interpolation->disable();1382} else {1383if (scales.size() > 1) {1384interpolation->enable();1385if (interpolation->getCheck() != FALSE) {1386thresholds.front()->enable();1387} else {1388thresholds.front()->disable();1389}1390} else {1391interpolation->disable();1392thresholds.front()->disable();1393}1394}1395return m;1396}139713981399void1400GUIDialog_ViewSettings::rebuildColorMatrices(bool doCreate) {1401FXMatrix* m = rebuildColorMatrix(myLaneColorSettingFrame, myLaneColors, myLaneThresholds, myLaneButtons, myLaneColorInterpolation, mySettings->getLaneEdgeScheme());1402if (doCreate) {1403m->create();1404}1405if (mySettings->getLaneEdgeScheme().isFixed()) {1406myEdgeRainbowPanel->myColorRainbow->disable();1407} else {1408myEdgeRainbowPanel->myColorRainbow->enable();1409}1410if (mySettings->junctionColorer.getScheme().isFixed()) {1411myJunctionRainbowPanel->myColorRainbow->disable();1412} else {1413myJunctionRainbowPanel->myColorRainbow->enable();1414}1415if (mySettings->vehicleColorer.getScheme().isFixed()) {1416myVehicleRainbowPanel->myColorRainbow->disable();1417} else {1418myVehicleRainbowPanel->myColorRainbow->enable();1419}1420std::string activeSchemeName = myLaneEdgeColorMode->getText().text();1421std::string activeScaleSchemeName = myLaneEdgeScaleMode->getText().text();1422myParamKey->clearItems();1423myScalingParamKey->clearItems();1424myMeanDataID->clearItems();1425myMeanDataID->hide();1426if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGE_PARAM_NUMERICAL) {1427myParamKey->appendItem(mySettings->edgeParam.c_str());1428for (const std::string& attr : myParent->getEdgeLaneParamKeys(true)) {1429if (attr != mySettings->edgeParam) {1430myParamKey->appendItem(attr.c_str());1431}1432}1433myParamKey->enable();1434} else if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL) {1435myParamKey->appendItem(mySettings->laneParam.c_str());1436for (const std::string& attr : myParent->getEdgeLaneParamKeys(false)) {1437if (attr != mySettings->laneParam) {1438myParamKey->appendItem(attr.c_str());1439}1440}1441myParamKey->enable();1442} else if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL) {1443myParamKey->appendItem(mySettings->edgeData.c_str());1444for (const std::string& attr : myParent->getEdgeDataAttrs()) {1445if (attr != mySettings->edgeData) {1446myParamKey->appendItem(attr.c_str());1447}1448}1449myParamKey->enable();1450} else if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_LIVE) {1451if (mySettings->edgeDataID != "") {1452myMeanDataID->appendIconItem(mySettings->edgeDataID.c_str());1453}1454for (const std::string& attr : myParent->getMeanDataIDs()) {1455if (attr != mySettings->edgeDataID) {1456myMeanDataID->appendIconItem(attr.c_str());1457}1458}1459if (myMeanDataID->getNumItems() > 0) {1460if (mySettings->edgeDataID == "") {1461mySettings->edgeDataID = myMeanDataID->getItemText(0);1462}1463myMeanDataID->enable();1464myMeanDataID->show();1465myParamKey->appendItem(mySettings->edgeData.c_str());1466for (const std::string& attr : myParent->getMeanDataAttrs(mySettings->edgeDataID)) {1467if (attr != mySettings->edgeData) {1468myParamKey->appendItem(attr.c_str());1469}1470}1471myParamKey->enable();1472}1473} else {1474myParamKey->disable();1475}14761477if (activeScaleSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL) {1478myScalingParamKey->appendItem(mySettings->edgeDataScaling.c_str());1479for (const std::string& attr : myParent->getEdgeDataAttrs()) {1480if (attr != mySettings->edgeDataScaling) {1481myScalingParamKey->appendItem(attr.c_str());1482}1483}1484myScalingParamKey->enable();1485} else {1486myScalingParamKey->disable();1487}14881489myParamKey->setNumVisible(myParamKey->getNumItems());1490myScalingParamKey->setNumVisible(myScalingParamKey->getNumItems());1491myLaneColorSettingFrame->getParent()->recalc();14921493m = rebuildScaleMatrix(myLaneScaleSettingFrame, myLaneScales, myLaneScaleThresholds, myLaneScaleButtons, myLaneScaleInterpolation, mySettings->getLaneEdgeScaleScheme());1494if (doCreate) {1495m->create();1496}1497myLaneScaleSettingFrame->getParent()->recalc();14981499m = rebuildColorMatrix(myVehicleColorSettingFrame, myVehicleColors, myVehicleThresholds, myVehicleButtons, myVehicleColorInterpolation, mySettings->vehicleColorer.getScheme());1500if (doCreate) {1501m->create();1502}1503activeSchemeName = myVehicleColorMode->getText().text();1504if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL) {1505updateVehicleParams();1506myVehicleParamKey->enable();1507} else {1508myVehicleParamKey->disable();1509}1510myVehicleColorSettingFrame->getParent()->recalc();15111512m = rebuildScaleMatrix(myVehicleScaleSettingFrame, myVehicleScales, myVehicleScaleThresholds, myVehicleScaleButtons, myVehicleScaleInterpolation, mySettings->vehicleScaler.getScheme());1513if (doCreate) {1514m->create();1515}1516myVehicleScaleSettingFrame->getParent()->recalc();1517activeScaleSchemeName = myVehicleScaleMode->getText().text();1518if (activeScaleSchemeName == GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL) {1519myVehicleScalingParamKey->enable();1520} else {1521myVehicleScalingParamKey->disable();1522}152315241525m = rebuildColorMatrix(myPersonColorSettingFrame, myPersonColors, myPersonThresholds, myPersonButtons, myPersonColorInterpolation, mySettings->personColorer.getScheme());1526if (doCreate) {1527m->create();1528}1529myPersonColorSettingFrame->getParent()->recalc();1530m = rebuildColorMatrix(myContainerColorSettingFrame, myContainerColors, myContainerThresholds, myContainerButtons, myContainerColorInterpolation, mySettings->containerColorer.getScheme());1531if (doCreate) {1532m->create();1533}1534myContainerColorSettingFrame->getParent()->recalc();1535m = rebuildColorMatrix(myJunctionColorSettingFrame, myJunctionColors, myJunctionThresholds, myJunctionButtons, myJunctionColorInterpolation, mySettings->junctionColorer.getScheme());1536if (doCreate) {1537m->create();1538}1539myJunctionColorSettingFrame->getParent()->recalc();1540// POIs1541m = rebuildColorMatrix(myPOIColorSettingFrame, myPOIColors, myPOIThresholds, myPOIButtons, myPOIColorInterpolation, mySettings->poiColorer.getScheme());1542if (doCreate) {1543m->create();1544}1545myPOIColorSettingFrame->getParent()->recalc();1546// polygons1547m = rebuildColorMatrix(myPolyColorSettingFrame, myPolyColors, myPolyThresholds, myPolyButtons, myPolyColorInterpolation, mySettings->polyColorer.getScheme());1548if (doCreate) {1549m->create();1550}1551myPolyColorSettingFrame->getParent()->recalc();15521553// data1554if (mySettings->netedit) {1555m = rebuildColorMatrix(myDataColorSettingFrame, myDataColors, myDataThresholds, myDataButtons, myDataColorInterpolation, mySettings->dataColorer.getScheme());1556if (doCreate) {1557m->create();1558}1559activeSchemeName = myDataColorMode->getText().text();1560if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL) {1561myDataParamKey->clearItems();1562myDataParamKey->appendItem(mySettings->relDataAttr.c_str());1563for (const std::string& attr : myParent->getRelDataAttrs()) {1564if (attr != mySettings->relDataAttr) {1565myDataParamKey->appendItem(attr.c_str());1566}1567}1568myDataParamKey->enable();1569} else {1570myDataParamKey->disable();1571}1572myDataColorSettingFrame->getParent()->recalc();1573}15741575layout();1576update();1577}157815791580void1581GUIDialog_ViewSettings::updateVehicleParams() {1582myVehicleParamKey->clearItems();1583myVehicleTextParamKey->clearItems();1584myVehicleScalingParamKey->clearItems();1585myVehicleParamKey->appendItem(mySettings->vehicleParam.c_str());1586myVehicleTextParamKey->appendItem(mySettings->vehicleTextParam.c_str());1587myVehicleScalingParamKey->appendItem(mySettings->vehicleScaleParam.c_str());1588for (const std::string& attr : myParent->getVehicleParamKeys(false)) {1589myVehicleParamKey->appendItem(attr.c_str());1590myVehicleTextParamKey->appendItem(attr.c_str());1591myVehicleScalingParamKey->appendItem(attr.c_str());1592}1593myVehicleParamKey->setNumVisible(myVehicleParamKey->getNumItems());1594myVehicleTextParamKey->setNumVisible(myVehicleTextParamKey->getNumItems());1595myVehicleScalingParamKey->setNumVisible(myVehicleScalingParamKey->getNumItems());1596}159715981599void1600GUIDialog_ViewSettings::updatePOIParams() {1601myPOITextParamKey->clearItems();1602myPOITextParamKey->appendItem(mySettings->poiTextParam.c_str());1603for (const std::string& attr : myParent->getPOIParamKeys()) {1604myPOITextParamKey->appendItem(attr.c_str());1605}1606myPOITextParamKey->setNumVisible(myPOITextParamKey->getNumItems());1607}160816091610std::string1611GUIDialog_ViewSettings::getCurrentScheme() const {1612return mySchemeName->getItemText(mySchemeName->getCurrentItem());1613}161416151616void1617GUIDialog_ViewSettings::setCurrentScheme(const std::string& name) {1618if (name.c_str() == mySchemeName->getItemText(mySchemeName->getCurrentItem())) {1619return;1620}1621for (int i = 0; i < mySchemeName->getNumItems(); ++i) {1622if (name.c_str() == mySchemeName->getItemText(i)) {1623mySchemeName->setCurrentItem(i);1624onCmdNameChange(nullptr, 0, (void*)name.c_str());1625return;1626}1627}1628}162916301631GUIDialog_ViewSettings::NamePanel::NamePanel(1632FXMatrix* parent,1633GUIDialog_ViewSettings* target,1634const std::string& title,1635const GUIVisualizationTextSettings& settings) {1636myCheck = new FXCheckButton(parent, title.c_str(), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1637myCheck->setCheck(settings.showText);1638myMatrix0 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);1639mySelectedCheck = new FXCheckButton(myMatrix0, TL("Only for selected"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1640mySelectedCheck->setCheck(settings.onlySelected);1641myConstSizeCheck = new FXCheckButton(myMatrix0, TL("constant text size"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1642myConstSizeCheck->setCheck(settings.constSize);1643FXMatrix* m1 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);1644new FXLabel(m1, TL("Size"), nullptr, GUIDesignViewSettingsLabel1);1645mySizeDial = new FXRealSpinner(m1, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);1646mySizeDial->setRange(5, 1000);1647mySizeDial->setValue(settings.size);1648FXMatrix* m2 = new FXMatrix(parent, 4, GUIDesignViewSettingsMatrix5);1649new FXLabel(m2, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);1650myColorWell = new FXColorWell(m2, MFXUtils::getFXColor(settings.color), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell2);1651new FXLabel(m2, TL("Background"), nullptr, GUIDesignViewSettingsLabel1);1652myBGColorWell = new FXColorWell(m2, MFXUtils::getFXColor(settings.bgColor), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell2);1653}165416551656GUIVisualizationTextSettings1657GUIDialog_ViewSettings::NamePanel::getSettings() {1658return GUIVisualizationTextSettings(myCheck->getCheck() != FALSE,1659mySizeDial->getValue(),1660MFXUtils::getRGBColor(myColorWell->getRGBA()),1661MFXUtils::getRGBColor(myBGColorWell->getRGBA()),1662myConstSizeCheck->getCheck() != FALSE,1663mySelectedCheck->getCheck() != FALSE);1664}166516661667void1668GUIDialog_ViewSettings::NamePanel::update(const GUIVisualizationTextSettings& settings) {1669myCheck->setCheck(settings.showText);1670mySizeDial->setValue(settings.size);1671myColorWell->setRGBA(MFXUtils::getFXColor(settings.color));1672myBGColorWell->setRGBA(MFXUtils::getFXColor(settings.bgColor));1673myConstSizeCheck->setCheck(settings.constSize);1674mySelectedCheck->setCheck(settings.onlySelected);1675}167616771678GUIDialog_ViewSettings::SizePanel::SizePanel(FXMatrix* parent, GUIDialog_ViewSettings* target,1679const GUIVisualizationSizeSettings& settings, GUIGlObjectType type):1680myDialogViewSettings(target),1681myType(type) {1682myCheck = new FXCheckButton(parent, TL("Draw with constant size when zoomed out"), this, MID_SIMPLE_VIEW_SIZECHANGE, GUIDesignCheckButtonViewSettings);1683myCheck->setCheck(settings.constantSize);1684myCheckSelected = new FXCheckButton(parent, TL("Only for selected"), this, MID_SIMPLE_VIEW_SIZECHANGE, GUIDesignCheckButtonViewSettings);1685myCheckSelected->setCheck(settings.constantSizeSelected);1686FXMatrix* m1 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);1687new FXLabel(m1, TL("Minimum Size"), nullptr, GUIDesignViewSettingsLabel1);1688myMinSizeDial = new FXRealSpinner(m1, 10, this, MID_SIMPLE_VIEW_SIZECHANGE, GUIDesignViewSettingsSpinDial1);1689myMinSizeDial->setValue(settings.minSize);1690FXMatrix* m2 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);1691new FXLabel(m2, TL("Exaggerate by"), nullptr, GUIDesignViewSettingsLabel1);1692myExaggerateDial = new FXRealSpinner(m2, 10, this, MID_SIMPLE_VIEW_SIZECHANGE, GUIDesignViewSettingsSpinDial2);1693myExaggerateDial->setRange(0, 10000);1694myExaggerateDial->setValue(settings.exaggeration);1695}169616971698GUIVisualizationSizeSettings1699GUIDialog_ViewSettings::SizePanel::getSettings() {1700return GUIVisualizationSizeSettings(1701myMinSizeDial->getValue(), myExaggerateDial->getValue(),1702myCheck->getCheck() != FALSE,1703myCheckSelected->getCheck() != FALSE);1704}170517061707void1708GUIDialog_ViewSettings::SizePanel::update(const GUIVisualizationSizeSettings& settings) {1709myCheck->setCheck(settings.constantSize);1710myCheckSelected->setCheck(settings.constantSizeSelected);1711myMinSizeDial->setValue(settings.minSize);1712myExaggerateDial->setValue(settings.exaggeration);1713}171417151716long1717GUIDialog_ViewSettings::SizePanel::onCmdSizeChange(FXObject* obj, FXSelector sel, void* ptr) {1718// mark boundaries for recomputing1719gViewObjectsHandler.recomputeBoundaries = myType;1720// continue as a normal change1721return myDialogViewSettings->onCmdColorChange(obj, sel, ptr);1722}172317241725GUIDialog_ViewSettings::RainbowPanel::RainbowPanel(1726FXComposite* parent,1727GUIDialog_ViewSettings* target,1728const GUIVisualizationRainbowSettings& settings) {1729FXMatrix* matrixRainbow = new FXMatrix(parent, 9, GUIDesignViewSettingsMatrix3);1730myColorRainbow = GUIDesigns::buildFXButton(matrixRainbow, TL("Recalibrate Rainbow"), "", "", nullptr, target, MID_SIMPLE_VIEW_COLORCHANGE,1731(BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT), 0, 0, 0, 0, 20, 20, 4, 4);1732myRainbowStyle = new MFXComboBoxIcon(matrixRainbow, nullptr, false, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsComboBox1);1733for (auto item : GUIVisualizationSettings::RAINBOW_SCHEMES) {1734myRainbowStyle->appendIconItem(item.first.c_str());1735}1736myRainbowStyle->setCurrentItem(settings.rainbowScheme);1737myHideMinCheck = new FXCheckButton(matrixRainbow, TL("min"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1738myHideMinCheck->setCheck(settings.hideMin);1739myMinThreshold = new FXRealSpinner(matrixRainbow, 6, target, MID_SIMPLE_VIEW_COLORCHANGE, REALSPIN_NOMIN | GUIDesignViewSettingsSpinDial2);1740myMinThreshold->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());1741myMinThreshold->setValue(settings.minThreshold);1742myHideMaxCheck = new FXCheckButton(matrixRainbow, TL("max"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1743myHideMaxCheck->setCheck(settings.hideMax);1744myMaxThreshold = new FXRealSpinner(matrixRainbow, 6, target, MID_SIMPLE_VIEW_COLORCHANGE, REALSPIN_NOMIN | GUIDesignViewSettingsSpinDial2);1745myMaxThreshold->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());1746myMaxThreshold->setValue(settings.maxThreshold);1747mySetNeutral = new FXCheckButton(matrixRainbow, TL("center"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1748mySetNeutral->setCheck(settings.setNeutral);1749myNeutralThreshold = new FXRealSpinner(matrixRainbow, 6, target, MID_SIMPLE_VIEW_COLORCHANGE, REALSPIN_NOMIN | GUIDesignViewSettingsSpinDial2);1750myNeutralThreshold->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());1751myNeutralThreshold->setValue(settings.neutralThreshold);1752myFixRange = new FXCheckButton(matrixRainbow, TL("fix range"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1753myFixRange->setCheck(settings.fixRange);1754}175517561757GUIVisualizationRainbowSettings1758GUIDialog_ViewSettings::RainbowPanel::getSettings() {1759GUIVisualizationRainbowSettings res(myHideMinCheck->getCheck() != FALSE,1760myMinThreshold->getValue(),1761myHideMaxCheck->getCheck() != FALSE,1762myMaxThreshold->getValue(),1763mySetNeutral->getCheck() != FALSE,1764myNeutralThreshold->getValue(),1765myFixRange->getCheck() != FALSE,1766myRainbowStyle->getCurrentItem());1767std::string sName = myRainbowStyle->getItemText(myRainbowStyle->getCurrentItem());1768res.colors = GUIVisualizationSettings::RAINBOW_SCHEMES[sName];1769return res;1770}177117721773void1774GUIDialog_ViewSettings::RainbowPanel::update(const GUIVisualizationRainbowSettings& settings) {1775myHideMinCheck->setCheck(settings.hideMin);1776myMinThreshold->setValue(settings.minThreshold);1777myHideMaxCheck->setCheck(settings.hideMax);1778myMaxThreshold->setValue(settings.maxThreshold);1779mySetNeutral->setCheck(settings.setNeutral);1780myNeutralThreshold->setValue(settings.neutralThreshold);1781myFixRange->setCheck(settings.fixRange);1782myRainbowStyle->setCurrentItem(settings.rainbowScheme);1783}17841785void1786GUIDialog_ViewSettings::buildHeader(FXVerticalFrame* contentFrame) {1787FXHorizontalFrame* horizontalFrame = new FXHorizontalFrame(contentFrame, GUIDesignViewSettingsHorizontalFrame1);1788mySchemeName = new MFXComboBoxIcon(horizontalFrame, nullptr, true, GUIDesignComboBoxVisibleItems,1789this, MID_SIMPLE_VIEW_NAMECHANGE, GUIDesignViewSettingsComboBox1);1790for (const auto& name : gSchemeStorage.getNames()) {1791const int index = mySchemeName->appendIconItem(name.c_str());1792if (name == mySettings->name) {1793mySchemeName->setCurrentItem((FXint)index);1794}1795}17961797GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Save the setting to registry"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DATABASE), this, MID_SIMPLE_VIEW_SAVE, GUIDesignButtonToolbar);1798GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Remove the setting from registry"), GUIIconSubSys::getIcon(GUIIcon::REMOVEDB), this, MID_SIMPLE_VIEW_DELETE, GUIDesignButtonToolbar);1799GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Export setting to file"), GUIIconSubSys::getIcon(GUIIcon::SAVE), this, MID_SIMPLE_VIEW_EXPORT, GUIDesignButtonToolbar);1800GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Load setting from file"), GUIIconSubSys::getIcon(GUIIcon::OPEN), this, MID_SIMPLE_VIEW_IMPORT, GUIDesignButtonToolbar);18011802new FXVerticalSeparator(horizontalFrame);1803new FXLabel(horizontalFrame, TL("Export includes:"), nullptr, GUIDesignViewSettingsLabel1);1804mySaveViewPort = new FXCheckButton(horizontalFrame, TL("Viewport"));1805mySaveDelay = new FXCheckButton(horizontalFrame, TL("Delay"));1806mySaveDecals = new FXCheckButton(horizontalFrame, TL("Decals"));1807mySaveBreakpoints = new FXCheckButton(horizontalFrame, TL("Breakpoints"));1808if (mySettings->netedit) {1809mySaveBreakpoints->disable();1810}1811}181218131814void1815GUIDialog_ViewSettings::buildBackgroundFrame(FXTabBook* tabbook) {1816// tab for the background1817new FXTabItem(tabbook, TL("Background"), nullptr, GUIDesignViewSettingsTabItemBook1);1818FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);1819FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);18201821FXMatrix* matrixColor = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);1822new FXLabel(matrixColor, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);1823myBackgroundColor = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->backgroundColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);18241825FXVerticalFrame* verticalFrameDecals = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame3);1826new FXLabel(verticalFrameDecals, TL("Decals:"));1827myDecalsTable = new MFXDecalsTable(this, verticalFrameDecals);1828FXHorizontalFrame* horizontalFrameButtonsDecals = new FXHorizontalFrame(verticalFrameDecals, GUIDesignViewSettingsHorizontalFrame2);1829GUIDesigns::buildFXButton(horizontalFrameButtonsDecals, TL("&Load XML Decals"), "", "", nullptr, this, MID_SIMPLE_VIEW_LOAD_DECALS_XML, GUIDesignViewSettingsButton1);1830GUIDesigns::buildFXButton(horizontalFrameButtonsDecals, TL("&Save XML Decals"), "", "", nullptr, this, MID_SIMPLE_VIEW_SAVE_DECALS_XML, GUIDesignViewSettingsButton1);1831GUIDesigns::buildFXButton(horizontalFrameButtonsDecals, TL("&Clear Decals"), "", "", nullptr, this, MID_SIMPLE_VIEW_CLEAR_DECALS, GUIDesignViewSettingsButton1);18321833new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);18341835FXMatrix* matrixGrid = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);1836myShowGrid = new FXCheckButton(matrixGrid, TL("Toggle grid"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1837myShowGrid->setCheck(mySettings->showGrid);1838new FXLabel(matrixGrid, "");1839FXMatrix* matrixGridX = new FXMatrix(matrixGrid, 2, GUIDesignViewSettingsMatrix2);1840new FXLabel(matrixGridX, TL("x-spacing"), nullptr, GUIDesignViewSettingsLabel1);1841myGridXSizeDialer = new FXRealSpinner(matrixGridX, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);1842myGridXSizeDialer->setRange(1, 10000);1843myGridXSizeDialer->setValue(mySettings->gridXSize);1844FXMatrix* matrixGridY = new FXMatrix(matrixGrid, 2, GUIDesignViewSettingsMatrix2);1845new FXLabel(matrixGridY, TL("y-spacing"), nullptr, GUIDesignViewSettingsLabel1);1846myGridYSizeDialer = new FXRealSpinner(matrixGridY, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);1847myGridYSizeDialer->setRange(1, 10000);1848myGridYSizeDialer->setValue(mySettings->gridYSize);1849}185018511852void1853GUIDialog_ViewSettings::buildStreetsFrame(FXTabBook* tabbook) {1854new FXTabItem(tabbook, TL("Streets"), nullptr, GUIDesignViewSettingsTabItemBook1);1855FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);1856FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);1857// ... color settings1858FXVerticalFrame* verticalFrameColor = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame6);1859FXMatrix* matrixColor = new FXMatrix(verticalFrameColor, 5, GUIDesignViewSettingsMatrix3);1860new FXLabel(matrixColor, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);1861myLaneEdgeColorMode = new MFXComboBoxIcon(matrixColor, nullptr, true, GUIDesignComboBoxVisibleItems,1862this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1863myLaneColorInterpolation = new FXCheckButton(matrixColor, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1864myLaneColorSettingFrame = new FXVerticalFrame(verticalFrameColor, GUIDesignViewSettingsVerticalFrame4);1865myMeanDataID = new MFXComboBoxIcon(matrixColor, nullptr, false, GUIDesignComboBoxVisibleItems,1866this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1867myMeanDataID->disable();1868myMeanDataID->hide();1869myParamKey = new FXComboBox(matrixColor, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1870myParamKey->setEditable(true);1871myParamKey->disable();18721873// rainbow settings1874myEdgeRainbowPanel = new RainbowPanel(verticalFrameColor, this, mySettings->edgeValueRainBow);18751876new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);1877// ... scale settings1878FXVerticalFrame* verticalFrameScale = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame6);1879FXMatrix* matrixScale = new FXMatrix(verticalFrameScale, 5, GUIDesignViewSettingsMatrix3);1880new FXLabel(matrixScale, TL("Scale width"), nullptr, GUIDesignViewSettingsLabel1);1881myLaneEdgeScaleMode = new MFXComboBoxIcon(matrixScale, nullptr, true, GUIDesignComboBoxVisibleItems,1882this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1883myLaneScaleInterpolation = new FXCheckButton(matrixScale, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1884myLaneScaleSettingFrame = new FXVerticalFrame(verticalFrameScale, GUIDesignViewSettingsVerticalFrame4);1885myScalingParamKey = new FXComboBox(matrixScale, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1886myScalingParamKey->setEditable(true);1887myScalingParamKey->disable();18881889if (GUIVisualizationSettings::UseMesoSim) {1890mySettings->edgeColorer.fill(*myLaneEdgeColorMode);1891mySettings->edgeScaler.fill(*myLaneEdgeScaleMode);1892} else {1893mySettings->laneColorer.fill(*myLaneEdgeColorMode);1894mySettings->laneScaler.fill(*myLaneEdgeScaleMode);1895}18961897new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);1898FXMatrix* matrixLanes = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);18991900myShowBikeMarkings = new FXCheckButton(matrixLanes, TL("Show bike markings"), this, MID_SIMPLE_VIEW_COLORCHANGE);1901myShowBikeMarkings->setCheck(mySettings->showBikeMarkings);1902myShowLaneDecals = new FXCheckButton(matrixLanes, TL("Show turning arrows"), this, MID_SIMPLE_VIEW_COLORCHANGE);1903myShowLaneDecals->setCheck(mySettings->showLinkDecals);19041905myShowLinkRules = new FXCheckButton(matrixLanes, TL("Show right-of-way rules"), this, MID_SIMPLE_VIEW_COLORCHANGE);1906myShowLinkRules->setCheck(mySettings->showLinkRules);1907myRealisticLinkRules = new FXCheckButton(matrixLanes, TL("Realistic stop line colors"), this, MID_SIMPLE_VIEW_COLORCHANGE);1908myRealisticLinkRules->setCheck(mySettings->realisticLinkRules);19091910myShowLaneBorders = new FXCheckButton(matrixLanes, TL("Show lane borders"), this, MID_SIMPLE_VIEW_COLORCHANGE);1911myShowLaneBorders->setCheck(mySettings->laneShowBorders);1912myShowLaneDirection = new FXCheckButton(matrixLanes, TL("Show lane direction"), this, MID_SIMPLE_VIEW_COLORCHANGE);1913myShowLaneDirection->setCheck(mySettings->showLaneDirection);19141915myHideMacroConnectors = new FXCheckButton(matrixLanes, TL("Hide macro connectors"), this, MID_SIMPLE_VIEW_COLORCHANGE);1916myHideMacroConnectors->setCheck(mySettings->hideConnectors);1917myShowSublanes = new FXCheckButton(matrixLanes, TL("Show sublanes"), this, MID_SIMPLE_VIEW_COLORCHANGE);1918myShowSublanes->setCheck(mySettings->showSublanes);19191920myShowRails = new FXCheckButton(matrixLanes, TL("Show rails"), this, MID_SIMPLE_VIEW_COLORCHANGE);1921myShowRails->setCheck(mySettings->showRails);19221923mySpreadSuperposed = new FXCheckButton(matrixLanes, TL("Spread bidirectional railways/roads"), this, MID_SIMPLE_VIEW_COLORCHANGE);1924mySpreadSuperposed->setHelpText(TL("Make both directional edges for a bidirectional railways or roads visible"));1925mySpreadSuperposed->setCheck(mySettings->spreadSuperposed);19261927mySecondaryShape = new FXCheckButton(matrixLanes, TL("Secondary shape"), this, MID_SIMPLE_VIEW_COLORCHANGE);1928mySecondaryShape->setCheck(mySettings->secondaryShape);1929new FXLabel(matrixLanes, " ", nullptr, GUIDesignViewSettingsLabel1);1930if (!OptionsCont::getOptions().exists("alternative-net-file") ||1931!OptionsCont::getOptions().isSet("alternative-net-file")) {1932mySecondaryShape->disable();1933}19341935FXMatrix* tmp0 = new FXMatrix(matrixLanes, 2, GUIDesignViewSettingsMatrix5);1936new FXLabel(tmp0, TL("Exaggerate width by"), nullptr, GUIDesignViewSettingsLabel1);1937myLaneWidthUpscaleDialer = new FXRealSpinner(tmp0, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);1938myLaneWidthUpscaleDialer->setRange(0, 1000000);1939myLaneWidthUpscaleDialer->setValue(mySettings->laneWidthExaggeration);19401941FXMatrix* tmp1 = new FXMatrix(matrixLanes, 2, GUIDesignViewSettingsMatrix5);1942new FXLabel(tmp1, TL("Minimum size"), nullptr, GUIDesignViewSettingsLabel1);1943myLaneMinWidthDialer = new FXRealSpinner(tmp1, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);1944myLaneMinWidthDialer->setRange(0, 1000000);1945myLaneMinWidthDialer->setValue(mySettings->laneMinSize);19461947// edge name1948myEdgeNamePanel = new NamePanel(matrixLanes, this, TL("Show edge id"), mySettings->edgeName);1949myStreetNamePanel = new NamePanel(matrixLanes, this, TL("Show street name"), mySettings->streetName);1950myEdgeValuePanel = new NamePanel(matrixLanes, this, TL("Show edge color value"), mySettings->edgeValue);1951myEdgeScaleValuePanel = new NamePanel(matrixLanes, this, TL("Show edge scale value"), mySettings->edgeScaleValue);1952}195319541955void1956GUIDialog_ViewSettings::buildVehiclesFrame(FXTabBook* tabbook) {1957new FXTabItem(tabbook, TL("Vehicles"), nullptr, GUIDesignViewSettingsTabItemBook1);1958FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);1959FXVerticalFrame* verticalframe = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);19601961FXMatrix* matrixShowAs = new FXMatrix(verticalframe, 2, GUIDesignViewSettingsMatrix3);1962new FXLabel(matrixShowAs, TL("Show As"), nullptr, GUIDesignViewSettingsLabel1);1963myVehicleShapeDetail = new MFXComboBoxIcon(matrixShowAs, nullptr, false, GUIDesignComboBoxVisibleItems,1964this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1965myVehicleShapeDetail->appendIconItem(TL("'triangles'"));1966myVehicleShapeDetail->appendIconItem(TL("'boxes'"));1967myVehicleShapeDetail->appendIconItem(TL("'simple shapes'"));1968myVehicleShapeDetail->appendIconItem(TL("'raster images'"));1969myVehicleShapeDetail->appendIconItem(TL("'circles'"));1970myVehicleShapeDetail->setCurrentItem(mySettings->vehicleQuality);19711972new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);19731974FXMatrix* matrixColor = new FXMatrix(verticalframe, 4, GUIDesignViewSettingsMatrix3);1975new FXLabel(matrixColor, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);1976myVehicleColorMode = new MFXComboBoxIcon(matrixColor, nullptr, true, GUIDesignComboBoxVisibleItems,1977this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1978mySettings->vehicleColorer.fill(*myVehicleColorMode);1979myVehicleColorInterpolation = new FXCheckButton(matrixColor, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1980myVehicleParamKey = new FXComboBox(matrixColor, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1981myVehicleParamKey->setEditable(true);1982myVehicleParamKey->disable();19831984// rainbow settings1985myVehicleRainbowPanel = new RainbowPanel(verticalframe, this, mySettings->vehicleValueRainBow);19861987myVehicleColorSettingFrame = new FXVerticalFrame(verticalframe, GUIDesignViewSettingsVerticalFrame4);1988new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);19891990// vehicle scale settings1991FXVerticalFrame* verticalFrameScale = new FXVerticalFrame(verticalframe, GUIDesignViewSettingsVerticalFrame6);1992FXMatrix* matrixScale = new FXMatrix(verticalFrameScale, 4, GUIDesignViewSettingsMatrix3);1993new FXLabel(matrixScale, TL("Scale size"), nullptr, GUIDesignViewSettingsLabel1);1994myVehicleScaleMode = new MFXComboBoxIcon(matrixScale, nullptr, true, GUIDesignComboBoxVisibleItems,1995this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1996myVehicleScaleInterpolation = new FXCheckButton(matrixScale, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);1997myVehicleScalingParamKey = new FXComboBox(matrixScale, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);1998myVehicleScalingParamKey->setEditable(true);1999myVehicleScalingParamKey->disable();2000myVehicleScaleSettingFrame = new FXVerticalFrame(verticalFrameScale, GUIDesignViewSettingsVerticalFrame4);2001mySettings->vehicleScaler.fill(*myVehicleScaleMode);2002new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);20032004FXMatrix* matrixVehicle = new FXMatrix(verticalframe, 2, GUIDesignMatrixViewSettings);2005myVehicleNamePanel = new NamePanel(matrixVehicle, this, TL("Show vehicle id"), mySettings->vehicleName);2006myVehicleValuePanel = new NamePanel(matrixVehicle, this, TL("Show vehicle color value"), mySettings->vehicleValue);2007myVehicleScaleValuePanel = new NamePanel(matrixVehicle, this, TL("Show vehicle scale value"), mySettings->vehicleScaleValue);2008myVehicleTextPanel = new NamePanel(matrixVehicle, this, TL("Show vehicle text param"), mySettings->vehicleText);2009myVehicleTextParamKey = new FXComboBox(myVehicleTextPanel->myMatrix0, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2010myVehicleTextParamKey->setEditable(true);2011//new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);20122013FXMatrix* matrixShow = new FXMatrix(verticalframe, 2, GUIDesignMatrixViewSettings);2014myShowBlinker = new FXCheckButton(matrixShow, TL("Show blinker / brake lights"), this, MID_SIMPLE_VIEW_COLORCHANGE);2015myShowBlinker->setCheck(mySettings->showBlinker);2016myShowMinGap = new FXCheckButton(matrixShow, TL("Show minimum gap"), this, MID_SIMPLE_VIEW_COLORCHANGE);2017myShowMinGap->setCheck(mySettings->drawMinGap);2018myShowBrakeGap = new FXCheckButton(matrixShow, TL("Show brake gap"), this, MID_SIMPLE_VIEW_COLORCHANGE);2019myShowBrakeGap->setCheck(mySettings->drawBrakeGap);2020myShowBTRange = new FXCheckButton(matrixShow, TL("Show Bluetooth range"), this, MID_SIMPLE_VIEW_COLORCHANGE);2021myShowBTRange->setCheck(mySettings->showBTRange);2022myShowRouteIndex = new FXCheckButton(matrixShow, TL("Show route index"), this, MID_SIMPLE_VIEW_COLORCHANGE);2023myShowRouteIndex->setCheck(mySettings->showRouteIndex);2024myScaleLength = new FXCheckButton(matrixShow, TL("Scale length with geometry"), this, MID_SIMPLE_VIEW_COLORCHANGE);2025myScaleLength->setCheck(mySettings->scaleLength);2026const std::string parkingInfo = mySettings->netedit ? TL("Show stopping info") : TL("Show parking info");2027myShowParkingInfo = new FXCheckButton(matrixShow, parkingInfo.c_str(), this, MID_SIMPLE_VIEW_COLORCHANGE);2028myShowParkingInfo->setCheck(mySettings->showParkingInfo);2029myShowChargingInfo = new FXCheckButton(matrixShow, TL("Show charging info"), this, MID_SIMPLE_VIEW_COLORCHANGE);2030myShowChargingInfo->setCheck(mySettings->showChargingInfo);2031myDrawReversed = new FXCheckButton(matrixShow, TL("Draw reversed vehicles in reverse"), this, MID_SIMPLE_VIEW_COLORCHANGE);2032myDrawReversed->setCheck(mySettings->drawReversed);2033//new FXLabel(matrixShow, " ", nullptr, GUIDesignViewSettingsLabel1);2034//myShowLaneChangePreference = new FXCheckButton(matrixShow, TL("Show lane change preference"), this, MID_SIMPLE_VIEW_COLORCHANGE);2035//myShowLaneChangePreference->setCheck(mySettings->drawLaneChangePreference);2036//tmpc = new FXCheckButton(matrixShow, TL("Show needed headway"), 0 ,0);2037//tmpc->disable();20382039//new FXHorizontalSeparator(frame3, GUIDesignHorizontalSeparator);20402041FXMatrix* matrixSize = new FXMatrix(verticalframe, 2, GUIDesignViewSettingsMatrix1);2042myVehicleSizePanel = new SizePanel(matrixSize, this, mySettings->vehicleSize, GLO_VEHICLE);2043}204420452046void2047GUIDialog_ViewSettings::buildPersonsFrame(FXTabBook* tabbook) {2048new FXTabItem(tabbook, TL("Persons"), nullptr, GUIDesignViewSettingsTabItemBook1);2049FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2050FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);20512052FXMatrix* m101 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix3);2053new FXLabel(m101, TL("Show As"), nullptr, GUIDesignViewSettingsLabel1);2054myPersonShapeDetail = new MFXComboBoxIcon(m101, nullptr, false, GUIDesignComboBoxVisibleItems,2055this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2056myPersonShapeDetail->appendIconItem(TL("'triangles'"));2057myPersonShapeDetail->appendIconItem(TL("'circles'"));2058myPersonShapeDetail->appendIconItem(TL("'simple shapes'"));2059myPersonShapeDetail->appendIconItem(TL("'raster images'"));2060myPersonShapeDetail->setCurrentItem(mySettings->personQuality);20612062new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);20632064FXMatrix* m102 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);2065new FXLabel(m102, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);2066myPersonColorMode = new MFXComboBoxIcon(m102, nullptr, false, GUIDesignComboBoxVisibleItems,2067this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2068mySettings->personColorer.fill(*myPersonColorMode);2069myPersonColorInterpolation = new FXCheckButton(m102, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);20702071myPersonColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);20722073new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);20742075FXMatrix* m103 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2076myPersonNamePanel = new NamePanel(m103, this, TL("Show person id"), mySettings->personName);2077myPersonValuePanel = new NamePanel(m103, this, TL("Show person color value"), mySettings->personValue);20782079new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);20802081FXMatrix* m104 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);2082myPersonSizePanel = new SizePanel(m104, this, mySettings->personSize, GLO_PERSON);20832084FXMatrix* m105 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix3);2085myShowPedestrianNetwork = new FXCheckButton(m105, TL("Show JuPedSim pedestrian network"), this, MID_SIMPLE_VIEW_COLORCHANGE);2086myShowPedestrianNetwork->setCheck(mySettings->showPedestrianNetwork);2087myPedestrianNetworkColor = new FXColorWell(m105, MFXUtils::getFXColor(mySettings->pedestrianNetworkColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2088#ifdef JPS_VERSION2089if (mySettings->netedit) {2090#endif2091myShowPedestrianNetwork->disable();2092myPedestrianNetworkColor->disable();2093#ifdef JPS_VERSION2094}2095#endif2096}209720982099void2100GUIDialog_ViewSettings::buildContainersFrame(FXTabBook* tabbook) {2101new FXTabItem(tabbook, TL("Containers"), nullptr, GUIDesignViewSettingsTabItemBook1);2102FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2103FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);21042105FXMatrix* m101 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix3);2106new FXLabel(m101, TL("Show As"), nullptr, GUIDesignViewSettingsLabel1);2107myContainerShapeDetail = new MFXComboBoxIcon(m101, nullptr, false, GUIDesignComboBoxVisibleItems,2108this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2109myContainerShapeDetail->appendIconItem(TL("'triangles'"));2110myContainerShapeDetail->appendIconItem(TL("'boxes'"));2111myContainerShapeDetail->appendIconItem(TL("'simple shapes'"));2112myContainerShapeDetail->appendIconItem(TL("'raster images'"));2113myContainerShapeDetail->setCurrentItem(mySettings->containerQuality);21142115new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);21162117FXMatrix* m102 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);2118new FXLabel(m102, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);2119myContainerColorMode = new MFXComboBoxIcon(m102, nullptr, false, GUIDesignComboBoxVisibleItems,2120this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2121mySettings->containerColorer.fill(*myContainerColorMode);2122myContainerColorInterpolation = new FXCheckButton(m102, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);21232124myContainerColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);21252126new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);21272128FXMatrix* m103 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2129myContainerNamePanel = new NamePanel(m103, this, TL("Show container id"), mySettings->containerName);21302131new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);21322133FXMatrix* m104 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);2134myContainerSizePanel = new SizePanel(m104, this, mySettings->containerSize, GLO_CONTAINER);2135}213621372138void2139GUIDialog_ViewSettings::buildJunctionsFrame(FXTabBook* tabbook) {2140new FXTabItem(tabbook, TL("Junctions"), nullptr, GUIDesignViewSettingsTabItemBook1);2141FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2142FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);2143FXMatrix* m41 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);2144new FXLabel(m41, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);2145myJunctionColorMode = new MFXComboBoxIcon(m41, nullptr, false, GUIDesignComboBoxVisibleItems,2146this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2147mySettings->junctionColorer.fill(*myJunctionColorMode);2148myJunctionColorInterpolation = new FXCheckButton(m41, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);21492150myJunctionColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);2151myJunctionRainbowPanel = new RainbowPanel(verticalFrame, this, mySettings->junctionValueRainBow);21522153new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);2154FXMatrix* m42 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2155myJunctionSizePanel = new SizePanel(m42, this, mySettings->junctionSize, GLO_JUNCTION);2156myDrawJunctionShape = new FXCheckButton(m42, TL("Draw junction shape"), this, MID_SIMPLE_VIEW_COLORCHANGE);2157myDrawJunctionShape->setCheck(mySettings->drawJunctionShape);2158myDrawCrossingsAndWalkingAreas = new FXCheckButton(m42, TL("Draw crossings/walkingareas"), this, MID_SIMPLE_VIEW_COLORCHANGE);2159myDrawCrossingsAndWalkingAreas->setCheck(mySettings->drawCrossingsAndWalkingareas);2160myShowLane2Lane = new FXCheckButton(m42, TL("Show lane to lane connections"), this, MID_SIMPLE_VIEW_COLORCHANGE);2161myShowLane2Lane->setCheck(mySettings->showLane2Lane);2162new FXLabel(m42, " ", nullptr, GUIDesignViewSettingsLabel1);21632164myTLIndexPanel = new NamePanel(m42, this, TL("Show link tls index"), mySettings->drawLinkTLIndex);2165myJunctionIndexPanel = new NamePanel(m42, this, TL("Show link junction index"), mySettings->drawLinkJunctionIndex);2166myJunctionIDPanel = new NamePanel(m42, this, TL("Show junction id"), mySettings->junctionID);2167myInternalJunctionNamePanel = new NamePanel(m42, this, TL("Show internal junction id"), mySettings->internalJunctionName);2168myInternalEdgeNamePanel = new NamePanel(m42, this, TL("Show internal edge id"), mySettings->internalEdgeName);2169myCwaEdgeNamePanel = new NamePanel(m42, this, TL("Show crossing and walkingarea id"), mySettings->cwaEdgeName);2170myTLSPhaseIndexPanel = new NamePanel(m42, this, TL("Show traffic light phase index"), mySettings->tlsPhaseIndex);2171myTLSPhaseNamePanel = new NamePanel(m42, this, TL("Show traffic light phase name"), mySettings->tlsPhaseName);2172myJunctionNamePanel = new NamePanel(m42, this, TL("Show junction name"), mySettings->junctionName);2173}217421752176void2177GUIDialog_ViewSettings::buildAdditionalsFrame(FXTabBook* tabbook) {2178new FXTabItem(tabbook, TL("Additional"), nullptr, GUIDesignViewSettingsTabItemBook1);2179FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2180FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);2181// IDs2182FXMatrix* matrixIDs = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2183myAddNamePanel = new NamePanel(matrixIDs, this, TL("Show object id"), mySettings->addName);2184myAddFullNamePanel = new NamePanel(matrixIDs, this, TL("Show full name"), mySettings->addFullName);2185new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);2186//Sizes2187FXMatrix* matrixSizes = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2188myAddSizePanel = new SizePanel(matrixSizes, this, mySettings->addSize, GLO_ADDITIONALELEMENT);2189// color2190FXMatrix* matrixColor = new FXMatrix(verticalFrame, 3, GUIDesignMatrixViewSettings);2191new FXLabel(matrixColor, TL("StoppingPlace"), nullptr, GUIDesignViewSettingsLabel1);2192new FXLabel(matrixColor, TL("body"), nullptr, GUIDesignViewSettingsLabel1);2193new FXLabel(matrixColor, TL("sign"), nullptr, GUIDesignViewSettingsLabel1);2194new FXLabel(matrixColor, "busStops", nullptr, GUIDesignViewSettingsLabel1);2195myBusStopColor = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.busStopColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2196myBusStopColorSign = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.busStopColorSign), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2197new FXLabel(matrixColor, "trainStops", nullptr, GUIDesignViewSettingsLabel1);2198myTrainStopColor = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.trainStopColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2199myTrainStopColorSign = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.trainStopColorSign), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2200new FXLabel(matrixColor, "containerStops", nullptr, GUIDesignViewSettingsLabel1);2201myContainerStopColor = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.containerStopColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2202myContainerStopColorSign = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.containerStopColorSign), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2203new FXLabel(matrixColor, "chargingStations", nullptr, GUIDesignViewSettingsLabel1);2204myChargingStationColor = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.chargingStationColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2205myChargingStationColorSign = new FXColorWell(matrixColor, MFXUtils::getFXColor(mySettings->colorSettings.chargingStationColorSign), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2206}220722082209void2210GUIDialog_ViewSettings::buildDemandFrame(FXTabBook* tabbook) {2211new FXTabItem(tabbook, TL("Demand"), nullptr, GUIDesignViewSettingsTabItemBook1);2212FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2213FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);2214// elements2215FXMatrix* demandMatrix = new FXMatrix(verticalFrame, 3, GUIDesignMatrixViewSettings);2216new FXLabel(demandMatrix, TL("element"), nullptr, GUIDesignViewSettingsLabel1);2217new FXLabel(demandMatrix, TL("color"), nullptr, GUIDesignViewSettingsLabel1);2218new FXLabel(demandMatrix, TL("width"), nullptr, GUIDesignViewSettingsLabel1);2219new FXLabel(demandMatrix, "trips", nullptr, GUIDesignViewSettingsLabel1);2220myVehicleTripsColor = new FXColorWell(demandMatrix, MFXUtils::getFXColor(mySettings->colorSettings.vehicleTripColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2221myTripWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2222myTripWidth->setValue(mySettings->widthSettings.personTripWidth);2223new FXLabel(demandMatrix, "personTrips", nullptr, GUIDesignViewSettingsLabel1);2224myPersonTripColor = new FXColorWell(demandMatrix, MFXUtils::getFXColor(mySettings->colorSettings.personTripColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2225myPersonTripWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2226myPersonTripWidth->setValue(mySettings->widthSettings.personTripWidth);2227new FXLabel(demandMatrix, "walks", nullptr, GUIDesignViewSettingsLabel1);2228myWalkColor = new FXColorWell(demandMatrix, MFXUtils::getFXColor(mySettings->colorSettings.walkColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2229myWalkWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2230myWalkWidth->setValue(mySettings->widthSettings.walkWidth);2231new FXLabel(demandMatrix, "rides", nullptr, GUIDesignViewSettingsLabel1);2232myRideColor = new FXColorWell(demandMatrix, MFXUtils::getFXColor(mySettings->colorSettings.rideColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2233myRideWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2234myRideWidth->setValue(mySettings->widthSettings.rideWidth);2235new FXLabel(demandMatrix, "transport", nullptr, GUIDesignViewSettingsLabel1);2236myTransportColor = new FXColorWell(demandMatrix, MFXUtils::getFXColor(mySettings->colorSettings.transportColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2237myTransportWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2238myTransportWidth->setValue(mySettings->widthSettings.transportWidth);2239new FXLabel(demandMatrix, "tranship", nullptr, GUIDesignViewSettingsLabel1);2240myTranshipColor = new FXColorWell(demandMatrix, MFXUtils::getFXColor(mySettings->colorSettings.transhipColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2241myTranshipWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2242myTranshipWidth->setValue(mySettings->widthSettings.transhipWidth);2243// stops2244FXMatrix* stopMatrix = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2245new FXLabel(stopMatrix, "stop", nullptr, GUIDesignViewSettingsLabel1);2246myStopColor = new FXColorWell(stopMatrix, MFXUtils::getFXColor(mySettings->colorSettings.stopColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2247new FXLabel(stopMatrix, "waypoint", nullptr, GUIDesignViewSettingsLabel1);2248myWaypointColor = new FXColorWell(stopMatrix, MFXUtils::getFXColor(mySettings->colorSettings.waypointColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2249new FXLabel(stopMatrix, "stop (persons)", nullptr, GUIDesignViewSettingsLabel1);2250myStopPersonsColor = new FXColorWell(stopMatrix, MFXUtils::getFXColor(mySettings->colorSettings.stopPersonColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2251new FXLabel(stopMatrix, "stop (containers)", nullptr, GUIDesignViewSettingsLabel1);2252myStopContainersColor = new FXColorWell(stopMatrix, MFXUtils::getFXColor(mySettings->colorSettings.stopContainerColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2253}225422552256void2257GUIDialog_ViewSettings::buildPOIsFrame(FXTabBook* tabbook) {2258new FXTabItem(tabbook, TL("POIs"), nullptr, GUIDesignViewSettingsTabItemBook1);2259FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2260FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);22612262FXMatrix* m63 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);2263new FXLabel(m63, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);2264myPOIColorMode = new MFXComboBoxIcon(m63, nullptr, false, GUIDesignComboBoxVisibleItems,2265this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2266mySettings->poiColorer.fill(*myPOIColorMode);2267myPOIColorInterpolation = new FXCheckButton(m63, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);2268myPOIColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);22692270new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);22712272FXMatrix* m61 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);22732274new FXLabel(m61, TL("POI detail"), nullptr, GUIDesignViewSettingsLabel1);2275myPoiDetail = new FXSpinner(m61, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);2276myPoiDetail->setRange(3, 100);2277myPoiDetail->setValue(mySettings->poiDetail);22782279myPOIUseCustomLayer = new FXCheckButton(m61, TL("Custom Layer"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);2280myPOIUseCustomLayer->setCheck(mySettings->poiUseCustomLayer);2281myPOICustomLayer = new FXRealSpinner(m61, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);2282myPOICustomLayer->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());2283myPOICustomLayer->setValue(mySettings->poiCustomLayer);22842285myPOINamePanel = new NamePanel(m61, this, TL("Show poi id"), mySettings->poiName);2286myPOITypePanel = new NamePanel(m61, this, TL("Show poi type"), mySettings->poiType);2287myPOITextPanel = new NamePanel(m61, this, TL("Show poi text param"), mySettings->poiText);2288myPOITextParamKey = new FXComboBox(myPOITextPanel->myMatrix0, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2289myPOITextParamKey->setEditable(true);22902291new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);22922293FXMatrix* m62 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2294myPOISizePanel = new SizePanel(m62, this, mySettings->poiSize, GLO_POI);2295}229622972298void2299GUIDialog_ViewSettings::buildPolygonsFrame(FXTabBook* tabbook) {2300new FXTabItem(tabbook, TL("Polygons"), nullptr, GUIDesignViewSettingsTabItemBook1);2301FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2302FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);23032304FXMatrix* m63 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);2305new FXLabel(m63, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);2306myPolyColorMode = new MFXComboBoxIcon(m63, nullptr, false, GUIDesignComboBoxVisibleItems,2307this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2308mySettings->polyColorer.fill(*myPolyColorMode);2309myPolyColorInterpolation = new FXCheckButton(m63, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);2310myPolyColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);23112312new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);23132314FXMatrix* m91 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);23152316myPolyUseCustomLayer = new FXCheckButton(m91, TL("Custom Layer"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);2317myPolyUseCustomLayer->setCheck(mySettings->polyUseCustomLayer);2318myPolyCustomLayer = new FXRealSpinner(m91, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);2319myPolyCustomLayer->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());2320myPolyCustomLayer->setValue(mySettings->polyCustomLayer);23212322myPolyNamePanel = new NamePanel(m91, this, TL("Show polygon id"), mySettings->polyName);2323myPolyTypePanel = new NamePanel(m91, this, TL("Show polygon types"), mySettings->polyType);2324new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);23252326myPolySizePanel = new SizePanel(m91, this, mySettings->polySize, GLO_POLYGON);2327}232823292330void2331GUIDialog_ViewSettings::buildSelectionFrame(FXTabBook* tabbook) {2332new FXTabItem(tabbook, TL("Selection"), nullptr, GUIDesignViewSettingsTabItemBook1);2333FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2334FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);23352336FXMatrix* m102 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2337new FXLabel(m102, TL("Default Selection Color"), nullptr, GUIDesignViewSettingsLabel1);2338new FXLabel(m102, "", nullptr, GUIDesignViewSettingsLabel1);23392340new FXLabel(m102, TL("Miscellaneous"), nullptr, GUIDesignViewSettingsLabel1);2341mySelectionColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectionColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2342new FXLabel(m102, "Edge", nullptr, GUIDesignViewSettingsLabel1);2343mySelectedEdgeColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedEdgeColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2344new FXLabel(m102, "Lane Edge", nullptr, GUIDesignViewSettingsLabel1);2345mySelectedLaneColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedLaneColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2346new FXLabel(m102, "Connection", nullptr, GUIDesignViewSettingsLabel1);2347mySelectedConnectionColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedConnectionColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2348new FXLabel(m102, "Prohibition", nullptr, GUIDesignViewSettingsLabel1);2349mySelectedProhibitionColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedProhibitionColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2350new FXLabel(m102, "Crossing", nullptr, GUIDesignViewSettingsLabel1);2351mySelectedCrossingColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedCrossingColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2352new FXLabel(m102, "Additional", nullptr, GUIDesignViewSettingsLabel1);2353mySelectedAdditionalColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedAdditionalColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2354new FXLabel(m102, "Route", nullptr, GUIDesignViewSettingsLabel1);2355mySelectedRouteColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedRouteColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2356new FXLabel(m102, "Vehicle", nullptr, GUIDesignViewSettingsLabel1);2357mySelectedVehicleColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedVehicleColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2358new FXLabel(m102, "Person", nullptr, GUIDesignViewSettingsLabel1);2359mySelectedPersonColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedPersonColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2360new FXLabel(m102, "PersonPlan", nullptr, GUIDesignViewSettingsLabel1);2361mySelectedPersonPlanColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedPersonPlanColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2362new FXLabel(m102, "edgeData", nullptr, GUIDesignViewSettingsLabel1);2363mySelectedEdgeDataColor = new FXColorWell(m102, MFXUtils::getFXColor(mySettings->colorSettings.selectedEdgeDataColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2364}236523662367void2368GUIDialog_ViewSettings::buildDataFrame(FXTabBook* tabbook) {2369new FXTabItem(tabbook, TL("Data"), nullptr, GUIDesignViewSettingsTabItemBook1);2370FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2371FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);2372// ... color settings2373FXVerticalFrame* verticalFrame2 = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame6);2374FXMatrix* m111 = new FXMatrix(verticalFrame2, 4, GUIDesignViewSettingsMatrix3);2375new FXLabel(m111, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);2376myDataColorMode = new MFXComboBoxIcon(m111, nullptr, false, GUIDesignComboBoxVisibleItems,2377this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);2378myDataColorInterpolation = new FXCheckButton(m111, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);2379myDataColorSettingFrame = new FXVerticalFrame(verticalFrame2, GUIDesignViewSettingsVerticalFrame4);2380myDataParamKey = new FXComboBox(m111, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxFixed(100));2381myDataParamKey->setEditable(true);2382myDataParamKey->disable();2383mySettings->dataColorer.fill(*myDataColorMode);23842385// rainbow settings2386myDataRainbowPanel = new RainbowPanel(verticalFrame2, this, mySettings->dataValueRainBow);23872388new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);2389FXMatrix* m112 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);23902391new FXLabel(m112, TL("Exaggerate edgeRelation width by"), nullptr, GUIDesignViewSettingsLabel1);2392myEdgeRelationUpscaleDialer = new FXRealSpinner(m112, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);2393myEdgeRelationUpscaleDialer->setRange(0, 1000000);2394myEdgeRelationUpscaleDialer->setValue(mySettings->edgeRelWidthExaggeration);23952396new FXLabel(m112, TL("Exaggerate tazRelation width by"), nullptr, GUIDesignViewSettingsLabel1);2397myTazRelationUpscaleDialer = new FXRealSpinner(m112, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial2);2398myTazRelationUpscaleDialer->setRange(0, 1000000);2399myTazRelationUpscaleDialer->setValue(mySettings->tazRelWidthExaggeration);24002401// text decoration2402myDataValuePanel = new NamePanel(m112, this, TL("Show data color value"), mySettings->dataValue);2403}240424052406void2407GUIDialog_ViewSettings::buildLegendFrame(FXTabBook* tabbook) {2408new FXTabItem(tabbook, TL("Legend"), nullptr, GUIDesignViewSettingsTabItemBook1);2409FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2410FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);24112412FXMatrix* m72 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2413myShowSizeLegend = new FXCheckButton(m72, TL("Show Size Legend"), this, MID_SIMPLE_VIEW_COLORCHANGE);2414myShowSizeLegend->setCheck(mySettings->showSizeLegend);2415new FXLabel(m72, "");2416myShowColorLegend = new FXCheckButton(m72, TL("Show Edge Color Legend"), this, MID_SIMPLE_VIEW_COLORCHANGE);2417myShowColorLegend->setCheck(mySettings->showColorLegend);2418new FXLabel(m72, "");2419myShowVehicleColorLegend = new FXCheckButton(m72, TL("Show Vehicle Color Legend"), this, MID_SIMPLE_VIEW_COLORCHANGE);2420myShowVehicleColorLegend->setCheck(mySettings->showVehicleColorLegend);2421new FXLabel(m72, "");2422}242324242425void2426GUIDialog_ViewSettings::buildOpenGLFrame(FXTabBook* tabbook) {2427new FXTabItem(tabbook, "openGL", nullptr, GUIDesignViewSettingsTabItemBook1);2428FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2429FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);24302431FXMatrix* m80 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2432myTrueZ = new FXCheckButton(m80, "Draw all objects at their true Z-level", this, MID_SIMPLE_VIEW_COLORCHANGE);2433myTrueZ->setCheck(mySettings->trueZ);2434FXMatrix* m81 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2435new FXLabel(m81, TL("Combobox max rows"), nullptr, GUIDesignViewSettingsLabel1);2436myComboRows = new FXRealSpinner(m81, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2437myComboRows->setValue(GUIDesignComboBoxVisibleItems);2438FXMatrix* m82 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2439myDisableHideByZoom = new FXCheckButton(m82, TL("Disable hide by zoom"), this, MID_SIMPLE_VIEW_COLORCHANGE);2440myDisableHideByZoom->setHelpText(TL("Disable hiding edges with high zoom out"));2441myDisableHideByZoom->setCheck(mySettings->disableHideByZoom);2442FXMatrix* m83 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2443myDither = new FXCheckButton(m83, TL("Dither"), this, MID_SIMPLE_VIEW_COLORCHANGE);2444myDither->setCheck(mySettings->dither);2445FXMatrix* m84 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2446myFPS = new FXCheckButton(m84, "FPS", this, MID_SIMPLE_VIEW_COLORCHANGE);2447myFPS->setCheck(mySettings->fps);2448FXMatrix* m85 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2449myDrawBoundaries = new FXCheckButton(m85, TL("Draw boundaries"), this, MID_SIMPLE_VIEW_COLORCHANGE);2450myDrawBoundaries->setCheck(mySettings->drawBoundaries);2451FXMatrix* m86 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2452myForceDrawForRectangleSelection = new FXCheckButton(m86, TL("Force draw for rectangle selection"), this, MID_SIMPLE_VIEW_COLORCHANGE);2453myForceDrawForRectangleSelection->setCheck(mySettings->forceDrawForRectangleSelection);2454FXMatrix* m87 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2455myDisableDottedContours = new FXCheckButton(m87, TL("Disable dotted contours during selection/deletion"), this, MID_SIMPLE_VIEW_COLORCHANGE);2456myDisableDottedContours->setCheck(mySettings->disableDottedContours);2457FXMatrix* m88 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2458myRecalculateBoundaries = GUIDesigns::buildFXButton(m88, TL("Recalculate boundaries"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE,2459(BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT), 0, 0, 0, 0, 20, 20, 4, 4);2460FXMatrix* m89 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2461myGeometryIndicesPanel = new NamePanel(m89, this, TL("Show geometry point indices"), mySettings->geometryIndices);2462}246324642465void2466GUIDialog_ViewSettings::build3DFrame(FXTabBook* tabbook) {2467myFrame3D = new FXTabItem(tabbook, TL("3D view"), nullptr, GUIDesignViewSettingsTabItemBook1);2468FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);2469FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);24702471FXMatrix* m82 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2472myIgnoreColorSchemeFor3DVehicles = new FXCheckButton(m82, TL("Ignore color scheme for vehicles"), this, MID_SIMPLE_VIEW_COLORCHANGE);2473myIgnoreColorSchemeFor3DVehicles->setCheck(mySettings->ignoreColorSchemeFor3DVehicles);2474myShow3DTLSLinkMarkers = new FXCheckButton(m82, TL("Show TLS link markers"), this, MID_SIMPLE_VIEW_COLORCHANGE);2475myShow3DTLSLinkMarkers->setCheck(mySettings->show3DTLSLinkMarkers);2476//FXMatrix* m83 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2477myShow3DTLSDomes = new FXCheckButton(m82, TL("Show domes around TLS models from decals"), this, MID_SIMPLE_VIEW_COLORCHANGE);2478myShow3DTLSDomes->setCheck(mySettings->show3DTLSDomes);2479//FXMatrix* m84 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);2480myGenerate3DTLSModels = new FXCheckButton(m82, TL("Show auto-generated TLS models"), this, MID_SIMPLE_VIEW_COLORCHANGE);2481myGenerate3DTLSModels->setCheck(mySettings->generate3DTLSModels);2482myShow3DHeadUpDisplay = new FXCheckButton(m82, TL("Show head-up display"), this, MID_SIMPLE_VIEW_COLORCHANGE);2483myShow3DHeadUpDisplay->setCheck(mySettings->show3DHeadUpDisplay);24842485new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);24862487FXMatrix* m2 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);2488new FXLabel(m2, TL("Sun brightness"), nullptr, GUIDesignViewSettingsLabel1);2489myLight3DFactor = new FXSpinner(m2, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);2490myLight3DFactor->setRange(0, 255);2491myLight3DFactor->setValue(mySettings->diffuse3DLight.red());2492/*2493new FXLabel(m2, "Ambient", nullptr, GUIDesignViewSettingsLabel1);2494myAmbient3DLight = new FXColorWell(m2, MFXUtils::getFXColor(mySettings->ambient3DLight), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2495myAmbient3DLight->setOpaqueOnly(true);2496new FXLabel(m2, "Diffuse", nullptr, GUIDesignViewSettingsLabel1);2497myDiffuse3DLight = new FXColorWell(m2, MFXUtils::getFXColor(mySettings->diffuse3DLight), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2498myDiffuse3DLight->setOpaqueOnly(true);2499*/2500new FXLabel(m2, TL("Sky color"), nullptr, GUIDesignViewSettingsLabel1);2501mySkyColor = new FXColorWell(m2, MFXUtils::getFXColor(mySettings->skyColor), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);2502mySkyColor->setOpaqueOnly(true);25032504#ifdef HAVE_OSG2505UNUSED_PARAMETER(myFrame3D);2506#else2507myFrame3D->disable();2508#endif2509}251025112512void2513GUIDialog_ViewSettings::buildButtons(FXVerticalFrame* contentFrame) {2514FXHorizontalFrame* horizontalFrameButtons = new FXHorizontalFrame(contentFrame, GUIDesignViewSettingsHorizontalFrame2);2515FXButton* OK = GUIDesigns::buildFXButton(horizontalFrameButtons, TL("&OK"), "", "", nullptr, this, MID_SETTINGS_OK, GUIDesignViewSettingsButton2);2516GUIDesigns::buildFXButton(horizontalFrameButtons, TL("&Cancel"), "", "", nullptr, this, MID_SETTINGS_CANCEL, GUIDesignViewSettingsButton3);2517OK->setFocus();2518}25192520/****************************************************************************/252125222523