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 }