COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/graph_displayer_canvas.cc @ 1614:350c1d8bb7cc

Last change on this file since 1614:350c1d8bb7cc was 1614:350c1d8bb7cc, checked in by Hegyi Péter, 19 years ago

Alpar had the key, focus can be set in the window class. But it is not enough, the focused widget has to be activated, as well! Was a hard task to find out... By the way, two compilation warnings are removed.

  • Property exe set to *
File size: 3.7 KB
RevLine 
[1606]1#include "graph_displayer_canvas.h"
2#include "broken_edge.h"
[1442]3#include <math.h>
4
[1614]5GraphDisplayerCanvas::GraphDisplayerCanvas(MapStorage & ms, MapWin & mw, Gtk::Window * mainwin) :
[1606]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)
[1442]10{
[1614]11  parentwin=mainwin;
12
[1606]13  //base event handler is move tool
14  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
15  actual_tool=MOVE;
[1562]16
17  //setting event handler for the editor widget
18  entrywidget.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::entryWidgetChangeHandler), false);
19
[1606]20  active_node=INVALID;
21  active_edge=INVALID;
22  forming_edge=INVALID;
23}
[1468]24
[1606]25GraphDisplayerCanvas::~GraphDisplayerCanvas()
26{
27  for (NodeIt n(mapstorage.graph); n != INVALID; ++n)
28  {
29    delete nodesmap[n];
30    delete nodetextmap[n];
31  }
[1442]32
[1606]33  for (EdgeIt e(mapstorage.graph); e != INVALID; ++e)
34  {
35    delete edgesmap[e];
36    delete edgetextmap[e];
37  }
38
39  if(canvasentrywidget)
40  {
41    delete(canvasentrywidget);
42  }
43}
44
45void GraphDisplayerCanvas::drawGraph()
46{
[1442]47  //first edges are drawn, to hide joining with nodes later
48
[1606]49  for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
[1442]50  {
51
[1606]52    //drawing green lines, coordinates are from mapstorage.coords
[1442]53
54    Gnome::Canvas::Points coos;
[1606]55    coos.push_back(Gnome::Art::Point(
56          mapstorage.coords[mapstorage.graph.source(i)].x,
57          mapstorage.coords[mapstorage.graph.source(i)].y));
58    coos.push_back(Gnome::Art::Point(
59          mapstorage.coords[mapstorage.graph.target(i)].x,
60          mapstorage.coords[mapstorage.graph.target(i)].y));
[1442]61   
[1501]62    edgesmap[i]=new BrokenEdge(displayed_graph, coos, *this);
[1442]63    *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green");
[1598]64    edgesmap[i]->property_width_units().set_value(10);   
[1442]65   
66    //initializing edge-text as well, to empty string
67
[1524]68    xy<double> text_pos=edgesmap[i]->getArrowPos();
[1505]69    text_pos+=(xy<double>(10,10));
70
71    edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
[1512]72    edgetextmap[i]->property_fill_color().set_value("darkgreen");
[1599]73    edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
[1442]74  }
75
76  //afterwards nodes come to be drawn
77
[1606]78  for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
[1442]79  {
80    //drawing bule nodes, with black line around them
81
[1606]82    nodesmap[i]=new Gnome::Canvas::Ellipse(
83        displayed_graph,
84        mapstorage.coords[i].x-20,
85        mapstorage.coords[i].y-20,
86        mapstorage.coords[i].x+20,
87        mapstorage.coords[i].y+20);
[1442]88    *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue");
89    *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black");
[1512]90
91    //initializing edge-text as well, to empty string
92
[1606]93    xy<double> text_pos(
94        (mapstorage.coords[i].x+node_property_defaults[N_RADIUS]+5),
95        (mapstorage.coords[i].y+node_property_defaults[N_RADIUS]+5));
[1512]96
[1606]97    nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph,
98        text_pos.x, text_pos.y, "");
[1512]99    nodetextmap[i]->property_fill_color().set_value("darkblue");
[1599]100    nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
[1442]101  }
102
103  updateScrollRegion();
104}
105
[1606]106void GraphDisplayerCanvas::clear()
[1442]107{
[1606]108  active_node=INVALID;
109  active_edge=INVALID;
110  forming_edge=INVALID;
[1442]111
[1606]112  for (NodeIt n(mapstorage.graph); n != INVALID; ++n)
[1442]113  {
[1606]114    delete nodesmap[n];
115    delete nodetextmap[n];
[1442]116  }
117
[1606]118  for (EdgeIt e(mapstorage.graph); e != INVALID; ++e)
119  {
120    delete edgesmap[e];
121    delete edgetextmap[e];
122  }
[1442]123}
Note: See TracBrowser for help on using the repository browser.