Eclipse SUMO - Simulation of Urban MObility
GNEVehicleTypeFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2020 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 // The Widget for edit Vehicle Type elements
19 /****************************************************************************/
20 #include <config.h>
21 
22 #include <netedit/GNENet.h>
23 #include <netedit/GNEUndoList.h>
24 #include <netedit/GNEViewNet.h>
30 
31 #include "GNEVehicleTypeFrame.h"
32 
33 
34 // ===========================================================================
35 // FOX callback mapping
36 // ===========================================================================
37 
40 };
41 
47 };
48 
49 // Object implementation
50 FXIMPLEMENT(GNEVehicleTypeFrame::VehicleTypeSelector, FXGroupBox, vehicleTypeSelectorMap, ARRAYNUMBER(vehicleTypeSelectorMap))
51 FXIMPLEMENT(GNEVehicleTypeFrame::VehicleTypeEditor, FXGroupBox, vehicleTypeEditorMap, ARRAYNUMBER(vehicleTypeEditorMap))
52 
53 // ===========================================================================
54 // method definitions
55 // ===========================================================================
56 
57 // ---------------------------------------------------------------------------
58 // GNEVehicleTypeFrame::VehicleTypeSelector - methods
59 // ---------------------------------------------------------------------------
60 
62  FXGroupBox(vehicleTypeFrameParent->myContentFrame, "Current Vehicle Type", GUIDesignGroupBoxFrame),
63  myVehicleTypeFrameParent(vehicleTypeFrameParent),
64  myCurrentVehicleType(nullptr) {
65  // Create FXComboBox
66  myTypeMatchBox = new FXComboBox(this, GUIDesignComboBoxNCol, this, MID_GNE_SET_TYPE, GUIDesignComboBox);
67  // add default Vehicle an Bike types in the first and second positions
68  myTypeMatchBox->appendItem(DEFAULT_VTYPE_ID.c_str());
69  myTypeMatchBox->appendItem(DEFAULT_BIKETYPE_ID.c_str());
70  // fill myTypeMatchBox with list of VTypes IDs
71  for (const auto& i : myVehicleTypeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_VTYPE)) {
72  if ((i.first != DEFAULT_VTYPE_ID) && (i.first != DEFAULT_BIKETYPE_ID)) {
73  myTypeMatchBox->appendItem(i.first.c_str());
74  }
75  }
76  // set DEFAULT_VEHTYPE as default VType
77  myCurrentVehicleType = myVehicleTypeFrameParent->getViewNet()->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, DEFAULT_VTYPE_ID);
78  // Set visible items
79  if (myTypeMatchBox->getNumItems() <= 20) {
80  myTypeMatchBox->setNumVisible((int)myTypeMatchBox->getNumItems());
81  } else {
82  myTypeMatchBox->setNumVisible(20);
83  }
84  // VehicleTypeSelector is always shown
85  show();
86 }
87 
88 
90 
91 
94  return myCurrentVehicleType;
95 }
96 
97 
98 void
100  myCurrentVehicleType = vType;
101  refreshVehicleTypeSelector();
102 }
103 
104 
105 void
107  bool valid = false;
108  // clear items
109  myTypeMatchBox->clearItems();
110  // add default Vehicle an Bike types in the first and second positions
111  myTypeMatchBox->appendItem(DEFAULT_VTYPE_ID.c_str());
112  myTypeMatchBox->appendItem(DEFAULT_BIKETYPE_ID.c_str());
113  // fill myTypeMatchBox with list of VTypes IDs
114  for (const auto& i : myVehicleTypeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_VTYPE)) {
115  if ((i.first != DEFAULT_VTYPE_ID) && (i.first != DEFAULT_BIKETYPE_ID)) {
116  myTypeMatchBox->appendItem(i.first.c_str());
117  }
118  }
119  // Set visible items
120  if (myTypeMatchBox->getNumItems() <= 20) {
121  myTypeMatchBox->setNumVisible((int)myTypeMatchBox->getNumItems());
122  } else {
123  myTypeMatchBox->setNumVisible(20);
124  }
125  // make sure that tag is in myTypeMatchBox
126  for (int i = 0; i < (int)myTypeMatchBox->getNumItems(); i++) {
127  if (myTypeMatchBox->getItem(i).text() == myCurrentVehicleType->getID()) {
128  myTypeMatchBox->setCurrentItem(i);
129  valid = true;
130  }
131  }
132  // Check that give vType type is valid
133  if (!valid) {
134  // set DEFAULT_VEHTYPE as default VType
135  myCurrentVehicleType = myVehicleTypeFrameParent->getViewNet()->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, DEFAULT_VTYPE_ID);
136  // refresh myTypeMatchBox again
137  for (int i = 0; i < (int)myTypeMatchBox->getNumItems(); i++) {
138  if (myTypeMatchBox->getItem(i).text() == myCurrentVehicleType->getID()) {
139  myTypeMatchBox->setCurrentItem(i);
140  }
141  }
142  }
143  // refresh vehicle type editor modul
144  myVehicleTypeFrameParent->myVehicleTypeEditor->refreshVehicleTypeEditorModul();
145  // set myCurrentVehicleType as inspected element
146  myVehicleTypeFrameParent->getViewNet()->setInspectedAttributeCarriers({myCurrentVehicleType});
147  // show Attribute Editor modul
148  myVehicleTypeFrameParent->myVehicleTypeAttributesEditor->showAttributeEditorModul(false, true);
149 }
150 
151 
152 void
154  if (myCurrentVehicleType) {
155  myTypeMatchBox->setItem(myTypeMatchBox->getCurrentItem(), myCurrentVehicleType->getID().c_str());
156  }
157 }
158 
159 
160 long
162  // Check if value of myTypeMatchBox correspond of an allowed additional tags
163  for (const auto& i : myVehicleTypeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_VTYPE)) {
164  if (i.first == myTypeMatchBox->getText().text()) {
165  // set pointer
166  myCurrentVehicleType = i.second;
167  // set color of myTypeMatchBox to black (valid)
168  myTypeMatchBox->setTextColor(FXRGB(0, 0, 0));
169  // refresh vehicle type editor modul
170  myVehicleTypeFrameParent->myVehicleTypeEditor->refreshVehicleTypeEditorModul();
171  // set myCurrentVehicleType as inspected element
172  myVehicleTypeFrameParent->getViewNet()->setInspectedAttributeCarriers({myCurrentVehicleType});
173  // show moduls if selected item is valid
174  myVehicleTypeFrameParent->myVehicleTypeAttributesEditor->showAttributeEditorModul(false, true);
175  // Write Warning in console if we're in testing mode
176  WRITE_DEBUG(("Selected item '" + myTypeMatchBox->getText() + "' in VehicleTypeSelector").text());
177  return 1;
178  }
179  }
180  myCurrentVehicleType = nullptr;
181  // refresh vehicle type editor modul
182  myVehicleTypeFrameParent->myVehicleTypeEditor->refreshVehicleTypeEditorModul();
183  // hide all moduls if selected item isn't valid
184  myVehicleTypeFrameParent->myVehicleTypeAttributesEditor->hideAttributesEditorModul();
185  // set color of myTypeMatchBox to red (invalid)
186  myTypeMatchBox->setTextColor(FXRGB(255, 0, 0));
187  // Write Warning in console if we're in testing mode
188  WRITE_DEBUG("Selected invalid item in VehicleTypeSelector");
189  return 1;
190 }
191 
192 // ---------------------------------------------------------------------------
193 // GNEVehicleTypeFrame::VehicleTypeEditor - methods
194 // ---------------------------------------------------------------------------
195 
197  FXGroupBox(vehicleTypeFrameParent->myContentFrame, "Vehicle Type Editor", GUIDesignGroupBoxFrame),
198  myVehicleTypeFrameParent(vehicleTypeFrameParent) {
199  // Create new vehicle type
200  myCreateVehicleTypeButton = new FXButton(this, "Create Vehicle Type", nullptr, this, MID_GNE_CREATE, GUIDesignButton);
201  // Create delete vehicle type
202  myDeleteVehicleTypeButton = new FXButton(this, "Delete Vehicle Type", nullptr, this, MID_GNE_DELETE, GUIDesignButton);
203  // Create reset vehicle type
204  myResetDefaultVehicleTypeButton = new FXButton(this, "Reset default Vehicle Type", nullptr, this, MID_GNE_RESET, GUIDesignButton);
205  // Create copy vehicle type
206  myCopyVehicleTypeButton = new FXButton(this, "Copy Vehicle Type", nullptr, this, MID_GNE_COPY, GUIDesignButton);
207 }
208 
209 
211 
212 
213 void
215  refreshVehicleTypeEditorModul();
216  show();
217 }
218 
219 
220 void
222  hide();
223 }
224 
225 
226 void
228  // first check if selected VType is valid
229  if (myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType() == nullptr) {
230  // disable all buttons except create button
231  myDeleteVehicleTypeButton->disable();
232  myResetDefaultVehicleTypeButton->disable();
233  myCopyVehicleTypeButton->disable();
234  } else if (GNEAttributeCarrier::parse<bool>(myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getAttribute(GNE_ATTR_DEFAULT_VTYPE))) {
235  // enable copy button
236  myCopyVehicleTypeButton->enable();
237  // hide delete vehicle type buttond and show reset default vehicle type button
238  myDeleteVehicleTypeButton->hide();
239  myResetDefaultVehicleTypeButton->show();
240  // check if reset default vehicle type button has to be enabled or disabled
241  if (GNEAttributeCarrier::parse<bool>(myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getAttribute(GNE_ATTR_DEFAULT_VTYPE_MODIFIED))) {
242  myResetDefaultVehicleTypeButton->enable();
243  } else {
244  myResetDefaultVehicleTypeButton->disable();
245  }
246  } else {
247  // enable copy button
248  myCopyVehicleTypeButton->enable();
249  // show delete vehicle type button and hide reset default vehicle type button
250  myDeleteVehicleTypeButton->show();
251  myDeleteVehicleTypeButton->enable();
252  myResetDefaultVehicleTypeButton->hide();
253  }
254  // update modul
255  recalc();
256 }
257 
258 
259 long
261  // obtain a new valid Vehicle Type ID
262  std::string vehicleTypeID = myVehicleTypeFrameParent->myViewNet->getNet()->generateDemandElementID(SUMO_TAG_VTYPE);
263  // create new vehicle type
264  GNEDemandElement* vehicleType = new GNEVehicleType(myVehicleTypeFrameParent->myViewNet->getNet(), vehicleTypeID, SUMO_TAG_VTYPE);
265  // add it using undoList (to allow undo-redo)
266  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_begin("create vehicle type");
267  myVehicleTypeFrameParent->myViewNet->getUndoList()->add(new GNEChange_DemandElement(vehicleType, true), true);
268  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_end();
269  // set created vehicle type in selector
270  myVehicleTypeFrameParent->myVehicleTypeSelector->setCurrentVehicleType(vehicleType);
271  // refresh VehicleType Editor Modul
272  myVehicleTypeFrameParent->myVehicleTypeEditor->refreshVehicleTypeEditorModul();
273  return 1;
274 }
275 
276 
277 long
279  // show question dialog if vtype has already assigned vehicles
280  if (myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getChildDemandElements().size() > 0) {
281  std::string plural = myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getChildDemandElements().size() == 1 ? ("") : ("s");
282  // show warning in gui testing debug mode
283  WRITE_DEBUG("Opening FXMessageBox 'remove vType'");
284  // Ask confirmation to user
285  FXuint answer = FXMessageBox::question(getApp(), MBOX_YES_NO,
286  ("Remove " + toString(SUMO_TAG_VTYPE) + "s").c_str(), "%s",
287  ("Delete " + toString(SUMO_TAG_VTYPE) + " '" + myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getID() +
288  "' will remove " + toString(myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getChildDemandElements().size()) +
289  " vehicle" + plural + ". Continue?").c_str());
290  if (answer != 1) { // 1:yes, 2:no, 4:esc
291  // write warning if netedit is running in testing mode
292  if (answer == 2) {
293  WRITE_DEBUG("Closed FXMessageBox 'remove vType' with 'No'");
294  } else if (answer == 4) {
295  WRITE_DEBUG("Closed FXMessageBox 'remove vType' with 'ESC'");
296  }
297  } else {
298  // begin undo list operation
299  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_begin("delete vehicle type");
300  // remove vehicle type (and all of their children)
301  myVehicleTypeFrameParent->myViewNet->getNet()->deleteDemandElement(myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType(),
302  myVehicleTypeFrameParent->myViewNet->getUndoList());
303  // end undo list operation
304  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_end();
305  }
306  } else {
307  // begin undo list operation
308  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_begin("delete vehicle type");
309  // remove vehicle type (and all of their children)
310  myVehicleTypeFrameParent->myViewNet->getNet()->deleteDemandElement(myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType(),
311  myVehicleTypeFrameParent->myViewNet->getUndoList());
312  // end undo list operation
313  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_end();
314  }
315  return 1;
316 }
317 
318 
319 long
321  // begin reset default vehicle type values
322  myVehicleTypeFrameParent->getViewNet()->getUndoList()->p_begin("reset default vehicle type values");
323  // reset all values of default vehicle type
325  // change all attributes with "" to reset it (except ID and vClass)
326  if ((i.getAttr() != SUMO_ATTR_ID) && (i.getAttr() != SUMO_ATTR_VCLASS)) {
327  myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->setAttribute(i.getAttr(), "", myVehicleTypeFrameParent->myViewNet->getUndoList());
328  }
329  }
330  // change manually VClass (because it depends of Default VType)
331  if (myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getAttribute(SUMO_ATTR_ID) == DEFAULT_VTYPE_ID) {
332  myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->setAttribute(SUMO_ATTR_VCLASS, toString(SVC_PASSENGER), myVehicleTypeFrameParent->myViewNet->getUndoList());
333  } else if (myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->getAttribute(SUMO_ATTR_ID) == DEFAULT_BIKETYPE_ID) {
334  myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->setAttribute(SUMO_ATTR_VCLASS, toString(SVC_BICYCLE), myVehicleTypeFrameParent->myViewNet->getUndoList());
335  }
336  // change special attribute GNE_ATTR_DEFAULT_VTYPE_MODIFIED
337  myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType()->setAttribute(GNE_ATTR_DEFAULT_VTYPE_MODIFIED, "false", myVehicleTypeFrameParent->myViewNet->getUndoList());
338  // finish reset default vehicle type values
339  myVehicleTypeFrameParent->getViewNet()->getUndoList()->p_end();
340  // refresh VehicleTypeSelector
341  myVehicleTypeFrameParent->myVehicleTypeSelector->refreshVehicleTypeSelector();
342  return 1;
343 }
344 
345 
346 long
348  // obtain a new valid Vehicle Type ID
349  std::string vehicleTypeID = myVehicleTypeFrameParent->myViewNet->getNet()->generateDemandElementID(SUMO_TAG_VTYPE);
350  // obtain vehicle type in which new Vehicle Type will be based
351  GNEVehicleType* vType = dynamic_cast<GNEVehicleType*>(myVehicleTypeFrameParent->myVehicleTypeSelector->getCurrentVehicleType());
352  // check that vType exist
353  if (vType) {
354  // create a new Vehicle Type based on the current selected vehicle type
355  GNEDemandElement* vehicleTypeCopy = new GNEVehicleType(myVehicleTypeFrameParent->myViewNet->getNet(), vehicleTypeID, vType);
356  // begin undo list operation
357  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_begin("copy vehicle type");
358  // add it using undoList (to allow undo-redo)
359  myVehicleTypeFrameParent->myViewNet->getUndoList()->add(new GNEChange_DemandElement(vehicleTypeCopy, true), true);
360  // end undo list operation
361  myVehicleTypeFrameParent->myViewNet->getUndoList()->p_end();
362  // refresh Vehicle Type Selector (to show the new VType)
363  myVehicleTypeFrameParent->myVehicleTypeSelector->refreshVehicleTypeSelector();
364  // set created vehicle type in selector
365  myVehicleTypeFrameParent->myVehicleTypeSelector->setCurrentVehicleType(vehicleTypeCopy);
366  // refresh VehicleType Editor Modul
367  myVehicleTypeFrameParent->myVehicleTypeEditor->refreshVehicleTypeEditorModul();
368  }
369  return 1;
370 }
371 
372 // ---------------------------------------------------------------------------
373 // GNEVehicleTypeFrame - methods
374 // ---------------------------------------------------------------------------
375 
376 GNEVehicleTypeFrame::GNEVehicleTypeFrame(FXHorizontalFrame* horizontalFrameParent, GNEViewNet* viewNet) :
377  GNEFrame(horizontalFrameParent, viewNet, "Vehicle Types") {
378 
379  // create modul for edit vehicle types (Create, copy, etc.)
381 
382  // create vehicle type selector
384 
385  // Create vehicle type attributes editor
387 
388  // create modul for open extended attributes dialog
390 
391  // set "VTYPE_DEFAULT" as default vehicle Type
393 }
394 
395 
397 
398 
399 void
401  // refresh vehicle type and Attribute Editor
403  // set myCurrentVehicleType as inspected element
405  // show vehicle type attributes editor (except extended attributes)
407  // show frame
408  GNEFrame::show();
409 }
410 
411 
414  return myVehicleTypeSelector;
415 }
416 
417 
418 void
420  // after changing an attribute myVehicleTypeSelector, we need to update the list of vehicleTypeSelector, because ID could be changed
422 }
423 
424 
425 void
427  // open vehicle type dialog
430  // set myCurrentVehicleType as inspected element
432  // call "showAttributeEditorModul" to refresh attribute list
434  }
435 }
436 
437 
438 /****************************************************************************/
FXDEFMAP(GNEVehicleTypeFrame::VehicleTypeSelector) vehicleTypeSelectorMap[]
@ MID_GNE_DELETE
delete element
Definition: GUIAppEnum.h:721
@ MID_GNE_COPY
copy element
Definition: GUIAppEnum.h:729
@ MID_GNE_CREATE
create element
Definition: GUIAppEnum.h:719
@ MID_GNE_SET_TYPE
used to select a type of element in a combo box
Definition: GUIAppEnum.h:733
@ MID_GNE_RESET
reset element
Definition: GUIAppEnum.h:725
#define GUIDesignButton
Definition: GUIDesigns.h:62
#define GUIDesignComboBox
Definition: GUIDesigns.h:237
#define GUIDesignComboBoxNCol
number of column of every combo box
Definition: GUIDesigns.h:255
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
Definition: GUIDesigns.h:278
#define WRITE_DEBUG(msg)
Definition: MsgHandler.h:286
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
const std::string DEFAULT_VTYPE_ID
const std::string DEFAULT_BIKETYPE_ID
@ SUMO_TAG_VTYPE
description of a vehicle type
@ GNE_ATTR_DEFAULT_VTYPE
Flag to check if VType is a default VType.
@ SUMO_ATTR_VCLASS
@ SUMO_ATTR_ID
@ GNE_ATTR_DEFAULT_VTYPE_MODIFIED
Flag to check if a default VType was modified.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:44
static const GNETagProperties & getTagProperties(SumoXMLTag tag)
get Tag Properties
An Element which don't belongs to GNENet but has influency in the simulation.
void showAttributeEditorModul(bool includeExtended, bool forceAttributeEnabled)
show attributes of multiple ACs
GNEFrame * getFrameParent() const
pointer to GNEFrame parent
GNEViewNet * getViewNet() const
get view net
Definition: GNEFrame.cpp:133
GNEViewNet * myViewNet
View Net.
Definition: GNEFrame.h:113
FXVerticalFrame * myContentFrame
Vertical frame that holds all widgets of frame.
Definition: GNEFrame.h:116
virtual void show()
show Frame
Definition: GNEFrame.cpp:108
virtual void hide()
hide Frame
Definition: GNEFrame.cpp:117
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
Definition: GNENet.cpp:2435
Dialog for edit rerouter intervals.
long onCmdDeleteVehicleType(FXObject *, FXSelector, void *)
Called when "Delete Vehicle Type" button is clicked.
FXButton * myResetDefaultVehicleTypeButton
"delete default vehicle type" button
long onCmdCreateVehicleType(FXObject *, FXSelector, void *)
long onCmdCopyVehicleType(FXObject *, FXSelector, void *)
Called when "Copy Vehicle Type" button is clicked.
void refreshVehicleTypeEditorModul()
update VehicleTypeEditor modul
long onCmdResetVehicleType(FXObject *, FXSelector, void *)
Called when "Delete Vehicle Type" button is clicked.
void hideVehicleTypeEditorModul()
hide VehicleTypeEditor box
FXButton * myDeleteVehicleTypeButton
"delete vehicle type" button
void showVehicleTypeEditorModul()
show VehicleTypeEditor modul
FXButton * myCreateVehicleTypeButton
"create vehicle type" button
VehicleTypeEditor(GNEVehicleTypeFrame *vehicleTypeFrameParent)
FOX-declaration.
FXButton * myCopyVehicleTypeButton
"copy vehicle type"
long onCmdSelectItem(FXObject *, FXSelector, void *)
GNEDemandElement * getCurrentVehicleType() const
get current Vehicle Type
void refreshVehicleTypeSelector()
refresh vehicle type selector
void refreshVehicleTypeSelectorIDs()
refresh vehicle type selector (only IDs, without refreshing attributes)
void setCurrentVehicleType(GNEDemandElement *vType)
set current Vehicle Type
VehicleTypeSelector * getVehicleTypeSelector() const
get vehicle type selector
VehicleTypeEditor * myVehicleTypeEditor
Vehicle Type editor (Create, copy, etc.)
GNEFrameAttributesModuls::AttributesEditor * myVehicleTypeAttributesEditor
editorinternal vehicle type attributes
GNEFrameAttributesModuls::AttributesEditorExtended * myAttributesEditorExtended
modul for open extended attributes dialog
void attributesEditorExtendedDialogOpened()
open AttributesCreator extended dialog (used for editing advance attributes of Vehicle Types)
void attributeUpdated()
function called after set a valid attribute in AttributeCreator/AttributeEditor/ParametersEditor/....
VehicleTypeSelector * myVehicleTypeSelector
vehicle type selector
GNEVehicleTypeFrame(FXHorizontalFrame *horizontalFrameParent, GNEViewNet *viewNet)
Constructor.
GNENet * getNet() const
get the net object
void setInspectedAttributeCarriers(const std::vector< GNEAttributeCarrier * > ACs)
set inspected attributeCarrier
C++ TraCI client API implementation.
Definition: Vehicle.h:41