1.1 --- a/graph_displayer_canvas-event.cc Wed Feb 28 15:19:20 2007 +0000
1.2 +++ b/graph_displayer_canvas-event.cc Wed Feb 28 18:20:28 2007 +0000
1.3 @@ -16,7 +16,9 @@
1.4 *
1.5 */
1.6
1.7 -#include "graph_displayer_canvas.h"
1.8 +#include <graph_displayer_canvas.h>
1.9 +#include <mapstorage.h>
1.10 +#include <nbtab.h>
1.11 #include <cmath>
1.12
1.13
1.14 @@ -145,7 +147,7 @@
1.15
1.16 active_item=(get_item_at(clicked_x, clicked_y));
1.17 active_node=INVALID;
1.18 - for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.19 + for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.20 {
1.21 if(nodesmap[i]==active_item)
1.22 {
1.23 @@ -168,7 +170,7 @@
1.24 //we only have to do sg. if the mouse button is pressed AND the click was on a node that was found in the set of nodes
1.25 if(active_node!=INVALID)
1.26 {
1.27 - (mytab.mapstorage).modified = true;
1.28 + (mytab.mapstorage)->modified = true;
1.29
1.30 //new coordinates will be the old values,
1.31 //because the item will be moved to the
1.32 @@ -190,25 +192,25 @@
1.33 // reposition the coordinates text
1.34 std::ostringstream ostr;
1.35 ostr << "(" <<
1.36 - (mytab.mapstorage).coords[active_node].x << ", " <<
1.37 - (mytab.mapstorage).coords[active_node].y << ")";
1.38 + (mytab.mapstorage)->coords[active_node].x << ", " <<
1.39 + (mytab.mapstorage)->coords[active_node].y << ")";
1.40 double radius =
1.41 (nodesmap[active_node]->property_x2().get_value() -
1.42 nodesmap[active_node]->property_x1().get_value()) / 2.0;
1.43 if (coord_text)
1.44 {
1.45 coord_text->property_text().set_value(ostr.str());
1.46 - coord_text->property_x().set_value((mytab.mapstorage).coords[active_node].x +
1.47 + coord_text->property_x().set_value((mytab.mapstorage)->coords[active_node].x +
1.48 radius);
1.49 - coord_text->property_y().set_value((mytab.mapstorage).coords[active_node].y -
1.50 + coord_text->property_y().set_value((mytab.mapstorage)->coords[active_node].y -
1.51 radius);
1.52 }
1.53 else
1.54 {
1.55 coord_text = new Gnome::Canvas::Text(
1.56 displayed_graph,
1.57 - (mytab.mapstorage).coords[active_node].x + radius,
1.58 - (mytab.mapstorage).coords[active_node].y - radius,
1.59 + (mytab.mapstorage)->coords[active_node].x + radius,
1.60 + (mytab.mapstorage)->coords[active_node].y - radius,
1.61 ostr.str());
1.62 coord_text->property_fill_color().set_value("black");
1.63 coord_text->property_anchor().set_value(Gtk::ANCHOR_SOUTH_WEST);
1.64 @@ -299,35 +301,35 @@
1.65 }
1.66
1.67 case GDK_BUTTON_RELEASE:
1.68 - (mytab.mapstorage).modified = true;
1.69 + (mytab.mapstorage)->modified = true;
1.70
1.71 is_drawn=true;
1.72
1.73 isbutton=1;
1.74
1.75 - active_node=(mytab.mapstorage).graph.addNode();
1.76 + active_node=(mytab.mapstorage)->graph.addNode();
1.77
1.78 //initiating values corresponding to new node in maps
1.79
1.80 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
1.81
1.82 // update coordinates
1.83 - (mytab.mapstorage).coords.set(active_node, XY(clicked_x, clicked_y));
1.84 + (mytab.mapstorage)->coords.set(active_node, XY(clicked_x, clicked_y));
1.85
1.86 // update all other maps
1.87 for (std::map<std::string, Graph::NodeMap<double>*>::const_iterator it =
1.88 - (mytab.mapstorage).nodemap_storage.begin(); it !=
1.89 - (mytab.mapstorage).nodemap_storage.end(); ++it)
1.90 + (mytab.mapstorage)->nodemap_storage.begin(); it !=
1.91 + (mytab.mapstorage)->nodemap_storage.end(); ++it)
1.92 {
1.93 if ((it->first != "coordinates_x") &&
1.94 (it->first != "coordinates_y"))
1.95 {
1.96 (*(it->second))[active_node] =
1.97 - (mytab.mapstorage).nodemap_default[it->first];
1.98 + (mytab.mapstorage)->nodemap_default[it->first];
1.99 }
1.100 }
1.101 // increment the id map's default value
1.102 - (mytab.mapstorage).nodemap_default["label"] += 1.0;
1.103 + (mytab.mapstorage)->nodemap_default["label"] += 1.0;
1.104
1.105 nodesmap[active_node]=new Gnome::Canvas::Ellipse(displayed_graph,
1.106 clicked_x-20, clicked_y-20, clicked_x+20, clicked_y+20);
1.107 @@ -377,7 +379,7 @@
1.108
1.109 active_item=(get_item_at(clicked_x, clicked_y));
1.110 active_node=INVALID;
1.111 - for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.112 + for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.113 {
1.114 if(nodesmap[i]==active_item)
1.115 {
1.116 @@ -406,7 +408,7 @@
1.117 window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
1.118 target_item=(get_item_at(clicked_x, clicked_y));
1.119 Node target_node=INVALID;
1.120 - for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.121 + for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.122 {
1.123 if(nodesmap[i]==target_item)
1.124 {
1.125 @@ -416,31 +418,31 @@
1.126 //the clicked item is a node, the edge can be drawn
1.127 if(target_node!=INVALID)
1.128 {
1.129 - (mytab.mapstorage).modified = true;
1.130 + (mytab.mapstorage)->modified = true;
1.131
1.132 *(nodesmap[target_node]) <<
1.133 Gnome::Canvas::Properties::fill_color("red");
1.134
1.135 //creating new edge
1.136 - active_edge=(mytab.mapstorage).graph.addEdge(active_node,
1.137 + active_edge=(mytab.mapstorage)->graph.addEdge(active_node,
1.138 target_node);
1.139
1.140 // update maps
1.141 for (std::map<std::string,
1.142 Graph::EdgeMap<double>*>::const_iterator it =
1.143 - (mytab.mapstorage).edgemap_storage.begin(); it !=
1.144 - (mytab.mapstorage).edgemap_storage.end(); ++it)
1.145 + (mytab.mapstorage)->edgemap_storage.begin(); it !=
1.146 + (mytab.mapstorage)->edgemap_storage.end(); ++it)
1.147 {
1.148 (*(it->second))[active_edge] =
1.149 - (mytab.mapstorage).edgemap_default[it->first];
1.150 + (mytab.mapstorage)->edgemap_default[it->first];
1.151 }
1.152 // increment the id map's default value
1.153 - (mytab.mapstorage).edgemap_default["label"] += 1.0;
1.154 + (mytab.mapstorage)->edgemap_default["label"] += 1.0;
1.155
1.156 if(target_node!=active_node)
1.157 {
1.158 // set the coordinates of the arrow on the new edge
1.159 - MapStorage& ms = mytab.mapstorage;
1.160 + MapStorage& ms = *mytab.mapstorage;
1.161 ms.arrow_pos.set(active_edge,
1.162 (ms.coords[ms.graph.source(active_edge)] +
1.163 ms.coords[ms.graph.target(active_edge)])/ 2.0);
1.164 @@ -452,7 +454,7 @@
1.165 else
1.166 {
1.167 // set the coordinates of the arrow on the new edge
1.168 - MapStorage& ms = mytab.mapstorage;
1.169 + MapStorage& ms = *mytab.mapstorage;
1.170 ms.arrow_pos.set(active_edge,
1.171 (ms.coords[ms.graph.source(active_edge)] +
1.172 XY(0.0, 80.0)));
1.173 @@ -463,7 +465,7 @@
1.174 }
1.175
1.176 //initializing edge-text as well, to empty string
1.177 - XY text_pos=mytab.mapstorage.arrow_pos[active_edge];
1.178 + XY text_pos=mytab.mapstorage->arrow_pos[active_edge];
1.179 text_pos+=(XY(10,10));
1.180
1.181 edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph,
1.182 @@ -497,7 +499,7 @@
1.183 }
1.184 if(target_item)
1.185 {
1.186 - propertyUpdate((mytab.mapstorage).graph.target(active_edge),N_COLOR);
1.187 + propertyUpdate((mytab.mapstorage)->graph.target(active_edge),N_COLOR);
1.188 target_item=NULL;
1.189 }
1.190 active_node=INVALID;
1.191 @@ -521,7 +523,7 @@
1.192 active_node=INVALID;
1.193 active_edge=INVALID;
1.194 //was it a node?
1.195 - for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.196 + for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.197 {
1.198 if(nodesmap[i]==active_item)
1.199 {
1.200 @@ -531,7 +533,7 @@
1.201 //or was it an edge?
1.202 if(active_node==INVALID)
1.203 {
1.204 - for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.205 + for (EdgeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.206 {
1.207 if(edgesmap[i]->getLine()==active_item)
1.208 {
1.209 @@ -560,16 +562,16 @@
1.210 //a node was found
1.211 if(active_node!=INVALID)
1.212 {
1.213 - (mytab.mapstorage).modified = true;
1.214 + (mytab.mapstorage)->modified = true;
1.215
1.216 std::set<Graph::Edge> edges_to_delete;
1.217
1.218 - for(OutEdgeIt e((mytab.mapstorage).graph,active_node);e!=INVALID;++e)
1.219 + for(OutEdgeIt e((mytab.mapstorage)->graph,active_node);e!=INVALID;++e)
1.220 {
1.221 edges_to_delete.insert(e);
1.222 }
1.223
1.224 - for(InEdgeIt e((mytab.mapstorage).graph,active_node);e!=INVALID;++e)
1.225 + for(InEdgeIt e((mytab.mapstorage)->graph,active_node);e!=INVALID;++e)
1.226 {
1.227 edges_to_delete.insert(e);
1.228 }
1.229 @@ -635,7 +637,7 @@
1.230 active_item=(get_item_at(clicked_x, clicked_y));
1.231
1.232 //find the activated item between text of nodes
1.233 - for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.234 + for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.235 {
1.236 //at the same time only one can be active
1.237 if(nodetextmap[i]==active_item)
1.238 @@ -647,7 +649,7 @@
1.239 //if there was not, search for it between nodes
1.240 if(clicked_node==INVALID)
1.241 {
1.242 - for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.243 + for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.244 {
1.245 //at the same time only one can be active
1.246 if(nodesmap[i]==active_item)
1.247 @@ -660,7 +662,7 @@
1.248 if(clicked_node==INVALID)
1.249 {
1.250 //find the activated item between texts
1.251 - for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.252 + for (EdgeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.253 {
1.254 //at the same time only one can be active
1.255 if(edgetextmap[i]==active_item)
1.256 @@ -672,7 +674,7 @@
1.257 //if it was not between texts, search for it between edges
1.258 if(clicked_edge==INVALID)
1.259 {
1.260 - for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.261 + for (EdgeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.262 {
1.263 //at the same time only one can be active
1.264 if((edgesmap[i]->getLine())==active_item)
1.265 @@ -714,7 +716,7 @@
1.266 break;
1.267 case Gtk::RESPONSE_ACCEPT:
1.268 double new_value = spin.get_value();
1.269 - (*(mytab.mapstorage).nodemap_storage[nodemap_to_edit])[active_node] =
1.270 + (*(mytab.mapstorage)->nodemap_storage[nodemap_to_edit])[active_node] =
1.271 new_value;
1.272 std::ostringstream ostr;
1.273 ostr << new_value;
1.274 @@ -757,7 +759,7 @@
1.275 break;
1.276 case Gtk::RESPONSE_ACCEPT:
1.277 double new_value = spin.get_value();
1.278 - (*(mytab.mapstorage).edgemap_storage[edgemap_to_edit])[active_edge] =
1.279 + (*(mytab.mapstorage)->edgemap_storage[edgemap_to_edit])[active_edge] =
1.280 new_value;
1.281 std::ostringstream ostr;
1.282 ostr << new_value;
1.283 @@ -782,14 +784,14 @@
1.284 {
1.285 delete(nodetextmap[node_to_delete]);
1.286 delete(nodesmap[node_to_delete]);
1.287 - (mytab.mapstorage).graph.erase(node_to_delete);
1.288 + (mytab.mapstorage)->graph.erase(node_to_delete);
1.289 }
1.290
1.291 void GraphDisplayerCanvas::deleteItem(Edge edge_to_delete)
1.292 {
1.293 delete(edgetextmap[edge_to_delete]);
1.294 delete(edgesmap[edge_to_delete]);
1.295 - (mytab.mapstorage).graph.erase(edge_to_delete);
1.296 + (mytab.mapstorage)->graph.erase(edge_to_delete);
1.297 }
1.298
1.299 void GraphDisplayerCanvas::textReposition(XY new_place)
1.300 @@ -809,7 +811,7 @@
1.301 }
1.302 else
1.303 {
1.304 - for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
1.305 + for (EdgeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i)
1.306 {
1.307 if(edgesmap[i]==active_bre)
1.308 {
1.309 @@ -851,62 +853,62 @@
1.310 nodetextmap[moved_node]->move(dx, dy);
1.311
1.312 // the new coordinates of the centre of the node
1.313 - double coord_x = dx + (mytab.mapstorage).coords[moved_node].x;
1.314 - double coord_y = dy + (mytab.mapstorage).coords[moved_node].y;
1.315 + double coord_x = dx + (mytab.mapstorage)->coords[moved_node].x;
1.316 + double coord_y = dy + (mytab.mapstorage)->coords[moved_node].y;
1.317
1.318 // write back the new coordinates to the coords map
1.319 - (mytab.mapstorage).coords.set(moved_node, XY(coord_x, coord_y));
1.320 + (mytab.mapstorage)->coords.set(moved_node, XY(coord_x, coord_y));
1.321
1.322 //all the edges connected to the moved point has to be redrawn
1.323 - for(OutEdgeIt ei((mytab.mapstorage).graph,moved_node);ei!=INVALID;++ei)
1.324 + for(OutEdgeIt ei((mytab.mapstorage)->graph,moved_node);ei!=INVALID;++ei)
1.325 {
1.326 XY arrow_pos;
1.327
1.328 - if (mytab.mapstorage.graph.source(ei) == mytab.mapstorage.graph.target(ei))
1.329 + if (mytab.mapstorage->graph.source(ei) == mytab.mapstorage->graph.target(ei))
1.330 {
1.331 - arrow_pos = mytab.mapstorage.arrow_pos[ei] + XY(dx, dy);
1.332 + arrow_pos = mytab.mapstorage->arrow_pos[ei] + XY(dx, dy);
1.333 }
1.334 else
1.335 {
1.336 XY moved_node_1(coord_x - dx, coord_y - dy);
1.337 XY moved_node_2(coord_x, coord_y);
1.338 - Node target = mytab.mapstorage.graph.target(ei);
1.339 - XY fix_node(mytab.mapstorage.coords[target].x,
1.340 - mytab.mapstorage.coords[target].y);
1.341 - XY old_arrow_pos(mytab.mapstorage.arrow_pos[ei]);
1.342 + Node target = mytab.mapstorage->graph.target(ei);
1.343 + XY fix_node(mytab.mapstorage->coords[target].x,
1.344 + mytab.mapstorage->coords[target].y);
1.345 + XY old_arrow_pos(mytab.mapstorage->arrow_pos[ei]);
1.346
1.347 arrow_pos = calcArrowPos(moved_node_1, moved_node_2, fix_node, old_arrow_pos, isbutton);
1.348 }
1.349
1.350 - mytab.mapstorage.arrow_pos.set(ei, arrow_pos);
1.351 + mytab.mapstorage->arrow_pos.set(ei, arrow_pos);
1.352 edgesmap[ei]->draw();
1.353
1.354 //reposition of edgetext
1.355 - XY text_pos=mytab.mapstorage.arrow_pos[ei];
1.356 + XY text_pos=mytab.mapstorage->arrow_pos[ei];
1.357 text_pos+=(XY(10,10));
1.358 edgetextmap[ei]->property_x().set_value(text_pos.x);
1.359 edgetextmap[ei]->property_y().set_value(text_pos.y);
1.360 }
1.361
1.362 - for(InEdgeIt ei((mytab.mapstorage).graph,moved_node);ei!=INVALID;++ei)
1.363 + for(InEdgeIt ei((mytab.mapstorage)->graph,moved_node);ei!=INVALID;++ei)
1.364 {
1.365 - if (mytab.mapstorage.graph.source(ei) != mytab.mapstorage.graph.target(ei))
1.366 + if (mytab.mapstorage->graph.source(ei) != mytab.mapstorage->graph.target(ei))
1.367 {
1.368 XY moved_node_1(coord_x - dx, coord_y - dy);
1.369 XY moved_node_2(coord_x, coord_y);
1.370 - Node source = mytab.mapstorage.graph.source(ei);
1.371 - XY fix_node(mytab.mapstorage.coords[source].x,
1.372 - mytab.mapstorage.coords[source].y);
1.373 - XY old_arrow_pos(mytab.mapstorage.arrow_pos[ei]);
1.374 + Node source = mytab.mapstorage->graph.source(ei);
1.375 + XY fix_node(mytab.mapstorage->coords[source].x,
1.376 + mytab.mapstorage->coords[source].y);
1.377 + XY old_arrow_pos(mytab.mapstorage->arrow_pos[ei]);
1.378
1.379 XY arrow_pos;
1.380 arrow_pos = calcArrowPos(moved_node_1, moved_node_2, fix_node, old_arrow_pos, isbutton);
1.381
1.382 - mytab.mapstorage.arrow_pos.set(ei, arrow_pos);
1.383 + mytab.mapstorage->arrow_pos.set(ei, arrow_pos);
1.384 edgesmap[ei]->draw();
1.385
1.386 //reposition of edgetext
1.387 - XY text_pos=mytab.mapstorage.arrow_pos[ei];
1.388 + XY text_pos=mytab.mapstorage->arrow_pos[ei];
1.389 text_pos+=(XY(10,10));
1.390 edgetextmap[ei]->property_x().set_value(text_pos.x);
1.391 edgetextmap[ei]->property_y().set_value(text_pos.y);