LCOV - code coverage report
Current view: top level - src/utils/gui/div - GUISelectedStorage.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 2 0.0 %
Date: 2024-05-02 15:31:40 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 1.14