Several changes. \n If new map is added to mapstorage it emits signal with the name of the new map. This was important, because from now on not only tha mapwin should be updated. \n Furthermore algobox gets a pointer to mapstorage instead of only the mapnames from it. This is important because without it it would be complicated to pass all of the required maps to algobox.
1 #include "graph_displayer_canvas.h"
4 GraphDisplayerCanvas::GraphDisplayerCanvas(NoteBookTab & mainw) :
5 nodesmap(mainw.mapstorage.graph), edgesmap(mainw.mapstorage.graph), edgetextmap(mainw.mapstorage.graph),
6 nodetextmap(mainw.mapstorage.graph), displayed_graph(*(root()), 0, 0),
7 isbutton(0), active_item(NULL), target_item(NULL), nodemap_to_edit(""),
8 edgemap_to_edit(""), mytab(mainw)
10 //base event handler is move tool
11 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
19 GraphDisplayerCanvas::~GraphDisplayerCanvas()
21 for (NodeIt n((mytab.mapstorage).graph); n != INVALID; ++n)
24 delete nodetextmap[n];
27 for (EdgeIt e((mytab.mapstorage).graph); e != INVALID; ++e)
30 delete edgetextmap[e];
34 void GraphDisplayerCanvas::propertyChange(bool itisedge, int prop)
38 propertyUpdate(Edge(INVALID), prop);
42 propertyUpdate(Node(INVALID), prop);
46 void GraphDisplayerCanvas::propertyUpdate(Edge edge)
48 for(int i=0;i<EDGE_PROPERTY_NUM;i++)
50 propertyUpdate(edge, i);
54 void GraphDisplayerCanvas::propertyUpdate(Node node)
56 for(int i=0;i<NODE_PROPERTY_NUM;i++)
58 propertyUpdate(node, i);
62 void GraphDisplayerCanvas::propertyUpdate(Node node, int prop, int dummy)
66 std::string mapname=mytab.getActiveNodeMap(prop);
70 if( ( ((mytab.mapstorage).nodemap_storage).find(mapname) != ((mytab.mapstorage).nodemap_storage).end() ) )
75 changeNodeRadius(mapname, node);
78 changeNodeColor(mapname, node);
81 changeNodeText(mapname, node);
94 resetNodeRadius(node);
103 std::cerr<<"Error\n";
109 void GraphDisplayerCanvas::propertyUpdate(Edge edge, int prop, int dummy)
113 std::string mapname=mytab.getActiveEdgeMap(prop);
117 if( ( ((mytab.mapstorage).edgemap_storage).find(mapname) != ((mytab.mapstorage).edgemap_storage).end() ) )
122 changeEdgeWidth(mapname, edge);
125 changeEdgeColor(mapname, edge);
128 changeEdgeText(mapname, edge);
131 std::cerr<<"Error\n";
140 resetEdgeWidth(edge);
143 resetEdgeColor(edge);
149 std::cerr<<"Error\n";
154 void GraphDisplayerCanvas::drawGraph()
156 //first edges are drawn, to hide joining with nodes later
158 for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
161 //drawing green lines, coordinates are from mapstorage.coords
163 Gnome::Canvas::Points coos;
164 coos.push_back(Gnome::Art::Point(
165 (mytab.mapstorage).coords[(mytab.mapstorage).graph.source(i)].x,
166 (mytab.mapstorage).coords[(mytab.mapstorage).graph.source(i)].y));
167 coos.push_back(Gnome::Art::Point(
168 (mytab.mapstorage).coords[(mytab.mapstorage).graph.target(i)].x,
169 (mytab.mapstorage).coords[(mytab.mapstorage).graph.target(i)].y));
171 edgesmap[i]=new BrokenEdge(displayed_graph, i, *this);
172 *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green");
173 edgesmap[i]->property_width_units().set_value(10);
174 edgesmap[i]->lower_to_bottom();
176 //initializing edge-text as well, to empty string
178 XY text_pos=mytab.mapstorage.arrow_pos[i];
179 text_pos+=(XY(10,10));
181 edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
182 edgetextmap[i]->property_fill_color().set_value("darkgreen");
183 edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
184 edgetextmap[i]->raise_to_top();
187 //afterwards nodes come to be drawn
189 for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
191 //drawing bule nodes, with black line around them
193 nodesmap[i]=new Gnome::Canvas::Ellipse(
195 (mytab.mapstorage).coords[i].x-20,
196 (mytab.mapstorage).coords[i].y-20,
197 (mytab.mapstorage).coords[i].x+20,
198 (mytab.mapstorage).coords[i].y+20);
199 *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue");
200 *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black");
201 nodesmap[i]->raise_to_top();
203 //initializing edge-text as well, to empty string
206 ((mytab.mapstorage).coords[i].x+node_property_defaults[N_RADIUS]+5),
207 ((mytab.mapstorage).coords[i].y+node_property_defaults[N_RADIUS]+5));
209 nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph,
210 text_pos.x, text_pos.y, "");
211 nodetextmap[i]->property_fill_color().set_value("darkblue");
212 nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
213 nodetextmap[i]->raise_to_top();
216 updateScrollRegion();
219 void GraphDisplayerCanvas::clear()
223 forming_edge=INVALID;
225 for (NodeIt n((mytab.mapstorage).graph); n != INVALID; ++n)
228 delete nodetextmap[n];
231 for (EdgeIt e((mytab.mapstorage).graph); e != INVALID; ++e)
234 delete edgetextmap[e];