Eclipse SUMO - Simulation of Urban MObility
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
GUIDialog_ViewSettings.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
22// The dialog to change the view (gui) settings.
23/****************************************************************************/
24#include <config.h>
25
26#include <fstream>
44
47
48
49// ===========================================================================
50// FOX callback mapping
51// ===========================================================================
52
57
58FXDEFMAP(GUIDialog_ViewSettings) GUIDialog_ViewSettingsMap[] = {
62 FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_OK, GUIDialog_ViewSettings::onCmdOk),
64 // settings
73 // decals
78};
79
80FXIMPLEMENT(GUIDialog_ViewSettings, FXDialogBox, GUIDialog_ViewSettingsMap, ARRAYNUMBER(GUIDialog_ViewSettingsMap))
81FXIMPLEMENT(GUIDialog_ViewSettings::SizePanel, FXObject, GUIDialog_SizeMap, ARRAYNUMBER(GUIDialog_SizeMap))
82
83
84// ===========================================================================
85// method definitions
86// ===========================================================================
87#ifdef _MSC_VER
88#pragma warning(push)
89#pragma warning(disable: 4355) // mask warning about "this" in initializers
90#endif
92 FXDialogBox(parent, TL("View Settings"), GUIDesignViewSettingsMainDialog),
93 GUIPersistentWindowPos(this, "VIEWSETTINGS", true, 20, 40, 700, 500, 400, 20),
94 myParent(parent),
95 mySettings(settings),
96 myBackup(settings->name, settings->netedit) {
97 // make a backup copy
98 myBackup.copy(*settings);
99 // create content frame
100 FXVerticalFrame* contentFrame = new FXVerticalFrame(this, GUIDesignViewSettingsVerticalFrame1);
101 // build header
102 buildHeader(contentFrame);
103 // create tabbook for every section
104 FXTabBook* tabbook = new FXTabBook(contentFrame, nullptr, 0, GUIDesignViewSettingsTabBook1);
105 // build background frame
106 buildBackgroundFrame(tabbook);
107 // build streets frame
108 buildStreetsFrame(tabbook);
109 // build vehicles frame
110 buildVehiclesFrame(tabbook);
111 // build persons frame
112 buildPersonsFrame(tabbook);
113 // build containers frame
114 buildContainersFrame(tabbook);
115 // build junctions frame
116 buildJunctionsFrame(tabbook);
117 // build additionals frame
118 buildAdditionalsFrame(tabbook);
119 // build demand frame
120 if (mySettings->netedit) {
121 buildDemandFrame(tabbook);
122 }
123 // build POIs frame
124 buildPOIsFrame(tabbook);
125 // build polygons frame
126 buildPolygonsFrame(tabbook);
127 // build selection frame (only in netedit)
128 if (mySettings->netedit) {
129 buildSelectionFrame(tabbook);
130 }
131 // build data frame (only in netedit)
132 if (mySettings->netedit) {
133 buildDataFrame(tabbook);
134 }
135 // build legend frame
136 buildLegendFrame(tabbook);
137 // build 3D frame
138 build3DFrame(tabbook);
139 if (mySettings->netedit) {
140 myFrame3D->disable();
141 }
142 // build openGL frame
143 buildOpenGLFrame(tabbook);
144 // build buttons
145 buildButtons(contentFrame);
146 // rebuild color matrix
150}
151#ifdef _MSC_VER
152#pragma warning(pop)
153#endif
154
155
157 myParent->remove(this);
158 // delete name panels
162 delete myTLSPhaseNamePanel;
163 delete myCwaEdgeNamePanel;
164 delete myStreetNamePanel;
165 delete myEdgeValuePanel;
168 delete myTLIndexPanel;
169 delete myJunctionIDPanel;
170 delete myJunctionNamePanel;
171 delete myVehicleNamePanel;
172 delete myVehicleValuePanel;
174 delete myVehicleTextPanel;
175 delete myPersonNamePanel;
176 delete myPersonValuePanel;
177 delete myAddNamePanel;
178 delete myAddFullNamePanel;
179 delete myPOINamePanel;
180 delete myPOITypePanel;
181 delete myPOITextPanel;
182 delete myPolyNamePanel;
183 delete myPolyTypePanel;
184 delete myEdgeNamePanel;
185 delete myDataValuePanel;
187 // delete size panels
188 delete myVehicleSizePanel;
189 delete myPersonSizePanel;
190 delete myJunctionSizePanel;
191 delete myPOISizePanel;
192 delete myPolySizePanel;
193 delete myAddSizePanel;
194 // delete rainbow panels
195 delete myEdgeRainbowPanel;
197 delete myDataRainbowPanel;
199}
200
201
202void
204 // update buttons that can be changed externally
205 myShowGrid->setCheck(mySettings->showGrid);
208 // create myNewDecalsTable
209 myDecalsTable->create();
211 FXDialogBox::show();
212}
213
214
219
220
221void
223 mySettings = settings;
224 myBackup.copy(*settings);
225 onCmdNameChange(nullptr, 0, nullptr);
226}
227
228
229long
230GUIDialog_ViewSettings::onCmdOk(FXObject*, FXSelector, void*) {
231 getApp()->reg().writeIntEntry("SETTINGS", "comboRows", (int)myComboRows->getValue());
232 hide();
233 return 1;
234}
235
236
237long
238GUIDialog_ViewSettings::onCmdCancel(FXObject*, FXSelector, void*) {
239 hide();
241 myParent->update();
242 return 1;
243}
244
245
246long
247GUIDialog_ViewSettings::onCmdNameChange(FXObject*, FXSelector, void* ptr) {
248 if (ptr != nullptr) {
249 FXString dataS = (char*) ptr; // !!!unicode
250 // check whether this item has been added twice
251 if (dataS.text() == mySchemeName->getItemText(mySchemeName->getNumItems() - 1)) {
252 for (int i = 0; i < mySchemeName->getNumItems() - 1; ++i) {
253 if (dataS.text() == mySchemeName->getItemText(i)) {
255 }
256 }
257 }
258 myBackup.copy(gSchemeStorage.get(dataS.text()));
259 mySettings = &gSchemeStorage.get(dataS.text());
260 }
262
271 if (mySettings->netedit) {
282
289
302
308 }
309
317 myShowRails->setCheck(mySettings->showRails);
333
346 /*
347 myShowLaneChangePreference->setCheck(mySettings->drawLaneChangePreference);
348 */
355
361
366
377
381
382 myPoiDetail->setValue(mySettings->poiDetail);
389
395
399 myDither->setCheck(mySettings->dither);
400 myFPS->setCheck(mySettings->fps);
401 myTrueZ->setCheck(mySettings->trueZ);
409
412
415
416 update();
417 myParent->update();
418 return 1;
419}
420
421
422bool
423GUIDialog_ViewSettings::updateColorRanges(FXObject* sender, std::vector<FXColorWell*>::const_iterator colIt,
424 std::vector<FXColorWell*>::const_iterator colEnd,
425 std::vector<FXRealSpinner*>::const_iterator threshIt,
426 std::vector<FXRealSpinner*>::const_iterator threshEnd,
427 std::vector<FXButton*>::const_iterator buttonIt,
428 GUIColorScheme& scheme) {
429 UNUSED_PARAMETER(threshEnd);
430 int pos = 0;
431 while (colIt != colEnd) {
432 if (scheme.isFixed()) {
433 if (sender == *colIt) {
434 scheme.setColor(pos, MFXUtils::getRGBColor((*colIt)->getRGBA()));
435 }
436 } else {
437 if (sender == *threshIt) {
438 const double val = (*threshIt)->getValue();
439 scheme.setThreshold(pos, val);
440 return false;
441 }
442 if (sender == *colIt) {
443 scheme.setColor(pos, MFXUtils::getRGBColor((*colIt)->getRGBA()));
444 return false;
445 }
446 if (sender == *buttonIt) {
447 scheme.addColor(MFXUtils::getRGBColor((*colIt)->getRGBA()), (*threshIt)->getValue());
448 return true;
449 } else if (sender == *(buttonIt + 1)) {
450 scheme.removeColor(pos);
451 return true;
452 }
453 // 2 buttons per item (add / remove)
454 threshIt++;
455 buttonIt += 2;
456 }
457 ++colIt;
458 pos++;
459 }
460 return false;
461}
462
463
464bool
465GUIDialog_ViewSettings::updateScaleRanges(FXObject* sender, std::vector<FXRealSpinner*>::const_iterator scaleIt,
466 std::vector<FXRealSpinner*>::const_iterator scaleEnd,
467 std::vector<FXRealSpinner*>::const_iterator threshIt,
468 std::vector<FXRealSpinner*>::const_iterator threshEnd,
469 std::vector<FXButton*>::const_iterator buttonIt,
470 GUIScaleScheme& scheme) {
471 int pos = 0;
472 while (scaleIt != scaleEnd) {
473 if (scheme.isFixed()) {
474 if (sender == *scaleIt) {
475 scheme.setColor(pos, (*scaleIt)->getValue());
476 }
477 } else {
478 if (sender == *threshIt) {
479 const double val = (*threshIt)->getValue();
480 double lo, hi;
481 if (pos != 0) {
482 threshIt--;
483 (*threshIt)->getRange(lo, hi);
484 (*threshIt)->setRange(lo, val);
485 threshIt++;
486 }
487 threshIt++;
488 if (threshIt != threshEnd) {
489 (*threshIt)->getRange(lo, hi);
490 (*threshIt)->setRange(val, hi);
491 }
492 scheme.setThreshold(pos, val);
493 return false;
494 }
495 if (sender == *scaleIt) {
496 scheme.setColor(pos, (*scaleIt)->getValue());
497 return false;
498 }
499 if (sender == *buttonIt) {
500 scheme.addColor((*scaleIt)->getValue(), (*threshIt)->getValue());
501 return true;
502 } else if (sender == *(buttonIt + 1)) {
503 scheme.removeColor(pos);
504 return true;
505 }
506 threshIt++;
507 buttonIt += 2;
508 }
509 ++scaleIt;
510 pos++;
511 }
512 return false;
513}
514
515
516long
517GUIDialog_ViewSettings::onCmdColorChange(FXObject* sender, FXSelector, void* /*val*/) {
519 tmpSettings.copy(*mySettings);
520 int prevLaneMode = mySettings->getLaneEdgeMode();
521 int prevLaneScaleMode = mySettings->getLaneEdgeScaleMode();
522 int prevVehicleMode = mySettings->vehicleColorer.getActive();
523 int prevVehicleScaleMode = mySettings->vehicleScaler.getActive();
524 int prevPersonMode = mySettings->personColorer.getActive();
525 int prevContainerMode = mySettings->containerColorer.getActive();
526 int prevJunctionMode = mySettings->junctionColorer.getActive();
527 int prevPOIMode = mySettings->poiColorer.getActive();
528 int prevPolyMode = mySettings->polyColorer.getActive();
529 int prevDataMode = mySettings->dataColorer.getActive();
530 bool doRebuildColorMatrices = false;
531
532 tmpSettings.name = mySettings->name;
534
535 // additionals
544 if (mySettings->netedit) {
555
556 tmpSettings.widthSettings.tripWidth = myTripWidth->getValue();
557 tmpSettings.widthSettings.personTripWidth = myPersonTripWidth->getValue();
558 tmpSettings.widthSettings.walkWidth = myWalkWidth->getValue();
559 tmpSettings.widthSettings.rideWidth = myRideWidth->getValue();
560 tmpSettings.widthSettings.transportWidth = myTransportWidth->getValue();
561 tmpSettings.widthSettings.transhipWidth = myTranshipWidth->getValue();
562
575 }
576
577 tmpSettings.showGrid = (myShowGrid->getCheck() != FALSE);
578 tmpSettings.gridXSize = (double) myGridXSizeDialer->getValue();
579 tmpSettings.gridYSize = (double) myGridYSizeDialer->getValue();
580
584 } else {
587 }
588 tmpSettings.laneShowBorders = (myShowLaneBorders->getCheck() != FALSE);
589 tmpSettings.showBikeMarkings = (myShowBikeMarkings->getCheck() != FALSE);
590 tmpSettings.showLinkDecals = (myShowLaneDecals->getCheck() != FALSE);
591 tmpSettings.realisticLinkRules = (myRealisticLinkRules->getCheck() != FALSE);
592 tmpSettings.showLinkRules = (myShowLinkRules->getCheck() != FALSE);
593 tmpSettings.showRails = (myShowRails->getCheck() != FALSE);
594 tmpSettings.secondaryShape = (mySecondaryShape->getCheck() != FALSE);
595 tmpSettings.edgeName = myEdgeNamePanel->getSettings();
599 tmpSettings.edgeValue = myEdgeValuePanel->getSettings();
601 tmpSettings.hideConnectors = (myHideMacroConnectors->getCheck() != FALSE);
602 tmpSettings.showLaneDirection = (myShowLaneDirection->getCheck() != FALSE);
603 tmpSettings.showSublanes = (myShowSublanes->getCheck() != FALSE);
604 tmpSettings.spreadSuperposed = (mySpreadSuperposed->getCheck() != FALSE);
605 tmpSettings.disableHideByZoom = (myDisableHideByZoom->getCheck() != FALSE);
606 if (sender == myParamKey) {
608 tmpSettings.edgeParam = myParamKey->getText().text();
610 tmpSettings.laneParam = myParamKey->getText().text();
612 tmpSettings.edgeData = myParamKey->getText().text();
614 tmpSettings.edgeData = myParamKey->getText().text();
615 }
616 } else if (sender == myScalingParamKey) {
618 tmpSettings.edgeDataScaling = myScalingParamKey->getText().text();
619 }
620 } else if (sender == myVehicleParamKey) {
622 tmpSettings.vehicleParam = myVehicleParamKey->getText().text();
623 }
624 } else if (sender == myVehicleScalingParamKey) {
626 tmpSettings.vehicleScaleParam = myVehicleScalingParamKey->getText().text();
627 }
628 } else if (sender == myDataParamKey) {
630 tmpSettings.relDataAttr = myDataParamKey->getText().text();
631 }
632 } else if (sender == myVehicleTextPanel->myCheck) {
634 } else if (sender == myVehicleTextParamKey) {
635 tmpSettings.vehicleTextParam = myVehicleTextParamKey->getText().text();
636 } else if (sender == myPOITextPanel->myCheck) {
638 } else if (sender == myPOITextParamKey) {
639 tmpSettings.poiTextParam = myPOITextParamKey->getText().text();
640 } else if (sender == myMeanDataID) {
641 tmpSettings.edgeDataID = myMeanDataID->getText().text();
642 }
644 tmpSettings.laneWidthExaggeration = myLaneWidthUpscaleDialer->getValue();
645 tmpSettings.laneMinSize = myLaneMinWidthDialer->getValue();
646
650 tmpSettings.showBlinker = (myShowBlinker->getCheck() != FALSE);
651 tmpSettings.drawMinGap = (myShowMinGap->getCheck() != FALSE);
652 tmpSettings.drawBrakeGap = (myShowBrakeGap->getCheck() != FALSE);
653 tmpSettings.showBTRange = (myShowBTRange->getCheck() != FALSE);
654 tmpSettings.showRouteIndex = (myShowRouteIndex->getCheck() != FALSE);
655 tmpSettings.scaleLength = (myScaleLength->getCheck() != FALSE);
656 tmpSettings.drawReversed = (myDrawReversed->getCheck() != FALSE);
657 tmpSettings.showParkingInfo = (myShowParkingInfo->getCheck() != FALSE);
658 tmpSettings.showChargingInfo = (myShowChargingInfo->getCheck() != FALSE);
659 /*
660 tmpSettings.drawLaneChangePreference = (myShowLaneChangePreference->getCheck() != FALSE);
661 */
668
674
679
690
691 tmpSettings.addName = myAddNamePanel->getSettings();
693 tmpSettings.addSize = myAddSizePanel->getSettings();
694
696 tmpSettings.poiDetail = myPoiDetail->getValue();
697 tmpSettings.poiName = myPOINamePanel->getSettings();
698 tmpSettings.poiType = myPOITypePanel->getSettings();
699 tmpSettings.poiText = myPOITextPanel->getSettings();
700 tmpSettings.poiSize = myPOISizePanel->getSettings();
701 tmpSettings.poiUseCustomLayer = myPOIUseCustomLayer->getCheck() != FALSE;
702 tmpSettings.poiCustomLayer = myPOICustomLayer->getValue();
703
705 tmpSettings.polyName = myPolyNamePanel->getSettings();
706 tmpSettings.polyType = myPolyTypePanel->getSettings();
707 tmpSettings.polySize = myPolySizePanel->getSettings();
708 tmpSettings.polyUseCustomLayer = myPolyUseCustomLayer->getCheck() != FALSE;
709 tmpSettings.polyCustomLayer = myPolyCustomLayer->getValue();
710
711 if (mySettings->netedit) {
712 tmpSettings.dataValue = myDataValuePanel->getSettings();
714 tmpSettings.dataValue = myDataValuePanel->getSettings();
715 tmpSettings.tazRelWidthExaggeration = myTazRelationUpscaleDialer->getValue();
718 }
719
720 tmpSettings.showLane2Lane = (myShowLane2Lane->getCheck() != FALSE);
721 tmpSettings.drawJunctionShape = (myDrawJunctionShape->getCheck() != FALSE);
722 tmpSettings.drawCrossingsAndWalkingareas = (myDrawCrossingsAndWalkingAreas->getCheck() != FALSE);
723 tmpSettings.dither = (myDither->getCheck() != FALSE);
724 tmpSettings.fps = (myFPS->getCheck() != FALSE);
725 tmpSettings.trueZ = (myTrueZ->getCheck() != FALSE);
726 tmpSettings.drawBoundaries = (myDrawBoundaries->getCheck() != FALSE);
727 tmpSettings.forceDrawForRectangleSelection = (myForceDrawForRectangleSelection->getCheck() != FALSE);
728 tmpSettings.disableDottedContours = (myDisableDottedContours->getCheck() != FALSE);
730 tmpSettings.showSizeLegend = (myShowSizeLegend->getCheck() != FALSE);
731 tmpSettings.showColorLegend = (myShowColorLegend->getCheck() != FALSE);
732 tmpSettings.showVehicleColorLegend = (myShowVehicleColorLegend->getCheck() != FALSE);
733 tmpSettings.ignoreColorSchemeFor3DVehicles = (myIgnoreColorSchemeFor3DVehicles->getCheck() != FALSE);
734 tmpSettings.show3DTLSDomes = (myShow3DTLSDomes->getCheck() != FALSE);
735 tmpSettings.show3DTLSLinkMarkers = (myShow3DTLSLinkMarkers->getCheck() != FALSE);
736 tmpSettings.show3DHeadUpDisplay = (myShow3DHeadUpDisplay->getCheck() != FALSE);
737 tmpSettings.generate3DTLSModels = (myGenerate3DTLSModels->getCheck() != FALSE);
738 const unsigned char lightFactor = (unsigned char)myLight3DFactor->getValue();
739 tmpSettings.ambient3DLight.set(lightFactor / 2, lightFactor / 2, lightFactor / 2, 255);
740 tmpSettings.diffuse3DLight.set(lightFactor, lightFactor, lightFactor, 255);
741 tmpSettings.skyColor = MFXUtils::getRGBColor(mySkyColor->getRGBA());
742
743 // lanes (colors)
744 if (sender == myEdgeRainbowPanel->myColorRainbow) {
746 doRebuildColorMatrices = true;
747 } else if (sender == myJunctionRainbowPanel->myColorRainbow) {
749 doRebuildColorMatrices = true;
750 } else if (sender == myVehicleRainbowPanel->myColorRainbow) {
752 doRebuildColorMatrices = true;
753 } else if (myDataRainbowPanel && sender == myDataRainbowPanel->myColorRainbow) {
755 doRebuildColorMatrices = true;
756 }
757 if (tmpSettings.getLaneEdgeMode() == prevLaneMode) {
758 if (updateColorRanges(sender, myLaneColors.begin(), myLaneColors.end(),
759 myLaneThresholds.begin(), myLaneThresholds.end(), myLaneButtons.begin(),
760 tmpSettings.getLaneEdgeScheme())) {
761 doRebuildColorMatrices = true;
762 }
763 if (sender == myLaneColorInterpolation) {
764 tmpSettings.getLaneEdgeScheme().setInterpolated(myLaneColorInterpolation->getCheck() != FALSE);
765 doRebuildColorMatrices = true;
766 }
767 } else {
768 doRebuildColorMatrices = true;
769 }
770 // lanes (scaling)
771 if (tmpSettings.getLaneEdgeScaleMode() == prevLaneScaleMode) {
772 if (updateScaleRanges(sender, myLaneScales.begin(), myLaneScales.end(),
774 tmpSettings.getLaneEdgeScaleScheme())) {
775 doRebuildColorMatrices = true;
776 }
777 if (sender == myLaneScaleInterpolation) {
778 tmpSettings.getLaneEdgeScaleScheme().setInterpolated(myLaneScaleInterpolation->getCheck() != FALSE);
779 doRebuildColorMatrices = true;
780 }
781 } else {
782 doRebuildColorMatrices = true;
783 }
784 // vehicles
785 if (tmpSettings.vehicleColorer.getActive() == prevVehicleMode) {
786 if (updateColorRanges(sender, myVehicleColors.begin(), myVehicleColors.end(),
788 tmpSettings.vehicleColorer.getScheme())) {
789 doRebuildColorMatrices = true;
790 }
791 if (sender == myVehicleColorInterpolation) {
792 tmpSettings.vehicleColorer.getScheme().setInterpolated(myVehicleColorInterpolation->getCheck() != FALSE);
793 doRebuildColorMatrices = true;
794 }
795 } else {
796 doRebuildColorMatrices = true;
797 }
798 // vehicles (scaling)
799 if (tmpSettings.vehicleScaler.getActive() == prevVehicleScaleMode) {
800 if (updateScaleRanges(sender, myVehicleScales.begin(), myVehicleScales.end(),
802 tmpSettings.vehicleScaler.getScheme())) {
803 doRebuildColorMatrices = true;
804 }
805 if (sender == myVehicleScaleInterpolation) {
806 tmpSettings.vehicleScaler.getScheme().setInterpolated(myVehicleScaleInterpolation->getCheck() != FALSE);
807 doRebuildColorMatrices = true;
808 }
809 } else {
810 doRebuildColorMatrices = true;
811 }
812 // persons
813 if (tmpSettings.personColorer.getActive() == prevPersonMode) {
814 if (updateColorRanges(sender, myPersonColors.begin(), myPersonColors.end(),
816 tmpSettings.personColorer.getScheme())) {
817 doRebuildColorMatrices = true;
818 }
819 if (sender == myPersonColorInterpolation) {
820 tmpSettings.personColorer.getScheme().setInterpolated(myPersonColorInterpolation->getCheck() != FALSE);
821 doRebuildColorMatrices = true;
822 }
823 } else {
824 doRebuildColorMatrices = true;
825 }
826 // containers
827 if (tmpSettings.containerColorer.getActive() == prevContainerMode) {
828 if (updateColorRanges(sender, myContainerColors.begin(), myContainerColors.end(),
830 tmpSettings.containerColorer.getScheme())) {
831 doRebuildColorMatrices = true;
832 }
833 if (sender == myContainerColorInterpolation) {
835 doRebuildColorMatrices = true;
836 }
837 } else {
838 doRebuildColorMatrices = true;
839 }
840 // junctions
841 if (tmpSettings.junctionColorer.getActive() == prevJunctionMode) {
842 if (updateColorRanges(sender, myJunctionColors.begin(), myJunctionColors.end(),
844 tmpSettings.junctionColorer.getScheme())) {
845 doRebuildColorMatrices = true;
846 }
847 if (sender == myJunctionColorInterpolation) {
848 tmpSettings.junctionColorer.getScheme().setInterpolated(myJunctionColorInterpolation->getCheck() != FALSE);
849 doRebuildColorMatrices = true;
850 }
851 } else {
852 doRebuildColorMatrices = true;
853 }
854 // POIs
855 if (tmpSettings.poiColorer.getActive() == prevPOIMode) {
856 if (updateColorRanges(sender, myPOIColors.begin(), myPOIColors.end(),
857 myPOIThresholds.begin(), myPOIThresholds.end(), myPOIButtons.begin(),
858 tmpSettings.poiColorer.getScheme())) {
859 doRebuildColorMatrices = true;
860 }
861 if (sender == myPOIColorInterpolation) {
862 tmpSettings.poiColorer.getScheme().setInterpolated(myPOIColorInterpolation->getCheck() != FALSE);
863 doRebuildColorMatrices = true;
864 }
865 } else {
866 doRebuildColorMatrices = true;
867 }
868 // polygons
869 if (tmpSettings.polyColorer.getActive() == prevPolyMode) {
870 if (updateColorRanges(sender, myPolyColors.begin(), myPolyColors.end(),
871 myPolyThresholds.begin(), myPolyThresholds.end(), myPolyButtons.begin(),
872 tmpSettings.polyColorer.getScheme())) {
873 doRebuildColorMatrices = true;
874 }
875 if (sender == myPolyColorInterpolation) {
876 tmpSettings.polyColorer.getScheme().setInterpolated(myPolyColorInterpolation->getCheck() != FALSE);
877 doRebuildColorMatrices = true;
878 }
879 } else {
880 doRebuildColorMatrices = true;
881 }
882 // data
883 if (tmpSettings.netedit) {
884 if (tmpSettings.dataColorer.getActive() == prevDataMode) {
885 if (updateColorRanges(sender, myDataColors.begin(), myDataColors.end(),
886 myDataThresholds.begin(), myDataThresholds.end(), myDataButtons.begin(),
887 tmpSettings.dataColorer.getScheme())) {
888 doRebuildColorMatrices = true;
889 }
890 if (sender == myDataColorInterpolation) {
891 tmpSettings.dataColorer.getScheme().setInterpolated(myDataColorInterpolation->getCheck() != FALSE);
892 doRebuildColorMatrices = true;
893 }
894 } else {
895 doRebuildColorMatrices = true;
896 }
897 }
898 // openGL
899 if (sender == myRecalculateBoundaries) {
901 }
902
903 if (sender == myShowPedestrianNetwork) {
904 tmpSettings.showPedestrianNetwork = (myShowPedestrianNetwork->getCheck() != FALSE);
905 myParent->drawPedestrianNetwork(tmpSettings);
906 }
907
908 if (sender == myPedestrianNetworkColor) {
911 }
912
913 if (tmpSettings == *mySettings) {
914 return 1;
915 }
916
917 int index = mySchemeName->getCurrentItem();
918 if (index < (int) gSchemeStorage.getNumInitialSettings()) {
919 // one of the initial settings is modified
920 // every time this happens we create a new scheme
921 int suffix = 1;
922 while (gSchemeStorage.contains("custom_" + toString(suffix))) {
923 suffix++;
924 }
925 tmpSettings.name = "custom_" + toString(suffix);
926 // the newly created settings must be entered in several places:
927 // - the comboBox mySchemeName of this dialog
928 // - the comboBox of the parent view (set as active)
929 // - the comboBox of all other views (only append) XXX @todo
930 index = mySchemeName->appendIconItem(tmpSettings.name.c_str());
932 myParent->getColoringSchemesCombo()->appendIconItem(tmpSettings.name.c_str());
933 }
935 myParent->getColoringSchemesCombo()->findItem(tmpSettings.name.c_str()));
936 gSchemeStorage.add(tmpSettings); // overwrites existing
937 mySettings = &gSchemeStorage.get(tmpSettings.name);
938 myParent->setColorScheme(tmpSettings.name);
939
940 if (doRebuildColorMatrices) {
942 }
943 myParent->handle(this, FXSEL(SEL_CHANGED, MID_SIMPLE_VIEW_COLORCHANGE), nullptr);
944 myParent->forceRefresh();
945 getApp()->forceRefresh();
946 return 1;
947}
948
949
950void
951GUIDialog_ViewSettings::loadSettings(const std::string& file) {
952 GUISettingsHandler handler(file, true, mySettings->netedit);
953 for (std::string settingsName : handler.addSettings(myParent)) {
954 FXint index = mySchemeName->appendIconItem(settingsName.c_str());
956 mySettings = &gSchemeStorage.get(settingsName);
957 }
958 if (handler.hasDecals()) {
960 myParent->getDecals() = handler.getDecals();
962 myParent->update();
963 myParent->getDecalsLockMutex().unlock();
964 }
965 if (handler.getDelay() >= 0) {
966 myParent->setDelay(handler.getDelay());
967 }
968 if (handler.getBreakpoints().size() > 0) {
970 }
971 handler.applyViewport(myParent);
973}
974
975
976void
978 for (const auto& decal : myParent->getDecals()) {
979 // only save decals with non empty filename
980 if (decal.filename.size() > 0) {
981 // check if decal is a light
982 const bool isLight = (decal.filename.substr(0, 5) == "light") && (decal.filename.length() == 6) && isdigit(decal.filename[5]);
983 if (isLight) {
985 dev.writeAttr(SUMO_ATTR_INDEX, decal.filename.substr(5, 1));
986 } else {
988 dev.writeAttr("file", decal.filename);
989 dev.writeAttr("screenRelative", decal.screenRelative);
990 }
991 dev.writeAttr(SUMO_ATTR_CENTER_X, decal.centerX);
992 dev.writeAttr(SUMO_ATTR_CENTER_Y, decal.centerY);
993 dev.writeAttr(SUMO_ATTR_CENTER_Z, decal.centerZ);
994 dev.writeAttr(SUMO_ATTR_WIDTH, decal.width);
995 dev.writeAttr(SUMO_ATTR_HEIGHT, decal.height);
996 dev.writeAttr("altitude", decal.altitude);
997 dev.writeAttr("rotation", decal.rot);
998 dev.writeAttr("tilt", decal.tilt);
999 dev.writeAttr("roll", decal.roll);
1000 dev.writeAttr(SUMO_ATTR_LAYER, decal.layer);
1001 dev.closeTag();
1002 }
1003 }
1004}
1005
1006
1007void
1008GUIDialog_ViewSettings::loadDecals(const std::string& file) {
1009 myParent->getDecalsLockMutex().lock();
1010 GUISettingsHandler handler(file);
1011 if (handler.hasDecals()) {
1012 myParent->getDecals() = handler.getDecals();
1013 }
1015 myParent->update();
1016 myParent->getDecalsLockMutex().unlock();
1017}
1018
1019
1020long
1021GUIDialog_ViewSettings::onCmdSaveSetting(FXObject*, FXSelector, void* /*data*/) {
1022 int index = mySchemeName->getCurrentItem();
1023 if (index < (int) gSchemeStorage.getNumInitialSettings()) {
1024 return 1;
1025 }
1026 // get the name
1027 std::string name = "";
1028 while (name.length() == 0) {
1029 FXDialogBox dialog(this, TL("Enter a name"), GUIDesignViewSettingsDialog);
1030 FXVerticalFrame* content = new FXVerticalFrame(&dialog, GUIDesignViewSettingsVerticalFrame5);
1031 new FXLabel(content, TL("Please enter an alphanumeric name: "), nullptr, GUIDesignViewSettingsLabel2);
1032 FXTextField* text = new FXTextField(content, 40, &dialog, FXDialogBox::ID_ACCEPT, GUIDesignViewSettingsTextField1);
1033 new FXHorizontalSeparator(content, GUIDesignHorizontalSeparator);
1034 FXHorizontalFrame* buttons = new FXHorizontalFrame(content, GUIDesignViewSettingsHorizontalFrame3);
1035 GUIDesigns::buildFXButton(buttons, TL("&OK"), "", "", nullptr, &dialog, FXDialogBox::ID_ACCEPT, GUIDesignViewSettingsButton4);
1036 GUIDesigns::buildFXButton(buttons, TL("&Cancel"), "", "", nullptr, &dialog, FXDialogBox::ID_CANCEL, GUIDesignViewSettingsButton5);
1037 dialog.create();
1038 text->setFocus();
1039 if (!dialog.execute()) {
1040 return 1;
1041 }
1042 name = text->getText().text();
1043 for (int i = 0; i < (int)name.length(); ++i) {
1044 if (name[i] != '_' && (name[i] < 'a' || name[i] > 'z') && (name[i] < 'A' || name[i] > 'Z') && (name[i] < '0' || name[i] > '9')) {
1045 name = "";
1046 break;
1047 }
1048 }
1049 }
1051 tmpSettings.copy(*mySettings);
1052 tmpSettings.name = name;
1053 if (name == mySettings->name || StringUtils::startsWith(mySettings->name, "custom_")) {
1055 myParent->getColoringSchemesCombo()->insertIconItem(index, name.c_str());
1056 } else {
1058 index = mySchemeName->appendIconItem(name.c_str());
1061 myParent->getColoringSchemesCombo()->findItem(name.c_str()));
1062 }
1063 gSchemeStorage.add(tmpSettings);
1064 mySchemeName->insertIconItem(index, name.c_str());
1065 myParent->setColorScheme(name);
1066 mySettings = &gSchemeStorage.get(name);
1068 gSchemeStorage.writeSettings(getApp());
1069 return 1;
1070}
1071
1072
1073long
1074GUIDialog_ViewSettings::onUpdSaveSetting(FXObject* sender, FXSelector, void* ptr) {
1075 sender->handle(this,
1077 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1078 ptr);
1079 return 1;
1080}
1081
1082
1083long
1084GUIDialog_ViewSettings::onCmdDeleteSetting(FXObject*, FXSelector, void* /*data*/) {
1085 int index = mySchemeName->getCurrentItem();
1086 if (index < (int) gSchemeStorage.getNumInitialSettings()) {
1087 return 1;
1088 }
1089 std::string name = mySchemeName->getItemText(index);
1090 gSchemeStorage.remove(name);
1091 mySchemeName->removeItem(index);
1092 onCmdNameChange(nullptr, 0, (void*) mySchemeName->getItemText(0).c_str());
1093 gSchemeStorage.writeSettings(getApp());
1094 return 1;
1095}
1096
1097
1098long
1099GUIDialog_ViewSettings::onUpdDeleteSetting(FXObject* sender, FXSelector, void* ptr) {
1100 sender->handle(this,
1102 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1103 ptr);
1104 return 1;
1105}
1106
1107
1108long
1109GUIDialog_ViewSettings::onCmdExportSetting(FXObject*, FXSelector, void* /*data*/) {
1110 FXString file = MFXUtils::getFilename2Write(this, TL("Export view settings"),
1111 SUMOXMLDefinitions::XMLFileExtensions.getMultilineString().c_str(),
1113 if (file == "") {
1114 return 1;
1115 }
1116 try {
1117 OutputDevice& dev = OutputDevice::getDevice(file.text(), false);
1119 if (myParent->is3DView()) {
1120 dev.writeAttr(SUMO_ATTR_TYPE, "osg");
1121 }
1122 mySettings->save(dev);
1123 if (mySaveViewPort->getCheck()) {
1125 }
1126 if (mySaveDelay->getCheck()) {
1129 dev.closeTag();
1130 }
1131 if (mySaveDecals->getCheck()) {
1132 saveDecals(dev);
1133 }
1134 if (!mySettings->netedit && mySaveBreakpoints->getCheck()) {
1138 dev.closeTag();
1139 }
1140 }
1141 dev.closeTag();
1142 dev.close();
1143 } catch (IOError& e) {
1144 FXMessageBox::error(this, MBOX_OK, TL("Storing failed!"), "%s", e.what());
1145 }
1146 return 1;
1147}
1148
1149
1150long
1151GUIDialog_ViewSettings::onUpdExportSetting(FXObject* sender, FXSelector, void* ptr) {
1152 sender->handle(this,
1154 && !mySaveViewPort->getCheck() && !mySaveDelay->getCheck() && !mySaveDecals->getCheck() && !mySaveBreakpoints->getCheck()) ?
1155 FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
1156 ptr);
1157 return 1;
1158}
1159
1160
1161long
1162GUIDialog_ViewSettings::onCmdImportSetting(FXObject*, FXSelector, void* /*data*/) {
1163 FXFileDialog opendialog(this, TL("Import view settings"));
1164 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::OPEN));
1165 opendialog.setSelectMode(SELECTFILE_ANY);
1166 opendialog.setPatternList(SUMOXMLDefinitions::ViewSettingsFileExtensions.getMultilineString().c_str());
1167 if (gCurrentFolder.length() != 0) {
1168 opendialog.setDirectory(gCurrentFolder);
1169 }
1170 if (opendialog.execute()) {
1171 gCurrentFolder = opendialog.getDirectory();
1172 loadSettings(opendialog.getFilename().text());
1173 }
1174 return 1;
1175}
1176
1177
1178long
1179GUIDialog_ViewSettings::onCmdLoadDecal(FXObject*, FXSelector, void* /*data*/) {
1180 FXFileDialog opendialog(this, TL("Load Decals"));
1181 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::EMPTY));
1182 opendialog.setSelectMode(SELECTFILE_ANY);
1183 opendialog.setPatternList(SUMOXMLDefinitions::ViewSettingsFileExtensions.getMultilineString().c_str());
1184 if (gCurrentFolder.length() != 0) {
1185 opendialog.setDirectory(gCurrentFolder);
1186 }
1187 if (opendialog.execute()) {
1188 gCurrentFolder = opendialog.getDirectory();
1189 loadDecals(opendialog.getFilename().text());
1190 }
1191 return 1;
1192}
1193
1194
1195long
1196GUIDialog_ViewSettings::onCmdLoadXMLDecals(FXObject*, FXSelector, void* /*data*/) {
1197 FXFileDialog opendialog(this, TL("Load Decals"));
1198 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::EMPTY));
1199 opendialog.setSelectMode(SELECTFILE_ANY);
1200 opendialog.setPatternList(SUMOXMLDefinitions::ViewSettingsFileExtensions.getMultilineString().c_str());
1201 if (gCurrentFolder.length() != 0) {
1202 opendialog.setDirectory(gCurrentFolder);
1203 }
1204 if (opendialog.execute()) {
1205 gCurrentFolder = opendialog.getDirectory();
1206 loadDecals(opendialog.getFilename().text());
1207 }
1208 return 1;
1209}
1210
1211
1212long
1213GUIDialog_ViewSettings::onCmdSaveXMLDecals(FXObject*, FXSelector, void* /*data*/) {
1214 FXString file = MFXUtils::getFilename2Write(this, TL("Save Decals"),
1215 SUMOXMLDefinitions::XMLFileExtensions.getMultilineString().c_str(),
1217 if (file == "") {
1218 return 1;
1219 }
1220 try {
1221 OutputDevice& dev = OutputDevice::getDevice(file.text());
1222 dev.openTag("decals");
1223 saveDecals(dev);
1224 dev.closeTag();
1225 dev.close();
1226 } catch (IOError& e) {
1227 FXMessageBox::error(myParent, MBOX_OK, TL("Storing failed!"), "%s", e.what());
1228 }
1229 return 1;
1230}
1231
1232
1233long
1234GUIDialog_ViewSettings::onCmdClearDecals(FXObject*, FXSelector, void* /*data*/) {
1235 // lock decals mutex
1236 myParent->getDecalsLockMutex().lock();
1237 // clear decals
1238 myParent->getDecals().clear();
1239 // update view
1240 myParent->update();
1241 // fill table again
1243 // unlock decals mutex
1244 myParent->getDecalsLockMutex().unlock();
1245 return 1;
1246}
1247
1248
1249long
1250GUIDialog_ViewSettings::onUpdImportSetting(FXObject* sender, FXSelector, void* ptr) {
1251 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), ptr);
1252 return 1;
1253}
1254
1255
1256FXMatrix*
1258 std::vector<FXColorWell*>& colors,
1259 std::vector<FXRealSpinner*>& thresholds,
1260 std::vector<FXButton*>& buttons,
1261 FXCheckButton* interpolation,
1262 GUIColorScheme& scheme) {
1264 FXMatrix* m = new FXMatrix(frame, 4, GUIDesignViewSettingsMatrix4);
1265 colors.clear();
1266 thresholds.clear();
1267 buttons.clear();
1268 const bool fixed = scheme.isFixed();
1269 std::vector<RGBColor>::const_iterator colIt = scheme.getColors().begin();
1270 std::vector<double>::const_iterator threshIt = scheme.getThresholds().begin();
1271 std::vector<std::string>::const_iterator nameIt = scheme.getNames().begin();
1272 while (colIt != scheme.getColors().end()) {
1273 colors.push_back(new FXColorWell(m, MFXUtils::getFXColor(*colIt), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell1));
1274 if (fixed) {
1275 new FXLabel(m, nameIt->c_str());
1276 new FXLabel(m, "");
1277 new FXLabel(m, "");
1278 } else {
1279 const int dialerOptions = scheme.allowsNegativeValues() ? SPIN_NOMIN : 0;
1280 FXRealSpinner* threshDialer = new FXRealSpinner(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_THICK | FRAME_SUNKEN | LAYOUT_TOP | LAYOUT_CENTER_Y | SPIN_NOMAX | dialerOptions);
1281 threshDialer->setValue(*threshIt);
1282 thresholds.push_back(threshDialer);
1283 if (*threshIt == GUIVisualizationSettings::MISSING_DATA) {
1284 threshDialer->disable();
1285 threshDialer->hide();
1286 buttons.push_back(GUIDesigns::buildFXButton(m, "", "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1287 buttons.back()->hide();
1288 buttons.push_back(GUIDesigns::buildFXButton(m, TL("No Data"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1289 buttons.back()->disable();
1290 } else {
1291 buttons.push_back(GUIDesigns::buildFXButton(m, TL("Add"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1292 buttons.push_back(GUIDesigns::buildFXButton(m, TL("Remove"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1293 }
1294 }
1295 colIt++;
1296 threshIt++;
1297 nameIt++;
1298 }
1299 interpolation->setCheck(scheme.isInterpolated());
1300 if (fixed) {
1301 interpolation->disable();
1302 } else {
1303 if (colors.size() > 1) {
1304 interpolation->enable();
1305 if (interpolation->getCheck() != FALSE) {
1306 thresholds.front()->enable();
1307 } else {
1308 thresholds.front()->disable();
1309 }
1310 } else {
1311 interpolation->disable();
1312 thresholds.front()->disable();
1313 }
1314 }
1315 return m;
1316}
1317
1318
1319FXMatrix*
1321 std::vector<FXRealSpinner*>& scales,
1322 std::vector<FXRealSpinner*>& thresholds,
1323 std::vector<FXButton*>& buttons,
1324 FXCheckButton* interpolation,
1325 GUIScaleScheme& scheme) {
1327 FXMatrix* m = new FXMatrix(frame, 4, GUIDesignViewSettingsMatrix4);
1328 scales.clear();
1329 thresholds.clear();
1330 buttons.clear();
1331 const bool fixed = scheme.isFixed();
1332 std::vector<double>::const_iterator scaleIt = scheme.getColors().begin();
1333 std::vector<double>::const_iterator threshIt = scheme.getThresholds().begin();
1334 std::vector<std::string>::const_iterator nameIt = scheme.getNames().begin();
1335 while (scaleIt != scheme.getColors().end()) {
1336 FXRealSpinner* scaleDialer = new FXRealSpinner(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_THICK | FRAME_SUNKEN | LAYOUT_TOP | LAYOUT_CENTER_Y | SPIN_NOMAX);
1337 scaleDialer->setValue(*scaleIt);
1338 scales.push_back(scaleDialer);
1339 if (fixed) {
1340 new FXLabel(m, nameIt->c_str());
1341 new FXLabel(m, "");
1342 new FXLabel(m, "");
1343 } else {
1344 const int dialerOptions = scheme.allowsNegativeValues() ? SPIN_NOMIN : 0;
1345 FXRealSpinner* threshDialer = new FXRealSpinner(m, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, FRAME_THICK | FRAME_SUNKEN | LAYOUT_TOP | LAYOUT_CENTER_Y | SPIN_NOMAX | dialerOptions);
1346 threshDialer->setValue(*threshIt);
1347 thresholds.push_back(threshDialer);
1348 if (*threshIt == GUIVisualizationSettings::MISSING_DATA) {
1349 threshDialer->disable();
1350 threshDialer->hide();
1351 buttons.push_back(GUIDesigns::buildFXButton(m, "", "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1352 buttons.back()->hide();
1353 buttons.push_back(GUIDesigns::buildFXButton(m, TL("No Data"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1354 buttons.back()->disable();
1355 } else {
1356 buttons.push_back(GUIDesigns::buildFXButton(m, TL("Add"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1357 buttons.push_back(GUIDesigns::buildFXButton(m, TL("Remove"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsButton1));
1358 }
1359 }
1360 scaleIt++;
1361 threshIt++;
1362 nameIt++;
1363 }
1364 interpolation->setCheck(scheme.isInterpolated());
1365 if (fixed) {
1366 interpolation->disable();
1367 } else {
1368 if (scales.size() > 1) {
1369 interpolation->enable();
1370 if (interpolation->getCheck() != FALSE) {
1371 thresholds.front()->enable();
1372 } else {
1373 thresholds.front()->disable();
1374 }
1375 } else {
1376 interpolation->disable();
1377 thresholds.front()->disable();
1378 }
1379 }
1380 return m;
1381}
1382
1383
1384void
1387 if (doCreate) {
1388 m->create();
1389 }
1392 } else {
1394 }
1397 } else {
1399 }
1402 } else {
1404 }
1405 std::string activeSchemeName = myLaneEdgeColorMode->getText().text();
1406 std::string activeScaleSchemeName = myLaneEdgeScaleMode->getText().text();
1407 myParamKey->clearItems();
1408 myScalingParamKey->clearItems();
1410 myMeanDataID->hide();
1412 myParamKey->appendItem(mySettings->edgeParam.c_str());
1413 for (const std::string& attr : myParent->getEdgeLaneParamKeys(true)) {
1414 if (attr != mySettings->edgeParam) {
1415 myParamKey->appendItem(attr.c_str());
1416 }
1417 }
1418 myParamKey->enable();
1419 } else if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_LANE_PARAM_NUMERICAL) {
1420 myParamKey->appendItem(mySettings->laneParam.c_str());
1421 for (const std::string& attr : myParent->getEdgeLaneParamKeys(false)) {
1422 if (attr != mySettings->laneParam) {
1423 myParamKey->appendItem(attr.c_str());
1424 }
1425 }
1426 myParamKey->enable();
1427 } else if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL) {
1428 myParamKey->appendItem(mySettings->edgeData.c_str());
1429 for (const std::string& attr : myParent->getEdgeDataAttrs()) {
1430 if (attr != mySettings->edgeData) {
1431 myParamKey->appendItem(attr.c_str());
1432 }
1433 }
1434 myParamKey->enable();
1435 } else if (activeSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_LIVE) {
1436 if (mySettings->edgeDataID != "") {
1438 }
1439 for (const std::string& attr : myParent->getMeanDataIDs()) {
1440 if (attr != mySettings->edgeDataID) {
1441 myMeanDataID->appendIconItem(attr.c_str());
1442 }
1443 }
1444 if (myMeanDataID->getNumItems() > 0) {
1445 if (mySettings->edgeDataID == "") {
1447 }
1449 myMeanDataID->show();
1450 myParamKey->appendItem(mySettings->edgeData.c_str());
1451 for (const std::string& attr : myParent->getMeanDataAttrs(mySettings->edgeDataID)) {
1452 if (attr != mySettings->edgeData) {
1453 myParamKey->appendItem(attr.c_str());
1454 }
1455 }
1456 myParamKey->enable();
1457 }
1458 } else {
1459 myParamKey->disable();
1460 }
1461
1462 if (activeScaleSchemeName == GUIVisualizationSettings::SCHEME_NAME_EDGEDATA_NUMERICAL) {
1463 myScalingParamKey->appendItem(mySettings->edgeDataScaling.c_str());
1464 for (const std::string& attr : myParent->getEdgeDataAttrs()) {
1465 if (attr != mySettings->edgeDataScaling) {
1466 myScalingParamKey->appendItem(attr.c_str());
1467 }
1468 }
1469 myScalingParamKey->enable();
1470 } else {
1471 myScalingParamKey->disable();
1472 }
1473
1474 myParamKey->setNumVisible(myParamKey->getNumItems());
1475 myScalingParamKey->setNumVisible(myScalingParamKey->getNumItems());
1476 myLaneColorSettingFrame->getParent()->recalc();
1477
1479 if (doCreate) {
1480 m->create();
1481 }
1482 myLaneScaleSettingFrame->getParent()->recalc();
1483
1485 if (doCreate) {
1486 m->create();
1487 }
1488 activeSchemeName = myVehicleColorMode->getText().text();
1491 myVehicleParamKey->enable();
1492 } else {
1493 myVehicleParamKey->disable();
1494 }
1495 myVehicleColorSettingFrame->getParent()->recalc();
1496
1498 if (doCreate) {
1499 m->create();
1500 }
1501 myVehicleScaleSettingFrame->getParent()->recalc();
1502 activeScaleSchemeName = myVehicleScaleMode->getText().text();
1503 if (activeScaleSchemeName == GUIVisualizationSettings::SCHEME_NAME_PARAM_NUMERICAL) {
1504 myVehicleScalingParamKey->enable();
1505 } else {
1506 myVehicleScalingParamKey->disable();
1507 }
1508
1509
1511 if (doCreate) {
1512 m->create();
1513 }
1514 myPersonColorSettingFrame->getParent()->recalc();
1516 if (doCreate) {
1517 m->create();
1518 }
1519 myContainerColorSettingFrame->getParent()->recalc();
1521 if (doCreate) {
1522 m->create();
1523 }
1524 myJunctionColorSettingFrame->getParent()->recalc();
1525 // POIs
1527 if (doCreate) {
1528 m->create();
1529 }
1530 myPOIColorSettingFrame->getParent()->recalc();
1531 // polygons
1533 if (doCreate) {
1534 m->create();
1535 }
1536 myPolyColorSettingFrame->getParent()->recalc();
1537
1538 // data
1539 if (mySettings->netedit) {
1541 if (doCreate) {
1542 m->create();
1543 }
1544 activeSchemeName = myDataColorMode->getText().text();
1546 myDataParamKey->clearItems();
1547 myDataParamKey->appendItem(mySettings->relDataAttr.c_str());
1548 for (const std::string& attr : myParent->getRelDataAttrs()) {
1549 if (attr != mySettings->relDataAttr) {
1550 myDataParamKey->appendItem(attr.c_str());
1551 }
1552 }
1553 myDataParamKey->enable();
1554 } else {
1555 myDataParamKey->disable();
1556 }
1557 myDataColorSettingFrame->getParent()->recalc();
1558 }
1559
1560 layout();
1561 update();
1562}
1563
1564
1565void
1567 myVehicleParamKey->clearItems();
1568 myVehicleTextParamKey->clearItems();
1569 myVehicleScalingParamKey->clearItems();
1570 myVehicleParamKey->appendItem(mySettings->vehicleParam.c_str());
1573 for (const std::string& attr : myParent->getVehicleParamKeys(false)) {
1574 myVehicleParamKey->appendItem(attr.c_str());
1575 myVehicleTextParamKey->appendItem(attr.c_str());
1576 myVehicleScalingParamKey->appendItem(attr.c_str());
1577 }
1578 myVehicleParamKey->setNumVisible(myVehicleParamKey->getNumItems());
1579 myVehicleTextParamKey->setNumVisible(myVehicleTextParamKey->getNumItems());
1580 myVehicleScalingParamKey->setNumVisible(myVehicleScalingParamKey->getNumItems());
1581}
1582
1583
1584void
1586 myPOITextParamKey->clearItems();
1587 myPOITextParamKey->appendItem(mySettings->poiTextParam.c_str());
1588 for (const std::string& attr : myParent->getPOIParamKeys()) {
1589 myPOITextParamKey->appendItem(attr.c_str());
1590 }
1591 myPOITextParamKey->setNumVisible(myPOITextParamKey->getNumItems());
1592}
1593
1594
1595std::string
1599
1600
1601void
1603 if (name.c_str() == mySchemeName->getItemText(mySchemeName->getCurrentItem())) {
1604 return;
1605 }
1606 for (int i = 0; i < mySchemeName->getNumItems(); ++i) {
1607 if (name.c_str() == mySchemeName->getItemText(i)) {
1609 onCmdNameChange(nullptr, 0, (void*)name.c_str());
1610 return;
1611 }
1612 }
1613}
1614
1615
1617 FXMatrix* parent,
1618 GUIDialog_ViewSettings* target,
1619 const std::string& title,
1620 const GUIVisualizationTextSettings& settings) {
1621 myCheck = new FXCheckButton(parent, title.c_str(), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1622 myCheck->setCheck(settings.showText);
1623 myMatrix0 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);
1624 mySelectedCheck = new FXCheckButton(myMatrix0, TL("Only for selected"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1625 mySelectedCheck->setCheck(settings.onlySelected);
1626 myConstSizeCheck = new FXCheckButton(myMatrix0, TL("constant text size"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1627 myConstSizeCheck->setCheck(settings.constSize);
1628 FXMatrix* m1 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);
1629 new FXLabel(m1, TL("Size"), nullptr, GUIDesignViewSettingsLabel1);
1630 mySizeDial = new FXRealSpinner(m1, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
1631 mySizeDial->setRange(5, 1000);
1632 mySizeDial->setValue(settings.size);
1633 FXMatrix* m2 = new FXMatrix(parent, 4, GUIDesignViewSettingsMatrix5);
1634 new FXLabel(m2, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
1636 new FXLabel(m2, TL("Background"), nullptr, GUIDesignViewSettingsLabel1);
1638}
1639
1640
1643 return GUIVisualizationTextSettings(myCheck->getCheck() != FALSE,
1644 mySizeDial->getValue(),
1645 MFXUtils::getRGBColor(myColorWell->getRGBA()),
1646 MFXUtils::getRGBColor(myBGColorWell->getRGBA()),
1647 myConstSizeCheck->getCheck() != FALSE,
1648 mySelectedCheck->getCheck() != FALSE);
1649}
1650
1651
1652void
1654 myCheck->setCheck(settings.showText);
1655 mySizeDial->setValue(settings.size);
1656 myColorWell->setRGBA(MFXUtils::getFXColor(settings.color));
1657 myBGColorWell->setRGBA(MFXUtils::getFXColor(settings.bgColor));
1658 myConstSizeCheck->setCheck(settings.constSize);
1659 mySelectedCheck->setCheck(settings.onlySelected);
1660}
1661
1662
1664 const GUIVisualizationSizeSettings& settings, GUIGlObjectType type):
1665 myDialogViewSettings(target),
1666 myType(type) {
1667 myCheck = new FXCheckButton(parent, TL("Draw with constant size when zoomed out"), this, MID_SIMPLE_VIEW_SIZECHANGE, GUIDesignCheckButtonViewSettings);
1668 myCheck->setCheck(settings.constantSize);
1669 myCheckSelected = new FXCheckButton(parent, TL("Only for selected"), this, MID_SIMPLE_VIEW_SIZECHANGE, GUIDesignCheckButtonViewSettings);
1670 myCheckSelected->setCheck(settings.constantSizeSelected);
1671 FXMatrix* m1 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);
1672 new FXLabel(m1, TL("Minimum Size"), nullptr, GUIDesignViewSettingsLabel1);
1674 myMinSizeDial->setValue(settings.minSize);
1675 FXMatrix* m2 = new FXMatrix(parent, 2, GUIDesignViewSettingsMatrix5);
1676 new FXLabel(m2, TL("Exaggerate by"), nullptr, GUIDesignViewSettingsLabel1);
1678 myExaggerateDial->setRange(0, 10000);
1679 myExaggerateDial->setValue(settings.exaggeration);
1680}
1681
1682
1686 myMinSizeDial->getValue(), myExaggerateDial->getValue(),
1687 myCheck->getCheck() != FALSE,
1688 myCheckSelected->getCheck() != FALSE);
1689}
1690
1691
1692void
1694 myCheck->setCheck(settings.constantSize);
1695 myCheckSelected->setCheck(settings.constantSizeSelected);
1696 myMinSizeDial->setValue(settings.minSize);
1697 myExaggerateDial->setValue(settings.exaggeration);
1698}
1699
1700
1701long
1702GUIDialog_ViewSettings::SizePanel::onCmdSizeChange(FXObject* obj, FXSelector sel, void* ptr) {
1703 // mark boundaries for recomputing
1705 // continue as a normal change
1706 return myDialogViewSettings->onCmdColorChange(obj, sel, ptr);
1707}
1708
1709
1711 FXComposite* parent,
1712 GUIDialog_ViewSettings* target,
1713 const GUIVisualizationRainbowSettings& settings) {
1714 FXMatrix* matrixRainbow = new FXMatrix(parent, 9, GUIDesignViewSettingsMatrix3);
1715 myColorRainbow = GUIDesigns::buildFXButton(matrixRainbow, TL("Recalibrate Rainbow"), "", "", nullptr, target, MID_SIMPLE_VIEW_COLORCHANGE,
1716 (BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT), 0, 0, 0, 0, 20, 20, 4, 4);
1717 myRainbowStyle = new MFXComboBoxIcon(matrixRainbow, 5, false, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsComboBox1);
1719 myRainbowStyle->appendIconItem(item.first.c_str());
1720 }
1721 myRainbowStyle->setCurrentItem(settings.rainbowScheme);
1722 myHideMinCheck = new FXCheckButton(matrixRainbow, TL("min"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1723 myHideMinCheck->setCheck(settings.hideMin);
1724 myMinThreshold = new FXRealSpinner(matrixRainbow, 6, target, MID_SIMPLE_VIEW_COLORCHANGE, REALSPIN_NOMIN | GUIDesignViewSettingsSpinDial2);
1725 myMinThreshold->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());
1726 myMinThreshold->setValue(settings.minThreshold);
1727 myHideMaxCheck = new FXCheckButton(matrixRainbow, TL("max"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1728 myHideMaxCheck->setCheck(settings.hideMax);
1729 myMaxThreshold = new FXRealSpinner(matrixRainbow, 6, target, MID_SIMPLE_VIEW_COLORCHANGE, REALSPIN_NOMIN | GUIDesignViewSettingsSpinDial2);
1730 myMaxThreshold->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());
1731 myMaxThreshold->setValue(settings.maxThreshold);
1732 mySetNeutral = new FXCheckButton(matrixRainbow, TL("center"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1733 mySetNeutral->setCheck(settings.setNeutral);
1734 myNeutralThreshold = new FXRealSpinner(matrixRainbow, 6, target, MID_SIMPLE_VIEW_COLORCHANGE, REALSPIN_NOMIN | GUIDesignViewSettingsSpinDial2);
1735 myNeutralThreshold->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());
1736 myNeutralThreshold->setValue(settings.neutralThreshold);
1737 myFixRange = new FXCheckButton(matrixRainbow, TL("fix range"), target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1738 myFixRange->setCheck(settings.fixRange);
1739}
1740
1741
1744 GUIVisualizationRainbowSettings res(myHideMinCheck->getCheck() != FALSE,
1745 myMinThreshold->getValue(),
1746 myHideMaxCheck->getCheck() != FALSE,
1747 myMaxThreshold->getValue(),
1748 mySetNeutral->getCheck() != FALSE,
1749 myNeutralThreshold->getValue(),
1750 myFixRange->getCheck() != FALSE,
1751 myRainbowStyle->getCurrentItem());
1752 std::string sName = myRainbowStyle->getItemText(myRainbowStyle->getCurrentItem());
1754 return res;
1755}
1756
1757
1758void
1760 myHideMinCheck->setCheck(settings.hideMin);
1761 myMinThreshold->setValue(settings.minThreshold);
1762 myHideMaxCheck->setCheck(settings.hideMax);
1763 myMaxThreshold->setValue(settings.maxThreshold);
1764 mySetNeutral->setCheck(settings.setNeutral);
1765 myNeutralThreshold->setValue(settings.neutralThreshold);
1766 myFixRange->setCheck(settings.fixRange);
1767 myRainbowStyle->setCurrentItem(settings.rainbowScheme);
1768}
1769
1770void
1771GUIDialog_ViewSettings::buildHeader(FXVerticalFrame* contentFrame) {
1772 FXHorizontalFrame* horizontalFrame = new FXHorizontalFrame(contentFrame, GUIDesignViewSettingsHorizontalFrame1);
1773 mySchemeName = new MFXComboBoxIcon(horizontalFrame, 20, true, GUIDesignComboBoxVisibleItems,
1775 for (const auto& name : gSchemeStorage.getNames()) {
1776 const int index = mySchemeName->appendIconItem(name.c_str());
1777 if (name == mySettings->name) {
1778 mySchemeName->setCurrentItem((FXint)index);
1779 }
1780 }
1781
1782 GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Save the setting to registry"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DATABASE), this, MID_SIMPLE_VIEW_SAVE, GUIDesignButtonToolbar);
1783 GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Remove the setting from registry"), GUIIconSubSys::getIcon(GUIIcon::REMOVEDB), this, MID_SIMPLE_VIEW_DELETE, GUIDesignButtonToolbar);
1784 GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Export setting to file"), GUIIconSubSys::getIcon(GUIIcon::SAVE), this, MID_SIMPLE_VIEW_EXPORT, GUIDesignButtonToolbar);
1785 GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Load setting from file"), GUIIconSubSys::getIcon(GUIIcon::OPEN), this, MID_SIMPLE_VIEW_IMPORT, GUIDesignButtonToolbar);
1786
1787 new FXVerticalSeparator(horizontalFrame);
1788 new FXLabel(horizontalFrame, TL("Export includes:"), nullptr, GUIDesignViewSettingsLabel1);
1789 mySaveViewPort = new FXCheckButton(horizontalFrame, TL("Viewport"));
1790 mySaveDelay = new FXCheckButton(horizontalFrame, TL("Delay"));
1791 mySaveDecals = new FXCheckButton(horizontalFrame, TL("Decals"));
1792 mySaveBreakpoints = new FXCheckButton(horizontalFrame, TL("Breakpoints"));
1793 if (mySettings->netedit) {
1794 mySaveBreakpoints->disable();
1795 }
1796}
1797
1798
1799void
1801 // tab for the background
1802 new FXTabItem(tabbook, TL("Background"), nullptr, GUIDesignViewSettingsTabItemBook1);
1803 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
1804 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
1805
1806 FXMatrix* matrixColor = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
1807 new FXLabel(matrixColor, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
1809
1810 FXVerticalFrame* verticalFrameDecals = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame3);
1811 new FXLabel(verticalFrameDecals, TL("Decals:"));
1812 myDecalsTable = new MFXDecalsTable(this, verticalFrameDecals);
1813 FXHorizontalFrame* horizontalFrameButtonsDecals = new FXHorizontalFrame(verticalFrameDecals, GUIDesignViewSettingsHorizontalFrame2);
1814 GUIDesigns::buildFXButton(horizontalFrameButtonsDecals, TL("&Load XML Decals"), "", "", nullptr, this, MID_SIMPLE_VIEW_LOAD_DECALS_XML, GUIDesignViewSettingsButton1);
1815 GUIDesigns::buildFXButton(horizontalFrameButtonsDecals, TL("&Save XML Decals"), "", "", nullptr, this, MID_SIMPLE_VIEW_SAVE_DECALS_XML, GUIDesignViewSettingsButton1);
1816 GUIDesigns::buildFXButton(horizontalFrameButtonsDecals, TL("&Clear Decals"), "", "", nullptr, this, MID_SIMPLE_VIEW_CLEAR_DECALS, GUIDesignViewSettingsButton1);
1817
1818 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
1819
1820 FXMatrix* matrixGrid = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);
1821 myShowGrid = new FXCheckButton(matrixGrid, TL("Toggle grid"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1822 myShowGrid->setCheck(mySettings->showGrid);
1823 new FXLabel(matrixGrid, "");
1824 FXMatrix* matrixGridX = new FXMatrix(matrixGrid, 2, GUIDesignViewSettingsMatrix2);
1825 new FXLabel(matrixGridX, TL("x-spacing"), nullptr, GUIDesignViewSettingsLabel1);
1826 myGridXSizeDialer = new FXRealSpinner(matrixGridX, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
1827 myGridXSizeDialer->setRange(1, 10000);
1829 FXMatrix* matrixGridY = new FXMatrix(matrixGrid, 2, GUIDesignViewSettingsMatrix2);
1830 new FXLabel(matrixGridY, TL("y-spacing"), nullptr, GUIDesignViewSettingsLabel1);
1831 myGridYSizeDialer = new FXRealSpinner(matrixGridY, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
1832 myGridYSizeDialer->setRange(1, 10000);
1834}
1835
1836
1837void
1839 new FXTabItem(tabbook, TL("Streets"), nullptr, GUIDesignViewSettingsTabItemBook1);
1840 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
1841 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
1842 // ... color settings
1843 FXVerticalFrame* verticalFrameColor = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame6);
1844 FXMatrix* matrixColor = new FXMatrix(verticalFrameColor, 5, GUIDesignViewSettingsMatrix3);
1845 new FXLabel(matrixColor, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
1848 myLaneColorInterpolation = new FXCheckButton(matrixColor, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1849 myLaneColorSettingFrame = new FXVerticalFrame(verticalFrameColor, GUIDesignViewSettingsVerticalFrame4);
1850 myMeanDataID = new MFXComboBoxIcon(matrixColor, 1, false, GUIDesignComboBoxVisibleItems,
1853 myMeanDataID->hide();
1854 myParamKey = new FXComboBox(matrixColor, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);
1855 myParamKey->setEditable(true);
1856 myParamKey->disable();
1857
1858 // rainbow settings
1859 myEdgeRainbowPanel = new RainbowPanel(verticalFrameColor, this, mySettings->edgeValueRainBow);
1860
1861 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
1862 // ... scale settings
1863 FXVerticalFrame* verticalFrameScale = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame6);
1864 FXMatrix* matrixScale = new FXMatrix(verticalFrameScale, 5, GUIDesignViewSettingsMatrix3);
1865 new FXLabel(matrixScale, TL("Scale width"), nullptr, GUIDesignViewSettingsLabel1);
1868 myLaneScaleInterpolation = new FXCheckButton(matrixScale, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1869 myLaneScaleSettingFrame = new FXVerticalFrame(verticalFrameScale, GUIDesignViewSettingsVerticalFrame4);
1870 myScalingParamKey = new FXComboBox(matrixScale, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);
1871 myScalingParamKey->setEditable(true);
1872 myScalingParamKey->disable();
1873
1877 } else {
1880 }
1881
1882 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
1883 FXMatrix* matrixLanes = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);
1884
1885 myShowBikeMarkings = new FXCheckButton(matrixLanes, TL("Show bike markings"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1887 myShowLaneDecals = new FXCheckButton(matrixLanes, TL("Show turning arrows"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1889
1890 myShowLinkRules = new FXCheckButton(matrixLanes, TL("Show right-of-way rules"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1892 myRealisticLinkRules = new FXCheckButton(matrixLanes, TL("Realistic stop line colors"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1894
1895 myShowLaneBorders = new FXCheckButton(matrixLanes, TL("Show lane borders"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1897 myShowLaneDirection = new FXCheckButton(matrixLanes, TL("Show lane direction"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1899
1900 myHideMacroConnectors = new FXCheckButton(matrixLanes, TL("Hide macro connectors"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1902 myShowSublanes = new FXCheckButton(matrixLanes, TL("Show sublanes"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1904
1905 myShowRails = new FXCheckButton(matrixLanes, TL("Show rails"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1906 myShowRails->setCheck(mySettings->showRails);
1907
1908 mySpreadSuperposed = new FXCheckButton(matrixLanes, TL("Spread bidirectional railways/roads"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1909 mySpreadSuperposed->setHelpText(TL("Make both directional edges for a bidirectional railways or roads visible"));
1911
1912 mySecondaryShape = new FXCheckButton(matrixLanes, TL("Secondary shape"), this, MID_SIMPLE_VIEW_COLORCHANGE);
1914 new FXLabel(matrixLanes, " ", nullptr, GUIDesignViewSettingsLabel1);
1915 if (!OptionsCont::getOptions().exists("alternative-net-file") ||
1916 !OptionsCont::getOptions().isSet("alternative-net-file")) {
1917 mySecondaryShape->disable();
1918 }
1919
1920 FXMatrix* tmp0 = new FXMatrix(matrixLanes, 2, GUIDesignViewSettingsMatrix5);
1921 new FXLabel(tmp0, TL("Exaggerate width by"), nullptr, GUIDesignViewSettingsLabel1);
1923 myLaneWidthUpscaleDialer->setRange(0, 1000000);
1925
1926 FXMatrix* tmp1 = new FXMatrix(matrixLanes, 2, GUIDesignViewSettingsMatrix5);
1927 new FXLabel(tmp1, TL("Minimum size"), nullptr, GUIDesignViewSettingsLabel1);
1929 myLaneMinWidthDialer->setRange(0, 1000000);
1931
1932 // edge name
1933 myEdgeNamePanel = new NamePanel(matrixLanes, this, TL("Show edge id"), mySettings->edgeName);
1934 myStreetNamePanel = new NamePanel(matrixLanes, this, TL("Show street name"), mySettings->streetName);
1935 myEdgeValuePanel = new NamePanel(matrixLanes, this, TL("Show edge color value"), mySettings->edgeValue);
1936 myEdgeScaleValuePanel = new NamePanel(matrixLanes, this, TL("Show edge scale value"), mySettings->edgeScaleValue);
1937}
1938
1939
1940void
1942 new FXTabItem(tabbook, TL("Vehicles"), nullptr, GUIDesignViewSettingsTabItemBook1);
1943 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
1944 FXVerticalFrame* verticalframe = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
1945
1946 FXMatrix* matrixShowAs = new FXMatrix(verticalframe, 2, GUIDesignViewSettingsMatrix3);
1947 new FXLabel(matrixShowAs, TL("Show As"), nullptr, GUIDesignViewSettingsLabel1);
1950 myVehicleShapeDetail->appendIconItem(TL("'triangles'"));
1952 myVehicleShapeDetail->appendIconItem(TL("'simple shapes'"));
1953 myVehicleShapeDetail->appendIconItem(TL("'raster images'"));
1954 myVehicleShapeDetail->appendIconItem(TL("'circles'"));
1956
1957 new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);
1958
1959 FXMatrix* matrixColor = new FXMatrix(verticalframe, 4, GUIDesignViewSettingsMatrix3);
1960 new FXLabel(matrixColor, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
1964 myVehicleColorInterpolation = new FXCheckButton(matrixColor, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1965 myVehicleParamKey = new FXComboBox(matrixColor, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);
1966 myVehicleParamKey->setEditable(true);
1967 myVehicleParamKey->disable();
1968
1969 // rainbow settings
1971
1972 myVehicleColorSettingFrame = new FXVerticalFrame(verticalframe, GUIDesignViewSettingsVerticalFrame4);
1973 new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);
1974
1975 // vehicle scale settings
1976 FXVerticalFrame* verticalFrameScale = new FXVerticalFrame(verticalframe, GUIDesignViewSettingsVerticalFrame6);
1977 FXMatrix* matrixScale = new FXMatrix(verticalFrameScale, 4, GUIDesignViewSettingsMatrix3);
1978 new FXLabel(matrixScale, TL("Scale size"), nullptr, GUIDesignViewSettingsLabel1);
1981 myVehicleScaleInterpolation = new FXCheckButton(matrixScale, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
1982 myVehicleScalingParamKey = new FXComboBox(matrixScale, 1, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignComboBoxStatic);
1983 myVehicleScalingParamKey->setEditable(true);
1984 myVehicleScalingParamKey->disable();
1985 myVehicleScaleSettingFrame = new FXVerticalFrame(verticalFrameScale, GUIDesignViewSettingsVerticalFrame4);
1987 new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);
1988
1989 FXMatrix* matrixVehicle = new FXMatrix(verticalframe, 2, GUIDesignMatrixViewSettings);
1990 myVehicleNamePanel = new NamePanel(matrixVehicle, this, TL("Show vehicle id"), mySettings->vehicleName);
1991 myVehicleValuePanel = new NamePanel(matrixVehicle, this, TL("Show vehicle color value"), mySettings->vehicleValue);
1992 myVehicleScaleValuePanel = new NamePanel(matrixVehicle, this, TL("Show vehicle scale value"), mySettings->vehicleScaleValue);
1993 myVehicleTextPanel = new NamePanel(matrixVehicle, this, TL("Show vehicle text param"), mySettings->vehicleText);
1995 myVehicleTextParamKey->setEditable(true);
1996 //new FXHorizontalSeparator(verticalframe, GUIDesignHorizontalSeparator);
1997
1998 FXMatrix* matrixShow = new FXMatrix(verticalframe, 2, GUIDesignMatrixViewSettings);
1999 myShowBlinker = new FXCheckButton(matrixShow, TL("Show blinker / brake lights"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2001 myShowMinGap = new FXCheckButton(matrixShow, TL("Show minimum gap"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2003 myShowBrakeGap = new FXCheckButton(matrixShow, TL("Show brake gap"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2005 myShowBTRange = new FXCheckButton(matrixShow, TL("Show Bluetooth range"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2007 myShowRouteIndex = new FXCheckButton(matrixShow, TL("Show route index"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2009 myScaleLength = new FXCheckButton(matrixShow, TL("Scale length with geometry"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2011 myShowParkingInfo = new FXCheckButton(matrixShow, TL("Show parking info"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2013 myShowChargingInfo = new FXCheckButton(matrixShow, TL("Show charging info"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2015 myDrawReversed = new FXCheckButton(matrixShow, TL("Draw reversed vehicles in reverse"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2017 //new FXLabel(matrixShow, " ", nullptr, GUIDesignViewSettingsLabel1);
2018 //myShowLaneChangePreference = new FXCheckButton(matrixShow, TL("Show lane change preference"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2019 //myShowLaneChangePreference->setCheck(mySettings->drawLaneChangePreference);
2020 //tmpc = new FXCheckButton(matrixShow, TL("Show needed headway"), 0 ,0);
2021 //tmpc->disable();
2022
2023 //new FXHorizontalSeparator(frame3, GUIDesignHorizontalSeparator);
2024
2025 FXMatrix* matrixSize = new FXMatrix(verticalframe, 2, GUIDesignViewSettingsMatrix1);
2027}
2028
2029
2030void
2032 new FXTabItem(tabbook, TL("Persons"), nullptr, GUIDesignViewSettingsTabItemBook1);
2033 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2034 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2035
2036 FXMatrix* m101 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix3);
2037 new FXLabel(m101, TL("Show As"), nullptr, GUIDesignViewSettingsLabel1);
2040 myPersonShapeDetail->appendIconItem(TL("'triangles'"));
2041 myPersonShapeDetail->appendIconItem(TL("'circles'"));
2042 myPersonShapeDetail->appendIconItem(TL("'simple shapes'"));
2043 myPersonShapeDetail->appendIconItem(TL("'raster images'"));
2045
2046 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2047
2048 FXMatrix* m102 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);
2049 new FXLabel(m102, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
2053 myPersonColorInterpolation = new FXCheckButton(m102, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2054
2055 myPersonColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);
2056
2057 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2058
2059 FXMatrix* m103 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2060 myPersonNamePanel = new NamePanel(m103, this, TL("Show person id"), mySettings->personName);
2061 myPersonValuePanel = new NamePanel(m103, this, TL("Show person color value"), mySettings->personValue);
2062
2063 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2064
2065 FXMatrix* m104 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);
2067
2068 FXMatrix* m105 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix3);
2069 myShowPedestrianNetwork = new FXCheckButton(m105, TL("Show JuPedSim pedestrian network"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2072#ifdef JPS_VERSION
2073 if (mySettings->netedit) {
2074#endif
2075 myShowPedestrianNetwork->disable();
2076 myPedestrianNetworkColor->disable();
2077#ifdef JPS_VERSION
2078 }
2079#endif
2080}
2081
2082
2083void
2085 new FXTabItem(tabbook, TL("Containers"), nullptr, GUIDesignViewSettingsTabItemBook1);
2086 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2087 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2088
2089 FXMatrix* m101 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix3);
2090 new FXLabel(m101, TL("Show As"), nullptr, GUIDesignViewSettingsLabel1);
2093 myContainerShapeDetail->appendIconItem(TL("'triangles'"));
2095 myContainerShapeDetail->appendIconItem(TL("'simple shapes'"));
2096 myContainerShapeDetail->appendIconItem(TL("'raster images'"));
2098
2099 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2100
2101 FXMatrix* m102 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);
2102 new FXLabel(m102, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
2106 myContainerColorInterpolation = new FXCheckButton(m102, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2107
2108 myContainerColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);
2109
2110 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2111
2112 FXMatrix* m103 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2113 myContainerNamePanel = new NamePanel(m103, this, TL("Show container id"), mySettings->containerName);
2114
2115 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2116
2117 FXMatrix* m104 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);
2119}
2120
2121
2122void
2124 new FXTabItem(tabbook, TL("Junctions"), nullptr, GUIDesignViewSettingsTabItemBook1);
2125 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2126 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2127 FXMatrix* m41 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);
2128 new FXLabel(m41, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
2133
2134 myJunctionColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);
2136
2137 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2138 FXMatrix* m42 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2140 myDrawJunctionShape = new FXCheckButton(m42, TL("Draw junction shape"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2142 myDrawCrossingsAndWalkingAreas = new FXCheckButton(m42, TL("Draw crossings/walkingareas"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2144 myShowLane2Lane = new FXCheckButton(m42, TL("Show lane to lane connections"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2146 new FXLabel(m42, " ", nullptr, GUIDesignViewSettingsLabel1);
2147
2148 myTLIndexPanel = new NamePanel(m42, this, TL("Show link tls index"), mySettings->drawLinkTLIndex);
2149 myJunctionIndexPanel = new NamePanel(m42, this, TL("Show link junction index"), mySettings->drawLinkJunctionIndex);
2150 myJunctionIDPanel = new NamePanel(m42, this, TL("Show junction id"), mySettings->junctionID);
2151 myInternalJunctionNamePanel = new NamePanel(m42, this, TL("Show internal junction id"), mySettings->internalJunctionName);
2152 myInternalEdgeNamePanel = new NamePanel(m42, this, TL("Show internal edge id"), mySettings->internalEdgeName);
2153 myCwaEdgeNamePanel = new NamePanel(m42, this, TL("Show crossing and walkingarea id"), mySettings->cwaEdgeName);
2154 myTLSPhaseIndexPanel = new NamePanel(m42, this, TL("Show traffic light phase index"), mySettings->tlsPhaseIndex);
2155 myTLSPhaseNamePanel = new NamePanel(m42, this, TL("Show traffic light phase name"), mySettings->tlsPhaseName);
2156 myJunctionNamePanel = new NamePanel(m42, this, TL("Show junction name"), mySettings->junctionName);
2157}
2158
2159
2160void
2162 new FXTabItem(tabbook, TL("Additional"), nullptr, GUIDesignViewSettingsTabItemBook1);
2163 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2164 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2165 // IDs
2166 FXMatrix* matrixIDs = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2167 myAddNamePanel = new NamePanel(matrixIDs, this, TL("Show object id"), mySettings->addName);
2168 myAddFullNamePanel = new NamePanel(matrixIDs, this, TL("Show full name"), mySettings->addFullName);
2169 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2170 //Sizes
2171 FXMatrix* matrixSizes = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2173 // color
2174 FXMatrix* matrixColor = new FXMatrix(verticalFrame, 3, GUIDesignMatrixViewSettings);
2175 new FXLabel(matrixColor, TL("StoppingPlace"), nullptr, GUIDesignViewSettingsLabel1);
2176 new FXLabel(matrixColor, TL("body"), nullptr, GUIDesignViewSettingsLabel1);
2177 new FXLabel(matrixColor, TL("sign"), nullptr, GUIDesignViewSettingsLabel1);
2178 new FXLabel(matrixColor, "busStops", nullptr, GUIDesignViewSettingsLabel1);
2181 new FXLabel(matrixColor, "trainStops", nullptr, GUIDesignViewSettingsLabel1);
2184 new FXLabel(matrixColor, "containerStops", nullptr, GUIDesignViewSettingsLabel1);
2187 new FXLabel(matrixColor, "chargingStations", nullptr, GUIDesignViewSettingsLabel1);
2190}
2191
2192
2193void
2195 new FXTabItem(tabbook, TL("Demand"), nullptr, GUIDesignViewSettingsTabItemBook1);
2196 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2197 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2198 // elements
2199 FXMatrix* demandMatrix = new FXMatrix(verticalFrame, 3, GUIDesignMatrixViewSettings);
2200 new FXLabel(demandMatrix, TL("element"), nullptr, GUIDesignViewSettingsLabel1);
2201 new FXLabel(demandMatrix, TL("color"), nullptr, GUIDesignViewSettingsLabel1);
2202 new FXLabel(demandMatrix, TL("width"), nullptr, GUIDesignViewSettingsLabel1);
2203 new FXLabel(demandMatrix, "trips", nullptr, GUIDesignViewSettingsLabel1);
2205 myTripWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2207 new FXLabel(demandMatrix, "personTrips", nullptr, GUIDesignViewSettingsLabel1);
2209 myPersonTripWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2211 new FXLabel(demandMatrix, "walks", nullptr, GUIDesignViewSettingsLabel1);
2213 myWalkWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2215 new FXLabel(demandMatrix, "rides", nullptr, GUIDesignViewSettingsLabel1);
2217 myRideWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2219 new FXLabel(demandMatrix, "transport", nullptr, GUIDesignViewSettingsLabel1);
2221 myTransportWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2223 new FXLabel(demandMatrix, "tranship", nullptr, GUIDesignViewSettingsLabel1);
2225 myTranshipWidth = new FXRealSpinner(demandMatrix, 10, target, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2227 // stops
2228 FXMatrix* stopMatrix = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2229 new FXLabel(stopMatrix, "stop", nullptr, GUIDesignViewSettingsLabel1);
2231 new FXLabel(stopMatrix, "waypoint", nullptr, GUIDesignViewSettingsLabel1);
2233 new FXLabel(stopMatrix, "stop (persons)", nullptr, GUIDesignViewSettingsLabel1);
2235 new FXLabel(stopMatrix, "stop (containers)", nullptr, GUIDesignViewSettingsLabel1);
2237}
2238
2239
2240void
2242 new FXTabItem(tabbook, TL("POIs"), nullptr, GUIDesignViewSettingsTabItemBook1);
2243 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2244 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2245
2246 FXMatrix* m63 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);
2247 new FXLabel(m63, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
2251 myPOIColorInterpolation = new FXCheckButton(m63, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2252 myPOIColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);
2253
2254 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2255
2256 FXMatrix* m61 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2257
2258 new FXLabel(m61, TL("POI detail"), nullptr, GUIDesignViewSettingsLabel1);
2260 myPoiDetail->setRange(3, 100);
2261 myPoiDetail->setValue(mySettings->poiDetail);
2262
2263 myPOIUseCustomLayer = new FXCheckButton(m61, TL("Custom Layer"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2266 myPOICustomLayer->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());
2268
2269 myPOINamePanel = new NamePanel(m61, this, TL("Show poi id"), mySettings->poiName);
2270 myPOITypePanel = new NamePanel(m61, this, TL("Show poi type"), mySettings->poiType);
2271 myPOITextPanel = new NamePanel(m61, this, TL("Show poi text param"), mySettings->poiText);
2273 myPOITextParamKey->setEditable(true);
2274
2275 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2276
2277 FXMatrix* m62 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2279}
2280
2281
2282void
2284 new FXTabItem(tabbook, TL("Polygons"), nullptr, GUIDesignViewSettingsTabItemBook1);
2285 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2286 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2287
2288 FXMatrix* m63 = new FXMatrix(verticalFrame, 3, GUIDesignViewSettingsMatrix3);
2289 new FXLabel(m63, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
2293 myPolyColorInterpolation = new FXCheckButton(m63, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2294 myPolyColorSettingFrame = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame4);
2295
2296 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2297
2298 FXMatrix* m91 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2299
2300 myPolyUseCustomLayer = new FXCheckButton(m91, TL("Custom Layer"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2303 myPolyCustomLayer->setRange(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max());
2305
2306 myPolyNamePanel = new NamePanel(m91, this, TL("Show polygon id"), mySettings->polyName);
2307 myPolyTypePanel = new NamePanel(m91, this, TL("Show polygon types"), mySettings->polyType);
2308 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2309
2311}
2312
2313
2314void
2316 new FXTabItem(tabbook, TL("Selection"), nullptr, GUIDesignViewSettingsTabItemBook1);
2317 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2318 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2319
2320 FXMatrix* m102 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2321 new FXLabel(m102, TL("Default Selection Color"), nullptr, GUIDesignViewSettingsLabel1);
2322 new FXLabel(m102, "", nullptr, GUIDesignViewSettingsLabel1);
2323
2324 new FXLabel(m102, TL("Miscellaneous"), nullptr, GUIDesignViewSettingsLabel1);
2326 new FXLabel(m102, "Edge", nullptr, GUIDesignViewSettingsLabel1);
2328 new FXLabel(m102, "Lane Edge", nullptr, GUIDesignViewSettingsLabel1);
2330 new FXLabel(m102, "Connection", nullptr, GUIDesignViewSettingsLabel1);
2332 new FXLabel(m102, "Prohibition", nullptr, GUIDesignViewSettingsLabel1);
2334 new FXLabel(m102, "Crossing", nullptr, GUIDesignViewSettingsLabel1);
2336 new FXLabel(m102, "Additional", nullptr, GUIDesignViewSettingsLabel1);
2338 new FXLabel(m102, "Route", nullptr, GUIDesignViewSettingsLabel1);
2340 new FXLabel(m102, "Vehicle", nullptr, GUIDesignViewSettingsLabel1);
2342 new FXLabel(m102, "Person", nullptr, GUIDesignViewSettingsLabel1);
2344 new FXLabel(m102, "PersonPlan", nullptr, GUIDesignViewSettingsLabel1);
2346 new FXLabel(m102, "edgeData", nullptr, GUIDesignViewSettingsLabel1);
2348}
2349
2350
2351void
2353 new FXTabItem(tabbook, TL("Data"), nullptr, GUIDesignViewSettingsTabItemBook1);
2354 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2355 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2356 // ... color settings
2357 FXVerticalFrame* verticalFrame2 = new FXVerticalFrame(verticalFrame, GUIDesignViewSettingsVerticalFrame6);
2358 FXMatrix* m111 = new FXMatrix(verticalFrame2, 4, GUIDesignViewSettingsMatrix3);
2359 new FXLabel(m111, TL("Color"), nullptr, GUIDesignViewSettingsLabel1);
2362 myDataColorInterpolation = new FXCheckButton(m111, TL("Interpolate"), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignCheckButtonViewSettings);
2363 myDataColorSettingFrame = new FXVerticalFrame(verticalFrame2, GUIDesignViewSettingsVerticalFrame4);
2365 myDataParamKey->setEditable(true);
2366 myDataParamKey->disable();
2368
2369 // rainbow settings
2370 myDataRainbowPanel = new RainbowPanel(verticalFrame2, this, mySettings->dataValueRainBow);
2371
2372 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2373 FXMatrix* m112 = new FXMatrix(verticalFrame, 2, GUIDesignViewSettingsMatrix1);
2374
2375 new FXLabel(m112, TL("Exaggerate edgeRelation width by"), nullptr, GUIDesignViewSettingsLabel1);
2377 myEdgeRelationUpscaleDialer->setRange(0, 1000000);
2379
2380 new FXLabel(m112, TL("Exaggerate tazRelation width by"), nullptr, GUIDesignViewSettingsLabel1);
2382 myTazRelationUpscaleDialer->setRange(0, 1000000);
2384
2385 // text decoration
2386 myDataValuePanel = new NamePanel(m112, this, TL("Show data color value"), mySettings->dataValue);
2387}
2388
2389
2390void
2392 new FXTabItem(tabbook, TL("Legend"), nullptr, GUIDesignViewSettingsTabItemBook1);
2393 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2394 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2395
2396 FXMatrix* m72 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2397 myShowSizeLegend = new FXCheckButton(m72, TL("Show Size Legend"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2399 new FXLabel(m72, "");
2400 myShowColorLegend = new FXCheckButton(m72, TL("Show Edge Color Legend"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2402 new FXLabel(m72, "");
2403 myShowVehicleColorLegend = new FXCheckButton(m72, TL("Show Vehicle Color Legend"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2405 new FXLabel(m72, "");
2406}
2407
2408
2409void
2411 new FXTabItem(tabbook, "openGL", nullptr, GUIDesignViewSettingsTabItemBook1);
2412 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2413 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2414
2415 FXMatrix* m80 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2416 myTrueZ = new FXCheckButton(m80, "Draw all objects at their true Z-level", this, MID_SIMPLE_VIEW_COLORCHANGE);
2417 myTrueZ->setCheck(mySettings->trueZ);
2418 FXMatrix* m81 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2419 new FXLabel(m81, TL("Combobox max rows"), nullptr, GUIDesignViewSettingsLabel1);
2420 myComboRows = new FXRealSpinner(m81, 10, this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsSpinDial1);
2422 FXMatrix* m82 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2423 myDisableHideByZoom = new FXCheckButton(m82, TL("Disable hide by zoom"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2424 myDisableHideByZoom->setHelpText(TL("Disable hiding edges with high zoom out"));
2426 FXMatrix* m83 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2427 myDither = new FXCheckButton(m83, TL("Dither"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2428 myDither->setCheck(mySettings->dither);
2429 FXMatrix* m84 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2430 myFPS = new FXCheckButton(m84, "FPS", this, MID_SIMPLE_VIEW_COLORCHANGE);
2431 myFPS->setCheck(mySettings->fps);
2432 FXMatrix* m85 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2433 myDrawBoundaries = new FXCheckButton(m85, TL("Draw boundaries"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2435 FXMatrix* m86 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2436 myForceDrawForRectangleSelection = new FXCheckButton(m86, TL("Force draw for rectangle selection"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2438 FXMatrix* m87 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2439 myDisableDottedContours = new FXCheckButton(m87, TL("Disable dotted contours during selection/deletion"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2441 FXMatrix* m88 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2442 myRecalculateBoundaries = GUIDesigns::buildFXButton(m88, TL("Recalculate boundaries"), "", "", nullptr, this, MID_SIMPLE_VIEW_COLORCHANGE,
2443 (BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT), 0, 0, 0, 0, 20, 20, 4, 4);
2444 FXMatrix* m89 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2445 myGeometryIndicesPanel = new NamePanel(m89, this, TL("Show geometry point indices"), mySettings->geometryIndices);
2446}
2447
2448
2449void
2451 myFrame3D = new FXTabItem(tabbook, TL("3D view"), nullptr, GUIDesignViewSettingsTabItemBook1);
2452 FXScrollWindow* scrollWindow = new FXScrollWindow(tabbook);
2453 FXVerticalFrame* verticalFrame = new FXVerticalFrame(scrollWindow, GUIDesignViewSettingsVerticalFrame2);
2454
2455 FXMatrix* m82 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2456 myIgnoreColorSchemeFor3DVehicles = new FXCheckButton(m82, TL("Ignore color scheme for vehicles"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2458 myShow3DTLSLinkMarkers = new FXCheckButton(m82, TL("Show TLS link markers"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2460 //FXMatrix* m83 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2461 myShow3DTLSDomes = new FXCheckButton(m82, TL("Show domes around TLS models from decals"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2463 //FXMatrix* m84 = new FXMatrix(verticalFrame, 1, GUIDesignMatrixViewSettings);
2464 myGenerate3DTLSModels = new FXCheckButton(m82, TL("Show auto-generated TLS models"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2466 myShow3DHeadUpDisplay = new FXCheckButton(m82, TL("Show head-up display"), this, MID_SIMPLE_VIEW_COLORCHANGE);
2468
2469 new FXHorizontalSeparator(verticalFrame, GUIDesignHorizontalSeparator);
2470
2471 FXMatrix* m2 = new FXMatrix(verticalFrame, 2, GUIDesignMatrixViewSettings);
2472 new FXLabel(m2, TL("Sun brightness"), nullptr, GUIDesignViewSettingsLabel1);
2474 myLight3DFactor->setRange(0, 255);
2476 /*
2477 new FXLabel(m2, "Ambient", nullptr, GUIDesignViewSettingsLabel1);
2478 myAmbient3DLight = new FXColorWell(m2, MFXUtils::getFXColor(mySettings->ambient3DLight), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);
2479 myAmbient3DLight->setOpaqueOnly(true);
2480 new FXLabel(m2, "Diffuse", nullptr, GUIDesignViewSettingsLabel1);
2481 myDiffuse3DLight = new FXColorWell(m2, MFXUtils::getFXColor(mySettings->diffuse3DLight), this, MID_SIMPLE_VIEW_COLORCHANGE, GUIDesignViewSettingsColorWell);
2482 myDiffuse3DLight->setOpaqueOnly(true);
2483 */
2484 new FXLabel(m2, TL("Sky color"), nullptr, GUIDesignViewSettingsLabel1);
2486 mySkyColor->setOpaqueOnly(true);
2487
2488#ifdef HAVE_OSG
2490#else
2491 myFrame3D->disable();
2492#endif
2493}
2494
2495
2496void
2497GUIDialog_ViewSettings::buildButtons(FXVerticalFrame* contentFrame) {
2498 FXHorizontalFrame* horizontalFrameButtons = new FXHorizontalFrame(contentFrame, GUIDesignViewSettingsHorizontalFrame2);
2499 FXButton* OK = GUIDesigns::buildFXButton(horizontalFrameButtons, TL("&OK"), "", "", nullptr, this, MID_SETTINGS_OK, GUIDesignViewSettingsButton2);
2500 GUIDesigns::buildFXButton(horizontalFrameButtons, TL("&Cancel"), "", "", nullptr, this, MID_SETTINGS_CANCEL, GUIDesignViewSettingsButton3);
2501 OK->setFocus();
2502}
2503
2504/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
@ MID_SIMPLE_VIEW_NAMECHANGE
Informs the dialog about switching to another scheme.
Definition GUIAppEnum.h:631
@ MID_SIMPLE_VIEW_CLEAR_DECALS
For the clear-decals - button.
Definition GUIAppEnum.h:647
@ MID_SIMPLE_VIEW_SAVE
For the save-to-db - button.
Definition GUIAppEnum.h:633
@ MID_SIMPLE_VIEW_IMPORT
For the import-from-file - button.
Definition GUIAppEnum.h:639
@ MID_SIMPLE_VIEW_EXPORT
For the export-to-file - button.
Definition GUIAppEnum.h:637
@ MID_SIMPLE_VIEW_DELETE
For the delete - button.
Definition GUIAppEnum.h:635
@ MID_SIMPLE_VIEW_LOAD_DECALS_XML
For the load-decals - button.
Definition GUIAppEnum.h:643
@ MID_SIMPLE_VIEW_LOAD_DECAL
For the load-decals - button.
Definition GUIAppEnum.h:641
@ MID_SETTINGS_OK
Ok-button was pushed.
Definition GUIAppEnum.h:551
@ MID_SETTINGS_CANCEL
Cancel-button was pushed.
Definition GUIAppEnum.h:553
@ MID_SIMPLE_VIEW_SIZECHANGE
Informs the dialog about a size value's change.
Definition GUIAppEnum.h:629
@ MID_SIMPLE_VIEW_COLORCHANGE
Informs the dialog about a value's change.
Definition GUIAppEnum.h:627
@ MID_SIMPLE_VIEW_SAVE_DECALS_XML
For the save-decals - button.
Definition GUIAppEnum.h:645
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignViewSettingsColorWell2
Definition GUIDesigns.h:585
#define GUIDesignViewSettingsMatrix3
Definition GUIDesigns.h:542
#define GUIDesignViewSettingsMainDialog
Definition GUIDesigns.h:513
#define GUIDesignViewSettingsMatrix5
Definition GUIDesigns.h:546
#define GUIDesignComboBoxStatic
Combo box static (not editable)
Definition GUIDesigns.h:296
#define GUIDesignViewSettingsComboBox1
Combo boxes.
Definition GUIDesigns.h:549
#define GUIDesignComboBoxWidth100
comboBox with thick frame, width 100
Definition GUIDesigns.h:308
#define GUIDesignViewSettingsHorizontalFrame3
Definition GUIDesigns.h:535
#define GUIDesignViewSettingsVerticalFrame6
Definition GUIDesigns.h:528
#define GUIDesignViewSettingsHorizontalFrame2
Definition GUIDesigns.h:533
#define GUIDesignViewSettingsButton2
Definition GUIDesigns.h:574
#define GUIDesignButtonToolbar
little button with icon placed in navigation toolbar
Definition GUIDesigns.h:123
#define GUIDesignViewSettingsMatrix1
Matrix.
Definition GUIDesigns.h:538
#define GUIDesignViewSettingsColorWell1
Color wells.
Definition GUIDesigns.h:583
#define GUIDesignViewSettingsButton4
Definition GUIDesigns.h:578
#define GUIDesignViewSettingsDialog
Definition GUIDesigns.h:515
#define GUIDesignViewSettingsMatrix4
Definition GUIDesigns.h:544
#define GUIDesignViewSettingsSpinDial2
Definition GUIDesigns.h:556
#define GUIDesignViewSettingsButton5
Definition GUIDesigns.h:580
#define GUIDesignViewSettingsHorizontalFrame1
Horizontal frames.
Definition GUIDesigns.h:531
#define GUIDesignViewSettingsSpinDial1
Definition GUIDesigns.h:554
#define GUIDesignViewSettingsVerticalFrame5
Definition GUIDesigns.h:526
#define GUIDesignViewSettingsMatrix2
Definition GUIDesigns.h:540
#define GUIDesignViewSettingsLabel1
Label.
Definition GUIDesigns.h:564
#define GUIDesignComboBoxVisibleItems
Definition GUIDesigns.h:49
#define GUIDesignViewSettingsTabBook1
Tab books.
Definition GUIDesigns.h:559
#define GUIDesignViewSettingsButton3
Definition GUIDesigns.h:576
#define GUIDesignMatrixViewSettings
FXMatrix used to pack values in Viewsettings.
Definition GUIDesigns.h:355
#define GUIDesignViewSettingsVerticalFrame2
Definition GUIDesigns.h:520
#define GUIDesignViewSettingsVerticalFrame3
Definition GUIDesigns.h:522
#define GUIDesignViewSettingsColorWell
ColorWell.
Definition GUIDesigns.h:552
#define GUIDesignHorizontalSeparator
Definition GUIDesigns.h:463
#define GUIDesignViewSettingsVerticalFrame4
Definition GUIDesigns.h:524
#define GUIDesignViewSettingsTabItemBook1
Definition GUIDesigns.h:561
#define GUIDesignViewSettingsVerticalFrame1
vertical frames
Definition GUIDesigns.h:518
#define GUIDesignViewSettingsLabel2
Definition GUIDesigns.h:566
#define GUIDesignViewSettingsTextField1
textFields
Definition GUIDesigns.h:569
#define GUIDesignCheckButtonViewSettings
CheckButton for Frames without thick extended over the frame.
Definition GUIDesigns.h:207
#define GUIDesignViewSettingsButton1
Buttons.
Definition GUIDesigns.h:572
FXDEFMAP(GUIDialog_ViewSettings::SizePanel) GUIDialog_SizeMap[]
GUIGlObjectType
@ GLO_TAZRELDATA
TAZ relation data.
@ GLO_JUNCTION
a junction
@ GLO_LANE
a lane
@ GLO_CONTAINER
a container
@ GLO_ADDITIONALELEMENT
reserved GLO type for packing all additionals elements
@ GLO_VEHICLE
a vehicle
@ GLO_PERSON
a person
@ GLO_POI
poi (over view, geo and lane)
@ GLO_POLYGON
polygon
GUIViewObjectsHandler gViewObjectsHandler
FXString gCurrentFolder
The folder used as last.
@ OPEN
open icons
@ SAVE_DATABASE
@ SAVE
save icons
#define TL(string)
Definition MsgHandler.h:305
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition SUMOTime.cpp:91
@ SUMO_TAG_DELAY
@ SUMO_TAG_BREAKPOINT
@ SUMO_TAG_VIEWSETTINGS_DECAL
@ SUMO_TAG_VIEWSETTINGS
@ SUMO_TAG_VIEWSETTINGS_LIGHT
@ SUMO_ATTR_VALUE
@ SUMO_ATTR_CENTER_Y
@ SUMO_ATTR_INDEX
@ SUMO_ATTR_LAYER
A layer number.
@ SUMO_ATTR_HEIGHT
@ SUMO_ATTR_TYPE
@ SUMO_ATTR_CENTER_Z
@ SUMO_ATTR_CENTER_X
@ SUMO_ATTR_WIDTH
@ SUMO_ATTR_TIME
trigger: the time of the step
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
bool contains(const std::string &name) const
Returns the information whether a setting with the given name is stored.
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
void remove(const std::string name)
Removes the setting with the given name.
const std::vector< std::string > & getNames() const
Returns a list of stored settings names.
void add(const GUIVisualizationSettings &scheme)
Adds a visualization scheme.
int getNumInitialSettings() const
Returns the number of initial settings.
void writeSettings(FXApp *app)
Writes the current scheme into the registry.
static FXButton * buildFXButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXIcon *ic, FXObject *tgt, FXSelector sel, FXuint opts=BUTTON_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
build button
void writeXML(OutputDevice &dev)
write the settings to the given device
GUIVisualizationTextSettings getSettings()
get settings
FXColorWell * myBGColorWell
BGColor well.
void update(const GUIVisualizationTextSettings &settings)
update
FXCheckButton * myCheck
check button
FXCheckButton * myConstSizeCheck
const size check
NamePanel(FXMatrix *parent, GUIDialog_ViewSettings *target, const std::string &title, const GUIVisualizationTextSettings &settings)
constructor
FXCheckButton * mySelectedCheck
draw only for selected?
void update(const GUIVisualizationRainbowSettings &settings)
update
GUIVisualizationRainbowSettings getSettings()
get settings
RainbowPanel(FXComposite *parent, GUIDialog_ViewSettings *target, const GUIVisualizationRainbowSettings &settings)
constructor
FXCheckButton * myCheckSelected
check selected button
long onCmdSizeChange(FXObject *obj, FXSelector sel, void *ptr)
FXRealSpinner * myMinSizeDial
min size dial
void update(const GUIVisualizationSizeSettings &settings)
update
GUIVisualizationSizeSettings getSettings()
get settings
SizePanel(FXMatrix *parent, GUIDialog_ViewSettings *target, const GUIVisualizationSizeSettings &settings, GUIGlObjectType type)
FOX Declaration.
FXRealSpinner * myExaggerateDial
exaggerate dial
The dialog to change the view (gui) settings.
long onCmdExportSetting(FXObject *, FXSelector, void *data)
Called if the settings shall be exported into a file.
FXVerticalFrame * myVehicleColorSettingFrame
void buildBackgroundFrame(FXTabBook *tabbook)
build frames
FXCheckButton * myVehicleColorInterpolation
std::string getCurrentScheme() const
Returns the name of the currently chosen scheme.
MFXComboBoxIcon * myPolyColorMode
Polygons.
FXCheckButton * myShowPedestrianNetwork
FXVerticalFrame * myDataColorSettingFrame
GUISUMOAbstractView * myParent
The parent view (which settings are changed)
std::vector< FXColorWell * > myPolyColors
MFXComboBoxIcon * myJunctionColorMode
junctions
FXVerticalFrame * myJunctionColorSettingFrame
void buildSelectionFrame(FXTabBook *tabbook)
void buildOpenGLFrame(FXTabBook *tabbook)
long onCmdNameChange(FXObject *, FXSelector, void *)
Called if the name of the scheme was changed.
FXVerticalFrame * myContainerColorSettingFrame
FXRealSpinner * myLaneWidthUpscaleDialer
std::vector< FXColorWell * > myPOIColors
FXColorWell * myBusStopColor
additional colors
std::vector< FXButton * > myLaneScaleButtons
FXCheckButton * myDisableDottedContours
std::vector< FXColorWell * > myPersonColors
MFXComboBoxIcon * myVehicleShapeDetail
std::vector< FXButton * > myDataButtons
std::vector< FXRealSpinner * > myVehicleScales
std::vector< FXRealSpinner * > myPolyThresholds
FXCheckButton * myPOIColorInterpolation
std::vector< FXButton * > myContainerButtons
std::vector< FXRealSpinner * > myJunctionThresholds
FXCheckButton * myVehicleScaleInterpolation
FXMatrix * rebuildColorMatrix(FXVerticalFrame *frame, std::vector< FXColorWell * > &colors, std::vector< FXRealSpinner * > &thresholds, std::vector< FXButton * > &buttons, FXCheckButton *interpolation, GUIColorScheme &scheme)
Rebuilds manipulators for the current coloring scheme.
void buildJunctionsFrame(FXTabBook *tabbook)
std::vector< FXRealSpinner * > myPersonThresholds
void show()
show view settings dialog
std::vector< FXButton * > myJunctionButtons
FXCheckButton * myShowVehicleColorLegend
void buildStreetsFrame(FXTabBook *tabbook)
FXRealSpinner * myTripWidth
demand widths
FXCheckButton * mySaveViewPort
load/save-menu
void buildVehiclesFrame(FXTabBook *tabbook)
FXCheckButton * myIgnoreColorSchemeFor3DVehicles
std::vector< FXColorWell * > myJunctionColors
MFXComboBoxIcon * myLaneEdgeScaleMode
... lane scaler
FXCheckButton * myPersonColorInterpolation
long onCmdLoadXMLDecals(FXObject *, FXSelector, void *data)
Called if the decals shall be loaded from a file.
FXColorWell * mySelectionColor
selection colors
RainbowPanel * myEdgeRainbowPanel
rainbow panels
FXVerticalFrame * myLaneScaleSettingFrame
std::vector< FXColorWell * > myVehicleColors
FXMatrix * rebuildScaleMatrix(FXVerticalFrame *frame, std::vector< FXRealSpinner * > &scales, std::vector< FXRealSpinner * > &thresholds, std::vector< FXButton * > &buttons, FXCheckButton *interpolation, GUIScaleScheme &scheme)
Rebuilds manipulators for the current scaling scheme.
std::vector< FXRealSpinner * > myVehicleThresholds
void setCurrentScheme(const std::string &)
Sets the named scheme as the current.
FXCheckButton * myPolyColorInterpolation
std::vector< FXButton * > myPersonButtons
FXCheckButton * myJunctionColorInterpolation
FXRealSpinner * myTazRelationUpscaleDialer
void buildHeader(FXVerticalFrame *contentFrame)
build header
long onCmdCancel(FXObject *, FXSelector, void *)
Called if the Cancel-button was pressed.
FXVerticalFrame * myLaneColorSettingFrame
MFXComboBoxIcon * myPersonShapeDetail
FXCheckButton * myLaneScaleInterpolation
void buildDemandFrame(FXTabBook *tabbook)
long onCmdImportSetting(FXObject *, FXSelector, void *data)
Called if the settings shall be read from a file.
FXVerticalFrame * myVehicleScaleSettingFrame
long onUpdImportSetting(FXObject *, FXSelector, void *data)
Called when updating the button that allows to read settings from a file.
void setCurrent(GUIVisualizationSettings *settings)
Sets current settings (called if reopened)
void rebuildColorMatrices(bool doCreate=false)
Rebuilds color changing dialogs after choosing another coloring scheme.
void saveDecals(OutputDevice &dev) const
Writes the currently used decals into a file.
FXVerticalFrame * myPolyColorSettingFrame
std::vector< FXRealSpinner * > myLaneScales
void loadSettings(const std::string &file)
Loads a scheme from a file.
long onCmdClearDecals(FXObject *, FXSelector, void *data)
Called if the decals shall be cleared.
std::vector< FXRealSpinner * > myDataThresholds
FXCheckButton * myDataColorInterpolation
FXCheckButton * myDrawCrossingsAndWalkingAreas
std::vector< FXButton * > myLaneButtons
FXCheckButton * myLaneColorInterpolation
FXVerticalFrame * myPersonColorSettingFrame
void buildContainersFrame(FXTabBook *tabbook)
MFXComboBoxIcon * myVehicleColorMode
Vehicles.
void buildLegendFrame(FXTabBook *tabbook)
std::vector< FXRealSpinner * > myVehicleScaleThresholds
long onCmdLoadDecal(FXObject *, FXSelector, void *data)
Called if the decal shall be loaded from a file.
FXCheckButton * myContainerColorInterpolation
std::vector< FXColorWell * > myLaneColors
SizePanel * myVehicleSizePanel
size panels
GUIVisualizationSettings * mySettings
The current settings.
long onCmdDeleteSetting(FXObject *, FXSelector, void *data)
Called if the settings shall be deleted.
void loadDecals(const std::string &file)
Loads decals from a file.
FXVerticalFrame * myPOIColorSettingFrame
long onCmdColorChange(FXObject *, FXSelector, void *)
Called if something (color, width, etc.) has been changed.
std::vector< FXColorWell * > myContainerColors
FXCheckButton * myForceDrawForRectangleSelection
GUISUMOAbstractView * getSUMOAbstractView()
get GUISUMOAbstractView parent
MFXComboBoxIcon * myContainerColorMode
Containers.
std::vector< FXRealSpinner * > myLaneScaleThresholds
FXCheckButton * myDither
openGL
MFXComboBoxIcon * myContainerShapeDetail
GUIVisualizationSettings myBackup
A backup of the settings (used if the "Cancel" button is pressed)
std::vector< FXRealSpinner * > myContainerThresholds
void buildPersonsFrame(FXTabBook *tabbook)
MFXComboBoxIcon * myPOIColorMode
POIs.
void updatePOIParams()
reload known POI parameters
FXCheckButton * myShowLane2Lane
buttons
std::vector< FXColorWell * > myDataColors
long onCmdOk(FXObject *, FXSelector, void *)
Called if the OK-button was pressed.
long onCmdSaveSetting(FXObject *, FXSelector, void *data)
Called if the settings shall be saved into the registry.
MFXComboBoxIcon * myLaneEdgeColorMode
... lane colorer
long onCmdSaveXMLDecals(FXObject *, FXSelector, void *data)
Called if the decals shall be saved to a file.
void buildAdditionalsFrame(FXTabBook *tabbook)
void buildPOIsFrame(FXTabBook *tabbook)
void buildPolygonsFrame(FXTabBook *tabbook)
void buildDataFrame(FXTabBook *tabbook)
long onUpdSaveSetting(FXObject *, FXSelector, void *data)
Called when updating the button that allows to save the settings into the registry.
void buildButtons(FXVerticalFrame *contentFrame)
build buttons
MFXComboBoxIcon * myVehicleScaleMode
vehicle scaler
std::vector< FXButton * > myVehicleScaleButtons
MFXComboBoxIcon * myPersonColorMode
Persons.
bool updateColorRanges(FXObject *sender, std::vector< FXColorWell * >::const_iterator colIt, std::vector< FXColorWell * >::const_iterator colEnd, std::vector< FXRealSpinner * >::const_iterator threshIt, std::vector< FXRealSpinner * >::const_iterator threshEnd, std::vector< FXButton * >::const_iterator buttonIt, GUIColorScheme &scheme)
update color ranges
std::vector< FXRealSpinner * > myLaneThresholds
long onUpdDeleteSetting(FXObject *, FXSelector, void *data)
Called when updating the button that allows to delete settings.
bool updateScaleRanges(FXObject *sender, std::vector< FXRealSpinner * >::const_iterator colIt, std::vector< FXRealSpinner * >::const_iterator colEnd, std::vector< FXRealSpinner * >::const_iterator threshIt, std::vector< FXRealSpinner * >::const_iterator threshEnd, std::vector< FXButton * >::const_iterator buttonIt, GUIScaleScheme &scheme)
update scale ranges
void build3DFrame(FXTabBook *tabbook)
long onUpdExportSetting(FXObject *, FXSelector, void *data)
Called when updating the button that allows to export settings into a file.
MFXComboBoxIcon * myDataColorMode
Data.
std::vector< FXButton * > myPOIButtons
NamePanel * myEdgeNamePanel
name panels
FXRealSpinner * myEdgeRelationUpscaleDialer
void updateVehicleParams()
reload known vehicle parameters
std::vector< FXRealSpinner * > myPOIThresholds
std::vector< FXButton * > myPolyButtons
std::vector< FXButton * > myVehicleButtons
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Persists window position in the registry.
const std::vector< double > & getThresholds() const
void setColor(const int pos, const T &color)
void setThreshold(const int pos, const double threshold)
const std::vector< std::string > & getNames() const
void removeColor(const int pos)
const std::string & getName() const
const std::vector< T > & getColors() const
int addColor(const T &color, const double threshold, const std::string &name="")
void setInterpolated(const bool interpolate, double interpolationStart=0.f)
bool isInterpolated() const
bool allowsNegativeValues() const
void fill(MFXComboBoxIcon &cb)
Fills the given combobox with the names of available colorings.
MFXComboBoxIcon * getColoringSchemesCombo()
get coloring schemes combo
virtual void buildColorRainbow(const GUIVisualizationSettings &, GUIColorScheme &, int, GUIGlObjectType, const GUIVisualizationRainbowSettings &)
recalibrate color scheme according to the current value range
virtual std::vector< std::string > getMeanDataAttrs(const std::string &meanDataID) const
return list of available attributes for the given meanData id
void setDelay(double delay)
Sets the delay of the parent application.
GUIDialog_EditViewport * getViewportEditor()
get the viewport and create it on first access
std::vector< Decal > & getDecals()
The list of decals to show.
double getDelay() const
Returns the delay of the parent application.
virtual std::vector< std::string > getEdgeLaneParamKeys(bool) const
return list of available edge parameters
virtual std::vector< std::string > getVehicleParamKeys(bool) const
return list of available vehicle parameters
virtual void drawPedestrianNetwork(const GUIVisualizationSettings &) const
Draw (or not) the JuPedSim pedestrian network.
virtual std::vector< std::string > getMeanDataIDs() const
return list of loaded edgeData ids (being computed in the current simulation)
virtual void recalculateBoundaries()
recalculate boundaries
FXMutex & getDecalsLockMutex()
The mutex to use before accessing the decals list in order to avoid thread conflicts.
virtual bool is3DView() const
return whether this is a 3D view
virtual std::vector< std::string > getPOIParamKeys() const
return list of available vehicle parameters
virtual void changePedestrianNetworkColor(const GUIVisualizationSettings &) const
Change the color of the JuPedSim pedestrian network.
void setBreakpoints(const std::vector< SUMOTime > &breakpoints)
Sets the breakpoints of the parent application.
virtual bool setColorScheme(const std::string &)
set color scheme
virtual std::vector< std::string > getRelDataAttrs() const
return list of loaded edgeRelation and tazRelation attributes
virtual const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve breakpoints if provided by the application
void remove(GUIDialog_EditViewport *)
remove viewport
virtual std::vector< std::string > getEdgeDataAttrs() const
return list of loaded edgeData attributes
An XML-handler for visualisation schemes.
double getDelay() const
Returns the parsed delay.
bool hasDecals() const
Returns whether any decals have been parsed.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
const std::vector< SUMOTime > & getBreakpoints() const
Returns the parsed breakpoints.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
GUIGlObjectType recomputeBoundaries
recompute boundaries
Stores the information about how to visualize structures.
GUIVisualizationTextSettings addName
GUIVisualizationTextSettings tlsPhaseIndex
bool poiUseCustomLayer
whether the rendering layer of POIs should be overriden
GUIVisualizationTextSettings vehicleName
GUIVisualizationTextSettings junctionName
RGBColor backgroundColor
The background color to use.
GUIVisualizationSizeSettings vehicleSize
GUIVisualizationSizeSettings containerSize
bool showBlinker
Information whether vehicle blinkers shall be drawn.
GUIVisualizationTextSettings internalEdgeName
bool showPedestrianNetwork
Flag for visualizing the pedestrian network generated for JuPedSim.
RGBColor skyColor
sky background color
double polyCustomLayer
the custom layer for polygons
GUIVisualizationSizeSettings junctionSize
static const std::string SCHEME_NAME_DATA_ATTRIBUTE_NUMERICAL
bool drawBoundaries
enable or disable draw boundaries
static const std::string SCHEME_NAME_EDGEDATA_NUMERICAL
bool showBikeMarkings
Information whether bicycle lane marking shall be drawn.
std::string edgeDataID
id for coloring by live edgeData
GUIScaler laneScaler
The lane scaler.
GUIVisualizationTextSettings edgeScaleValue
bool dither
Information whether dithering shall be enabled.
GUIColorer vehicleColorer
The vehicle colorer.
bool disableHideByZoom
disable hide by zoom
static const std::string SCHEME_NAME_EDGEDATA_LIVE
GUIVisualizationTextSettings personValue
bool showLinkRules
Information whether link rules (colored bars) shall be drawn.
GUIVisualizationRainbowSettings vehicleValueRainBow
GUIVisualizationTextSettings poiType
GUIVisualizationSizeSettings addSize
std::string name
The name of this setting.
GUIColorer edgeColorer
The mesoscopic edge colorer.
int containerQuality
The quality of container drawing.
RGBColor pedestrianNetworkColor
The color of the pedestrian network generated for JuPedSim.
GUIVisualizationTextSettings internalJunctionName
GUIVisualizationTextSettings vehicleScaleValue
GUIVisualizationSizeSettings poiSize
bool drawJunctionShape
whether the shape of the junction should be drawn
std::string edgeData
key for coloring by edgeData
GUIVisualizationTextSettings geometryIndices
GUIVisualizationTextSettings dataValue
bool show3DTLSDomes
whether the semi-transparent domes around 3D TL models should be drawn
bool realisticLinkRules
Information whether link rules (colored bars) shall be drawn with a realistic color scheme.
bool trueZ
drawl all objects according to their z data
int personQuality
The quality of person drawing.
GUIColorer poiColorer
The POI colorer.
GUIVisualizationWidthSettings widthSettings
width settings
GUIVisualizationTextSettings poiName
std::string vehicleScaleParam
key for scaling by vehicle parameter
bool showParkingInfo
Set whether parking related information should be shown.
GUIVisualizationTextSettings vehicleValue
bool disableDottedContours
flag for disable dotted contours in netedit
GUIColorer polyColorer
The polygon colorer.
int vehicleQuality
The quality of vehicle drawing.
GUIVisualizationTextSettings drawLinkJunctionIndex
bool generate3DTLSModels
whether 3D TLS models should be generated automatically
static const std::string SCHEME_NAME_LANE_PARAM_NUMERICAL
GUIVisualizationTextSettings addFullName
GUIVisualizationTextSettings edgeValue
bool fps
Information whether frames-per-second should be drawn.
std::string vehicleParam
key for coloring by vehicle parameter
bool showRails
Information whether rails shall be drawn.
GUIVisualizationSizeSettings personSize
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
GUIVisualizationTextSettings cwaEdgeName
GUIVisualizationTextSettings junctionID
std::string vehicleTextParam
key for rendering vehicle textual parameter
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
GUIVisualizationColorSettings colorSettings
color settings
bool showSublanes
Whether to show sublane boundaries.
GUIVisualizationRainbowSettings edgeValueRainBow
checks and thresholds for rainbow coloring
bool showGrid
Information whether a grid shall be shown.
bool scaleLength
Whether vehicle length shall be scaled with length/geometry factor.
bool showVehicleColorLegend
Information whether the vehicle color legend shall be drawn.
double edgeRelWidthExaggeration
The edgeRelation exaggeration (upscale thickness)
bool hideConnectors
flag to show or hide connectors
GUIScaler vehicleScaler
The size scaling settings for vehicles.
static bool UseMesoSim
this should be set at the same time as MSGlobals::gUseMesoSim
GUIColorer personColorer
The person colorer.
void save(OutputDevice &dev) const
Writes the settings into an output device.
bool show3DTLSLinkMarkers
whether the TLS link markers should be drawn
GUIScaleScheme & getLaneEdgeScaleScheme()
Returns the current lane (edge) scaling schme.
bool polyUseCustomLayer
whether the rendering layer of polygons should be overriden
int getLaneEdgeMode() const
Returns the number of the active lane (edge) coloring schme.
double poiCustomLayer
the custom layer for POIs
bool showChargingInfo
Set whether the charging search related information should be shown.
RGBColor ambient3DLight
3D material light components
GUIVisualizationRainbowSettings junctionValueRainBow
bool forceDrawForRectangleSelection
flag to force draw for rectangle selection (see drawForRectangleSelection)
bool netedit
Whether the settings are for Netedit.
bool showLaneDirection
Whether to show direction indicators for lanes.
GUIVisualizationRainbowSettings dataValueRainBow
value below which edgeData and edgeRelation data value should not be rendered
bool secondaryShape
whether secondary lane shape shall be drawn
GUIColorScheme & getLaneEdgeScheme()
Returns the current lane (edge) coloring schme.
GUIScaler edgeScaler
The mesoscopic edge scaler.
bool drawMinGap
Information whether the minimum gap shall be drawn.
GUIVisualizationTextSettings streetName
GUIVisualizationTextSettings poiText
GUIVisualizationTextSettings vehicleText
int getLaneEdgeScaleMode() const
Returns the number of the active lane (edge) scaling schme.
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
bool show3DHeadUpDisplay
whether to draw the head up display items
GUIColorer laneColorer
The lane colorer.
GUIVisualizationTextSettings polyName
double tazRelWidthExaggeration
The tazRelation exaggeration (upscale thickness)
bool laneShowBorders
Information whether lane borders shall be drawn.
GUIVisualizationTextSettings tlsPhaseName
GUIVisualizationTextSettings edgeName
Setting bundles for optional drawing names with size and color.
bool showSizeLegend
Information whether the size legend shall be drawn.
double laneMinSize
The minimum visual lane width for drawing.
GUIVisualizationTextSettings drawLinkTLIndex
GUIVisualizationTextSettings containerName
static std::map< std::string, std::vector< RGBColor > > RAINBOW_SCHEMES
GUIVisualizationSizeSettings polySize
GUIColorer containerColorer
The container colorer.
double gridXSize
Information about the grid spacings.
bool showBTRange
Information whether the communication range shall be drawn.
bool drawReversed
Whether to draw reversed vehicles in their reversed state.
GUIVisualizationTextSettings personName
bool showColorLegend
Information whether the edge color legend shall be drawn.
std::string poiTextParam
key for rendering poi textual parameter
bool showRouteIndex
Information whether the route index should be shown.
bool drawCrossingsAndWalkingareas
whether crosings and walkingareas shall be drawn
static const std::string SCHEME_NAME_EDGE_PARAM_NUMERICAL
scheme names
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
std::string relDataAttr
key for coloring by edgeRelation / tazRelation attribute
GUIColorer junctionColorer
The junction colorer.
void copy(const GUIVisualizationSettings &s)
copy all content from another GUIVisualizationSettings (note: DON'T USE in DrawGL functions!...
static const std::string SCHEME_NAME_PARAM_NUMERICAL
std::string edgeParam
key for coloring by edge parameter
bool drawBrakeGap
Information whether the brake gap shall be drawn.
GUIVisualizationTextSettings polyType
int poiDetail
The detail level for drawing POIs.
std::string edgeDataScaling
key for scaling by edgeData
FXint insertIconItem(FXint index, const FXString &text, FXIcon *icon=nullptr, FXColor bgColor=FXRGB(255, 255, 255), void *ptr=nullptr)
insert icon item in the given position
long setCurrentItem(const FXint index, FXbool notify=FALSE)
Set the current item (index is zero-based)
FXint getCurrentItem() const
Get the current item's index.
FXint findItem(const FXString &text) const
find item
void removeItem(FXint index)
Remove this item from the list.
FXint getNumItems() const
Return the number of items in the list.
FXString getText() const
Get the text.
virtual void clearItems()
Remove all items from the list.
std::string getItemText(FXint index) const
Get text for specified item.
void disable()
Disable combo box.
FXint appendIconItem(const FXString &text, FXIcon *icon=nullptr, FXColor bgColor=FXRGB(255, 255, 255), void *ptr=nullptr)
append icon item in the last position
void enable()
Enable combo box.
void fillTable()
fill table
static FXString getFilename2Write(FXWindow *parent, const FXString &header, const FXString &extensions, FXIcon *icon, FXString &currentFolder)
Returns the file name to write.
Definition MFXUtils.cpp:116
static void deleteChildren(FXWindow *w)
Deletes all children of the given window.
Definition MFXUtils.cpp:31
static FXColor getFXColor(const RGBColor &col)
converts FXColor to RGBColor
Definition MFXUtils.cpp:145
static RGBColor getRGBColor(FXColor col)
converts FXColor to RGBColor
Definition MFXUtils.cpp:139
static OptionsCont & getOptions()
Retrieves the options.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
void close()
Closes the device and removes it from the dictionary.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
static OutputDevice & getDevice(const std::string &name, bool usePrefix=true)
Returns the described OutputDevice.
unsigned char red() const
Returns the red-amount of the color.
Definition RGBColor.cpp:74
void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
assigns new values
Definition RGBColor.cpp:98
static StringBijection< XMLFileExtension > XMLFileExtensions
XML file Extensions.
static StringBijection< ViewSettingsFileExtension > ViewSettingsFileExtensions
view settings file extensions
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
#define UNUSED_PARAMETER(x)
RGBColor vehicleTripColor
color for vehicle trips
RGBColor selectionColor
basic selection color
RGBColor selectedEdgeColor
edge selection color
RGBColor selectedPersonPlanColor
person plan selection color (Rides, Walks, stopPersons...)
RGBColor stopPersonColor
color for stopPersons
RGBColor selectedCrossingColor
crossings selection color
RGBColor chargingStationColor
color for chargingStations
RGBColor selectedLaneColor
lane selection color
RGBColor selectedRouteColor
route selection color (used for routes and vehicle stops)
RGBColor selectedEdgeDataColor
edge data selection color
RGBColor trainStopColorSign
color for trainStops signs
RGBColor transhipColor
color for tranships
RGBColor waypointColor
color for Waypoints
RGBColor containerStopColor
color for containerStops
RGBColor selectedProhibitionColor
prohibition selection color
RGBColor selectedConnectionColor
connection selection color
RGBColor busStopColorSign
color for busStops signs
RGBColor containerStopColorSign
color for containerStop signs
RGBColor selectedAdditionalColor
additional selection color (busStops, Detectors...)
RGBColor transportColor
color for transport
RGBColor busStopColor
color for busStops
RGBColor selectedVehicleColor
vehicle selection color
RGBColor selectedPersonColor
person selection color
RGBColor personTripColor
color for stopPersons
RGBColor stopContainerColor
color for containerStops
RGBColor trainStopColor
color for trainStops
RGBColor chargingStationColorSign
color for chargingStation sign
bool hideMax
whether data above threshold should not be colored
bool setNeutral
whether the scale should be centered at a specific value
bool fixRange
whether the color scale should be fixed to the given min/max values
double minThreshold
threshold below which value should not be colored
std::vector< RGBColor > colors
color steps for the rainbow;
int rainbowScheme
index in the list of color schemes
bool hideMin
whether data below threshold should not be colored
double neutralThreshold
neutral point of scale
double maxThreshold
threshold above which value should not be colored
double exaggeration
The size exaggeration (upscale)
bool constantSize
whether the object shall be drawn with constant size regardless of zoom
double minSize
The minimum size to draw this object.
bool constantSizeSelected
whether only selected objects shall be drawn with constant
RGBColor bgColor
background text color
bool onlySelected
whether only selected objects shall have text drawn
bool constSize
@brif flag to avoid size changes
double personTripWidth
width for person trips