Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/gui/dialogs/GUIDialog_AppSettings.cpp
193728 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file GUIDialog_AppSettings.cpp
15
/// @author Daniel Krajzewicz
16
/// @author Michael Behrisch
17
/// @date Mon, 08.03.2004
18
///
19
// The application-settings dialog
20
/****************************************************************************/
21
#include <config.h>
22
23
#include <utils/common/MsgHandler.h>
24
#include <utils/gui/images/GUIIconSubSys.h>
25
#include <utils/gui/images/GUITexturesHelper.h>
26
#include <utils/gui/windows/GUIAppEnum.h>
27
#include <utils/gui/div/GUIMessageWindow.h>
28
#include <utils/gui/div/GUIDesigns.h>
29
#include <gui/GUIGlobals.h>
30
#include "GUIDialog_AppSettings.h"
31
32
33
// ===========================================================================
34
// FOX callback mapping
35
// ===========================================================================
36
FXDEFMAP(GUIDialog_AppSettings) GUIDialog_AppSettingsMap[] = {
37
FXMAPFUNC(SEL_COMMAND, MID_QUITONSIMEND, GUIDialog_AppSettings::onCmdSelect),
38
FXMAPFUNC(SEL_COMMAND, MID_AUTOSTART, GUIDialog_AppSettings::onCmdSelect),
39
FXMAPFUNC(SEL_COMMAND, MID_DEMO, GUIDialog_AppSettings::onCmdSelect),
40
FXMAPFUNC(SEL_COMMAND, MID_ALLOWTEXTURES, GUIDialog_AppSettings::onCmdSelect),
41
FXMAPFUNC(SEL_COMMAND, MID_LOCATELINKS, GUIDialog_AppSettings::onCmdSelect),
42
FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_OK, GUIDialog_AppSettings::onCmdOk),
43
FXMAPFUNC(SEL_COMMAND, MID_SETTINGS_CANCEL, GUIDialog_AppSettings::onCmdCancel),
44
};
45
46
FXIMPLEMENT(GUIDialog_AppSettings, FXDialogBox, GUIDialog_AppSettingsMap, ARRAYNUMBER(GUIDialog_AppSettingsMap))
47
48
49
// ===========================================================================
50
// method definitions
51
// ===========================================================================
52
GUIDialog_AppSettings::GUIDialog_AppSettings(GUIMainWindow* parent)
53
: FXDialogBox(parent, TL("Application Settings")),
54
myParent(parent),
55
myAppQuitOnEnd(GUIGlobals::gQuitOnEnd),
56
myAppAutoStart(GUIGlobals::gRunAfterLoad),
57
myAppDemo(GUIGlobals::gDemoAutoReload),
58
myAllowTextures(GUITexturesHelper::texturesAllowed()),
59
myLocateLinks(GUIMessageWindow::locateLinksEnabled()) {
60
FXCheckButton* b = nullptr;
61
FXVerticalFrame* f1 = new FXVerticalFrame(this, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0);
62
b = new FXCheckButton(f1, TL("Quit on Simulation End"), this, MID_QUITONSIMEND);
63
b->setCheck(myAppQuitOnEnd);
64
b = new FXCheckButton(f1, TL("Autostart Simulation on Load and Reload"), this, MID_AUTOSTART);
65
b->setCheck(myAppAutoStart);
66
b = new FXCheckButton(f1, TL("Reload Simulation after finish (Demo mode)"), this, MID_DEMO);
67
b->setCheck(myAppDemo);
68
b = new FXCheckButton(f1, TL("Locate elements when clicking on messages"), this, MID_LOCATELINKS);
69
b->setCheck(myLocateLinks);
70
71
FXMatrix* m1 = new FXMatrix(f1, 2, (LAYOUT_FILL_X | LAYOUT_LEFT | MATRIX_BY_COLUMNS), 0, 0, 0, 0, 10, 10, 10, 10, 5, 5);
72
myBreakPointOffset = new FXRealSpinner(m1, 5, this, MID_TIMELINK_BREAKPOINT, GUIDesignViewSettingsSpinDial2 | SPIN_NOMIN);
73
myBreakPointOffset->setValue(STEPS2TIME(GUIMessageWindow::getBreakPointOffset()));
74
new FXLabel(m1, TL("Breakpoint offset when clicking on time message"), nullptr, GUIDesignViewSettingsLabel1);
75
myTable = new FXTable(f1, this, MID_TABLE, GUIDesignBreakpointTable);
76
const auto& onlineMaps = parent->getOnlineMaps();
77
const int numRows = (int)onlineMaps.size() + 1;
78
myTable->setVisibleRows(numRows);
79
myTable->setVisibleColumns(2);
80
myTable->setTableSize(numRows, 2);
81
myTable->setBackColor(GUIDesignBackgroundColorWhite);
82
myTable->getRowHeader()->setWidth(0);
83
myTable->setTableSize(numRows, 2);
84
myTable->setColumnText(0, "Name");
85
myTable->setColumnText(1, "URL");
86
FXHeader* header = myTable->getColumnHeader();
87
header->setHeight(GUIDesignHeight);
88
header->setItemSize(0, 60);
89
header->setItemSize(1, 275);
90
int row = 0;
91
for (const auto& item : onlineMaps) {
92
myTable->setItemText(row, 0, item.first.c_str());
93
myTable->setItemText(row, 1, item.second.c_str());
94
row++;
95
}
96
97
new FXHorizontalSeparator(f1, SEPARATOR_GROOVE | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_FILL_X);
98
b = new FXCheckButton(f1, TL("Allow Textures"), this, MID_ALLOWTEXTURES);
99
b->setCheck(myAllowTextures);
100
FXHorizontalFrame* f2 = new FXHorizontalFrame(f1, LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_FILL_X | PACK_UNIFORM_WIDTH, 0, 0, 0, 0, 10, 10, 5, 5);
101
FXButton* initial = GUIDesigns::buildFXButton(f2, TL("&OK"), "", "", nullptr, this, MID_SETTINGS_OK, BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
102
GUIDesigns::buildFXButton(f2, TL("&Cancel"), "", "", nullptr, this, MID_SETTINGS_CANCEL, BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
103
initial->setFocus();
104
setIcon(GUIIconSubSys::getIcon(GUIIcon::EMPTY));
105
}
106
107
108
GUIDialog_AppSettings::~GUIDialog_AppSettings() {}
109
110
111
long
112
GUIDialog_AppSettings::onCmdOk(FXObject*, FXSelector, void*) {
113
GUIGlobals::gQuitOnEnd = myAppQuitOnEnd;
114
GUIGlobals::gRunAfterLoad = myAppAutoStart;
115
GUIGlobals::gDemoAutoReload = myAppDemo;
116
GUIGlobals::gRunAfterLoad = myAppAutoStart;
117
GUITexturesHelper::allowTextures(myAllowTextures);
118
GUIMessageWindow::enableLocateLinks(myLocateLinks);
119
GUIMessageWindow::setBreakPointOffset(TIME2STEPS(myBreakPointOffset->getValue()));
120
FXString maps;
121
for (int r = 0; r < myTable->getNumRows(); r++) {
122
if (myTable->getItem(r, 0) != nullptr && myTable->getItem(r, 1) != nullptr) {
123
myParent->addOnlineMap(myTable->getItem(r, 0)->getText().text(), myTable->getItem(r, 1)->getText().text());
124
if (!maps.empty()) {
125
maps += "\n";
126
}
127
maps += myTable->getItem(r, 0)->getText() + "\t" + myTable->getItem(r, 1)->getText();
128
}
129
}
130
getApp()->reg().writeStringEntry("gui", "onlineMaps", maps.text());
131
destroy();
132
return 1;
133
}
134
135
136
long
137
GUIDialog_AppSettings::onCmdCancel(FXObject*, FXSelector, void*) {
138
destroy();
139
return 1;
140
}
141
142
long
143
GUIDialog_AppSettings::onCmdSelect(FXObject*, FXSelector sel, void*) {
144
switch (FXSELID(sel)) {
145
case MID_QUITONSIMEND:
146
myAppQuitOnEnd = !myAppQuitOnEnd;
147
break;
148
case MID_AUTOSTART:
149
myAppAutoStart = !myAppAutoStart;
150
break;
151
case MID_DEMO:
152
myAppDemo = !myAppDemo;
153
break;
154
case MID_LOCATELINKS:
155
myLocateLinks = !myLocateLinks;
156
break;
157
case MID_ALLOWTEXTURES:
158
myAllowTextures = !myAllowTextures;
159
break;
160
}
161
return 1;
162
}
163
164
165
/****************************************************************************/
166
167