Correcting the structure of the graph's and adaptor's map.
The template assign operators and map iterators can be used for adaptors also.
Some bugfix in the adaptors
New class SwapBpUGraphAdaptor which swaps the two nodeset of the graph.
8 #include "all_include.h"
10 #include <libgnomecanvasmm.h>
12 ///class MapStorage handles NodeMaps and EdgeMaps.
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
22 ///\todo too many things are public!!
27 ///The graph for which the datas are stored.
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;
34 ///The content of the object has changed, update is needed.
37 ///Name of file loaded in object.
38 std::string file_name;
40 ///Stores double type NodeMaps
41 std::map< std::string,Graph::NodeMap<double> * > nodemap_storage;
43 ///Stores double type EdgeMaps
44 std::map< std::string,Graph::EdgeMap<double> * > edgemap_storage;
46 ///Stores the default values for the different visualization node attributes
47 std::vector<Graph::NodeMap<double> > default_nodemaps;
49 ///Stores the default values for the different visualization edge attributes
50 std::vector<Graph::EdgeMap<double> > default_edgemaps;
52 ///Stores the active maps for the different visualization node attributes
53 std::vector< std::string > active_nodemaps;
55 /// Stores the active maps for the different visualization edge attributes
56 std::vector< std::string > active_edgemaps;
58 /// Default values for the maps
59 std::map< std::string, double > nodemap_default;
61 /// Default values for the maps
62 std::map< std::string, double > edgemap_default;
64 bool arrow_pos_read_ok;
67 /// type of the signal emitted if the visualization of the maps might have to be updated.
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;
73 /// Signal emitted on any change made on map values
74 Signal_Prop signal_prop;
76 /// Signal emitted in the case of nodemap addition
78 /// std::string is the
79 ///name of the new map
80 sigc::signal<void, std::string> signal_node_map;
82 /// Signal emitted in the case of edgemap addition
84 /// std::string is the
85 ///name of the new map
86 sigc::signal<void, std::string> signal_edge_map;
89 ///Constructor of MapStorage.
91 ///Its all activity is initializing default values
92 ///for different visualization attributes.
95 ///Destructor of MapStorage
97 ///Maps stored here are created with new. Destructor
98 ///deletes them to free up the reserved memory.
101 /// Registrates if the shown map by any attribute has changed to another.
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);
112 /// Returns the active edgemap shown by a visualization property.
114 /// \param prop is the property
115 ///that shows the requested map.
116 std::string getActiveEdgeMap(int prop);
118 /// Returns the active nodemap shown by a visualization property.
120 /// \param prop is the property
121 ///that shows the requested map.
122 std::string getActiveNodeMap(int prop);
124 /// Returns the names of the edgemaps stored here.
125 std::vector<std::string> getEdgeMapList();
127 /// Returns the names of the nodemaps stored here.
128 std::vector<std::string> getNodeMapList();
130 ///returns \ref signal_prop to be able to connect functions to it
131 Signal_Prop signal_prop_ch();
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;};
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;};
139 ///Adds given map to storage.
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);
150 ///Adds given map to storage. A name and the map itself has to be provided.
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);
160 ///Returns how much nodemaps is stored in \ref MapStorage
161 int numOfNodeMaps() {return nodemap_storage.size();};
163 ///Returns how much edgemaps is stored in \ref MapStorage
164 int numOfEdgeMaps() {return edgemap_storage.size();};
166 ///Returns the maximum value of the given NodeMap.
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);
172 ///Returns the maximum value of the given EdgeMap.
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);
178 ///Returns the minimum value of the given NodeMap.
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);
184 ///Returns the minimum value of the given EdgeMap.
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);
190 ///Returns iterator pointing to the first NodeMap in storage.
192 ///To be able to iterate through each maps this function
193 ///returns an iterator pointing to the first nodemap in
195 std::map< std::string,Graph::NodeMap<double> * >::iterator beginOfNodeMaps(){return nodemap_storage.begin();};
197 ///Returns iterator pointing to the first EdgeMap in storage.
199 ///To be able to iterate through each maps this function
200 ///returns an iterator pointing to the first edgemap in
202 std::map< std::string,Graph::EdgeMap<double> * >::iterator beginOfEdgeMaps(){return edgemap_storage.begin();};
204 ///Returns iterator pointing after the last NodeMap in storage.
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();};
210 ///Returns iterator pointing after the last EdgeMap in storage.
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();};
216 ///Emits \ref signal_prop if mapvalues have changed, and MapStorage gets to know it.
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);
227 ///Read datas from the given filename.
228 int readFromFile(const std::string &);
230 ///Save datas to the given filename.
231 void writeToFile(const std::string &);
233 ///Deletes all datastructures stored here.
236 void ArrowPosReadOK();
239 #endif //MAPSTORAGE_H