graph_displayer_canvas-event.cc
changeset 194 6b2b718420eb
parent 187 b465e2c34f23
child 200 c7ae8642a8d8
     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);