vmap.h: Enables one to create maps with a virtual base class.
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)
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)
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];