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// FOX callback mapping
28// ===========================================================================
29
39
40// Object implementation
41FXIMPLEMENT(GNENetgenerateDialog, GNEDialog, GNENetgenerateDialogMap, ARRAYNUMBER(GNENetgenerateDialogMap))
42
43// ============================================-===============================
44// member method definitions
45// ===========================================================================
46
48 GNEDialog(applicationWindow, "Netgenerate", GUIIcon::NETGENERATE,
49 DialogType::NETGENERATE, GNEDialog::Buttons::RUN_ADVANCED_CANCEL,
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(), "",
61 mySpiderNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
63 myRandomGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
65 myRandomNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",
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"),
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
103
104
105void
107 // nothing to do
108}
109
110
111long
112GNENetgenerateDialog::onCmdOpenOutputFile(FXObject*, FXSelector, void*) {
113 // get output file
114 const auto networkFileDialog = GNEFileDialog(this, myApplicationWindow,
115 TL("network file"),
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
127long
128GNENetgenerateDialog::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) {
134 } else {
135 generateOptions.set("output-file", myOutputTextField->getText().text());
137 }
139 return 1;
140}
141
142
143long
144GNENetgenerateDialog::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);
156 myRandomNetworkButton->setChecked(false, true);
157 // set labels color
162 // enable flag
165 return 1;
166}
167
168
169long
170GNENetgenerateDialog::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);
183 myRandomNetworkButton->setChecked(false, true);
184 // set labels color
189 // enable flag
192 return 1;
193}
194
195
196long
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);
209 myRandomNetworkButton->setChecked(false, true);
210 // set labels color
215 // enable flag
218 return 1;
219}
220
221
222long
223GNENetgenerateDialog::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);
236 // set labels color
241 // enable flag
244 return 1;
245}
246
247
248long
249GNENetgenerateDialog::onCmdRun(FXObject*, FXSelector, void*) {
250 // close dialog
252 // run netgenerate
253 return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_RUNNETGENERATE), nullptr);
254}
255
256
257long
258GNENetgenerateDialog::onCmdAdvanced(FXObject*, FXSelector, void*) {
259 // close dialog
261 // open netgenerate option dialog
262 return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_NETGENERATEOPTIONS), nullptr);
263}
264
265
266void
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/****************************************************************************/
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:173
GNEApplicationWindow * myApplicationWindow
FOX needs this.
Definition GNEDialog.h:146
OpenType
Open dialog type.
Definition GNEDialog.h:58
FXButton * myRunButton
run button
Definition GNEDialog.h:167
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