graph_displayer_canvas-event.cc
branchgui
changeset 28 fa28f1071bd6
parent 27 e2c86ae158cf
child 30 f70bbee5350a
     1.1 --- a/graph_displayer_canvas-event.cc	Fri Jun 24 07:58:18 2005 +0000
     1.2 +++ b/graph_displayer_canvas-event.cc	Fri Jun 24 18:16:12 2005 +0000
     1.3 @@ -99,7 +99,9 @@
     1.4          double dx=e->motion.x-clicked_x;
     1.5          double dy=e->motion.y-clicked_y;
     1.6  
     1.7 +	//repositioning node and its text
     1.8          active_item->move(dx, dy);
     1.9 +	nodetextmap[active_node]->move(dx, dy);
    1.10  
    1.11          clicked_x=e->motion.x;
    1.12          clicked_y=e->motion.y;
    1.13 @@ -129,6 +131,7 @@
    1.14  		edgesmap[ei]->set_points(coos,true);
    1.15  	      }
    1.16  
    1.17 +	    //reposition of edgetext
    1.18  	    xy<double> text_pos=edgesmap[ei]->get_arrow_pos();
    1.19  	    text_pos+=(xy<double>(10,10));
    1.20  	    edgetextmap[ei]->property_x().set_value(text_pos.x);
    1.21 @@ -189,6 +192,12 @@
    1.22        *(nodesmap[active_node]) << Gnome::Canvas::Properties::fill_color("red");
    1.23        *(nodesmap[active_node]) << Gnome::Canvas::Properties::outline_color("black");
    1.24        (nodesmap[active_node])->show();
    1.25 +
    1.26 +      nodetextmap[active_node]=new Gnome::Canvas::Text(displayed_graph, clicked_x+node_property_defaults[N_RADIUS]+5, clicked_y+node_property_defaults[N_RADIUS]+5, "");
    1.27 +      nodetextmap[active_node]->property_fill_color().set_value("darkblue");
    1.28 +
    1.29 +      mapwin->update_node(active_node);
    1.30 +
    1.31        break;
    1.32  
    1.33        //move the new node
    1.34 @@ -272,39 +281,50 @@
    1.35  	      //the clicked item is a node, the edge can be drawn
    1.36  	      if(target_node!=INVALID)
    1.37  		{
    1.38 -		  *(nodesmap[target_node]) << Gnome::Canvas::Properties::fill_color("red");
    1.39 +		  if(target_node!=active_node)		
    1.40 +		    {
    1.41 +		      *(nodesmap[target_node]) << Gnome::Canvas::Properties::fill_color("red");
    1.42  
    1.43 -		  //creating new edge
    1.44 -		  active_edge=EdgeIt(g,g.addEdge(active_node, target_node));
    1.45 +		      //creating new edge
    1.46 +		      active_edge=EdgeIt(g,g.addEdge(active_node, target_node));
    1.47  
    1.48 -		  //initiating values corresponding to new edge in maps
    1.49 -		  mapstorage.init_maps_for_edge(active_edge);
    1.50 +		      //initiating values corresponding to new edge in maps
    1.51 +		      mapstorage.init_maps_for_edge(active_edge);
    1.52  	  
    1.53 -		  //calculating coordinates of new edge
    1.54 -		  Gnome::Canvas::Points coos;
    1.55 -		  double x1, x2, y1, y2;
    1.56 +		      //calculating coordinates of new edge
    1.57 +		      Gnome::Canvas::Points coos;
    1.58 +		      double x1, x2, y1, y2;
    1.59  	  
    1.60 -		  active_item->get_bounds(x1, y1, x2, y2);
    1.61 -		  coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    1.62 +		      active_item->get_bounds(x1, y1, x2, y2);
    1.63 +		      coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    1.64  
    1.65 -		  target_item->get_bounds(x1, y1, x2, y2);
    1.66 -		  coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    1.67 +		      target_item->get_bounds(x1, y1, x2, y2);
    1.68 +		      coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    1.69  
    1.70 -		  //drawing new edge
    1.71 -		  edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos, *this);
    1.72 -		  *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green");
    1.73 -		  edgesmap[active_edge]->property_width_pixels().set_value(10);
    1.74 +		      //drawing new edge
    1.75 +		      edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos, *this);
    1.76 +		      *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green");
    1.77 +		      edgesmap[active_edge]->property_width_pixels().set_value(10);
    1.78  
    1.79 -		  //redraw nodes to blank terminations of the new edge
    1.80 -		  target_item->raise_to_top();
    1.81 -		  active_item->raise_to_top();
    1.82 +		      //redraw nodes to blank terminations of the new edge
    1.83 +		      target_item->raise_to_top();
    1.84 +		      active_item->raise_to_top();
    1.85  
    1.86 -		  //initializing edge-text as well, to empty string
    1.87 -		  xy<double> text_pos=edgesmap[active_edge]->get_arrow_pos();
    1.88 -		  text_pos+=(xy<double>(10,10));
    1.89 +		      //initializing edge-text as well, to empty string
    1.90 +		      xy<double> text_pos=edgesmap[active_edge]->get_arrow_pos();
    1.91 +		      text_pos+=(xy<double>(10,10));
    1.92  
    1.93 -		  edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
    1.94 -		  edgetextmap[active_edge]->property_fill_color().set_value("black");
    1.95 +		      edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
    1.96 +		      edgetextmap[active_edge]->property_fill_color().set_value("darkgreen");
    1.97 +
    1.98 +		      //updating its properties
    1.99 +		      mapwin->update_edge(active_edge);
   1.100 +		    }
   1.101 +		  else
   1.102 +		    {
   1.103 +		      target_node=INVALID;
   1.104 +		      std::cout << "Loop edge is not yet implemented!" << std::endl;
   1.105 +		    }
   1.106  		}
   1.107  	      //clicked item was not a node. it could be an e.g. edge. we do not deal with it furthermore.
   1.108  	      else
   1.109 @@ -435,18 +455,21 @@
   1.110  
   1.111  void GraphDisplayerCanvas::delete_item(NodeIt node_to_delete)
   1.112  {
   1.113 +  delete(nodetextmap[node_to_delete]);
   1.114    delete(nodesmap[node_to_delete]);
   1.115    g.erase(node_to_delete);
   1.116  }
   1.117  
   1.118  void GraphDisplayerCanvas::delete_item(EdgeIt edge_to_delete)
   1.119  {
   1.120 +  delete(edgetextmap[edge_to_delete]);
   1.121    delete(edgesmap[edge_to_delete]);
   1.122    g.erase(edge_to_delete);
   1.123  }
   1.124  
   1.125  void GraphDisplayerCanvas::delete_item(Graph::Edge edge_to_delete)
   1.126  {
   1.127 +  delete(edgetextmap[edge_to_delete]);
   1.128    delete(edgesmap[edge_to_delete]);
   1.129    g.erase(edge_to_delete);
   1.130  }