mapstorage.h
author hegyi
Thu, 05 Jan 2006 12:30:09 +0000
branchgui
changeset 108 bf355fd6563e
parent 98 f60f89147531
child 111 ab3107255754
permissions -rw-r--r--
Several changes. \n If new map is added to mapstorage it emits signal with the name of the new map. This was important, because from now on not only tha mapwin should be updated. \n Furthermore algobox gets a pointer to mapstorage instead of only the mapnames from it. This is important because without it it would be complicated to pass all of the required maps to algobox.
     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 is responsible for storing
    13 ///NodeMaps and EdgeMaps that can be shown later
    14 ///on GUI. Therefore maps can be added to it,
    15 ///and datas over the added maps can be queried.
    16 ///The maps will be stored in an std::map,
    17 ///referenced with their names. Unfortunately at
    18 ///the moment it works only with double type maps
    19 ///
    20 ///\todo too many things are public!!
    21 class MapStorage
    22 {
    23 public:
    24 
    25   Graph graph;
    26   /// the coordinates of the nodes
    27   XYMap<Graph::NodeMap<double> > coords;
    28   /// the coordinates of the arrows on the edges
    29   XYMap<Graph::EdgeMap<double> > arrow_pos;
    30 
    31   bool modified;
    32   std::string file_name;
    33 
    34   ///Stores double type NodeMaps
    35   std::map< std::string,Graph::NodeMap<double> * > nodemap_storage;
    36 
    37   ///Stores double type EdgeMaps
    38   std::map< std::string,Graph::EdgeMap<double> * > edgemap_storage;
    39 
    40   //Stores the default values for the different visualization node attributes
    41   std::vector<Graph::NodeMap<double> > default_nodemaps;
    42 
    43   //Stores the default values for the different visualization edge attributes
    44   std::vector<Graph::EdgeMap<double> > default_edgemaps;
    45 
    46   //Stores the active maps for the different visualization node attributes
    47   std::vector< std::string > active_nodemaps;
    48 
    49   //Stores the active maps for the different visualization edge attributes
    50   std::vector< std::string > active_edgemaps;
    51 
    52   // Default values for the maps
    53   std::map< std::string, double > nodemap_default;
    54 
    55   // Default values for the maps
    56   std::map< std::string, double > edgemap_default;
    57 
    58   bool arrow_pos_read_ok;
    59 
    60 protected:
    61   typedef sigc::signal<void, bool, int> Signal_Prop;
    62   Signal_Prop signal_prop;
    63   sigc::signal<void, std::string> signal_node_map;
    64   sigc::signal<void, std::string> signal_edge_map;
    65 
    66 public:
    67   ///Constructor of MapStorage. Expects the Graph of
    68   ///which maps will be stored in it.
    69   ///Its all activity is initializing default values
    70   ///for different visualization attributes
    71   ///
    72   ///\param graph is the graph for which the maps are stored in this object.
    73   MapStorage();
    74 
    75   ~MapStorage();
    76 
    77   void changeActiveMap(bool, int, std::string);
    78 
    79   std::string getActiveEdgeMap(int);
    80   std::string getActiveNodeMap(int);
    81 
    82   std::vector<std::string> getEdgeMapList();
    83   std::vector<std::string> getNodeMapList();
    84 
    85   Signal_Prop signal_prop_ch();
    86 
    87   sigc::signal<void, std::string> signal_node_map_ch(){return signal_node_map;};
    88   sigc::signal<void, std::string> signal_edge_map_ch(){return signal_edge_map;};
    89 
    90   ///Adds given map to storage. A name and the map itself has to be provided.
    91   ///\param name is the name of map
    92   ///\nodemap is the pointer of the given nodemap
    93   ///\todo map should be given by reference!
    94   int addNodeMap(const std::string &,Graph::NodeMap<double> *, double);
    95 
    96   ///Adds given map to storage. A name and the map itself has to be provided.
    97   ///\param name is the name of map
    98   ///\edgemap is the pointer of the given edgemap
    99   ///\todo map should be given by reference!
   100   int addEdgeMap(const std::string &,Graph::EdgeMap<double> *, double);
   101 
   102   ///Returns how much nodemaps is stored in \ref MapStorage
   103   int numOfNodeMaps() {return nodemap_storage.size();};
   104 
   105   ///Returns how much edgemaps is stored in \ref MapStorage
   106   int numOfEdgeMaps() {return edgemap_storage.size();};
   107 
   108   ///Returns the maximum value of the given NodeMap. NodeMap has to be given by its name.
   109   ///\param name is the name of map of which maximum is searched
   110   double maxOfNodeMap(const std::string &);
   111 
   112   ///Returns the maximum value of the given EdgeMap. EdgeMap has to be given by its name.
   113   ///\param name is the name of map of which maximum is searched
   114   double maxOfEdgeMap(const std::string &);
   115 
   116   ///Returns the minimum value of the given NodeMap. NodeMap has to be given by its name.
   117   ///\param name is the name of map of which minimum is searched
   118   double minOfNodeMap(const std::string &);
   119 
   120   ///Returns the minimum value of the given EdgeMap. EdgeMap has to be given by its name.
   121   ///\param name is the name of map of which minimum is searched
   122   double minOfEdgeMap(const std::string &);
   123 
   124   ///To be able to iterate through each maps this function returns an iterator pointing to the first nodemap in the storage.
   125   std::map< std::string,Graph::NodeMap<double> * >::iterator beginOfNodeMaps(){return nodemap_storage.begin();};
   126 
   127   ///To be able to iterate through each maps this function returns an iterator pointing to the first edgemap in the storage.
   128   std::map< std::string,Graph::EdgeMap<double> * >::iterator beginOfEdgeMaps(){return edgemap_storage.begin();};
   129 
   130   ///To be able to iterate through each maps this function returns an iterator pointing to the last nodemap in the storage.
   131   std::map< std::string,Graph::NodeMap<double> * >::iterator endOfNodeMaps(){return nodemap_storage.end();};
   132 
   133   ///To be able to iterate through each maps this function returns an iterator pointing to the last edgemap in the storage.
   134   std::map< std::string,Graph::EdgeMap<double> * >::iterator endOfEdgeMaps(){return edgemap_storage.end();};
   135 
   136   int readFromFile(const std::string &);
   137   void writeToFile(const std::string &);
   138 
   139   void clear();
   140 
   141   void ArrowPosReadOK();
   142 };
   143 
   144 #endif //MAPSTORAGE_H