LCOV - code coverage report
Current view: top level - src/utils/gui/div - GUISelectedStorage.h (source / functions) Coverage Total Hit
Test: lcov.info Lines: 0.0 % 2 0
Test Date: 2024-11-20 15:55:46 Functions: - 0 0

            Line data    Source code
       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              : /****************************************************************************/
      14              : /// @file    GUISelectedStorage.h
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Michael Behrisch
      18              : /// @date    Jun 2004
      19              : ///
      20              : // Storage for "selected" objects
      21              : /****************************************************************************/
      22              : #pragma once
      23              : #include <config.h>
      24              : 
      25              : #include <set>
      26              : #include <string>
      27              : #include <map>
      28              : #include <fstream>
      29              : #include <utils/foxtools/fxheader.h>
      30              : #include <utils/common/UtilExceptions.h>
      31              : #include <utils/gui/globjects/GUIGlObject.h>
      32              : 
      33              : 
      34              : // ===========================================================================
      35              : // class declarations
      36              : // ===========================================================================
      37              : class OutputDevice;
      38              : 
      39              : 
      40              : // ===========================================================================
      41              : // class definitions
      42              : // ===========================================================================
      43              : /**
      44              :  * @class GUISelectedStorage
      45              :  * @brief Storage for "selected" objects
      46              :  *
      47              :  * Object selection is done by storing the "gl-ids" of selectable objects
      48              :  *  (GUIGlObjects) within internal containers of this class. Each id is stored
      49              :  *  twice - in a global container and within one of the type-aware containers.
      50              :  *
      51              :  * This class allows adding and removing objects (their ids) from the lists
      52              :  *  of selected objects, saving the lists into a file, and obtaining the lists
      53              :  *  of selected objects (both all and type-aware).
      54              :  *
      55              :  * Most of the adding/removing methods do not require a GUIGlObjectType as
      56              :  *  parameter, but an integer. This is done to perform the action on objects with
      57              :  *  a yet unknown type - in this case, the type is obtained internally.
      58              :  *
      59              :  * Besides this, the class forces an active view of selected items
      60              :  *  to refresh its contents if an item is added/removed. For this, an
      61              :  *  FXWindow has to make itself visible to GUISelectedStorage.
      62              :  *
      63              :  * @see GUIGlObject
      64              :  * @see GUIGlObjectType
      65              :  * @see GUIDialog_GLChosenEditor
      66              :  */
      67              : class GUISelectedStorage {
      68              : 
      69              : public:
      70              :     /// @class update target
      71            0 :     class UpdateTarget {
      72              : 
      73              :     public:
      74              :         /// @brief virtual destructor
      75            0 :         virtual ~UpdateTarget() {};
      76              : 
      77              :         /// @brief called when selection is updated
      78              :         virtual void selectionUpdated() = 0;
      79              :     };
      80              : 
      81              : public:
      82              :     /// @brief Constructor
      83              :     GUISelectedStorage();
      84              : 
      85              :     /// @brief Destructor
      86              :     ~GUISelectedStorage();
      87              : 
      88              :     /** @brief Returns the information whether the object with the given type and id is selected
      89              :      *
      90              :      * If the type is ==-1, it is determined, first. If it could not be obtained,
      91              :      *  or if the type is not covered by any selection container, a ProcessError is thrown.
      92              :      *
      93              :      * Otherwise, the container holding objects of the determined type is
      94              :      *  asked whether the given id is stored using SingleTypeSelections::isSelected().
      95              :      *
      96              :      * @param[in] type The type of the object (GUIGlObjectType or -1)
      97              :      * @param[in] id The id of the object
      98              :      * @return Whether the object is selected
      99              :      * @exception ProcessError If the object is not known or the type is not covered by a sub-container
     100              :      * @see GUIGlObject
     101              :      * @see GUIGlObjectType
     102              :      * @see SingleTypeSelections::isSelected
     103              :      */
     104              :     bool isSelected(GUIGlObjectType type, GUIGlID id);
     105              : 
     106              :     bool isSelected(const GUIGlObject* o);
     107              : 
     108              :     /** @brief Adds the object with the given id
     109              :      *
     110              :      * The id of the object is added to the sub-container that is
     111              :      *  responsible for objects of the determined type using SingleTypeSelections::select
     112              :      *  and to the global list of chosen items if it is not already there.
     113              :      *
     114              :      * The optionally listening window is informed about the change.
     115              :      *
     116              :      * @param[in] id The id of the object
     117              :      * @exception ProcessError If the object is not known or the type is not covered by a sub-container
     118              :      * @see GUIGlObject
     119              :      * @see GUIGlObjectType
     120              :      * @see SingleTypeSelections::select
     121              :      * @see GUIDialog_GLChosenEditor
     122              :      */
     123              :     void select(GUIGlID id, bool update = true);
     124              : 
     125              :     /** @brief Deselects the object with the given id
     126              :      *
     127              :      * The id of the object is removed from the sub-container that is
     128              :      *  responsible for objects of the determined type using SingleTypeSelections::deselect
     129              :      *  and from the global list of chosen items if it is there.
     130              :      *
     131              :      * The optionally listening UpdateTarget is informed about the change.
     132              :      *
     133              :      * @param[in] id The id of the object
     134              :      * @exception ProcessError If the object is not known or the type is not covered by a sub-container
     135              :      * @see GUIGlObject
     136              :      * @see GUIGlObjectType
     137              :      * @see SingleTypeSelections::deselect
     138              :      * @see GUIDialog_GLChosenEditor
     139              :      */
     140              :     void deselect(GUIGlID id);
     141              : 
     142              :     /** @brief Toggles selection of an object
     143              :      *
     144              :      * If the object can not be obtained a ProcessError is thrown.
     145              :      *
     146              :      * Otherwise, it is determined whether the object is already selected or not.
     147              :      *  If so, it is deselected by calling "deselect", otherwise it is selected
     148              :      *  via "select".
     149              :      *
     150              :      * @param[in] id The id of the object
     151              :      * @exception ProcessError If the object is not known or the type is not covered by a sub-container
     152              :      * @see GUIGlObject
     153              :      * @see deselect
     154              :      * @see select
     155              :      */
     156              :     void toggleSelection(GUIGlID id);
     157              : 
     158              :     /// @brief Returns the set of ids of all selected objects
     159              :     const std::set<GUIGlID>& getSelected() const;
     160              : 
     161              :     /**  @brief Returns the set of ids of all selected objects' of a certain type
     162              :      *
     163              :      * @param[in] type The type of the object
     164              :      * @return A set containing the ids of all selected objects of the given type
     165              :      * @see SingleTypeSelections::getSelected
     166              :      */
     167              :     const std::set<GUIGlID>& getSelected(GUIGlObjectType type);
     168              : 
     169              :     /** @brief Clears the list of selected objects
     170              :      *
     171              :      * Clears the global container and all sub-containers via SingleTypeSelections::clear.
     172              :      *
     173              :      * The optionally listening UpdateTarget is informed about the change.
     174              :      */
     175              :     void clear();
     176              : 
     177              :     /// @brief inform the update target of earlier changes
     178              :     void notifyChanged();
     179              : 
     180              :     /** @brief Loads a selection list (optionally with restricted type)
     181              :      *
     182              :      * @param[in] filename The name of the file to load the list of selected objects from
     183              :      * @param[in] type The type of the objects to load if changed from default
     184              :      * @return error messages if errors occurred or the empty string
     185              :      */
     186              :     std::string load(const std::string& filename, GUIGlObjectType type = GLO_MAX);
     187              : 
     188              :     /** @brief Loads a selection list (optionally with restricted type) and
     189              :      * returns the ids of all active objects
     190              :      *
     191              :      * @param[in] filename The name of the file to load the list of selected objects from
     192              :      * @param[out] msg Any error messages while loading or the empty string
     193              :      * @param[in] type The type of the objects to load if changed from default
     194              :      * @param[in] maxErrors The maximum Number of errors to return
     195              :      * @return the set of loaded ids
     196              :      */
     197              :     std::set<GUIGlID> loadIDs(const std::string& filename, std::string& msgOut, GUIGlObjectType type = GLO_MAX, int maxErrors = 16);
     198              : 
     199              :     /** @brief Saves a selection list
     200              :      *
     201              :      * @param[in] type The type of the objects to save
     202              :      * @param[in] filename The name of the file to save the list of selected objects into
     203              :      */
     204              :     void save(GUIGlObjectType type, const std::string& filename);
     205              : 
     206              :     /** @brief Saves the combined selection of all types
     207              :      *
     208              :      * @param[in] filename The name of the file to save the list of selected objects into
     209              :      */
     210              :     void save(const std::string& filename) const;
     211              : 
     212              :     /** @brief Adds a dialog to be updated
     213              :      * @param[in] updateTarget the callback for selection changes
     214              :      */
     215              :     void add2Update(UpdateTarget* updateTarget);
     216              : 
     217              :     /// @brief @brief Removes the dialog to be updated
     218              :     void remove2Update();
     219              : 
     220              :     /**
     221              :      * @class SingleTypeSelections
     222              :      * @brief A container for ids of selected objects of a certain type.
     223              :      */
     224              :     class SingleTypeSelections {
     225              : 
     226              :     public:
     227              :         /// @brief Constructor
     228              :         SingleTypeSelections();
     229              : 
     230              :         /// @brief Destructor
     231              :         ~SingleTypeSelections();
     232              : 
     233              :         /** @brief Returns the information whether the object with the given id is qithin the selection
     234              :          * @param[in] id The id of the object
     235              :          * @return Whether the object is selected
     236              :          */
     237              :         bool isSelected(GUIGlID id);
     238              : 
     239              :         /** @brief Adds the object with the given id to the list of selected objects
     240              :          * @param[in] id The id of the object
     241              :          */
     242              :         void select(GUIGlID id);
     243              : 
     244              :         /** @brief Deselects the object with the given id from the list of selected objects
     245              :          * @param[in] id The id of the object
     246              :          */
     247              :         void deselect(GUIGlID id);
     248              : 
     249              :         /// @brief Clears the list of selected objects
     250              :         void clear();
     251              : 
     252              :         /** @brief Saves the list of selected objects to a file named as given
     253              :          * @param[in] filename The name of the file to save the list into
     254              :          */
     255              :         void save(const std::string& filename);
     256              : 
     257              :         /** @brief Returns the list of selected ids
     258              :          * @return A list containing the ids of all selected objects
     259              :          */
     260              :         const std::set<GUIGlID>& getSelected() const;
     261              : 
     262              :     private:
     263              :         /// @brief The list of selected ids
     264              :         std::set<GUIGlID> mySelected;
     265              : 
     266              :     };
     267              : 
     268              :     /// @brief set SingleTypeSelections as friend class
     269              :     friend class SingleTypeSelections;
     270              : 
     271              : 
     272              : private:
     273              :     /// @brief map with the selections
     274              :     std::map<GUIGlObjectType, SingleTypeSelections> mySelections;
     275              : 
     276              :     /// @brief List of selected objects
     277              :     std::set<GUIGlID> myAllSelected;
     278              : 
     279              :     /// @brief The dialog to be updated
     280              :     UpdateTarget* myUpdateTarget;
     281              : 
     282              :     /// @brief load items into the given set, optionally restricting to type
     283              :     std::string load(GUIGlObjectType type, const std::string& filename, bool restrictType, std::set<GUIGlID>& into);
     284              : 
     285              :     /// @brief saves items from the given set
     286              :     static void save(const std::string& filename, const std::set<GUIGlID>& ids);
     287              : };
        

Generated by: LCOV version 2.0-1