gui/mapstorage.h
author deba
Wed, 01 Mar 2006 10:17:25 +0000
changeset 1990 15fb7a4ea6be
parent 1881 f40cdc2057c2
permissions -rw-r--r--
Some classes assumed that the GraphMaps should be inherited
from an ObserverBase. These classes parents replaced with
DefaultMap which cause that the graph maps should not be
inherited from the ObserverBase.
     1 // -*- C++ -*- //
     2 
     3 #ifndef MAPSTORAGE_H
     4 #define MAPSTORAGE_H
     5 
     6 class Mapstorage;
     7 
     8 #include "all_include.h"
     9 #include "xymap.h"
    10 #include <libgnomecanvasmm.h>
    11 
    12 ///class MapStorage handles NodeMaps and EdgeMaps.
    13 
    14 ///Class MapStorage is responsible for storing
    15 ///NodeMaps and EdgeMaps that can be shown later
    16 ///on GUI. Therefore maps can be added to it,
    17 ///and datas over the added maps can be queried.
    18 ///The maps will be stored in an std::map,
    19 ///referenced with their names. Unfortunately at
    20 ///the moment it works only with double type maps
    21 ///
    22 ///\todo too many things are public!!
    23 class MapStorage
    24 {
    25 public:
    26 
    27   ///The graph for which the datas are stored.
    28   Graph graph;
    29   /// the coordinates of the nodes
    30   XYMap<Graph::NodeMap<double> > coords;
    31   /// the coordinates of the arrows on the edges
    32   XYMap<Graph::EdgeMap<double> > arrow_pos;
    33 
    34   ///The content of the object has changed, update is needed.
    35   bool modified;
    36 
    37   ///Name of file loaded in object.
    38   std::string file_name;
    39 
    40   ///Stores double type NodeMaps
    41   std::map< std::string,Graph::NodeMap<double> * > nodemap_storage;
    42 
    43   ///Stores double type EdgeMaps
    44   std::map< std::string,Graph::EdgeMap<double> * > edgemap_storage;
    45 
    46   ///Stores the default values for the different visualization node attributes
    47   std::vector<Graph::NodeMap<double> > default_nodemaps;
    48 
    49   ///Stores the default values for the different visualization edge attributes
    50   std::vector<Graph::EdgeMap<double> > default_edgemaps;
    51 
    52   ///Stores the active maps for the different visualization node attributes
    53   std::vector< std::string > active_nodemaps;
    54 
    55   /// Stores the active maps for the different visualization edge attributes
    56   std::vector< std::string > active_edgemaps;
    57 
    58   /// Default values for the maps
    59   std::map< std::string, double > nodemap_default;
    60 
    61   /// Default values for the maps
    62   std::map< std::string, double > edgemap_default;
    63 
    64   bool arrow_pos_read_ok;
    65 
    66 protected:
    67   /// type of the signal emitted if the visualization of the maps might have to be updated.
    68 
    69   /// bool shows us whether the changed map is edge or nodemap.
    70   /// int tells us the refreshed property
    71   typedef sigc::signal<void, bool, int> Signal_Prop;
    72 
    73   /// Signal emitted on any change made on map values
    74   Signal_Prop signal_prop;
    75 
    76   /// Signal emitted in the case of nodemap addition
    77 
    78   /// std::string is the
    79   ///name of the new map
    80   sigc::signal<void, std::string> signal_node_map;
    81 
    82   /// Signal emitted in the case of edgemap addition
    83 
    84   /// std::string is the
    85   ///name of the new map
    86   sigc::signal<void, std::string> signal_edge_map;
    87 
    88 public:
    89   ///Constructor of MapStorage.
    90 
    91   ///Its all activity is initializing default values
    92   ///for different visualization attributes.
    93   MapStorage();
    94 
    95   ///Destructor of MapStorage
    96 
    97   ///Maps stored here are created with new. Destructor
    98   ///deletes them to free up the reserved memory.
    99   ~MapStorage();
   100 
   101   /// Registrates if the shown map by any attribute has changed to another.
   102 
   103   ///It handles the \ref active_edgemaps and
   104   ///\ref active_nodemaps vectors. It also emits \ref signal_prop signal to let
   105   ///know the interested objects that the visible map of a certain
   106   ///attribute has changed.
   107   ///\param itisedge edgemap or nodemap has changed
   108   ///\param prop the property of which the map is changed
   109   ///\param mapname the visible map
   110   void changeActiveMap(bool itisedge , int prop , std::string mapname);
   111 
   112   /// Returns the active edgemap shown by a visualization property.
   113 
   114   /// \param prop is the property
   115   ///that shows the requested map.
   116   std::string getActiveEdgeMap(int prop);
   117 
   118   /// Returns the active nodemap shown by a visualization property.
   119 
   120   /// \param prop is the property
   121   ///that shows the requested map.
   122   std::string getActiveNodeMap(int prop);
   123 
   124   /// Returns the names of the edgemaps stored here.
   125   std::vector<std::string> getEdgeMapList();
   126 
   127   /// Returns the names of the nodemaps stored here.
   128   std::vector<std::string> getNodeMapList();
   129 
   130   ///returns \ref signal_prop to be able to connect functions to it
   131   Signal_Prop signal_prop_ch();
   132 
   133   ///returns \ref signal_node_map to be able to connect functions to it
   134   sigc::signal<void, std::string> signal_node_map_ch(){return signal_node_map;};
   135 
   136   ///returns \ref signal_edge_map to be able to connect functions to it
   137   sigc::signal<void, std::string> signal_edge_map_ch(){return signal_edge_map;};
   138 
   139   ///Adds given map to storage.
   140 
   141   ///A name and the map itself has to be provided.
   142   ///\param mapname is the name of map
   143   ///\param nodemap is the pointer of the given nodemap
   144   ///\param def the default value of the map. If not given, it will be 0.
   145   ///If new edge is added to graph the value of it in the map will be this.
   146   ///\todo map should be given by reference!
   147   ///\todo why is default value stored?
   148   int addNodeMap(const std::string & mapname,Graph::NodeMap<double> * nodemap, double def=0.0);
   149 
   150   ///Adds given map to storage. A name and the map itself has to be provided.
   151 
   152   ///A name and the map itself has to be provided.
   153   ///\param mapname is the name of map
   154   ///\param edgemap is the pointer of the given edgemap
   155   ///\param def the default value of the map. If not given, it will be 0.
   156   ///If new edge is added to graph the value of it in the map will be this.
   157   ///\todo map should be given by reference!
   158   int addEdgeMap(const std::string & mapname,Graph::EdgeMap<double> * edgemap, double def=0.0);
   159 
   160   ///Returns how much nodemaps is stored in \ref MapStorage
   161   int numOfNodeMaps() {return nodemap_storage.size();};
   162 
   163   ///Returns how much edgemaps is stored in \ref MapStorage
   164   int numOfEdgeMaps() {return edgemap_storage.size();};
   165 
   166   ///Returns the maximum value of the given NodeMap.
   167 
   168   ///NodeMap has to be given by its name.
   169   ///\param name the name of map of which maximum is searched
   170   double maxOfNodeMap(const std::string & name);
   171 
   172   ///Returns the maximum value of the given EdgeMap.
   173 
   174   ///EdgeMap has to be given by its name.
   175   ///\param name the name of map of which maximum is searched
   176   double maxOfEdgeMap(const std::string & name);
   177 
   178   ///Returns the minimum value of the given NodeMap.
   179 
   180   ///NodeMap has to be given by its name.
   181   ///\param name the name of map of which minimum is searched
   182   double minOfNodeMap(const std::string & name);
   183 
   184   ///Returns the minimum value of the given EdgeMap.
   185 
   186   ///EdgeMap has to be given by its name.
   187   ///\param name the name of map of which minimum is searched
   188   double minOfEdgeMap(const std::string & name);
   189 
   190   ///Returns iterator pointing to the first NodeMap in storage.
   191 
   192   ///To be able to iterate through each maps this function
   193   ///returns an iterator pointing to the first nodemap in
   194   ///the storage.
   195   std::map< std::string,Graph::NodeMap<double> * >::iterator beginOfNodeMaps(){return nodemap_storage.begin();};
   196 
   197   ///Returns iterator pointing to the first EdgeMap in storage.
   198 
   199   ///To be able to iterate through each maps this function
   200   ///returns an iterator pointing to the first edgemap in
   201   ///the storage.
   202   std::map< std::string,Graph::EdgeMap<double> * >::iterator beginOfEdgeMaps(){return edgemap_storage.begin();};
   203 
   204   ///Returns iterator pointing after the last NodeMap in storage.
   205 
   206   ///To be able to iterate through each maps this function
   207   ///returns an iterator pointing to the last nodemap in the storage.
   208   std::map< std::string,Graph::NodeMap<double> * >::iterator endOfNodeMaps(){return nodemap_storage.end();};
   209 
   210   ///Returns iterator pointing after the last EdgeMap in storage.
   211 
   212   ///To be able to iterate through each maps this function
   213   ///returns an iterator pointing to the last edgemap in the storage.
   214   std::map< std::string,Graph::EdgeMap<double> * >::iterator endOfEdgeMaps(){return edgemap_storage.end();};
   215 
   216   ///Emits \ref signal_prop if mapvalues have changed, and MapStorage gets to know it.
   217 
   218   ///If values in a map have changed, this function checks, whether it is displayed.
   219   ///This check means searching the given mapname between active maps
   220   ///(\ref active_nodemaps, \ref active_edgemaps). If it is there at a certain property,
   221   ///it emits a signal with the property, where the gotten mapname was found. One signal
   222   ///is emitted for each property displaying the given map.
   223   ///\param itisedge whether the map an edgemap or nodemap
   224   ///\param mapname name of map to visualize
   225   void mapChanged(bool itisedge, std::string mapname);
   226 
   227   ///Read datas from the given filename.
   228   int readFromFile(const std::string &);
   229 
   230   ///Save datas to the given filename.
   231   void writeToFile(const std::string &);
   232 
   233   ///Deletes all datastructures stored here.
   234   void clear();
   235 
   236   void ArrowPosReadOK();
   237 };
   238 
   239 #endif //MAPSTORAGE_H