ladanyi@53: #include "graph_displayer_canvas.h" alpar@59: #include ladanyi@6: hegyi@96: GraphDisplayerCanvas::GraphDisplayerCanvas(NoteBookTab & mainw) : hegyi@94: nodesmap(mainw.mapstorage.graph), edgesmap(mainw.mapstorage.graph), edgetextmap(mainw.mapstorage.graph), hegyi@94: nodetextmap(mainw.mapstorage.graph), displayed_graph(*(root()), 0, 0), ladanyi@66: isbutton(0), active_item(NULL), target_item(NULL), nodemap_to_edit(""), hegyi@154: edgemap_to_edit(""), autoscale(true), radius_min(10), radius_max(40), radius_unit(1), mytab(mainw) ladanyi@6: { ladanyi@53: //base event handler is move tool ladanyi@53: actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); ladanyi@53: actual_tool=MOVE; hegyi@34: ladanyi@53: active_node=INVALID; ladanyi@53: active_edge=INVALID; ladanyi@53: forming_edge=INVALID; ladanyi@53: } hegyi@9: ladanyi@53: GraphDisplayerCanvas::~GraphDisplayerCanvas() ladanyi@53: { hegyi@96: for (NodeIt n((mytab.mapstorage).graph); n != INVALID; ++n) hegyi@94: { hegyi@94: delete nodesmap[n]; hegyi@94: delete nodetextmap[n]; hegyi@94: } hegyi@94: hegyi@96: for (EdgeIt e((mytab.mapstorage).graph); e != INVALID; ++e) hegyi@94: { hegyi@94: delete edgesmap[e]; hegyi@94: delete edgetextmap[e]; hegyi@94: } hegyi@94: } ladanyi@6: hegyi@94: void GraphDisplayerCanvas::propertyChange(bool itisedge, int prop) hegyi@94: { hegyi@94: if(itisedge) hegyi@94: { hegyi@94: propertyUpdate(Edge(INVALID), prop); hegyi@94: } hegyi@94: else hegyi@94: { hegyi@94: propertyUpdate(Node(INVALID), prop); hegyi@94: } hegyi@94: } hegyi@94: hegyi@94: void GraphDisplayerCanvas::propertyUpdate(Edge edge) hegyi@94: { hegyi@94: for(int i=0;iproperty_fill_color().set_value("darkgreen"); hegyi@149: edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::mapEditEventHandler), false); ladanyi@63: edgetextmap[i]->raise_to_top(); ladanyi@6: } ladanyi@6: ladanyi@6: //afterwards nodes come to be drawn ladanyi@6: hegyi@96: for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) ladanyi@6: { ladanyi@6: //drawing bule nodes, with black line around them ladanyi@6: ladanyi@53: nodesmap[i]=new Gnome::Canvas::Ellipse( ladanyi@53: displayed_graph, hegyi@96: (mytab.mapstorage).coords[i].x-20, hegyi@96: (mytab.mapstorage).coords[i].y-20, hegyi@96: (mytab.mapstorage).coords[i].x+20, hegyi@96: (mytab.mapstorage).coords[i].y+20); ladanyi@6: *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue"); ladanyi@6: *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black"); ladanyi@63: nodesmap[i]->raise_to_top(); hegyi@28: hegyi@28: //initializing edge-text as well, to empty string hegyi@28: hegyi@150: XY text_pos( hegyi@96: ((mytab.mapstorage).coords[i].x+node_property_defaults[N_RADIUS]+5), hegyi@96: ((mytab.mapstorage).coords[i].y+node_property_defaults[N_RADIUS]+5)); hegyi@28: ladanyi@53: nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, ladanyi@53: text_pos.x, text_pos.y, ""); hegyi@28: nodetextmap[i]->property_fill_color().set_value("darkblue"); hegyi@149: nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::mapEditEventHandler), false); ladanyi@63: nodetextmap[i]->raise_to_top(); ladanyi@6: } ladanyi@6: ladanyi@6: updateScrollRegion(); ladanyi@6: } ladanyi@6: ladanyi@53: void GraphDisplayerCanvas::clear() ladanyi@6: { ladanyi@53: active_node=INVALID; ladanyi@53: active_edge=INVALID; ladanyi@53: forming_edge=INVALID; ladanyi@6: hegyi@96: for (NodeIt n((mytab.mapstorage).graph); n != INVALID; ++n) ladanyi@6: { ladanyi@53: delete nodesmap[n]; ladanyi@53: delete nodetextmap[n]; ladanyi@6: } ladanyi@6: hegyi@96: for (EdgeIt e((mytab.mapstorage).graph); e != INVALID; ++e) ladanyi@53: { ladanyi@53: delete edgesmap[e]; ladanyi@53: delete edgetextmap[e]; ladanyi@53: } ladanyi@6: } hegyi@154: hegyi@154: void GraphDisplayerCanvas::setNodeView(bool autoscale_p, double min_p, double max_p, double unit_p) hegyi@154: { hegyi@154: autoscale=autoscale_p; hegyi@154: radius_min=min_p; hegyi@154: radius_max=max_p; hegyi@154: radius_unit=unit_p; hegyi@154: propertyChange(false, N_RADIUS); hegyi@154: } hegyi@154: hegyi@154: void GraphDisplayerCanvas::getNodeView(bool & autoscale_p, double& min_p, double& max_p, double& unit_p) hegyi@154: { hegyi@154: autoscale_p=autoscale; hegyi@154: min_p=radius_min; hegyi@154: max_p=radius_max; hegyi@154: unit_p=radius_unit; hegyi@154: }