ladanyi@1606: #include "graph_displayer_canvas.h" alpar@1632: #include ladanyi@1442: hegyi@1849: GraphDisplayerCanvas::GraphDisplayerCanvas(NoteBookTab & mainw) : hegyi@1837: nodesmap(mainw.mapstorage.graph), edgesmap(mainw.mapstorage.graph), edgetextmap(mainw.mapstorage.graph), hegyi@1837: nodetextmap(mainw.mapstorage.graph), displayed_graph(*(root()), 0, 0), ladanyi@1648: isbutton(0), active_item(NULL), target_item(NULL), nodemap_to_edit(""), hegyi@1849: edgemap_to_edit(""), mytab(mainw) ladanyi@1442: { ladanyi@1606: //base event handler is move tool ladanyi@1606: actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); ladanyi@1606: actual_tool=MOVE; hegyi@1562: ladanyi@1606: active_node=INVALID; ladanyi@1606: active_edge=INVALID; ladanyi@1606: forming_edge=INVALID; ladanyi@1606: } hegyi@1468: ladanyi@1606: GraphDisplayerCanvas::~GraphDisplayerCanvas() ladanyi@1606: { hegyi@1849: for (NodeIt n((mytab.mapstorage).graph); n != INVALID; ++n) hegyi@1837: { hegyi@1837: delete nodesmap[n]; hegyi@1837: delete nodetextmap[n]; hegyi@1837: } hegyi@1837: hegyi@1849: for (EdgeIt e((mytab.mapstorage).graph); e != INVALID; ++e) hegyi@1837: { hegyi@1837: delete edgesmap[e]; hegyi@1837: delete edgetextmap[e]; hegyi@1837: } hegyi@1837: } ladanyi@1442: hegyi@1837: void GraphDisplayerCanvas::propertyChange(bool itisedge, int prop) hegyi@1837: { hegyi@1837: if(itisedge) hegyi@1837: { hegyi@1837: propertyUpdate(Edge(INVALID), prop); hegyi@1837: } hegyi@1837: else hegyi@1837: { hegyi@1837: propertyUpdate(Node(INVALID), prop); hegyi@1837: } hegyi@1837: } hegyi@1837: hegyi@1837: void GraphDisplayerCanvas::propertyUpdate(Edge edge) hegyi@1837: { hegyi@1837: for(int i=0;iproperty_width_units().set_value(10); ladanyi@1645: edgesmap[i]->lower_to_bottom(); ladanyi@1442: ladanyi@1442: //initializing edge-text as well, to empty string ladanyi@1442: ladanyi@1860: XY text_pos=mytab.mapstorage.arrow_pos[i]; ladanyi@1860: text_pos+=(XY(10,10)); hegyi@1505: hegyi@1505: edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, ""); hegyi@1512: edgetextmap[i]->property_fill_color().set_value("darkgreen"); hegyi@1599: edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false); ladanyi@1645: edgetextmap[i]->raise_to_top(); ladanyi@1442: } ladanyi@1442: ladanyi@1442: //afterwards nodes come to be drawn ladanyi@1442: hegyi@1849: for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) ladanyi@1442: { ladanyi@1442: //drawing bule nodes, with black line around them ladanyi@1442: ladanyi@1606: nodesmap[i]=new Gnome::Canvas::Ellipse( ladanyi@1606: displayed_graph, hegyi@1849: (mytab.mapstorage).coords[i].x-20, hegyi@1849: (mytab.mapstorage).coords[i].y-20, hegyi@1849: (mytab.mapstorage).coords[i].x+20, hegyi@1849: (mytab.mapstorage).coords[i].y+20); ladanyi@1442: *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue"); ladanyi@1442: *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black"); ladanyi@1645: nodesmap[i]->raise_to_top(); hegyi@1512: hegyi@1512: //initializing edge-text as well, to empty string hegyi@1512: ladanyi@1606: xy text_pos( hegyi@1849: ((mytab.mapstorage).coords[i].x+node_property_defaults[N_RADIUS]+5), hegyi@1849: ((mytab.mapstorage).coords[i].y+node_property_defaults[N_RADIUS]+5)); hegyi@1512: ladanyi@1606: nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, ladanyi@1606: text_pos.x, text_pos.y, ""); hegyi@1512: nodetextmap[i]->property_fill_color().set_value("darkblue"); hegyi@1599: nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); ladanyi@1645: nodetextmap[i]->raise_to_top(); ladanyi@1442: } ladanyi@1442: ladanyi@1442: updateScrollRegion(); ladanyi@1442: } ladanyi@1442: ladanyi@1606: void GraphDisplayerCanvas::clear() ladanyi@1442: { ladanyi@1606: active_node=INVALID; ladanyi@1606: active_edge=INVALID; ladanyi@1606: forming_edge=INVALID; ladanyi@1442: hegyi@1849: for (NodeIt n((mytab.mapstorage).graph); n != INVALID; ++n) ladanyi@1442: { ladanyi@1606: delete nodesmap[n]; ladanyi@1606: delete nodetextmap[n]; ladanyi@1442: } ladanyi@1442: hegyi@1849: for (EdgeIt e((mytab.mapstorage).graph); e != INVALID; ++e) ladanyi@1606: { ladanyi@1606: delete edgesmap[e]; ladanyi@1606: delete edgetextmap[e]; ladanyi@1606: } ladanyi@1442: }