Changeset 1606:dc4ea2010dee in lemon-0.x for gui/graph_displayer_canvas.cc
- Timestamp:
- 07/29/05 14:01:37 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2111
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gui/graph_displayer_canvas.cc
r1599 r1606 1 #include <graph_displayer_canvas.h>2 #include <broken_edge.h>1 #include "graph_displayer_canvas.h" 2 #include "broken_edge.h" 3 3 #include <math.h> 4 4 5 GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms, MapWin * mw):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),nodetextmap(g),displayed_graph(*(root()), 0, 0),canvasentrywidget(NULL),mapstorage(ms),isbutton(0),active_item(NULL),target_item(NULL),nodemap_to_edit(""),edgemap_to_edit(""),mapwin(mw) 5 GraphDisplayerCanvas::GraphDisplayerCanvas(MapStorage & ms, MapWin & mw) : 6 nodesmap(ms.graph), edgesmap(ms.graph), edgetextmap(ms.graph), 7 nodetextmap(ms.graph), displayed_graph(*(root()), 0, 0), 8 canvasentrywidget(NULL), mapstorage(ms), isbutton(0), active_item(NULL), 9 target_item(NULL), nodemap_to_edit(""), edgemap_to_edit(""), mapwin(mw) 6 10 { 7 8 //Initializing values. 9 active_node=INVALID; 10 active_edge=INVALID; 11 forming_edge=INVALID; 11 //base event handler is move tool 12 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); 13 actual_tool=MOVE; 12 14 13 15 //setting event handler for the editor widget 14 16 entrywidget.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::entryWidgetChangeHandler), false); 15 17 16 //base event handler is move tool 17 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false); 18 actual_tool=MOVE; 18 active_node=INVALID; 19 active_edge=INVALID; 20 forming_edge=INVALID; 21 } 19 22 20 //set_center_scroll_region(true); 23 GraphDisplayerCanvas::~GraphDisplayerCanvas() 24 { 25 for (NodeIt n(mapstorage.graph); n != INVALID; ++n) 26 { 27 delete nodesmap[n]; 28 delete nodetextmap[n]; 29 } 21 30 31 for (EdgeIt e(mapstorage.graph); e != INVALID; ++e) 32 { 33 delete edgesmap[e]; 34 delete edgetextmap[e]; 35 } 36 37 if(canvasentrywidget) 38 { 39 delete(canvasentrywidget); 40 } 41 } 42 43 void GraphDisplayerCanvas::drawGraph() 44 { 22 45 //first edges are drawn, to hide joining with nodes later 23 46 24 for (EdgeIt i( g); i!=INVALID; ++i)47 for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i) 25 48 { 26 49 27 //drawing green lines, coordinates are from cm50 //drawing green lines, coordinates are from mapstorage.coords 28 51 29 52 Gnome::Canvas::Points coos; 30 coos.push_back(Gnome::Art::Point(cm[g.source(i)].x,cm[g.source(i)].y)); 31 coos.push_back(Gnome::Art::Point(cm[g.target(i)].x,cm[g.target(i)].y)); 53 coos.push_back(Gnome::Art::Point( 54 mapstorage.coords[mapstorage.graph.source(i)].x, 55 mapstorage.coords[mapstorage.graph.source(i)].y)); 56 coos.push_back(Gnome::Art::Point( 57 mapstorage.coords[mapstorage.graph.target(i)].x, 58 mapstorage.coords[mapstorage.graph.target(i)].y)); 32 59 33 60 edgesmap[i]=new BrokenEdge(displayed_graph, coos, *this); … … 47 74 //afterwards nodes come to be drawn 48 75 49 NodeIt i(g); 50 int maxx=0, maxy=0, minx=(int)cm[i].x, miny=(int)cm[i].y; 51 52 for (; i!=INVALID; ++i) 76 for (NodeIt i(mapstorage.graph); i!=INVALID; ++i) 53 77 { 54 //minimum and maximum is gathered to be able to zoom to the graph correctly (whole figure should be seen)55 56 if(cm[i].x>maxx)maxx=(int)cm[i].x;57 if(cm[i].y>maxy)maxy=(int)cm[i].y;58 if(cm[i].x<minx)minx=(int)cm[i].x;59 if(cm[i].y<miny)miny=(int)cm[i].y;60 61 78 //drawing bule nodes, with black line around them 62 79 63 nodesmap[i]=new Gnome::Canvas::Ellipse(displayed_graph, cm[i].x-20, cm[i].y-20, cm[i].x+20, cm[i].y+20); 80 nodesmap[i]=new Gnome::Canvas::Ellipse( 81 displayed_graph, 82 mapstorage.coords[i].x-20, 83 mapstorage.coords[i].y-20, 84 mapstorage.coords[i].x+20, 85 mapstorage.coords[i].y+20); 64 86 *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue"); 65 87 *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black"); … … 67 89 //initializing edge-text as well, to empty string 68 90 69 xy<double> text_pos((cm[i].x+node_property_defaults[N_RADIUS]+5),(cm[i].y+node_property_defaults[N_RADIUS]+5)); 91 xy<double> text_pos( 92 (mapstorage.coords[i].x+node_property_defaults[N_RADIUS]+5), 93 (mapstorage.coords[i].y+node_property_defaults[N_RADIUS]+5)); 70 94 71 nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, ""); 95 nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, 96 text_pos.x, text_pos.y, ""); 72 97 nodetextmap[i]->property_fill_color().set_value("darkblue"); 73 98 nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false); … … 77 102 } 78 103 79 GraphDisplayerCanvas::~GraphDisplayerCanvas()104 void GraphDisplayerCanvas::clear() 80 105 { 81 if(canvasentrywidget) 82 { 83 delete(canvasentrywidget); 84 } 106 active_node=INVALID; 107 active_edge=INVALID; 108 forming_edge=INVALID; 85 109 86 //writing out the end state of the graph 87 //\todo all the maps has to be write out! 88 89 Graph::NodeMap <int> id(g); 90 Graph::NodeMap <double> xc(g); 91 Graph::NodeMap <double> yc(g); 92 93 int j=1; 94 95 for (NodeIt i(g); i!=INVALID; ++i) 110 for (NodeIt n(mapstorage.graph); n != INVALID; ++n) 96 111 { 97 double x1,y1,x2,y2; 98 nodesmap[i]->get_bounds(x1, y1, x2, y2); 99 100 id[i]=j++; 101 xc[i]=(x1+x2)/2; 102 yc[i]=(y1+y2)/2; 112 delete nodesmap[n]; 113 delete nodetextmap[n]; 103 114 } 104 115 105 GraphWriter<Graph> writer(std::cout,g); 106 107 writer.writeNodeMap("id", id); 108 writer.writeNodeMap("coordinates_x", xc); 109 writer.writeNodeMap("coordinates_y", yc); 110 writer.run(); 116 for (EdgeIt e(mapstorage.graph); e != INVALID; ++e) 117 { 118 delete edgesmap[e]; 119 delete edgetextmap[e]; 120 } 111 121 }
Note: See TracChangeset
for help on using the changeset viewer.