Eclipse SUMO - Simulation of Urban MObility
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
GNEAllowVClassesDialog.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 edit allow VClass attribute
19/****************************************************************************/
20
21#include <netedit/GNEViewNet.h>
28
30
31// ===========================================================================
32// FOX callback mapping
33// ===========================================================================
34
45
46// Object implementation
47FXIMPLEMENT(GNEAllowVClassesDialog, MFXDialogBox, GNEAllowVClassesDialogMap, ARRAYNUMBER(GNEAllowVClassesDialogMap))
48
49// ===========================================================================
50// member method definitions
51// ===========================================================================
52
54 MFXDialogBox(viewNet->getApp(), "", GUIDesignDialogBox),
55 myViewNet(viewNet) {
56 // set vehicle icon for this dialog
58 // create main frame
59 FXVerticalFrame* mainFrame = new FXVerticalFrame(this, GUIDesignAuxiliarFrame);
60 // create groupbox for options
61 FXGroupBox* myGroupBoxOptions = new FXGroupBox(mainFrame, TL("Selection options"), GUIDesignGroupBoxFrame);
62 FXHorizontalFrame* myOptionsFrame = new FXHorizontalFrame(myGroupBoxOptions, GUIDesignAuxiliarHorizontalFrame);
63 // allow all
65 new FXLabel(myOptionsFrame, TL("Allow all vehicles"), nullptr, GUIDesignLabelThick(JUSTIFY_LEFT));
66 // only road
68 new FXLabel(myOptionsFrame, TL("Allow only road vehicles"), nullptr, GUIDesignLabelThick(JUSTIFY_LEFT));
69 // only rail
71 new FXLabel(myOptionsFrame, TL("Allow only rail vehicles"), nullptr, GUIDesignLabelThick(JUSTIFY_LEFT));
72 // disallow all
74 new FXLabel(myOptionsFrame, TL("Disallow all vehicles"), nullptr, GUIDesignLabelThick(JUSTIFY_LEFT));
75 // create groupbox for vehicles
76 FXGroupBox* myGroupBoxVehiclesFrame = new FXGroupBox(mainFrame, ("Select " + toString(SUMO_ATTR_VCLASS) + "es").c_str(), GUIDesignGroupBoxFrame);
77 // Create frame for vehicles's columns
78 FXHorizontalFrame* myVehiclesFrame = new FXHorizontalFrame(myGroupBoxVehiclesFrame, GUIDesignContentsFrame);
79 // create left frame and fill it
80 FXVerticalFrame* myContentLeftFrame = new FXVerticalFrame(myVehiclesFrame, GUIDesignAuxiliarFrame);
81 buildVClass(myContentLeftFrame, SVC_PASSENGER, GUIIcon::VCLASS_PASSENGER, TL("Default vehicle class"));
82 buildVClass(myContentLeftFrame, SVC_PRIVATE, GUIIcon::VCLASS_PRIVATE, TL("A passenger car assigned for private use"));
83 buildVClass(myContentLeftFrame, SVC_TAXI, GUIIcon::VCLASS_TAXI, TL("Vehicle for hire with a driver"));
84 buildVClass(myContentLeftFrame, SVC_BUS, GUIIcon::VCLASS_BUS, TL("Urban line traffic"));
85 buildVClass(myContentLeftFrame, SVC_COACH, GUIIcon::VCLASS_COACH, TL("Overland transport"));
86 buildVClass(myContentLeftFrame, SVC_DELIVERY, GUIIcon::VCLASS_DELIVERY, TL("Vehicles specialized in delivering goods"));
87 buildVClass(myContentLeftFrame, SVC_TRUCK, GUIIcon::VCLASS_TRUCK, TL("Vehicle designed to transport cargo"));
88 buildVClass(myContentLeftFrame, SVC_TRAILER, GUIIcon::VCLASS_TRAILER, TL("Truck with trailer"));
89 buildVClass(myContentLeftFrame, SVC_EMERGENCY, GUIIcon::VCLASS_EMERGENCY, TL("Vehicle designated to respond to an emergency"));
90 buildVClass(myContentLeftFrame, SVC_MOTORCYCLE, GUIIcon::VCLASS_MOTORCYCLE, TL("Two- or three-wheeled motor vehicle"));
91 buildVClass(myContentLeftFrame, SVC_MOPED, GUIIcon::VCLASS_MOPED, TL("Motorcycle not allowed in motorways"));
92 // create center frame and fill it
93 FXVerticalFrame* myContentCenterFrame = new FXVerticalFrame(myVehiclesFrame, GUIDesignAuxiliarFrame);
94 buildVClass(myContentCenterFrame, SVC_BICYCLE, GUIIcon::VCLASS_BICYCLE, TL("Human-powered, pedal-driven vehicle"));
95 buildVClass(myContentCenterFrame, SVC_SCOOTER, GUIIcon::VCLASS_SCOOTER, TL("An electric scooter or a kick scooter"));
96 buildVClass(myContentCenterFrame, SVC_PEDESTRIAN, GUIIcon::VCLASS_PEDESTRIAN, TL("Person traveling on foot"));
97 buildVClass(myContentCenterFrame, SVC_WHEELCHAIR, GUIIcon::VCLASS_WHEELCHAIR, TL("A mobility impaired person"));
98 buildVClass(myContentCenterFrame, SVC_TRAM, GUIIcon::VCLASS_TRAM, TL("Rail vehicle which runs on tracks"));
99 buildVClass(myContentCenterFrame, SVC_RAIL_ELECTRIC, GUIIcon::VCLASS_RAIL_ELECTRIC, TL("Rail electric vehicle"));
100 buildVClass(myContentCenterFrame, SVC_RAIL_FAST, GUIIcon::VCLASS_RAIL_FAST, TL("High-speed rail vehicle"));
101 buildVClass(myContentCenterFrame, SVC_RAIL_URBAN, GUIIcon::VCLASS_RAIL_URBAN, TL("Heavier than tram"));
102 buildVClass(myContentCenterFrame, SVC_RAIL, GUIIcon::VCLASS_RAIL, TL("Heavy rail vehicle"));
103 buildVClass(myContentCenterFrame, SVC_CABLE_CAR, GUIIcon::VCLASS_CABLE_CAR, TL("A conveyance suspended on a cable"));
104 buildVClass(myContentCenterFrame, SVC_SUBWAY, GUIIcon::VCLASS_SUBWAY, TL("A railway that mostly runs underground"));
105 // create right frame and fill it (8 vehicles)
106 FXVerticalFrame* myContentRightFrame = new FXVerticalFrame(myVehiclesFrame, GUIDesignAuxiliarFrame);
107 buildVClass(myContentRightFrame, SVC_E_VEHICLE, GUIIcon::VCLASS_EVEHICLE, TL("Future electric mobility vehicles"));
108 buildVClass(myContentRightFrame, SVC_ARMY, GUIIcon::VCLASS_ARMY, TL("Vehicle designed for military forces"));
109 buildVClass(myContentRightFrame, SVC_SHIP, GUIIcon::VCLASS_SHIP, TL("Basic class for navigating waterway"));
110 buildVClass(myContentRightFrame, SVC_AUTHORITY, GUIIcon::VCLASS_AUTHORITY, TL("Vehicle of a governmental security agency"));
111 buildVClass(myContentRightFrame, SVC_VIP, GUIIcon::VCLASS_VIP, TL("A civilian security armored car used by VIPs"));
112 buildVClass(myContentRightFrame, SVC_HOV, GUIIcon::VCLASS_HOV, TL("High-Occupancy Vehicle (two or more passengers)"));
113 buildVClass(myContentRightFrame, SVC_CONTAINER, GUIIcon::VCLASS_CONTAINER, TL("A transport container"));
114 buildVClass(myContentRightFrame, SVC_AIRCRAFT, GUIIcon::VCLASS_AIRCRAFT, TL("An airplane"));
115 buildVClass(myContentRightFrame, SVC_DRONE, GUIIcon::VCLASS_DRONE, TL("A small unmanned robot"));
116 buildVClass(myContentRightFrame, SVC_CUSTOM1, GUIIcon::VCLASS_CUSTOM1, TL("Reserved for user-defined semantics"));
117 buildVClass(myContentRightFrame, SVC_CUSTOM2, GUIIcon::VCLASS_CUSTOM2, TL("Reserved for user-defined semantics"));
118 // create dialog buttons bot centered
119 FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(mainFrame, GUIDesignHorizontalFrame);
120 new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
121 myKeepOldButton = GUIDesigns::buildFXButton(buttonsFrame, TL("accept"), "", TL("close"), GUIIconSubSys::getIcon(GUIIcon::ACCEPT), this, MID_GNE_BUTTON_ACCEPT, GUIDesignButtonAccept);
122 myCancelButton = GUIDesigns::buildFXButton(buttonsFrame, TL("cancel"), "", TL("close"), GUIIconSubSys::getIcon(GUIIcon::CANCEL), this, MID_GNE_BUTTON_CANCEL, GUIDesignButtonCancel);
123 myResetButton = GUIDesigns::buildFXButton(buttonsFrame, TL("reset"), "", TL("close"), GUIIconSubSys::getIcon(GUIIcon::RESET), this, MID_GNE_BUTTON_RESET, GUIDesignButtonReset);
124 new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
125}
126
127
130
131
132int
133GNEAllowVClassesDialog::openDialog(SumoXMLAttr attr, const std::string originalVClasses, GNEInternalTest* internalTests) {
134 setTitle(TLF("Edit vClasses of attribute '%'", toString(attr)).c_str());
135 myOriginalVClasses = originalVClasses;
136 myEditedVClasses = originalVClasses;
137 // reset dialog
138 onCmdReset(nullptr, 0, nullptr);
139 // run it as modal
140 return openModalDialog(internalTests);
141}
142
143
144std::string
148
149
150long
151GNEAllowVClassesDialog::onCmdValueChanged(FXObject* obj, FXSelector, void*) {
152 FXButton* buttonPressed = dynamic_cast<FXButton*>(obj);
153 // change icon of button
154 for (const auto& vClass : myVClassMap) {
155 if (vClass.second.first == buttonPressed) {
156 if (buttonPressed->getIcon() == GUIIconSubSys::getIcon(GUIIcon::ACCEPT)) {
157 buttonPressed->setIcon(GUIIconSubSys::getIcon(GUIIcon::CANCEL));
158 } else {
159 buttonPressed->setIcon(GUIIconSubSys::getIcon(GUIIcon::ACCEPT));
160 }
161 return 1;
162 }
163 }
164 return 1;
165}
166
167
168long
169GNEAllowVClassesDialog::onCmdSelectAll(FXObject*, FXSelector, void*) {
170 // change all icons to accept
171 for (const auto& vClass : myVClassMap) {
172 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::ACCEPT));
173 }
174 return 1;
175}
176
177
178long
179GNEAllowVClassesDialog::onCmdUnselectAll(FXObject*, FXSelector, void*) {
180 // change all icons to cancel
181 for (const auto& vClass : myVClassMap) {
182 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::CANCEL));
183 }
184 return 1;
185}
186
187
188long
189GNEAllowVClassesDialog::onCmdSelectOnlyRoad(FXObject*, FXSelector, void*) {
190 // change all non-road icons to disallow, and allow for the rest
191 for (const auto& vClass : myVClassMap) {
192 if ((vClass.first & (SVC_PEDESTRIAN | SVC_NON_ROAD)) == 0) {
193 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::ACCEPT));
194 } else {
195 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::CANCEL));
196 }
197 }
198 return 1;
199}
200
201
202long
203GNEAllowVClassesDialog::onCmdSelectOnlyRail(FXObject*, FXSelector, void*) {
204 // change all non-road icons to disallow, and allow for the rest
205 for (const auto& vClass : myVClassMap) {
206 if ((vClass.first & SVC_RAIL_CLASSES) != 0) {
207 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::ACCEPT));
208 } else {
209 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::CANCEL));
210 }
211 }
212 return 1;
213}
214
215
216long
217GNEAllowVClassesDialog::onCmdAccept(FXObject* sender, FXSelector sel, void* arg) {
218 bool allSelected = true;
219 // clear allow and disallow VClasses
220 std::vector<std::string> allowedVehicles;
221 for (const auto& vClass : myVClassMap) {
222 // check if vehicle is allowed depending on the Icon
223 if (vClass.second.first->getIcon() == GUIIconSubSys::getIcon(GUIIcon::ACCEPT)) {
224 allowedVehicles.push_back(getVehicleClassNames(vClass.first));
225 } else {
226 allSelected = false;
227 }
228 }
229 if (allSelected) {
230 myEditedVClasses = "all";
231 } else {
232 myEditedVClasses = joinToString(allowedVehicles, " ");
233 }
234 // Stop Modal if we have a different classes from original
236 return MFXDialogBox::onCmdAccept(sender, sel, arg);
237 } else {
238 return MFXDialogBox::onCmdCancel(sender, sel, arg);
239 }
240}
241
242
243long
244GNEAllowVClassesDialog::onCmdCancel(FXObject* sender, FXSelector sel, void* arg) {
245 // reset vClasses
247 // cancel
248 return MFXDialogBox::onCmdCancel(sender, sel, arg);
249}
250
251
252long
253GNEAllowVClassesDialog::onCmdReset(FXObject*, FXSelector, void*) {
254 // continue depending of allow
255 if (myOriginalVClasses == "all") {
256 // iterate over myVClassMap and set all icons as true
257 for (const auto& vClass : myVClassMap) {
258 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::ACCEPT));
259 }
260 } else {
261 // declare string vector for saving all vclasses
262 const std::vector<std::string>& allowStringVector = StringTokenizer(myOriginalVClasses).getVector();
263 const std::set<std::string> allowSet(allowStringVector.begin(), allowStringVector.end());
264 // iterate over myVClassMap and set icons
265 for (const auto& vClass : myVClassMap) {
266 if (allowSet.count(getVehicleClassNames(vClass.first)) > 0) {
267 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::ACCEPT));
268 } else {
269 vClass.second.first->setIcon(GUIIconSubSys::getIcon(GUIIcon::CANCEL));
270 }
271 }
272 }
273 // reset vClasses
275 return 1;
276}
277
278
279void
280GNEAllowVClassesDialog::buildVClass(FXVerticalFrame* contentsFrame, SUMOVehicleClass vclass, GUIIcon vclassIcon, const std::string& description) {
281 // add frame for vehicle icons
282 FXHorizontalFrame* vehicleFrame = new FXHorizontalFrame(contentsFrame, GUIDesignAuxiliarHorizontalFrame);
283 FXLabel* labelVehicleIcon = new FXLabel(vehicleFrame, "", GUIIconSubSys::getIcon(vclassIcon), GUIDesignLabelIcon64x32Thicked);
284 labelVehicleIcon->setBackColor(FXRGBA(255, 255, 255, 255));
285 // create frame for information and button
286 FXVerticalFrame* buttonAndInformationFrame = new FXVerticalFrame(vehicleFrame, GUIDesignAuxiliarHorizontalFrame);
287 FXHorizontalFrame* buttonAndStatusFrame = new FXHorizontalFrame(buttonAndInformationFrame, GUIDesignAuxiliarHorizontalFrame);
288 // create status and text button
290 myVClassMap[vclass].second = new FXLabel(buttonAndStatusFrame, toString(vclass).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_LEFT));
291 // create label for description of vehicle
292 new FXLabel(buttonAndInformationFrame, description.c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_LEFT));
293}
294
295
296/****************************************************************************/
FXDEFMAP(GNEAllowVClassesDialog) GNEAllowVClassesDialogMap[]
@ MID_GNE_ALLOWDISALLOW_CHANGE
select/unselect single vehicle
@ MID_GNE_BUTTON_CANCEL
cancel button
@ MID_GNE_BUTTON_RESET
reset button
@ MID_GNE_ALLOWDISALLOW_ONLY_ROAD
select only non road vehicles
@ MID_GNE_ALLOWDISALLOW_ONLY_RAIL
select only rail vehicles
@ MID_GNE_ALLOWDISALLOW_UNSELECTALL
unselect all vehicles
@ MID_GNE_ALLOWDISALLOW_SELECTALL
select all vehicles
@ MID_GNE_BUTTON_ACCEPT
accept button
#define GUIDesignButtonIcon
button only with icon
Definition GUIDesigns.h:91
#define GUIDesignLabelIcon64x32Thicked
label ticked filled used for VClasses. It uses icons of 64x32 pixels
Definition GUIDesigns.h:270
#define GUIDesignButtonAccept
Accept Button.
Definition GUIDesigns.h:156
#define GUIDesignButtonCancel
Cancel Button.
Definition GUIDesigns.h:162
#define GUIDesignContentsFrame
design for the main content frame of every frame/dialog with padding and spacing
Definition GUIDesigns.h:387
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition GUIDesigns.h:399
#define GUIDesignDialogBox
Definition GUIDesigns.h:599
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
Definition GUIDesigns.h:346
#define GUIDesignLabelThick(justify)
label extended over frame with thick and with text justify to left
Definition GUIDesigns.h:249
#define GUIDesignButtonReset
Reset Button.
Definition GUIDesigns.h:165
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frame extended in all directions
Definition GUIDesigns.h:390
#define GUIDesignHorizontalFrame
Horizontal frame extended over frame parent with padding and spacing.
Definition GUIDesigns.h:328
GUIIcon
An enumeration of icons used by the gui applications.
Definition GUIIcons.h:33
@ VCLASS_TRAILER
@ VCLASS_PASSENGER
@ VCLASS_BICYCLE
@ VCLASS_RAIL_FAST
@ VCLASS_AIRCRAFT
@ VCLASS_CUSTOM2
@ GREENVEHICLE
@ VCLASS_MOTORCYCLE
@ VCLASS_COACH
@ VCLASS_AUTHORITY
@ VCLASS_SCOOTER
@ VCLASS_TRUCK
@ VCLASS_MOPED
@ VCLASS_PEDESTRIAN
@ VCLASS_PRIVATE
@ VCLASS_CABLE_CAR
@ VCLASS_SUBWAY
@ VCLASS_CONTAINER
@ VCLASS_CUSTOM1
@ VCLASS_DELIVERY
@ VCLASS_DRONE
@ VCLASS_RAIL_ELECTRIC
@ VCLASS_WHEELCHAIR
@ VCLASS_EMERGENCY
@ VCLASS_RAIL_URBAN
@ VCLASS_EVEHICLE
#define TL(string)
Definition MsgHandler.h:305
#define TLF(string,...)
Definition MsgHandler.h:307
const std::string & getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_SHIP
is an arbitrary ship
@ SVC_PRIVATE
private vehicles
@ SVC_VIP
vip vehicles
@ SVC_HOV
vehicle is a HOV
@ SVC_TRUCK
vehicle is a large transport vehicle
@ SVC_CUSTOM2
is a user-defined type
@ SVC_WHEELCHAIR
@ SVC_RAIL
vehicle is a not electrified rail
@ SVC_RAIL_CLASSES
classes which drive on tracks
@ SVC_COACH
vehicle is a coach
@ SVC_CABLE_CAR
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_CONTAINER
@ SVC_SCOOTER
@ SVC_RAIL_FAST
vehicle that is allowed to drive on high-speed rail tracks
@ SVC_TRAILER
vehicle is a large transport vehicle
@ SVC_CUSTOM1
is a user-defined type
@ SVC_ARMY
army vehicles
@ SVC_DRONE
@ SVC_RAIL_ELECTRIC
rail vehicle that requires electrified tracks
@ SVC_NON_ROAD
@ SVC_DELIVERY
vehicle is a small delivery vehicle
@ SVC_RAIL_URBAN
vehicle is a city rail
@ SVC_MOTORCYCLE
vehicle is a motorcycle
@ SVC_EMERGENCY
public emergency vehicles
@ SVC_MOPED
vehicle is a moped
@ SVC_AUTHORITY
authorities vehicles
@ SVC_TRAM
vehicle is a light rail
@ SVC_TAXI
vehicle is a taxi
@ SVC_BUS
vehicle is a bus
@ SVC_E_VEHICLE
is an electric vehicle
@ SVC_AIRCRAFT
@ SVC_SUBWAY
@ SVC_PEDESTRIAN
pedestrian
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_VCLASS
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
Definition ToString.h:283
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
std::string myOriginalVClasses
original vClasses
long onCmdAccept(FXObject *sender, FXSelector sel, void *arg)
event after press accept button
std::string getModifiedVClasses() const
get vClasses modified by this dialog
long onCmdReset(FXObject *, FXSelector, void *)
event after press reset button
long onCmdSelectOnlyRail(FXObject *, FXSelector, void *)
event when user press select only rail button
void buildVClass(FXVerticalFrame *contentsFrame, SUMOVehicleClass vclass, GUIIcon vclassIcon, const std::string &description)
build VClass
long onCmdCancel(FXObject *sender, FXSelector sel, void *arg)
event after press cancel button
std::map< SUMOVehicleClass, std::pair< FXButton *, FXLabel * > > myVClassMap
map with the buttons for every VClass
long onCmdUnselectAll(FXObject *, FXSelector, void *)
event when user press unselect all VClasses button
std::string myEditedVClasses
edited vClasses
long onCmdSelectOnlyRoad(FXObject *, FXSelector, void *)
event when user press select only road button
long onCmdValueChanged(FXObject *, FXSelector, void *)
long onCmdSelectAll(FXObject *, FXSelector, void *)
event when user press select all VClasses button
int openDialog(SumoXMLAttr attr, const std::string originalVClasses, GNEInternalTest *internalTests)
open dialog
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
long onCmdCancel(FXObject *, FXSelector, void *)
called when cancel button is pressed (or dialog is closed)
FXuint openModalDialog(InternalTest *internalTests, FXuint placement=PLACEMENT_CURSOR)
Run modal invocation of the dialog.
long onCmdAccept(FXObject *, FXSelector, void *)
called when accept button is pressed
std::vector< std::string > getVector()
return vector of strings