Eclipse SUMO - Simulation of Urban MObility
GNECreateEdgeFrame.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 create edges (and junctions)
19 /****************************************************************************/
20 #include <config.h>
21 
22 #include <netbuild/NBNetBuilder.h>
23 #include <netedit/GNENet.h>
24 #include <netedit/GNEUndoList.h>
25 #include <netedit/GNEViewNet.h>
26 #include <netedit/GNEViewParent.h>
33 #include <netimport/NITypeLoader.h>
38 
39 
40 #include "GNECreateEdgeFrame.h"
41 
42 // ===========================================================================
43 // FOX callback mapping
44 // ===========================================================================
45 
52 };
53 
59 };
60 
64 };
65 
66 // Object implementation
67 FXIMPLEMENT(GNECreateEdgeFrame::EdgeTypeSelector, FXGroupBox, EdgeTypeSelectorMap, ARRAYNUMBER(EdgeTypeSelectorMap))
68 FXIMPLEMENT(GNECreateEdgeFrame::LaneTypeParameters, FXGroupBox, LaneTypeParametersMap, ARRAYNUMBER(LaneTypeParametersMap))
69 FXIMPLEMENT(GNECreateEdgeFrame::EdgeTypeParameters, FXGroupBox, EdgeTypeParametersMap, ARRAYNUMBER(EdgeTypeParametersMap))
70 
71 
72 // ===========================================================================
73 // method definitions
74 // ===========================================================================
75 
76 // ---------------------------------------------------------------------------
77 // GNECreateEdgeFrame::EdgeTypeSelector - methods
78 // ---------------------------------------------------------------------------
79 
81  FXGroupBox(createEdgeFrameParent->myContentFrame, "Template selector", GUIDesignGroupBoxFrame),
82  myCreateEdgeFrameParent(createEdgeFrameParent),
83  myEdgeTypeSelected(nullptr),
84  myDefaultEdgeType(new GNEEdgeType(createEdgeFrameParent)) {
85  // default edge radio button
86  myUseDefaultEdgeType = new FXRadioButton(this,
88  // use custom edge radio button
89  myUseCustomEdgeType = new FXRadioButton(this,
90  "Use edgeType/template", this, MID_GNE_CREATEEDGEFRAME_SELECTRADIOBUTTON, GUIDesignRadioButton);
91  // edge types combo box
92  myEdgeTypesComboBox = new FXComboBox(this, GUIDesignComboBoxNCol, this, MID_GNE_CREATEEDGEFRAME_SELECTEDGETYPE, GUIDesignComboBoxAttribute);
93  // create horizontal frame
94  FXHorizontalFrame* horizontalFrameButtons = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
95  // create new edge type button
96  myAddEdgeTypeButton = new FXButton(horizontalFrameButtons,
98  // create delete edge type button
99  myDeleteEdgeTypeButton = new FXButton(horizontalFrameButtons,
101  // create reset edge type button
102  myResetEdgeTypeButton = new FXButton(horizontalFrameButtons,
104  // by default, create custom edge
105  myUseDefaultEdgeType->setCheck(TRUE);
106 }
107 
108 
110  delete myDefaultEdgeType;
111 }
112 
113 
114 void
116  // get template editor
117  const GNEInspectorFrame::TemplateEditor* templateEditor = myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor();
118  // get edge types
119  const auto& edgeTypes = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdgeTypes();
120  // get flag for number of items
121  const bool thereAreItems = (templateEditor->hasTemplate() || (edgeTypes.size() > 0));
122  // first fill combo box
123  fillComboBox();
124  // show parameter fields
125  myCreateEdgeFrameParent->myEdgeTypeParameters->showEdgeTypeParameters();
126  // check if use custom edge
127  if (myUseDefaultEdgeType->getCheck() == TRUE) {
128  // disable comboBox
129  myEdgeTypesComboBox->disable();
130  // disable buttons
131  myAddEdgeTypeButton->disable();
132  myDeleteEdgeTypeButton->disable();
133  // enable parameter fields (because default edge can be edited)
134  myCreateEdgeFrameParent->myEdgeTypeParameters->enableEdgeTypeParameters();
135  // set default parameters
136  myCreateEdgeFrameParent->myEdgeTypeParameters->setEdgeType(myDefaultEdgeType, false);
137  } else if (thereAreItems) {
138  // enable add button
139  myAddEdgeTypeButton->enable();
140  // enable combo box
141  myEdgeTypesComboBox->enable();
142  // myEdgeTypesComboBox
143  if (myEdgeTypeSelected) {
144  // declare index
145  int index = 0;
146  // search index of current selectedEdgeType
147  for (int i = 0; i < myEdgeTypesComboBox->getNumItems(); i++) {
148  if (myEdgeTypeSelected->getID() == myEdgeTypesComboBox->getItem(i).text()) {
149  index = i;
150  }
151  }
152  // set current item
153  myEdgeTypesComboBox->setCurrentItem(index);
154  // enable delete edge type button
155  myDeleteEdgeTypeButton->enable();
156  // update edge parameters
157  myCreateEdgeFrameParent->myEdgeTypeParameters->setEdgeType(myEdgeTypeSelected, true);
158  // enable parameter fields
159  myCreateEdgeFrameParent->myEdgeTypeParameters->enableEdgeTypeParameters();
160  } else if (templateEditor->hasTemplate()) {
161  // set template as current item
162  myEdgeTypesComboBox->setCurrentItem(0);
163  // update edge parameters (using template
164  myCreateEdgeFrameParent->myEdgeTypeParameters->setTemplateValues();
165  // disable delete edge type button (because templates cannot be removed)
166  myDeleteEdgeTypeButton->disable();
167  // disable parameter fields (because templates cannot be edited)
168  myCreateEdgeFrameParent->myEdgeTypeParameters->disableEdgeTypeParameters();
169  } else if (edgeTypes.size() > 0) {
170  // set myEdgeTypeSelected
171  myEdgeTypeSelected = edgeTypes.begin()->second;
172  // set current item
173  myEdgeTypesComboBox->setCurrentItem(0);
174  // enable delete edge type button
175  myDeleteEdgeTypeButton->enable();
176  // update edge parameters
177  myCreateEdgeFrameParent->myEdgeTypeParameters->setEdgeType(myEdgeTypeSelected, true);
178  // enable parameter fields (because edgeTypes can be edited)
179  myCreateEdgeFrameParent->myEdgeTypeParameters->enableEdgeTypeParameters();
180  }
181  } else {
182  // hide parameter fields
183  myCreateEdgeFrameParent->myEdgeTypeParameters->hideEdgeTypeParameters();
184  // disable add and delete buttons
185  myAddEdgeTypeButton->enable();
186  myDeleteEdgeTypeButton->disable();
187  // disable combo box
188  myEdgeTypesComboBox->disable();
189  }
190  // recalc
191  recalc();
192 }
193 
194 
195 bool
197  if (myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->hasTemplate()) {
198  if ((myUseCustomEdgeType->getCheck() == TRUE) && (myEdgeTypesComboBox->getCurrentItem() == 0)){
199  return true;
200  } else {
201  return false;
202  }
203  } else {
204  return false;
205  }
206 }
207 
208 
209 bool
211  return (myUseDefaultEdgeType->getCheck() == TRUE);
212 }
213 
214 
215 GNEEdgeType*
217  return myDefaultEdgeType;
218 }
219 
220 
221 GNEEdgeType*
223  return myEdgeTypeSelected;
224 }
225 
226 
227 void
229  myEdgeTypeSelected = nullptr;
230 }
231 
232 
233 long
235  // check what object was pressed
236  if (obj == myUseDefaultEdgeType) {
237  // update radio buttons
238  myUseDefaultEdgeType->setCheck(TRUE, FALSE);
239  myUseCustomEdgeType->setCheck(FALSE, FALSE);
240  } else {
241  // update radio buttons
242  myUseDefaultEdgeType->setCheck(FALSE, FALSE);
243  myUseCustomEdgeType->setCheck(TRUE, FALSE);
244  }
245  // refresh template selector
246  refreshEdgeTypeSelector();
247  return 0;
248 }
249 
250 
251 long
253  // create new edge type
254  GNEEdgeType* edgeType = new GNEEdgeType(myCreateEdgeFrameParent->getViewNet()->getNet());
255  // also create a new laneType
256  GNELaneType* laneType = new GNELaneType(edgeType);
257  // add it using undoList
258  myCreateEdgeFrameParent->getViewNet()->getUndoList()->p_begin("create new edge type");
259  myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
260  myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(new GNEChange_LaneType(laneType, 0, true), true);
261  myCreateEdgeFrameParent->getViewNet()->getUndoList()->p_end();
262  // update myEdgeTypeSelected
263  myEdgeTypeSelected = edgeType;
264  // refresh EdgeTypeSelector
265  refreshEdgeTypeSelector();
266  return 0;
267 }
268 
269 
270 long
272  // first check if we have to reset myEdgeTypeSelected
273  if (myEdgeTypeSelected && (myEdgeTypeSelected->getID() == myEdgeTypesComboBox->getText().text())) {
274  myEdgeTypeSelected = nullptr;
275  }
276  // get edgeType to remove
277  GNEEdgeType* edgeType = myCreateEdgeFrameParent->getViewNet()->getNet()->retrieveEdgeType(myEdgeTypesComboBox->getText().text());
278  // remove it using undoList
279  myCreateEdgeFrameParent->getViewNet()->getUndoList()->p_begin("create new edge type");
280  // iterate over all laneType
281  for (int i = 0; i < (int)edgeType->getLaneTypes().size(); i++) {
282  myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(new GNEChange_LaneType(edgeType->getLaneTypes().at(i), i, false), true);
283  }
284  myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(new GNEChange_EdgeType(edgeType, false), true);
285  myCreateEdgeFrameParent->getViewNet()->getUndoList()->p_end();
286  // refresh EdgeTypeSelector
287  refreshEdgeTypeSelector();
288  return 0;
289 }
290 
291 
292 long
294  // get options
295  const OptionsCont& oc = OptionsCont::getOptions();
296  // get undoList
297  GNEUndoList *undoList = myCreateEdgeFrameParent->getViewNet()->getUndoList();
298  // check if we're editing an existent edgeType
299  if (useDefaultEdgeType()) {
300  // reset speed
301  myDefaultEdgeType->setAttribute(SUMO_ATTR_SPEED, toString(oc.getFloat("default.speed")));
302  // reset lanes
303  while (myDefaultEdgeType->getLaneTypes().size() > 1) {
304  myDefaultEdgeType->removeLaneType(myDefaultEdgeType->getLaneTypes().back());
305  }
306  // reset disallow (and allow)
307  myDefaultEdgeType->setAttribute(SUMO_ATTR_DISALLOW, oc.getString("default.disallow"));
308  // reset width
309  myDefaultEdgeType->setAttribute(SUMO_ATTR_WIDTH, toString(NBEdge::UNSPECIFIED_WIDTH));
310  // reset parameters
311  myDefaultEdgeType->setAttribute(GNE_ATTR_PARAMETERS, "");
312  } else if (myEdgeTypeSelected) {
313  // begin undoList
314  undoList->p_begin("reset edgeType '" + myDefaultEdgeType->getID() + "'");
315  // reset lanes
316  while (myEdgeTypeSelected->getLaneTypes().size() > 1) {
317  myEdgeTypeSelected->removeLaneType((int)myEdgeTypeSelected->getLaneTypes().size() - 1, undoList);
318  }
319  // reset speed
320  myEdgeTypeSelected->setAttribute(SUMO_ATTR_SPEED, toString(oc.getFloat("default.speed")), undoList);
321  // reset disallow (and allow)
322  myEdgeTypeSelected->setAttribute(SUMO_ATTR_DISALLOW, oc.getString("default.disallow"));
323  // reset width
324  myEdgeTypeSelected->setAttribute(SUMO_ATTR_WIDTH, toString(NBEdge::UNSPECIFIED_WIDTH), undoList);
325  // reset parameters
326  myEdgeTypeSelected->setAttribute(GNE_ATTR_PARAMETERS, "", undoList);
327  // end undoList
328  undoList->p_end();
329  }
330  // refresh EdgeTypeSelector
331  refreshEdgeTypeSelector();
332  return 0;
333 }
334 
335 
336 long
338  // get template editor
339  const GNEInspectorFrame::TemplateEditor* templateEditor = myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor();
340  // get edge types
341  const auto& edgeTypes = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdgeTypes();
342  // reset myEdgeTypeSelected
343  myEdgeTypeSelected = nullptr;
344  // check if we selected template
345  if (templateEditor->hasTemplate() && myEdgeTypesComboBox->getCurrentItem() == 0) {
346  // set valid color
347  myEdgeTypesComboBox->setTextColor(FXRGB(0, 0, 0));
348  myEdgeTypesComboBox->killFocus();
349  // disable delete edge type button (because templates cannot be edited)
350  myDeleteEdgeTypeButton->disable();
351  // show parameter fields
352  myCreateEdgeFrameParent->myEdgeTypeParameters->showEdgeTypeParameters();
353  // disable parameter fields (because templantes cannot be edited)
354  myCreateEdgeFrameParent->myEdgeTypeParameters->disableEdgeTypeParameters();
355  // set edge template in myEdgeTypeParameters
356  myCreateEdgeFrameParent->myEdgeTypeParameters->setTemplateValues();
357  } else if (edgeTypes.count(myEdgeTypesComboBox->getText().text()) > 0) {
358  // set valid color
359  myEdgeTypesComboBox->setTextColor(FXRGB(0, 0, 0));
360  myEdgeTypesComboBox->killFocus();
361  // enable delete edge type button
362  myDeleteEdgeTypeButton->enable();
363  // show parameter fields
364  myCreateEdgeFrameParent->myEdgeTypeParameters->showEdgeTypeParameters();
365  // enable parameter fields
366  myCreateEdgeFrameParent->myEdgeTypeParameters->enableEdgeTypeParameters();
367  // set myEdgeTypeSelected
368  myEdgeTypeSelected = myCreateEdgeFrameParent->myViewNet->getNet()->retrieveEdgeType(myEdgeTypesComboBox->getText().text());
369  // set edgeType in myEdgeTypeParameters
370  myCreateEdgeFrameParent->myEdgeTypeParameters->setEdgeType(myEdgeTypeSelected, true);
371  } else {
372  // set invalid color
373  myEdgeTypesComboBox->setTextColor(FXRGB(255, 0, 0));
374  // disable delete edge type button
375  myDeleteEdgeTypeButton->disable();
376  // hide parameter fields
377  myCreateEdgeFrameParent->myEdgeTypeParameters->hideEdgeTypeParameters();
378  }
379  return 0;
380 }
381 
382 
383 void
385  // get template editor
386  const GNEInspectorFrame::TemplateEditor* templateEditor = myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor();
387  // get edge types
388  const auto& edgeTypes = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdgeTypes();
389  // clear edge types
390  myEdgeTypesComboBox->clearItems();
391  // add template
392  if (templateEditor->hasTemplate()) {
393  myEdgeTypesComboBox->appendItem(("template: " + templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_ID)).c_str(), nullptr);
394  }
395  // add edge types
396  for (const auto& edgeType : edgeTypes) {
397  myEdgeTypesComboBox->appendItem(edgeType.second->getID().c_str(), nullptr);
398  }
399  // set num visible antes
400  if (myEdgeTypesComboBox->getNumItems() <= 10) {
401  myEdgeTypesComboBox->setNumVisible(myEdgeTypesComboBox->getNumItems());
402  } else {
403  myEdgeTypesComboBox->setNumVisible(10);
404  }
405 }
406 
407 
408 void
410  // set numLanes
411  myDefaultEdgeType->setAttribute(SUMO_ATTR_NUMLANES, "1");
412  // set speed
413  myDefaultEdgeType->setAttribute(SUMO_ATTR_SPEED, "13.89");
414  // set allow
415  myDefaultEdgeType->setAttribute(SUMO_ATTR_ALLOW, "all");
416  // set disallow
417  myDefaultEdgeType->setAttribute(SUMO_ATTR_DISALLOW, "");
418  // set width
419  myDefaultEdgeType->setAttribute(SUMO_ATTR_WIDTH, "-1.00");
420  // set parameters
421  myDefaultEdgeType->setAttribute(GNE_ATTR_PARAMETERS, "");
422 }
423 
424 // ---------------------------------------------------------------------------
425 // GNECreateEdgeFrame::LaneTypeParameters - methods
426 // ---------------------------------------------------------------------------
427 
429  FXGroupBox(createEdgeFrameParent->myContentFrame, "Lane parameters", GUIDesignGroupBoxFrame),
430  myCreateEdgeFrameParent(createEdgeFrameParent) {
431  // declare horizontalFrameAttribute
432  FXHorizontalFrame* horizontalFrameAttribute = nullptr;
433  // create ComboBox for spread type
434  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
435  new FXLabel(horizontalFrameAttribute, "Lane index", nullptr, GUIDesignLabelAttribute);
436  myLaneIndex = new FXComboBox(horizontalFrameAttribute, GUIDesignComboBoxNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignComboBoxAttribute);
437  // create horizontalFrameAttribute for buttons
438  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
439  // create delete edge type button
440  myDeleteLaneTypeButton = new FXButton(horizontalFrameAttribute,
442  // create reset edge type button
443  myResetLaneTypeButton = new FXButton(horizontalFrameAttribute,
445  // create textField for speed
446  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
447  new FXLabel(horizontalFrameAttribute, toString(SUMO_ATTR_SPEED).c_str(), nullptr, GUIDesignLabelAttribute);
448  mySpeed = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
449  // create Button for allow vehicles
450  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
451  myAllowButton = new FXButton(horizontalFrameAttribute, toString(SUMO_ATTR_ALLOW).c_str(), nullptr, this, MID_GNE_SET_ATTRIBUTE_DIALOG, GUIDesignButtonAttribute);
452  myAllow = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
453  // create Button for disallow vehicles
454  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
455  myDisallowButton = new FXButton(horizontalFrameAttribute, toString(SUMO_ATTR_DISALLOW).c_str(), nullptr, this, MID_GNE_SET_ATTRIBUTE_DIALOG, GUIDesignButtonAttribute);
456  myDisallow = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
457  // create textField for width
458  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
459  new FXLabel(horizontalFrameAttribute, toString(SUMO_ATTR_WIDTH).c_str(), nullptr, GUIDesignLabelAttribute);
460  myWidth = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
461  // create textField for parameters
462  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
463  myParametersButton = new FXButton(horizontalFrameAttribute, "parameters", nullptr, this, MID_GNE_SET_ATTRIBUTE_DIALOG, GUIDesignButtonAttribute);
464  myParameters = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
465 }
466 
467 
469 
470 
471 void
473  // save previous laneIndex
474  const int previousLaneIndex = (myLaneIndex->getNumItems() > 0)? myLaneIndex->getCurrentItem() : 0;
475  // first get GNEEdgeType
476  GNEEdgeType *edgeType = nullptr;
477  if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
478  edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType();
479  } else {
480  edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
481  }
482  // check edge type
483  if (edgeType) {
484  // clear and refill myLaneIndex
485  myLaneIndex->clearItems();
486  for (int i = 0; i < (int)edgeType->getLaneTypes().size(); i++) {
487  myLaneIndex->appendItem(toString(i).c_str());
488  }
489  // set visible items
490  myLaneIndex->setNumVisible(myLaneIndex->getNumItems());
491  // continue checking number of lanes
492  if (previousLaneIndex < (int)edgeType->getLaneTypes().size()) {
493  myLaneIndex->setCurrentItem(previousLaneIndex);
494  } else {
495  myLaneIndex->setCurrentItem(0);
496  }
497  // set speed
498  mySpeed->setText(edgeType->getLaneTypes().at(myLaneIndex->getCurrentItem())->getAttribute(SUMO_ATTR_SPEED).c_str(), FALSE);
499  mySpeed->setTextColor(FXRGB(0, 0, 0));
500  // set allow
501  myAllow->setText(edgeType->getLaneTypes().at(myLaneIndex->getCurrentItem())->getAttribute(SUMO_ATTR_ALLOW).c_str(), FALSE);
502  myAllow->setTextColor(FXRGB(0, 0, 0));
503  // set disallow
504  myDisallow->setText(edgeType->getLaneTypes().at(myLaneIndex->getCurrentItem())->getAttribute(SUMO_ATTR_DISALLOW).c_str(), FALSE);
505  myDisallow->setTextColor(FXRGB(0, 0, 0));
506  // set width
507  myWidth->setText(edgeType->getLaneTypes().at(myLaneIndex->getCurrentItem())->getAttribute(SUMO_ATTR_WIDTH).c_str(), FALSE);
508  myWidth->setTextColor(FXRGB(0, 0, 0));
509  // set parameters
510  myParameters->setText(edgeType->getLaneTypes().at(myLaneIndex->getCurrentItem())->getAttribute(GNE_ATTR_PARAMETERS).c_str(), FALSE);
511  myParameters->setTextColor(FXRGB(0, 0, 0));
512  }
513 }
514 
515 
516 void
518  show();
519 }
520 
521 
522 void
524  hide();
525 }
526 
527 
528 void
530  myLaneIndex->enable();
531  mySpeed->enable();
532  myAllowButton->enable();
533  myAllow->enable();
534  myDisallowButton->enable();
535  myDisallow->enable();
536  myWidth->enable();
537 }
538 
539 
540 void
542  myLaneIndex->disable();
543  mySpeed->disable();
544  myAllowButton->disable();
545  myAllow->disable();
546  myDisallowButton->disable();
547  myDisallow->disable();
548  myWidth->disable();
549 }
550 
551 
552 void
554  // set speed
555  edge->setAttribute(SUMO_ATTR_SPEED, toString(mySpeed->getText().text()), undoList);
556  // set allow (no disallow)
557  edge->setAttribute(SUMO_ATTR_ALLOW, toString(myAllow->getText().text()), undoList);
558  // set witdth
559  edge->setAttribute(SUMO_ATTR_WIDTH, toString(myWidth->getText().text()), undoList);
560 }
561 
562 
563 void
565  // first check if numLanes > 0
566  if (numLanes > 0) {
567  // get edgeTypeSelector
568  GNECreateEdgeFrame::EdgeTypeSelector* edgeTypeSelector = myCreateEdgeFrameParent->getEdgeTypeSelector();
569  // change numLanes depending of edited edgeType
570  if (edgeTypeSelector->useDefaultEdgeType()) {
571  // check if we have to add new lanes
572  while (numLanes > (int)edgeTypeSelector->getDefaultEdgeType()->getLaneTypes().size()) {
573  // create new GNELaneType
574  GNELaneType* laneType = new GNELaneType(edgeTypeSelector->getDefaultEdgeType());
575  // add it in the last position
576  edgeTypeSelector->getDefaultEdgeType()->addLaneType(laneType, (int)edgeTypeSelector->getDefaultEdgeType()->getLaneTypes().size());
577  }
578  // check if we have to remove new lanes
579  while (numLanes < (int)edgeTypeSelector->getDefaultEdgeType()->getLaneTypes().size()) {
580  // remove it from the last position
581  edgeTypeSelector->getDefaultEdgeType()->removeLaneType(edgeTypeSelector->getDefaultEdgeType()->getLaneTypes().back());
582  }
583  } else if (myCreateEdgeFrameParent->getEdgeTypeSelector()->getEdgeTypeSelected()) {
584  // check if we have to add new lanes
585  while (numLanes > (int)edgeTypeSelector->getEdgeTypeSelected()->getLaneTypes().size()) {
586  // add it in the last position
587  edgeTypeSelector->getEdgeTypeSelected()->addLaneType(myCreateEdgeFrameParent->getViewNet()->getUndoList());
588  }
589  // check if we have to remove new lanes
590  while (numLanes < (int)edgeTypeSelector->getEdgeTypeSelected()->getLaneTypes().size()) {
591  // remove it from the last position
592  edgeTypeSelector->getEdgeTypeSelected()->removeLaneType((int)edgeTypeSelector->getEdgeTypeSelected()->getLaneTypes().size() - 1, myCreateEdgeFrameParent->getViewNet()->getUndoList());
593  }
594 
595  }
596  // refresh
597  refreshLaneTypeParameters();
598  }
599 }
600 
601 
602 long
604  if (obj == myLaneIndex) {
605  // refresh
606  refreshLaneTypeParameters();
607  } else if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
608  setAttributeDefaultParameters(obj);
609  } else {
610  setAttributeExistentLaneType(obj);
611  }
612  return 1;
613 }
614 
615 
616 long
618  if (obj == myParametersButton) {
619  // write debug information
620  WRITE_DEBUG("Open parameters dialog");
621  // check if use default edge
622  if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
623  // get lane type
624  GNELaneType* laneType = myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->getLaneTypes().at(myLaneIndex->getCurrentItem());
625  // edit parameters using dialog
626  if (GNESingleParametersDialog(laneType).execute()) {
627  // write debug information
628  WRITE_DEBUG("Close parameters dialog");
629  // update myParameters text field
630  myParameters->setText(laneType->getAttribute(GNE_ATTR_PARAMETERS).c_str(), FALSE);
631  } else {
632  // write debug information
633  WRITE_DEBUG("Cancel parameters dialog");
634  }
635  } else if (myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()) {
636  // get lane type
637  GNELaneType* laneType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()->getLaneTypes().at(myLaneIndex->getCurrentItem());
638  // edit parameters using dialog
639  if (GNESingleParametersDialog(laneType).execute()) {
640  // write debug information
641  WRITE_DEBUG("Close parameters dialog");
642  // update myParameters text field
643  myParameters->setText(laneType->getAttribute(GNE_ATTR_PARAMETERS).c_str(), FALSE);
644  } else {
645  // write debug information
646  WRITE_DEBUG("Cancel parameters dialog");
647  }
648  }
649  } else {
650  // declare strings
651  std::string allow = myAllow->getText().text();
652  std::string disallow = myDisallow->getText().text();
653  // open allow/disallow
654  GNEAllowDisallow(myCreateEdgeFrameParent->getViewNet(), &allow, &disallow).execute();
655  // update allow/disallow
656  myAllow->setText(allow.c_str(), FALSE);
657  myDisallow->setText(disallow.c_str(), FALSE);
658  // set attribute
659  if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
660  myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->getLaneTypes().at(myLaneIndex->getCurrentItem())->setAttribute(SUMO_ATTR_ALLOW, allow.c_str());
661  } else if (myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()) {
662  myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()->getLaneTypes().at(myLaneIndex->getCurrentItem())->setAttribute(SUMO_ATTR_ALLOW, allow.c_str());
663  }
664  }
665  return 1;
666 }
667 
668 
669 long
671  /* */
672  return 1;
673 }
674 
675 
676 long
678  /* */
679  return 1;
680 }
681 
682 
683 void
685  // get default edge type
686  GNELaneType *defaultLaneType = myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->getLaneTypes().at(myLaneIndex->getCurrentItem());
687  // check what attribute was changed
688  if (obj == mySpeed) {
689  // check if is valid
690  if (defaultLaneType->isValid(SUMO_ATTR_SPEED, mySpeed->getText().text())) {
691  // set attribute (Without undoList)
692  defaultLaneType->setAttribute(SUMO_ATTR_SPEED, mySpeed->getText().text());
693  // reset color
694  mySpeed->setTextColor(FXRGB(0, 0, 0));
695  mySpeed->killFocus();
696  } else {
697  mySpeed->setTextColor(FXRGB(255, 0, 0));
698  }
699  } else if (obj == myAllow) {
700  // check if is valid
701  if (defaultLaneType->isValid(SUMO_ATTR_ALLOW, myAllow->getText().text())) {
702  // set attribute (Without undoList)
703  defaultLaneType->setAttribute(SUMO_ATTR_ALLOW, myAllow->getText().text());
704  // reset color
705  myAllow->setTextColor(FXRGB(0, 0, 0));
706  myAllow->killFocus();
707  // update disallow textField
708  myDisallow->setText(defaultLaneType->getAttribute(SUMO_ATTR_DISALLOW).c_str(), FALSE);
709  } else {
710  myAllow->setTextColor(FXRGB(255, 0, 0));
711  }
712  } else if (obj == myDisallow) {
713  // check if is valid
714  if (defaultLaneType->isValid(SUMO_ATTR_DISALLOW, myDisallow->getText().text())) {
715  // set attribute (Without undoList)
716  defaultLaneType->setAttribute(SUMO_ATTR_DISALLOW, myDisallow->getText().text());
717  // reset color
718  myDisallow->setTextColor(FXRGB(0, 0, 0));
719  myDisallow->killFocus();
720  // update allow textField
721  myAllow->setText(defaultLaneType->getAttribute(SUMO_ATTR_ALLOW).c_str(), FALSE);
722  } else {
723  myDisallow->setTextColor(FXRGB(255, 0, 0));
724  }
725  } else if (obj == myWidth) {
726  // check if is valid
727  if (defaultLaneType->isValid(SUMO_ATTR_WIDTH, myWidth->getText().text())) {
728  // set attribute (Without undoList)
729  defaultLaneType->setAttribute(SUMO_ATTR_WIDTH, myWidth->getText().text());
730  // reset color
731  myWidth->setTextColor(FXRGB(0, 0, 0));
732  myWidth->killFocus();
733  } else {
734  myWidth->setTextColor(FXRGB(255, 0, 0));
735  }
736  } else if (obj == myParameters) {
737  // check if is valid
738  if (defaultLaneType->isValid(GNE_ATTR_PARAMETERS, myParameters->getText().text())) {
739  // set attribute (Without undoList)
740  defaultLaneType->setAttribute(GNE_ATTR_PARAMETERS, myParameters->getText().text());
741  // reset color
742  myParameters->setTextColor(FXRGB(0, 0, 0));
743  myParameters->killFocus();
744  } else {
745  myParameters->setTextColor(FXRGB(255, 0, 0));
746  }
747  }
748 }
749 
750 
751 void
753  // get undoList
754  GNEUndoList *undoList = myCreateEdgeFrameParent->myViewNet->getUndoList();
755  // get selected lane type
756  GNELaneType *laneType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()->getLaneTypes().at(myLaneIndex->getCurrentItem());
757  // check what attribute was changed
758  if (obj == mySpeed) {
759  // check if is valid
760  if (laneType->isValid(SUMO_ATTR_SPEED, mySpeed->getText().text())) {
761  // set attribute
762  laneType->setAttribute(SUMO_ATTR_SPEED, mySpeed->getText().text(), undoList);
763  // reset color
764  mySpeed->setTextColor(FXRGB(0, 0, 0));
765  mySpeed->killFocus();
766  } else {
767  mySpeed->setTextColor(FXRGB(255, 0, 0));
768  }
769  } else if (obj == myAllow) {
770  // check if is valid
771  if (laneType->isValid(SUMO_ATTR_ALLOW, myAllow->getText().text())) {
772  // set attribute
773  laneType->setAttribute(SUMO_ATTR_ALLOW, myAllow->getText().text(), undoList);
774  // reset color
775  myAllow->setTextColor(FXRGB(0, 0, 0));
776  myAllow->killFocus();
777  // update disallow textField
778  myDisallow->setText(laneType->getAttribute(SUMO_ATTR_DISALLOW).c_str(), FALSE);
779  } else {
780  myAllow->setTextColor(FXRGB(255, 0, 0));
781  }
782  } else if (obj == myDisallow) {
783  // check if is valid
784  if (laneType->isValid(SUMO_ATTR_DISALLOW, myDisallow->getText().text())) {
785  // set attribute
786  laneType->setAttribute(SUMO_ATTR_DISALLOW, myDisallow->getText().text(), undoList);
787  // reset color
788  myDisallow->setTextColor(FXRGB(0, 0, 0));
789  myDisallow->killFocus();
790  // update allow textField
791  myAllow->setText(laneType->getAttribute(SUMO_ATTR_ALLOW).c_str(), FALSE);
792  } else {
793  myDisallow->setTextColor(FXRGB(255, 0, 0));
794  }
795  } else if (obj == myWidth) {
796  // check if is valid
797  if (laneType->isValid(SUMO_ATTR_WIDTH, myWidth->getText().text())) {
798  // set attribute
799  laneType->setAttribute(SUMO_ATTR_WIDTH, myWidth->getText().text(), undoList);
800  // reset color
801  myWidth->setTextColor(FXRGB(0, 0, 0));
802  myWidth->killFocus();
803  } else {
804  myWidth->setTextColor(FXRGB(255, 0, 0));
805  }
806  } else if (obj == myParameters) {
807  // check if is valid
808  if (laneType->isValid(GNE_ATTR_PARAMETERS, myParameters->getText().text())) {
809  // set attribute
810  laneType->setAttribute(GNE_ATTR_PARAMETERS, myParameters->getText().text(), undoList);
811  // reset color
812  myParameters->setTextColor(FXRGB(0, 0, 0));
813  myParameters->killFocus();
814  } else {
815  myParameters->setTextColor(FXRGB(255, 0, 0));
816  }
817  }
818 }
819 
820 // ---------------------------------------------------------------------------
821 // GNECreateEdgeFrame::EdgeTypeParameters - methods
822 // ---------------------------------------------------------------------------
823 
825  FXGroupBox(createEdgeFrameParent->myContentFrame, "Edge parameters", GUIDesignGroupBoxFrame),
826  myCreateEdgeFrameParent(createEdgeFrameParent) {
827  // declare horizontalFrameAttribute
828  FXHorizontalFrame* horizontalFrameAttribute = nullptr;
829  // create textField for ID
830  myHorizontalFrameID = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
831  myLabelID = new FXLabel(myHorizontalFrameID, "edgeType id", nullptr, GUIDesignLabelAttribute);
833  // create textField for speed
834  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
835  new FXLabel(horizontalFrameAttribute, toString(SUMO_ATTR_SPEED).c_str(), nullptr, GUIDesignLabelAttribute);
836  mySpeed = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
837  // create textField for numLanes
838  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
839  new FXLabel(horizontalFrameAttribute, toString(SUMO_ATTR_NUMLANES).c_str(), nullptr, GUIDesignLabelAttribute);
840  myNumLanes = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextFieldInt);
841  // create Button for allow vehicles
842  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
843  myAllowButton = new FXButton(horizontalFrameAttribute, toString(SUMO_ATTR_ALLOW).c_str(), nullptr, this, MID_GNE_SET_ATTRIBUTE_DIALOG, GUIDesignButtonAttribute);
844  myAllow = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
845  // create Button for disallow vehicles
846  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
847  myDisallowButton = new FXButton(horizontalFrameAttribute, toString(SUMO_ATTR_DISALLOW).c_str(), nullptr, this, MID_GNE_SET_ATTRIBUTE_DIALOG, GUIDesignButtonAttribute);
848  myDisallow = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
849  // create textField for width
850  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
851  new FXLabel(horizontalFrameAttribute, toString(SUMO_ATTR_WIDTH).c_str(), nullptr, GUIDesignLabelAttribute);
852  myWidth = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
853  // create textField for priority
854  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
855  new FXLabel(horizontalFrameAttribute, toString(SUMO_ATTR_PRIORITY).c_str(), nullptr, GUIDesignLabelAttribute);
856  myPriority = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
857  // create textField for parameters
858  horizontalFrameAttribute = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
859  myParametersButton = new FXButton(horizontalFrameAttribute, "parameters", nullptr, this, MID_GNE_SET_ATTRIBUTE_DIALOG, GUIDesignButtonAttribute);
860  myParameters = new FXTextField(horizontalFrameAttribute, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
861  // create lane parameters
862  myLaneTypeParameters = new LaneTypeParameters(createEdgeFrameParent);
863 }
864 
865 
867 
868 
869 void
871  // show EdgeTypeParameters
872  show();
873  // show LaneTypeParameters
874  myLaneTypeParameters->showLaneTypeParameters();
875 }
876 
877 
878 void
880  // hide EdgeTypeParameters
881  hide();
882  // hide LaneTypeParameters
883  myLaneTypeParameters->hideLaneTypeParameters();
884 }
885 
886 
887 void
889  // enable all elements
890  myID->enable();
891  myNumLanes->enable();
892  mySpeed->enable();
893  myAllowButton->enable();
894  myAllow->enable();
895  myDisallowButton->enable();
896  myDisallow->enable();
897  myWidth->enable();
898  myPriority->enable();
899  myParameters->enable();
900  // enable lane parameters
901  myLaneTypeParameters->enableLaneTypeParameters();
902 }
903 
904 
905 void
907  // disable all elements
908  myID->disable();
909  myNumLanes->disable();
910  mySpeed->disable();
911  myAllowButton->disable();
912  myAllow->disable();
913  myDisallowButton->disable();
914  myDisallow->disable();
915  myWidth->disable();
916  myPriority->disable();
917  myParameters->disable();
918  // disable lane parameters
919  myLaneTypeParameters->disableLaneTypeParameters();
920 }
921 
922 
923 void
925  // set id
926  if (showID) {
927  myHorizontalFrameID->show();
928  myLabelID->setText("edgeType ID");
929  myID->setText(edgeType->getAttribute(SUMO_ATTR_ID).c_str(), FALSE);
930  myID->setTextColor(FXRGB(0, 0, 0));
931  } else {
932  myHorizontalFrameID->hide();
933  }
934  // set numLanes
935  myNumLanes->setText(edgeType->getAttribute(SUMO_ATTR_NUMLANES).c_str(), FALSE);
936  myNumLanes->setTextColor(FXRGB(0, 0, 0));
937  // set speed
938  mySpeed->setText(edgeType->getAttribute(SUMO_ATTR_SPEED).c_str(), FALSE);
939  mySpeed->setTextColor(FXRGB(0, 0, 0));
940  // set allow
941  myAllow->setText(edgeType->getAttribute(SUMO_ATTR_ALLOW).c_str(), FALSE);
942  myAllow->setTextColor(FXRGB(0, 0, 0));
943  // set disallow
944  myDisallow->setText(edgeType->getAttribute(SUMO_ATTR_DISALLOW).c_str(), FALSE);
945  myDisallow->setTextColor(FXRGB(0, 0, 0));
946  // set width
947  myWidth->setText(edgeType->getAttribute(SUMO_ATTR_WIDTH).c_str(), FALSE);
948  myWidth->setTextColor(FXRGB(0, 0, 0));
949  // set width
950  myPriority->setText(edgeType->getAttribute(SUMO_ATTR_PRIORITY).c_str(), FALSE);
951  myPriority->setTextColor(FXRGB(0, 0, 0));
952  // set parameters
953  myParameters->setText(edgeType->getAttribute(GNE_ATTR_PARAMETERS).c_str(), FALSE);
954  myParameters->setTextColor(FXRGB(0, 0, 0));
955  // now update lane parameters
956  myLaneTypeParameters->refreshLaneTypeParameters();
957  // recalc frame
958  recalc();
959 }
960 
961 
962 void
964  // get template editor
965  const GNEInspectorFrame::TemplateEditor* templateEditor = myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor();
966  // first check if there is a template
967  if (templateEditor->hasTemplate()) {
968  // set ID
969  myLabelID->setText("template ID");
970  myID->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_ID).c_str(), FALSE);
971  myHorizontalFrameID->show();
972  // set numLanes
973  myNumLanes->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_NUMLANES).c_str(), FALSE);
974  // set speed
975  mySpeed->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_SPEED).c_str(), FALSE);
976  // set allow
977  myAllow->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_ALLOW).c_str(), FALSE);
978  // set disallow
979  myDisallow->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_DISALLOW).c_str(), FALSE);
980  // set width
981  myWidth->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_WIDTH).c_str(), FALSE);
982  // set priority
983  myPriority->setText(templateEditor->getEdgeTemplate().edgeParameters.at(SUMO_ATTR_PRIORITY).c_str(), FALSE);
984  // set parameters
985  myParameters->setText(templateEditor->getEdgeTemplate().edgeParameters.at(GNE_ATTR_PARAMETERS).c_str(), FALSE);
986  // recalc frame
987  recalc();
988  } else {
989  throw ProcessError("no template");
990  }
991 }
992 
993 
994 long
996  // check if we're editing an existent edgeType
997  if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
998  setAttributeDefaultParameters(obj);
999  } else {
1000  setAttributeExistentEdgeType(obj);
1001  }
1002  return 1;
1003 }
1004 
1005 
1006 long
1008  if (obj == myParametersButton) {
1009  // write debug information
1010  WRITE_DEBUG("Open parameters dialog");
1011  // check if use default edge
1012  if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
1013  // edit parameters using dialog
1014  if (GNESingleParametersDialog(myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()).execute()) {
1015  // write debug information
1016  WRITE_DEBUG("Close parameters dialog");
1017  // update myParameters text field
1018  myParameters->setText(myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->getAttribute(GNE_ATTR_PARAMETERS).c_str(), FALSE);
1019  } else {
1020  // write debug information
1021  WRITE_DEBUG("Cancel parameters dialog");
1022  }
1023  } else if (myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()) {
1024  // edit parameters using dialog
1025  if (GNESingleParametersDialog(myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()).execute()) {
1026  // write debug information
1027  WRITE_DEBUG("Close parameters dialog");
1028  // update myParameters text field
1029  myParameters->setText(myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()->getAttribute(GNE_ATTR_PARAMETERS).c_str(), FALSE);
1030  } else {
1031  // write debug information
1032  WRITE_DEBUG("Cancel parameters dialog");
1033  }
1034  }
1035  } else {
1036  // declare strings
1037  std::string allow = myAllow->getText().text();
1038  std::string disallow = myDisallow->getText().text();
1039  // open allow/disallow
1040  GNEAllowDisallow(myCreateEdgeFrameParent->getViewNet(), &allow, &disallow).execute();
1041  // update allow/disallow
1042  myAllow->setText(allow.c_str(), FALSE);
1043  myDisallow->setText(disallow.c_str(), FALSE);
1044  // set attribute
1045  if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
1046  myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->setAttribute(SUMO_ATTR_ALLOW, allow.c_str());
1047  } else if (myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()) {
1048  myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected()->setAttribute(SUMO_ATTR_ALLOW, allow.c_str());
1049  }
1050  }
1051  return 1;
1052 }
1053 
1054 
1055 void
1057  // get default edge type
1058  GNEEdgeType *defaultEdgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType();
1059  // check what attribute was changed
1060  if (obj == myID) {
1061  // check if is valid
1062  if (defaultEdgeType->isValid(SUMO_ATTR_ID, myID->getText().text())) {
1063  // set attribute (Without undoList)
1064  defaultEdgeType->setAttribute(SUMO_ATTR_ID, myID->getText().text());
1065  // reset color
1066  myID->setTextColor(FXRGB(0, 0, 0));
1067  myID->killFocus();
1068  } else {
1069  myID->setTextColor(FXRGB(255, 0, 0));
1070  }
1071  } else if (obj == myNumLanes) {
1072  // check if is valid
1073  if (defaultEdgeType->isValid(SUMO_ATTR_NUMLANES, myNumLanes->getText().text())) {
1074  // reset color
1075  myNumLanes->setTextColor(FXRGB(0, 0, 0));
1076  myNumLanes->killFocus();
1077  // update numLanes in laneTypeParameters
1078  myLaneTypeParameters->updateNumLanes(GNEAttributeCarrier::parse<int>(myNumLanes->getText().text()));
1079  } else {
1080  myNumLanes->setTextColor(FXRGB(255, 0, 0));
1081  }
1082  } else if (obj == mySpeed) {
1083  // check if is valid
1084  if (defaultEdgeType->isValid(SUMO_ATTR_SPEED, mySpeed->getText().text())) {
1085  // set attribute (Without undoList)
1086  defaultEdgeType->setAttribute(SUMO_ATTR_SPEED, mySpeed->getText().text());
1087  // reset color
1088  mySpeed->setTextColor(FXRGB(0, 0, 0));
1089  mySpeed->killFocus();
1090  } else {
1091  mySpeed->setTextColor(FXRGB(255, 0, 0));
1092  }
1093  } else if (obj == myAllow) {
1094  // check if is valid
1095  if (defaultEdgeType->isValid(SUMO_ATTR_ALLOW, myAllow->getText().text())) {
1096  // set attribute (Without undoList)
1097  defaultEdgeType->setAttribute(SUMO_ATTR_ALLOW, myAllow->getText().text());
1098  // reset color
1099  myAllow->setTextColor(FXRGB(0, 0, 0));
1100  myAllow->killFocus();
1101  // update disallow textField
1102  myDisallow->setText(defaultEdgeType->getAttribute(SUMO_ATTR_DISALLOW).c_str(), FALSE);
1103  } else {
1104  myAllow->setTextColor(FXRGB(255, 0, 0));
1105  }
1106  } else if (obj == myDisallow) {
1107  // check if is valid
1108  if (defaultEdgeType->isValid(SUMO_ATTR_DISALLOW, myDisallow->getText().text())) {
1109  // set attribute (Without undoList)
1110  defaultEdgeType->setAttribute(SUMO_ATTR_DISALLOW, myDisallow->getText().text());
1111  // reset color
1112  myDisallow->setTextColor(FXRGB(0, 0, 0));
1113  myDisallow->killFocus();
1114  // update allow textField
1115  myAllow->setText(defaultEdgeType->getAttribute(SUMO_ATTR_ALLOW).c_str(), FALSE);
1116  } else {
1117  myDisallow->setTextColor(FXRGB(255, 0, 0));
1118  }
1119  } else if (obj == myWidth) {
1120  // check if is valid
1121  if (defaultEdgeType->isValid(SUMO_ATTR_WIDTH, myWidth->getText().text())) {
1122  // set attribute (Without undoList)
1123  defaultEdgeType->setAttribute(SUMO_ATTR_WIDTH, myWidth->getText().text());
1124  // reset color
1125  myWidth->setTextColor(FXRGB(0, 0, 0));
1126  myWidth->killFocus();
1127  } else {
1128  myWidth->setTextColor(FXRGB(255, 0, 0));
1129  }
1130  } else if (obj == myPriority) {
1131  // check if is valid
1132  if (defaultEdgeType->isValid(SUMO_ATTR_PRIORITY, myPriority->getText().text())) {
1133  // set attribute (Without undoList)
1134  defaultEdgeType->setAttribute(SUMO_ATTR_PRIORITY, myPriority->getText().text());
1135  // reset color
1136  myPriority->setTextColor(FXRGB(0, 0, 0));
1137  myPriority->killFocus();
1138  } else {
1139  myPriority->setTextColor(FXRGB(255, 0, 0));
1140  }
1141  } else if (obj == myParameters) {
1142  // check if is valid
1143  if (defaultEdgeType->isValid(GNE_ATTR_PARAMETERS, myParameters->getText().text())) {
1144  // set attribute (Without undoList)
1145  defaultEdgeType->setAttribute(GNE_ATTR_PARAMETERS, myParameters->getText().text());
1146  // reset color
1147  myParameters->setTextColor(FXRGB(0, 0, 0));
1148  myParameters->killFocus();
1149  } else {
1150  myParameters->setTextColor(FXRGB(255, 0, 0));
1151  }
1152  }
1153 }
1154 
1155 
1156 void
1158  // get undoList
1159  GNEUndoList *undoList = myCreateEdgeFrameParent->myViewNet->getUndoList();
1160  // get selected edge type
1161  GNEEdgeType *edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
1162  // check what attribute was changed
1163  if (obj == myID) {
1164  // check if is valid
1165  if (edgeType->isValid(SUMO_ATTR_ID, myID->getText().text())) {
1166  // set attribute
1167  edgeType->setAttribute(SUMO_ATTR_ID, myID->getText().text(), undoList);
1168  // reset color
1169  myID->setTextColor(FXRGB(0, 0, 0));
1170  myID->killFocus();
1171  } else {
1172  myID->setTextColor(FXRGB(255, 0, 0));
1173  }
1174  } else if (obj == myNumLanes) {
1175  // check if is valid
1176  if (edgeType->isValid(SUMO_ATTR_NUMLANES, myNumLanes->getText().text())) {
1177  // reset color
1178  myNumLanes->setTextColor(FXRGB(0, 0, 0));
1179  myNumLanes->killFocus();
1180  // update numLanes in laneTypeParameters
1181  myLaneTypeParameters->updateNumLanes(GNEAttributeCarrier::parse<int>(myNumLanes->getText().text()));
1182  } else {
1183  myNumLanes->setTextColor(FXRGB(255, 0, 0));
1184  }
1185  } else if (obj == mySpeed) {
1186  // check if is valid
1187  if (edgeType->isValid(SUMO_ATTR_SPEED, mySpeed->getText().text())) {
1188  // set attribute
1189  edgeType->setAttribute(SUMO_ATTR_SPEED, mySpeed->getText().text(), undoList);
1190  // reset color
1191  mySpeed->setTextColor(FXRGB(0, 0, 0));
1192  mySpeed->killFocus();
1193  } else {
1194  mySpeed->setTextColor(FXRGB(255, 0, 0));
1195  }
1196  } else if (obj == myAllow) {
1197  // check if is valid
1198  if (edgeType->isValid(SUMO_ATTR_ALLOW, myAllow->getText().text())) {
1199  // set attribute
1200  edgeType->setAttribute(SUMO_ATTR_ALLOW, myAllow->getText().text(), undoList);
1201  // reset color
1202  myAllow->setTextColor(FXRGB(0, 0, 0));
1203  myAllow->killFocus();
1204  // update disallow textField
1205  myDisallow->setText(edgeType->getAttribute(SUMO_ATTR_DISALLOW).c_str(), FALSE);
1206  } else {
1207  myAllow->setTextColor(FXRGB(255, 0, 0));
1208  }
1209  } else if (obj == myDisallow) {
1210  // check if is valid
1211  if (edgeType->isValid(SUMO_ATTR_DISALLOW, myDisallow->getText().text())) {
1212  // set attribute
1213  edgeType->setAttribute(SUMO_ATTR_DISALLOW, myDisallow->getText().text(), undoList);
1214  // reset color
1215  myDisallow->setTextColor(FXRGB(0, 0, 0));
1216  myDisallow->killFocus();
1217  // update allow textField
1218  myAllow->setText(edgeType->getAttribute(SUMO_ATTR_ALLOW).c_str(), FALSE);
1219  } else {
1220  myDisallow->setTextColor(FXRGB(255, 0, 0));
1221  }
1222  } else if (obj == myWidth) {
1223  // check if is valid
1224  if (edgeType->isValid(SUMO_ATTR_WIDTH, myWidth->getText().text())) {
1225  // set attribute
1226  edgeType->setAttribute(SUMO_ATTR_WIDTH, myWidth->getText().text(), undoList);
1227  // reset color
1228  myWidth->setTextColor(FXRGB(0, 0, 0));
1229  myWidth->killFocus();
1230  } else {
1231  myWidth->setTextColor(FXRGB(255, 0, 0));
1232  }
1233  } else if (obj == myPriority) {
1234  // check if is valid
1235  if (edgeType->isValid(SUMO_ATTR_PRIORITY, myPriority->getText().text())) {
1236  // set attribute (Without undoList)
1237  edgeType->setAttribute(SUMO_ATTR_PRIORITY, myPriority->getText().text());
1238  // reset color
1239  myPriority->setTextColor(FXRGB(0, 0, 0));
1240  myPriority->killFocus();
1241  } else {
1242  myPriority->setTextColor(FXRGB(255, 0, 0));
1243  }
1244  } else if (obj == myParameters) {
1245  // check if is valid
1246  if (edgeType->isValid(GNE_ATTR_PARAMETERS, myParameters->getText().text())) {
1247  // set attribute
1248  edgeType->setAttribute(GNE_ATTR_PARAMETERS, myParameters->getText().text(), undoList);
1249  // reset color
1250  myParameters->setTextColor(FXRGB(0, 0, 0));
1251  myParameters->killFocus();
1252  } else {
1253  myParameters->setTextColor(FXRGB(255, 0, 0));
1254  }
1255  }
1256 }
1257 
1258 // ---------------------------------------------------------------------------
1259 // GNECreateEdgeFrame::Legend - methods
1260 // ---------------------------------------------------------------------------
1261 
1263  FXGroupBox(createEdgeFrameParent->myContentFrame, "Legend", GUIDesignGroupBoxFrame) {
1264  // crate information
1265  std::ostringstream information;
1266  // add label for shift+click
1267  information
1268  << "- Control+Click:" << "\n"
1269  << " Move view" << "\n"
1270  << "- Shift+Click:" << "\n"
1271  << " Splits edge in both directions" << "\n"
1272  << "- Alt+Shift+Click:" << "\n"
1273  << " Splits edge in one direction";
1274  // create label
1275  new FXLabel(this, information.str().c_str(), 0, GUIDesignLabelFrameThicked);
1276 }
1277 
1278 
1280 
1281 // ---------------------------------------------------------------------------
1282 // GNECreateEdgeFrame - methods
1283 // ---------------------------------------------------------------------------
1284 
1285 GNECreateEdgeFrame::GNECreateEdgeFrame(FXHorizontalFrame* horizontalFrameParent, GNEViewNet* viewNet) :
1286  GNEFrame(horizontalFrameParent, viewNet, "Create Edge"),
1287  myObjectsUnderSnappedCursor(viewNet),
1288  myCreateEdgeSource(nullptr) {
1289  // create custom edge selector
1291  // create edge parameters
1293  // create edge selector legend
1295 }
1296 
1297 
1299 
1300 
1301 void
1302 GNECreateEdgeFrame::processClick(const Position& clickedPosition, const GNEViewNetHelper::ObjectsUnderCursor& objectsUnderCursor,
1303  const bool oppositeEdge, const bool chainEdge) {
1304  // obtain junction depending of gridEnabled
1305  GNEJunction* junction = nullptr;
1306  if (objectsUnderCursor.getJunctionFront()) {
1307  junction = objectsUnderCursor.getJunctionFront();
1310  }
1311  // begin undo list
1312  if (!myViewNet->getUndoList()->hasCommandGroup()) {
1313  myViewNet->getUndoList()->p_begin("create new " + toString(SUMO_TAG_EDGE));
1314  }
1315  // if we didn't clicked over another junction, then create a new
1316  if (junction == nullptr) {
1317  junction = myViewNet->getNet()->createJunction(myViewNet->snapToActiveGrid(clickedPosition), myViewNet->getUndoList());
1318  }
1319  // now check if we have to create a new edge
1320  if (myCreateEdgeSource == nullptr) {
1321  myCreateEdgeSource = junction;
1323  update();
1324  } else {
1325  // make sure that junctions source and destiny are different
1326  if (myCreateEdgeSource != junction) {
1327  // may fail to prevent double edges
1328  GNEEdge* newEdge = myViewNet->getNet()->createEdge(myCreateEdgeSource, junction, nullptr, myViewNet->getUndoList());
1329  // check if edge was sucesfully created
1330  if (newEdge) {
1331  // set parameters
1334  } else if (myEdgeTypeSelector->useDefaultEdgeType()) {
1336  } else {
1338  }
1339  // create another edge, if create opposite edge is enabled
1340  if (oppositeEdge) {
1341  GNEEdge* newOppositeEdge = myViewNet->getNet()->createEdge(junction, myCreateEdgeSource, nullptr,
1342  myViewNet->getUndoList(), "-" + newEdge->getNBEdge()->getID());
1343  // set parameters
1346  } else if (myEdgeTypeSelector->useDefaultEdgeType()) {
1348  } else {
1350  }
1351  }
1352  // edge created, then unmark as create edge source
1354  // end undo list
1356  myViewNet->getUndoList()->p_end();
1357  } else {
1358  std::cout << "edge created without an open CommandGroup )-:\n";
1359  }
1360  // if we're creating edges in chain mode, mark junction as junction edge source
1361  if (chainEdge) {
1362  myCreateEdgeSource = junction;
1364  myViewNet->getUndoList()->p_begin("create new " + toString(SUMO_TAG_EDGE));
1365  } else {
1366  myCreateEdgeSource = nullptr;
1367  }
1368  } else {
1369  myViewNet->setStatusBarText("An " + toString(SUMO_TAG_EDGE) + " with the same geometry already exists!");
1370  }
1371  } else {
1372  myViewNet->setStatusBarText("Start- and endpoint for an " + toString(SUMO_TAG_EDGE) + " must be distinct!");
1373  }
1374  update();
1375  }
1376 }
1377 
1378 
1379 void
1381  // if myCreateEdgeSource exist, unmark ist as create edge source
1382  if (myCreateEdgeSource != nullptr) {
1383  // remove current created edge source
1385  myCreateEdgeSource = nullptr;
1386  }
1387 }
1388 
1389 
1390 const GNEJunction*
1392  return myCreateEdgeSource;
1393 }
1394 
1395 
1396 void
1397 GNECreateEdgeFrame::updateObjectsUnderSnappedCursor(const std::vector<GUIGlObject*>& GUIGlObjects) {
1399 }
1400 
1401 
1402 void
1404  // refresh template selector
1406  // show frame
1407  GNEFrame::show();
1408 }
1409 
1410 
1411 void
1413  // hide frame
1414  GNEFrame::hide();
1415 }
1416 
1417 
1420  return myEdgeTypeSelector;
1421 }
1422 
1423 /****************************************************************************/
FXDEFMAP(GNECreateEdgeFrame::EdgeTypeSelector) EdgeTypeSelectorMap[]
@ MID_GNE_SET_ATTRIBUTE
attribute edited
Definition: GUIAppEnum.h:717
@ MID_GNE_CREATEEDGEFRAME_DELETEEDGETYPE
delete edge type
Definition: GUIAppEnum.h:843
@ MID_GNE_SET_ATTRIBUTE_DIALOG
attribute edited trought dialog
Definition: GUIAppEnum.h:749
@ MID_GNE_CREATEEDGEFRAME_RESETLANETYPE
reset lane type
Definition: GUIAppEnum.h:851
@ MID_GNE_CREATEEDGEFRAME_DELETELANETYPE
delete lane type
Definition: GUIAppEnum.h:849
@ MID_GNE_CREATEEDGEFRAME_SELECTRADIOBUTTON
Definition: GUIAppEnum.h:839
@ MID_GNE_CREATEEDGEFRAME_SELECTEDGETYPE
select edge type
Definition: GUIAppEnum.h:847
@ MID_GNE_CREATEEDGEFRAME_ADDEDGETYPE
add new edge type
Definition: GUIAppEnum.h:841
@ MID_GNE_CREATEEDGEFRAME_RESETEDGETYPE
reset edge type
Definition: GUIAppEnum.h:845
#define GUIDesignButtonAttribute
button extended over over column with thick and raise frame
Definition: GUIDesigns.h:65
#define GUIDesignButton
Definition: GUIDesigns.h:62
#define GUIDesignComboBoxAttribute
Combo box static (cannot be edited) extended over the matrix column.
Definition: GUIDesigns.h:246
#define GUIDesignComboBoxNCol
number of column of every combo box
Definition: GUIDesigns.h:255
#define GUIDesignTextField
Definition: GUIDesigns.h:36
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition: GUIDesigns.h:313
#define GUIDesignLabelAttribute
label extended over the matrix column with thick frame
Definition: GUIDesigns.h:199
#define GUIDesignLabelFrameThicked
label extended over frame without thick and with text justify to left, used to show information in fr...
Definition: GUIDesigns.h:226
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition: GUIDesigns.h:54
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
Definition: GUIDesigns.h:278
#define GUIDesignTextFieldInt
text field extended over Frame with thick frame (int)
Definition: GUIDesigns.h:39
#define GUIDesignRadioButton
Definition: GUIDesigns.h:164
#define WRITE_DEBUG(msg)
Definition: MsgHandler.h:286
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ SUMO_ATTR_DISALLOW
@ SUMO_ATTR_ALLOW
@ SUMO_ATTR_SPEED
@ GNE_ATTR_PARAMETERS
parameters "key1=value1|key2=value2|...|keyN=valueN"
@ SUMO_ATTR_PRIORITY
@ SUMO_ATTR_NUMLANES
@ SUMO_ATTR_ID
@ SUMO_ATTR_WIDTH
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:44
Dialog for edit rerouters.
GNENet * getNet() const
get pointer to net
FXButton * myParametersButton
Button for edit generic parameters.
FXTextField * myWidth
textField for width
void hideEdgeTypeParameters()
hide edge parameters
void enableEdgeTypeParameters()
enable edge parameters
LaneTypeParameters * myLaneTypeParameters
lane parameters
FXHorizontalFrame * myHorizontalFrameID
horizontal frame for ID
long onCmdOpenAttributeDialog(FXObject *obj, FXSelector, void *)
Called when the user open attribute dialog.
void showEdgeTypeParameters()
show edge parameters
FXTextField * myNumLanes
textField for numLanes
FXTextField * myID
textField for id
FXButton * myDisallowButton
Button for disallow vehicles.
FXTextField * mySpeed
textField for speed
long onCmdSetAttribute(FXObject *obj, FXSelector, void *)
EdgeTypeParameters(GNECreateEdgeFrame *createEdgeFrameParent)
FOX-declaration.
void setEdgeType(GNEEdgeType *edgeType, bool showID)
set edgeType
void setAttributeDefaultParameters(FXObject *obj)
set attribute for default parameters
FXTextField * myParameters
textField for Parameters
FXTextField * myAllow
textField for allow vehicles
void setAttributeExistentEdgeType(FXObject *obj)
set attribute for existent edge type
FXTextField * myPriority
textField for priority
void disableEdgeTypeParameters()
disable edge parameters
FXTextField * myDisallow
textField for disallow vehicles
FXButton * myAllowButton
Button for allow vehicles.
GNEEdgeType * getEdgeTypeSelected() const
get edgeType selected
long onCmdSelectEdgeType(FXObject *, FXSelector, void *)
Called when the user press select an edgeType in comboBox.
GNEEdgeType * getDefaultEdgeType() const
get default edgeType
bool useEdgeTemplate() const
check if we have to use edge template
long onCmdAddEdgeType(FXObject *, FXSelector, void *)
Called when the user press button for add a new edge type.
bool useDefaultEdgeType() const
check if we're using default edge type
long onCmdDeleteEdgeType(FXObject *, FXSelector, void *)
Called when the user press button for delete edge type.
GNEEdgeType * myDefaultEdgeType
default edge type
void refreshEdgeTypeSelector()
refresh edge type selector
long onCmdRadioButton(FXObject *, FXSelector, void *)
void fillDefaultParameters()
fill default parameters
void clearEdgeTypeSelected()
clear edgeType selected
long onCmdResetEdgeType(FXObject *, FXSelector, void *)
Called when the user press button for reset edge type.
EdgeTypeSelectorLegend(GNECreateEdgeFrame *createEdgeFrameParent)
constructor
long onCmdOpenAttributeDialog(FXObject *, FXSelector, void *)
Called when the user open attribute dialog.
void disableLaneTypeParameters()
disable lane parameters
void setAttributeExistentLaneType(FXObject *obj)
set attribute for existent lane type
FXTextField * mySpeed
textField for speed
long onCmdResetLaneType(FXObject *, FXSelector, void *)
Called when the user press button for reset lane type.
long onCmdSetAttribute(FXObject *, FXSelector, void *)
LaneTypeParameters(GNECreateEdgeFrame *createEdgeFrameParent)
FOX-declaration.
FXTextField * myDisallow
textField for disallow vehicles
void updateNumLanes(int numLanes)
update numLanes
FXTextField * myAllow
textField for allow vehicles
long onCmdDeleteLaneType(FXObject *, FXSelector, void *)
Called when the user press button for delete lane type.
void setAttributes(GNEEdge *edge, GNEUndoList *undoList) const
set attributes
FXButton * myResetLaneTypeButton
button for reset lane type
FXComboBox * myLaneIndex
ComboBox for laneIndex.
FXTextField * myWidth
textField for width
FXButton * myDisallowButton
Button for disallow vehicles.
void enableLaneTypeParameters()
enable lane parameters
FXButton * myDeleteLaneTypeButton
button for delete lane type
FXButton * myParametersButton
Button for edit generic parameters.
FXTextField * myParameters
textField for Parameters
void refreshLaneTypeParameters()
refresh lane paramters
FXButton * myAllowButton
Button for allow vehicles.
void setAttributeDefaultParameters(FXObject *obj)
set attribute for default parameters
void hideLaneTypeParameters()
hide lane parameters
void showLaneTypeParameters()
show lane parameters
void processClick(const Position &clickedPosition, const GNEViewNetHelper::ObjectsUnderCursor &objectsUnderCursor, const bool oppositeEdge, const bool chainEdge)
handle processClick and set the relative colouring
EdgeTypeSelector * getEdgeTypeSelector() const
getcustom edge selector
void abortEdgeCreation()
abort current edge creation
void show()
show create edge frame
GNECreateEdgeFrame(FXHorizontalFrame *horizontalFrameParent, GNEViewNet *viewNet)
Constructor.
void updateObjectsUnderSnappedCursor(const std::vector< GUIGlObject * > &GUIGlObjects)
update objects under snapped cursor
EdgeTypeParameters * myEdgeTypeParameters
edge parameters
const GNEJunction * getJunctionSource() const
get junction source for new edge
~GNECreateEdgeFrame()
Destructor.
EdgeTypeSelectorLegend * myEdgeTypeSelectorLegend
edge selector legend
GNEJunction * myCreateEdgeSource
source junction for new edge
GNEViewNetHelper::ObjectsUnderCursor myObjectsUnderSnappedCursor
objects under snapped cursor
void hide()
hide create edge frame
EdgeTypeSelector * myEdgeTypeSelector
custom edge selector
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:49
void copyEdgeType(const GNEEdgeType *edgeType, GNEUndoList *undoList)
copy edge attributes from edgeType
Definition: GNEEdge.cpp:679
NBEdge * getNBEdge() const
returns the internal NBEdge
Definition: GNEEdge.cpp:399
void copyTemplate(const GNEInspectorFrame::TemplateEditor::EdgeTemplate &edgeTemplate, GNEUndoList *undoList)
copy edge attributes from edgetemplate
Definition: GNEEdge.cpp:652
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
Definition: GNEEdge.cpp:825
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
bool isValid(SumoXMLAttr key, const std::string &value)
const std::vector< GNELaneType * > & getLaneTypes() const
get laneTypes
Definition: GNEEdgeType.cpp:87
std::string getAttribute(SumoXMLAttr key) const
void removeLaneType(GNELaneType *laneType)
remove laneType
void addLaneType(GNELaneType *laneType, const int position)
add laneType
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
const TemplateEditor::EdgeTemplate & getEdgeTemplate() const
get the template edge (to copy attributes from)
bool hasTemplate() const
there is a template
TemplateEditor * getTemplateEditor() const
get template editor
void markAsCreateEdgeSource()
marks as first junction in createEdge-mode
void unMarkAsCreateEdgeSource()
removes mark as first junction in createEdge-mode
bool isValid(SumoXMLAttr key, const std::string &value)
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
std::string getAttribute(SumoXMLAttr key) const
GNEEdgeType * retrieveEdgeType(const std::string &id, bool failHard=true) const
get edge type by id
Definition: GNENet.cpp:1126
GNEEdge * createEdge(GNEJunction *src, GNEJunction *dest, GNEEdge *edgeTemplate, GNEUndoList *undoList, const std::string &suggestedName="", bool wasSplit=false, bool allowDuplicateGeom=false, bool recomputeConnections=true)
creates a new edge (unless an edge with the same geometry already exists)
Definition: GNENet.cpp:219
GNEJunction * createJunction(const Position &pos, GNEUndoList *undoList)
creates a new junction
Definition: GNENet.cpp:208
Dialog for edit parameters.
bool hasCommandGroup() const
Check if undoList has command group.
void p_begin(const std::string &description)
Begin undo command sub-group. This begins a new group of commands that are treated as a single comman...
Definition: GNEUndoList.cpp:71
void p_end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
Definition: GNEUndoList.cpp:78
class used to group all variables related with objects under cursor after a click over view
void updateObjectUnderCursor(const std::vector< GUIGlObject * > &GUIGlObjects)
update objects under cursor (Called only in onLeftBtnPress(...) function)
GNEJunction * getJunctionFront() const
get front junction or a pointer to nullptr
GNENet * getNet() const
get the net object
GNEViewParent * getViewParent() const
get the net object
GNEUndoList * getUndoList() const
get the undoList object
void setStatusBarText(const std::string &text)
set staturBar text
Definition: GNEViewNet.cpp:575
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Position snapToActiveGrid(const Position &pos, bool snapXY=true) const
Returns a position that is mapped to the closest grid point if the grid is active.
const std::string & getID() const
Definition: NBEdge.h:1423
static const double UNSPECIFIED_WIDTH
unspecified lane width
Definition: NBEdge.h:324
A storage for options typed value containers)
Definition: OptionsCont.h:89
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:58
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:36
std::map< SumoXMLAttr, std::string > edgeParameters
edge parameters