Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNENetgenerateDialog.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// Dialog for netgenerate
19/****************************************************************************/
20
23
25
26// ===========================================================================
27// Defines
28// ===========================================================================
29
30#define MARGIN 4
31#define MAXNUMCOLUMNS 4
32#define NUMROWSBYCOLUMN 20
33
34// ===========================================================================
35// FOX callback mapping
36// ===========================================================================
37
47
48// Object implementation
49FXIMPLEMENT(GNENetgenerateDialog, GNEDialog, GNENetgenerateDialogMap, ARRAYNUMBER(GNENetgenerateDialogMap))
50
51// ============================================-===============================
52// member method definitions
53// ===========================================================================
54
56 GNEDialog(applicationWindow, "Netgenerate", GUIIcon::NETGENERATE,
57 DialogType::NETGENERATE, GNEDialog::Buttons::RUN_ADVANCED_CANCEL,
59 // build labels
60 auto horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
61 myGridNetworkLabel = new FXLabel(horizontalFrame, TL("Grid"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
62 mySpiderNetworkLabel = new FXLabel(horizontalFrame, TL("Spider"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
63 myRandomGridNetworkLabel = new FXLabel(horizontalFrame, TL("Random grid"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
64 myRandomNetworkLabel = new FXLabel(horizontalFrame, TL("Random"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
65 // build buttons
66 horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
67 myGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
69 mySpiderNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
71 myRandomGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
73 myRandomNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
75 // add invisible separator
76 new FXSeparator(myContentFrame, SEPARATOR_NONE);
77 // build output file elements
78 horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);
79 new FXLabel(horizontalFrame, "output-file", nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));
80 GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Select filename"),
82 myOutputTextField = new FXTextField(horizontalFrame, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
83 // open dialog
84 auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
85 // reset buttons
86 if (generateOptions.getBool("grid")) {
87 if (generateOptions.getBool("rand.grid")) {
88 myRandomGridNetworkButton->setChecked(true);
89 onCmdSetRandomNetworkGridNetwork(nullptr, 0, nullptr);
90 } else {
91 myGridNetworkButton->setChecked(true);
92 onCmdSetGridNetwork(nullptr, 0, nullptr);
93 }
94 } else if (generateOptions.getBool("spider")) {
95 mySpiderNetworkButton->setChecked(true);
96 onCmdSetSpiderNetwork(nullptr, 0, nullptr);
97 } else if (generateOptions.getBool("random")) {
98 myRandomNetworkButton->setChecked(true);
99 onCmdSetRandomNetwork(nullptr, 0, nullptr);
100 }
101 // set output
102 myOutputTextField->setText(generateOptions.getValueString("output-file").c_str());
103 // disable run and advanced
104 updateRunButtons();
105 // open dialog
106 openDialog();
107}
108
109
111
112
113void
115 // nothing to do
116}
117
118
119long
120GNENetgenerateDialog::onCmdOpenOutputFile(FXObject*, FXSelector, void*) {
121 // get output file
122 const auto networkFileDialog = GNEFileDialog(myApplicationWindow, TL("network file"),
126 // check file
127 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
128 myOutputTextField->setText(networkFileDialog.getFilename().c_str(), TRUE);
129 }
130 return 1;
131}
132
133
134long
135GNENetgenerateDialog::onCmdSetOutput(FXObject*, FXSelector, void*) {
136 auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
137 generateOptions.resetWritable();
138 // check if filename is valid
139 if (SUMOXMLDefinitions::isValidFilename(myOutputTextField->getText().text()) == false) {
141 } else {
142 generateOptions.set("output-file", myOutputTextField->getText().text());
144 }
146 return 1;
147}
148
149
150long
151GNENetgenerateDialog::onCmdSetGridNetwork(FXObject*, FXSelector, void*) {
152 auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
153 // reset all flags
154 generateOptions.resetWritable();
155 generateOptions.set("grid", "true");
156 generateOptions.set("spider", "false");
157 generateOptions.set("rand", "false");
158 generateOptions.set("rand.grid", "false");
159 // set buttons
160 myGridNetworkButton->setChecked(true, true);
161 mySpiderNetworkButton->setChecked(false, true);
163 myRandomNetworkButton->setChecked(false, true);
164 // set labels color
169 // enable flag
172 return 1;
173}
174
175
176long
177GNENetgenerateDialog::onCmdSetSpiderNetwork(FXObject*, FXSelector, void*) {
178 auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
179 // reset all flags
180 generateOptions.resetWritable();
181 generateOptions.set("grid", "false");
182 generateOptions.set("spider", "true");
183 generateOptions.set("spider.omit-center", "true");
184 generateOptions.set("rand", "false");
185 generateOptions.set("rand.grid", "false");
186 // set buttons
187 myGridNetworkButton->setChecked(false, true);
190 myRandomNetworkButton->setChecked(false, true);
191 // set labels color
196 // enable flag
199 return 1;
200}
201
202
203long
205 auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
206 // reset all flags
207 generateOptions.resetWritable();
208 generateOptions.set("grid", "false");
209 generateOptions.set("spider", "false");
210 generateOptions.set("rand", "true");
211 generateOptions.set("rand.grid", "true");
212 // set buttons
213 myGridNetworkButton->setChecked(false, true);
214 mySpiderNetworkButton->setChecked(false, true);
216 myRandomNetworkButton->setChecked(false, true);
217 // set labels color
222 // enable flag
225 return 1;
226}
227
228
229long
230GNENetgenerateDialog::onCmdSetRandomNetwork(FXObject*, FXSelector, void*) {
231 auto& generateOptions = myApplicationWindow->getNetgenerateOptions();
232 // reset all flags
233 generateOptions.resetWritable();
234 generateOptions.set("grid", "false");
235 generateOptions.set("spider", "false");
236 generateOptions.set("rand", "true");
237 generateOptions.set("rand.grid", "false");
238 // set buttons
239 myGridNetworkButton->setChecked(false, true);
240 mySpiderNetworkButton->setChecked(false, true);
243 // set labels color
248 // enable flag
251 return 1;
252}
253
254
255long
256GNENetgenerateDialog::onCmdRun(FXObject*, FXSelector, void*) {
257 // close dialog
259 // run netgenerate
260 return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_RUNNETGENERATE), nullptr);
261}
262
263
264long
265GNENetgenerateDialog::onCmdAdvanced(FXObject*, FXSelector, void*) {
266 // close dialog
268 // open netgenerate option dialog
269 return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_NETGENERATEOPTIONS), nullptr);
270}
271
272
273void
275 // enable or disable run and advanced buttons depending of flags
276 if ((myOutputTextField->getText().length() > 0) && mySelectedNetworktypeFlag) {
277 myRunButton->enable();
278 myAdvancedButton->enable();
279 } else {
280 myRunButton->disable();
281 myAdvancedButton->disable();
282 }
283}
284
285/****************************************************************************/
DialogType
FXDEFMAP(GNENetgenerateDialog) GNENetgenerateDialogMap[]
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:765
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:775
@ MID_GNE_SET_ATTRIBUTE
attribute edited
Definition GUIAppEnum.h:993
@ MID_GNE_BUTTON_ADVANCED
advanced button
@ MID_GNE_NETGENERATE_SPIDER
netgenerate spider network
Definition GUIAppEnum.h:769
@ MID_GNE_NETGENERATE_RANDOM
netgenerate random network
Definition GUIAppEnum.h:773
@ MID_GNE_NETGENERATE_RANDOMGRID
netgenerate random grid network
Definition GUIAppEnum.h:771
@ MID_GNE_NETGENERATE_GRID
netgenerate grid network
Definition GUIAppEnum.h:767
@ MID_GNE_OPEN
open element
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButtonIcon
button only with icon
Definition GUIDesigns.h:109
#define GUIDesignTextField
Definition GUIDesigns.h:74
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition GUIDesigns.h:430
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition GUIDesigns.h:92
#define GUIDesignTextColorBlue
blue color (for default text)
Definition GUIDesigns.h:41
#define GUIDesignTextColorBlack
black color (for correct text)
Definition GUIDesigns.h:38
#define GUIDesignBigSizeElement
elements with big images
Definition GUIDesigns.h:59
#define GUIDesignMFXCheckableButtonBig
checkable button extended over frame
Definition GUIDesigns.h:167
#define GUIDesignLabelThickedFixed(width)
label thicked, icon before text, text centered and custom width
Definition GUIDesigns.h:254
GUIIcon
An enumeration of icons used by the gui applications.
Definition GUIIcons.h:33
@ NETGENERATE_SPIDER
@ NETGENERATE_RANDOMGRID
@ NETGENERATE_GRID
@ NETGENERATE_RANDOM
#define TL(string)
Definition MsgHandler.h:304
The main window of Netedit.
OptionsCont & getNetgenerateOptions()
get netgenerate options container
FXButton * myAdvancedButton
advanced button
Definition GNEDialog.h:167
GNEApplicationWindow * myApplicationWindow
FOX needs this.
Definition GNEDialog.h:143
OpenType
Open dialog type.
Definition GNEDialog.h:58
FXButton * myRunButton
run button
Definition GNEDialog.h:161
long closeDialogCanceling()
close dialog declining the changes
long onCmdSetGridNetwork(FXObject *, FXSelector, void *)
set grid mode
long onCmdSetSpiderNetwork(FXObject *, FXSelector, void *)
set spider
FXLabel * mySpiderNetworkLabel
grid network
long onCmdSetOutput(FXObject *, FXSelector, void *)
set output file
long onCmdSetRandomNetworkGridNetwork(FXObject *, FXSelector, void *)
set random grid
MFXCheckableButton * myRandomNetworkButton
grid network
long onCmdOpenOutputFile(FXObject *, FXSelector, void *)
open output file
long onCmdAdvanced(FXObject *, FXSelector, void *)
event after press advanced button
FXLabel * myGridNetworkLabel
grid network
MFXCheckableButton * myGridNetworkButton
grid network
long onCmdSetRandomNetwork(FXObject *, FXSelector, void *)
set random
MFXCheckableButton * mySpiderNetworkButton
grid network
long onCmdRun(FXObject *, FXSelector, void *)
event after press run button
void updateRunButtons()
update run buttons
bool mySelectedNetworktypeFlag
flag to indicate if networkType was selected
MFXCheckableButton * myRandomGridNetworkButton
random grid network
FXLabel * myRandomGridNetworkLabel
random grid network
void runInternalTest(const InternalTestStep::DialogArgument *dialogArgument)
run internal test
FXLabel * myRandomNetworkLabel
grid network
FXTextField * myOutputTextField
output text field
static FXButton * buildFXButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXIcon *ic, FXObject *tgt, FXSelector sel, FXuint opts=BUTTON_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
build button
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
dialog arguments, used for certain modal dialogs that can not be edited using tab
void setChecked(bool val, const bool inform=false)
check or uncheck this MFXCheckableButton
void resetWritable()
Resets all options to be writeable.
static bool isValidFilename(const std::string &value)
whether the given string is a valid attribute for a filename (for example, a name)
static StringBijection< NetFileExtension > NetFileExtensions
net file extensions