Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/GNEApplicationWindowHelper.cpp
193692 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 GNEApplicationWindowHelper.cpp
15
/// @author Jakob Erdmann
16
/// @date Feb 2011
17
///
18
// The main window of Netedit (adapted from GUIApplicationWindow)
19
/****************************************************************************/
20
#include <config.h>
21
22
#include <regex>
23
24
#include <netedit/dialogs/file/GNEFileDialog.h>
25
#include <netedit/dialogs/tools/GNEPythonToolDialog.h>
26
#include <netedit/dialogs/tools/GNERunPythonToolDialog.h>
27
#include <netedit/elements/GNEAttributeCarrier.h>
28
#include <netedit/GNETagProperties.h>
29
#include <netedit/templates.h>
30
#include <netedit/tools/GNENetDiffTool.h>
31
#include <utils/common/FileHelpers.h>
32
#include <utils/foxtools/MFXMenuCheckIcon.h>
33
#include <utils/gui/div/GUIDesigns.h>
34
#include <utils/handlers/TemplateHandler.h>
35
#include <utils/options/OptionsLoader.h>
36
#include <xercesc/parsers/SAXParser.hpp>
37
#include <xercesc/sax/AttributeList.hpp>
38
#include <xercesc/sax/HandlerBase.hpp>
39
#include <xercesc/sax/SAXException.hpp>
40
#include <xercesc/sax/SAXParseException.hpp>
41
42
#include "GNEApplicationWindow.h"
43
#include "GNEViewNet.h"
44
#include "GNENet.h"
45
46
// ===========================================================================
47
// GNEApplicationWindowHelper::ToolbarsGrip method definitions
48
// ===========================================================================
49
50
GNEApplicationWindowHelper::ToolbarsGrip::ToolbarsGrip(GNEApplicationWindow* applicationWindow) :
51
myApplicationWindow(applicationWindow) {
52
}
53
54
55
void
56
GNEApplicationWindowHelper::ToolbarsGrip::buildMenuToolbarsGrip() {
57
// build menu bar (for File, edit, processing...) using specify design
58
myPythonToolBarShellMenu = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
59
menu = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellMenu, GUIDesignToolbarMenuBarNetedit);
60
// declare toolbar grip for menu bar
61
new FXToolBarGrip(menu, menu, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
62
}
63
64
65
void
66
GNEApplicationWindowHelper::ToolbarsGrip::buildViewParentToolbarsGrips() {
67
// build toolbar shells
68
myPythonToolBarShellSuperModes = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
69
myPythonToolBarShellSaveElements = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
70
myPythonToolBarShellTimeFormat = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
71
myPythonToolBarShellNavigation = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
72
myPythonToolBarShellModes = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
73
myPythonToolBarShellIntervalBar = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);
74
// build menu bars
75
superModes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellSuperModes, GUIDesignToolBarRaisedSupermodes);
76
saveElements = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellSaveElements, GUIDesignToolBarRaisedNext);
77
timeSwitch = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellTimeFormat, GUIDesignToolBarRaisedSame);
78
navigation = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellNavigation, GUIDesignToolBarRaisedSame);
79
if (OptionsCont::getOptions().getBool("gui-testing")) {
80
modes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellModes, GUIDesignToolBarRaisedNext);
81
} else {
82
modes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellModes, GUIDesignToolBarRaisedSame);
83
}
84
intervalBar = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellIntervalBar, GUIDesignToolBarRaisedNext);
85
// build FXToolBarGrip
86
new FXToolBarGrip(superModes, superModes, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
87
new FXToolBarGrip(saveElements, saveElements, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
88
new FXToolBarGrip(timeSwitch, timeSwitch, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
89
new FXToolBarGrip(navigation, navigation, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
90
new FXToolBarGrip(modes, modes, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
91
new FXToolBarGrip(intervalBar, intervalBar, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);
92
// create menu bars
93
superModes->create();
94
saveElements->create();
95
timeSwitch->create();
96
navigation->create();
97
modes->create();
98
intervalBar->create();
99
// create toolbar shells
100
myPythonToolBarShellSuperModes->create();
101
myPythonToolBarShellSaveElements->create();
102
myPythonToolBarShellTimeFormat->create();
103
myPythonToolBarShellNavigation->create();
104
myPythonToolBarShellModes->create();
105
myPythonToolBarShellIntervalBar->create();
106
// recalc top dop after creating elements
107
myApplicationWindow->getTopDock()->recalc();
108
}
109
110
111
void
112
GNEApplicationWindowHelper::ToolbarsGrip::destroyParentToolbarsGrips() {
113
// delete Menu bars
114
delete superModes;
115
delete saveElements;
116
delete timeSwitch;
117
delete navigation;
118
delete modes;
119
delete intervalBar;
120
// also delete toolbar shells to avoid floating windows
121
delete myPythonToolBarShellSuperModes;
122
delete myPythonToolBarShellSaveElements;
123
delete myPythonToolBarShellTimeFormat;
124
delete myPythonToolBarShellNavigation;
125
delete myPythonToolBarShellModes;
126
delete myPythonToolBarShellIntervalBar;
127
// recalc top dop after deleting elements
128
myApplicationWindow->getTopDock()->recalc();
129
}
130
131
// ===========================================================================
132
// GNEApplicationWindowHelper::MenuBarFile method definitions
133
// ===========================================================================
134
135
GNEApplicationWindowHelper::MenuBarFile::MenuBarFile(GNEApplicationWindow* applicationWindow) :
136
myRecentNetworks(applicationWindow->getApp(), TL("nets")),
137
myRecentConfigs(applicationWindow->getApp(), TL("configs")),
138
myApplicationWindow(applicationWindow) {
139
}
140
141
142
void
143
GNEApplicationWindowHelper::MenuBarFile::buildRecentNetworkFiles(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentNetworkFiles) {
144
// for whatever reason, sonar complains in the next line that sep1 may leak, but fox does the cleanup
145
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_1);
146
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_2);
147
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_3);
148
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_4);
149
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_5);
150
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_6);
151
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_7);
152
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_8);
153
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_9);
154
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_10);
155
new FXMenuSeparator(fileMenuRecentNetworkFiles); // NOSONAR, Fox does the cleanup
156
GUIDesigns::buildFXMenuCommand(fileMenuRecentNetworkFiles, TL("Cl&ear Recent Networks"), nullptr, &myRecentNetworks, FXRecentFiles::ID_CLEAR);
157
GUIDesigns::buildFXMenuCommand(fileMenuRecentNetworkFiles, TL("No Recent Networks"), nullptr, &myRecentNetworks, MFXRecentNetworks::ID_NOFILES);
158
// set target
159
myRecentNetworks.setTarget(myApplicationWindow);
160
myRecentNetworks.setSelector(MID_RECENTFILE);
161
new FXMenuCascade(fileMenu, TL("Recent Networks"), nullptr, fileMenuRecentNetworkFiles);
162
}
163
164
165
void
166
GNEApplicationWindowHelper::MenuBarFile::buildRecentConfigFiles(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentConfigFiles) {
167
// for whatever reason, sonar complains in the next line that sep1 may leak, but fox does the cleanup
168
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_1);
169
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_2);
170
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_3);
171
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_4);
172
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_5);
173
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_6);
174
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_7);
175
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_8);
176
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_9);
177
GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_10);
178
new FXMenuSeparator(fileMenuRecentConfigFiles); // NOSONAR, Fox does the cleanup
179
GUIDesigns::buildFXMenuCommand(fileMenuRecentConfigFiles, TL("Cl&ear Recent Configs"), nullptr, &myRecentConfigs, FXRecentFiles::ID_CLEAR);
180
GUIDesigns::buildFXMenuCommand(fileMenuRecentConfigFiles, TL("No Recent Configs"), nullptr, &myRecentConfigs, MFXRecentNetworks::ID_NOFILES);
181
// set target
182
myRecentConfigs.setTarget(myApplicationWindow);
183
myRecentConfigs.setSelector(MID_RECENTFILE);
184
new FXMenuCascade(fileMenu, TL("Recent Configs"), nullptr, fileMenuRecentConfigFiles);
185
}
186
187
// ---------------------------------------------------------------------------
188
// GNEApplicationWindowHelper::FileMenuCommands - methods
189
// ---------------------------------------------------------------------------
190
191
GNEApplicationWindowHelper::FileMenuCommands::FileMenuCommands(GNEApplicationWindow* applicationWindow) :
192
myApplicationWindow(applicationWindow) {
193
}
194
195
196
void
197
GNEApplicationWindowHelper::FileMenuCommands::buildFileMenuCommands(FXMenuPane* fileMenu, FXMenuPane* fileMenuNeteditConfig,
198
FXMenuPane* fileMenuSumoConfig, FXMenuPane* fileMenuTLS, FXMenuPane* fileMenuEdgeTypes, FXMenuPane* fileMenuAdditionals,
199
FXMenuPane* fileMenuDemandElements, FXMenuPane* fileMenuDataElements, FXMenuPane* fileMenuMeanDataElements) {
200
201
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
202
TL("New Network"), "Ctrl+N", TL("Create a new network."),
203
GUIIconSubSys::getIcon(GUIIcon::NEW_NET), myApplicationWindow, MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK);
204
205
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
206
TL("New Window"), "Ctrl+Shift+N", TL("Open a new netedit window."),
207
nullptr, myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW);
208
209
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
210
TL("Generate Network"), "", TL("Create network using netgenerate."),
211
GUIIconSubSys::getIcon(GUIIcon::NETGENERATE), myApplicationWindow, MID_GNE_NETGENERATE);
212
213
// load sumo/netedit configs
214
new FXMenuSeparator(fileMenu);
215
216
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
217
TL("Load Netedit config..."), "Ctrl+E", TL("Load a netedit configuration file."),
218
GUIIconSubSys::getIcon(GUIIcon::OPEN_NETEDITCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG);
219
220
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
221
TL("Load Sumo config..."), "Ctrl+M", TL("Load a SUMO configuration file."),
222
GUIIconSubSys::getIcon(GUIIcon::OPEN_SUMOCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_M_OPENSUMOCONFIG);
223
224
// load networks
225
new FXMenuSeparator(fileMenu);
226
227
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
228
TL("Open Network..."), "Ctrl+O", TL("Open a SUMO network."),
229
GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), myApplicationWindow, MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK);
230
231
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
232
TL("Open Netconvert Configuration..."), "Ctrl+Shift+O", TL("Open a configuration file with NETCONVERT options."),
233
GUIIconSubSys::getIcon(GUIIcon::OPEN), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE);
234
235
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
236
TL("Import Foreign Network..."), "", TL("Import a foreign network such as OSM."),
237
GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), myApplicationWindow, MID_GNE_TOOLBARFILE_OPENFOREIGN);
238
239
// save networks
240
new FXMenuSeparator(fileMenu);
241
242
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
243
TL("Save Network"), "Ctrl+S", TL("Save the network."),
244
GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK);
245
246
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
247
TL("Save Network As..."), "", TL("Save the network to another file."),
248
GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVENETWORK_AS);
249
250
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
251
TL("Save Plain XML..."), "Ctrl+L", TL("Save a plain XML representation of the network."),
252
GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_L_SAVEASPLAINXML);
253
254
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
255
TL("Save Joined Junctions..."), "", TL("Save log of joined junctions (allows reproduction of joins)."),
256
GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_SAVEJOINEDJUNCTIONS);
257
258
// reload
259
new FXMenuSeparator(fileMenu);
260
261
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
262
TL("Reload"), "Ctrl+R", TL("Reload the network."),
263
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_HOTKEY_CTRL_R_RELOAD);
264
265
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
266
TL("Reload Network"), "", TL("Reload the network."),
267
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOADNETWORK);
268
269
new FXMenuSeparator(fileMenu);
270
271
// create netedit config menu options
272
buildNeteditConfigSection(fileMenuNeteditConfig);
273
myNeteditConfigMenuCascade = new FXMenuCascade(fileMenu, TL("Netedit Config"), GUIIconSubSys::getIcon(GUIIcon::NETEDIT_MINI), fileMenuNeteditConfig);
274
275
// create SumoConfig menu options
276
buildSumoConfigSection(fileMenuSumoConfig);
277
mySumoConfigMenuCascade = new FXMenuCascade(fileMenu, TL("Sumo Config"), GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), fileMenuSumoConfig);
278
279
// create TLS menu options
280
buildTrafficLightSection(fileMenuTLS);
281
myTLSMenuCascade = new FXMenuCascade(fileMenu, TL("Traffic Lights"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), fileMenuTLS);
282
283
// create edgeTypes menu options
284
buildEdgeTypeSection(fileMenuEdgeTypes);
285
myEdgeTypesMenuCascade = new FXMenuCascade(fileMenu, TL("Edge Types"), GUIIconSubSys::getIcon(GUIIcon::MODECREATEEDGE), fileMenuEdgeTypes);
286
287
// create Additionals menu options
288
buildAdditionalSection(fileMenuAdditionals);
289
myAdditionalMenuCascade = new FXMenuCascade(fileMenu, TL("Additionals and Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODEADDITIONAL), fileMenuAdditionals);
290
291
// create DemandElements menu options
292
buildDemandSection(fileMenuDemandElements);
293
myDemandMenuCascade = new FXMenuCascade(fileMenu, TL("Demand Elements"), GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDEMAND), fileMenuDemandElements);
294
295
// create DataElements menu options
296
buildDataSection(fileMenuDataElements);
297
myDataMenuCascade = new FXMenuCascade(fileMenu, TL("Data Elements"), GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), fileMenuDataElements);
298
299
// create MeanDatas menu options
300
buildMeanDataSection(fileMenuMeanDataElements);
301
myMeanDataMenuCascade = new FXMenuCascade(fileMenu, TL("MeanData Elements"), GUIIconSubSys::getIcon(GUIIcon::MODEMEANDATA), fileMenuMeanDataElements);
302
303
// add checkBox for quick load
304
new FXMenuSeparator(fileMenu);
305
menuCheckAllowUndoRedoLoading = GUIDesigns::buildFXMenuCheckbox(fileMenu,
306
TL("Allow undoing element loading"), TL("Allow to undo loading of elements (Slow if a lot of elements are loaded)"),
307
myApplicationWindow, MID_GNE_TOGGLE_UNDOREDO_LOADING);
308
// set default value
309
menuCheckAllowUndoRedoLoading->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true));
310
311
// close network
312
new FXMenuSeparator(fileMenu);
313
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
314
TL("Close"), "Ctrl+W", TL("Close the network."),
315
GUIIconSubSys::getIcon(GUIIcon::CLOSE), myApplicationWindow, MID_HOTKEY_CTRL_W_CLOSESIMULATION);
316
}
317
318
319
void
320
GNEApplicationWindowHelper::FileMenuCommands::enableMenuCascades() {
321
mySumoConfigMenuCascade->enable();
322
myNeteditConfigMenuCascade->enable();
323
myTLSMenuCascade->enable();
324
myEdgeTypesMenuCascade->enable();
325
myAdditionalMenuCascade->enable();
326
myDemandMenuCascade->enable();
327
myDataMenuCascade->enable();
328
myMeanDataMenuCascade->enable();
329
}
330
331
332
void
333
GNEApplicationWindowHelper::FileMenuCommands::disableMenuCascades() {
334
mySumoConfigMenuCascade->disable();
335
myNeteditConfigMenuCascade->disable();
336
myTLSMenuCascade->disable();
337
myEdgeTypesMenuCascade->disable();
338
myAdditionalMenuCascade->disable();
339
myDemandMenuCascade->disable();
340
myDataMenuCascade->disable();
341
myMeanDataMenuCascade->disable();
342
}
343
344
345
void
346
GNEApplicationWindowHelper::FileMenuCommands::setDefaultView() {
347
myTLSMenuCascade->show();
348
myDataMenuCascade->show();
349
myMeanDataMenuCascade->show();
350
}
351
352
353
void
354
GNEApplicationWindowHelper::FileMenuCommands::setJuPedSimView() {
355
myTLSMenuCascade->hide();
356
myDataMenuCascade->hide();
357
myMeanDataMenuCascade->hide();
358
}
359
360
361
void
362
GNEApplicationWindowHelper::FileMenuCommands::buildNeteditConfigSection(FXMenuPane* menuPane) {
363
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
364
TL("Save Netedit Config"), "Ctrl+Shift+E", TL("Save netedit configuration file."),
365
GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG);
366
367
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
368
TL("Save Netedit Config As..."), "", TL("Save netedit configuration in a new file."),
369
GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS);
370
371
new FXMenuSeparator(menuPane);
372
373
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
374
TL("Reload Netedit Config"), "", TL("Reload netedit configuration."),
375
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG);
376
}
377
378
379
void
380
GNEApplicationWindowHelper::FileMenuCommands::buildSumoConfigSection(FXMenuPane* menuPane) {
381
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
382
TL("Save Sumo Config"), "Ctrl+Shift+S", TL("Save sumo configuration file."),
383
GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG);
384
385
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
386
TL("Save Sumo Config As..."), "", TL("Save sumo configuration in a new file."),
387
GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS);
388
389
new FXMenuSeparator(menuPane);
390
391
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
392
TL("Reload Sumo Config"), "", TL("Reload sumo configuration."),
393
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG);
394
}
395
396
397
void
398
GNEApplicationWindowHelper::FileMenuCommands::buildTrafficLightSection(FXMenuPane* menuPane) {
399
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
400
TL("Load TLS Programs..."), "Ctrl+K", TL("Load programs for traffic lights in the current net."),
401
GUIIconSubSys::getIcon(GUIIcon::OPEN_TLSPROGRAMS), myApplicationWindow, MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS);
402
403
new FXMenuSeparator(menuPane);
404
405
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
406
TL("Save TLS Programs"), "Ctrl+Shift+K", TL("Save all traffic light programs of the current network."),
407
GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_K_SAVETLS);
408
409
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
410
TL("Save TLS Programs As..."), "", TL("Save all traffic light programs of the current network to another file."),
411
GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS);
412
413
new FXMenuSeparator(menuPane);
414
415
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
416
TL("Reload TLS Programs"), "", TL("Reload TLS Programs."),
417
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS);
418
}
419
420
421
void
422
GNEApplicationWindowHelper::FileMenuCommands::buildEdgeTypeSection(FXMenuPane* menuPane) {
423
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
424
TL("Load Edge Types..."), "Ctrl+H", TL("Load edge types in the current net."),
425
GUIIconSubSys::getIcon(GUIIcon::OPEN_TLSPROGRAMS), myApplicationWindow, MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES);
426
427
new FXMenuSeparator(menuPane);
428
429
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
430
TL("Save Edge Types"), "Ctrl+Shift+H", TL("Save edge types of the current net."),
431
GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES);
432
433
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
434
TL("Save Edge Types As..."), "", TL("Save edge types of the current net to another file."),
435
GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS);
436
437
new FXMenuSeparator(menuPane);
438
439
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
440
TL("Reload edge types"), "", TL("Reload edge types."),
441
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES);
442
}
443
444
445
void
446
GNEApplicationWindowHelper::FileMenuCommands::buildAdditionalSection(FXMenuPane* menuPane) {
447
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
448
TL("Load Additionals..."), "Ctrl+A", TL("Load additionals and shapes."),
449
GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALELEMENTS);
450
451
new FXMenuSeparator(menuPane);
452
453
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
454
TL("Save Additionals"), "Ctrl+Shift+A", TL("Save additionals and shapes."),
455
GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS);
456
457
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
458
TL("Save Additionals unified as..."), "", TL("Save all additional elements to the chosen file."),
459
GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED);
460
461
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
462
TL("Save JuPedSim Elements as..."), "", TL("Save JuPedSim elements in a separated file."),
463
GUIIconSubSys::getIcon(GUIIcon::SAVE_JUPEDSIMELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS);
464
465
new FXMenuSeparator(menuPane);
466
467
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
468
TL("Reload Additionals"), "", TL("Reload additionals."),
469
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS);
470
}
471
472
473
void
474
GNEApplicationWindowHelper::FileMenuCommands::buildDemandSection(FXMenuPane* menuPane) {
475
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
476
TL("Load Demand Elements..."), "Ctrl+D", TL("Load demand elements."),
477
GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS);
478
479
new FXMenuSeparator(menuPane);
480
481
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
482
TL("Save Demand Elements"), "Ctrl+Shift+D", TL("Save demand elements."),
483
GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS);
484
485
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
486
TL("Save Demand Elements unified as..."), "", TL("Save all demand elements to the chosen file"),
487
GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_UNIFIED);
488
489
new FXMenuSeparator(menuPane);
490
491
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
492
TL("Reload Demand Elements"), "", TL("Reload demand elements."),
493
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS);
494
}
495
496
497
void
498
GNEApplicationWindowHelper::FileMenuCommands::buildDataSection(FXMenuPane* menuPane) {
499
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
500
TL("Load Data Elements..."), "Ctrl+B", TL("Load data elements."),
501
GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS);
502
503
new FXMenuSeparator(menuPane);
504
505
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
506
TL("Save Data Elements"), "Ctrl+Shift+B", TL("Save data elements."),
507
GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS);
508
509
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
510
TL("Save Data Elements unified as..."), "", TL("Save all data elements to the chosen file."),
511
GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED);
512
513
new FXMenuSeparator(menuPane);
514
515
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
516
TL("Reload Data Elements"), "", TL("Reload data elements."),
517
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS);
518
}
519
520
521
void
522
GNEApplicationWindowHelper::FileMenuCommands::buildMeanDataSection(FXMenuPane* menuPane) {
523
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
524
TL("Load MeanDatas..."), "", TL("Load meanDatas and shapes."),
525
GUIIconSubSys::getIcon(GUIIcon::OPEN_MEANDATAS), myApplicationWindow, MID_GNE_TOOLBARFILE_OPENMEANDATAELEMENTS);
526
527
new FXMenuSeparator(menuPane);
528
529
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
530
TL("Save MeanDatas"), "", TL("Save meanDatas and shapes."),
531
GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS);
532
533
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
534
TL("Save MeanDatas unified as..."), "Ctrl+Shift+M", TL("Save all meanData elements to the chosen file."),
535
GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED);
536
537
new FXMenuSeparator(menuPane);
538
539
GUIDesigns::buildFXMenuCommandShortcut(menuPane,
540
TL("Reload MeanDatas"), "", TL("Reload meanDatas."),
541
GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS);
542
}
543
544
// ---------------------------------------------------------------------------
545
// GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands - methods
546
// ---------------------------------------------------------------------------
547
548
GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands::CommonMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :
549
myModesMenuCommandsParent(modesMenuCommandsParent) {
550
}
551
552
553
void
554
GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands::buildCommonMenuCommands(FXMenuPane* modesMenu) {
555
// build every FXMenuCommand giving it a shortcut
556
inspectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
557
TL("&Inspect"), "I", TL("Inspect elements and change their attributes."),
558
GUIIconSubSys::getIcon(GUIIcon::MODEINSPECT), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_I_MODE_INSPECT);
559
deleteMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
560
TL("&Delete"), "D", TL("Delete elements."),
561
GUIIconSubSys::getIcon(GUIIcon::MODEDELETE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE);
562
selectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
563
TL("&Select"), "S", TL("Select elements."),
564
GUIIconSubSys::getIcon(GUIIcon::MODESELECT), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT);
565
}
566
567
// ---------------------------------------------------------------------------
568
// GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands - methods
569
// ---------------------------------------------------------------------------
570
571
GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::NetworkMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :
572
myModesMenuCommandsParent(modesMenuCommandsParent) {
573
}
574
575
576
void
577
GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::showNetworkMenuCommands() {
578
createEdgeMode->show();
579
moveMode->show();
580
connectMode->show();
581
prohibitionMode->show();
582
TLSMode->show();
583
additionalMode->show();
584
crossingMode->show();
585
TAZMode->show();
586
shapeMode->show();
587
wireMode->show();
588
decalMode->show();
589
}
590
591
592
void
593
GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::hideNetworkMenuCommands() {
594
createEdgeMode->hide();
595
moveMode->hide();
596
connectMode->hide();
597
prohibitionMode->hide();
598
TLSMode->hide();
599
additionalMode->hide();
600
crossingMode->hide();
601
TAZMode->hide();
602
shapeMode->hide();
603
wireMode->hide();
604
decalMode->hide();
605
}
606
607
608
void
609
GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::buildNetworkMenuCommands(FXMenuPane* modesMenu) {
610
// build every FXMenuCommand giving it a shortcut
611
moveMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
612
TL("&Move"), "M", TL("Move elements."),
613
GUIIconSubSys::getIcon(GUIIcon::MODEMOVE), myModesMenuCommandsParent->myApplicationWindow,
614
MID_HOTKEY_M_MODE_MOVE_MEANDATA);
615
createEdgeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
616
TL("&Edge"), "E", TL("Create junction and edges."),
617
GUIIconSubSys::getIcon(GUIIcon::MODECREATEEDGE), myModesMenuCommandsParent->myApplicationWindow,
618
MID_HOTKEY_E_MODE_EDGE_EDGEDATA);
619
TLSMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
620
TL("&Traffic light"), "T", TL("Modes traffic lights over junctions."),
621
GUIIconSubSys::getIcon(GUIIcon::MODETLS), myModesMenuCommandsParent->myApplicationWindow,
622
MID_HOTKEY_T_MODE_TLS_TYPE);
623
connectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
624
TL("&Connection"), "C", TL("Modes connections between lanes."),
625
GUIIconSubSys::getIcon(GUIIcon::MODECONNECTION), myModesMenuCommandsParent->myApplicationWindow,
626
MID_HOTKEY_C_MODE_CONNECT_CONTAINER);
627
prohibitionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
628
TL("Pro&hibition"), "H", TL("Modes connection prohibitions."),
629
GUIIconSubSys::getIcon(GUIIcon::MODEPROHIBITION), myModesMenuCommandsParent->myApplicationWindow,
630
MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN);
631
crossingMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
632
TL("C&rossing"), "R", TL("Create crossings between edges."),
633
GUIIconSubSys::getIcon(GUIIcon::MODECROSSING), myModesMenuCommandsParent->myApplicationWindow,
634
MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);
635
additionalMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
636
TL("&Additional"), "A", TL("Create additional elements."),
637
GUIIconSubSys::getIcon(GUIIcon::MODEADDITIONAL), myModesMenuCommandsParent->myApplicationWindow,
638
MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS);
639
wireMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
640
TL("&Wire"), "W", TL("Create wires."),
641
GUIIconSubSys::getIcon(GUIIcon::MODEWIRE), myModesMenuCommandsParent->myApplicationWindow,
642
MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION);
643
TAZMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
644
TL("TA&Z"), "Z", TL("Create Traffic Assignment Zones."),
645
GUIIconSubSys::getIcon(GUIIcon::MODETAZ), myModesMenuCommandsParent->myApplicationWindow,
646
MID_HOTKEY_Z_MODE_TAZ_TAZREL);
647
shapeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
648
TL("&POI-Poly"), "P", TL("Create Points-Of-Interest and polygons."),
649
GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myModesMenuCommandsParent->myApplicationWindow,
650
MID_HOTKEY_P_MODE_POLYGON_PERSON);
651
decalMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
652
TL("Deca&ls"), "U", TL("Create decals."),
653
GUIIconSubSys::getIcon(GUIIcon::MODEDECAL), myModesMenuCommandsParent->myApplicationWindow,
654
MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION);
655
}
656
657
// ---------------------------------------------------------------------------
658
// GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands - methods
659
// ---------------------------------------------------------------------------
660
661
GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::DemandMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :
662
myModesMenuCommandsParent(modesMenuCommandsParent) {
663
}
664
665
666
void
667
GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::showDemandMenuCommands() {
668
moveMode->show();
669
routeMode->show();
670
routeDistributionMode->show();
671
vehicleMode->show();
672
typeMode->show();
673
typeDistributionMode->show();
674
stopMode->show();
675
personMode->show();
676
personPlanMode->show();
677
containerMode->show();
678
containerPlanMode->show();
679
}
680
681
682
void
683
GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::hideDemandMenuCommands() {
684
moveMode->hide();
685
routeMode->hide();
686
routeDistributionMode->hide();
687
vehicleMode->hide();
688
typeMode->hide();
689
typeDistributionMode->hide();
690
stopMode->hide();
691
personMode->hide();
692
personPlanMode->hide();
693
containerMode->hide();
694
containerPlanMode->hide();
695
}
696
697
698
void
699
GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::buildDemandMenuCommands(FXMenuPane* modesMenu) {
700
// build every FXMenuCommand giving it a shortcut
701
moveMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
702
TL("&Move"), "M", TL("Move elements."),
703
GUIIconSubSys::getIcon(GUIIcon::MODEMOVE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_M_MODE_MOVE_MEANDATA);
704
routeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
705
TL("Route"), "R", TL("Create Routes."),
706
GUIIconSubSys::getIcon(GUIIcon::MODEROUTE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);
707
routeDistributionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
708
TL("Route distribution"), "W", TL("Create and edit route distributions."),
709
GUIIconSubSys::getIcon(GUIIcon::MODEROUTEDISTRIBUTION), myModesMenuCommandsParent->myApplicationWindow,
710
MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION);
711
vehicleMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
712
TL("Vehicle"), "V", TL("Create vehicles."),
713
GUIIconSubSys::getIcon(GUIIcon::MODEVEHICLE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_V_MODE_VEHICLE);
714
typeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
715
TL("Type"), "T", TL("Create types (vehicles, person and containers)."),
716
GUIIconSubSys::getIcon(GUIIcon::MODETYPE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_T_MODE_TLS_TYPE);
717
typeDistributionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
718
TL("TypeDistribution"), "U", TL("Create and edit type distributions."),
719
GUIIconSubSys::getIcon(GUIIcon::MODETYPEDISTRIBUTION), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION);
720
stopMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
721
TL("Stop"), "A", TL("Create stops."),
722
GUIIconSubSys::getIcon(GUIIcon::MODESTOP), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS);
723
personMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
724
TL("Person"), "P", TL("Create persons."),
725
GUIIconSubSys::getIcon(GUIIcon::MODEPERSON), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_P_MODE_POLYGON_PERSON);
726
personPlanMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
727
TL("Person plan"), "L", TL("Create person plans."),
728
GUIIconSubSys::getIcon(GUIIcon::MODEPERSONPLAN), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_L_MODE_PERSONPLAN);
729
containerMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
730
TL("Container"), "C", TL("Create containers."),
731
GUIIconSubSys::getIcon(GUIIcon::MODECONTAINER), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_C_MODE_CONNECT_CONTAINER);
732
containerPlanMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
733
TL("Container plan"), "H", TL("Create container plans."),
734
GUIIconSubSys::getIcon(GUIIcon::MODECONTAINERPLAN), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN);
735
}
736
737
// ---------------------------------------------------------------------------
738
// GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands - methods
739
// ---------------------------------------------------------------------------
740
741
GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::DataMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :
742
myModesMenuCommandsParent(modesMenuCommandsParent) {
743
}
744
745
746
void
747
GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::showDataMenuCommands() {
748
edgeData->show();
749
edgeRelData->show();
750
TAZRelData->show();
751
meanData->show();
752
}
753
754
755
void
756
GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::hideDataMenuCommands() {
757
edgeData->hide();
758
edgeRelData->hide();
759
TAZRelData->hide();
760
meanData->hide();
761
}
762
763
764
void
765
GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::buildDataMenuCommands(FXMenuPane* modesMenu) {
766
// build every FXMenuCommand giving it a shortcut
767
edgeData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
768
TL("&EdgeData"), "E", TL("Create edgeData elements."),
769
GUIIconSubSys::getIcon(GUIIcon::MODEEDGEDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_E_MODE_EDGE_EDGEDATA);
770
edgeRelData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
771
TL("Edge&Relation"), "R", TL("Create edgeRelation elements."),
772
GUIIconSubSys::getIcon(GUIIcon::MODEEDGERELDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);
773
TAZRelData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
774
TL("TA&ZRelation"), "Z", TL("Create TAZRelation elements."),
775
GUIIconSubSys::getIcon(GUIIcon::MODETAZRELDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_Z_MODE_TAZ_TAZREL);
776
meanData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,
777
TL("&MeanData"), "M", TL("Create MeanData edge/lanes."),
778
GUIIconSubSys::getIcon(GUIIcon::MODEMEANDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_M_MODE_MOVE_MEANDATA);
779
}
780
781
782
// ---------------------------------------------------------------------------
783
// GNEApplicationWindowHelper::ModesMenuCommands - methods
784
// ---------------------------------------------------------------------------
785
#ifdef _MSC_VER
786
#pragma warning(push)
787
#pragma warning(disable: 4355) // mask warning about "this" in initializers
788
#endif
789
GNEApplicationWindowHelper::ModesMenuCommands::ModesMenuCommands(GNEApplicationWindow* applicationWindow) :
790
commonMenuCommands(this),
791
networkMenuCommands(this),
792
demandMenuCommands(this),
793
dataMenuCommands(this),
794
myApplicationWindow(applicationWindow) {
795
}
796
#ifdef _MSC_VER
797
#pragma warning(pop)
798
#endif
799
800
801
void
802
GNEApplicationWindowHelper::ModesMenuCommands::buildModesMenuCommands(FXMenuPane* modesMenu) {
803
commonMenuCommands.buildCommonMenuCommands(modesMenu);
804
// build Network modes commands and hide it
805
networkMenuCommands.buildNetworkMenuCommands(modesMenu);
806
networkMenuCommands.hideNetworkMenuCommands();
807
// build Demand Modes commands
808
demandMenuCommands.buildDemandMenuCommands(modesMenu);
809
demandMenuCommands.hideDemandMenuCommands();
810
// build Data Modes commands
811
dataMenuCommands.buildDataMenuCommands(modesMenu);
812
dataMenuCommands.hideDataMenuCommands();
813
}
814
815
816
void
817
GNEApplicationWindowHelper::ModesMenuCommands::setDefaultView(Supermode supermode) {
818
if (supermode == Supermode::NETWORK) {
819
networkMenuCommands.showNetworkMenuCommands();
820
} else if (supermode == Supermode::DEMAND) {
821
demandMenuCommands.showDemandMenuCommands();
822
} else if (supermode == Supermode::DATA) {
823
dataMenuCommands.showDataMenuCommands();
824
}
825
}
826
827
828
void
829
GNEApplicationWindowHelper::ModesMenuCommands::setJuPedSimView(Supermode supermode) {
830
if (supermode == Supermode::NETWORK) {
831
networkMenuCommands.connectMode->hide();
832
networkMenuCommands.TLSMode->hide();
833
networkMenuCommands.prohibitionMode->hide();
834
networkMenuCommands.wireMode->hide();
835
networkMenuCommands.decalMode->hide();
836
} else if (supermode == Supermode::DEMAND) {
837
demandMenuCommands.moveMode->hide();
838
demandMenuCommands.vehicleMode->hide();
839
demandMenuCommands.stopMode->hide();
840
demandMenuCommands.containerMode->hide();
841
demandMenuCommands.containerPlanMode->hide();
842
} else if (supermode == Supermode::DATA) {
843
dataMenuCommands.hideDataMenuCommands();
844
}
845
}
846
847
// ---------------------------------------------------------------------------
848
// GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions - methods
849
// ---------------------------------------------------------------------------
850
851
GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::NetworkViewOptions(GNEApplicationWindow* applicationWindow) :
852
myApplicationWindow(applicationWindow) {
853
}
854
855
856
void
857
GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::buildNetworkViewOptionsMenuChecks(FXMenuPane* editMenu) {
858
// create menu checks
859
menuCheckToggleGrid = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
860
TL("Show grid"), "Ctrl+G or Alt+1", "",
861
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEGRID),
862
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID);
863
864
menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
865
TL("Hide junction shape"), "Ctrl+J or Alt+2", "",
866
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),
867
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);
868
869
menuCheckDrawSpreadVehicles = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
870
TL("Draw vehicles spread in lane or in depart position"), "Alt+3", "",
871
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SPREADVEHICLE),
872
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES);
873
874
menuCheckShowDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
875
TL("Show demand elements"), "Alt+4", "",
876
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS),
877
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS);
878
879
menuCheckSelectEdges = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
880
TL("Clicking should target lanes"), "Alt+5", "",
881
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SELECTEDGES),
882
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES);
883
884
menuCheckShowConnections = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
885
TL("Show connections over junctions"), "Alt+6", "",
886
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWCONNECTIONS),
887
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS);
888
889
menuCheckHideConnections = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
890
TL("Hide connections"), "Alt+7", "",
891
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_HIDECONNECTIONS),
892
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS);
893
894
menuCheckShowAdditionalSubElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
895
TL("Show sub-additional elements"), "Alt+8", "",
896
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWSUBADDITIONALS),
897
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS);
898
899
menuCheckShowTAZElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
900
TL("Show TAZ elements"), "Alt+9", "",
901
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWTAZELEMENTS),
902
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS);
903
904
menuCheckExtendSelection = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
905
TL("Selecting multiple edges automatically select their junctions"), "Alt+10", "",
906
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_AUTOSELECTJUNCTIONS),
907
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION);
908
909
menuCheckChangeAllPhases = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
910
TL("Clicking should apply state changes to all phases of TLS plan"), "Alt+5", "",
911
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_APPLYTOALLPHASES),
912
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES);
913
914
menuCheckMergeAutomatically = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
915
TL("Don't ask for confirmation before merging junction"), "Alt+5", "",
916
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_MERGEAUTOMATICALLY),
917
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY);
918
919
menuCheckChainEdges = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
920
TL("Create consecutive edges"), "Alt+5", "",
921
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_CHAIN),
922
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES);
923
924
menuCheckAutoOppositeEdge = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
925
TL("Create an edge in the opposite direction"), "Alt+6", "",
926
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_TWOWAY),
927
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES);
928
929
menuCheckMoveElevation = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
930
TL("Apply mouse movement to elevation"), "Alt+7", "",
931
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_ELEVATION),
932
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION);
933
934
menuCheckShowJunctionBubble = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
935
TL("Show bubbles over junctions shapes"), "Alt+8", "",
936
GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_BUBBLES),
937
myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES);
938
939
// build separator
940
separator = new FXMenuSeparator(editMenu);
941
}
942
943
944
void
945
GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::hideNetworkViewOptionsMenuChecks() {
946
menuCheckToggleGrid->hide();
947
menuCheckToggleDrawJunctionShape->hide();
948
menuCheckDrawSpreadVehicles->hide();
949
menuCheckShowDemandElements->hide();
950
menuCheckSelectEdges->hide();
951
menuCheckShowConnections->hide();
952
menuCheckHideConnections->hide();
953
menuCheckShowAdditionalSubElements->hide();
954
menuCheckShowTAZElements->hide();
955
menuCheckExtendSelection->hide();
956
menuCheckChangeAllPhases->hide();
957
menuCheckMergeAutomatically->hide();
958
menuCheckShowJunctionBubble->hide();
959
menuCheckMoveElevation->hide();
960
menuCheckChainEdges->hide();
961
menuCheckAutoOppositeEdge->hide();
962
separator->hide();
963
}
964
965
966
void
967
GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::updateShortcuts() {
968
int index = 2;
969
// update all accel text
970
if (menuCheckDrawSpreadVehicles->shown()) {
971
menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());
972
index++;
973
}
974
if (menuCheckDrawSpreadVehicles->shown()) {
975
menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());
976
index++;
977
}
978
if (menuCheckShowDemandElements->shown()) {
979
menuCheckShowDemandElements->setAccelText(("Alt+" + toString(index)).c_str());
980
index++;
981
}
982
if (menuCheckSelectEdges->shown()) {
983
menuCheckSelectEdges->setAccelText(("Alt+" + toString(index)).c_str());
984
index++;
985
}
986
if (menuCheckShowConnections->shown()) {
987
menuCheckShowConnections->setAccelText(("Alt+" + toString(index)).c_str());
988
index++;
989
}
990
if (menuCheckHideConnections->shown()) {
991
menuCheckHideConnections->setAccelText(("Alt+" + toString(index)).c_str());
992
index++;
993
}
994
if (menuCheckShowAdditionalSubElements->shown()) {
995
menuCheckShowAdditionalSubElements->setAccelText(("Alt+" + toString(index)).c_str());
996
index++;
997
}
998
if (menuCheckShowTAZElements->shown()) {
999
menuCheckShowTAZElements->setAccelText(("Alt+" + toString(index)).c_str());
1000
index++;
1001
}
1002
if (menuCheckExtendSelection->shown()) {
1003
menuCheckExtendSelection->setAccelText(("Alt+" + toString(index)).c_str());
1004
index++;
1005
}
1006
if (menuCheckChangeAllPhases->shown()) {
1007
menuCheckChangeAllPhases->setAccelText(("Alt+" + toString(index)).c_str());
1008
index++;
1009
}
1010
if (menuCheckMergeAutomatically->shown()) {
1011
menuCheckMergeAutomatically->setAccelText(("Alt+" + toString(index)).c_str());
1012
index++;
1013
}
1014
if (menuCheckChainEdges->shown()) {
1015
menuCheckChainEdges->setAccelText(("Alt+" + toString(index)).c_str());
1016
index++;
1017
}
1018
if (menuCheckAutoOppositeEdge->shown()) {
1019
menuCheckAutoOppositeEdge->setAccelText(("Alt+" + toString(index)).c_str());
1020
index++;
1021
}
1022
if (menuCheckMoveElevation->shown()) {
1023
menuCheckMoveElevation->setAccelText(("Alt+" + toString(index)).c_str());
1024
index++;
1025
}
1026
if (menuCheckShowJunctionBubble->shown()) {
1027
menuCheckShowJunctionBubble->setAccelText(("Alt+" + toString(index)).c_str());
1028
index++;
1029
}
1030
}
1031
1032
// ---------------------------------------------------------------------------
1033
// GNEApplicationWindowHelper::DemandViewOptions - methods
1034
// ---------------------------------------------------------------------------
1035
1036
GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::DemandViewOptions(GNEApplicationWindow* applicationWindow) :
1037
myApplicationWindow(applicationWindow) {
1038
}
1039
1040
1041
void
1042
GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::buildDemandViewOptionsMenuChecks(FXMenuPane* editMenu) {
1043
// create menu checks
1044
menuCheckToggleGrid = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1045
TL("Show grid"), "Ctrl+G or Alt+1", "",
1046
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEGRID),
1047
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID);
1048
1049
menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1050
TL("Hide junction shape"), "Ctrl+J or Alt+2", "",
1051
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),
1052
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);
1053
1054
menuCheckDrawSpreadVehicles = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1055
TL("Draw vehicles spread/depart position"), "Alt+3", "",
1056
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SPREADVEHICLE),
1057
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES);
1058
1059
menuCheckHideShapes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1060
TL("Show shapes"), "Alt+4", "",
1061
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_HIDESHAPES),
1062
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES);
1063
1064
menuCheckShowAllTrips = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1065
TL("Show all trips"), "Alt+5", "",
1066
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWTRIPS),
1067
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS);
1068
1069
menuCheckShowAllPersonPlans = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1070
TL("Show all person plans"), "Alt+6", "",
1071
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWPERSONPLANS),
1072
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS);
1073
1074
menuCheckLockPerson = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1075
TL("Lock selected person"), "Alt+7", "",
1076
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_LOCKPERSON),
1077
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON);
1078
1079
menuCheckShowAllContainerPlans = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1080
TL("Show all container plans"), "Alt+6", "",
1081
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWCONTAINERPLANS),
1082
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS);
1083
1084
menuCheckLockContainer = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1085
TL("Lock selected container"), "Alt+7", "",
1086
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_LOCKCONTAINER),
1087
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER);
1088
1089
menuCheckHideNonInspectedDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1090
TL("Show non-inspected demand elements"), "Alt+8", "",
1091
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_HIDENONINSPECTEDDEMANDELEMENTS),
1092
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED);
1093
1094
menuCheckShowOverlappedRoutes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1095
TL("Show number of overlapped routes"), "Alt+9", "",
1096
GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWOVERLAPPEDROUTES),
1097
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES);
1098
1099
// build separator
1100
separator = new FXMenuSeparator(editMenu);
1101
}
1102
1103
1104
void
1105
GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::hideDemandViewOptionsMenuChecks() {
1106
menuCheckToggleGrid->hide();
1107
menuCheckToggleDrawJunctionShape->hide();
1108
menuCheckDrawSpreadVehicles->hide();
1109
menuCheckHideShapes->hide();
1110
menuCheckShowAllTrips->hide();
1111
menuCheckHideNonInspectedDemandElements->hide();
1112
menuCheckShowOverlappedRoutes->hide();
1113
menuCheckShowAllPersonPlans->hide();
1114
menuCheckLockPerson->hide();
1115
menuCheckShowAllContainerPlans->hide();
1116
menuCheckLockContainer->hide();
1117
separator->hide();
1118
}
1119
1120
1121
void
1122
GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::updateShortcuts() {
1123
int index = 2;
1124
// update all accel text
1125
if (menuCheckDrawSpreadVehicles->shown()) {
1126
menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());
1127
index++;
1128
}
1129
if (menuCheckHideShapes->shown()) {
1130
menuCheckHideShapes->setAccelText(("Alt+" + toString(index)).c_str());
1131
index++;
1132
}
1133
if (menuCheckShowAllTrips->shown()) {
1134
menuCheckShowAllTrips->setAccelText(("Alt+" + toString(index)).c_str());
1135
index++;
1136
}
1137
if (menuCheckHideNonInspectedDemandElements->shown()) {
1138
menuCheckHideNonInspectedDemandElements->setAccelText(("Alt+" + toString(index)).c_str());
1139
index++;
1140
}
1141
if (menuCheckShowOverlappedRoutes->shown()) {
1142
menuCheckShowOverlappedRoutes->setAccelText(("Alt+" + toString(index)).c_str());
1143
index++;
1144
}
1145
if (menuCheckShowAllPersonPlans->shown()) {
1146
menuCheckShowAllPersonPlans->setAccelText(("Alt+" + toString(index)).c_str());
1147
index++;
1148
}
1149
if (menuCheckLockPerson->shown()) {
1150
menuCheckLockPerson->setAccelText(("Alt+" + toString(index)).c_str());
1151
index++;
1152
}
1153
if (menuCheckShowAllContainerPlans->shown()) {
1154
menuCheckShowAllContainerPlans->setAccelText(("Alt+" + toString(index)).c_str());
1155
index++;
1156
}
1157
if (menuCheckLockContainer->shown()) {
1158
menuCheckLockContainer->setAccelText(("Alt+" + toString(index)).c_str());
1159
index++;
1160
}
1161
}
1162
1163
// ---------------------------------------------------------------------------
1164
// GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions - methods
1165
// ---------------------------------------------------------------------------
1166
1167
GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::DataViewOptions(GNEApplicationWindow* applicationWindow) :
1168
myApplicationWindow(applicationWindow) {
1169
}
1170
1171
1172
void
1173
GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::buildDataViewOptionsMenuChecks(FXMenuPane* editMenu) {
1174
// create menu checks
1175
menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1176
TL("Hide junction shape"), "Ctrl+J or Alt+1", "",
1177
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),
1178
myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);
1179
1180
menuCheckShowAdditionals = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1181
TL("Show additionals"), "Alt+2", "",
1182
GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_SHOWADDITIONALS),
1183
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS);
1184
1185
menuCheckShowShapes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1186
TL("Show shapes"), "Alt+3", "",
1187
GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_SHOWSHAPES),
1188
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES);
1189
1190
menuCheckShowDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1191
TL("Show demand elements"), "Alt+4", "",
1192
GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS),
1193
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS);
1194
1195
menuCheckToggleTAZRelDrawing = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1196
TL("Draw TAZRel from center"), "Alt+5", "",
1197
GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELDRAWING),
1198
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING);
1199
1200
menuCheckToggleTAZDrawFill = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1201
TL("Draw TAZ fill"), "Alt+6", "",
1202
GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZDRAWFILL),
1203
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL);
1204
1205
menuCheckToggleTAZRelOnlyFrom = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1206
TL("Only draw TAZRel from"), "Alt+6", "",
1207
GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELONLYFROM),
1208
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM);
1209
1210
menuCheckToggleTAZRelOnlyTo = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,
1211
TL("Only draw TAZRel to"), "Alt+7", "",
1212
GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELONLYTO),
1213
myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO);
1214
// build separator
1215
separator = new FXMenuSeparator(editMenu);
1216
}
1217
1218
1219
void
1220
GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::hideDataViewOptionsMenuChecks() {
1221
menuCheckToggleDrawJunctionShape->hide();
1222
menuCheckShowAdditionals->hide();
1223
menuCheckShowShapes->hide();
1224
menuCheckShowDemandElements->hide();
1225
menuCheckToggleTAZRelDrawing->hide();
1226
menuCheckToggleTAZDrawFill->hide();
1227
menuCheckToggleTAZRelOnlyFrom->hide();
1228
menuCheckToggleTAZRelOnlyTo->hide();
1229
separator->hide();
1230
}
1231
1232
1233
void
1234
GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::updateShortcuts() {
1235
int index = 2;
1236
// update all accel text
1237
if (menuCheckShowAdditionals->shown()) {
1238
menuCheckShowAdditionals->setAccelText(("Alt+" + toString(index)).c_str());
1239
index++;
1240
}
1241
if (menuCheckShowShapes->shown()) {
1242
menuCheckShowShapes->setAccelText(("Alt+" + toString(index)).c_str());
1243
index++;
1244
}
1245
if (menuCheckShowDemandElements->shown()) {
1246
menuCheckShowDemandElements->setAccelText(("Alt+" + toString(index)).c_str());
1247
index++;
1248
}
1249
if (menuCheckToggleTAZRelDrawing->shown()) {
1250
menuCheckToggleTAZRelDrawing->setAccelText(("Alt+" + toString(index)).c_str());
1251
index++;
1252
}
1253
if (menuCheckToggleTAZDrawFill->shown()) {
1254
menuCheckToggleTAZDrawFill->setAccelText(("Alt+" + toString(index)).c_str());
1255
index++;
1256
}
1257
if (menuCheckToggleTAZRelOnlyFrom->shown()) {
1258
menuCheckToggleTAZRelOnlyFrom->setAccelText(("Alt+" + toString(index)).c_str());
1259
index++;
1260
}
1261
if (menuCheckToggleTAZRelOnlyTo->shown()) {
1262
menuCheckToggleTAZRelOnlyTo->setAccelText(("Alt+" + toString(index)).c_str());
1263
index++;
1264
}
1265
}
1266
1267
// ---------------------------------------------------------------------------
1268
// GNEApplicationWindowHelper::EditMenuCommands - methods
1269
// ---------------------------------------------------------------------------
1270
1271
GNEApplicationWindowHelper::EditMenuCommands::EditMenuCommands(GNEApplicationWindow* applicationWindow) :
1272
networkViewOptions(applicationWindow),
1273
demandViewOptions(applicationWindow),
1274
dataViewOptions(applicationWindow),
1275
myApplicationWindow(applicationWindow) {
1276
}
1277
1278
1279
void
1280
GNEApplicationWindowHelper::EditMenuCommands::buildUndoRedoMenuCommands(FXMenuPane* editMenu) {
1281
// build undo/redo command
1282
undoLastChange = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1283
TL("Undo"), "Ctrl+Z", TL("Undo the last change."),
1284
GUIIconSubSys::getIcon(GUIIcon::UNDO), myApplicationWindow, MID_HOTKEY_CTRL_Z_UNDO);
1285
redoLastChange = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1286
TL("Redo"), "Ctrl+Y", TL("Redo the last change."),
1287
GUIIconSubSys::getIcon(GUIIcon::REDO), myApplicationWindow, MID_HOTKEY_CTRL_Y_REDO);
1288
openUndolistDialog = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1289
TL("Show undo/redo history"), "", TL("Open undo/redo history dialog."),
1290
GUIIconSubSys::getIcon(GUIIcon::UNDOLIST), myApplicationWindow, MID_GNE_UNDOLISTDIALOG);
1291
// add checkBox for recomputing in data mode
1292
menuCheckAllowUndoRedo = GUIDesigns::buildFXMenuCheckbox(editMenu,
1293
TL("Allow undo-redo"), "",
1294
myApplicationWindow, MID_GNE_TOGGLE_UNDOREDO);
1295
menuCheckAllowUndoRedo->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true));
1296
}
1297
1298
1299
void
1300
GNEApplicationWindowHelper::EditMenuCommands::buildViewMenuCommands(FXMenuPane* editMenu) {
1301
// build rest of menu commands
1302
editViewScheme = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1303
TL("Edit Visualisation"), "F9", TL("Opens a dialog for editing visualization settings."),
1304
GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), myApplicationWindow, MID_HOTKEY_F9_EDIT_VIEWSCHEME);
1305
editViewPort = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1306
TL("Edit Viewport"), "Ctrl+I", TL("Opens a dialog for editing viewing area, zoom and rotation."),
1307
GUIIconSubSys::getIcon(GUIIcon::EDITVIEWPORT), myApplicationWindow, MID_HOTKEY_CTRL_I_EDITVIEWPORT);
1308
}
1309
1310
1311
void
1312
GNEApplicationWindowHelper::EditMenuCommands::buildFrontElementMenuCommand(FXMenuPane* editMenu) {
1313
// build toggle front element
1314
toggleFrontElement = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1315
TL("Front element"), "F11", TL("Mark current inspected element as front element"),
1316
GUIIconSubSys::getIcon(GUIIcon::FRONTELEMENT), myApplicationWindow, MID_HOTKEY_F11_FRONTELEMENT);
1317
}
1318
1319
1320
void
1321
GNEApplicationWindowHelper::EditMenuCommands::buildOpenSUMOMenuCommands(FXMenuPane* editMenu) {
1322
// add open in sumo options
1323
loadAdditionalsInSUMOGUI = GUIDesigns::buildFXMenuCheckbox(editMenu,
1324
TL("Load additionals in sumo-gui"), TL("Load additionals in sumo-gui."),
1325
myApplicationWindow, MID_TOOLBAREDIT_LOADADDITIONALS);
1326
loadAdditionalsInSUMOGUI->setCheck(TRUE);
1327
loadDemandInSUMOGUI = GUIDesigns::buildFXMenuCheckbox(editMenu,
1328
TL("Load demand in sumo-gui"), TL("Load demand in sumo-gui."),
1329
myApplicationWindow, MID_TOOLBAREDIT_LOADDEMAND);
1330
loadDemandInSUMOGUI->setCheck(TRUE);
1331
openInSUMOGUI = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
1332
TL("Open in sumo-gui"), "Ctrl+T", TL("Opens the sumo-gui application with the current network."),
1333
GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), myApplicationWindow, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
1334
}
1335
1336
// ---------------------------------------------------------------------------
1337
// GNEApplicationWindowHelper::LockMenuCommands - methods
1338
// ---------------------------------------------------------------------------
1339
1340
GNEApplicationWindowHelper::LockMenuCommands::LockMenuCommands(GNEApplicationWindow* applicationWindow) :
1341
myApplicationWindow(applicationWindow) {
1342
}
1343
1344
1345
void
1346
GNEApplicationWindowHelper::LockMenuCommands::buildLockMenuCommands(FXMenuPane* fileMenu) {
1347
// network
1348
menuCheckLockJunctions = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1349
TL("&Junctions"), "", "",
1350
GUIIconSubSys::getIcon(GUIIcon::JUNCTION),
1351
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1352
1353
menuCheckLockEdges = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1354
TL("&Edges"), "", "",
1355
GUIIconSubSys::getIcon(GUIIcon::EDGE),
1356
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1357
1358
menuCheckLockLanes = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1359
TL("&Lanes"), "", "",
1360
GUIIconSubSys::getIcon(GUIIcon::LANE),
1361
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1362
1363
menuCheckLockConnections = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1364
TL("&Connections"), "", "",
1365
GUIIconSubSys::getIcon(GUIIcon::CONNECTION),
1366
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1367
1368
menuCheckLockCrossings = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1369
TL("C&rossings"), "", "",
1370
GUIIconSubSys::getIcon(GUIIcon::CROSSING),
1371
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1372
1373
menuCheckLockWalkingAreas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1374
TL("Walkin&gAreas"), "", "",
1375
GUIIconSubSys::getIcon(GUIIcon::WALKINGAREA),
1376
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1377
1378
menuCheckLockAdditionals = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1379
TL("&Additionals"), "", "",
1380
GUIIconSubSys::getIcon(GUIIcon::BUSSTOP),
1381
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1382
1383
menuCheckLockTAZs = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1384
TL("&TAZs"), "", "",
1385
GUIIconSubSys::getIcon(GUIIcon::TAZ),
1386
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1387
1388
menuCheckLockWires = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1389
TL("&Wires"), "", "",
1390
GUIIconSubSys::getIcon(GUIIcon::OVERHEADWIRE),
1391
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1392
1393
menuCheckLockPolygons = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1394
TL("&Polygons"), "", "",
1395
GUIIconSubSys::getIcon(GUIIcon::POLY),
1396
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1397
1398
menuCheckLockPOIs = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1399
TL("P&OIs"), "", "",
1400
GUIIconSubSys::getIcon(GUIIcon::POI),
1401
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1402
1403
menuCheckLockJpsWalkableAreas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1404
TL("WalkableAreas"), "", "",
1405
GUIIconSubSys::getIcon(GUIIcon::JPS_WALKABLEAREA),
1406
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1407
1408
menuCheckLockJpsObstacles = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1409
TL("Obstacles"), "", "",
1410
GUIIconSubSys::getIcon(GUIIcon::JPS_OBSTACLE),
1411
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1412
// demand
1413
menuCheckLockRoutes = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1414
TL("&Routes"), "", "",
1415
GUIIconSubSys::getIcon(GUIIcon::ROUTE),
1416
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1417
1418
menuCheckLockVehicles = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1419
TL("&Vehicles"), "", "",
1420
GUIIconSubSys::getIcon(GUIIcon::VEHICLE),
1421
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1422
1423
menuCheckLockPersons = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1424
TL("&Persons"), "", "",
1425
GUIIconSubSys::getIcon(GUIIcon::PERSON),
1426
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1427
1428
menuCheckLockPersonTrips = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1429
TL("Person&Trips"), "", "",
1430
GUIIconSubSys::getIcon(GUIIcon::PERSONTRIP_EDGE),
1431
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1432
1433
menuCheckLockWalks = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1434
TL("&Walks"), "", "",
1435
GUIIconSubSys::getIcon(GUIIcon::WALK_EDGE),
1436
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1437
1438
menuCheckLockRides = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1439
TL("Ri&des"), "", "",
1440
GUIIconSubSys::getIcon(GUIIcon::RIDE_EDGE),
1441
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1442
1443
menuCheckLockContainers = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1444
TL("&Containers"), "", "",
1445
GUIIconSubSys::getIcon(GUIIcon::CONTAINER),
1446
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1447
1448
menuCheckLockTransports = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1449
TL("Tra&nsports"), "", "",
1450
GUIIconSubSys::getIcon(GUIIcon::TRANSPORT_EDGE),
1451
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1452
1453
menuCheckLockTranships = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1454
TL("Trans&hips"), "", "",
1455
GUIIconSubSys::getIcon(GUIIcon::TRANSHIP_EDGE),
1456
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1457
1458
menuCheckLockStops = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1459
TL("Stop&s"), "", "",
1460
GUIIconSubSys::getIcon(GUIIcon::STOPELEMENT),
1461
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1462
// data
1463
menuCheckLockEdgeDatas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1464
TL("&EdgeDatas"), "", "",
1465
GUIIconSubSys::getIcon(GUIIcon::EDGEDATA),
1466
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1467
1468
menuCheckLockEdgeRelDatas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1469
TL("E&dgeRelDatas"), "", "",
1470
GUIIconSubSys::getIcon(GUIIcon::EDGERELDATA),
1471
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1472
1473
menuCheckLockEdgeTAZRels = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1474
TL("Edge&TAZRel"), "", "",
1475
GUIIconSubSys::getIcon(GUIIcon::TAZRELDATA),
1476
myApplicationWindow, MID_GNE_LOCK_ELEMENT);
1477
1478
// separator
1479
new FXMenuSeparator(fileMenu);
1480
1481
menuCheckLockSelectedElements = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,
1482
TL("Lock selected elements"), "", TL("selected elements"),
1483
GUIIconSubSys::getIcon(GUIIcon::LOCK_SELECTED), myApplicationWindow, MID_GNE_LOCK_SELECTEDELEMENTS);
1484
1485
// separator
1486
new FXMenuSeparator(fileMenu);
1487
1488
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
1489
TL("Lock all elements"), "", TL("all elements"),
1490
GUIIconSubSys::getIcon(GUIIcon::LOCK), myApplicationWindow, MID_GNE_LOCK_ALLELEMENTS);
1491
1492
GUIDesigns::buildFXMenuCommandShortcut(fileMenu,
1493
TL("Unlock all elements"), "", TL("Unlock all elements"),
1494
GUIIconSubSys::getIcon(GUIIcon::UNLOCK), myApplicationWindow, MID_GNE_UNLOCK_ALLELEMENTS);
1495
}
1496
1497
1498
void
1499
GNEApplicationWindowHelper::LockMenuCommands::removeHotkeys() {
1500
// network
1501
menuCheckLockJunctions->remHotKey(parseHotKey('j'));
1502
menuCheckLockEdges->remHotKey(parseHotKey('e'));
1503
menuCheckLockLanes->remHotKey(parseHotKey('l'));
1504
menuCheckLockConnections->remHotKey(parseHotKey('c'));
1505
menuCheckLockCrossings->remHotKey(parseHotKey('r'));
1506
menuCheckLockWalkingAreas->remHotKey(parseHotKey('g'));
1507
menuCheckLockAdditionals->remHotKey(parseHotKey('a'));
1508
menuCheckLockTAZs->remHotKey(parseHotKey('t'));
1509
menuCheckLockWires->remHotKey(parseHotKey('w'));
1510
menuCheckLockPolygons->remHotKey(parseHotKey('p'));
1511
menuCheckLockPOIs->remHotKey(parseHotKey('o'));
1512
menuCheckLockJpsWalkableAreas->remHotKey(parseHotKey('n'));
1513
menuCheckLockJpsObstacles->remHotKey(parseHotKey('b'));
1514
// demand
1515
menuCheckLockRoutes->remHotKey(parseHotKey('r'));
1516
menuCheckLockVehicles->remHotKey(parseHotKey('v'));
1517
menuCheckLockPersons->remHotKey(parseHotKey('p'));
1518
menuCheckLockPersonTrips->remHotKey(parseHotKey('t'));
1519
menuCheckLockWalks->remHotKey(parseHotKey('w'));
1520
menuCheckLockRides->remHotKey(parseHotKey('d'));
1521
menuCheckLockContainers->remHotKey(parseHotKey('c'));
1522
menuCheckLockTransports->remHotKey(parseHotKey('n'));
1523
menuCheckLockTranships->remHotKey(parseHotKey('h'));
1524
menuCheckLockStops->remHotKey(parseHotKey('s'));
1525
// data
1526
menuCheckLockEdgeDatas->remHotKey(parseHotKey('e'));
1527
menuCheckLockEdgeRelDatas->remHotKey(parseHotKey('d'));
1528
menuCheckLockEdgeTAZRels->remHotKey(parseHotKey('t'));
1529
}
1530
1531
void
1532
GNEApplicationWindowHelper::LockMenuCommands::showNetworkLockMenuCommands() {
1533
// first enable menu commands
1534
menuCheckLockJunctions->enable();
1535
menuCheckLockEdges->enable();
1536
menuCheckLockLanes->enable();
1537
menuCheckLockConnections->enable();
1538
menuCheckLockCrossings->enable();
1539
menuCheckLockWalkingAreas->enable();
1540
menuCheckLockAdditionals->enable();
1541
menuCheckLockTAZs->enable();
1542
menuCheckLockWires->enable();
1543
menuCheckLockPolygons->enable();
1544
menuCheckLockPOIs->enable();
1545
menuCheckLockJpsWalkableAreas->enable();
1546
menuCheckLockJpsObstacles->enable();
1547
// set accels
1548
menuCheckLockJunctions->addHotKey(parseHotKey('j'));
1549
menuCheckLockEdges->addHotKey(parseHotKey('e'));
1550
menuCheckLockLanes->addHotKey(parseHotKey('l'));
1551
menuCheckLockConnections->addHotKey(parseHotKey('c'));
1552
menuCheckLockCrossings->addHotKey(parseHotKey('r'));
1553
menuCheckLockWalkingAreas->addHotKey(parseHotKey('g'));
1554
menuCheckLockAdditionals->addHotKey(parseHotKey('a'));
1555
menuCheckLockTAZs->addHotKey(parseHotKey('t'));
1556
menuCheckLockWires->addHotKey(parseHotKey('w'));
1557
menuCheckLockPolygons->addHotKey(parseHotKey('p'));
1558
menuCheckLockPOIs->addHotKey(parseHotKey('o'));
1559
menuCheckLockJpsWalkableAreas->addHotKey(parseHotKey('n'));
1560
menuCheckLockJpsObstacles->addHotKey(parseHotKey('b'));
1561
// now show it
1562
menuCheckLockJunctions->show();
1563
menuCheckLockEdges->show();
1564
menuCheckLockLanes->show();
1565
menuCheckLockConnections->show();
1566
menuCheckLockCrossings->show();
1567
menuCheckLockWalkingAreas->show();
1568
menuCheckLockAdditionals->show();
1569
menuCheckLockTAZs->show();
1570
menuCheckLockWires->show();
1571
menuCheckLockPolygons->show();
1572
menuCheckLockPOIs->show();
1573
menuCheckLockJpsWalkableAreas->show();
1574
menuCheckLockJpsObstacles->show();
1575
}
1576
1577
1578
void
1579
GNEApplicationWindowHelper::LockMenuCommands::hideNetworkLockMenuCommands() {
1580
// first disable menu commands
1581
menuCheckLockJunctions->disable();
1582
menuCheckLockEdges->disable();
1583
menuCheckLockLanes->disable();
1584
menuCheckLockConnections->disable();
1585
menuCheckLockCrossings->disable();
1586
menuCheckLockWalkingAreas->disable();
1587
menuCheckLockAdditionals->disable();
1588
menuCheckLockTAZs->disable();
1589
menuCheckLockPolygons->disable();
1590
menuCheckLockPOIs->disable();
1591
menuCheckLockJpsWalkableAreas->disable();
1592
menuCheckLockJpsObstacles->disable();
1593
// now hide it
1594
menuCheckLockJunctions->hide();
1595
menuCheckLockEdges->hide();
1596
menuCheckLockLanes->hide();
1597
menuCheckLockConnections->hide();
1598
menuCheckLockCrossings->hide();
1599
menuCheckLockWalkingAreas->hide();
1600
menuCheckLockAdditionals->hide();
1601
menuCheckLockTAZs->hide();
1602
menuCheckLockWires->hide();
1603
menuCheckLockPolygons->hide();
1604
menuCheckLockPOIs->hide();
1605
menuCheckLockJpsWalkableAreas->hide();
1606
menuCheckLockJpsObstacles->hide();
1607
}
1608
1609
1610
void
1611
GNEApplicationWindowHelper::LockMenuCommands::showDemandLockMenuCommands() {
1612
// first enable menu commands
1613
menuCheckLockRoutes->enable();
1614
menuCheckLockVehicles->enable();
1615
menuCheckLockPersons->enable();
1616
menuCheckLockPersonTrips->enable();
1617
menuCheckLockWalks->enable();
1618
menuCheckLockRides->enable();
1619
menuCheckLockContainers->enable();
1620
menuCheckLockTransports->enable();
1621
menuCheckLockTranships->enable();
1622
menuCheckLockStops->enable();
1623
// set accels
1624
menuCheckLockRoutes->addHotKey(parseHotKey('r'));
1625
menuCheckLockVehicles->addHotKey(parseHotKey('v'));
1626
menuCheckLockPersons->addHotKey(parseHotKey('p'));
1627
menuCheckLockPersonTrips->addHotKey(parseHotKey('t'));
1628
menuCheckLockWalks->addHotKey(parseHotKey('w'));
1629
menuCheckLockRides->addHotKey(parseHotKey('d'));
1630
menuCheckLockContainers->addHotKey(parseHotKey('c'));
1631
menuCheckLockTransports->addHotKey(parseHotKey('n'));
1632
menuCheckLockTranships->addHotKey(parseHotKey('h'));
1633
menuCheckLockStops->addHotKey(parseHotKey('s'));
1634
// now show it
1635
menuCheckLockRoutes->show();
1636
menuCheckLockVehicles->show();
1637
menuCheckLockPersons->show();
1638
menuCheckLockPersonTrips->show();
1639
menuCheckLockWalks->show();
1640
menuCheckLockRides->show();
1641
menuCheckLockContainers->show();
1642
menuCheckLockTransports->show();
1643
menuCheckLockTranships->show();
1644
menuCheckLockStops->show();
1645
}
1646
1647
1648
void
1649
GNEApplicationWindowHelper::LockMenuCommands::hideDemandLockMenuCommands() {
1650
// first disable menu commands
1651
menuCheckLockRoutes->disable();
1652
menuCheckLockVehicles->disable();
1653
menuCheckLockPersons->disable();
1654
menuCheckLockPersonTrips->disable();
1655
menuCheckLockWalks->disable();
1656
menuCheckLockRides->disable();
1657
menuCheckLockContainers->disable();
1658
menuCheckLockTransports->disable();
1659
menuCheckLockTranships->disable();
1660
menuCheckLockStops->disable();
1661
// now hide it
1662
menuCheckLockRoutes->hide();
1663
menuCheckLockVehicles->hide();
1664
menuCheckLockPersons->hide();
1665
menuCheckLockPersonTrips->hide();
1666
menuCheckLockWalks->hide();
1667
menuCheckLockRides->hide();
1668
menuCheckLockContainers->hide();
1669
menuCheckLockTransports->hide();
1670
menuCheckLockTranships->hide();
1671
menuCheckLockStops->hide();
1672
}
1673
1674
1675
void
1676
GNEApplicationWindowHelper::LockMenuCommands::showDataLockMenuCommands() {
1677
// first enable menu commands
1678
menuCheckLockEdgeDatas->enable();
1679
menuCheckLockEdgeRelDatas->enable();
1680
menuCheckLockEdgeTAZRels->enable();
1681
// set accels
1682
menuCheckLockEdgeDatas->addHotKey(parseHotKey('e'));
1683
menuCheckLockEdgeRelDatas->addHotKey(parseHotKey('d'));
1684
menuCheckLockEdgeTAZRels->addHotKey(parseHotKey('t'));
1685
// now show it
1686
menuCheckLockEdgeDatas->show();
1687
menuCheckLockEdgeRelDatas->show();
1688
menuCheckLockEdgeTAZRels->show();
1689
}
1690
1691
1692
void
1693
GNEApplicationWindowHelper::LockMenuCommands::hideDataLockMenuCommands() {
1694
// first disable menu commands
1695
menuCheckLockEdgeDatas->disable();
1696
menuCheckLockEdgeRelDatas->disable();
1697
menuCheckLockEdgeTAZRels->disable();
1698
// now hide it
1699
menuCheckLockEdgeDatas->hide();
1700
menuCheckLockEdgeRelDatas->hide();
1701
menuCheckLockEdgeTAZRels->hide();
1702
}
1703
1704
1705
void
1706
GNEApplicationWindowHelper::LockMenuCommands::lockAll() {
1707
menuCheckLockJunctions->setCheck(TRUE);
1708
menuCheckLockEdges->setCheck(TRUE);
1709
menuCheckLockLanes->setCheck(TRUE);
1710
menuCheckLockConnections->setCheck(TRUE);
1711
menuCheckLockCrossings->setCheck(TRUE);
1712
menuCheckLockWalkingAreas->setCheck(TRUE);
1713
menuCheckLockAdditionals->setCheck(TRUE);
1714
menuCheckLockTAZs->setCheck(TRUE);
1715
menuCheckLockWires->setCheck(TRUE);
1716
menuCheckLockPolygons->setCheck(TRUE);
1717
menuCheckLockPOIs->setCheck(TRUE);
1718
menuCheckLockJpsWalkableAreas->setCheck(TRUE);
1719
menuCheckLockJpsObstacles->setCheck(TRUE);
1720
menuCheckLockRoutes->setCheck(TRUE);
1721
menuCheckLockVehicles->setCheck(TRUE);
1722
menuCheckLockPersons->setCheck(TRUE);
1723
menuCheckLockPersonTrips->setCheck(TRUE);
1724
menuCheckLockWalks->setCheck(TRUE);
1725
menuCheckLockRides->setCheck(TRUE);
1726
menuCheckLockContainers->setCheck(TRUE);
1727
menuCheckLockTransports->setCheck(TRUE);
1728
menuCheckLockTranships->setCheck(TRUE);
1729
menuCheckLockStops->setCheck(TRUE);
1730
menuCheckLockEdgeDatas->setCheck(TRUE);
1731
menuCheckLockEdgeRelDatas->setCheck(TRUE);
1732
menuCheckLockEdgeTAZRels->setCheck(TRUE);
1733
}
1734
1735
1736
void
1737
GNEApplicationWindowHelper::LockMenuCommands::unlockAll() {
1738
menuCheckLockJunctions->setCheck(FALSE);
1739
menuCheckLockEdges->setCheck(FALSE);
1740
menuCheckLockLanes->setCheck(FALSE);
1741
menuCheckLockConnections->setCheck(FALSE);
1742
menuCheckLockCrossings->setCheck(FALSE);
1743
menuCheckLockWalkingAreas->setCheck(FALSE);
1744
menuCheckLockAdditionals->setCheck(FALSE);
1745
menuCheckLockTAZs->setCheck(FALSE);
1746
menuCheckLockWires->setCheck(FALSE);
1747
menuCheckLockPolygons->setCheck(FALSE);
1748
menuCheckLockPOIs->setCheck(FALSE);
1749
menuCheckLockJpsWalkableAreas->setCheck(FALSE);
1750
menuCheckLockJpsObstacles->setCheck(FALSE);
1751
menuCheckLockRoutes->setCheck(FALSE);
1752
menuCheckLockVehicles->setCheck(FALSE);
1753
menuCheckLockPersons->setCheck(FALSE);
1754
menuCheckLockPersonTrips->setCheck(FALSE);
1755
menuCheckLockWalks->setCheck(FALSE);
1756
menuCheckLockRides->setCheck(FALSE);
1757
menuCheckLockContainers->setCheck(FALSE);
1758
menuCheckLockTransports->setCheck(FALSE);
1759
menuCheckLockTranships->setCheck(FALSE);
1760
menuCheckLockStops->setCheck(FALSE);
1761
menuCheckLockEdgeDatas->setCheck(FALSE);
1762
menuCheckLockEdgeRelDatas->setCheck(FALSE);
1763
menuCheckLockEdgeTAZRels->setCheck(FALSE);
1764
}
1765
1766
1767
void
1768
GNEApplicationWindowHelper::LockMenuCommands::editLocking(const GNEAttributeCarrier* AC, const FXbool value) {
1769
// check elements
1770
if (AC->getTagProperty()->getTag() == SUMO_TAG_JUNCTION) {
1771
menuCheckLockJunctions->setCheck(value);
1772
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) {
1773
menuCheckLockEdges->setCheck(value);
1774
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_LANE) {
1775
menuCheckLockLanes->setCheck(value);
1776
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_CONNECTION) {
1777
menuCheckLockConnections->setCheck(value);
1778
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_CROSSING) {
1779
menuCheckLockCrossings->setCheck(value);
1780
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_WALKINGAREA) {
1781
menuCheckLockWalkingAreas->setCheck(value);
1782
} else if (AC->getTagProperty()->isAdditionalElement()) {
1783
menuCheckLockAdditionals->setCheck(value);
1784
} else if (AC->getTagProperty()->isTAZElement()) {
1785
menuCheckLockTAZs->setCheck(value);
1786
} else if (AC->getTagProperty()->isWireElement()) {
1787
menuCheckLockWires->setCheck(value);
1788
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_POLY) {
1789
menuCheckLockPolygons->setCheck(value);
1790
} else if (AC->getTagProperty()->getTag() == GNE_TAG_JPS_WALKABLEAREA) {
1791
menuCheckLockJpsWalkableAreas->setCheck(value);
1792
} else if (AC->getTagProperty()->getTag() == GNE_TAG_JPS_OBSTACLE) {
1793
menuCheckLockJpsObstacles->setCheck(value);
1794
} else if ((AC->getTagProperty()->getTag() == SUMO_TAG_POI) ||
1795
(AC->getTagProperty()->getTag() == GNE_TAG_POILANE) ||
1796
(AC->getTagProperty()->getTag() == GNE_TAG_POIGEO)) {
1797
menuCheckLockPOIs->setCheck(value);
1798
} else if (AC->getTagProperty()->isRoute()) {
1799
menuCheckLockRoutes->setCheck(value);
1800
} else if (AC->getTagProperty()->isVehicle()) {
1801
menuCheckLockVehicles->setCheck(value);
1802
} else if (AC->getTagProperty()->isPerson()) {
1803
menuCheckLockPersons->setCheck(value);
1804
} else if (AC->getTagProperty()->isPlanPersonTrip()) {
1805
menuCheckLockPersonTrips->setCheck(value);
1806
} else if (AC->getTagProperty()->isPlanWalk()) {
1807
menuCheckLockWalks->setCheck(value);
1808
} else if (AC->getTagProperty()->isPlanRide()) {
1809
menuCheckLockRides->setCheck(value);
1810
} else if (AC->getTagProperty()->isContainer()) {
1811
menuCheckLockContainers->setCheck(value);
1812
} else if (AC->getTagProperty()->isPlanTransport()) {
1813
menuCheckLockTransports->setCheck(value);
1814
} else if (AC->getTagProperty()->isPlanTranship()) {
1815
menuCheckLockTranships->setCheck(value);
1816
} else if (AC->getTagProperty()->isVehicleStop() ||
1817
AC->getTagProperty()->isPlanStopPerson() ||
1818
AC->getTagProperty()->isPlanStopContainer()) {
1819
menuCheckLockStops->setCheck(value);
1820
} else if (AC->getTagProperty()->getTag() == GNE_TAG_EDGEREL_SINGLE) {
1821
menuCheckLockEdgeDatas->setCheck(value);
1822
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGEREL) {
1823
menuCheckLockEdgeRelDatas->setCheck(value);
1824
} else if (AC->getTagProperty()->getTag() == SUMO_TAG_TAZREL) {
1825
menuCheckLockEdgeTAZRels->setCheck(value);
1826
}
1827
}
1828
1829
1830
FXHotKey
1831
GNEApplicationWindowHelper::LockMenuCommands::parseHotKey(const FXwchar character) {
1832
FXuint code = 0, mods = 0;
1833
if (Unicode::isAlphaNumeric(character)) {
1834
mods = ALTMASK;
1835
code = fxucs2keysym(Unicode::toLower(character));
1836
}
1837
return MKUINT(code, mods);
1838
}
1839
1840
// ---------------------------------------------------------------------------
1841
// GNEApplicationWindowHelper::ProcessingMenuCommands - methods
1842
// ---------------------------------------------------------------------------
1843
1844
GNEApplicationWindowHelper::ProcessingMenuCommands::ProcessingMenuCommands(GNEApplicationWindow* applicationWindow) :
1845
myApplicationWindow(applicationWindow) {
1846
}
1847
1848
1849
void
1850
GNEApplicationWindowHelper::ProcessingMenuCommands::buildProcessingMenuCommands(FXMenuPane* processingMenu) {
1851
// build network processing menu commands
1852
computeNetwork = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1853
TL("Compute Junctions"), "F5", TL("Compute junction shape and logic."),
1854
GUIIconSubSys::getIcon(GUIIcon::COMPUTEJUNCTIONS), myApplicationWindow, MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND);
1855
computeNetworkVolatile = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1856
TL("Compute Junctions with volatile options"), "Shift+F5", TL("Compute junction shape and logic using volatile junctions."),
1857
GUIIconSubSys::getIcon(GUIIcon::COMPUTEJUNCTIONS), myApplicationWindow, MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE);
1858
cleanJunctions = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1859
TL("Clean Junctions"), "F6", TL("Remove solitary junctions."),
1860
GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES);
1861
joinJunctions = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1862
TL("Join Selected Junctions"), "F7", TL("Join selected junctions into a single junction."),
1863
GUIIconSubSys::getIcon(GUIIcon::JOINJUNCTIONS), myApplicationWindow, MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES);
1864
clearInvalidCrossings = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1865
TL("Clean invalid crossings"), "F8", TL("Clear invalid crossings."),
1866
GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS);
1867
// add separator for checkBox
1868
mySeparatorCheckBox = new FXMenuSeparator(processingMenu);
1869
// add checkBox for recomputing in data mode
1870
menuCheckRecomputeDataMode = GUIDesigns::buildFXMenuCheckboxIcon(processingMenu,
1871
TL("Recompute Network in Data Mode"), "", "",
1872
GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), myApplicationWindow, MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA);
1873
// set default value
1874
menuCheckRecomputeDataMode->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "RecomputeData", true));
1875
// build demand processing menu commands
1876
computeDemand = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1877
TL("Compute demand"), "F5", TL("Computes demand elements."),
1878
GUIIconSubSys::getIcon(GUIIcon::COMPUTEDEMAND), myApplicationWindow, MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND);
1879
cleanRoutes = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1880
TL("Clean routes"), "F6", TL("Removes routes without vehicles."),
1881
GUIIconSubSys::getIcon(GUIIcon::CLEANROUTES), myApplicationWindow, MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES);
1882
joinRoutes = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1883
TL("Join routes"), "F7", TL("Joins routes with the same edges."),
1884
GUIIconSubSys::getIcon(GUIIcon::JOINROUTES), myApplicationWindow, MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES);
1885
adjustPersonPlans = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1886
TL("Adjust person plans"), "Shift+F7", TL("Adjust person plans (start/end positions, arrival positions, etc.)"),
1887
GUIIconSubSys::getIcon(GUIIcon::ADJUSTPERSONPLANS), myApplicationWindow, MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS);
1888
clearInvalidDemandElements = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1889
TL("Clean invalid route elements"), "F8", TL("Clear elements with an invalid path (routes, Trips, Flows...)."),
1890
GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS);
1891
// add separator
1892
myOptionsSeparator = new FXMenuSeparator(processingMenu);
1893
// create optionmenus
1894
optionMenus = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1895
TL("Sumo options"), "Shift+F10", TL("Configure sumo Options."),
1896
GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), myApplicationWindow, MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU);
1897
// add separator
1898
myOptionsSeparator = new FXMenuSeparator(processingMenu);
1899
// create optionmenus
1900
optionMenus = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,
1901
TL("Options"), "F10", TL("Configure netedit Options."),
1902
GUIIconSubSys::getIcon(GUIIcon::OPTIONS), myApplicationWindow, MID_HOTKEY_F10_OPTIONSMENU);
1903
}
1904
1905
1906
void
1907
GNEApplicationWindowHelper::ProcessingMenuCommands::showNetworkProcessingMenuCommands() {
1908
// first enable menu commands
1909
computeNetwork->enable();
1910
computeNetworkVolatile->enable();
1911
cleanJunctions->enable();
1912
joinJunctions->enable();
1913
clearInvalidCrossings->enable();
1914
mySeparatorCheckBox->enable();
1915
menuCheckRecomputeDataMode->enable();
1916
// now show it
1917
computeNetwork->show();
1918
computeNetworkVolatile->show();
1919
cleanJunctions->show();
1920
joinJunctions->show();
1921
clearInvalidCrossings->show();
1922
mySeparatorCheckBox->show();
1923
menuCheckRecomputeDataMode->show();
1924
}
1925
1926
1927
void
1928
GNEApplicationWindowHelper::ProcessingMenuCommands::hideNetworkProcessingMenuCommands() {
1929
// first disable menu commands
1930
computeNetwork->disable();
1931
computeNetworkVolatile->disable();
1932
cleanJunctions->disable();
1933
joinJunctions->disable();
1934
clearInvalidCrossings->disable();
1935
// now hide it
1936
computeNetwork->hide();
1937
computeNetworkVolatile->hide();
1938
cleanJunctions->hide();
1939
joinJunctions->hide();
1940
clearInvalidCrossings->hide();
1941
}
1942
1943
1944
void
1945
GNEApplicationWindowHelper::ProcessingMenuCommands::showDemandProcessingMenuCommands() {
1946
// first enable menu commands
1947
computeDemand->enable();
1948
cleanRoutes->enable();
1949
joinRoutes->enable();
1950
adjustPersonPlans->enable();
1951
clearInvalidDemandElements->enable();
1952
// now show it
1953
computeDemand->show();
1954
cleanRoutes->show();
1955
joinRoutes->show();
1956
adjustPersonPlans->show();
1957
clearInvalidDemandElements->show();
1958
}
1959
1960
1961
void
1962
GNEApplicationWindowHelper::ProcessingMenuCommands::hideDemandProcessingMenuCommands() {
1963
// first disable menu commands
1964
computeDemand->disable();
1965
cleanRoutes->disable();
1966
joinRoutes->disable();
1967
adjustPersonPlans->disable();
1968
clearInvalidDemandElements->disable();
1969
// now hide it
1970
computeDemand->hide();
1971
cleanRoutes->hide();
1972
joinRoutes->hide();
1973
adjustPersonPlans->hide();
1974
clearInvalidDemandElements->hide();
1975
}
1976
1977
1978
void
1979
GNEApplicationWindowHelper::ProcessingMenuCommands::showDataProcessingMenuCommands() {
1980
// currently nothing to show
1981
}
1982
1983
1984
void
1985
GNEApplicationWindowHelper::ProcessingMenuCommands::hideDataProcessingMenuCommands() {
1986
// currently nothing to hide
1987
}
1988
1989
1990
void
1991
GNEApplicationWindowHelper::ProcessingMenuCommands::showSeparator() {
1992
myOptionsSeparator->show();
1993
}
1994
1995
1996
void
1997
GNEApplicationWindowHelper::ProcessingMenuCommands::hideSeparator() {
1998
myOptionsSeparator->hide();
1999
}
2000
2001
// ---------------------------------------------------------------------------
2002
// GNEApplicationWindowHelper::LocateMenuCommands - methods
2003
// ---------------------------------------------------------------------------
2004
2005
GNEApplicationWindowHelper::LocateMenuCommands::LocateMenuCommands(GNEApplicationWindow* applicationWindow) :
2006
myApplicationWindow(applicationWindow) {
2007
}
2008
2009
2010
void
2011
GNEApplicationWindowHelper::LocateMenuCommands::buildLocateMenuCommands(FXMenuPane* locateMenu) {
2012
// build locate menu commands
2013
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2014
TL("&Junctions"), "Shift+J", TL("Open a dialog for locating a Junction."),
2015
GUIIconSubSys::getIcon(GUIIcon::LOCATEJUNCTION), myApplicationWindow, MID_HOTKEY_SHIFT_J_LOCATEJUNCTION);
2016
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2017
TL("&Edges"), "Shift+E", TL("Open a dialog for locating an Edge."),
2018
GUIIconSubSys::getIcon(GUIIcon::LOCATEEDGE), myApplicationWindow, MID_HOTKEY_SHIFT_E_LOCATEEDGE);
2019
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2020
TL("&WalkingAreas"), "Shift+W", TL("Open a dialog for locating a Walking Area."),
2021
GUIIconSubSys::getIcon(GUIIcon::LOCATEWALKINGAREA), myApplicationWindow, MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA);
2022
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2023
TL("&Vehicles"), "Shift+V", TL("Open a dialog for locating a Vehicle."),
2024
GUIIconSubSys::getIcon(GUIIcon::LOCATEVEHICLE), myApplicationWindow, MID_HOTKEY_SHIFT_V_LOCATEVEHICLE);
2025
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2026
TL("&Persons"), "Shift+P", TL("Open a dialog for locating a Person."),
2027
GUIIconSubSys::getIcon(GUIIcon::LOCATEPERSON), myApplicationWindow, MID_HOTKEY_SHIFT_P_LOCATEPERSON);
2028
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2029
TL("&Containers"), "Shift+C", TL("Open a dialog for locating a Container."),
2030
GUIIconSubSys::getIcon(GUIIcon::LOCATECONTAINER), myApplicationWindow, MID_HOTKEY_SHIFT_C_LOCATECONTAINER);
2031
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2032
TL("&Route"), "Shift+R", TL("Open a dialog for locating a Route."),
2033
GUIIconSubSys::getIcon(GUIIcon::LOCATEROUTE), myApplicationWindow, MID_HOTKEY_SHIFT_R_LOCATEROUTE);
2034
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2035
TL("&Stops"), "Shift+S", TL("Open a dialog for locating a Stop."),
2036
GUIIconSubSys::getIcon(GUIIcon::LOCATESTOP), myApplicationWindow, MID_HOTKEY_SHIFT_S_LOCATESTOP);
2037
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2038
TL("&TLS"), "Shift+T", TL("Open a dialog for locating a Traffic Light."),
2039
GUIIconSubSys::getIcon(GUIIcon::LOCATETLS), myApplicationWindow, MID_HOTKEY_SHIFT_T_LOCATETLS);
2040
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2041
TL("&Additional"), "Shift+A", TL("Open a dialog for locating an Additional Structure."),
2042
GUIIconSubSys::getIcon(GUIIcon::LOCATEADD), myApplicationWindow, MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL);
2043
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2044
TL("P&oI"), "Shift+O", TL("Open a dialog for locating a Point of Interest."),
2045
GUIIconSubSys::getIcon(GUIIcon::LOCATEPOI), myApplicationWindow, MID_HOTKEY_SHIFT_O_LOCATEPOI);
2046
GUIDesigns::buildFXMenuCommandShortcut(locateMenu,
2047
TL("Po&lygon"), "Shift+L", TL("Open a dialog for locating a Polygon."),
2048
GUIIconSubSys::getIcon(GUIIcon::LOCATEPOLY), myApplicationWindow, MID_HOTKEY_SHIFT_L_LOCATEPOLY);
2049
}
2050
2051
// ---------------------------------------------------------------------------
2052
// GNEApplicationWindowHelper::ToolsMenuCommands - methods
2053
// ---------------------------------------------------------------------------
2054
2055
GNEApplicationWindowHelper::ToolsMenuCommands::ToolsMenuCommands(GNEApplicationWindow* applicationWindow) :
2056
myApplicationWindow(applicationWindow) {
2057
}
2058
2059
2060
GNEApplicationWindowHelper::ToolsMenuCommands::~ToolsMenuCommands() {
2061
// delete all tools
2062
for (const auto& tool : myPythonTools) {
2063
delete tool;
2064
}
2065
// delete dialogs
2066
if (myPythonToolDialog) {
2067
delete myPythonToolDialog;
2068
}
2069
}
2070
2071
2072
void
2073
GNEApplicationWindowHelper::ToolsMenuCommands::buildTools(FXMenuPane* toolsMenu,
2074
const std::map<std::string, FXMenuPane*>& menuPaneToolMaps) {
2075
// build tools from template
2076
// the templateTools vector is imported from templates.h (which only exists in the cmake-build folder)
2077
for (const auto& templateTool : templateTools) {
2078
if (templateTool.name == "netdiff") {
2079
myPythonTools.push_back(new GNENetDiffTool(myApplicationWindow, templateTool.pythonPath,
2080
menuPaneToolMaps.at(templateTool.subfolder)));
2081
} else if (menuPaneToolMaps.count(templateTool.subfolder) > 0) {
2082
myPythonTools.push_back(new GNEPythonTool(myApplicationWindow, templateTool.pythonPath,
2083
templateTool.templateStr, menuPaneToolMaps.at(templateTool.subfolder)));
2084
} else {
2085
myPythonTools.push_back(new GNEPythonTool(myApplicationWindow, templateTool.pythonPath,
2086
templateTool.templateStr, toolsMenu));
2087
}
2088
}
2089
}
2090
2091
2092
long
2093
GNEApplicationWindowHelper::ToolsMenuCommands::showTool(FXObject* menuCommand) {
2094
// iterate over all tools and find menu command
2095
for (const auto& tool : myPythonTools) {
2096
if (tool->getMenuCommand() == menuCommand) {
2097
if (myPythonToolDialog) {
2098
delete myPythonToolDialog;
2099
}
2100
myPythonToolDialog = new GNEPythonToolDialog(myApplicationWindow, tool);
2101
return 1;
2102
}
2103
}
2104
return 0;
2105
}
2106
2107
2108
long
2109
GNEApplicationWindowHelper::ToolsMenuCommands::runToolDialog(FXObject* menuCommand) const {
2110
// iterate over all tools and find menu command
2111
for (const auto& tool : myPythonTools) {
2112
if (tool->getMenuCommand() == menuCommand) {
2113
GNERunPythonToolDialog(myApplicationWindow, tool);
2114
return 1;
2115
}
2116
}
2117
return 0;
2118
}
2119
2120
2121
long
2122
GNEApplicationWindowHelper::ToolsMenuCommands::postProcessing(FXObject* menuCommand) const {
2123
// iterate over all tools and find menu command
2124
for (const auto& tool : myPythonTools) {
2125
if (tool->getMenuCommand() == menuCommand) {
2126
// execute postProcessing
2127
tool->postProcessing();
2128
return 1;
2129
}
2130
}
2131
return 0;
2132
}
2133
2134
// ---------------------------------------------------------------------------
2135
// GNEApplicationWindowHelper::WindowsMenuCommands - methods
2136
// ---------------------------------------------------------------------------
2137
2138
GNEApplicationWindowHelper::WindowsMenuCommands::WindowsMenuCommands(GNEApplicationWindow* applicationWindow) :
2139
myApplicationWindow(applicationWindow) {
2140
}
2141
2142
2143
void
2144
GNEApplicationWindowHelper::WindowsMenuCommands::buildWindowsMenuCommands(FXMenuPane* windowsMenu,
2145
FXStatusBar* statusbar, GUIMessageWindow* messageWindow) {
2146
// build windows menu commands
2147
GUIDesigns::buildFXMenuCheckbox(windowsMenu,
2148
TL("Show Status Line"), TL("Toggle this Status Bar on/off."),
2149
statusbar, FXWindow::ID_TOGGLESHOWN);
2150
GUIDesigns::buildFXMenuCheckbox(windowsMenu,
2151
TL("Show Message Window"), TL("Toggle the Message Window on/off."),
2152
messageWindow, FXWindow::ID_TOGGLESHOWN);
2153
new FXMenuSeparator(windowsMenu);
2154
GUIDesigns::buildFXMenuCommandShortcut(windowsMenu,
2155
TL("Clear Message Window"), "", TL("Clear the Message Window."),
2156
GUIIconSubSys::getIcon(GUIIcon::CLEARMESSAGEWINDOW), myApplicationWindow, MID_CLEARMESSAGEWINDOW);
2157
}
2158
2159
// ---------------------------------------------------------------------------
2160
// GNEApplicationWindowHelper::WindowsMenuCommands - methods
2161
// ---------------------------------------------------------------------------
2162
2163
GNEApplicationWindowHelper::HelpMenuCommands::HelpMenuCommands(GNEApplicationWindow* applicationWindow) :
2164
myApplicationWindow(applicationWindow) {
2165
}
2166
2167
2168
void
2169
GNEApplicationWindowHelper::HelpMenuCommands::buildHelpMenuCommands(FXMenuPane* helpMenu) {
2170
// build windows menu commands
2171
GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Online Documentation"), "F1", TL("Open Online documentation."),
2172
nullptr, myApplicationWindow, MID_HOTKEY_F1_ONLINEDOCUMENTATION);
2173
new FXMenuSeparator(helpMenu);
2174
GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Changelog"), "", TL("Open Changelog."),
2175
nullptr, myApplicationWindow, MID_CHANGELOG);
2176
GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Hotkeys"), "", TL("Open Hotkeys."),
2177
nullptr, myApplicationWindow, MID_HOTKEYS);
2178
GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Tutorial"), "", TL("Open Tutorial."),
2179
nullptr, myApplicationWindow, MID_TUTORIAL);
2180
GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Feedback"), "", TL("Open feedback channels."),
2181
nullptr, myApplicationWindow, MID_FEEDBACK);
2182
new FXMenuSeparator(helpMenu);
2183
GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("About"), "F12", TL("About netedit."),
2184
GUIIconSubSys::getIcon(GUIIcon::NETEDIT_MINI), myApplicationWindow, MID_HOTKEY_F12_ABOUT);
2185
}
2186
2187
// ---------------------------------------------------------------------------
2188
// GNEApplicationWindowHelper::NetworkCheckableButtons - methods
2189
// ---------------------------------------------------------------------------
2190
2191
GNEApplicationWindowHelper::SupermodeCommands::SupermodeCommands(GNEApplicationWindow* applicationWindow) :
2192
myApplicationWindow(applicationWindow) {
2193
}
2194
2195
2196
void
2197
GNEApplicationWindowHelper::SupermodeCommands::showSupermodeCommands() {
2198
networkMode->show();
2199
demandMode->show();
2200
dataMode->show();
2201
}
2202
2203
2204
void
2205
GNEApplicationWindowHelper::SupermodeCommands::setDefaultView() {
2206
showSupermodeCommands();
2207
}
2208
2209
2210
void
2211
GNEApplicationWindowHelper::SupermodeCommands::setJuPedSimView() {
2212
dataMode->hide();
2213
}
2214
2215
2216
void
2217
GNEApplicationWindowHelper::SupermodeCommands::buildSupermodeCommands(FXMenuPane* editMenu) {
2218
// build supermode menu commands
2219
networkMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
2220
TL("&Network"), "F2", TL("Select network mode."),
2221
GUIIconSubSys::getIcon(GUIIcon::SUPERMODENETWORK), myApplicationWindow, MID_HOTKEY_F2_SUPERMODE_NETWORK);
2222
demandMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
2223
TL("&Demand"), "F3", TL("Select demand mode."),
2224
GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDEMAND), myApplicationWindow, MID_HOTKEY_F3_SUPERMODE_DEMAND);
2225
dataMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,
2226
TL("&Data"), "F4", TL("Select data mode."),
2227
GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), myApplicationWindow, MID_HOTKEY_F4_SUPERMODE_DATA);
2228
}
2229
2230
// ---------------------------------------------------------------------------
2231
// GNESumoConfigHandler - methods
2232
// ---------------------------------------------------------------------------
2233
2234
GNEApplicationWindowHelper::GNESumoConfigHandler::GNESumoConfigHandler(GNEApplicationWindow* applicationWindow, const std::string& sumoConfigFile) :
2235
myApplicationWindow(applicationWindow),
2236
mySumoConfigFile(sumoConfigFile) {
2237
}
2238
2239
2240
bool
2241
GNEApplicationWindowHelper::GNESumoConfigHandler::loadSumoConfig() {
2242
// get options
2243
auto& neteditOptions = OptionsCont::getOptions();
2244
auto& sumoOptions = myApplicationWindow->getSumoOptions();
2245
// reset options
2246
sumoOptions.resetDefault();
2247
neteditOptions.resetDefault();
2248
// make all options writables
2249
sumoOptions.resetWritable();
2250
neteditOptions.resetWritable();
2251
// build parser
2252
XERCES_CPP_NAMESPACE::SAXParser parser;
2253
parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);
2254
parser.setDisableDefaultEntityResolution(true);
2255
// start the parsing
2256
OptionsLoader handler(sumoOptions);
2257
try {
2258
parser.setDocumentHandler(&handler);
2259
parser.setErrorHandler(&handler);
2260
parser.parse(StringUtils::transcodeToLocal(mySumoConfigFile).c_str());
2261
// allow to load with invalid options
2262
if (handler.errorOccurred()) {
2263
WRITE_WARNING(TLF("There are invalid options in sumo configuration '%'.", mySumoConfigFile));
2264
}
2265
} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {
2266
WRITE_ERROR(TLF("Could not load sumo configuration '%':\n %", mySumoConfigFile, StringUtils::transcode(e.getMessage())));
2267
return false;
2268
}
2269
// relocate files
2270
sumoOptions.relocateFiles(mySumoConfigFile);
2271
// configure files in bucket
2272
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::SUMO_CONFIG, mySumoConfigFile);
2273
// set load options in netedit
2274
neteditOptions.resetWritable();
2275
if (sumoOptions.getString("net-file").size() > 0) {
2276
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::NETWORK, sumoOptions.getString("net-file"));
2277
} else {
2278
WRITE_ERROR(TLF("No network defined in sumo configuration '%'.", mySumoConfigFile));
2279
return false;
2280
}
2281
neteditOptions.set("additional-files", sumoOptions.getString("additional-files"));
2282
neteditOptions.set("route-files", sumoOptions.getString("route-files"));
2283
// relocate files
2284
neteditOptions.relocateFiles(mySumoConfigFile);
2285
return true;
2286
}
2287
2288
// ---------------------------------------------------------------------------
2289
// GNENetconvertConfigHandler - methods
2290
// ---------------------------------------------------------------------------
2291
2292
GNEApplicationWindowHelper::GNENetconvertConfigHandler::GNENetconvertConfigHandler(const std::string& sumoConfigFile) :
2293
myNetconvertConfigFile(sumoConfigFile) {
2294
}
2295
2296
2297
bool
2298
GNEApplicationWindowHelper::GNENetconvertConfigHandler::loadNetconvertConfig() {
2299
// get options
2300
auto& neteditOptions = OptionsCont::getOptions();
2301
// reset options and mark all options as writables
2302
neteditOptions.resetDefault();
2303
neteditOptions.resetWritable();
2304
// build parser
2305
XERCES_CPP_NAMESPACE::SAXParser parser;
2306
parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);
2307
parser.setDisableDefaultEntityResolution(true);
2308
// start the parsing
2309
OptionsLoader handler(neteditOptions);
2310
try {
2311
parser.setDocumentHandler(&handler);
2312
parser.setErrorHandler(&handler);
2313
parser.parse(StringUtils::transcodeToLocal(myNetconvertConfigFile).c_str());
2314
// allow to load with invalid options
2315
if (handler.errorOccurred()) {
2316
WRITE_WARNING(TLF("There are invalid options in netconvert configuration '%'.", myNetconvertConfigFile));
2317
}
2318
} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {
2319
WRITE_ERROR(TLF("Could not load netconvert configuration '%':\n %", myNetconvertConfigFile, StringUtils::transcode(e.getMessage())));
2320
return false;
2321
}
2322
// relocate files
2323
neteditOptions.relocateFiles(myNetconvertConfigFile);
2324
// set load options in netdit
2325
neteditOptions.resetWritable();
2326
return true;
2327
}
2328
2329
2330
// ---------------------------------------------------------------------------
2331
// GNENeteditConfigHandler - methods
2332
// ---------------------------------------------------------------------------
2333
2334
GNEApplicationWindowHelper::GNENeteditConfigHandler::GNENeteditConfigHandler(GNEApplicationWindow* applicationWindow, const std::string& neteditConfigFile) :
2335
myApplicationWindow(applicationWindow),
2336
myNeteditConfigFile(neteditConfigFile) {
2337
}
2338
2339
2340
bool
2341
GNEApplicationWindowHelper::GNENeteditConfigHandler::loadNeteditConfig() {
2342
// get options
2343
auto& neteditOptions = OptionsCont::getOptions();
2344
// before reset defaults, save ignore route and demand elements (because usually are loaded trought console)
2345
const bool ignoreAdditionalElements = neteditOptions.getBool("ignore.additionalelements");
2346
const bool ignoreRouteElements = neteditOptions.getBool("ignore.routeelements");
2347
// reset options
2348
neteditOptions.resetDefault();
2349
// make all options writables
2350
neteditOptions.resetWritable();
2351
// build parser
2352
XERCES_CPP_NAMESPACE::SAXParser parser;
2353
parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);
2354
parser.setDisableDefaultEntityResolution(true);
2355
// start the parsing
2356
OptionsLoader handler(neteditOptions);
2357
try {
2358
parser.setDocumentHandler(&handler);
2359
parser.setErrorHandler(&handler);
2360
parser.parse(StringUtils::transcodeToLocal(myNeteditConfigFile).c_str());
2361
// allow to load with invalid options
2362
if (handler.errorOccurred()) {
2363
WRITE_WARNING(TLF("There are invalid options in netedit configuration '%'.", myNeteditConfigFile));
2364
}
2365
} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {
2366
WRITE_ERROR(TLF("Could not load netedit configuration '%':\n %", myNeteditConfigFile, StringUtils::transcode(e.getMessage())));
2367
return false;
2368
}
2369
// relocate files
2370
neteditOptions.relocateFiles(myNeteditConfigFile);
2371
// configure files in bucket
2372
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::NETEDIT_CONFIG, myNeteditConfigFile);
2373
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::SUMO_CONFIG, neteditOptions.getString("sumocfg-file"));
2374
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::NETWORK, neteditOptions.getString("sumo-net-file"));
2375
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::TLS, neteditOptions.getString("tls-file"));
2376
myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::EDGETYPE, neteditOptions.getString("edgetypes-file"));
2377
// restore ignores
2378
neteditOptions.resetWritable();
2379
// check if ignore additional or route files
2380
if (ignoreAdditionalElements) {
2381
neteditOptions.resetDefault("additional-files");
2382
}
2383
if (ignoreRouteElements) {
2384
neteditOptions.resetDefault("route-files");
2385
}
2386
return true;
2387
}
2388
2389
2390
// ---------------------------------------------------------------------------
2391
// GNEApplicationWindowHelper::FileBucketHandler - methods
2392
// ---------------------------------------------------------------------------
2393
2394
GNEApplicationWindowHelper::FileBucketHandler::FileBucketHandler(GNEApplicationWindow* applicationWindow,
2395
OptionsCont& neteditOptions, OptionsCont& sumoOptions) :
2396
myApplicationWindow(applicationWindow),
2397
myNeteditOptions(neteditOptions),
2398
mySumoOptions(sumoOptions) {
2399
// create default buckets
2400
for (const auto& type : FileBucket::types) {
2401
myBuckets[type].push_back(new FileBucket(type));
2402
}
2403
for (const auto& type : FileBucket::prefixes) {
2404
myBuckets[type].push_back(new FileBucket(type));
2405
}
2406
}
2407
2408
2409
GNEApplicationWindowHelper::FileBucketHandler::~FileBucketHandler() {
2410
// delete buckets
2411
for (auto& bucketMap : myBuckets) {
2412
for (auto& bucket : bucketMap.second) {
2413
delete bucket;
2414
}
2415
}
2416
}
2417
2418
2419
void
2420
GNEApplicationWindowHelper::FileBucketHandler::registerAC(const GNEAttributeCarrier* AC) {
2421
// insert element
2422
if (AC->getTagProperty()->saveInParentFile() == false) {
2423
// add element in bucket
2424
AC->getFileBucket()->addElement(false);
2425
}
2426
}
2427
2428
2429
void
2430
GNEApplicationWindowHelper::FileBucketHandler::unregisterAC(const GNEAttributeCarrier* AC) {
2431
if (AC->getTagProperty()->saveInParentFile() == false) {
2432
// remove element from bucket
2433
AC->getFileBucket()->removeElement(false);
2434
}
2435
}
2436
2437
2438
FileBucket*
2439
GNEApplicationWindowHelper::FileBucketHandler::updateAC(const GNEAttributeCarrier* AC, const std::string& filename) {
2440
// check file properties
2441
if (AC->getTagProperty()->saveInParentFile()) {
2442
// elements with parent aren't saved in buckets
2443
return nullptr;
2444
} else if (AC->getTagProperty()->isNetworkElement()) {
2445
// network elements are saved in a single file
2446
return myBuckets.at(FileBucket::Type::NETWORK).front();
2447
} else {
2448
// remove element from bucket
2449
AC->getFileBucket()->removeElement(AC->isTemplate());
2450
// iterate over all buckets to check if the given filename already exist
2451
for (const auto& type : FileBucket::types) {
2452
// get default bucket (secure because first bucket always exist)
2453
auto defaultBucket = getDefaultBucket(type);
2454
// check if this bucket type is compatible
2455
if (AC->getTagProperty()->isFileCompatible(defaultBucket->getType())) {
2456
// search bucket with this filename
2457
for (auto& bucket : myBuckets.at(type)) {
2458
if (bucket->getFilename() == filename) {
2459
// add element in bucket
2460
bucket->addElement(AC->isTemplate());
2461
// return the new bucket
2462
return bucket;
2463
}
2464
}
2465
}
2466
}
2467
// if we didn't found a bucket whit the given filename, create new
2468
for (const auto& type : FileBucket::types) {
2469
// this front() call is secure because every bucket group have always at least one default bucket)
2470
const auto bucketType = getDefaultBucket(type)->getType();
2471
// check compatibility
2472
if (AC->getTagProperty()->isFileCompatible(bucketType)) {
2473
// create new bucket with the given filename
2474
auto bucket = new FileBucket(bucketType, filename);
2475
myBuckets.at(bucketType).push_back(bucket);
2476
// add element in bucket
2477
bucket->addElement(AC->isTemplate());
2478
// update options (because we added a new bucket)
2479
updateOptions();
2480
// return the new bucket
2481
return bucket;
2482
}
2483
}
2484
// the AC was not updated, throw error
2485
throw ProcessError(TLF("Element '% cannot be updateAC in bucket '%'", AC->getID(), filename));
2486
}
2487
}
2488
2489
2490
bool
2491
GNEApplicationWindowHelper::FileBucketHandler::checkFilename(const GNEAttributeCarrier* AC, const std::string& filename) const {
2492
// check file properties
2493
if (AC->getTagProperty()->saveInParentFile()) {
2494
// elements with parent aren't saved in buckets
2495
return false;
2496
} else {
2497
// iterate over all buckets to check if exist a bucket with this filename
2498
for (const auto& type : FileBucket::types) {
2499
for (auto& bucket : myBuckets.at(type)) {
2500
if (bucket->getFilename() == filename) {
2501
// check if the bucket is compatible with this file
2502
return AC->getTagProperty()->isFileCompatible(bucket->getType());
2503
}
2504
}
2505
}
2506
// the file will be saved in a new bucket
2507
return true;
2508
}
2509
}
2510
2511
2512
std::string
2513
GNEApplicationWindowHelper::FileBucketHandler::getConfigDirectory() const {
2514
for (const auto& type : FileBucket::prefixes) {
2515
if (isFilenameDefined(type)) {
2516
return getDefaultFolder(type);
2517
}
2518
}
2519
return "";
2520
}
2521
2522
2523
std::string
2524
GNEApplicationWindowHelper::FileBucketHandler::getConfigFilePrefix(const std::string& sufix) const {
2525
for (const auto& type : FileBucket::prefixes) {
2526
if (isFilenameDefined(type)) {
2527
return getDefaultFilename(type) + sufix;
2528
}
2529
}
2530
return "";
2531
}
2532
2533
2534
FileBucket*
2535
GNEApplicationWindowHelper::FileBucketHandler::getDefaultBucket(const FileBucket::Type type) const {
2536
return myBuckets.at(type).front();
2537
}
2538
2539
2540
FileBucket*
2541
GNEApplicationWindowHelper::FileBucketHandler::getBucket(const FileBucket::Type type, const std::string& filename, const bool create) {
2542
// iterate over all buckets to check if the given filename already exist
2543
for (auto& bucketMap : myBuckets) {
2544
for (auto& bucket : bucketMap.second) {
2545
if ((bucket->getFilename() == filename) && (bucket->getType() == type)) {
2546
return bucket;
2547
}
2548
}
2549
}
2550
// on this point, we need to check if create a new bucket
2551
if (create) {
2552
// if the default bucket is empty, but not the filename, update the default bucket
2553
if (getDefaultFilename(type).empty() && (filename.size() > 0)) {
2554
setDefaultFilenameFile(type, filename);
2555
return getDefaultBucket(type);
2556
} else {
2557
// create new bucket
2558
auto bucket = new FileBucket(type, filename);
2559
myBuckets.at(type).push_back(bucket);
2560
return bucket;
2561
}
2562
} else {
2563
return nullptr;
2564
}
2565
}
2566
2567
2568
const std::vector<FileBucket*>&
2569
GNEApplicationWindowHelper::FileBucketHandler::getFileBuckets(const FileBucket::Type type) const {
2570
return myBuckets.at(type);
2571
}
2572
2573
2574
std::string
2575
GNEApplicationWindowHelper::FileBucketHandler::getDefaultFilename(const FileBucket::Type type) const {
2576
return myBuckets.at(type).front()->getFilename();
2577
}
2578
2579
2580
std::string
2581
GNEApplicationWindowHelper::FileBucketHandler::getDefaultFolder(const FileBucket::Type type) const {
2582
std::string prefix = getDefaultFilename(type);
2583
// remove until empty or trailing slash
2584
while (true) {
2585
if (prefix.empty()) {
2586
return prefix;
2587
} else if ((prefix.back() == '\'') ||
2588
(prefix.back() == '\\') ||
2589
(prefix.back() == '/')) {
2590
// remove last trailing slash
2591
prefix.pop_back();
2592
return prefix;
2593
} else {
2594
prefix.pop_back();
2595
}
2596
}
2597
}
2598
2599
2600
void
2601
GNEApplicationWindowHelper::FileBucketHandler::setDefaultFilenameFile(const FileBucket::Type type, const std::string& filename) {
2602
myBuckets.at(type).front()->setFilename(filename);
2603
// update filename in options
2604
updateOptions();
2605
}
2606
2607
2608
bool
2609
GNEApplicationWindowHelper::FileBucketHandler::isFilenameDefined(const FileBucket::Type type) const {
2610
return (myBuckets.at(type).front()->getFilename().size() > 0);
2611
}
2612
2613
2614
void
2615
GNEApplicationWindowHelper::FileBucketHandler::resetDefaultFilenames() {
2616
for (const auto& bucketPair : myBuckets) {
2617
bucketPair.second.front()->setFilename("");
2618
}
2619
// update filename in options
2620
updateOptions();
2621
}
2622
2623
2624
void
2625
GNEApplicationWindowHelper::FileBucketHandler::updateOptions() {
2626
// get filenames
2627
const auto sumoconfig = parseFilenames({FileBucket::Type::SUMO_CONFIG});
2628
const auto neteditconfig = parseFilenames({FileBucket::Type::NETEDIT_CONFIG});
2629
const auto networkFile = parseFilenames({FileBucket::Type::NETWORK});
2630
const auto additional = parseFilenames({FileBucket::Type::ADDITIONAL});
2631
const auto demandFile = parseFilenames({FileBucket::Type::DEMAND});
2632
const auto data = parseFilenames({FileBucket::Type::DATA});
2633
const auto meanData = parseFilenames({FileBucket::Type::MEANDATA});
2634
const auto additionalMeanData = parseFilenames({FileBucket::Type::ADDITIONAL, FileBucket::Type::MEANDATA});
2635
const auto edgeType = parseFilenames({FileBucket::Type::EDGETYPE});
2636
const auto tls = parseFilenames({FileBucket::Type::TLS});
2637
// set default filename depending of type
2638
myNeteditOptions.resetWritable();
2639
mySumoOptions.resetWritable();
2640
// check if save sumo additionals
2641
const bool sumoAdditionals = (myApplicationWindow->getEditMenuCommands().loadAdditionalsInSUMOGUI->getCheck() == TRUE);
2642
const bool sumoDemandElements = (myApplicationWindow->getEditMenuCommands().loadDemandInSUMOGUI->getCheck() == TRUE);
2643
// sumo config (only netedit)
2644
if (sumoconfig.size() > 0) {
2645
myNeteditOptions.set("sumocfg-file", sumoconfig);
2646
} else {
2647
myNeteditOptions.resetDefault("sumocfg-file");
2648
}
2649
// netedit config (only netedit)
2650
if (neteditconfig.size() > 0) {
2651
myNeteditOptions.set("configuration-file", neteditconfig);
2652
} else {
2653
myNeteditOptions.resetDefault("configuration-file");
2654
}
2655
// network file (common)
2656
if (networkFile.size() > 0) {
2657
myNeteditOptions.set("sumo-net-file", networkFile);
2658
mySumoOptions.set("net-file", networkFile);
2659
} else {
2660
myNeteditOptions.resetDefault("sumo-net-file");
2661
mySumoOptions.resetDefault("net-file");
2662
}
2663
// additional file (only netedit)
2664
if (additional.size() > 0) {
2665
myNeteditOptions.set("additional-files", additional);
2666
} else {
2667
myNeteditOptions.resetDefault("additional-files");
2668
}
2669
// demand file (netedit)
2670
if (demandFile.size() > 0) {
2671
myNeteditOptions.set("route-files", demandFile);
2672
} else {
2673
myNeteditOptions.resetDefault("route-files");
2674
}
2675
// demand file (sumo)
2676
if (sumoDemandElements && (demandFile.size() > 0)) {
2677
mySumoOptions.set("route-files", demandFile);
2678
} else {
2679
mySumoOptions.resetDefault("route-files");
2680
}
2681
// data file (only netedit)
2682
if (data.size() > 0) {
2683
myNeteditOptions.set("data-files", data);
2684
} else {
2685
myNeteditOptions.resetDefault("data-files");
2686
}
2687
// meanData file (only netedit)
2688
if (meanData.size() > 0) {
2689
myNeteditOptions.set("meandata-files", meanData);
2690
} else {
2691
myNeteditOptions.resetDefault("meandata-files");
2692
}
2693
// additional + meanData files (only sumo)
2694
if (sumoAdditionals && (additionalMeanData.size() > 0)) {
2695
mySumoOptions.set("additional-files", additionalMeanData);
2696
} else {
2697
mySumoOptions.resetDefault("additional-files");
2698
}
2699
// edgeType (only netedit)
2700
if (edgeType.size() > 0) {
2701
myNeteditOptions.set("edgetypes-file", edgeType);
2702
} else {
2703
myNeteditOptions.resetDefault("edgetypes-file");
2704
}
2705
// TLS (only netedit)
2706
if (tls.size() > 0) {
2707
myNeteditOptions.set("tls-file", tls);
2708
} else {
2709
myNeteditOptions.resetDefault("tls-file");
2710
}
2711
// update prefixes
2712
myBuckets.at(FileBucket::Type::SUMO_PREFIX).front()->setFilename(getPrefix(FileBucket::Type::SUMO_CONFIG, {".sumocfg", ".xml"}));
2713
myBuckets.at(FileBucket::Type::NETEDIT_PREFIX).front()->setFilename(getPrefix(FileBucket::Type::NETEDIT_CONFIG, {".netecfg", ".xml"}));
2714
myBuckets.at(FileBucket::Type::NETCONVERT_PREFIX).front()->setFilename(getPrefix(FileBucket::Type::NETCONVERT_CONFIG, {".netccfg", ".edg.xml", ".nod.xml", ".con.xml", ".typ.xml", ".tll.xml", ".xml"}));
2715
}
2716
2717
2718
std::string
2719
GNEApplicationWindowHelper::FileBucketHandler::parseFilenames(const std::vector<FileBucket::Type> types) const {
2720
std::string result;
2721
// group all saving files in a single string separated with comma
2722
for (const auto& type : types) {
2723
for (const auto& bucket : myBuckets.at(type)) {
2724
if ((bucket->getFilename().size() > 0) && (bucket->isDefaultBucket() || (bucket->getNumElements() > 0))) {
2725
result.append(bucket->getFilename() + ",");
2726
}
2727
}
2728
}
2729
// remove last ','
2730
if (result.size() > 0) {
2731
result.pop_back();
2732
}
2733
return result;
2734
}
2735
2736
2737
void
2738
GNEApplicationWindowHelper::FileBucketHandler::removeEmptyBuckets() {
2739
// iterate over all buckets and remove empty buckets (except default buckets)
2740
for (auto type : FileBucket::types) {
2741
size_t bucketIndex = 0;
2742
while (bucketIndex < myBuckets.at(type).size()) {
2743
auto bucket = myBuckets.at(type).at(bucketIndex);
2744
if (bucket->isEmpty() && (bucket->isDefaultBucket() == false)) {
2745
delete bucket;
2746
myBuckets.at(type).erase(myBuckets.at(type).begin() + bucketIndex);
2747
} else {
2748
bucketIndex++;
2749
}
2750
}
2751
}
2752
}
2753
2754
2755
std::string
2756
GNEApplicationWindowHelper::FileBucketHandler::getPrefix(FileBucket::Type type, const std::vector<std::string> invalidExtensions) const {
2757
std::string filename = getDefaultFilename(type);
2758
if (filename.size() > 0) {
2759
if (filename.back() == '.') {
2760
filename.pop_back();
2761
} else {
2762
for (const auto& invalidExtension : invalidExtensions) {
2763
filename = StringUtils::replace(filename, invalidExtension, "");
2764
}
2765
}
2766
}
2767
return filename;
2768
}
2769
2770
// ---------------------------------------------------------------------------
2771
// GNEApplicationWindowHelper - methods
2772
// ---------------------------------------------------------------------------
2773
2774
bool
2775
GNEApplicationWindowHelper::toggleEditOptionsNetwork(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {
2776
// finally function correspond to visibleMenuCommands[numericalKeyPressed]
2777
if (menuCheck == viewNet->getNetworkViewOptions().menuCheckToggleGrid) {
2778
// Call manually onCmdToggleShowGrid
2779
viewNet->onCmdToggleShowGrid(obj, sel, nullptr);
2780
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckToggleDrawJunctionShape) {
2781
// Call manually onCmdToggleDrawJunctionShape
2782
viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);
2783
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckDrawSpreadVehicles) {
2784
// Call manually onCmdToggleDrawSpreadVehicles
2785
viewNet->onCmdToggleDrawSpreadVehicles(obj, sel, nullptr);
2786
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowDemandElements) {
2787
// Call manually onCmdToggleShowDemandElementsNetwork
2788
viewNet->onCmdToggleShowDemandElementsNetwork(obj, sel, nullptr);
2789
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckSelectEdges) {
2790
// Call manually onCmdToggleSelectEdges
2791
viewNet->onCmdToggleSelectEdges(obj, sel, nullptr);
2792
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowConnections) {
2793
// Call manually onCmdToggleShowConnections
2794
viewNet->onCmdToggleShowConnections(obj, sel, nullptr);
2795
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckHideConnections) {
2796
// Call manually onCmdToggleHideConnections
2797
viewNet->onCmdToggleHideConnections(obj, sel, nullptr);
2798
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowAdditionalSubElements) {
2799
// Call manually onCmdToggleShowAdditionalSubElements
2800
viewNet->onCmdToggleShowAdditionalSubElements(obj, sel, nullptr);
2801
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowTAZElements) {
2802
// Call manually onCmdToggleShowTAZElements
2803
viewNet->onCmdToggleShowTAZElements(obj, sel, nullptr);
2804
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckExtendSelection) {
2805
// Call manually onCmdToggleExtendSelection
2806
viewNet->onCmdToggleExtendSelection(obj, sel, nullptr);
2807
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckChangeAllPhases) {
2808
// Call manually onCmdToggleChangeAllPhases
2809
viewNet->onCmdToggleChangeAllPhases(obj, sel, nullptr);
2810
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckMergeAutomatically) {
2811
// Call manually onCmdToggleMergeAutomatically
2812
viewNet->onCmdToggleMergeAutomatically(obj, sel, nullptr);
2813
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckMoveElevation) {
2814
// Call manually onCmdToggleMoveElevation
2815
viewNet->onCmdToggleMoveElevation(obj, sel, nullptr);
2816
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckChainEdges) {
2817
// Call manually onCmdToggleChainEdges
2818
viewNet->onCmdToggleChainEdges(obj, sel, nullptr);
2819
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckAutoOppositeEdge) {
2820
// Call manually onCmdToggleAutoOppositeEdge
2821
viewNet->onCmdToggleAutoOppositeEdge(obj, sel, nullptr);
2822
} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowJunctionBubble) {
2823
// Call manually onCmdToggleShowJunctionBubble
2824
viewNet->onCmdToggleShowJunctionBubbles(obj, sel, nullptr);
2825
} else {
2826
return false;
2827
}
2828
return true;
2829
}
2830
2831
2832
bool
2833
GNEApplicationWindowHelper::toggleEditOptionsDemand(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {
2834
if (menuCheck == viewNet->getDemandViewOptions().menuCheckToggleGrid) {
2835
// Call manually onCmdToggleShowGrid
2836
viewNet->onCmdToggleShowGrid(obj, sel, nullptr);
2837
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckToggleDrawJunctionShape) {
2838
// Call manually onCmdToggleDrawJunctionShape
2839
viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);
2840
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckDrawSpreadVehicles) {
2841
// Call manually onCmdToggleDrawSpreadVehicles
2842
viewNet->onCmdToggleDrawSpreadVehicles(obj, sel, nullptr);
2843
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckHideShapes) {
2844
// Call manually onCmdToggleHideShapes
2845
viewNet->onCmdToggleHideShapes(obj, sel, nullptr);
2846
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllTrips) {
2847
// Call manually onCmdToggleShowTrips
2848
viewNet->onCmdToggleShowTrips(obj, sel, nullptr);
2849
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllPersonPlans) {
2850
// Call manually onCmdToggleShowAllPersonPlans
2851
viewNet->onCmdToggleShowAllPersonPlans(obj, sel, nullptr);
2852
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckLockPerson) {
2853
// Call manually onCmdToggleLockPerson
2854
viewNet->onCmdToggleLockPerson(obj, sel, nullptr);
2855
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllContainerPlans) {
2856
// Call manually onCmdToggleShowAllContainerPlans
2857
viewNet->onCmdToggleShowAllContainerPlans(obj, sel, nullptr);
2858
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckLockContainer) {
2859
// Call manually onCmdToggleLockContainer
2860
viewNet->onCmdToggleLockContainer(obj, sel, nullptr);
2861
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckHideNonInspectedDemandElements) {
2862
// Call manually onCmdToggleHideNonInspecteDemandElements
2863
viewNet->onCmdToggleHideNonInspecteDemandElements(obj, sel, nullptr);
2864
} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowOverlappedRoutes) {
2865
// Call manually onCmdToggleHideNonInspecteDemandElements
2866
viewNet->onCmdToggleShowOverlappedRoutes(obj, sel, nullptr);
2867
} else {
2868
return false;
2869
}
2870
return true;
2871
}
2872
2873
2874
bool
2875
GNEApplicationWindowHelper::toggleEditOptionsData(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {
2876
if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleDrawJunctionShape) {
2877
// Call manually onCmdToggleDrawJunctionShape
2878
viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);
2879
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowAdditionals) {
2880
// Call manually onCmdToggleShowAdditionals
2881
viewNet->onCmdToggleShowAdditionals(obj, sel, nullptr);
2882
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowShapes) {
2883
// Call manually onCmdToggleShowShapes
2884
viewNet->onCmdToggleShowShapes(obj, sel, nullptr);
2885
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowDemandElements) {
2886
// Call manually onCmdToggleShowDemandElementsData
2887
viewNet->onCmdToggleShowDemandElementsData(obj, sel, nullptr);
2888
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelDrawing) {
2889
// Call manually onCmdToggleTAZRelDrawing
2890
viewNet->onCmdToggleTAZRelDrawing(obj, sel, nullptr);
2891
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZDrawFill) {
2892
// Call manually onCmdToggleTAZDrawFill
2893
viewNet->onCmdToggleTAZDrawFill(obj, sel, nullptr);
2894
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelOnlyFrom) {
2895
// Call manually onCmdToggleTAZRelOnlyFrom
2896
viewNet->onCmdToggleTAZRelOnlyFrom(obj, sel, nullptr);
2897
} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelOnlyTo) {
2898
// Call manually onCmdToggleTAZRelOnlyTo
2899
viewNet->onCmdToggleTAZRelOnlyTo(obj, sel, nullptr);
2900
} else {
2901
return false;
2902
}
2903
return true;
2904
}
2905
2906
2907
bool
2908
GNEApplicationWindowHelper::stringEndsWith(const std::string& str, const std::string& suffix) {
2909
if (str.length() < suffix.length()) {
2910
return false;
2911
} else {
2912
return str.compare(str.length() - suffix.length(), suffix.length(), suffix) == 0;
2913
}
2914
}
2915
2916
/****************************************************************************/
2917
2918