Eclipse SUMO - Simulation of Urban MObility
GNEViewNetHelper.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-2024 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 /****************************************************************************/
19 // A file used to reduce the size of GNEViewNet.h grouping structs and classes
20 /****************************************************************************/
35 #include <utils/gui/div/GLHelper.h>
39 
40 #include "GNEViewNetHelper.h"
41 #include "GNEViewNet.h"
42 #include "GNENet.h"
43 #include "GNEUndoList.h"
44 #include "GNEViewParent.h"
45 #include "GNEApplicationWindow.h"
46 
47 
48 // ===========================================================================
49 // static members
50 // ===========================================================================
51 
52 std::vector<RGBColor> GNEViewNetHelper::myRainbowScaledColors;
53 
54 // ---------------------------------------------------------------------------
55 // GNEViewNetHelper::LockManager - methods
56 // ---------------------------------------------------------------------------
57 
59  myViewNet(viewNet) {
60  // fill myLockedElements objects
75  // fill myLockedElements objects
86  // fill myLockedElements objects
90 }
91 
92 
94 
95 
96 bool
97 GNEViewNetHelper::LockManager::isObjectLocked(GUIGlObjectType objectType, const bool selected) const {
98  if (selected && (myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands().menuCheckLockSelectedElements->getCheck() == TRUE)) {
99  return true;
100  } else if ((objectType >= GLO_ADDITIONALELEMENT) && (objectType <= GLO_ACCESS)) {
101  // additionals
102  return myLockedElements.at(GLO_ADDITIONALELEMENT).lock;
103  } else if ((objectType >= GLO_WIRE) && (objectType <= GLO_TRACTIONSUBSTATION)) {
104  // wires
105  return myLockedElements.at(GLO_WIRE).lock;
106  } else if ((objectType >= GLO_VEHICLE) && (objectType <= GLO_ROUTEFLOW)) {
107  // vehicles
108  return myLockedElements.at(GLO_VEHICLE).lock;
109  } else if ((objectType == GLO_PERSON) || (objectType == GLO_PERSONFLOW)) {
110  // persons
111  return myLockedElements.at(GLO_PERSON).lock;
112  } else if ((objectType == GLO_CONTAINER) || (objectType == GLO_CONTAINERFLOW)) {
113  // containers
114  return myLockedElements.at(GLO_CONTAINER).lock;
115  } else if ((objectType >= GLO_STOP) && (objectType <= GLO_STOP_PLAN)) {
116  // stops
117  return myLockedElements.at(GLO_STOP).lock;
118  } else {
119  return myLockedElements.at(objectType).lock;
120  }
121 }
122 
123 
124 void
126  // get lock menu commands
127  GNEApplicationWindowHelper::LockMenuCommands& lockMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands();
128  // network
129  myLockedElements[GLO_JUNCTION].lock = lockMenuCommands.menuCheckLockJunction->getCheck() == TRUE;
130  myLockedElements[GLO_EDGE].lock = lockMenuCommands.menuCheckLockEdges->getCheck() == TRUE;
131  myLockedElements[GLO_LANE].lock = lockMenuCommands.menuCheckLockLanes->getCheck() == TRUE;
132  myLockedElements[GLO_CONNECTION].lock = lockMenuCommands.menuCheckLockConnections->getCheck() == TRUE;
133  myLockedElements[GLO_CROSSING].lock = lockMenuCommands.menuCheckLockCrossings->getCheck() == TRUE;
134  myLockedElements[GLO_WALKINGAREA].lock = lockMenuCommands.menuCheckLockWalkingAreas->getCheck() == TRUE;
135  myLockedElements[GLO_ADDITIONALELEMENT].lock = lockMenuCommands.menuCheckLockAdditionals->getCheck() == TRUE;
136  myLockedElements[GLO_WIRE].lock = lockMenuCommands.menuCheckLockWires->getCheck() == TRUE;
137  myLockedElements[GLO_TAZ].lock = lockMenuCommands.menuCheckLockTAZs->getCheck() == TRUE;
138  myLockedElements[GLO_POLYGON].lock = lockMenuCommands.menuCheckLockPolygons->getCheck() == TRUE;
139  myLockedElements[GLO_POI].lock = lockMenuCommands.menuCheckLockPOIs->getCheck() == TRUE;
140  myLockedElements[GLO_JPS_WALKABLEAREA].lock = lockMenuCommands.menuCheckLockJpsWalkableAreas->getCheck() == TRUE;
141  myLockedElements[GLO_JPS_OBSTACLE].lock = lockMenuCommands.menuCheckLockJpsObstacles->getCheck() == TRUE;
142  // demand
143  myLockedElements[GLO_ROUTE].lock = lockMenuCommands.menuCheckLockRoutes->getCheck() == TRUE;
144  myLockedElements[GLO_VEHICLE].lock = lockMenuCommands.menuCheckLockVehicles->getCheck() == TRUE;
145  myLockedElements[GLO_PERSON].lock = lockMenuCommands.menuCheckLockPersons->getCheck() == TRUE;
146  myLockedElements[GLO_PERSONTRIP].lock = lockMenuCommands.menuCheckLockPersonTrip->getCheck() == TRUE;
147  myLockedElements[GLO_WALK].lock = lockMenuCommands.menuCheckLockWalk->getCheck() == TRUE;
148  myLockedElements[GLO_RIDE].lock = lockMenuCommands.menuCheckLockRides->getCheck() == TRUE;
149  myLockedElements[GLO_CONTAINER].lock = lockMenuCommands.menuCheckLockContainers->getCheck() == TRUE;
150  myLockedElements[GLO_TRANSPORT].lock = lockMenuCommands.menuCheckLockTransports->getCheck() == TRUE;
151  myLockedElements[GLO_TRANSHIP].lock = lockMenuCommands.menuCheckLockTranships->getCheck() == TRUE;
152  myLockedElements[GLO_STOP].lock = lockMenuCommands.menuCheckLockStops->getCheck() == TRUE;
153  // data
154  myLockedElements[GLO_EDGEDATA].lock = lockMenuCommands.menuCheckLockEdgeDatas->getCheck() == TRUE;
155  myLockedElements[GLO_EDGERELDATA].lock = lockMenuCommands.menuCheckLockEdgeRelDatas->getCheck() == TRUE;
156  myLockedElements[GLO_TAZRELDATA].lock = lockMenuCommands.menuCheckLockEdgeTAZRels->getCheck() == TRUE;
157 }
158 
159 
160 void
162  // get lock menu commands
163  GNEApplicationWindowHelper::LockMenuCommands& lockMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands();
164  // network
165  lockMenuCommands.menuCheckLockJunction->setCheck(myLockedElements[GLO_JUNCTION].lock);
166  lockMenuCommands.menuCheckLockEdges->setCheck(myLockedElements[GLO_EDGE].lock);
167  lockMenuCommands.menuCheckLockLanes->setCheck(myLockedElements[GLO_LANE].lock);
168  lockMenuCommands.menuCheckLockConnections->setCheck(myLockedElements[GLO_CONNECTION].lock);
169  lockMenuCommands.menuCheckLockCrossings->setCheck(myLockedElements[GLO_CROSSING].lock);
170  lockMenuCommands.menuCheckLockWalkingAreas->setCheck(myLockedElements[GLO_WALKINGAREA].lock);
171  lockMenuCommands.menuCheckLockAdditionals->setCheck(myLockedElements[GLO_ADDITIONALELEMENT].lock);
172  lockMenuCommands.menuCheckLockWires->setCheck(myLockedElements[GLO_WIRE].lock);
173  lockMenuCommands.menuCheckLockTAZs->setCheck(myLockedElements[GLO_TAZ].lock);
174  lockMenuCommands.menuCheckLockPolygons->setCheck(myLockedElements[GLO_POLYGON].lock);
175  lockMenuCommands.menuCheckLockPOIs->setCheck(myLockedElements[GLO_POI].lock);
176  lockMenuCommands.menuCheckLockJpsWalkableAreas->setCheck(myLockedElements[GLO_JPS_WALKABLEAREA].lock);
177  lockMenuCommands.menuCheckLockJpsObstacles->setCheck(myLockedElements[GLO_JPS_OBSTACLE].lock);
178  // demand
179  lockMenuCommands.menuCheckLockRoutes->setCheck(myLockedElements[GLO_ROUTE].lock);
180  lockMenuCommands.menuCheckLockVehicles->setCheck(myLockedElements[GLO_VEHICLE].lock);
181  lockMenuCommands.menuCheckLockPersons->setCheck(myLockedElements[GLO_PERSON].lock);
182  lockMenuCommands.menuCheckLockPersonTrip->setCheck(myLockedElements[GLO_PERSONTRIP].lock);
183  lockMenuCommands.menuCheckLockWalk->setCheck(myLockedElements[GLO_WALK].lock);
184  lockMenuCommands.menuCheckLockRides->setCheck(myLockedElements[GLO_RIDE].lock);
185  lockMenuCommands.menuCheckLockContainers->setCheck(myLockedElements[GLO_CONTAINER].lock);
186  lockMenuCommands.menuCheckLockTransports->setCheck(myLockedElements[GLO_TRANSPORT].lock);
187  lockMenuCommands.menuCheckLockTranships->setCheck(myLockedElements[GLO_TRANSHIP].lock);
188  lockMenuCommands.menuCheckLockStops->setCheck(myLockedElements[GLO_STOP].lock);
189  // data
190  lockMenuCommands.menuCheckLockEdgeDatas->setCheck(myLockedElements[GLO_EDGEDATA].lock);
191  lockMenuCommands.menuCheckLockEdgeRelDatas->setCheck(myLockedElements[GLO_EDGERELDATA].lock);
192  lockMenuCommands.menuCheckLockEdgeTAZRels->setCheck(myLockedElements[GLO_TAZRELDATA].lock);
193 }
194 
195 
197  mySupermode(Supermode::NETWORK) {
198 }
199 
200 
202  mySupermode(supermode) {
203 }
204 
205 
207 
208 
209 Supermode
211  return mySupermode;
212 }
213 
214 // ---------------------------------------------------------------------------
215 // GNEViewNetHelper::ViewObjectsSelector - methods
216 // ---------------------------------------------------------------------------
217 
219  myViewNet(viewNet) {
220 }
221 
222 
223 void
225  // clear elements
226  myViewObjects.clearElements();
227  // process GUIGLObjects using elements under cursor
228  processGUIGlObjects(gViewObjectsHandler.getSelectedObjects());
229 }
230 
231 
232 void
234  // get all edges to filter
235  std::vector<const GUIGlObject*> edges;
236  for (const auto& edge : myViewObjects.edges) {
237  edges.push_back(edge);
238  }
239  myViewObjects.filterElements(edges);
240 }
241 
242 
243 void
245  // get all lanes to filter
246  std::vector<const GUIGlObject*> lanes;
247  for (const auto& lane : myViewObjects.lanes) {
248  lanes.push_back(lane);
249  }
250  myViewObjects.filterElements(lanes);
251 }
252 
253 
254 void
256  // get all elements to filter
257  std::vector<const GUIGlObject*> shapes;
258  for (const auto& poly : myViewObjects.polys) {
259  shapes.push_back(poly);
260  }
261  for (const auto& POI : myViewObjects.POIs) {
262  shapes.push_back(POI);
263  }
264  myViewObjects.filterElements(shapes);
265 }
266 
267 
268 void
269 GNEViewNetHelper::ViewObjectsSelector::filterAdditionals(const bool includeStoppigPlaces, const bool includeTAZs) {
270  // get all elements to filter
271  std::vector<const GUIGlObject*> additionals;
272  for (const auto& additional : myViewObjects.additionals) {
273  if (!includeStoppigPlaces && (additional->getType() > GLO_STOPPING_PLACE) && (additional->getType() < GLO_STOPPING_PLACE_LAST)) {
274  continue;
275  } else if (!includeTAZs && (additional->getType() == GLO_TAZ)) {
276  continue;
277  } else {
278  additionals.push_back(additional);
279  }
280  }
281  myViewObjects.filterElements(additionals);
282 }
283 
284 
285 void
287  // get all elements to filter
288  std::vector<const GUIGlObject*> demandElements;
289  for (const auto& demandElement : myViewObjects.demandElements) {
290  if (!includeRoutes && (demandElement->getType() == GLO_ROUTE)) {
291  continue;
292  } else {
293  demandElements.push_back(demandElement);
294  }
295  }
296  myViewObjects.filterElements(demandElements);
297 }
298 
299 
300 void
301 GNEViewNetHelper::ViewObjectsSelector::filterLockedElements(const std::vector<GUIGlObjectType> ignoreFilter) {
302  std::vector<const GUIGlObject*> GUIGlObjects;
303  // get all locked elements
304  for (const auto& GUIGlObject : myViewObjects.GUIGlObjects) {
305  if (GUIGlObject->isGLObjectLocked()) {
306  GUIGlObjects.push_back(GUIGlObject);
307  }
308  }
309  // apply ignore filter
310  for (const auto& ignoredType : ignoreFilter) {
311  auto it = GUIGlObjects.begin();
312  while (it != GUIGlObjects.end()) {
313  if ((*it)->getType() == ignoredType) {
314  it = GUIGlObjects.erase(it);
315  } else {
316  it++;
317  }
318  }
319  }
320  // filter objects
321  myViewObjects.filterElements(GUIGlObjects);
322 }
323 
324 
325 const GUIGlObject*
327  if (myViewObjects.GUIGlObjects.size() > 0) {
328  return myViewObjects.GUIGlObjects.front();
329  } else {
330  return nullptr;
331  }
332 }
333 
334 
337  if (myViewObjects.attributeCarriers.size() > 0) {
338  return myViewObjects.attributeCarriers.front();
339  } else {
340  return nullptr;
341  }
342 }
343 
344 
347  if (myViewObjects.networkElements.size() > 0) {
348  return myViewObjects.networkElements.front();
349  } else {
350  return nullptr;
351  }
352 }
353 
354 
357  if (myViewObjects.additionals.size() > 0) {
358  return myViewObjects.additionals.front();
359  } else {
360  return nullptr;
361  }
362 }
363 
364 
367  if (myViewObjects.demandElements.size() > 0) {
368  return myViewObjects.demandElements.front();
369  } else {
370  return nullptr;
371  }
372 }
373 
374 
377  if (myViewObjects.genericDatas.size() > 0) {
378  return myViewObjects.genericDatas.front();
379  } else {
380  return nullptr;
381  }
382 }
383 
384 
387  if (myViewObjects.junctions.size() > 0) {
388  return myViewObjects.junctions.front();
389  } else {
390  return nullptr;
391  }
392 }
393 
394 
395 GNEEdge*
397  if (myViewObjects.edges.size() > 0) {
398  return myViewObjects.edges.front();
399  } else {
400  return nullptr;
401  }
402 }
403 
404 
405 GNELane*
407  if (myViewObjects.lanes.size() > 0) {
408  return myViewObjects.lanes.front();
409  } else {
410  return nullptr;
411  }
412 }
413 
414 
415 GNELane*
417  if (myViewObjects.lanes.size() > 0) {
418  for (auto& lane : myViewObjects.lanes) {
419  if (!(lane->isAttributeCarrierSelected() || lane->getParentEdge()->isAttributeCarrierSelected()) ||
420  !myViewNet->getViewParent()->getGNEAppWindows()->getLockMenuCommands().menuCheckLockSelectedElements->getCheck()) {
421  return lane;
422  }
423  }
424  // all locked, then return nullptr
425  return nullptr;
426  } else {
427  return nullptr;
428  }
429 }
430 
431 
432 const std::vector<GNELane*>&
434  return myViewObjects.lanes;
435 }
436 
437 
440  if (myViewObjects.crossings.size() > 0) {
441  return myViewObjects.crossings.front();
442  } else {
443  return nullptr;
444  }
445 }
446 
447 
450  if (myViewObjects.walkingAreas.size() > 0) {
451  return myViewObjects.walkingAreas.front();
452  } else {
453  return nullptr;
454  }
455 }
456 
457 
460  if (myViewObjects.connections.size() > 0) {
461  return myViewObjects.connections.front();
462  } else {
463  return nullptr;
464  }
465 }
466 
467 
470  if (myViewObjects.internalLanes.size() > 0) {
471  return myViewObjects.internalLanes.front();
472  } else {
473  return nullptr;
474  }
475 }
476 
477 
478 GNEPOI*
480  if (myViewObjects.POIs.size() > 0) {
481  return myViewObjects.POIs.front();
482  } else {
483  return nullptr;
484  }
485 }
486 
487 
488 GNEPoly*
490  if (myViewObjects.polys.size() > 0) {
491  return myViewObjects.polys.front();
492  } else {
493  return nullptr;
494  }
495 }
496 
497 
498 GNETAZ*
500  if (myViewObjects.TAZs.size() > 0) {
501  return myViewObjects.TAZs.front();
502  } else {
503  return nullptr;
504  }
505 }
506 
507 
510  if (myViewObjects.edgeDatas.size() > 0) {
511  return myViewObjects.edgeDatas.front();
512  } else {
513  return nullptr;
514  }
515 }
516 
517 
520  if (myViewObjects.edgeRelDatas.size() > 0) {
521  return myViewObjects.edgeRelDatas.front();
522  } else {
523  return nullptr;
524  }
525 }
526 
527 
530  if (myViewObjects.TAZRelDatas.size() > 0) {
531  return myViewObjects.TAZRelDatas.front();
532  } else {
533  return nullptr;
534  }
535 }
536 
537 
538 const std::vector<GUIGlObject*>&
540  return myViewObjects.GUIGlObjects;
541 }
542 
543 
544 const std::vector<GNEAttributeCarrier*>&
546  return myViewObjects.attributeCarriers;
547 }
548 
549 
550 const std::vector<GNEJunction*>&
552  return myViewObjects.junctions;
553 }
554 
555 
556 const std::vector<GNEEdge*>&
558  return myViewObjects.edges;
559 }
560 
561 const std::vector<GNETAZ*>&
563  return myViewObjects.TAZs;
564 }
565 
566 const std::vector<GNEAdditional*>&
568  return myViewObjects.additionals;
569 }
570 
571 const std::vector<GNEDemandElement*>&
573  return myViewObjects.demandElements;
574 }
575 
576 
578 
579 
580 void
582  // just clear all containers
583  GUIGlObjects.clear();
584  attributeCarriers.clear();
585  networkElements.clear();
586  additionals.clear();
587  demandElements.clear();
588  junctions.clear();
589  edges.clear();
590  lanes.clear();
591  crossings.clear();
592  walkingAreas.clear();
593  connections.clear();
594  internalLanes.clear();
595  TAZs.clear();
596  POIs.clear();
597  polys.clear();
598  genericDatas.clear();
599  edgeDatas.clear();
600  edgeRelDatas.clear();
601  TAZRelDatas.clear();
602 }
603 
604 
605 void
607  for (const auto& object : objects) {
608  // remove from GUIGlObjects
609  auto itGlObjects = GUIGlObjects.begin();
610  while (itGlObjects != GUIGlObjects.end()) {
611  if (*itGlObjects == object) {
612  itGlObjects = GUIGlObjects.erase(itGlObjects);
613  } else {
614  itGlObjects++;
615  }
616  }
617  // remove from attributeCarriers
618  auto itACs = attributeCarriers.begin();
619  while (itACs != attributeCarriers.end()) {
620  if ((*itACs)->getGUIGlObject() == object) {
621  itACs = attributeCarriers.erase(itACs);
622  } else {
623  itACs++;
624  }
625  }
626  // remove from networkElements
627  auto itNetworkElements = networkElements.begin();
628  while (itNetworkElements != networkElements.end()) {
629  if ((*itNetworkElements)->getGUIGlObject() == object) {
630  itNetworkElements = networkElements.erase(itNetworkElements);
631  } else {
632  itNetworkElements++;
633  }
634  }
635  // remove from additionals
636  auto itAdditionals = additionals.begin();
637  while (itAdditionals != additionals.end()) {
638  if ((*itAdditionals)->getGUIGlObject() == object) {
639  itAdditionals = additionals.erase(itAdditionals);
640  } else {
641  itAdditionals++;
642  }
643  }
644  // remove from demandElements
645  auto itDemandElements = demandElements.begin();
646  while (itDemandElements != demandElements.end()) {
647  if ((*itDemandElements)->getGUIGlObject() == object) {
648  itDemandElements = demandElements.erase(itDemandElements);
649  } else {
650  itDemandElements++;
651  }
652  }
653  // remove from genericDatas
654  auto itGenericDatas = genericDatas.begin();
655  while (itGenericDatas != genericDatas.end()) {
656  if ((*itGenericDatas)->getGUIGlObject() == object) {
657  itGenericDatas = genericDatas.erase(itGenericDatas);
658  } else {
659  itGenericDatas++;
660  }
661  }
662  // remove from junctions
663  auto itJunctions = junctions.begin();
664  while (itJunctions != junctions.end()) {
665  if ((*itJunctions)->getGUIGlObject() == object) {
666  itJunctions = junctions.erase(itJunctions);
667  } else {
668  itJunctions++;
669  }
670  }
671  // remove from edges
672  auto itEdges = edges.begin();
673  while (itEdges != edges.end()) {
674  if ((*itEdges)->getGUIGlObject() == object) {
675  itEdges = edges.erase(itEdges);
676  } else {
677  itEdges++;
678  }
679  }
680  // remove from lanes
681  auto itLanes = lanes.begin();
682  while (itLanes != lanes.end()) {
683  if ((*itLanes)->getGUIGlObject() == object) {
684  itLanes = lanes.erase(itLanes);
685  } else {
686  itLanes++;
687  }
688  }
689  // remove from crossings
690  auto itCrossings = crossings.begin();
691  while (itCrossings != crossings.end()) {
692  if ((*itCrossings)->getGUIGlObject() == object) {
693  itCrossings = crossings.erase(itCrossings);
694  } else {
695  itCrossings++;
696  }
697  }
698  // remove from walkingAreas
699  auto itWalkingAreas = walkingAreas.begin();
700  while (itWalkingAreas != walkingAreas.end()) {
701  if ((*itWalkingAreas)->getGUIGlObject() == object) {
702  itWalkingAreas = walkingAreas.erase(itWalkingAreas);
703  } else {
704  itWalkingAreas++;
705  }
706  }
707  // remove from connections
708  auto itConnections = connections.begin();
709  while (itConnections != connections.end()) {
710  if ((*itConnections)->getGUIGlObject() == object) {
711  itConnections = connections.erase(itConnections);
712  } else {
713  itConnections++;
714  }
715  }
716  // remove from internalLanes
717  auto itInternalLanes = internalLanes.begin();
718  while (itInternalLanes != internalLanes.end()) {
719  if ((*itInternalLanes)->getGUIGlObject() == object) {
720  itInternalLanes = internalLanes.erase(itInternalLanes);
721  } else {
722  itInternalLanes++;
723  }
724  }
725  // remove from TAZs
726  auto itTAZs = TAZs.begin();
727  while (itTAZs != TAZs.end()) {
728  if ((*itTAZs)->getGUIGlObject() == object) {
729  itTAZs = TAZs.erase(itTAZs);
730  } else {
731  itTAZs++;
732  }
733  }
734  // remove from POIs
735  auto itPOIs = POIs.begin();
736  while (itPOIs != POIs.end()) {
737  if ((*itPOIs)->getGUIGlObject() == object) {
738  itPOIs = POIs.erase(itPOIs);
739  } else {
740  itPOIs++;
741  }
742  }
743  // remove from polys
744  auto itPolys = polys.begin();
745  while (itPolys != polys.end()) {
746  if ((*itPolys)->getGUIGlObject() == object) {
747  itPolys = polys.erase(itPolys);
748  } else {
749  itPolys++;
750  }
751  }
752  // remove from edgeDatas
753  auto itEdgeDatas = edgeDatas.begin();
754  while (itEdgeDatas != edgeDatas.end()) {
755  if ((*itEdgeDatas)->getGUIGlObject() == object) {
756  itEdgeDatas = edgeDatas.erase(itEdgeDatas);
757  } else {
758  itEdgeDatas++;
759  }
760  }
761  // remove from edgeRelDatas
762  auto itEdgeRelDatas = edgeRelDatas.begin();
763  while (itEdgeRelDatas != edgeRelDatas.end()) {
764  if ((*itEdgeRelDatas)->getGUIGlObject() == object) {
765  itEdgeRelDatas = edgeRelDatas.erase(itEdgeRelDatas);
766  } else {
767  itEdgeRelDatas++;
768  }
769  }
770  // remove from TAZRelDatas
771  auto itTAZRelDatas = TAZRelDatas.begin();
772  while (itTAZRelDatas != TAZRelDatas.end()) {
773  if ((*itTAZRelDatas)->getGUIGlObject() == object) {
774  itTAZRelDatas = TAZRelDatas.erase(itTAZRelDatas);
775  } else {
776  itTAZRelDatas++;
777  }
778  }
779  }
780 }
781 
782 
783 void
785  // get front AC
786  const auto frontGLObject = myViewNet->getFrontGLObject();
787  // cast specific network element
788  switch (glObject->getType()) {
789  case GLO_JUNCTION: {
790  // get junction
791  auto junction = myViewNet->getNet()->getAttributeCarriers()->retrieveJunction(glObject->getMicrosimID());
792  // check front element
793  if (glObject == frontGLObject) {
794  // insert at front
795  container.junctions.insert(container.junctions.begin(), junction);
796  container.networkElements.insert(container.networkElements.begin(), junction);
797  container.attributeCarriers.insert(container.attributeCarriers.begin(), junction);
798  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), junction);
799  } else {
800  // insert at back
801  container.junctions.push_back(junction);
802  container.networkElements.push_back(junction);
803  container.attributeCarriers.push_back(junction);
804  container.GUIGlObjects.push_back(junction);
805  }
806  break;
807  }
808  case GLO_EDGE: {
809  // get edge
810  auto edge = myViewNet->getNet()->getAttributeCarriers()->retrieveEdge(glObject->getMicrosimID());
811  // check front element
812  if (glObject == frontGLObject) {
813  // insert at front
814  container.edges.insert(container.edges.begin(), edge);
815  container.networkElements.insert(container.networkElements.begin(), edge);
816  container.attributeCarriers.insert(container.attributeCarriers.begin(), edge);
817  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), edge);
818  } else {
819  // insert at back
820  container.edges.push_back(edge);
821  container.networkElements.push_back(edge);
822  container.attributeCarriers.push_back(edge);
823  container.GUIGlObjects.push_back(edge);
824  }
825  break;
826  }
827  case GLO_LANE: {
828  // get lane
829  auto lane = myViewNet->getNet()->getAttributeCarriers()->retrieveLane(glObject);
830  // check front element
831  if (glObject == frontGLObject) {
832  // insert at front
833  container.lanes.insert(container.lanes.begin(), lane);
834  container.networkElements.insert(container.networkElements.begin(), lane);
835  container.attributeCarriers.insert(container.attributeCarriers.begin(), lane);
836  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), lane);
837  } else {
838  // insert at back
839  container.lanes.push_back(lane);
840  container.networkElements.push_back(lane);
841  container.attributeCarriers.push_back(lane);
842  container.GUIGlObjects.push_back(lane);
843  }
844  break;
845  }
846  case GLO_CROSSING: {
847  // get crossing
848  auto crossing = myViewNet->getNet()->getAttributeCarriers()->retrieveCrossing(glObject);
849  // check front element
850  if (glObject == frontGLObject) {
851  // insert at front
852  container.crossings.insert(container.crossings.begin(), crossing);
853  container.networkElements.insert(container.networkElements.begin(), crossing);
854  container.attributeCarriers.insert(container.attributeCarriers.begin(), crossing);
855  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), crossing);
856  } else {
857  // insert at back
858  container.crossings.push_back(crossing);
859  container.networkElements.push_back(crossing);
860  container.attributeCarriers.push_back(crossing);
861  container.GUIGlObjects.push_back(crossing);
862  }
863  break;
864  }
865  case GLO_WALKINGAREA: {
866  // get walkingArea
867  auto walkingArea = myViewNet->getNet()->getAttributeCarriers()->retrieveWalkingArea(glObject);
868  // check front element
869  if (glObject == frontGLObject) {
870  // insert at front
871  container.walkingAreas.insert(container.walkingAreas.begin(), walkingArea);
872  container.networkElements.insert(container.networkElements.begin(), walkingArea);
873  container.attributeCarriers.insert(container.attributeCarriers.begin(), walkingArea);
874  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), walkingArea);
875  } else {
876  // insert at back
877  container.walkingAreas.push_back(walkingArea);
878  container.networkElements.push_back(walkingArea);
879  container.attributeCarriers.push_back(walkingArea);
880  container.GUIGlObjects.push_back(walkingArea);
881  }
882  break;
883  }
884  case GLO_CONNECTION: {
885  // get connection
886  auto connection = myViewNet->getNet()->getAttributeCarriers()->retrieveConnection(glObject);
887  // check front element
888  if (glObject == frontGLObject) {
889  // insert at front
890  container.connections.insert(container.connections.begin(), connection);
891  container.networkElements.insert(container.networkElements.begin(), connection);
892  container.attributeCarriers.insert(container.attributeCarriers.begin(), connection);
893  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), connection);
894  } else {
895  // insert at back
896  container.connections.push_back(connection);
897  container.networkElements.push_back(connection);
898  container.attributeCarriers.push_back(connection);
899  container.GUIGlObjects.push_back(connection);
900  }
901  break;
902  }
903  case GLO_TLLOGIC: {
904  // get internal lane
905  auto internalLane = myViewNet->getNet()->getAttributeCarriers()->retrieveInternalLane(glObject);
906  // check front element
907  if (glObject == frontGLObject) {
908  // insert at front
909  container.internalLanes.insert(container.internalLanes.begin(), internalLane);
910  container.attributeCarriers.insert(container.attributeCarriers.begin(), internalLane);
911  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), internalLane);
912  } else {
913  // insert at back
914  container.internalLanes.push_back(internalLane);
915  container.attributeCarriers.push_back(internalLane);
916  container.GUIGlObjects.push_back(internalLane);
917  }
918  break;
919  }
920  default:
921  break;
922  }
923 }
924 
925 
926 void
928  // get additional element
929  auto additionalElement = myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject, false);
930  if (additionalElement) {
931  // insert depending if is the front attribute carrier
932  if (additionalElement == myViewNet->getFrontAttributeCarrier()) {
933  // insert at front
934  container.additionals.insert(container.additionals.begin(), additionalElement);
935  container.attributeCarriers.insert(container.attributeCarriers.begin(), additionalElement);
936  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), additionalElement);
937  } else {
938  // insert at back
939  container.additionals.push_back(additionalElement);
940  container.attributeCarriers.push_back(additionalElement);
941  container.GUIGlObjects.push_back(additionalElement);
942  }
943  }
944 }
945 
946 
947 void
949  // cast specific shape
950  if (glObject->getType() == GLO_POI) {
951  // cast POI
952  auto POI = dynamic_cast<GNEPOI*>(myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject));
953  // check front element
954  if (glObject == myViewNet->getFrontGLObject()) {
955  // insert at front
956  container.POIs.insert(container.POIs.begin(), POI);
957  } else {
958  // insert at back
959  container.POIs.push_back(POI);
960  }
961  } else if ((glObject->getType() == GLO_POLYGON) || (glObject->getType() == GLO_JPS_WALKABLEAREA) || (glObject->getType() == GLO_JPS_OBSTACLE)) {
962  // cast poly
963  auto poly = dynamic_cast<GNEPoly*>(myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject));
964  // check front element
965  if (glObject == myViewNet->getFrontGLObject()) {
966  // insert at front
967  container.polys.insert(container.polys.begin(), poly);
968  } else {
969  // insert at back
970  container.polys.push_back(poly);
971  }
972  }
973 }
974 
975 
976 void
978  // cast specific TAZ
979  if (glObject->getType() == GLO_TAZ) {
980  // cast TAZ
981  auto TAZ = dynamic_cast<GNETAZ*>(myViewNet->getNet()->getAttributeCarriers()->retrieveAdditional(glObject));
982  // check front element
983  if (glObject == myViewNet->getFrontGLObject()) {
984  // insert at front
985  container.TAZs.insert(container.TAZs.begin(), TAZ);
986  } else {
987  // insert at back
988  container.TAZs.push_back(TAZ);
989  }
990  }
991 }
992 
993 
994 void
996  // get demandElement
997  GNEDemandElement* demandElement = myViewNet->getNet()->getAttributeCarriers()->retrieveDemandElement(glObject, false);
998  if (demandElement) {
999  // insert depending if is the front attribute carrier
1000  if (demandElement == myViewNet->getFrontAttributeCarrier()) {
1001  // insert at front
1002  container.demandElements.insert(container.demandElements.begin(), demandElement);
1003  container.attributeCarriers.insert(container.attributeCarriers.begin(), demandElement);
1004  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), demandElement);
1005  } else {
1006  // insert at back
1007  container.demandElements.push_back(demandElement);
1008  container.attributeCarriers.push_back(demandElement);
1009  container.GUIGlObjects.push_back(demandElement);
1010  }
1011  }
1012 }
1013 
1014 
1015 void
1017  // cast specific generic data
1018  switch (glObject->getType()) {
1019  case GLO_EDGEDATA: {
1020  // cast EdgeData
1021  auto edgeData = dynamic_cast<GNEEdgeData*>(myViewNet->getNet()->getAttributeCarriers()->retrieveGenericData(glObject));
1022  // check front element
1023  if (glObject == myViewNet->getFrontGLObject()) {
1024  // insert at front
1025  container.edgeDatas.insert(container.edgeDatas.begin(), edgeData);
1026  container.genericDatas.insert(container.genericDatas.begin(), edgeData);
1027  container.attributeCarriers.insert(container.attributeCarriers.begin(), edgeData);
1028  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), edgeData);
1029  } else {
1030  // insert at back
1031  container.edgeDatas.push_back(edgeData);
1032  container.genericDatas.push_back(edgeData);
1033  container.attributeCarriers.push_back(edgeData);
1034  container.GUIGlObjects.push_back(edgeData);
1035  }
1036  break;
1037  }
1038  case GLO_EDGERELDATA: {
1039  // cast EdgeData
1040  auto edgeRelData = dynamic_cast<GNEEdgeRelData*>(myViewNet->getNet()->getAttributeCarriers()->retrieveGenericData(glObject));
1041  // check front element
1042  if (glObject == myViewNet->getFrontGLObject()) {
1043  // insert at front
1044  container.edgeRelDatas.insert(container.edgeRelDatas.begin(), edgeRelData);
1045  container.genericDatas.insert(container.genericDatas.begin(), edgeRelData);
1046  container.attributeCarriers.insert(container.attributeCarriers.begin(), edgeRelData);
1047  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), edgeRelData);
1048  } else {
1049  // insert at back
1050  container.edgeRelDatas.push_back(edgeRelData);
1051  container.genericDatas.push_back(edgeRelData);
1052  container.attributeCarriers.push_back(edgeRelData);
1053  container.GUIGlObjects.push_back(edgeRelData);
1054  }
1055  break;
1056  }
1057  case GLO_TAZRELDATA: {
1058  // cast TAZRelData
1059  auto TAZRelData = dynamic_cast<GNETAZRelData*>(myViewNet->getNet()->getAttributeCarriers()->retrieveGenericData(glObject));
1060  // check front element
1061  if (glObject == myViewNet->getFrontGLObject()) {
1062  // insert at front
1063  container.TAZRelDatas.insert(container.TAZRelDatas.begin(), TAZRelData);
1064  container.genericDatas.insert(container.genericDatas.begin(), TAZRelData);
1065  container.attributeCarriers.insert(container.attributeCarriers.begin(), TAZRelData);
1066  container.GUIGlObjects.insert(container.GUIGlObjects.begin(), TAZRelData);
1067  } else {
1068  // insert at back
1069  container.TAZRelDatas.push_back(TAZRelData);
1070  container.genericDatas.push_back(TAZRelData);
1071  container.attributeCarriers.push_back(TAZRelData);
1072  container.GUIGlObjects.push_back(TAZRelData);
1073  }
1074  break;
1075  }
1076  default:
1077  break;
1078  }
1079 }
1080 
1081 
1082 void
1084  // iterate over filtered edge objects
1085  for (const auto& glObjectLayer : objectsContainer) {
1086  for (const auto& glObject : glObjectLayer.second) {
1087  // update all elements by categories
1088  updateNetworkElements(myViewObjects, glObject.object);
1089  updateAdditionalElements(myViewObjects, glObject.object);
1090  updateShapeElements(myViewObjects, glObject.object);
1091  updateTAZElements(myViewObjects, glObject.object);
1092  updateDemandElements(myViewObjects, glObject.object);
1093  updateGenericDataElements(myViewObjects, glObject.object);
1094  }
1095  }
1096 }
1097 
1098 
1100  myViewNet(nullptr) {
1101 }
1102 
1103 // ---------------------------------------------------------------------------
1104 // GNEViewNetHelper::MouseButtonKeyPressed - methods
1105 // ---------------------------------------------------------------------------
1106 
1108  myEventInfo(nullptr) {
1109 }
1110 
1111 
1112 void
1114  myEventInfo = (FXEvent*) eventData;
1115 }
1116 
1117 
1118 bool
1120  if (myEventInfo) {
1121  return (myEventInfo->state & SHIFTMASK) != 0;
1122  } else {
1123  return false;
1124  }
1125 }
1126 
1127 
1128 bool
1130  if (myEventInfo) {
1131  return (myEventInfo->state & CONTROLMASK) != 0;
1132  } else {
1133  return false;
1134  }
1135 }
1136 
1137 
1138 bool
1140  if (myEventInfo) {
1141  return (myEventInfo->state & ALTMASK) != 0;
1142  } else {
1143  return false;
1144  }
1145 }
1146 
1147 
1148 bool
1150  if (myEventInfo) {
1151  return (myEventInfo->state & LEFTBUTTONMASK) != 0;
1152  } else {
1153  return false;
1154  }
1155 }
1156 
1157 
1158 bool
1160  if (myEventInfo) {
1161  return (myEventInfo->state & RIGHTBUTTONMASK) != 0;
1162  } else {
1163  return false;
1164  }
1165 }
1166 
1167 // ---------------------------------------------------------------------------
1168 // GNEViewNetHelper::MoveSingleElementValues - methods
1169 // ---------------------------------------------------------------------------
1170 
1172  myViewNet(viewNet) {
1173 }
1174 
1175 
1176 bool
1178  // first obtain moving reference (common for all)
1179  myRelativeClickedPosition = myViewNet->getPositionInformation();
1180  // get edited element
1181  const GNENetworkElement* editedElement = myViewNet->myEditNetworkElementShapes.getEditedNetworkElement();
1182  // check what type of AC will be moved
1183  if (myViewNet->myViewObjectsSelector.getJunctionFront() && (myViewNet->myViewObjectsSelector.getJunctionFront() == editedElement)) {
1184  // get move operation
1185  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getJunctionFront()->getMoveOperation();
1186  // continue if move operation is valid
1187  if (moveOperation) {
1188  myMoveOperation = moveOperation;
1189  return true;
1190  } else {
1191  return false;
1192  }
1193  } else if (myViewNet->myViewObjectsSelector.getLaneFront() && (myViewNet->myViewObjectsSelector.getLaneFront() == editedElement)) {
1194  // get move operation
1195  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getLaneFront()->getMoveOperation();
1196  // continue if move operation is valid
1197  if (moveOperation) {
1198  myMoveOperation = moveOperation;
1199  return true;
1200  } else {
1201  return false;
1202  }
1203  } else if (myViewNet->myViewObjectsSelector.getCrossingFront() && (myViewNet->myViewObjectsSelector.getCrossingFront() == editedElement)) {
1204  // get move operation
1205  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getCrossingFront()->getMoveOperation();
1206  // continue if move operation is valid
1207  if (moveOperation) {
1208  myMoveOperation = moveOperation;
1209  return true;
1210  } else {
1211  return false;
1212  }
1213  } else if (myViewNet->myViewObjectsSelector.getConnectionFront() && (myViewNet->myViewObjectsSelector.getConnectionFront() == editedElement)) {
1214  // get move operation
1215  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getConnectionFront()->getMoveOperation();
1216  // continue if move operation is valid
1217  if (moveOperation) {
1218  myMoveOperation = moveOperation;
1219  return true;
1220  } else {
1221  return false;
1222  }
1223  } else if (myViewNet->myViewObjectsSelector.getWalkingAreaFront() && (myViewNet->myViewObjectsSelector.getWalkingAreaFront() == editedElement)) {
1224  // get move operation
1225  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getWalkingAreaFront()->getMoveOperation();
1226  // continue if move operation is valid
1227  if (moveOperation) {
1228  myMoveOperation = moveOperation;
1229  return true;
1230  } else {
1231  return false;
1232  }
1233  } else {
1234  // there isn't moved items, then return false
1235  return false;
1236  }
1237 }
1238 
1239 
1240 bool
1242  // first obtain moving reference (common for all)
1243  myRelativeClickedPosition = myViewNet->getPositionInformation();
1244  // get front AC
1245  const GNEAttributeCarrier* frontAC = myViewNet->myViewObjectsSelector.getAttributeCarrierFront();
1246  // check what type of AC will be moved
1247  if (myViewNet->myViewObjectsSelector.getPolyFront() && (frontAC == myViewNet->myViewObjectsSelector.getPolyFront())) {
1248  // get move operation
1249  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getPolyFront()->getMoveOperation();
1250  // continue if move operation is valid
1251  if (moveOperation) {
1252  myMoveOperation = moveOperation;
1253  return true;
1254  } else {
1255  return false;
1256  }
1257  } else if (myViewNet->myViewObjectsSelector.getPOIFront() && (frontAC == myViewNet->myViewObjectsSelector.getPOIFront())) {
1258  // get move operation
1259  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getPOIFront()->getMoveOperation();
1260  // continue if move operation is valid
1261  if (moveOperation) {
1262  myMoveOperation = moveOperation;
1263  return true;
1264  } else {
1265  return false;
1266  }
1267  } else if (myViewNet->myViewObjectsSelector.getAdditionalFront() && (frontAC == myViewNet->myViewObjectsSelector.getAdditionalFront())) {
1268  // get move operation
1269  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getAdditionalFront()->getMoveOperation();
1270  // continue if move operation is valid
1271  if (moveOperation) {
1272  myMoveOperation = moveOperation;
1273  return true;
1274  } else {
1275  return false;
1276  }
1277  } else if (myViewNet->myViewObjectsSelector.getJunctionFront() && (frontAC == myViewNet->myViewObjectsSelector.getJunctionFront())) {
1278  // check if over junction there is a geometry point
1279  if (myViewNet->myViewObjectsSelector.getEdgeFront() && (myViewNet->myViewObjectsSelector.getEdgeFront()->clickedOverGeometryPoint(myRelativeClickedPosition))) {
1280  // get move operation
1281  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getEdgeFront()->getMoveOperation();
1282  // continue if move operation is valid
1283  if (moveOperation) {
1284  myMoveOperation = moveOperation;
1285  return true;
1286  } else {
1287  return false;
1288  }
1289  } else {
1290  // get move operation
1291  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getJunctionFront()->getMoveOperation();
1292  // continue if move operation is valid
1293  if (moveOperation) {
1294  myMoveOperation = moveOperation;
1295  return true;
1296  } else {
1297  return false;
1298  }
1299  }
1300  } else if (myViewNet->myViewObjectsSelector.getEdgeFront() && (frontAC == myViewNet->myViewObjectsSelector.getEdgeFront())) {
1301  // calculate Edge movement values (can be entire shape, single geometry points, altitude, etc.)
1302  if (myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1303  // edit end point
1304  myViewNet->myViewObjectsSelector.getEdgeFront()->editEndpoint(myViewNet->getPositionInformation(), myViewNet->myUndoList);
1305  // edge values wasn't calculated, then return false
1306  return false;
1307  } else {
1308  // get move operation
1309  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getEdgeFront()->getMoveOperation();
1310  // continue if move operation is valid
1311  if (moveOperation) {
1312  myMoveOperation = moveOperation;
1313  return true;
1314  } else {
1315  return false;
1316  }
1317  }
1318  } else if (myViewNet->myViewObjectsSelector.getLaneFront() && (frontAC == myViewNet->myViewObjectsSelector.getLaneFront())) {
1319  // get move operation
1320  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getLaneFront()->getMoveOperation();
1321  // continue if move operation is valid
1322  if (moveOperation) {
1323  myMoveOperation = moveOperation;
1324  return true;
1325  } else {
1326  return false;
1327  }
1328  } else {
1329  // there isn't moved items, then return false
1330  return false;
1331  }
1332 }
1333 
1334 
1335 bool
1337  // first obtain moving reference (common for all)
1338  myRelativeClickedPosition = myViewNet->getPositionInformation();
1339  // get front AC
1340  const GNEAttributeCarrier* frontAC = myViewNet->myViewObjectsSelector.getAttributeCarrierFront();
1341  // check demand element
1342  if (myViewNet->myViewObjectsSelector.getDemandElementFront() && (frontAC == myViewNet->myViewObjectsSelector.getDemandElementFront())) {
1343  // get move operation
1344  GNEMoveOperation* moveOperation = myViewNet->myViewObjectsSelector.getDemandElementFront()->getMoveOperation();
1345  // continue if move operation is valid
1346  if (moveOperation) {
1347  myMoveOperation = moveOperation;
1348  return true;
1349  } else {
1350  return false;
1351  }
1352 
1353  } else {
1354  // there isn't moved items, then return false
1355  return false;
1356  }
1357 }
1358 
1359 
1360 void
1362  if (myMoveOperation) {
1363  // calculate moveOffset
1364  const GNEMoveOffset moveOffset = calculateMoveOffset();
1365  // check if mouse button is pressed
1366  if (mouseLeftButtonPressed) {
1367  // move elements
1368  GNEMoveElement::moveElement(myViewNet, myMoveOperation, moveOffset);
1369  } else {
1370  // commit move
1371  GNEMoveElement::commitMove(myViewNet, myMoveOperation, moveOffset, myViewNet->getUndoList());
1372  // don't forget delete move operation
1373  delete myMoveOperation;
1374  myMoveOperation = nullptr;
1375  }
1376  }
1377 }
1378 
1379 
1380 void
1382  if (myMoveOperation) {
1383  // calculate moveOffset
1384  const GNEMoveOffset moveOffset = calculateMoveOffset();
1385  GNEMoveElement::commitMove(myViewNet, myMoveOperation, moveOffset, myViewNet->getUndoList());
1386  // don't forget delete move operation
1387  delete myMoveOperation;
1388  myMoveOperation = nullptr;
1389  }
1390 }
1391 
1392 
1393 bool
1395  return myMoveOperation != nullptr;
1396 }
1397 
1398 
1401  if (myMoveOperation) {
1402  return myMoveOperation->moveElement;
1403  } else {
1404  return nullptr;
1405  }
1406 }
1407 
1408 
1409 const GNEMoveOffset
1411  // calculate moveOffset depending of current mouse position and relative clicked position
1412  // @note #3521: Add checkBox to allow moving elements... has to be implemented and used here
1413  Position moveOffset = (myViewNet->getPositionInformation() - myViewNet->myMoveSingleElement.myRelativeClickedPosition);
1414  // calculate Z depending of moveElevation
1415  if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->amChecked() == TRUE) {
1416  // use Y as Z value and return Z move offset
1417  return GNEMoveOffset(moveOffset.y());
1418  } else {
1419  // return X-Y move offset
1420  return GNEMoveOffset(moveOffset.x(), moveOffset.y());
1421  }
1422 }
1423 
1424 // ---------------------------------------------------------------------------
1425 // GNEViewNetHelper::MoveMultipleElementValues - methods
1426 // ---------------------------------------------------------------------------
1427 
1429  myViewNet(viewNet),
1430  myMovingSelectedEdge(false),
1431  myEdgeOffset(0) {
1432 }
1433 
1434 
1435 void
1437  // save clicked position (to calculate offset)
1438  myClickedPosition = myViewNet->getPositionInformation();
1439  // continue depending of clicked element
1440  if (myViewNet->myViewObjectsSelector.getJunctionFront()) {
1441  calculateJunctionSelection();
1442  } else if (myViewNet->myViewObjectsSelector.getEdgeFront()) {
1443  calculateEdgeSelection(myViewNet->myViewObjectsSelector.getEdgeFront());
1444  }
1445 }
1446 
1447 
1448 void
1450  // calculate moveOffset
1451  const GNEMoveOffset moveOffset = calculateMoveOffset();
1452  // check if mouse button is pressed
1453  if (mouseLeftButtonPressed) {
1454  // iterate over all operations
1455  for (const auto& moveOperation : myMoveOperations) {
1456  // move elements
1457  GNEMoveElement::moveElement(myViewNet, moveOperation, moveOffset);
1458  }
1459  } else if (myMoveOperations.size() > 0) {
1460  // begin undo list
1461  myViewNet->getUndoList()->begin(GUIIcon::MODEMOVE, TL("moving selection"));
1462  // iterate over all operations
1463  for (const auto& moveOperation : myMoveOperations) {
1464  // commit move
1465  GNEMoveElement::commitMove(myViewNet, moveOperation, moveOffset, myViewNet->getUndoList());
1466  // don't forget delete move operation
1467  delete moveOperation;
1468  }
1469  // end undo list
1470  myViewNet->getUndoList()->end();
1471  // clear move operations
1472  myMoveOperations.clear();
1473  }
1474 }
1475 
1476 
1477 void
1479  // calculate moveOffset
1480  const GNEMoveOffset moveOffset = calculateMoveOffset();
1481  // begin undo list
1482  myViewNet->getUndoList()->begin(GUIIcon::MODEMOVE, TL("moving selection"));
1483  // finish all move operations
1484  for (const auto& moveOperation : myMoveOperations) {
1485  GNEMoveElement::commitMove(myViewNet, moveOperation, moveOffset, myViewNet->getUndoList());
1486  // don't forget delete move operation
1487  delete moveOperation;
1488  }
1489  // end undo list
1490  myViewNet->getUndoList()->end();
1491  // clear move operations
1492  myMoveOperations.clear();
1493 }
1494 
1495 
1496 bool
1498  return (myMoveOperations.size() > 0);
1499 }
1500 
1501 
1502 bool
1504  return myMovingSelectedEdge;
1505 }
1506 
1507 
1508 void
1510  myMovingSelectedEdge = false;
1511 }
1512 
1513 
1514 double
1516  return myEdgeOffset;
1517 }
1518 
1519 
1520 bool
1522  return myMoveOperations.size() > 0;
1523 }
1524 
1525 
1526 const GNEMoveOffset
1528  // calculate moveOffset depending of current mouse position and relative clicked position
1529  // @note #3521: Add checkBox to allow moving elements... has to be implemented and used here
1530  Position moveOffset = (myViewNet->getPositionInformation() - myClickedPosition);
1531  // calculate Z depending of moveElevation
1532  if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->amChecked() == TRUE) {
1533  // use Y for Z and return X move offset
1534  return GNEMoveOffset(moveOffset.y());
1535  } else {
1536  // return X-Y move offset
1537  return GNEMoveOffset(moveOffset.x(), moveOffset.y());
1538  }
1539 }
1540 
1541 
1542 void
1544  // declare move operation
1545  GNEMoveOperation* moveOperation = nullptr;
1546  // first move all selected junctions
1547  const auto selectedJunctions = myViewNet->getNet()->getAttributeCarriers()->getSelectedJunctions();
1548  // iterate over selected junctions
1549  for (const auto& junction : selectedJunctions) {
1550  moveOperation = junction->getMoveOperation();
1551  if (moveOperation) {
1552  myMoveOperations.push_back(moveOperation);
1553  }
1554  }
1555  // now move all selected edges
1556  const auto selectedEdges = myViewNet->getNet()->getAttributeCarriers()->getSelectedEdges();
1557  // iterate over selected edges
1558  for (const auto& edge : selectedEdges) {
1559  moveOperation = edge->getMoveOperation();
1560  if (moveOperation) {
1561  myMoveOperations.push_back(moveOperation);
1562  }
1563  }
1564 }
1565 
1566 
1567 void
1569  // first move all selected junctions
1570  const auto selectedJunctions = myViewNet->getNet()->getAttributeCarriers()->getSelectedJunctions();
1571  // iterate over selected junctions
1572  for (const auto& junction : selectedJunctions) {
1573  GNEMoveOperation* moveOperation = junction->getMoveOperation();
1574  if (moveOperation) {
1575  myMoveOperations.push_back(moveOperation);
1576  }
1577  }
1578  // enable moving selected edge flag
1579  myMovingSelectedEdge = true;
1580  // get edge shape
1581  const auto& shape = clickedEdge->getNBEdge()->getGeometry();
1582  // calculate offset based on the clicked edge shape and convex angle
1583  if (clickedEdge->isConvexAngle()) {
1584  myEdgeOffset = shape.nearest_offset_to_point2D(myViewNet->getPositionInformation());
1585  } else {
1586  myEdgeOffset = shape.length2D() - shape.nearest_offset_to_point2D(myViewNet->getPositionInformation());
1587  }
1588  // now move all selected edges
1589  const auto selectedEdges = myViewNet->getNet()->getAttributeCarriers()->getSelectedEdges();
1590  // iterate over edges between 0 and 180 degrees
1591  for (const auto& edge : selectedEdges) {
1592  GNEMoveOperation* moveOperation = edge->getMoveOperation();
1593  // continue if move operation is valid
1594  if (moveOperation) {
1595  myMoveOperations.push_back(moveOperation);
1596  }
1597  }
1598 }
1599 
1600 // ---------------------------------------------------------------------------
1601 // GNEViewNetHelper::VehicleOptions - methods
1602 // ---------------------------------------------------------------------------
1603 
1605  myViewNet(viewNet) {
1606 }
1607 
1608 
1609 void
1611  UNUSED_PARAMETER(myViewNet);
1612  // currently unused
1613 }
1614 
1615 
1616 void
1618  // currently unused
1619 }
1620 
1621 // ---------------------------------------------------------------------------
1622 // GNEViewNetHelper::VehicleTypeOptions - methods
1623 // ---------------------------------------------------------------------------
1624 
1626  myViewNet(viewNet) {
1627 }
1628 
1629 
1630 void
1632  UNUSED_PARAMETER(myViewNet);
1633  // currently unused
1634 }
1635 
1636 
1637 void
1639  // currently unused
1640 }
1641 
1642 // ---------------------------------------------------------------------------
1643 // GNEViewNetHelper::SelectingArea - methods
1644 // ---------------------------------------------------------------------------
1645 
1647  selectingUsingRectangle(false),
1648  startDrawing(false),
1649  myViewNet(viewNet) {
1650 }
1651 
1652 
1653 void
1655  selectingUsingRectangle = true;
1656  selectionCorner1 = myViewNet->getPositionInformation();
1657  selectionCorner2 = selectionCorner1;
1658 }
1659 
1660 
1661 void
1663  // start drawing
1664  startDrawing = true;
1665  // only update selection corner 2
1666  selectionCorner2 = myViewNet->getPositionInformation();
1667  // update status bar
1668  myViewNet->setStatusBarText(TL("Selection width:") + toString(fabs(selectionCorner1.x() - selectionCorner2.x()))
1669  + TL(" height:") + toString(fabs(selectionCorner1.y() - selectionCorner2.y()))
1670  + TL(" diagonal:") + toString(selectionCorner1.distanceTo2D(selectionCorner2)));
1671 }
1672 
1673 
1674 void
1676  // finish rectangle selection
1677  selectingUsingRectangle = false;
1678  startDrawing = false;
1679  // clear status bar
1680  myViewNet->setStatusBarText("");
1681 }
1682 
1683 
1684 void
1686  // shift held down on mouse-down and mouse-up and check that rectangle exist
1687  if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1688  (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1689  myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1690  // create boundary between two corners
1691  Boundary rectangleBoundary;
1692  rectangleBoundary.add(selectionCorner1);
1693  rectangleBoundary.add(selectionCorner2);
1694  // process selection within boundary
1695  processBoundarySelection(rectangleBoundary);
1696  }
1697 }
1698 
1699 
1700 std::vector<GNEEdge*>
1702  // shift held down on mouse-down and mouse-up and check that rectangle exist
1703  if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1704  (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1705  myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1706  // create boundary between two corners
1707  Boundary rectangleBoundary;
1708  rectangleBoundary.add(selectionCorner1);
1709  rectangleBoundary.add(selectionCorner2);
1710  // obtain all elements in boundary
1711  myViewNet->updateObjectsInBoundary(rectangleBoundary);
1712  // return all edges
1713  return myViewNet->getViewObjectsSelector().getEdges();
1714  } else {
1715  return {};
1716  }
1717 }
1718 
1719 
1720 void
1722  if (selectingUsingRectangle) {
1724  glTranslated(0, 0, GLO_RECTANGLESELECTION);
1725  GLHelper::setColor(color);
1726  glLineWidth(2);
1727  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
1728  glBegin(GL_QUADS);
1729  glVertex2d(selectionCorner1.x(), selectionCorner1.y());
1730  glVertex2d(selectionCorner1.x(), selectionCorner2.y());
1731  glVertex2d(selectionCorner2.x(), selectionCorner2.y());
1732  glVertex2d(selectionCorner2.x(), selectionCorner1.y());
1733  glEnd();
1735  }
1736 }
1737 
1738 
1739 void
1741  const bool selEdges = myViewNet->myNetworkViewOptions.selectEdges();
1742  // obtain all elements in boundary
1743  myViewNet->updateObjectsInBoundary(boundary);
1744  // filter ACsInBoundary depending of current supermode
1745  std::set<GNEAttributeCarrier*> ACsFiltered;
1746  for (const auto& AC : myViewNet->getViewObjectsSelector().getAttributeCarriers()) {
1747  if (!AC->getGUIGlObject()->isGLObjectLocked()) {
1748  if (myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
1749  if (AC->getTagProperty().isNetworkElement() || AC->getTagProperty().isAdditionalElement()) {
1750  if ((AC->getTagProperty().getTag() == SUMO_TAG_EDGE && !selEdges)
1751  || (AC->getTagProperty().getTag() == SUMO_TAG_LANE && selEdges)) {
1752  continue;
1753  }
1754  ACsFiltered.insert(AC);
1755  }
1756  } else if (myViewNet->myEditModes.isCurrentSupermodeDemand() && AC->getTagProperty().isDemandElement()) {
1757  ACsFiltered.insert(AC);
1758  } else if (myViewNet->myEditModes.isCurrentSupermodeData() && AC->getTagProperty().isGenericData()) {
1759  ACsFiltered.insert(AC);
1760  }
1761  }
1762  }
1763  // declare two sets of attribute carriers, one for select and another for unselect
1764  std::vector<GNEAttributeCarrier*> ACToSelect;
1765  std::vector<GNEAttributeCarrier*> ACToUnselect;
1766  // reserve memory (we assume that in the worst case we're going to insert all elements of ACsInBoundaryFiltered
1767  ACToSelect.reserve(ACsFiltered.size());
1768  ACToUnselect.reserve(ACsFiltered.size());
1769  // in restrict AND replace mode all current selected attribute carriers will be unselected
1770  if ((myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode() == GNESelectorFrame::ModificationMode::Operation::RESTRICT) ||
1771  (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode() == GNESelectorFrame::ModificationMode::Operation::REPLACE)) {
1772  // obtain selected ACs depending of current supermode
1773  const auto selectedAC = myViewNet->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(false);
1774  // add id into ACs to unselect
1775  for (const auto& AC : selectedAC) {
1776  ACToUnselect.push_back(AC);
1777  }
1778  }
1779  // iterate over AttributeCarriers obtained of boundary an place it in ACToSelect or ACToUnselect
1780  for (const auto& AC : ACsFiltered) {
1781  switch (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode()) {
1783  ACToUnselect.push_back(AC);
1784  break;
1786  if (std::find(ACToUnselect.begin(), ACToUnselect.end(), AC) != ACToUnselect.end()) {
1787  ACToSelect.push_back(AC);
1788  }
1789  break;
1790  default:
1791  ACToSelect.push_back(AC);
1792  break;
1793  }
1794  }
1795  // select junctions and their connections and crossings if Auto select junctions is enabled (note: only for "add mode")
1796  if (myViewNet->autoSelectNodes() && (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode() == GNESelectorFrame::ModificationMode::Operation::ADD)) {
1797  std::vector<GNEEdge*> edgesToSelect;
1798  // iterate over ACToSelect and extract edges
1799  for (const auto& AC : ACToSelect) {
1800  if (AC->getTagProperty().getTag() == SUMO_TAG_EDGE) {
1801  edgesToSelect.push_back(dynamic_cast<GNEEdge*>(AC));
1802  }
1803  }
1804  // iterate over extracted edges
1805  for (const auto& edge : edgesToSelect) {
1806  // select junction source and all their connections and crossings
1807  ACToSelect.push_back(edge->getFromJunction());
1808  for (const auto& connection : edge->getFromJunction()->getGNEConnections()) {
1809  ACToSelect.push_back(connection);
1810  }
1811  for (const auto& crossing : edge->getFromJunction()->getGNECrossings()) {
1812  ACToSelect.push_back(crossing);
1813  }
1814  // select junction destination and all their connections crossings
1815  ACToSelect.push_back(edge->getToJunction());
1816  for (const auto& connection : edge->getToJunction()->getGNEConnections()) {
1817  ACToSelect.push_back(connection);
1818  }
1819  for (const auto& crossing : edge->getToJunction()->getGNECrossings()) {
1820  ACToSelect.push_back(crossing);
1821  }
1822  }
1823  }
1824  // only continue if there is ACs to select or unselect
1825  if ((ACToSelect.size() + ACToUnselect.size()) > 0) {
1826  // first unselect AC of ACToUnselect and then selects AC of ACToSelect
1827  myViewNet->myUndoList->begin(GUIIcon::MODESELECT, TL("selection using rectangle"));
1828  for (const auto& AC : ACToUnselect) {
1829  AC->setAttribute(GNE_ATTR_SELECTED, "0", myViewNet->myUndoList);
1830  }
1831  for (const auto& AC : ACToSelect) {
1832  if (AC->getTagProperty().isSelectable()) {
1833  AC->setAttribute(GNE_ATTR_SELECTED, "1", myViewNet->myUndoList);
1834  }
1835  }
1836  myViewNet->myUndoList->end();
1837  }
1838  myViewNet->makeNonCurrent();
1839 }
1840 
1841 // ---------------------------------------------------------------------------
1842 // GNEViewNetHelper::TestingMode - methods
1843 // ---------------------------------------------------------------------------
1844 
1846  myViewNet(viewNet) {
1847 }
1848 
1849 
1850 void
1852  // first check if testing mode is enabled and window size is correct
1853  if (OptionsCont::getOptions().getBool("gui-testing") && OptionsCont::getOptions().isSet("window-size")) {
1854  std::vector<std::string> windowSize = OptionsCont::getOptions().getStringVector("window-size");
1855  // make sure that given windows size has exactly two valid int values
1856  if ((windowSize.size() == 2) && GNEAttributeCarrier::canParse<int>(windowSize[0]) && GNEAttributeCarrier::canParse<int>(windowSize[1])) {
1857  myTestingWidth = GNEAttributeCarrier::parse<int>(windowSize[0]);
1858  myTestingHeight = GNEAttributeCarrier::parse<int>(windowSize[1]);
1859  } else {
1860  WRITE_ERRORF(TL("Invalid windows size-format: %for option 'window-size'"), toString(windowSize));
1861  }
1862  }
1863 }
1864 
1865 
1866 void
1868  // first check if testing mode is enabled
1869  if (OptionsCont::getOptions().getBool("gui-testing")) {
1870  // check if main windows has to be resized
1871  if (myTestingWidth > 0) {
1872  mainWindow->resize(myTestingWidth, myTestingHeight);
1873  }
1874  //std::cout << " fixed: view=" << getWidth() << ", " << getHeight() << " app=" << mainWindow->getWidth() << ", " << mainWindow->getHeight() << "\n";
1875  // draw pink square in the upper left corner on top of everything
1876  const double size = myViewNet->p2m(32);
1877  Position center = myViewNet->screenPos2NetPos(8, 8);
1878  // magenta
1881  glTranslated(center.x(), center.y(), GLO_TESTELEMENT);
1882  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1883  glBegin(GL_QUADS);
1884  glVertex2d(0, 0);
1885  glVertex2d(0, -size);
1886  glVertex2d(size, -size);
1887  glVertex2d(size, 0);
1888  glEnd();
1890  // blue
1893  glTranslated(center.x(), center.y(), GLO_TESTELEMENT + 1);
1894  glScaled(0.7, 0.7, 0);
1895  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1896  glBegin(GL_QUADS);
1897  glVertex2d(0, 0);
1898  glVertex2d(0, -size);
1899  glVertex2d(size, -size);
1900  glVertex2d(size, 0);
1901  glEnd();
1903  // yellow
1906  glTranslated(center.x(), center.y(), GLO_TESTELEMENT + 2);
1907  glScaled(0.4, 0.4, 0);
1908  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1909  glBegin(GL_QUADS);
1910  glVertex2d(0, 0);
1911  glVertex2d(0, -size);
1912  glVertex2d(size, -size);
1913  glVertex2d(size, 0);
1914  glEnd();
1916  }
1917 }
1918 
1919 // ---------------------------------------------------------------------------
1920 // GNEViewNetHelper::SaveElements - methods
1921 // ---------------------------------------------------------------------------
1922 
1924  myViewNet(viewNet) {
1925 }
1926 
1927 
1929  delete mySaveIndividualFilesPopup;
1930 }
1931 
1932 
1933 void
1935  // get save element grip
1936  auto gripSaveElements = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements;
1937  // get tooltip menu
1938  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
1939  // create save sumo config button
1940  mySaveNeteditConfig = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
1941  std::string("\t") + TL("Save Netedit Config") + std::string("\t") + TL("Save Netedit Config. (Ctrl+Shift+E)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG),
1942  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG, GUIDesignButtonToolbar);
1943  mySaveNeteditConfig->create();
1944  // create save sumo config button
1945  mySaveSumoConfig = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
1946  std::string("\t") + TL("Save Sumo Config") + std::string("\t") + TL("Save Sumo Config. (Ctrl+Shift+S)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG),
1947  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG, GUIDesignButtonToolbar);
1948  mySaveSumoConfig->create();
1949  // create save network button
1950  mySaveNetwork = new MFXButtonTooltip(gripSaveElements, tooltipMenu,
1951  std::string("\t") + TL("Save network") + std::string("\t") + TL("Save network. (Ctrl+S)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS),
1952  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK, GUIDesignButtonToolbar);
1953  mySaveNetwork->create();
1954  // create popup for save individual files
1955  mySaveIndividualFilesPopup = new FXPopup(gripSaveElements, POPUP_VERTICAL);
1956  mySaveIndividualFilesPopup->create();
1957  // create save individual files button
1958  mySaveIndividualFiles = new MFXMenuButtonTooltip(gripSaveElements, tooltipMenu,
1959  std::string("\t") + TL("Save individual files") + std::string("\t") + TL("Save individual files."),
1960  GUIIconSubSys::getIcon(GUIIcon::SAVE_MULTIPLE), mySaveIndividualFilesPopup, nullptr, GUIDesignButtonToolbarLocator);
1961  mySaveIndividualFiles->create();
1962  // create save additional elements button
1963  mySaveAdditionalElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
1964  std::string("\t") + TL("Save additional elements") + std::string("\t") + TL("Save additional elements. (Ctrl+Shift+A)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS),
1965  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALS, GUIDesignButtonPopup);
1966  mySaveAdditionalElements->create();
1967  // create save demand elements button
1968  mySaveDemandElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
1969  std::string("\t") + TL("Save demand elements") + std::string("\t") + TL("Save demand elements. (Ctrl+Shift+D)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS),
1970  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS, GUIDesignButtonPopup);
1971  mySaveDemandElements->create();
1972  // create save data elements button
1973  mySaveDataElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
1974  std::string("\t") + TL("Save data elements") + std::string("\t") + TL("Save data elements. (Ctrl+Shift+B)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS),
1975  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS, GUIDesignButtonPopup);
1976  mySaveDataElements->create();
1977  // create save mean datas elements button
1978  mySaveMeanDataElements = new MFXButtonTooltip(mySaveIndividualFilesPopup, tooltipMenu,
1979  std::string("\t") + TL("Save mean data elements") + std::string("\t") + TL("Save mean data elements. (Ctrl+Shift+M)"), GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS),
1980  myViewNet->getViewParent()->getGNEAppWindows(), MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAS, GUIDesignButtonPopup);
1981  mySaveMeanDataElements->create();
1982  // recalc menu bar because there is new elements
1983  gripSaveElements->recalc();
1984  // show menu bar modes
1985  gripSaveElements->show();
1986 }
1987 
1988 
1989 void
1991  if (value) {
1992  mySaveIndividualFiles->enable();
1993  } else {
1994  mySaveIndividualFiles->disable();
1995  }
1996 }
1997 
1998 // ---------------------------------------------------------------------------
1999 // GNEViewNetHelper::TimeFormat - methods
2000 // ---------------------------------------------------------------------------
2001 
2003  myViewNet(viewNet) {
2004 }
2005 
2006 
2007 void
2009  // create save sumo config button
2010  mySwitchButton = new MFXButtonTooltip(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().timeSwitch,
2011  myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu(),
2012  gHumanReadableTime ? "H" : "S" + std::string("\t") + TL("Switch between seconds and HH:MM:SS") + std::string("\t") + TL("Switch between seconds and HH:MM:SS"), nullptr,
2013  myViewNet->getViewParent()->getGNEAppWindows(), MID_GNE_TOGGLE_TIMEFORMAT, GUIDesignButtonToolbar);
2014  mySwitchButton->create();
2015 }
2016 
2017 
2018 void
2020  if (gHumanReadableTime) {
2021  gHumanReadableTime = false;
2022  } else {
2023  gHumanReadableTime = true;
2024  }
2026  OptionsCont::getOptions().set("human-readable-time", toString(gHumanReadableTime));
2027 }
2028 
2029 
2030 void
2032  if (gHumanReadableTime) {
2033  mySwitchButton->setText("H");
2034  } else {
2035  mySwitchButton->setText("S");
2036  }
2037 }
2038 
2039 // ---------------------------------------------------------------------------
2040 // GNEViewNetHelper::EditModes - methods
2041 // ---------------------------------------------------------------------------
2042 
2044  currentSupermode(Supermode::NETWORK),
2045  networkEditMode(NetworkEditMode::NETWORK_INSPECT),
2046  demandEditMode(DemandEditMode::DEMAND_INSPECT),
2047  dataEditMode(DataEditMode::DATA_INSPECT),
2048  myViewNet(viewNet) {
2049  auto& neteditOptions = OptionsCont::getOptions();
2050  // if new option is enabled, start in create edge mode
2051  if (neteditOptions.getBool("new")) {
2053  neteditOptions.resetWritable();
2054  neteditOptions.set("new", "false");
2055  }
2056 }
2057 
2058 
2060  delete myNeteditViewsPopup;
2061 }
2062 
2063 
2064 void
2066  // grip supermodes
2067  auto gripSupermodes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes;
2068  // static toolTip menu
2069  auto toolTipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2070  // create network button
2071  networkButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2072  TL("Network") + std::string("\t") + TL("Edit network elements") + std::string("\t") + TL("Set mode for editing network elements. (F2)"),
2074  networkButton->create();
2075  // create demand button
2076  demandButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2077  TL("Demand") + std::string("\t") + TL("Edit traffic demand elements") + std::string("\t") + TL("Set mode for editing traffic demand. (F3)"),
2079  demandButton->create();
2080  // create data button
2081  dataButton = new MFXCheckableButton(false, gripSupermodes, toolTipMenu,
2082  TL("Data") + std::string("\t") + TL("Edit data elements") + std::string("\t") + TL("Set mode for editing data demand. (F4)"),
2084  dataButton->create();
2085  // build the views popup
2086  myNeteditViewsPopup = new FXPopup(gripSupermodes, POPUP_VERTICAL);
2087  myNeteditViewsPopup->create();
2088  // build views button
2089  myNeteditViewsButton = new MFXMenuButtonTooltip(gripSupermodes, toolTipMenu,
2090  (std::string("\t") + TL("Change netedit view") + std::string("\t") + TL("Change netedit view.")).c_str(),
2092  myNeteditViewsButton->create();
2093  // build default view button
2094  myDefaultViewButton = new MFXButtonTooltip(myNeteditViewsPopup, toolTipMenu,
2095  (std::string("Default\t") + TL("Set default view") + std::string("\t") + TL("Set default view.")).c_str(),
2097  myDefaultViewButton->create();
2098  // build jupedsim view button
2099  myJuPedSimViewButton = new MFXButtonTooltip(myNeteditViewsPopup, toolTipMenu,
2100  (std::string("JuPedSim\t") + TL("Set JuPedSim view") + std::string("\t") + TL("Set JuPedSim view.")).c_str(),
2102  myJuPedSimViewButton->create();
2103  myNeteditViewsPopup->recalc();
2104  // set width (grip + 3 large buttons + icon button)
2105  gripSupermodes->setWidth(353);
2106  // show menu bar modes
2107  gripSupermodes->show();
2108 }
2109 
2110 
2111 void
2113  if (!force && (supermode == currentSupermode)) {
2114  myViewNet->setStatusBarText(TL("Mode already selected"));
2115  if (myViewNet->myCurrentFrame != nullptr) {
2116  myViewNet->myCurrentFrame->focusUpperElement();
2117  }
2118  } else {
2119  myViewNet->setStatusBarText("");
2120  // abort current operation
2121  myViewNet->abortOperation(false);
2122  // set super mode
2123  currentSupermode = supermode;
2124  // set supermodes
2125  if (supermode == Supermode::NETWORK) {
2126  // change buttons
2127  networkButton->setChecked(true);
2128  demandButton->setChecked(false);
2129  dataButton->setChecked(false);
2130  // show network buttons
2131  myViewNet->myNetworkCheckableButtons.showNetworkCheckableButtons();
2132  // hide demand buttons
2133  myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
2134  // hide data buttons
2135  myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
2136  // force update network mode
2137  setNetworkEditMode(networkEditMode, true);
2138  } else if (supermode == Supermode::DEMAND) {
2139  // change buttons
2140  networkButton->setChecked(false);
2141  demandButton->setChecked(true);
2142  dataButton->setChecked(false);
2143  // hide network buttons
2144  myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
2145  // show demand buttons
2146  myViewNet->myDemandCheckableButtons.showDemandCheckableButtons();
2147  // hide data buttons
2148  myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
2149  // force update demand mode
2150  setDemandEditMode(demandEditMode, true);
2151  // demand modes require ALWAYS a recomputing
2152  myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2153  // check if update path calculator
2154  if (!myViewNet->myNet->getPathManager()->getPathCalculator()->isPathCalculatorUpdated()) {
2155  // update DijkstraRouter of RouteCalculatorInstance
2156  myViewNet->myNet->getPathManager()->getPathCalculator()->updatePathCalculator();
2157  // compute all demand elements
2158  myViewNet->myNet->computeDemandElements(myViewNet->myViewParent->getGNEAppWindows());
2159  }
2160  } else if (supermode == Supermode::DATA) {
2161  // change buttons
2162  networkButton->setChecked(false);
2163  demandButton->setChecked(false);
2164  dataButton->setChecked(true);
2165  // hide network buttons
2166  myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
2167  // hide demand buttons
2168  myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
2169  // show data buttons
2170  myViewNet->myDataCheckableButtons.showDataCheckableButtons();
2171  // force update data mode
2172  setDataEditMode(dataEditMode, true);
2173  // check if recompute
2174  if (myViewNet->getViewParent()->getGNEAppWindows()->getProcessingMenuCommands().menuCheckRecomputeDataMode->getCheck() == TRUE) {
2175  // demand modes require ALWAYS a recomputing
2176  myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2177  }
2178  // check if update path calculator
2179  if (!myViewNet->myNet->getPathManager()->getPathCalculator()->isPathCalculatorUpdated()) {
2180  // update DijkstraRouter of RouteCalculatorInstance
2181  myViewNet->myNet->getPathManager()->getPathCalculator()->updatePathCalculator();
2182  // compute all demand elements
2183  myViewNet->myNet->computeDemandElements(myViewNet->myViewParent->getGNEAppWindows());
2184  }
2185  }
2186  // update buttons
2187  networkButton->update();
2188  demandButton->update();
2189  dataButton->update();
2190  // update Supermode CommandButtons in GNEAppWindows
2191  myViewNet->myViewParent->getGNEAppWindows()->updateSuperModeMenuCommands(currentSupermode);
2192  }
2193 }
2194 
2195 
2196 void
2198  if ((mode == networkEditMode) && !force) {
2199  myViewNet->setStatusBarText(TL("Network mode already selected"));
2200  if (myViewNet->myCurrentFrame != nullptr) {
2201  myViewNet->myCurrentFrame->focusUpperElement();
2202  }
2203  } else if (networkEditMode == NetworkEditMode::NETWORK_TLS && !myViewNet->myViewParent->getTLSEditorFrame()->isTLSSaved()) {
2204  myViewNet->setStatusBarText(TL("Save modifications in TLS before change mode"));
2205  myViewNet->myCurrentFrame->focusUpperElement();
2206  } else {
2207  myViewNet->setStatusBarText("");
2208  myViewNet->abortOperation(false);
2209  // stop editing of custom shapes
2210  myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2211  // set new Network mode
2212  networkEditMode = mode;
2213  // for common modes (Inspect/Delete/Select/move) change also the other supermode
2214  if (networkEditMode == NetworkEditMode::NETWORK_INSPECT) {
2215  demandEditMode = DemandEditMode::DEMAND_INSPECT;
2216  dataEditMode = DataEditMode::DATA_INSPECT;
2217  } else if (networkEditMode == NetworkEditMode::NETWORK_DELETE) {
2218  demandEditMode = DemandEditMode::DEMAND_DELETE;
2219  dataEditMode = DataEditMode::DATA_DELETE;
2220  } else if (networkEditMode == NetworkEditMode::NETWORK_SELECT) {
2221  demandEditMode = DemandEditMode::DEMAND_SELECT;
2222  dataEditMode = DataEditMode::DATA_SELECT;
2223  } else if (networkEditMode == NetworkEditMode::NETWORK_MOVE) {
2224  demandEditMode = DemandEditMode::DEMAND_MOVE;
2225  }
2226  // certain modes require a recomputing
2227  switch (mode) {
2232  // modes which depend on computed data
2233  myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
2234  break;
2235  default:
2236  break;
2237  }
2238  // update cursors
2239  myViewNet->updateCursor();
2240  // update network mode specific controls
2241  myViewNet->updateNetworkModeSpecificControls();
2242  }
2243 }
2244 
2245 
2246 void
2248  if ((mode == demandEditMode) && !force) {
2249  myViewNet->setStatusBarText(TL("Demand mode already selected"));
2250  if (myViewNet->myCurrentFrame != nullptr) {
2251  myViewNet->myCurrentFrame->focusUpperElement();
2252  }
2253  } else {
2254  myViewNet->setStatusBarText("");
2255  myViewNet->abortOperation(false);
2256  // stop editing of custom shapes
2257  myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2258  // set new Demand mode
2259  demandEditMode = mode;
2260  // for common modes (Inspect/Delete/Select/Move) change also the other supermode
2261  if (demandEditMode == DemandEditMode::DEMAND_INSPECT) {
2262  networkEditMode = NetworkEditMode::NETWORK_INSPECT;
2263  dataEditMode = DataEditMode::DATA_INSPECT;
2264  } else if (demandEditMode == DemandEditMode::DEMAND_DELETE) {
2265  networkEditMode = NetworkEditMode::NETWORK_DELETE;
2266  dataEditMode = DataEditMode::DATA_DELETE;
2267  } else if (demandEditMode == DemandEditMode::DEMAND_SELECT) {
2268  networkEditMode = NetworkEditMode::NETWORK_SELECT;
2269  dataEditMode = DataEditMode::DATA_SELECT;
2270  } else if (demandEditMode == DemandEditMode::DEMAND_MOVE) {
2271  networkEditMode = NetworkEditMode::NETWORK_MOVE;
2272  }
2273  // update cursors
2274  myViewNet->updateCursor();
2275  // update network mode specific controls
2276  myViewNet->updateDemandModeSpecificControls();
2277  }
2278 }
2279 
2280 
2281 void
2283  if ((mode == dataEditMode) && !force) {
2284  myViewNet->setStatusBarText(TL("Data mode already selected"));
2285  if (myViewNet->myCurrentFrame != nullptr) {
2286  myViewNet->myCurrentFrame->focusUpperElement();
2287  }
2288  } else {
2289  myViewNet->setStatusBarText("");
2290  myViewNet->abortOperation(false);
2291  // stop editing of custom shapes
2292  myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
2293  // set new Data mode
2294  dataEditMode = mode;
2295  // for common modes (Inspect/Delete/Select/Move) change also the other supermode
2296  if (dataEditMode == DataEditMode::DATA_INSPECT) {
2297  networkEditMode = NetworkEditMode::NETWORK_INSPECT;
2298  demandEditMode = DemandEditMode::DEMAND_INSPECT;
2299  } else if (dataEditMode == DataEditMode::DATA_DELETE) {
2300  networkEditMode = NetworkEditMode::NETWORK_DELETE;
2301  demandEditMode = DemandEditMode::DEMAND_DELETE;
2302  } else if (dataEditMode == DataEditMode::DATA_SELECT) {
2303  networkEditMode = NetworkEditMode::NETWORK_SELECT;
2304  demandEditMode = DemandEditMode::DEMAND_SELECT;
2305  }
2306  // update all datasets
2307  for (const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
2308  dataSet.second->updateAttributeColors();
2309  }
2310  // update cursors
2311  myViewNet->updateCursor();
2312  // update network mode specific controls
2313  myViewNet->updateDataModeSpecificControls();
2314  }
2315 }
2316 
2317 
2318 bool
2320  return (currentSupermode == Supermode::NETWORK);
2321 }
2322 
2323 
2324 bool
2326  return (currentSupermode == Supermode::DEMAND);
2327 }
2328 
2329 
2330 bool
2332  return (currentSupermode == Supermode::DATA);
2333 }
2334 
2335 
2336 void
2338  // grip supermodes
2339  auto gripSupermodes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes;
2340  // file menu commands
2341  auto& fileMenuCommands = myViewNet->getViewParent()->getGNEAppWindows()->getFileMenuCommands();
2342  // continue depending of selector
2343  if (sel == MID_GNE_VIEW_DEFAULT) {
2344  myNeteditViewsButton->setIcon(GUIIconSubSys::getIcon(GUIIcon::VIEWDEFAULT));
2345  gripSupermodes->setWidth(353);
2346  // show menu commands
2347  fileMenuCommands.setDefaultView();
2348  } else if (sel == MID_GNE_VIEW_JUPEDSIM) {
2349  myNeteditViewsButton->setIcon(GUIIconSubSys::getIcon(GUIIcon::VIEWJUPEDSIM));
2350  gripSupermodes->setWidth(250);
2351  // hide menu commands
2352  fileMenuCommands.setJuPedSimView();
2353  }
2354  // update viewNet
2355  myViewNet->viewUpdated();
2356 }
2357 
2358 
2359 bool
2361  return myNeteditViewsButton->getIcon() == GUIIconSubSys::getIcon(GUIIcon::VIEWDEFAULT);
2362 }
2363 
2364 
2365 bool
2367  return myNeteditViewsButton->getIcon() == GUIIconSubSys::getIcon(GUIIcon::VIEWJUPEDSIM);
2368 }
2369 
2370 // ---------------------------------------------------------------------------
2371 // GNEViewNetHelper::NetworkViewOptions - methods
2372 // ---------------------------------------------------------------------------
2373 
2375  myViewNet(viewNet) {
2376 }
2377 
2378 
2379 void
2381  // get grip modes
2382  auto gripModes = myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes;
2383  // static toolTip menu
2384  auto toolTipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2385  // create menu checks
2386  menuCheckToggleGrid = new MFXCheckableButton(false, gripModes, toolTipMenu,
2387  (std::string("\t") + TL("Show grid") + std::string("\t") + TL("Show grid and restrict movement to the grid - define grid size in visualization options. (Ctrl+G)")),
2390  menuCheckToggleGrid->setChecked(false);
2391  menuCheckToggleGrid->create();
2392 
2393  menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, toolTipMenu,
2394  (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
2397  menuCheckToggleDrawJunctionShape->setChecked(false);
2398  menuCheckToggleDrawJunctionShape->create();
2399 
2400  menuCheckDrawSpreadVehicles = new MFXCheckableButton(false, gripModes, toolTipMenu,
2401  (std::string("\t") + TL("Draw vehicles spread in lane or depart position") + std::string("\t") + TL("Draw vehicles spread in lane or in depart position.")),
2404  menuCheckDrawSpreadVehicles->setChecked(false);
2405  menuCheckDrawSpreadVehicles->create();
2406 
2407  menuCheckShowDemandElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2408  (std::string("\t") + TL("Show demand elements") + std::string("\t") + TL("Toggle show demand elements.")),
2411  menuCheckShowDemandElements->setChecked(false);
2412  menuCheckShowDemandElements->create();
2413 
2414  menuCheckSelectEdges = new MFXCheckableButton(false, gripModes, toolTipMenu,
2415  (std::string("\t") + TL("Clicks target lanes") + std::string("\t") + TL("Toggle whether clicking should inspect/select/delete lanes instead of edges.")),
2418  menuCheckSelectEdges->create();
2419 
2420  menuCheckShowConnections = new MFXCheckableButton(false, gripModes, toolTipMenu,
2421  (std::string("\t") + TL("Show connections over junctions") + std::string("\t") + TL("Toggle show connections over junctions.")),
2424  menuCheckShowConnections->setChecked(myViewNet->getVisualisationSettings().showLane2Lane);
2425  menuCheckShowConnections->create();
2426 
2427  menuCheckHideConnections = new MFXCheckableButton(false, gripModes, toolTipMenu,
2428  (std::string("\t") + TL("Hide connections") + std::string("\t") + TL("Toggle hide connections.")),
2431  menuCheckHideConnections->setChecked(false);
2432  menuCheckHideConnections->create();
2433 
2434  menuCheckShowAdditionalSubElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2435  (std::string("\t") + TL("Show additional sub-elements") + std::string("\t") + TL("Toggle show additional sub-elements.")),
2438  menuCheckShowAdditionalSubElements->setChecked(false);
2439  menuCheckShowAdditionalSubElements->create();
2440 
2441  menuCheckShowTAZElements = new MFXCheckableButton(false, gripModes, toolTipMenu,
2442  (std::string("\t") + TL("Show TAZ elements") + std::string("\t") + TL("Toggle show TAZ elements.")),
2445  menuCheckShowTAZElements->setChecked(false);
2446  menuCheckShowTAZElements->create();
2447 
2448  menuCheckExtendSelection = new MFXCheckableButton(false, gripModes, toolTipMenu,
2449  (std::string("\t") + TL("Automatic select junctions") + std::string("\t") + TL("Toggle whether selecting multiple edges should automatically select their junctions.")),
2452  menuCheckExtendSelection->setChecked(true);
2453  menuCheckExtendSelection->create();
2454 
2455  menuCheckChangeAllPhases = new MFXCheckableButton(false, gripModes, toolTipMenu,
2456  (std::string("\t") + TL("Apply state to all phases") + std::string("\t") + TL("Toggle whether clicking should apply state changes to all phases of the current TLS plan.")),
2459  menuCheckChangeAllPhases->setChecked(false);
2460  menuCheckChangeAllPhases->create();
2461 
2462  menuCheckWarnAboutMerge = new MFXCheckableButton(false, gripModes, toolTipMenu,
2463  (std::string("\t") + TL("Automatic merging junction") + std::string("\t") + TL("Toggle ask for confirmation before merging junction.")),
2466  menuCheckWarnAboutMerge->create();
2467 
2468  menuCheckShowJunctionBubble = new MFXCheckableButton(false, gripModes, toolTipMenu,
2469  (std::string("\t") + TL("Show bubbles") + std::string("\t") + TL("Toggle show bubbles over junctions shapes.")),
2472  menuCheckShowJunctionBubble->setChecked(false);
2473  menuCheckShowJunctionBubble->create();
2474 
2475  menuCheckMoveElevation = new MFXCheckableButton(false, gripModes, toolTipMenu,
2476  (std::string("\t") + TL("Move elevation") + std::string("\t") + TL("Apply mouse movement to elevation instead of x,y position.")),
2479  menuCheckMoveElevation->setChecked(false);
2480  menuCheckMoveElevation->create();
2481 
2482  menuCheckChainEdges = new MFXCheckableButton(false, gripModes, toolTipMenu,
2483  (std::string("\t") + TL("Edge chain mode") + std::string("\t") + TL("Create consecutive edges with a single click (hit ESC to cancel chain).")),
2486  menuCheckChainEdges->setChecked(false);
2487  menuCheckChainEdges->create();
2488 
2489  menuCheckAutoOppositeEdge = new MFXCheckableButton(false, gripModes, toolTipMenu,
2490  (std::string("\t") + TL("Edge opposite direction") + std::string("\t") + TL("Automatically create an edge in the opposite direction.")),
2493  menuCheckAutoOppositeEdge->setChecked(false);
2494  menuCheckAutoOppositeEdge->create();
2495 
2496  // always recalc after creating new elements
2497  gripModes->recalc();
2498 }
2499 
2500 
2501 void
2503  menuCheckToggleGrid->hide();
2504  menuCheckToggleDrawJunctionShape->hide();
2505  menuCheckDrawSpreadVehicles->hide();
2506  menuCheckShowDemandElements->hide();
2507  menuCheckSelectEdges->hide();
2508  menuCheckShowConnections->hide();
2509  menuCheckHideConnections->hide();
2510  menuCheckShowAdditionalSubElements->hide();
2511  menuCheckShowTAZElements->hide();
2512  menuCheckExtendSelection->hide();
2513  menuCheckChangeAllPhases->hide();
2514  menuCheckWarnAboutMerge->hide();
2515  menuCheckShowJunctionBubble->hide();
2516  menuCheckMoveElevation->hide();
2517  menuCheckChainEdges->hide();
2518  menuCheckAutoOppositeEdge->hide();
2519 }
2520 
2521 
2522 void
2523 GNEViewNetHelper::NetworkViewOptions::getVisibleNetworkMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
2524  // save visible menu commands in commands vector
2525  if (menuCheckToggleGrid->shown()) {
2526  commands.push_back(menuCheckToggleGrid);
2527  }
2528  if (menuCheckToggleDrawJunctionShape->shown()) {
2529  commands.push_back(menuCheckToggleDrawJunctionShape);
2530  }
2531  if (menuCheckDrawSpreadVehicles->shown()) {
2532  commands.push_back(menuCheckDrawSpreadVehicles);
2533  }
2534  if (menuCheckShowDemandElements->shown()) {
2535  commands.push_back(menuCheckShowDemandElements);
2536  }
2537  if (menuCheckSelectEdges->shown()) {
2538  commands.push_back(menuCheckSelectEdges);
2539  }
2540  if (menuCheckShowConnections->shown()) {
2541  commands.push_back(menuCheckShowConnections);
2542  }
2543  if (menuCheckHideConnections->shown()) {
2544  commands.push_back(menuCheckHideConnections);
2545  }
2546  if (menuCheckShowAdditionalSubElements->shown()) {
2547  commands.push_back(menuCheckShowAdditionalSubElements);
2548  }
2549  if (menuCheckShowTAZElements->shown()) {
2550  commands.push_back(menuCheckShowTAZElements);
2551  }
2552  if (menuCheckExtendSelection->shown()) {
2553  commands.push_back(menuCheckExtendSelection);
2554  }
2555  if (menuCheckChangeAllPhases->shown()) {
2556  commands.push_back(menuCheckChangeAllPhases);
2557  }
2558  if (menuCheckWarnAboutMerge->shown()) {
2559  commands.push_back(menuCheckWarnAboutMerge);
2560  }
2561  if (menuCheckShowJunctionBubble->shown()) {
2562  commands.push_back(menuCheckShowJunctionBubble);
2563  }
2564  if (menuCheckMoveElevation->shown()) {
2565  commands.push_back(menuCheckMoveElevation);
2566  }
2567  if (menuCheckChainEdges->shown()) {
2568  commands.push_back(menuCheckChainEdges);
2569  }
2570  if (menuCheckAutoOppositeEdge->shown()) {
2571  commands.push_back(menuCheckAutoOppositeEdge);
2572  }
2573 }
2574 
2575 
2576 bool
2578  return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
2579 }
2580 
2581 
2582 bool
2584  if (menuCheckShowDemandElements->shown()) {
2585  return (menuCheckShowDemandElements->amChecked() == TRUE);
2586  } else {
2587  // by default, if menuCheckShowDemandElements isn't shown, always show demand elements
2588  return true;
2589  }
2590 }
2591 
2592 
2593 bool
2595  if (menuCheckSelectEdges->shown()) {
2596  return (menuCheckSelectEdges->amChecked() != TRUE);
2597  } else {
2598  // by default, if menuCheckSelectEdges isn't shown, always select edges
2599  return true;
2600  }
2601 }
2602 
2603 
2604 bool
2606  if (myViewNet->myEditModes.isCurrentSupermodeData()) {
2607  return false;
2608  } else if (myViewNet->myEditModes.networkEditMode == NetworkEditMode::NETWORK_CONNECT) {
2609  // check if menu check hide connections ins shown
2610  return (menuCheckHideConnections->amChecked() == FALSE);
2611  } else if (myViewNet->myEditModes.networkEditMode == NetworkEditMode::NETWORK_PROHIBITION) {
2612  return true;
2613  } else if (myViewNet->myEditModes.isCurrentSupermodeNetwork() && menuCheckShowConnections->shown() == false) {
2614  return false;
2615  } else {
2616  return (myViewNet->getVisualisationSettings().showLane2Lane);
2617  }
2618 }
2619 
2620 
2621 bool
2623  if (!myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
2624  return false;
2625  } else if (menuCheckShowAdditionalSubElements->shown() == false) {
2626  return false;
2627  } else {
2628  return menuCheckShowAdditionalSubElements->amChecked();
2629  }
2630 }
2631 
2632 
2633 bool
2635  if (!myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
2636  return false;
2637  } else if (menuCheckShowTAZElements->shown() == false) {
2638  return false;
2639  } else {
2640  return menuCheckShowTAZElements->amChecked();
2641  }
2642 }
2643 
2644 
2645 bool
2647  if (menuCheckMoveElevation->shown()) {
2648  return (menuCheckMoveElevation->amChecked() == TRUE);
2649  } else {
2650  return false;
2651  }
2652 }
2653 
2654 // ---------------------------------------------------------------------------
2655 // GNEViewNetHelper::DemandViewOptions - methods
2656 // ---------------------------------------------------------------------------
2657 
2659  myViewNet(viewNet) {
2660 }
2661 
2662 
2663 void
2665  // get grip modes
2666  auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
2667  // get tooltip menu
2668  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2669  // create menu checks
2670  menuCheckToggleGrid = new MFXCheckableButton(false, gripModes, tooltipMenu,
2671  (std::string("\t") + TL("Show grid") + std::string("\t") + TL("Show grid and restrict movement to the grid - define grid size in visualization options. (Ctrl+G)")),
2674  menuCheckToggleGrid->setChecked(false);
2675  menuCheckToggleGrid->create();
2676 
2677  menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, tooltipMenu,
2678  (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
2681  menuCheckToggleDrawJunctionShape->setChecked(false);
2682  menuCheckToggleDrawJunctionShape->create();
2683 
2684  menuCheckDrawSpreadVehicles = new MFXCheckableButton(false, gripModes, tooltipMenu,
2685  (std::string("\t") + TL("Draw vehicles spread/depart position") + std::string("\t") + TL("Draw vehicles spread in lane or in depart position.")),
2688  menuCheckDrawSpreadVehicles->setChecked(false);
2689  menuCheckDrawSpreadVehicles->create();
2690 
2691  menuCheckHideShapes = new MFXCheckableButton(false, gripModes, tooltipMenu,
2692  (std::string("\t") + TL("Show shapes") + std::string("\t") + TL("Toggle show shapes (Polygons and POIs).")),
2695  menuCheckHideShapes->setChecked(false);
2696  menuCheckHideShapes->create();
2697 
2698  menuCheckShowAllTrips = new MFXCheckableButton(false, gripModes, tooltipMenu,
2699  (std::string("\t") + TL("Show all trips") + std::string("\t") + TL("Toggle show all trips (requires updated demand - F5).")),
2702  menuCheckShowAllTrips->setChecked(false);
2703  menuCheckShowAllTrips->create();
2704 
2705  menuCheckShowAllPersonPlans = new MFXCheckableButton(false, gripModes, tooltipMenu,
2706  (std::string("\t") + TL("Show all person plans") + std::string("\t") + TL("Toggle show all person plans.")),
2709  menuCheckShowAllPersonPlans->setChecked(false);
2710  menuCheckShowAllPersonPlans->create();
2711 
2712  menuCheckLockPerson = new MFXCheckableButton(false, gripModes, tooltipMenu,
2713  (std::string("\t") + TL("Lock selected person") + std::string("\t") + TL("Toggle lock selected person.")),
2716  menuCheckLockPerson->setChecked(false);
2717  menuCheckLockPerson->create();
2718 
2719  menuCheckShowAllContainerPlans = new MFXCheckableButton(false, gripModes, tooltipMenu,
2720  (std::string("\t") + TL("Show all containers plans") + std::string("\t") + TL("Toggle show all container plans.")),
2723  menuCheckShowAllContainerPlans->setChecked(false);
2724  menuCheckShowAllContainerPlans->create();
2725 
2726  menuCheckLockContainer = new MFXCheckableButton(false, gripModes, tooltipMenu,
2727  (std::string("\t") + TL("Lock selected container") + std::string("\t") + TL("Toggle lock selected container.")),
2730  menuCheckLockContainer->setChecked(false);
2731  menuCheckLockContainer->create();
2732 
2733  menuCheckHideNonInspectedDemandElements = new MFXCheckableButton(false, gripModes, tooltipMenu,
2734  (std::string("\t") + TL("Show non-inspected demand elements") + std::string("\t") + TL("Toggle show non-inspected demand elements.")),
2737  menuCheckHideNonInspectedDemandElements->setChecked(false);
2738  menuCheckHideNonInspectedDemandElements->create();
2739 
2740  menuCheckShowOverlappedRoutes = new MFXCheckableButton(false, gripModes, tooltipMenu,
2741  (std::string("\t") + TL("Show number of overlapped routes") + std::string("\t") + TL("Toggle show number of overlapped routes.")),
2744  menuCheckShowOverlappedRoutes->setChecked(false);
2745  menuCheckShowOverlappedRoutes->create();
2746 
2747  // always recalc after creating new elements
2748  gripModes->recalc();
2749 }
2750 
2751 
2752 void
2754  menuCheckToggleGrid->hide();
2755  menuCheckToggleDrawJunctionShape->hide();
2756  menuCheckDrawSpreadVehicles->hide();
2757  menuCheckHideShapes->hide();
2758  menuCheckShowAllTrips->hide();
2759  menuCheckShowAllPersonPlans->hide();
2760  menuCheckLockPerson->hide();
2761  menuCheckShowAllContainerPlans->hide();
2762  menuCheckLockContainer->hide();
2763  menuCheckHideNonInspectedDemandElements->hide();
2764  menuCheckShowOverlappedRoutes->hide();
2765 }
2766 
2767 
2768 void
2769 GNEViewNetHelper::DemandViewOptions::getVisibleDemandMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
2770  // save visible menu commands in commands vector
2771  if (menuCheckToggleGrid->shown()) {
2772  commands.push_back(menuCheckToggleGrid);
2773  }
2774  if (menuCheckToggleDrawJunctionShape->shown()) {
2775  commands.push_back(menuCheckToggleDrawJunctionShape);
2776  }
2777  if (menuCheckDrawSpreadVehicles->shown()) {
2778  commands.push_back(menuCheckDrawSpreadVehicles);
2779  }
2780  if (menuCheckHideShapes->shown()) {
2781  commands.push_back(menuCheckHideShapes);
2782  }
2783  if (menuCheckShowAllTrips->shown()) {
2784  commands.push_back(menuCheckShowAllTrips);
2785  }
2786  if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
2787  commands.push_back(menuCheckShowAllPersonPlans);
2788  }
2789  if (menuCheckLockPerson->shown() && menuCheckLockPerson->isEnabled()) {
2790  commands.push_back(menuCheckLockPerson);
2791  }
2792  if (menuCheckShowAllContainerPlans->shown() && menuCheckShowAllContainerPlans->isEnabled()) {
2793  commands.push_back(menuCheckShowAllContainerPlans);
2794  }
2795  if (menuCheckLockContainer->shown() && menuCheckLockContainer->isEnabled()) {
2796  commands.push_back(menuCheckLockContainer);
2797  }
2798  if (menuCheckHideNonInspectedDemandElements->shown()) {
2799  commands.push_back(menuCheckHideNonInspectedDemandElements);
2800  }
2801  if (menuCheckShowOverlappedRoutes->shown()) {
2802  commands.push_back(menuCheckShowOverlappedRoutes);
2803  }
2804 }
2805 
2806 
2807 bool
2809  return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
2810 }
2811 
2812 
2813 bool
2815  if (menuCheckHideNonInspectedDemandElements->shown()) {
2816  // check conditions
2817  if ((menuCheckHideNonInspectedDemandElements->amChecked() == FALSE) || (myViewNet->getInspectedAttributeCarriers().empty())) {
2818  // if checkbox is disabled or there isn't insepected element, then return true
2819  return true;
2820  } else if (myViewNet->getInspectedAttributeCarriers().front()->getTagProperty().isDemandElement()) {
2821  if (myViewNet->isAttributeCarrierInspected(demandElement)) {
2822  // if inspected element correspond to demandElement, return true
2823  return true;
2824  } else {
2825  // if demandElement is a route, check if dottedAC is one of their children (Vehicle or Stop)
2826  for (const auto& i : demandElement->getChildDemandElements()) {
2827  if (myViewNet->isAttributeCarrierInspected(i)) {
2828  return true;
2829  }
2830  }
2831  // if demandElement is a vehicle, check if dottedAC is one of his route Parent
2832  for (const auto& i : demandElement->getParentDemandElements()) {
2833  if (myViewNet->isAttributeCarrierInspected(i)) {
2834  return true;
2835  }
2836  }
2837  // dottedAC isn't one of their parent, then return false
2838  return false;
2839  }
2840  } else {
2841  // we're inspecting a demand element, then return true
2842  return true;
2843  }
2844  } else {
2845  // we're inspecting a demand element, then return true
2846  return true;
2847  }
2848 }
2849 
2850 
2851 bool
2853  if (menuCheckHideShapes->shown()) {
2854  return (menuCheckHideShapes->amChecked() == FALSE);
2855  } else {
2856  return true;
2857  }
2858 }
2859 
2860 
2861 bool
2863  return (menuCheckShowAllTrips->amChecked() == TRUE);
2864 }
2865 
2866 
2867 bool
2869  if (menuCheckShowAllPersonPlans->isEnabled()) {
2870  return (menuCheckShowAllPersonPlans->amChecked() == TRUE);
2871  } else {
2872  return false;
2873  }
2874 }
2875 
2876 
2877 void
2879  myLockedPerson = person;
2880 }
2881 
2882 
2883 void
2885  myLockedPerson = nullptr;
2886 }
2887 
2888 
2889 const GNEDemandElement*
2891  return myLockedPerson;
2892 }
2893 
2894 
2895 bool
2897  if (menuCheckShowAllContainerPlans->isEnabled()) {
2898  return (menuCheckShowAllContainerPlans->amChecked() == TRUE);
2899  } else {
2900  return false;
2901  }
2902 }
2903 
2904 
2905 void
2907  myLockedContainer = container;
2908 }
2909 
2910 
2911 void
2913  myLockedContainer = nullptr;
2914 }
2915 
2916 
2917 bool
2919  if (menuCheckShowOverlappedRoutes->isEnabled()) {
2920  return (menuCheckShowOverlappedRoutes->amChecked() == TRUE);
2921  } else {
2922  return false;
2923  }
2924 }
2925 
2926 
2927 const GNEDemandElement*
2929  return myLockedContainer;
2930 }
2931 
2932 // ---------------------------------------------------------------------------
2933 // GNEViewNetHelper::DataViewOptions - methods
2934 // ---------------------------------------------------------------------------
2935 
2937  myViewNet(viewNet) {
2938 }
2939 
2940 
2941 void
2943  // get grip modes
2944  auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
2945  // get tooltip menu
2946  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
2947  // create menu checks
2948  menuCheckToggleDrawJunctionShape = new MFXCheckableButton(false, gripModes, tooltipMenu,
2949  (std::string("\t") + TL("Hide junction shape") + std::string("\t") + TL("Toggle hiding junction shape. (Ctrl+J)")),
2952  menuCheckToggleDrawJunctionShape->setChecked(false);
2953  menuCheckToggleDrawJunctionShape->create();
2954 
2955  menuCheckShowAdditionals = new MFXCheckableButton(false, gripModes, tooltipMenu,
2956  (std::string("\t") + TL("Show additionals") + std::string("\t") + TL("Toggle show additionals.")),
2959  menuCheckShowAdditionals->create();
2960 
2961  menuCheckShowShapes = new MFXCheckableButton(false, gripModes, tooltipMenu,
2962  (std::string("\t") + TL("Show shapes") + std::string("\t") + TL("Toggle show shapes (Polygons and POIs).")),
2965  menuCheckShowShapes->create();
2966 
2967  menuCheckShowDemandElements = new MFXCheckableButton(false, gripModes, tooltipMenu,
2968  (std::string("\t") + TL("Show demand elements") + std::string("\t") + TL("Toggle show demand elements.")),
2971  menuCheckShowDemandElements->create();
2972 
2973  menuCheckToggleTAZRelDrawing = new MFXCheckableButton(false, gripModes, tooltipMenu,
2974  (std::string("\t") + TL("Draw TAZREL drawing mode") + std::string("\t") + TL("Toggle draw TAZREL drawing mode.")),
2977  menuCheckToggleTAZRelDrawing->create();
2978 
2979  menuCheckToggleTAZDrawFill = new MFXCheckableButton(false, gripModes, tooltipMenu,
2980  (std::string("\t") + TL("Toggle draw TAZ fill") + std::string("\t") + TL("Toggle draw TAZ fill")),
2983  menuCheckToggleTAZDrawFill->create();
2984 
2985  menuCheckToggleTAZRelOnlyFrom = new MFXCheckableButton(false, gripModes, tooltipMenu,
2986  (std::string("\t") + TL("Toggle draw TAZRel only from") + std::string("\t") + TL("Toggle draw TAZRel only from")),
2989  menuCheckToggleTAZRelOnlyFrom->create();
2990 
2991  menuCheckToggleTAZRelOnlyTo = new MFXCheckableButton(false, gripModes, tooltipMenu,
2992  (std::string("\t") + TL("Toggle draw TAZRel only to") + std::string("\t") + TL("Toggle draw TAZRel only to")),
2995  menuCheckToggleTAZRelOnlyTo->create();
2996 
2997  // always recalc after creating new elements
2998  gripModes->recalc();
2999 }
3000 
3001 
3002 void
3004  menuCheckToggleDrawJunctionShape->hide();
3005  menuCheckShowAdditionals->hide();
3006  menuCheckShowShapes->hide();
3007  menuCheckShowDemandElements->hide();
3008  menuCheckToggleTAZRelDrawing->hide();
3009  menuCheckToggleTAZDrawFill->hide();
3010  menuCheckToggleTAZRelOnlyFrom->hide();
3011  menuCheckToggleTAZRelOnlyTo->hide();
3012 }
3013 
3014 
3015 void
3016 GNEViewNetHelper::DataViewOptions::getVisibleDataMenuCommands(std::vector<MFXCheckableButton*>& commands) const {
3017  // save visible menu commands in commands vector
3018  if (menuCheckToggleDrawJunctionShape->shown()) {
3019  commands.push_back(menuCheckToggleDrawJunctionShape);
3020  }
3021  if (menuCheckShowAdditionals->shown()) {
3022  commands.push_back(menuCheckShowAdditionals);
3023  }
3024  if (menuCheckShowShapes->shown()) {
3025  commands.push_back(menuCheckShowShapes);
3026  }
3027  if (menuCheckShowDemandElements->shown()) {
3028  commands.push_back(menuCheckShowDemandElements);
3029  }
3030  if (menuCheckToggleTAZRelDrawing->shown()) {
3031  commands.push_back(menuCheckToggleTAZRelDrawing);
3032  }
3033  if (menuCheckToggleTAZDrawFill->shown()) {
3034  commands.push_back(menuCheckToggleTAZDrawFill);
3035  }
3036  if (menuCheckToggleTAZRelOnlyFrom->shown()) {
3037  commands.push_back(menuCheckToggleTAZRelOnlyFrom);
3038  }
3039  if (menuCheckToggleTAZRelOnlyTo->shown()) {
3040  commands.push_back(menuCheckToggleTAZRelOnlyTo);
3041  }
3042 }
3043 
3044 
3045 bool
3047  if (menuCheckShowAdditionals->shown()) {
3048  return (menuCheckShowAdditionals->amChecked() == TRUE);
3049  } else {
3050  return true;
3051  }
3052 }
3053 
3054 
3055 bool
3057  if (menuCheckShowShapes->shown()) {
3058  return (menuCheckShowShapes->amChecked() == TRUE);
3059  } else {
3060  return true;
3061  }
3062 }
3063 
3064 
3065 bool
3067  if (menuCheckShowDemandElements->shown()) {
3068  return (menuCheckShowDemandElements->amChecked() == TRUE);
3069  } else {
3070  return true;
3071  }
3072 }
3073 
3074 
3075 bool
3077  return (menuCheckToggleTAZRelDrawing->amChecked() != TRUE);
3078 }
3079 
3080 
3081 bool
3083  if (menuCheckToggleTAZDrawFill->shown()) {
3084  return (menuCheckToggleTAZDrawFill->amChecked() != TRUE);
3085  } else {
3086  return false;
3087  }
3088 }
3089 
3090 
3091 bool
3093  if (menuCheckToggleTAZRelOnlyFrom->shown()) {
3094  return (menuCheckToggleTAZRelOnlyFrom->amChecked() != TRUE);
3095  } else {
3096  return false;
3097  }
3098 }
3099 
3100 
3101 bool
3103  if (menuCheckToggleTAZRelOnlyTo->shown()) {
3104  return (menuCheckToggleTAZRelOnlyTo->amChecked() != TRUE);
3105  } else {
3106  return false;
3107  }
3108 }
3109 
3110 // ---------------------------------------------------------------------------
3111 // GNEViewNetHelper::IntervalBar - methods
3112 // ---------------------------------------------------------------------------
3113 
3115  myViewNet(viewNet) {
3116 }
3117 
3118 
3119 void
3121  // create interval label
3122  FXLabel* genericDataLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3123  "Data type", 0, GUIDesignLabelThickedFixed(100));
3124  genericDataLabel->create();
3125  // create combo box for generic datas
3126  myGenericDataTypesComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3129  myGenericDataTypesComboBox->create();
3130  // fill combo box
3131  myGenericDataTypesComboBox->appendIconItem("<all>");
3132  myGenericDataTypesComboBox->appendIconItem(toString(GNE_TAG_EDGEREL_SINGLE).c_str());
3133  myGenericDataTypesComboBox->appendIconItem(toString(SUMO_TAG_EDGEREL).c_str());
3134  myGenericDataTypesComboBox->appendIconItem(toString(SUMO_TAG_TAZREL).c_str());
3135  // create dataSet label
3136  FXLabel* dataSetLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3137  "Data sets", 0, GUIDesignLabelThickedFixed(100));
3138  dataSetLabel->create();
3139  // create combo box for sets
3140  myDataSetsComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3143  myDataSetsComboBox->create();
3144  // create checkbutton for myLimitByInterval
3145  myIntervalCheckBox = new FXCheckButton(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3147  myIntervalCheckBox->create();
3148  // create textfield for begin
3149  myBeginTextField = new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3151  myBeginTextField->create();
3152  // create text field for end
3153  myEndTextField = new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3155  myEndTextField->create();
3156  // create parameter label
3157  FXLabel* parameterLabel = new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3158  "Parameter", 0, GUIDesignLabelThickedFixed(100));
3159  parameterLabel->create();
3160  // create combo box for attributes
3161  myParametersComboBox = new MFXComboBoxIcon(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
3164  myParametersComboBox->create();
3165  // always recalc after creating new elements
3166  myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->recalc();
3167 }
3168 
3169 
3170 void
3172  // first update interval bar
3173  updateIntervalBar();
3174  // show toolbar grip
3175  myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->show();
3176 }
3177 
3178 
3179 void
3181  // hide toolbar grip
3182  myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->hide();
3183 }
3184 
3185 
3186 void
3188  // check if intervalBar has to be updated
3189  if (myUpdateInterval && myViewNet->getNet()) {
3190  // clear data sets
3191  myDataSets.clear();
3192  // declare intervals
3193  double begin = INVALID_DOUBLE;
3194  double end = INVALID_DOUBLE;
3195  // clear parameters
3196  myParameters.clear();
3197  // iterate over all data elements
3198  for (const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
3199  // add data set ID
3200  myDataSets.push_back(dataSet.second->getID());
3201  // iterate over all intervals
3202  for (const auto& interval : dataSet.second->getDataIntervalChildren()) {
3203  // set intervals
3204  if ((begin == INVALID_DOUBLE) || (interval.first < begin)) {
3205  begin = interval.first;
3206  }
3207  if ((end == INVALID_DOUBLE) || (interval.first > end)) {
3208  end = interval.first;
3209  }
3210  // iterate over all generic datas
3211  for (const auto& genericData : interval.second->getGenericDataChildren()) {
3212  // iterate over parameters
3213  for (const auto& parameter : genericData->getParametersMap()) {
3214  myParameters.insert(parameter.first);
3215  }
3216  }
3217  }
3218  }
3219  // get previous dataSet
3220  const std::string previousDataSet = myDataSetsComboBox->getText().text();
3221  // get previous interval
3222  const std::string previousBegin = (myIntervalCheckBox->getCheck() == TRUE) ? myBeginTextField->getText().text() : "";
3223  const std::string previousEnd = (myIntervalCheckBox->getCheck() == TRUE) ? myEndTextField->getText().text() : "";
3224  // get previous parameter
3225  const std::string previousParameter = myParametersComboBox->getText().text();
3226  // clear comboBoxes
3227  myDataSetsComboBox->clearItems();
3228  myParametersComboBox->clearItems();
3229  // add first item (all)
3230  myDataSetsComboBox->appendIconItem("<all>");
3231  myParametersComboBox->appendIconItem("<all>");
3232  // fill dataSet comboBox
3233  for (const auto& dataSet : myDataSets) {
3234  myDataSetsComboBox->appendIconItem(dataSet.c_str());
3235  }
3236  // set begin/end
3237  myBeginTextField->setText(toString(begin).c_str());
3238  myEndTextField->setText(toString(end).c_str());
3239  // fill parameter comboBox
3240  for (const auto& parameter : myParameters) {
3241  myParametersComboBox->appendIconItem(parameter.c_str());
3242  }
3243  // check previous dataSet
3244  myDataSetsComboBox->setCurrentItem(0, FALSE);
3245  for (int i = 0; i < myDataSetsComboBox->getNumItems(); i++) {
3246  if (myDataSetsComboBox->getItemText(i) == previousDataSet) {
3247  myDataSetsComboBox->setCurrentItem(i);
3248  }
3249  }
3250  // set previous interval
3251  if (myIntervalCheckBox->getCheck() == TRUE) {
3252  myBeginTextField->setText(previousBegin.c_str());
3253  myEndTextField->setText(previousEnd.c_str());
3254  }
3255  // check previous parameter
3256  myParametersComboBox->setCurrentItem(0, FALSE);
3257  for (int i = 0; i < myParametersComboBox->getNumItems(); i++) {
3258  if (myParametersComboBox->getItemText(i) == previousParameter) {
3259  myParametersComboBox->setCurrentItem(i);
3260  }
3261  }
3262  // check if enable or disable
3263  if ((myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_INSPECT) ||
3264  (myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_SELECT) ||
3265  (myViewNet->getEditModes().dataEditMode == DataEditMode::DATA_DELETE)) {
3266  enableIntervalBar();
3267  } else {
3268  disableIntervalBar();
3269  }
3270  // intervalBar updated, then change flag
3271  myUpdateInterval = false;
3272  }
3273 }
3274 
3275 
3276 void
3278  myUpdateInterval = true;
3279 }
3280 
3281 
3282 SumoXMLTag
3284  if (myGenericDataTypesComboBox->isEnabled() && (myGenericDataTypesComboBox->getTextColor() == FXRGB(0, 0, 0))) {
3285  if (myGenericDataTypesComboBox->getText() == toString(GNE_TAG_EDGEREL_SINGLE).c_str()) {
3286  return GNE_TAG_EDGEREL_SINGLE;
3287  } else if (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_EDGEREL).c_str()) {
3288  return SUMO_TAG_EDGEREL;
3289  } else if (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_TAZREL).c_str()) {
3290  return SUMO_TAG_TAZREL;
3291  }
3292  }
3293  return SUMO_TAG_NOTHING;
3294 }
3295 
3296 
3297 GNEDataSet*
3299  if (!myDataSetsComboBox->isEnabled() ||
3300  (myDataSetsComboBox->getCurrentItem() == 0) ||
3301  (myDataSetsComboBox->getTextColor() == FXRGB(255, 0, 0))) {
3302  return nullptr;
3303  } else {
3304  return myViewNet->getNet()->getAttributeCarriers()->retrieveDataSet(myDataSetsComboBox->getText().text());
3305  }
3306 }
3307 
3308 
3309 double
3311  if (!myIntervalCheckBox->isEnabled() || (myIntervalCheckBox->getCheck() == FALSE)) {
3312  return INVALID_DOUBLE;
3313  } else {
3314  return GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
3315  }
3316 }
3317 
3318 
3319 double
3321  if (!myIntervalCheckBox->isEnabled() || (myIntervalCheckBox->getCheck() == FALSE)) {
3322  return INVALID_DOUBLE;
3323  } else {
3324  return GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
3325  }
3326 }
3327 
3328 
3329 std::string
3331  if (!myParametersComboBox->isEnabled() ||
3332  (myParametersComboBox->getCurrentItem() == 0) ||
3333  (myParametersComboBox->getTextColor() == FXRGB(255, 0, 0))) {
3334  return "";
3335  } else {
3336  return myParametersComboBox->getText().text();
3337  }
3338 }
3339 
3340 
3341 void
3343  if ((myGenericDataTypesComboBox->getText() == "<all>") ||
3344  (myGenericDataTypesComboBox->getText() == toString(GNE_TAG_EDGEREL_SINGLE).c_str()) ||
3345  (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_EDGEREL).c_str()) ||
3346  (myGenericDataTypesComboBox->getText() == toString(SUMO_TAG_TAZREL).c_str())) {
3347  myGenericDataTypesComboBox->setTextColor(FXRGB(0, 0, 0));
3348  } else {
3349  myGenericDataTypesComboBox->setTextColor(FXRGB(255, 0, 0));
3350  }
3351  // update view net
3352  myViewNet->updateViewNet();
3353 }
3354 
3355 
3356 void
3358  // check if exist
3359  if (std::find(myDataSets.begin(), myDataSets.end(), myDataSetsComboBox->getText().text()) != myDataSets.end()) {
3360  myDataSetsComboBox->setTextColor(FXRGB(0, 0, 0));
3361  } else {
3362  myDataSetsComboBox->setTextColor(FXRGB(255, 0, 0));
3363  }
3364  // update view net
3365  myViewNet->updateViewNet();
3366 }
3367 
3368 
3369 void
3371  // enable or disable text fields
3372  if (myIntervalCheckBox->isEnabled() && (myIntervalCheckBox->getCheck() == TRUE)) {
3373  myBeginTextField->enable();
3374  myEndTextField->enable();
3375  } else {
3376  myBeginTextField->disable();
3377  myEndTextField->disable();
3378  }
3379  // update view net
3380  myViewNet->updateViewNet();
3381 }
3382 
3383 
3384 void
3386  if (myBeginTextField->getText().empty()) {
3387  myBeginTextField->setText(toString(myViewNet->getNet()->getDataSetIntervalMinimumBegin()).c_str());
3388  myBeginTextField->setTextColor(FXRGB(0, 0, 0));
3389  } else if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
3390  myBeginTextField->setTextColor(FXRGB(0, 0, 0));
3391  } else {
3392  myBeginTextField->setTextColor(FXRGB(255, 0, 0));
3393  }
3394  // update view net
3395  myViewNet->updateViewNet();
3396 }
3397 
3398 
3399 void
3401  if (myEndTextField->getText().empty()) {
3402  myEndTextField->setText(toString(myViewNet->getNet()->getDataSetIntervalMaximumEnd()).c_str());
3403  myEndTextField->setTextColor(FXRGB(0, 0, 0));
3404  } else if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
3405  myEndTextField->setTextColor(FXRGB(0, 0, 0));
3406  } else {
3407  myEndTextField->setTextColor(FXRGB(255, 0, 0));
3408  }
3409  // update view net
3410  myViewNet->updateViewNet();
3411 }
3412 
3413 
3414 void
3416  // check if exist
3417  if (myParameters.count(myParametersComboBox->getText().text()) > 0) {
3418  myParametersComboBox->setTextColor(FXRGB(0, 0, 0));
3419  } else {
3420  myParametersComboBox->setTextColor(FXRGB(255, 0, 0));
3421  }
3422  // update view net
3423  myViewNet->updateViewNet();
3424 }
3425 
3426 
3427 
3428 void
3430  // enable elements
3431  myGenericDataTypesComboBox->enable();
3432  myDataSetsComboBox->enable();
3433  myIntervalCheckBox->enable();
3434  if (myIntervalCheckBox->getCheck() == TRUE) {
3435  myBeginTextField->enable();
3436  myEndTextField->enable();
3437  } else {
3438  myBeginTextField->disable();
3439  myEndTextField->disable();
3440  }
3441  myParametersComboBox->enable();
3442 }
3443 
3444 
3445 void
3447  // disable all elements
3448  myGenericDataTypesComboBox->disable();
3449  myDataSetsComboBox->disable();
3450  myIntervalCheckBox->disable();
3451  myBeginTextField->disable();
3452  myEndTextField->disable();
3453  myParametersComboBox->disable();
3454 }
3455 
3456 // ---------------------------------------------------------------------------
3457 // GNEViewNetHelper::CommonCheckableButtons - methods
3458 // ---------------------------------------------------------------------------
3459 
3461  myViewNet(viewNet) {
3462 }
3463 
3464 
3465 void
3467  // get grip modes
3468  auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3469  // get tooltip menu
3470  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3471  // inspect button
3472  inspectButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3473  std::string("\t") + TL("Inspect mode") + std::string("\t") + TL("Mode for inspect elements and change their attributes. (I)"),
3475  inspectButton->create();
3476  // delete button
3477  deleteButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3478  std::string("\t") + TL("Delete mode") + std::string("\t") + TL("Mode for deleting elements. (D)"),
3480  deleteButton->create();
3481  // select button
3482  selectButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3483  std::string("\t") + TL("Select mode") + std::string("\t") + TL("Mode for selecting elements. (S)"),
3485  selectButton->create();
3486  // always recalc menu bar after creating new elements
3487  gripModes->recalc();
3488 }
3489 
3490 
3491 void
3493  inspectButton->show();
3494  deleteButton->show();
3495  selectButton->show();
3496 }
3497 
3498 
3499 void
3501  inspectButton->hide();
3502  deleteButton->hide();
3503  selectButton->hide();
3504 }
3505 
3506 
3507 void
3509  inspectButton->setChecked(false);
3510  deleteButton->setChecked(false);
3511  selectButton->setChecked(false);
3512 }
3513 
3514 
3515 void
3517  inspectButton->update();
3518  deleteButton->update();
3519  selectButton->update();
3520 }
3521 
3522 // ---------------------------------------------------------------------------
3523 // GNEViewNetHelper::NetworkCheckableButtons - methods
3524 // ---------------------------------------------------------------------------
3525 
3527  myViewNet(viewNet) {
3528 }
3529 
3530 
3531 void
3533  // get grip modes
3534  auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3535  // get tooltip menu
3536  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3537  // move button
3538  moveNetworkElementsButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3539  std::string("\t") + TL("Move mode") + std::string("\t") + TL("Mode for moving elements. (M)"),
3541  moveNetworkElementsButton->create();
3542  // create edge
3543  createEdgeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3544  std::string("\t") + TL("Edge mode") + std::string("\t") + TL("Mode for creating junctions and edges. (E)"),
3546  createEdgeButton->create();
3547  // traffic light mode
3548  trafficLightButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3549  std::string("\t") + TL("Traffic light mode") + std::string("\t") + TL("Mode for editing traffic lights over junctions. (T)"),
3551  trafficLightButton->create();
3552  // connection mode
3553  connectionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3554  std::string("\t") + TL("Connection mode") + std::string("\t") + TL("Mode for edit connections between lanes. (C)"),
3556  connectionButton->create();
3557  // prohibition mode
3558  prohibitionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3559  std::string("\t") + TL("Prohibition mode") + std::string("\t") + TL("Mode for editing connection prohibitions. (H)"),
3561  prohibitionButton->create();
3562  // crossing mode
3563  crossingButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3564  std::string("\t") + TL("Crossing mode") + std::string("\t") + TL("Mode for creating crossings between edges. (R)"),
3566  crossingButton->create();
3567  // additional mode
3568  additionalButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3569  std::string("\t") + TL("Additional mode") + std::string("\t") + TL("Mode for creating additional elements. (A)"),
3571  additionalButton->create();
3572  // wire mode
3573  wireButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3574  std::string("\t") + TL("Wire mode") + std::string("\t") + TL("Mode for editing overhead wires. (W)"),
3576  wireButton->create();
3577  // TAZ Mode
3578  TAZButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3579  std::string("\t") + TL("TAZ mode") + std::string("\t") + TL("Mode for creating Traffic Assignment Zones. (Z)"),
3581  TAZButton->create();
3582  // shape mode
3583  shapeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3584  std::string("\t") + TL("Polygon mode") + std::string("\t") + TL("Mode for creating polygons and POIs. (P)"),
3586  shapeButton->create();
3587  // decal mode
3588  decalButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3589  std::string("\t") + TL("Decal mode") + std::string("\t") + TL("Mode for editing decals. (U)"),
3591  decalButton->create();
3592  // always recalc after creating new elements
3593  gripModes->recalc();
3594 }
3595 
3596 
3597 void
3599  // continue depending of view
3600  if (myViewNet->getEditModes().isJuPedSimView()) {
3601  moveNetworkElementsButton->show();
3602  createEdgeButton->show();
3603  connectionButton->hide();
3604  trafficLightButton->hide();
3605  additionalButton->show();
3606  crossingButton->show();
3607  TAZButton->show();
3608  shapeButton->show();
3609  prohibitionButton->hide();
3610  wireButton->hide();
3611  decalButton->hide();
3612  } else {
3613  moveNetworkElementsButton->show();
3614  createEdgeButton->show();
3615  connectionButton->show();
3616  trafficLightButton->show();
3617  additionalButton->show();
3618  crossingButton->show();
3619  TAZButton->show();
3620  shapeButton->show();
3621  prohibitionButton->show();
3622  wireButton->show();
3623  decalButton->show();
3624  }
3625 }
3626 
3627 
3628 void
3630  moveNetworkElementsButton->hide();
3631  createEdgeButton->hide();
3632  connectionButton->hide();
3633  trafficLightButton->hide();
3634  additionalButton->hide();
3635  crossingButton->hide();
3636  TAZButton->hide();
3637  shapeButton->hide();
3638  prohibitionButton->hide();
3639  wireButton->hide();
3640  decalButton->hide();
3641 }
3642 
3643 
3644 void
3646  moveNetworkElementsButton->setChecked(false);
3647  createEdgeButton->setChecked(false);
3648  connectionButton->setChecked(false);
3649  trafficLightButton->setChecked(false);
3650  additionalButton->setChecked(false);
3651  crossingButton->setChecked(false);
3652  TAZButton->setChecked(false);
3653  shapeButton->setChecked(false);
3654  prohibitionButton->setChecked(false);
3655  wireButton->setChecked(false);
3656  decalButton->setChecked(false);
3657 }
3658 
3659 
3660 void
3662  moveNetworkElementsButton->update();
3663  createEdgeButton->update();
3664  connectionButton->update();
3665  trafficLightButton->update();
3666  additionalButton->update();
3667  crossingButton->update();
3668  TAZButton->update();
3669  shapeButton->update();
3670  prohibitionButton->update();
3671  wireButton->update();
3672  decalButton->update();
3673 }
3674 
3675 // ---------------------------------------------------------------------------
3676 // GNEViewNetHelper::DemandCheckableButtons - methods
3677 // ---------------------------------------------------------------------------
3678 
3680  myViewNet(viewNet) {
3681 }
3682 
3683 
3684 void
3686  // get grip modes
3687  auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3688  // get tooltip menu
3689  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3690  // move button
3691  moveDemandElementsButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3692  std::string("\t") + TL("Move mode") + std::string("\t") + TL("Mode for moving elements. (M)"),
3694  moveDemandElementsButton->create();
3695  // route mode
3696  routeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3697  std::string("\t") + TL("Route mode") + std::string("\t") + TL("Mode for creating routes. (R)"),
3699  routeButton->create();
3700  // rout distribution mode
3701  routeDistributionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3702  std::string("\t") + TL("Route distribution mode") + std::string("\t") + TL("Mode for creating and editing rout distributions. (W)"),
3704  routeDistributionButton->create();
3705  // vehicle mode
3706  vehicleButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3707  std::string("\t") + TL("Vehicle mode") + std::string("\t") + TL("Mode for creating vehicles. (V)"),
3709  vehicleButton->create();
3710  // type mode
3711  typeButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3712  std::string("\t") + TL("Type mode") + std::string("\t") + TL("Mode for creating types (of vehicles, persons and containers). (T)"),
3714  typeButton->create();
3715  // type distribution mode
3716  typeDistributionButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3717  std::string("\t") + TL("Type distribution mode") + std::string("\t") + TL("Mode for creating and editing type distribution. (U)"),
3719  typeDistributionButton->create();
3720  // stop mode
3721  stopButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3722  std::string("\t") + TL("Stop mode") + std::string("\t") + TL("Mode for creating stops. (A)"),
3724  stopButton->create();
3725  // person mode
3726  personButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3727  std::string("\t") + TL("Person mode") + std::string("\t") + TL("Mode for creating persons. (P)"),
3729  personButton->create();
3730  // person plan mode
3731  personPlanButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3732  std::string("\t") + TL("Person plan mode") + std::string("\t") + TL("Mode for creating person plans. (L)"),
3734  personPlanButton->create();
3735  // container mode
3736  containerButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3737  std::string("\t") + TL("Container mode") + std::string("\t") + TL("Mode for creating containers. (C)"),
3739  containerButton->create();
3740  // container plan mode
3741  containerPlanButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3742  std::string("\t") + TL("Container plan mode") + std::string("\t") + TL("Mode for creating container plans. (H)"),
3744  containerPlanButton->create();
3745  // always recalc after creating new elements
3746  gripModes->recalc();
3747 }
3748 
3749 
3750 void
3752  if (myViewNet->getEditModes().isJuPedSimView()) {
3753  moveDemandElementsButton->hide();
3754  routeButton->show();
3755  routeDistributionButton->show();
3756  vehicleButton->hide();
3757  typeButton->show();
3758  typeDistributionButton->show();
3759  stopButton->hide();
3760  personButton->show();
3761  personPlanButton->show();
3762  containerButton->hide();
3763  containerPlanButton->hide();
3764  } else {
3765  moveDemandElementsButton->show();
3766  routeButton->show();
3767  routeDistributionButton->show();
3768  vehicleButton->show();
3769  typeButton->show();
3770  typeDistributionButton->show();
3771  stopButton->show();
3772  personButton->show();
3773  personPlanButton->show();
3774  containerButton->show();
3775  containerPlanButton->show();
3776  }
3777 }
3778 
3779 
3780 void
3782  moveDemandElementsButton->hide();
3783  routeButton->hide();
3784  routeDistributionButton->hide();
3785  vehicleButton->hide();
3786  typeButton->hide();
3787  typeDistributionButton->hide();
3788  stopButton->hide();
3789  personButton->hide();
3790  personPlanButton->hide();
3791  containerButton->hide();
3792  containerPlanButton->hide();
3793 }
3794 
3795 
3796 void
3798  moveDemandElementsButton->setChecked(false);
3799  routeButton->setChecked(false);
3800  routeDistributionButton->setChecked(false);
3801  vehicleButton->setChecked(false);
3802  typeButton->setChecked(false);
3803  typeDistributionButton->setChecked(false);
3804  stopButton->setChecked(false);
3805  personButton->setChecked(false);
3806  personPlanButton->setChecked(false);
3807  containerButton->setChecked(false);
3808  containerPlanButton->setChecked(false);
3809 }
3810 
3811 
3812 void
3814  moveDemandElementsButton->update();
3815  routeButton->update();
3816  routeDistributionButton->update();
3817  vehicleButton->update();
3818  typeButton->update();
3819  typeDistributionButton->update();
3820  stopButton->update();
3821  personButton->update();
3822  personPlanButton->update();
3823  containerButton->update();
3824  containerPlanButton->update();
3825 }
3826 
3827 // ---------------------------------------------------------------------------
3828 // GNEViewNetHelper::DataCheckableButtons - methods
3829 // ---------------------------------------------------------------------------
3830 
3832  myViewNet(viewNet) {
3833 }
3834 
3835 
3836 void
3838  // get grip modes
3839  auto gripModes = myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes;
3840  // get tooltip menu
3841  auto tooltipMenu = myViewNet->myViewParent->getGNEAppWindows()->getStaticTooltipMenu();
3842  // edgeData mode
3843  edgeDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3844  std::string("\t") + TL("Edge data mode") + std::string("\t") + TL("Mode for creating edge datas. (E)"),
3846  edgeDataButton->create();
3847  // edgeRelData mode
3848  edgeRelDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3849  std::string("\t") + TL("Edge relation data mode") + std::string("\t") + TL("Mode for creating edge relation datas. (R)"),
3851  edgeRelDataButton->create();
3852  // TAZRelData mode
3853  TAZRelDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3854  std::string("\t") + TL("TAZ relation data mode") + std::string("\t") + TL("Mode for creating TAZ relation datas. (Z)"),
3856  TAZRelDataButton->create();
3857  // meanData button
3858  meanDataButton = new MFXCheckableButton(false, gripModes, tooltipMenu,
3859  std::string("\t") + TL("MeanData mode") + std::string("\t") + TL("Mode for MeanData elements. (M)"),
3861  meanDataButton->create();
3862  // always recalc after creating new elements
3863  gripModes->recalc();
3864 }
3865 
3866 
3867 void
3869  edgeDataButton->show();
3870  edgeRelDataButton->show();
3871  TAZRelDataButton->show();
3872  meanDataButton->show();
3873 }
3874 
3875 
3876 void
3878  edgeDataButton->hide();
3879  edgeRelDataButton->hide();
3880  TAZRelDataButton->hide();
3881  meanDataButton->hide();
3882 }
3883 
3884 
3885 void
3887  edgeDataButton->setChecked(false);
3888  edgeRelDataButton->setChecked(false);
3889  TAZRelDataButton->setChecked(false);
3890  meanDataButton->setChecked(false);
3891 }
3892 
3893 
3894 void
3896  edgeDataButton->update();
3897  edgeRelDataButton->update();
3898  TAZRelDataButton->update();
3899  meanDataButton->update();
3900 }
3901 
3902 // ---------------------------------------------------------------------------
3903 // GNEViewNetHelper::EditNetworkElementShapes - methods
3904 // ---------------------------------------------------------------------------
3905 
3907  myViewNet(viewNet),
3908  myPreviousNetworkEditMode(NetworkEditMode::NETWORK_NONE) {
3909 }
3910 
3911 
3912 void
3914  if (element && (myEditedNetworkElement == nullptr)) {
3915  // save current edit mode before starting
3916  myPreviousNetworkEditMode = myViewNet->myEditModes.networkEditMode;
3917  // set move mode
3918  myViewNet->myEditModes.setNetworkEditMode(NetworkEditMode::NETWORK_MOVE);
3919  //set editedNetworkElement
3920  myEditedNetworkElement = element;
3921  // enable shape edited flag
3922  myEditedNetworkElement->setShapeEdited(true);
3923  // update view net to show the new editedShapePoly
3924  myViewNet->updateViewNet();
3925  }
3926 }
3927 
3928 
3929 void
3931  // stop edit shape junction deleting editedShapePoly
3932  if (myEditedNetworkElement != nullptr) {
3933  // disable shape edited flag
3934  myEditedNetworkElement->setShapeEdited(false);
3935  // reset editedNetworkElement
3936  myEditedNetworkElement = nullptr;
3937  // restore previous edit mode
3938  if (myViewNet->myEditModes.networkEditMode != myPreviousNetworkEditMode) {
3939  myViewNet->myEditModes.setNetworkEditMode(myPreviousNetworkEditMode);
3940  }
3941  }
3942 }
3943 
3944 
3945 void
3947  // save edited junction's shape
3948  if (myEditedNetworkElement != nullptr) {
3949  // stop edit custom shape
3950  stopEditCustomShape();
3951  }
3952 }
3953 
3954 
3957  return myEditedNetworkElement;
3958 }
3959 
3960 // ---------------------------------------------------------------------------
3961 // GNEViewNetHelper::BlockIcon - methods
3962 // ---------------------------------------------------------------------------
3963 
3964 void
3966  const GNEAttributeCarrier* AC, GUIGlObjectType type, const Position position, const double exaggeration,
3967  const double size, const double offsetx, const double offsety) {
3968  // first check if icon can be drawn
3969  if (checkDrawing(d, AC, type, exaggeration)) {
3970  // Start pushing matrix
3972  // Traslate to position
3973  glTranslated(position.x(), position.y(), GLO_LOCKICON);
3974  // Traslate depending of the offset
3975  glTranslated(offsetx, offsety, 0);
3976  // rotate to avoid draw invert
3977  glRotated(180, 0, 0, 1);
3978  // Set draw color
3979  glColor3d(1, 1, 1);
3980  // Draw lock icon
3982  // Pop matrix
3984  }
3985 }
3986 
3987 
3989 
3990 
3991 bool
3993  GUIGlObjectType type, const double exaggeration) {
3994  // check detail
3996  return false;
3997  }
3998  // get view net
3999  const auto viewNet = AC->getNet()->getViewNet();
4000  // check exaggeration
4001  if (exaggeration == 0) {
4002  return false;
4003  }
4004  // check supermodes
4005  if (viewNet->getEditModes().isCurrentSupermodeNetwork() &&
4007  return false;
4008  }
4009  if (viewNet->getEditModes().isCurrentSupermodeDemand() && (!AC->getTagProperty().isDemandElement())) {
4010  return false;
4011  }
4012  if (viewNet->getEditModes().isCurrentSupermodeData() && (!AC->getTagProperty().isDataElement())) {
4013  return false;
4014  }
4015  // check if is locked
4016  if (!viewNet->getLockManager().isObjectLocked(type, AC->isAttributeCarrierSelected())) {
4017  return false;
4018  }
4019  // all ok, then draw
4020  return true;
4021 }
4022 
4023 // ---------------------------------------------------------------------------
4024 // GNEViewNetHelper - methods
4025 // ---------------------------------------------------------------------------
4026 
4027 const std::vector<RGBColor>&
4029  // if is empty, fill it
4030  if (myRainbowScaledColors.empty()) {
4031  // fill scale colors (10)
4032  myRainbowScaledColors.push_back(RGBColor(232, 35, 0, 255));
4033  myRainbowScaledColors.push_back(RGBColor(255, 165, 0, 255));
4034  myRainbowScaledColors.push_back(RGBColor(255, 255, 0, 255));
4035  myRainbowScaledColors.push_back(RGBColor(28, 215, 0, 255));
4036  myRainbowScaledColors.push_back(RGBColor(0, 181, 100, 255));
4037  myRainbowScaledColors.push_back(RGBColor(0, 255, 191, 255));
4038  myRainbowScaledColors.push_back(RGBColor(178, 255, 255, 255));
4039  myRainbowScaledColors.push_back(RGBColor(0, 112, 184, 255));
4040  myRainbowScaledColors.push_back(RGBColor(56, 41, 131, 255));
4041  myRainbowScaledColors.push_back(RGBColor(127, 0, 255, 255));
4042  }
4043  return myRainbowScaledColors;
4044 }
4045 
4046 
4047 const RGBColor&
4048 GNEViewNetHelper::getRainbowScaledColor(const double min, const double max, const double value) {
4049  // check extremes
4050  if (value <= min) {
4051  return getRainbowScaledColors().front();
4052  } else if (value >= max) {
4053  return getRainbowScaledColors().back();
4054  } else {
4055  // calculate value procent between [min, max]
4056  const double procent = ((value - min) * 100) / (max - min);
4057  // check if is valid
4058  if (procent <= 0) {
4059  return getRainbowScaledColors().front();
4060  } else if (procent >= 100) {
4061  return getRainbowScaledColors().back();
4062  } else {
4063  // return scaled color
4064  return getRainbowScaledColors().at((int)(procent / 10.0));
4065  }
4066  }
4067 }
4068 
4069 
4070 std::vector<GUIGlObject*>
4071 GNEViewNetHelper::filterElementsByLayer(const std::vector<GUIGlObject*>& GLObjects) {
4072  std::vector<GUIGlObject*> filteredGLObjects;
4073  if (GLObjects.size() > 0) {
4074  const auto firstLayer = GLObjects.front()->getType();
4075  for (const auto& GLObject : GLObjects) {
4076  if ((GLO_RIDE <= firstLayer) && (firstLayer <= GLO_TRANSHIP) &&
4077  (GLO_RIDE <= GLObject->getType()) && (GLObject->getType() <= GLO_TRANSHIP)) {
4078  filteredGLObjects.push_back(GLObject);
4079  } else if ((GLO_STOP <= firstLayer) && (firstLayer <= GLO_STOP_PLAN) &&
4080  (GLO_STOP <= GLObject->getType()) && (GLObject->getType() <= GLO_STOP_PLAN)) {
4081  filteredGLObjects.push_back(GLObject);
4082  } else if ((GLO_VEHICLE <= firstLayer) && (firstLayer <= GLO_ROUTEFLOW) &&
4083  (GLO_VEHICLE <= GLObject->getType()) && (GLObject->getType() <= GLO_ROUTEFLOW)) {
4084  filteredGLObjects.push_back(GLObject);
4085  } else if ((GLO_PERSON <= firstLayer) && (firstLayer <= GLO_PERSONFLOW) &&
4086  (GLO_PERSON <= GLObject->getType()) && (GLObject->getType() <= GLO_PERSONFLOW)) {
4087  filteredGLObjects.push_back(GLObject);
4088  } else if ((GLO_CONTAINER <= firstLayer) && (firstLayer <= GLO_CONTAINERFLOW) &&
4089  (GLO_CONTAINER <= GLObject->getType()) && (GLObject->getType() <= GLO_CONTAINERFLOW)) {
4090  filteredGLObjects.push_back(GLObject);
4091  } else if (GLObject->getType() == firstLayer) {
4092  filteredGLObjects.push_back(GLObject);
4093  }
4094  }
4095  }
4096  return filteredGLObjects;
4097 }
4098 
4099 /****************************************************************************/
DataEditMode
enum for data edit modes
@ DATA_SELECT
mode for selecting data elements
@ DATA_INSPECT
mode for inspecting data elements
@ DATA_DELETE
mode for deleting data elements
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
NetworkEditMode
@brie enum for network edit modes
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ NETWORK_WIRE
Mode for editing wires.
@ NETWORK_CREATE_EDGE
mode for creating new edges
@ NETWORK_TLS
mode for editing tls
@ NETWORK_SELECT
mode for selecting network elements
@ NETWORK_INSPECT
mode for inspecting network elements
@ NETWORK_PROHIBITION
Mode for editing connection prohibitions.
@ NETWORK_NONE
empty Network mode
@ NETWORK_CONNECT
mode for connecting lanes
DemandEditMode
@brie enum for demand edit modes
@ DEMAND_INSPECT
mode for inspecting demand elements
@ DEMAND_DELETE
mode for deleting demand elements
@ DEMAND_SELECT
mode for selecting demand elements
@ DEMAND_MOVE
mode for moving demand elements
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition: GUIAppEnum.h:843
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition: GUIAppEnum.h:204
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition: GUIAppEnum.h:234
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition: GUIAppEnum.h:875
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition: GUIAppEnum.h:899
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition: GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:817
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition: GUIAppEnum.h:839
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition: GUIAppEnum.h:825
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition: GUIAppEnum.h:823
@ MID_GNE_INTERVALBAR_BEGIN
begin changed in InterbalBar
Definition: GUIAppEnum.h:919
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition: GUIAppEnum.h:905
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:891
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition: GUIAppEnum.h:829
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition: GUIAppEnum.h:877
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition: GUIAppEnum.h:75
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:865
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition: GUIAppEnum.h:43
@ MID_GNE_NETWORKVIEWOPTIONS_ASKFORMERGE
ask before merging junctions
Definition: GUIAppEnum.h:835
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition: GUIAppEnum.h:797
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition: GUIAppEnum.h:863
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition: GUIAppEnum.h:208
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in netedit.
Definition: GUIAppEnum.h:117
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition: GUIAppEnum.h:49
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition: GUIAppEnum.h:841
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:897
@ MID_HOTKEY_C_MODE_CONNECT_CONTAINER
hotkey for mode connecting lanes AND container
Definition: GUIAppEnum.h:45
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition: GUIAppEnum.h:53
@ MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION
hotkey for mode editing overhead wires AND route distributions
Definition: GUIAppEnum.h:73
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition: GUIAppEnum.h:67
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition: GUIAppEnum.h:871
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition: GUIAppEnum.h:893
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition: GUIAppEnum.h:837
@ MID_GNE_INTERVALBAR_END
end changed in InterbalBar
Definition: GUIAppEnum.h:921
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition: GUIAppEnum.h:831
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition: GUIAppEnum.h:63
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition: GUIAppEnum.h:827
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition: GUIAppEnum.h:879
@ MID_GNE_VIEW_DEFAULT
set default view
Definition: GUIAppEnum.h:783
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition: GUIAppEnum.h:236
@ MID_GNE_VIEW_JUPEDSIM
set juPedSim view
Definition: GUIAppEnum.h:785
@ MID_GNE_INTERVALBAR_PARAMETER
parameter changed in InterbalBar
Definition: GUIAppEnum.h:923
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition: GUIAppEnum.h:65
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition: GUIAppEnum.h:901
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAS
save Mean Datas
Definition: GUIAppEnum.h:216
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition: GUIAppEnum.h:57
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition: GUIAppEnum.h:71
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition: GUIAppEnum.h:55
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:819
@ MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG
save netedit Config
Definition: GUIAppEnum.h:210
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition: GUIAppEnum.h:869
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALS
Save Additional Elements.
Definition: GUIAppEnum.h:202
@ MID_GNE_INTERVALBAR_GENERICDATATYPE
generic data selected
Definition: GUIAppEnum.h:913
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition: GUIAppEnum.h:833
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition: GUIAppEnum.h:895
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition: GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition: GUIAppEnum.h:903
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:815
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:867
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition: GUIAppEnum.h:883
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition: GUIAppEnum.h:222
@ MID_GNE_INTERVALBAR_DATASET
data set selected
Definition: GUIAppEnum.h:915
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition: GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition: GUIAppEnum.h:232
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition: GUIAppEnum.h:881
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition: GUIAppEnum.h:821
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition: GUIAppEnum.h:873
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition: GUIAppEnum.h:813
@ MID_GNE_INTERVALBAR_LIMITED
enable/disable show data elements by interval
Definition: GUIAppEnum.h:917
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition: GUIAppEnum.h:61
#define GUIDesignComboBoxWidth180
comboBox with thick frame, width 180
Definition: GUIDesigns.h:311
#define GUIDesignComboBoxNCol
number of column of every combo box
Definition: GUIDesigns.h:317
#define GUIDesignButtonPopup
checkable button placed in popup (for example, locate buttons)
Definition: GUIDesigns.h:118
#define GUIDesignButtonToolbar
little button with icon placed in navigation toolbar
Definition: GUIDesigns.h:129
#define GUIDesignButtonLeft
button extended over over Frame with thick and raise frame
Definition: GUIDesigns.h:91
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition: GUIDesigns.h:80
#define GUIDesignTLSTableCheckableButtonIcon
checkable button only with icon used in TLSTable
Definition: GUIDesigns.h:115
#define GUIDesignComboBoxVisibleItemsFixed
Definition: GUIDesigns.h:58
#define GUIDesignTextFieldFixedRestricted(width, type)
text field with fixed width
Definition: GUIDesigns.h:74
#define GUIDesignMFXCheckableButtonSquare
Definition: GUIDesigns.h:143
#define GUIDesignButtonToolbarLocator
little checkable button with icon placed in navigation toolbar used specify for Locator
Definition: GUIDesigns.h:135
#define GUIDesignMFXCheckableButtonSupermode
checkable button with icon placed in navigation toolbar for supermodes
Definition: GUIDesigns.h:146
#define GUIDesignCheckButtonAttribute
checkButton without thick extended over the frame used for attributes
Definition: GUIDesigns.h:207
#define GUIDesignLabelThickedFixed(width)
label thicked, icon before text, text centered and custom width
Definition: GUIDesigns.h:258
GUIGlObjectType
@ GLO_EDGERELDATA
edge relation data
@ GLO_TAZRELDATA
TAZ relation data.
@ GLO_WALKINGAREA
a walkingArea
@ GLO_JPS_WALKABLEAREA
walkable area
@ GLO_TESTELEMENT
test element (used in netedit)
@ GLO_TRANSHIP
a container tranship
@ GLO_STOPPING_PLACE_LAST
reserved GLO type for packing all StoppingPlace elements
@ GLO_STOP_PLAN
a stop plan stop
@ GLO_ACCESS
a Acces
@ GLO_ROUTEFLOW
a routeFlow
@ GLO_WALK
a walk
@ GLO_ROUTE
a route
@ GLO_WIRE
reserved GLO type for packing all wire elements
@ GLO_JUNCTION
a junction
@ GLO_LANE
a lane
@ GLO_RIDE
a ride
@ GLO_TAZ
Traffic Assignment Zones (TAZs)
@ GLO_CONTAINER
a container
@ GLO_JPS_OBSTACLE
obstacles
@ GLO_EDGEDATA
edge data
@ GLO_CONNECTION
a connection
@ GLO_ADDITIONALELEMENT
reserved GLO type for packing all additionals elements
@ GLO_PERSONTRIP
a person trip
@ GLO_EDGE
an edge
@ GLO_STOPPING_PLACE
reserved GLO type for packing all StoppingPlace elements
@ GLO_VEHICLE
a vehicle
@ GLO_PERSON
a person
@ GLO_TRANSPORT
a container transport
@ GLO_POI
poi (over view, geo and lane)
@ GLO_RECTANGLESELECTION
rectangle selection shape (used in netedit)
@ GLO_STOP
a stop
@ GLO_CONTAINERFLOW
a person flow
@ GLO_POLYGON
polygon
@ GLO_TLLOGIC
a tl-logic
@ GLO_CROSSING
a tl-logic
@ GLO_PERSONFLOW
a person flow
@ GLO_TRACTIONSUBSTATION
a segment of an overhead line
@ GLO_LOCKICON
Lock icon (used in netedit)
GUIViewObjectsHandler gViewObjectsHandler
@ DATAMODE_CHECKBOX_SHOWADDITIONALS
@ SAVE_NETEDITCONFIG
@ SAVE_DATAELEMENTS
@ NETWORKMODE_CHECKBOX_BUBBLES
@ SAVE_NETWORKELEMENTS
@ DATAMODE_CHECKBOX_TAZRELONLYFROM
@ MODEPERSONPLAN
@ MODECROSSING
@ MODEMEANDATA
@ MODEADDITIONAL
@ MODEEDGERELDATA
@ SUPERMODEDEMAND
@ MODEPROHIBITION
@ SAVE_ADDITIONALELEMENTS
@ DEMANDMODE_CHECKBOX_HIDENONINSPECTEDDEMANDELEMENTS
@ NETWORKMODE_CHECKBOX_HIDECONNECTIONS
@ DEMANDMODE_CHECKBOX_SHOWTRIPS
@ COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE
@ DATAMODE_CHECKBOX_SHOWSHAPES
@ NETWORKMODE_CHECKBOX_SELECTEDGES
@ COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS
@ DEMANDMODE_CHECKBOX_LOCKPERSON
@ NETWORKMODE_CHECKBOX_APPLYTOALLPHASES
@ MODECREATEEDGE
@ DATAMODE_CHECKBOX_TAZRELONLYTO
@ NETWORKMODE_CHECKBOX_AUTOSELECTJUNCTIONS
@ SAVE_MEANDATAELEMENTS
@ DATAMODE_CHECKBOX_TAZRELDRAWING
@ NETWORKMODE_CHECKBOX_SHOWCONNECTIONS
@ DEMANDMODE_CHECKBOX_SHOWPERSONPLANS
@ MODECONTAINER
@ DEMANDMODE_CHECKBOX_HIDESHAPES
@ DATAMODE_CHECKBOX_TAZDRAWFILL
@ MODEEDGEDATA
@ NETWORKMODE_CHECKBOX_ELEVATION
@ SUPERMODENETWORK
@ COMMONMODE_CHECKBOX_SPREADVEHICLE
@ SAVE_DEMANDELEMENTS
@ DEMANDMODE_CHECKBOX_LOCKCONTAINER
@ NETWORKMODE_CHECKBOX_SHOWSUBADDITIONALS
@ NETWORKMODE_CHECKBOX_SHOWTAZELEMENTS
@ SUPERMODEDATA
@ MODECONNECTION
@ MODECONTAINERPLAN
@ SAVE_MULTIPLE
@ NETWORKMODE_CHECKBOX_CHAIN
@ DEMANDMODE_CHECKBOX_SHOWOVERLAPPEDROUTES
@ NETWORKMODE_CHECKBOX_ASKFORMERGE
@ SAVE_SUMOCONFIG
@ VIEWJUPEDSIM
@ MODETYPEDISTRIBUTION
@ COMMONMODE_CHECKBOX_TOGGLEGRID
@ MODEROUTEDISTRIBUTION
@ MODETAZRELDATA
@ DEMANDMODE_CHECKBOX_SHOWCONTAINERPLANS
@ NETWORKMODE_CHECKBOX_TWOWAY
#define WRITE_ERRORF(...)
Definition: MsgHandler.h:305
#define TL(string)
Definition: MsgHandler.h:315
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_EDGEREL
a relation between two edges
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ GNE_TAG_EDGEREL_SINGLE
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ SUMO_TAG_TAZREL
a relation between two TAZs
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ GNE_ATTR_SELECTED
element is selected
bool gHumanReadableTime
Definition: StdDefs.cpp:29
const double INVALID_DOUBLE
invalid double
Definition: StdDefs.h:64
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:30
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:39
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition: Boundary.cpp:78
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:654
static void popMatrix()
pop matrix
Definition: GLHelper.cpp:130
static void pushMatrix()
push matrix
Definition: GLHelper.cpp:117
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNEAdditional.h:49
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
GNENet * getNet() const
get pointer to net
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
Definition: GNECrossing.h:44
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNEEdgeData.h:37
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:53
bool isConvexAngle() const
check if edge makes a convex angle [0 - 180) degrees
Definition: GNEEdge.cpp:1733
NBEdge * getNBEdge() const
returns the internal NBEdge
Definition: GNEEdge.cpp:753
An Element which don't belong to GNENet but has influence in the simulation.
An Element which don't belong to GNENet but has influence in the simulation.
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:46
move element
static void commitMove(const GNEViewNet *viewNet, GNEMoveOperation *moveOperation, const GNEMoveOffset &offset, GNEUndoList *undoList)
commit move element for the given offset
static void moveElement(const GNEViewNet *viewNet, GNEMoveOperation *moveOperation, const GNEMoveOffset &offset)
move element the for given offset (note: offset can be X-Y-0, 0-0-Z or X-Y-Z)
move offset
move operation
GNEDataSet * retrieveDataSet(const std::string &id, bool hardFail=true) const
Returns the named data set.
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:123
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:2136
void setShapeEdited(const bool value)
set shape edited
Definition: GNEPOI.h:43
Definition: GNETAZ.h:34
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNETAZRelData.h:38
bool isNetworkElement() const
element sets
bool isDataElement() const
return true if tag correspond to a data element
bool isDemandElement() const
return true if tag correspond to a demand element
bool isAdditionalElement() const
return true if tag correspond to an additional element (note: this include TAZ, shapes and wires)
std::string getParameter() const
get parameter
void hideIntervalBar()
hide all options menu checks
void setGenericDataType()
set generic data type
double getBegin() const
get begin
void showIntervalBar()
show interval option bar
void disableIntervalBar()
disable interval bar
void updateIntervalBar()
update interval bar
void buildIntervalBarElements()
build interval bar elements
GNEDataSet * getDataSet() const
get dataSet
IntervalBar(GNEViewNet *viewNet)
default constructor
void enableIntervalBar()
enable interval bar
void setInterval()
update limit by interval
SumoXMLTag getGenericDataType() const
get generic data type
void updateLockMenuBar()
update lock inspect menuBar
bool isObjectLocked(GUIGlObjectType objectType, const bool selected) const
check if given GLObject is locked for inspect, select, delete and move
LockManager(GNEViewNet *viewNet)
constructor
std::map< GUIGlObjectType, OperationLocked > myLockedElements
map with locked elements
GNEViewNet * myViewNet
pointer to viewNet
std::vector< GNEConnection * > connections
vector with the connections
std::vector< GNEGenericData * > genericDatas
vector with the generic datas
std::vector< GNEPOI * > POIs
vector with the POIs
std::vector< GNEInternalLane * > internalLanes
vector with the internal lanes
std::vector< GUIGlObject * > GUIGlObjects
vector with the GUIGlObjects
std::vector< GNELane * > lanes
vector with the lanes
std::vector< GNETAZRelData * > TAZRelDatas
vector with the TAZ relation datas
std::vector< GNECrossing * > crossings
vector with the crossings
std::vector< GNEPoly * > polys
vector with the polys
std::vector< GNETAZ * > TAZs
vector with the TAZ elements
std::vector< GNEAdditional * > additionals
vector with the additional elements
std::vector< GNEAttributeCarrier * > attributeCarriers
vector with the attribute carriers
std::vector< GNENetworkElement * > networkElements
vector with the network elements
std::vector< GNEEdgeData * > edgeDatas
vector with the edge datas
std::vector< GNEEdgeRelData * > edgeRelDatas
vector with the edge relation datas
std::vector< GNEEdge * > edges
vector with the edges
void filterElements(const std::vector< const GUIGlObject * > &objects)
filter elements
std::vector< GNEJunction * > junctions
vector with the junctions
std::vector< GNEWalkingArea * > walkingAreas
vector with the walkingAreas
std::vector< GNEDemandElement * > demandElements
vector with the demand elements
GNEEdgeRelData * getEdgeRelDataElementFront() const
get edge rel data element or a pointer to nullptr
void updateObjects()
update objects (using gViewObjectsHandler)
GNEEdgeData * getEdgeDataElementFront() const
get edge data element or a pointer to nullptr
void updateShapeElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update shape elements
GNEConnection * getConnectionFront() const
get front connection or a pointer to nullptr
const std::vector< GNEAttributeCarrier * > & getAttributeCarriers() const
get vector with ACs
void filterEdges()
filter (remove) edges
GNEPoly * getPolyFront() const
get front Poly or a pointer to nullptr
void updateDemandElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update demand elements
void filterLockedElements(const std::vector< GUIGlObjectType > ignoreFilter={})
filter locked elements (except the ignoreFilter)
GNEPOI * getPOIFront() const
get front POI or a pointer to nullptr
GNEInternalLane * getInternalLaneFront() const
get front internal lane or a pointer to nullptr
void processGUIGlObjects(const GUIViewObjectsHandler::GLObjectsSortedContainer &objectsContainer)
process GL objects
const std::vector< GNETAZ * > & getTAZs() const
get vector with TAZs
GNEWalkingArea * getWalkingAreaFront() const
get front walkingArea or a pointer to nullptr
GNEEdge * getEdgeFront() const
get front edge or a pointer to nullptr
GNEAttributeCarrier * getAttributeCarrierFront() const
get front attribute carrier or a pointer to nullptr
void updateAdditionalElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update additional elements
void updateGenericDataElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update generic data elements
void filterDemandElements(const bool includeRoutes)
filter (remove) demand elements
void updateTAZElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update TAZ elements
const std::vector< GNEDemandElement * > & getDemandElements() const
get vector with Demand Elements
GNETAZ * getTAZFront() const
get front TAZ or a pointer to nullptr
void filterAdditionals(const bool includeStoppigPlaces, const bool includeTAZs)
filter (remove) additionals
GNELane * getLaneFront() const
get front lane or a pointer to nullptr
void updateNetworkElements(ViewObjectsContainer &container, const GUIGlObject *glObject)
update network elements
GNEGenericData * getGenericDataElementFront() const
get generic data element or a pointer to nullptr
GNEAdditional * getAdditionalFront() const
get front additional element or a pointer to nullptr
GNELane * getLaneFrontNonLocked() const
get front lane or a pointer to nullptr checking if is locked
const GUIGlObject * getGUIGlObjectFront() const
get front attribute carrier or a pointer to nullptr
GNENetworkElement * getNetworkElementFront() const
get front network element or a pointer to nullptr
const std::vector< GNEEdge * > & getEdges() const
get vector with edges
GNECrossing * getCrossingFront() const
get front crossing or a pointer to nullptr
GNEJunction * getJunctionFront() const
get front junction or a pointer to nullptr
void filterLanes()
filter (remove) lanes
GNETAZRelData * getTAZRelDataElementFront() const
get TAZ rel data element or a pointer to nullptr
const std::vector< GUIGlObject * > & getGLObjects() const
get vector with GL objects
void filterShapes()
filter (remove) polys and POIs
const std::vector< GNEJunction * > & getJunctions() const
get vector with junctions
GNEDemandElement * getDemandElementFront() const
get front demand element or a pointer to nullptr
const std::vector< GNELane * > & getLanes() const
get lanes
const std::vector< GNEAdditional * > & getAdditionals() const
get vector with additionals
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.h:156
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
Definition: GUIGlObject.h:143
virtual bool isGLObjectLocked() const
check if element is locked (Currently used only in netedit)
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static GUIGlID getTexture(GUITexture which)
returns a texture previously defined in the enum GUITexture
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
std::map< double, std::vector< ObjectContainer > > GLObjectsSortedContainer
typedef
const GLObjectsSortedContainer & getSelectedObjects() const
get all elements under cursor sorted by layer
ComboBox with icon.
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
const PositionVector & getGeometry() const
Returns the geometry of the edge.
Definition: NBEdge.h:779
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:60
C++ TraCI client API implementation.
Definition: POI.h:34
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
double x() const
Returns the x-position.
Definition: Position.h:55
double y() const
Returns the y-position.
Definition: Position.h:60
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
static const RGBColor BLUE
Definition: RGBColor.h:187
static const RGBColor YELLOW
Definition: RGBColor.h:188
static const RGBColor MAGENTA
Definition: RGBColor.h:190
MFXMenuCheckIcon * menuCheckLockConnections
menu check to lock connections
MFXMenuCheckIcon * menuCheckLockPersonTrip
menu check to lock personTrips
MFXMenuCheckIcon * menuCheckLockPersons
menu check to lock persons
MFXMenuCheckIcon * menuCheckLockVehicles
menu check to lock vehicles
MFXMenuCheckIcon * menuCheckLockCrossings
menu check to lock crossings
MFXMenuCheckIcon * menuCheckLockTAZs
menu check to lock TAZs
MFXMenuCheckIcon * menuCheckLockWalk
menu check to lock walks
MFXMenuCheckIcon * menuCheckLockEdgeTAZRels
menu check to lock edgeTAZRels
MFXMenuCheckIcon * menuCheckLockWires
menu check to lock Wires
MFXMenuCheckIcon * menuCheckLockPOIs
menu check to lock POIs
MFXMenuCheckIcon * menuCheckLockPolygons
menu check to lock polygons
MFXMenuCheckIcon * menuCheckLockWalkingAreas
menu check to lock walkingAreas
MFXMenuCheckIcon * menuCheckLockEdges
menu check to lock edges
MFXMenuCheckIcon * menuCheckLockRides
menu check to lock rides
MFXMenuCheckIcon * menuCheckLockContainers
menu check to lock containers
MFXMenuCheckIcon * menuCheckLockJpsWalkableAreas
menu check to lock jps walkableareas
MFXMenuCheckIcon * menuCheckLockEdgeRelDatas
menu check to lock edgeRelDatas
MFXMenuCheckIcon * menuCheckLockStops
menu check to lock stops
MFXMenuCheckIcon * menuCheckLockLanes
menu check to lock lanes
MFXMenuCheckIcon * menuCheckLockAdditionals
menu check to lock additionals
MFXMenuCheckIcon * menuCheckLockJpsObstacles
menu check to lock jps obstacles
MFXMenuCheckIcon * menuCheckLockTranships
menu check to lock tranships
MFXMenuCheckIcon * menuCheckLockTransports
menu check to lock transports
CommonCheckableButtons(GNEViewNet *viewNet)
default constructor
void buildCommonCheckableButtons()
build checkable buttons
void updateCommonCheckableButtons()
update Common checkable buttons
void disableCommonCheckableButtons()
hide all options menu checks
void hideCommonCheckableButtons()
hide all Common Checkable Buttons
void showCommonCheckableButtons()
show all Common Checkable Buttons
void hideDataCheckableButtons()
hide all Data Checkable Buttons
void showDataCheckableButtons()
show all Data Checkable Buttons
void disableDataCheckableButtons()
hide all options menu checks
void buildDataCheckableButtons()
build checkable buttons
void updateDataCheckableButtons()
update Data checkable buttons
DataCheckableButtons(GNEViewNet *viewNet)
default constructor
DataViewOptions(GNEViewNet *viewNet)
default constructor
bool TAZRelOnlyTo() const
check if toggle TAZRel only to checkbox is enabled
void hideDataViewOptionsMenuChecks()
hide all options menu checks
bool showAdditionals() const
check if additionals has to be drawn
bool showDemandElements() const
check if show demand elements checkbox is enabled
bool TAZRelOnlyFrom() const
check if toggle TAZRel only from checkbox is enabled
bool TAZDrawFill() const
check if toggle TAZ draw fill checkbox is enabled
void buildDataViewOptionsMenuChecks()
build menu checks
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
bool showShapes() const
check if shapes has to be drawn
bool TAZRelDrawing() const
check if toggle TAZRel drawing checkbox is enabled
void hideDemandCheckableButtons()
hide all Demand Checkable Buttons
DemandCheckableButtons(GNEViewNet *viewNet)
default constructor
void buildDemandCheckableButtons()
build checkable buttons
void showDemandCheckableButtons()
show all Demand Checkable Buttons
void updateDemandCheckableButtons()
update Demand checkable buttons
void disableDemandCheckableButtons()
hide all options menu checks
void lockPerson(const GNEDemandElement *person)
lock person
bool showAllPersonPlans() const
check all person plans has to be show
void lockContainer(const GNEDemandElement *container)
lock container
void buildDemandViewOptionsMenuChecks()
build menu checks
const GNEDemandElement * getLockedPerson() const
get locked person
const GNEDemandElement * getLockedContainer() const
get locked container
bool showShapes() const
check if shapes has to be drawn
void hideDemandViewOptionsMenuChecks()
hide all options menu checks
bool showAllContainerPlans() const
check all container plans has to be show
bool drawSpreadVehicles() const
check if vehicles must be drawn spread
bool showNonInspectedDemandElements(const GNEDemandElement *demandElement) const
check if non inspected element has to be hidden
DemandViewOptions(GNEViewNet *viewNet)
default constructor
bool showOverlappedRoutes() const
show overlapped routes
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
bool showAllTrips() const
check if trips has to be drawn
void buildSuperModeButtons()
build checkable buttons
bool isDefaultView() const
check if default view is enabled
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
void setDemandEditMode(DemandEditMode demandMode, const bool force=false)
set Demand edit mode
bool isCurrentSupermodeData() const
@check if current supermode is Data
void setView(FXSelector sel)
set view
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
void setSupermode(Supermode supermode, const bool force)
set supermode
void setNetworkEditMode(NetworkEditMode networkMode, const bool force=false)
set Network edit mode
EditModes(GNEViewNet *viewNet)
constructor
void setDataEditMode(DataEditMode dataMode, const bool force=false)
set Data edit mode
GNENetworkElement * getEditedNetworkElement() const
pointer to edited network element
EditNetworkElementShapes(GNEViewNet *viewNet)
default constructor
void startEditCustomShape(GNENetworkElement *element)
start edit custom shape
static bool checkDrawing(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC, GUIGlObjectType type, const double exaggeration)
check if icon can be drawn
static void drawLockIcon(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC, GUIGlObjectType type, const Position position, const double exaggeration, const double size=0.5, const double offsetx=0, const double offsety=0)
draw lock icon
bool shiftKeyPressed() const
check if SHIFT is pressed during current event
bool altKeyPressed() const
check if ALT is pressed during current event
void update(void *eventData)
update status of MouseButtonKeyPressed during current event
bool mouseRightButtonPressed() const
check if mouse right button is pressed during current event
bool controlKeyPressed() const
check if CONTROL is pressed during current event
bool mouseLeftButtonPressed() const
check if mouse left button is pressed during current event
void moveSelection(const bool mouseLeftButtonPressed)
move selection
void calculateEdgeSelection(const GNEEdge *clickedEdge)
calculate edge selection
const GNEMoveOffset calculateMoveOffset() const
calculate move offset
bool isCurrentlyMovingMultipleElements() const
check if there are moving elements
void finishMoveSelection()
finish moving selection
bool isMovingSelection() const
check if currently there is element being moved
void resetMovingSelectedEdge()
reset flag for moving edge
void calculateJunctionSelection()
calculate junction selection
MoveMultipleElementModul(GNEViewNet *viewNet)
constructor
bool isMovingSelectedEdge() const
flag for moving edge
const GNEMoveOffset calculateMoveOffset() const
calculate offset
MoveSingleElementModul(GNEViewNet *viewNet)
constructor
bool beginMoveSingleElementDemandMode()
begin move single element in Demand mode
void moveSingleElement(const bool mouseLeftButtonPressed)
move single element in Network AND Demand mode
GNEMoveElement * getMovedElement() const
get moved element
bool isCurrentlyMovingSingleElement() const
check if there are moving elements
bool beginMoveSingleElementNetworkMode()
begin move single element in Network mode
bool beginMoveNetworkElementShape()
begin move network elementshape
void finishMoveSingleElement()
finish moving single elements in Network AND Demand mode
void updateNetworkCheckableButtons()
update network checkable buttons
void showNetworkCheckableButtons()
show all Network Checkable Buttons
void buildNetworkCheckableButtons()
build checkable buttons
NetworkCheckableButtons(GNEViewNet *viewNet)
default constructor
void hideNetworkCheckableButtons()
hide all Network Checkable Buttons
void disableNetworkCheckableButtons()
hide all options menu checks
bool showConnections() const
check if select show connections checkbox is enabled
bool drawSpreadVehicles() const
check if vehicles must be drawn spread
bool editingElevation() const
check if we're editing elevation
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
bool showDemandElements() const
check if show demand elements checkbox is enabled
bool showSubAdditionals() const
check if show sub-additionals
bool selectEdges() const
check if select edges checkbox is enabled
bool showTAZElements() const
check if show TAZ Elements
NetworkViewOptions(GNEViewNet *viewNet)
default constructor
void hideNetworkViewOptionsMenuChecks()
hide all options menu checks
void buildNetworkViewOptionsMenuChecks()
build menu checks
SaveElements(GNEViewNet *viewNet)
default constructor
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void buildSaveElementsButtons()
build save buttons
void finishRectangleSelection()
finish rectangle selection
void drawRectangleSelection(const RGBColor &color) const
draw rectangle selection
void beginRectangleSelection()
begin rectangle selection
void moveRectangleSelection()
move rectangle selection
void processBoundarySelection(const Boundary &boundary)
Process boundary Selection.
void processRectangleSelection()
process rectangle Selection
std::vector< GNEEdge * > processEdgeRectangleSelection()
process rectangle Selection (only limited to Edges)
SelectingArea(GNEViewNet *viewNet)
default constructor
void drawTestingElements(GUIMainWindow *mainWindow)
draw testing element
TestingMode(GNEViewNet *viewNet)
default constructor
void initTestingMode()
init testing mode
void buildTimeFormatButtons()
build time format buttons
TimeFormat(GNEViewNet *viewNet)
default constructor
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label
void buildVehicleOptionsMenuChecks()
build menu checks
VehicleOptions(GNEViewNet *viewNet)
constructor
void hideVehicleOptionsMenuChecks()
hide all options menu checks
VehicleTypeOptions(GNEViewNet *viewNet)
constructor
void buildVehicleTypeOptionsMenuChecks()
build menu checks
void hideVehicleTypeOptionsMenuChecks()
hide all options menu checks
static std::vector< RGBColor > myRainbowScaledColors
scale (rainbow) colors
static const RGBColor & getRainbowScaledColor(const double min, const double max, const double value)
get rainbow scaled color
static std::vector< GUIGlObject * > filterElementsByLayer(const std::vector< GUIGlObject * > &GLObjects)
filter elements based on the layer
static const std::vector< RGBColor > & getRainbowScaledColors()
get scaled rainbow colors