Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/dialogs/tools/GNENetgenerateDialog.cpp
193723 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 GNENetgenerateDialog.cpp
15
/// @author Pablo Alvarez Lopez
16
/// @date Mar 2023
17
///
18
// Dialog for netgenerate
19
/****************************************************************************/
20
21
#include <netedit/GNEApplicationWindow.h>
22
#include <utils/gui/div/GUIDesigns.h>
23
24
#include "GNENetgenerateDialog.h"
25
26
// ===========================================================================
27
// FOX callback mapping
28
// ===========================================================================
29
30
FXDEFMAP(GNENetgenerateDialog) GNENetgenerateDialogMap[] = {
31
FXMAPFUNC(SEL_COMMAND, MID_GNE_OPEN, GNENetgenerateDialog::onCmdOpenOutputFile),
32
FXMAPFUNC(SEL_COMMAND, MID_GNE_SET_ATTRIBUTE, GNENetgenerateDialog::onCmdSetOutput),
33
FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_GRID, GNENetgenerateDialog::onCmdSetGridNetwork),
34
FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_SPIDER, GNENetgenerateDialog::onCmdSetSpiderNetwork),
35
FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_RANDOMGRID, GNENetgenerateDialog::onCmdSetRandomNetworkGridNetwork),
36
FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_RANDOM, GNENetgenerateDialog::onCmdSetRandomNetwork),
37
FXMAPFUNC(SEL_COMMAND, MID_GNE_BUTTON_ADVANCED, GNENetgenerateDialog::onCmdAdvanced),
38
};
39
40
// Object implementation
41
FXIMPLEMENT(GNENetgenerateDialog, GNEDialog, GNENetgenerateDialogMap, ARRAYNUMBER(GNENetgenerateDialogMap))
42
43
// ============================================-===============================
44
// member method definitions
45
// ===========================================================================
46
47
GNENetgenerateDialog::GNENetgenerateDialog(GNEApplicationWindow* applicationWindow) :
48
GNEDialog(applicationWindow, "Netgenerate", GUIIcon::NETGENERATE,
49
DialogType::NETGENERATE, GNEDialog::Buttons::RUN_ADVANCED_CANCEL,
50
GNEDialog::OpenType::MODAL, ResizeMode::STATIC) {
51
// build labels
52
auto horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
53
myGridNetworkLabel = new FXLabel(horizontalFrame, TL("Grid"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
54
mySpiderNetworkLabel = new FXLabel(horizontalFrame, TL("Spider"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
55
myRandomGridNetworkLabel = new FXLabel(horizontalFrame, TL("Random grid"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
56
myRandomNetworkLabel = new FXLabel(horizontalFrame, TL("Random"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
57
// build buttons
58
horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
59
myGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
60
GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_GRID), this, MID_GNE_NETGENERATE_GRID, GUIDesignMFXCheckableButtonBig);
61
mySpiderNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
62
GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_SPIDER), this, MID_GNE_NETGENERATE_SPIDER, GUIDesignMFXCheckableButtonBig);
63
myRandomGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
64
GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_RANDOMGRID), this, MID_GNE_NETGENERATE_RANDOMGRID, GUIDesignMFXCheckableButtonBig);
65
myRandomNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
66
GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_RANDOM), this, MID_GNE_NETGENERATE_RANDOM, GUIDesignMFXCheckableButtonBig);
67
// add invisible separator
68
new FXSeparator(myContentFrame, SEPARATOR_NONE);
69
// build output file elements
70
horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
71
new FXLabel(horizontalFrame, "output-file", nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
72
GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Select filename"),
73
GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), this, MID_GNE_OPEN, GUIDesignButtonIcon);
74
myOutputTextField = new FXTextField(horizontalFrame, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
75
// open dialog
76
auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
77
// reset buttons
78
if (generateOptions.getBool("grid")) {
79
if (generateOptions.getBool("rand.grid")) {
80
myRandomGridNetworkButton->setChecked(true);
81
onCmdSetRandomNetworkGridNetwork(nullptr, 0, nullptr);
82
} else {
83
myGridNetworkButton->setChecked(true);
84
onCmdSetGridNetwork(nullptr, 0, nullptr);
85
}
86
} else if (generateOptions.getBool("spider")) {
87
mySpiderNetworkButton->setChecked(true);
88
onCmdSetSpiderNetwork(nullptr, 0, nullptr);
89
} else if (generateOptions.getBool("random")) {
90
myRandomNetworkButton->setChecked(true);
91
onCmdSetRandomNetwork(nullptr, 0, nullptr);
92
}
93
// set output
94
myOutputTextField->setText(generateOptions.getValueString("output-file").c_str());
95
// disable run and advanced
96
updateRunButtons();
97
// open dialog
98
openDialog();
99
}
100
101
102
GNENetgenerateDialog::~GNENetgenerateDialog() {}
103
104
105
void
106
GNENetgenerateDialog::runInternalTest(const InternalTestStep::DialogArgument* /*dialogArgument*/) {
107
// nothing to do
108
}
109
110
111
long
112
GNENetgenerateDialog::onCmdOpenOutputFile(FXObject*, FXSelector, void*) {
113
// get output file
114
const GNEFileDialog networkFileDialog(myApplicationWindow, this,
115
TL("network file"),
116
SUMOXMLDefinitions::NetFileExtensions.getStrings(),
117
GNEFileDialog::OpenMode::SAVE,
118
GNEFileDialog::ConfigType::NETEDIT);
119
// check file
120
if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
121
myOutputTextField->setText(networkFileDialog.getFilename().c_str(), TRUE);
122
}
123
return 1;
124
}
125
126
127
long
128
GNENetgenerateDialog::onCmdSetOutput(FXObject*, FXSelector, void*) {
129
auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
130
generateOptions.resetWritable();
131
// check if filename is valid
132
if (SUMOXMLDefinitions::isValidFilename(myOutputTextField->getText().text()) == false) {
133
myOutputTextField->setTextColor(GUIDesignTextColorRed);
134
} else {
135
generateOptions.set("output-file", myOutputTextField->getText().text());
136
myOutputTextField->setTextColor(GUIDesignTextColorBlack);
137
}
138
updateRunButtons();
139
return 1;
140
}
141
142
143
long
144
GNENetgenerateDialog::onCmdSetGridNetwork(FXObject*, FXSelector, void*) {
145
auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
146
// reset all flags
147
generateOptions.resetWritable();
148
generateOptions.set("grid", "true");
149
generateOptions.set("spider", "false");
150
generateOptions.set("rand", "false");
151
generateOptions.set("rand.grid", "false");
152
// set buttons
153
myGridNetworkButton->setChecked(true, true);
154
mySpiderNetworkButton->setChecked(false, true);
155
myRandomGridNetworkButton->setChecked(false, true);
156
myRandomNetworkButton->setChecked(false, true);
157
// set labels color
158
myGridNetworkLabel->setTextColor(GUIDesignTextColorBlue);
159
mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlack);
160
myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);
161
myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlack);
162
// enable flag
163
mySelectedNetworktypeFlag = true;
164
updateRunButtons();
165
return 1;
166
}
167
168
169
long
170
GNENetgenerateDialog::onCmdSetSpiderNetwork(FXObject*, FXSelector, void*) {
171
auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
172
// reset all flags
173
generateOptions.resetWritable();
174
generateOptions.set("grid", "false");
175
generateOptions.set("spider", "true");
176
generateOptions.set("spider.omit-center", "true");
177
generateOptions.set("rand", "false");
178
generateOptions.set("rand.grid", "false");
179
// set buttons
180
myGridNetworkButton->setChecked(false, true);
181
mySpiderNetworkButton->setChecked(true, true);
182
myRandomGridNetworkButton->setChecked(false, true);
183
myRandomNetworkButton->setChecked(false, true);
184
// set labels color
185
myGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);
186
mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlue);
187
myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);
188
myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlack);
189
// enable flag
190
mySelectedNetworktypeFlag = true;
191
updateRunButtons();
192
return 1;
193
}
194
195
196
long
197
GNENetgenerateDialog::onCmdSetRandomNetworkGridNetwork(FXObject*, FXSelector, void*) {
198
auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
199
// reset all flags
200
generateOptions.resetWritable();
201
generateOptions.set("grid", "false");
202
generateOptions.set("spider", "false");
203
generateOptions.set("rand", "true");
204
generateOptions.set("rand.grid", "true");
205
// set buttons
206
myGridNetworkButton->setChecked(false, true);
207
mySpiderNetworkButton->setChecked(false, true);
208
myRandomGridNetworkButton->setChecked(true, true);
209
myRandomNetworkButton->setChecked(false, true);
210
// set labels color
211
myGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);
212
mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlack);
213
myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlue);
214
myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlack);
215
// enable flag
216
mySelectedNetworktypeFlag = true;
217
updateRunButtons();
218
return 1;
219
}
220
221
222
long
223
GNENetgenerateDialog::onCmdSetRandomNetwork(FXObject*, FXSelector, void*) {
224
auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
225
// reset all flags
226
generateOptions.resetWritable();
227
generateOptions.set("grid", "false");
228
generateOptions.set("spider", "false");
229
generateOptions.set("rand", "true");
230
generateOptions.set("rand.grid", "false");
231
// set buttons
232
myGridNetworkButton->setChecked(false, true);
233
mySpiderNetworkButton->setChecked(false, true);
234
myRandomGridNetworkButton->setChecked(false, true);
235
myRandomNetworkButton->setChecked(true, true);
236
// set labels color
237
myGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);
238
mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlack);
239
myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);
240
myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlue);
241
// enable flag
242
mySelectedNetworktypeFlag = true;
243
updateRunButtons();
244
return 1;
245
}
246
247
248
long
249
GNENetgenerateDialog::onCmdRun(FXObject*, FXSelector, void*) {
250
// close dialog
251
closeDialogCanceling();
252
// run netgenerate
253
return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_RUNNETGENERATE), nullptr);
254
}
255
256
257
long
258
GNENetgenerateDialog::onCmdAdvanced(FXObject*, FXSelector, void*) {
259
// close dialog
260
closeDialogCanceling();
261
// open netgenerate option dialog
262
return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_NETGENERATEOPTIONS), nullptr);
263
}
264
265
266
void
267
GNENetgenerateDialog::updateRunButtons() {
268
// enable or disable run and advanced buttons depending of flags
269
if ((myOutputTextField->getText().length() > 0) && mySelectedNetworktypeFlag) {
270
myRunButton->enable();
271
myAdvancedButton->enable();
272
} else {
273
myRunButton->disable();
274
myAdvancedButton->disable();
275
}
276
}
277
278
/****************************************************************************/
279
280