1 /****************************************************************************/ 2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo 3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others. 4 // This program and the accompanying materials 5 // are made available under the terms of the Eclipse Public License v2.0 6 // which accompanies this distribution, and is available at 7 // http://www.eclipse.org/legal/epl-v20.html 8 // SPDX-License-Identifier: EPL-2.0 9 /****************************************************************************/ 10 /// @file GNEViewNetHelper.h 11 /// @author Pablo Alvarez Lopez 12 /// @date Feb 2019 13 /// @version $Id$ 14 /// 15 // A file used to reduce the size of GNEViewNet.h grouping structs and classes 16 /****************************************************************************/ 17 #ifndef GNEViewNetHelper_h 18 #define GNEViewNetHelper_h 19 20 21 // =========================================================================== 22 // included modules 23 // =========================================================================== 24 #include <config.h> 25 26 #include <utils/common/SUMOVehicleClass.h> 27 #include <utils/foxtools/MFXCheckableButton.h> 28 #include <utils/geom/Position.h> 29 #include <utils/geom/PositionVector.h> 30 #include <utils/gui/globjects/GUIGlObject.h> 31 #include <utils/gui/globjects/GUIGlObjectTypes.h> 32 #include <utils/gui/settings/GUIPropertyScheme.h> 33 #include <utils/gui/settings/GUIVisualizationSettings.h> 34 #include <utils/gui/windows/GUISUMOAbstractView.h> 35 #include <utils/gui/windows/GUISUMOAbstractView.h> 36 37 38 // =========================================================================== 39 // enum 40 // =========================================================================== 41 42 /// @brie enum for supermodes 43 enum Supermode { 44 /// @brief empty super mode 45 GNE_SUPERMODE_NONE, 46 /// @brief Network mode (Edges, junctions, etc..) 47 GNE_SUPERMODE_NETWORK, 48 ///@brief Demanding mode (Routes, Vehicles etc..) 49 GNE_SUPERMODE_DEMAND 50 }; 51 52 /// @brie enum for network edit modes 53 enum NetworkEditMode { 54 /// @brief empty Network mode 55 GNE_NMODE_NONE, 56 ///@brief mode for inspecting network elements 57 GNE_NMODE_INSPECT, 58 ///@brief mode for deleting network elements 59 GNE_NMODE_DELETE, 60 ///@brief mode for selecting network elements 61 GNE_NMODE_SELECT, 62 ///@brief mode for moving network elements 63 GNE_NMODE_MOVE, 64 ///@brief mode for creating new edges 65 GNE_NMODE_CREATE_EDGE, 66 ///@brief mode for connecting lanes 67 GNE_NMODE_CONNECT, 68 ///@brief mode for editing tls 69 GNE_NMODE_TLS, 70 ///@brief Mode for editing additionals 71 GNE_NMODE_ADDITIONAL, 72 ///@brief Mode for editing crossing 73 GNE_NMODE_CROSSING, 74 ///@brief Mode for editing TAZ 75 GNE_NMODE_TAZ, 76 ///@brief Mode for editing Polygons 77 GNE_NMODE_POLYGON, 78 ///@brief Mode for editing connection prohibitions 79 GNE_NMODE_PROHIBITION 80 }; 81 82 /// @brie enum for demand edit modes 83 enum DemandEditMode { 84 /// @brief empty Demand mode 85 GNE_DMODE_NONE, 86 ///@brief mode for inspecting demand elements 87 GNE_DMODE_INSPECT, 88 ///@brief mode for deleting demand elements 89 GNE_DMODE_DELETE, 90 ///@brief mode for selecting demand elements 91 GNE_DMODE_SELECT, 92 ///@brief mode for moving demand elements 93 GNE_DMODE_MOVE, 94 ///@brief Mode for editing routes 95 GNE_DMODE_ROUTES, 96 ///@brief Mode for editing vehicles 97 GNE_DMODE_VEHICLES, 98 ///@brief Mode for editing vehicle types 99 GNE_DMODE_VEHICLETYPES, 100 ///@brief Mode for editing stops 101 GNE_DMODE_STOP 102 }; 103 104 // =========================================================================== 105 // class declarations 106 // =========================================================================== 107 108 // main elements 109 class GNEViewParent; 110 class GNEViewNet; 111 class GNEUndoList; 112 class GNEFrame; 113 class GNEAttributeCarrier; 114 // net elements 115 class GNENet; 116 class GNENetElement; 117 class GNEJunction; 118 class GNEEdge; 119 class GNELane; 120 class GNEConnection; 121 class GNECrossing; 122 class GNEInternalLane; 123 // additional elements 124 class GNEAdditional; 125 class GNEShape; 126 class GNEPoly; 127 class GNEPOI; 128 class GNETAZ; 129 // demand elements 130 class GNEDemandElement; 131 class GNEVehicleType; 132 class GNEFlow; 133 class GNEVehicle; 134 class GNEtrip; 135 136 // =========================================================================== 137 // classes and structs definitions 138 // =========================================================================== 139 140 struct GNEViewNetHelper { 141 142 /// @brief class used to group all variables related with objects under cursor after a click over view 143 class ObjectsUnderCursor { 144 public: 145 /// @brief constructor 146 ObjectsUnderCursor(); 147 148 /// @brief update objects under cursor (Called only in onLeftBtnPress(...) function) 149 void updateObjectUnderCursor(const std::vector<GUIGlObject*>& GUIGlObjects, GNEPoly* editedPolyShape); 150 151 /// @brief swap lane to edge 152 void swapLane2Edge(); 153 154 /// @brief set created junction 155 void setCreatedJunction(GNEJunction* junction); 156 157 /// @brief get front GUI GL ID (or a pointer to nullptr if there isn't) 158 GUIGlID getGlIDFront() const; 159 160 /// @brief get front GUI GL object type (or a pointer to nullptr if there isn't) 161 GUIGlObjectType getGlTypeFront() const; 162 163 /// @brief get front attribute carrier (or a pointer to nullptr if there isn't) 164 GNEAttributeCarrier* getAttributeCarrierFront() const; 165 166 /// @brief get front net element (or a pointer to nullptr if there isn't) 167 GNENetElement* getNetElementFront() const; 168 169 /// @brief get front additional element (or a pointer to nullptr if there isn't) 170 GNEAdditional* getAdditionalFront() const; 171 172 /// @brief get front shape element (or a pointer to nullptr if there isn't) 173 GNEShape* getShapeFront() const; 174 175 /// @brief get front net element element (or a pointer to nullptr if there isn't) 176 GNEDemandElement* getDemandElementFront() const; 177 178 /// @brief get front junction (or a pointer to nullptr if there isn't) 179 GNEJunction* getJunctionFront() const; 180 181 /// @brief get front edge (or a pointer to nullptr if there isn't) 182 GNEEdge* getEdgeFront() const; 183 184 /// @brief get front lane (or a pointer to nullptr if there isn't) 185 GNELane* getLaneFront() const; 186 187 /// @brief get front crossing (or a pointer to nullptr if there isn't) 188 GNECrossing* getCrossingFront() const; 189 190 /// @brief get front connection (or a pointer to nullptr if there isn't) 191 GNEConnection* getConnectionFront() const; 192 193 /// @brief get front TAZ (or a pointer to nullptr if there isn't) 194 GNETAZ* getTAZFront() const; 195 196 /// @brief get front POI (or a pointer to nullptr if there isn't) 197 GNEPOI* getPOIFront() const; 198 199 /// @brief get front Poly (or a pointer to nullptr if there isn't) 200 GNEPoly* getPolyFront() const; 201 202 /// @brief get vector with clicked ACs 203 const std::vector<GNEAttributeCarrier*>& getClickedAttributeCarriers() const; 204 205 private: 206 /// @brief vector with the clicked GUIGlObjects 207 std::vector<GUIGlObject*> myGUIGlObjects; 208 209 /// @brief vector with the clicked attribute carriers 210 std::vector<GNEAttributeCarrier*> myAttributeCarriers; 211 212 /// @brief vector with the clicked net elements 213 std::vector<GNENetElement*> myNetElements; 214 215 /// @brief vector with the clicked additional elements 216 std::vector<GNEAdditional*> myAdditionals; 217 218 /// @brief vector with the clicked shape elements (Poly and POIs) 219 std::vector<GNEShape*> myShapes; 220 221 /// @brief vector with the clicked demand elements 222 std::vector<GNEDemandElement*> myDemandElements; 223 224 /// @brief vector with the clicked junctions 225 std::vector<GNEJunction*> myJunctions; 226 227 /// @brief vector with the clicked edges 228 std::vector<GNEEdge*> myEdges; 229 230 /// @brief vector with the clicked lanes 231 std::vector<GNELane*> myLanes; 232 233 /// @brief vector with the clicked crossings 234 std::vector<GNECrossing*> myCrossings; 235 236 /// @brief vector with the clicked connections 237 std::vector<GNEConnection*> myConnections; 238 239 /// @brief vector with the clicked TAZ elements (needed because uses a shape instead a position) 240 std::vector<GNETAZ*> myTAZs; 241 242 /// @brief vector with the clicked POIs 243 std::vector<GNEPOI*> myPOIs; 244 245 /// @brief vector with the clicked Polys 246 std::vector<GNEPoly*> myPolys; 247 248 /// @brief invert GUIGlObjects 249 void sortGUIGlObjectsByAltitude(const std::vector<GUIGlObject*>& GUIGlObjects); 250 251 /// @brief Invalidated copy constructor. 252 ObjectsUnderCursor(const ObjectsUnderCursor&) = delete; 253 254 /// @brief Invalidated assignment operator. 255 ObjectsUnderCursor& operator=(const ObjectsUnderCursor&) = delete; 256 }; 257 258 /// @brief class used to group all variables related with key pressed after certain events 259 struct KeyPressed { 260 261 /// @brief constructor 262 KeyPressed(); 263 264 /// @brief update status of KeyPressed 265 void update(void* eventData); 266 267 /// @brief check if SHIFT key was pressed during click 268 bool shiftKeyPressed() const; 269 270 /// @brief check if CONTROL key was pressed during click 271 bool controlKeyPressed() const; 272 273 private: 274 /// @brief information of event 275 FXEvent* myEventInfo; 276 277 /// @brief Invalidated copy constructor. 278 KeyPressed(const KeyPressed&) = delete; 279 280 /// @brief Invalidated assignment operator. 281 KeyPressed& operator=(const KeyPressed&) = delete; 282 }; 283 284 /// @brief struct used to group all variables related with Supermodes 285 struct EditModes { 286 287 /// @brief default constructor 288 EditModes(GNEViewNet* viewNet); 289 290 /// @brief build checkable buttons 291 void buildSuperModeButtons(); 292 293 /// @brief set Network edit mode 294 void setSupermode(Supermode supermode); 295 296 /// @brief set Network edit mode 297 void setNetworkEditMode(NetworkEditMode networkMode, bool force = false); 298 299 /// @brief set Demand edit mode 300 void setDemandEditMode(DemandEditMode demandMode, bool force = false); 301 302 /// @brief the current supermode 303 Supermode currentSupermode; 304 305 /// @brief the current Network edit mode 306 NetworkEditMode networkEditMode; 307 308 /// @brief the current Demand edit mode 309 DemandEditMode demandEditMode; 310 311 /// @brief chekable button for supermode Network 312 MFXCheckableButton* networkButton; 313 314 /// @brief chekable button for supermode Demand 315 MFXCheckableButton* demandButton; 316 317 private: 318 /// @brief pointer to viewNet 319 GNEViewNet* myViewNet; 320 321 /// @brief Invalidated copy constructor. 322 EditModes(const EditModes&) = delete; 323 324 /// @brief Invalidated assignment operator. 325 EditModes& operator=(const EditModes&) = delete; 326 }; 327 328 /// @brief struct used to group all variables related to view options 329 struct ViewOptions { 330 331 /// @brief default constructor 332 ViewOptions(GNEViewNet* viewNet); 333 334 /// @brief build menu checks 335 void buildViewOptionsMenuChecks(); 336 337 /// @brief hide all options menu checks 338 void hideViewOptionsMenuChecks(); 339 340 /// @brief check if show demand elements checkbox is enabled 341 bool showDemandElements() const; 342 343 /// @brief check if select edges checkbox is enabled 344 bool selectEdges() const; 345 346 /// @brief check if select show connections checkbox is enabled 347 bool showConnections() const; 348 349 /// @brief menu check to show Demand Elements 350 FXMenuCheck* menuCheckShowDemandElements; 351 352 /// @brief menu check to select only edges 353 FXMenuCheck* menuCheckSelectEdges; 354 355 /// @brief menu check to show connections 356 FXMenuCheck* menuCheckShowConnections; 357 358 /// @brief menu check to hide connections in connect mode 359 FXMenuCheck* menuCheckHideConnections; 360 361 /// @brief menu check to extend to edge nodes 362 FXMenuCheck* menuCheckExtendSelection; 363 364 /// @brief menu check to set change all phases 365 FXMenuCheck* menuCheckChangeAllPhases; 366 367 /// @brief show grid button 368 FXMenuCheck* menuCheckShowGrid; 369 370 private: 371 /// @brief pointer to viewNet 372 GNEViewNet* myViewNet; 373 374 /// @brief Invalidated copy constructor. 375 ViewOptions(const ViewOptions&) = delete; 376 377 /// @brief Invalidated assignment operator. 378 ViewOptions& operator=(const ViewOptions&) = delete; 379 }; 380 381 /// @brief struct used to group all variables related to create edges 382 struct MoveOptions { 383 384 /// @brief default constructor 385 MoveOptions(GNEViewNet* viewNet); 386 387 /// @brief build menu checks 388 void buildMoveOptionMenuChecks(); 389 390 /// @brief hide all MenuChecks 391 void hideMoveOptionMenuChecks(); 392 393 /// @brief check if we're editing elevation 394 bool editingElevation() const; 395 396 /// @brief whether we should warn about merging junctions 397 FXMenuCheck* warnAboutMerge; 398 399 /// @brief show connection as buuble in "Move" mode. 400 FXMenuCheck* showJunctionBubble; 401 402 /// @brief apply movement to elevation 403 FXMenuCheck* moveElevation; 404 405 private: 406 /// @brief pointer to viewNet 407 GNEViewNet* myViewNet; 408 409 /// @brief Invalidated copy constructor. 410 MoveOptions(const MoveOptions&) = delete; 411 412 /// @brief Invalidated assignment operator. 413 MoveOptions& operator=(const MoveOptions&) = delete; 414 }; 415 416 /// @brief struct used to group all variables related with movement of single elements 417 struct MoveSingleElementValues { 418 419 /// @brief constructor 420 MoveSingleElementValues(GNEViewNet* viewNet); 421 422 /// @brief begin move single element in Network mode 423 bool beginMoveSingleElementNetworkMode(); 424 425 /// @brief begin move single element in Demand mode 426 bool beginMoveSingleElementDemandMode(); 427 428 /// @brief move single element in Network AND Demand mode 429 void moveSingleElement(); 430 431 /// @brief finish moving single elements in Network AND Demand mode 432 void finishMoveSingleElement(); 433 434 /// @brief original shape of element before start moving (used by polygons, edges, etc., needed for commmit position changes) 435 PositionVector originalShapeBeforeMoving; 436 437 /// @brief index moved 438 int movingIndexShape; 439 440 /// @brief original position of geometry position (needed for commmit position changes) 441 Position originalPositionInView; 442 443 private: 444 /// calculate Poly movement values (Position, Index, etc.) 445 bool calculatePolyValues(); 446 447 /// calculate Edge movement values (Position, Index, etc.) 448 bool calculateEdgeValues(); 449 450 /// calculate TAZ movement values (Position, Index, etc.) 451 bool calculateTAZValues(); 452 453 /// @brief pointer to viewNet 454 GNEViewNet* myViewNet; 455 456 /// @brief relative position of Clicked Position regarding to originalGeometryPointPosition (Used when user doesn't click exactly over the center of element) 457 Position myRelativeClickedPosition; 458 459 /// @brief bool to indicate that startPos of an edge is being moved 460 bool myMovingStartPos; 461 462 /// @brief bool to indicate that end pos of an edge is being moved 463 bool myMovingEndPos; 464 465 /// @brief the Junction to be moved. 466 GNEJunction* myJunctionToMove; 467 468 /// @brief the edge of which geometry is being moved 469 GNEEdge* myEdgeToMove; 470 471 /// @brief the poly of which geometry is being moved 472 GNEPoly* myPolyToMove; 473 474 /// @brief the poi which position is being moved 475 GNEPOI* myPOIToMove; 476 477 /// @brief the additional element which position is being moved 478 GNEAdditional* myAdditionalToMove; 479 480 /// @brief the demand element which position is being moved 481 GNEDemandElement* myDemandElementToMove; 482 483 /// @brief the TAZ element which their Shape is being moved (it's the only additional with a shape instead a position) 484 GNETAZ* myTAZToMove; 485 }; 486 487 /// @brief struct used to group all variables related with movement of groups of elements 488 struct MoveMultipleElementValues { 489 490 /// @brief constructor 491 MoveMultipleElementValues(GNEViewNet* viewNet); 492 493 /// @brief begin move selection 494 void beginMoveSelection(GNEAttributeCarrier* originAC); 495 496 /// @brief move selection 497 void moveSelection(); 498 499 /// @brief finish moving selection 500 void finishMoveSelection(); 501 502 /// @brief check if currently there is element being moved 503 bool isMovingSelection() const; 504 505 private: 506 /// @brief pointer to viewNet 507 GNEViewNet* myViewNet; 508 509 /// @brief original clicked position when moveSelection is called (used for calculate offset during moveSelection()) 510 Position myClickedPosition; 511 512 /// @brief flag to check if a selection is being moved 513 bool myMovingSelection; 514 515 /// @brief container used for move junctions 516 std::map<GNEJunction*, Position> myMovedJunctionOriginPositions; 517 518 /// @brief container used for move entire edges 519 std::map<GNEEdge*, PositionVector> myMovedEdgesOriginShape; 520 521 /// @brief container used for move GeometryPoints of edges 522 std::map<GNEEdge*, MoveSingleElementValues*> myMovedEgdesGeometryPoints; 523 }; 524 525 /// @brief struct used to group all variables related with movement of groups of elements 526 struct VehicleOptions { 527 528 /// @brief constructor 529 VehicleOptions(GNEViewNet* viewNet); 530 531 /// @brief build menu checks 532 void buildVehicleOptionsMenuChecks(); 533 534 /// @brief hide all options menu checks 535 void hideVehicleOptionsMenuChecks(); 536 537 private: 538 /// @brief pointer to viewNet 539 GNEViewNet* myViewNet; 540 }; 541 542 /// @brief struct used to group all variables related with movement of groups of elements 543 struct VehicleTypeOptions { 544 545 /// @brief constructor 546 VehicleTypeOptions(GNEViewNet* viewNet); 547 548 /// @brief build menu checks 549 void buildVehicleTypeOptionsMenuChecks(); 550 551 /// @brief hide all options menu checks 552 void hideVehicleTypeOptionsMenuChecks(); 553 554 private: 555 /// @brief pointer to viewNet 556 GNEViewNet* myViewNet; 557 }; 558 559 /// @brief struct used to group all variables related with selecting using a square or polygon 560 /// @note in the future the variables used for selecting throught a polygon will be placed here 561 struct SelectingArea { 562 563 /// @brief default constructor 564 SelectingArea(GNEViewNet* viewNet); 565 566 /// @brief begin rectangle selection 567 void beginRectangleSelection(); 568 569 /// @brief move rectangle selection 570 void moveRectangleSelection(); 571 572 /// @brief finish rectangle selection 573 void finishRectangleSelection(); 574 575 /// @brief process rectangle Selection 576 void processRectangleSelection(); 577 578 /// @brief process rectangle Selection (only limited to Edges) 579 std::vector<GNEEdge*> processEdgeRectangleSelection(); 580 581 /// @brief process shape selection 582 void processShapeSelection(const PositionVector& shape); 583 584 /// @brief draw rectangle selection 585 void drawRectangleSelection(const RGBColor& color) const; 586 587 /// @brief whether we have started rectangle-selection 588 bool selectingUsingRectangle; 589 590 /// @brief whether we have started rectangle-selection 591 bool startDrawing; 592 593 private: 594 /// @brief Process boundary Selection 595 void processBoundarySelection(const Boundary& boundary); 596 597 /// @brief firstcorner of the rectangle-selection 598 Position selectionCorner1; 599 600 /// @brief second corner of the rectangle-selection 601 Position selectionCorner2; 602 603 /// @brief pointer to viewNet 604 GNEViewNet* myViewNet; 605 }; 606 607 /// @brief struct used to group all variables related with testing 608 struct TestingMode { 609 610 /// @brief default constructor 611 TestingMode(GNEViewNet* viewNet); 612 613 /// @brief init testing mode 614 void initTestingMode(); 615 616 /// @brief draw testing element 617 void drawTestingElements(GUIMainWindow* mainWindow); 618 619 private: 620 /// @brief pointer to viewNet 621 GNEViewNet* myViewNet; 622 623 /// @brief flag to enable or disable testing mode 624 bool myTestingEnabled; 625 626 /// @brief Width of viewNet in testing mode 627 int myTestingWidth; 628 629 /// @brief Height of viewNet in testing mode 630 int myTestingHeight; 631 }; 632 633 /// @brief struct used to group all variables related to create edges 634 struct CreateEdgeOptions { 635 636 /// @brief default constructor 637 CreateEdgeOptions(GNEViewNet* viewNet); 638 639 /// @brief build menu checks 640 void buildCreateEdgeOptionMenuChecks(); 641 642 /// @brief hide all MenuChecks 643 void hideCreateEdgeOptionMenuChecks(); 644 645 /// @brief whether the endpoint for a created edge should be set as the new source 646 FXMenuCheck* chainEdges; 647 648 /// @brief create auto create opposite edge 649 FXMenuCheck* autoOppositeEdge; 650 651 private: 652 /// @brief pointer to viewNet 653 GNEViewNet* myViewNet; 654 }; 655 656 /// @brief struct used to group all variables related with common chekable Buttons 657 struct CommonCheckableButtons { 658 659 /// @brief default constructor 660 CommonCheckableButtons(GNEViewNet* viewNet); 661 662 /// @brief build checkable buttons 663 void buildCommonCheckableButtons(); 664 665 /// @brief show all Common Checkable Buttons 666 void showCommonCheckableButtons(); 667 668 /// @brief hide all Common Checkable Buttons 669 void hideCommonCheckableButtons(); 670 671 /// @brief hide all options menu checks 672 void disableCommonCheckableButtons(); 673 674 /// @brief update Common checkable buttons 675 void updateCommonCheckableButtons(); 676 677 /// @brief chekable button for edit mode inspect 678 MFXCheckableButton* inspectButton; 679 680 /// @brief chekable button for edit mode delete 681 MFXCheckableButton* deleteButton; 682 683 /// @brief chekable button for edit mode select 684 MFXCheckableButton* selectButton; 685 686 /// @brief chekable button for edit mode move 687 MFXCheckableButton* moveButton; 688 689 private: 690 /// @brief pointer to viewNet 691 GNEViewNet* myViewNet; 692 }; 693 694 /// @brief struct used to group all variables related with Network chekable Buttons 695 struct NetworkCheckableButtons { 696 697 /// @brief default constructor 698 NetworkCheckableButtons(GNEViewNet* viewNet); 699 700 /// @brief build checkable buttons 701 void buildNetworkCheckableButtons(); 702 703 /// @brief show all Network Checkable Buttons 704 void showNetworkCheckableButtons(); 705 706 /// @brief hide all Network Checkable Buttons 707 void hideNetworkCheckableButtons(); 708 709 /// @brief hide all options menu checks 710 void disableNetworkCheckableButtons(); 711 712 /// @brief update network checkable buttons 713 void updateNetworkCheckableButtons(); 714 715 /// @brief chekable button for edit mode create edge 716 MFXCheckableButton* createEdgeButton; 717 718 /// @brief chekable button for edit mode connection 719 MFXCheckableButton* connectionButton; 720 721 /// @brief chekable button for edit mode traffic light 722 MFXCheckableButton* trafficLightButton; 723 724 /// @brief chekable button for edit mode additional 725 MFXCheckableButton* additionalButton; 726 727 /// @brief chekable button for edit mode crossing 728 MFXCheckableButton* crossingButton; 729 730 /// @brief chekable button for edit mode TAZ 731 MFXCheckableButton* TAZButton; 732 733 /// @brief chekable button for edit mode shape 734 MFXCheckableButton* shapeButton; 735 736 /// @brief checkable button for edit mode polygon 737 MFXCheckableButton* prohibitionButton; 738 739 private: 740 /// @brief pointer to viewNet 741 GNEViewNet* myViewNet; 742 }; 743 744 /// @brief struct used to group all variables related with Demand checkable Buttons 745 struct DemandCheckableButtons { 746 747 /// @brief default constructor 748 DemandCheckableButtons(GNEViewNet* viewNet); 749 750 /// @brief build checkable buttons 751 void buildDemandCheckableButtons(); 752 753 /// @brief show all Demand Checkable Buttons 754 void showDemandCheckableButtons(); 755 756 /// @brief hide all Demand Checkable Buttons 757 void hideDemandCheckableButtons(); 758 759 /// @brief hide all options menu checks 760 void disableDemandCheckableButtons(); 761 762 /// @brief update Demand checkable buttons 763 void updateDemandCheckableButtons(); 764 765 /// @brief chekable button for edit mode create routes 766 MFXCheckableButton* routeButton; 767 768 /// @brief chekable button for edit mode create vehicles 769 MFXCheckableButton* vehicleButton; 770 771 /// @brief chekable button for edit mode create vehicle type 772 MFXCheckableButton* vehicleTypeButton; 773 774 /// @brief chekable button for edit mode create stops 775 MFXCheckableButton* stopButton; 776 777 private: 778 /// @brief pointer to viewNet 779 GNEViewNet* myViewNet; 780 }; 781 }; 782 783 #endif 784 785 /****************************************************************************/ 786