COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/graph_displayer_canvas.cc @ 1615:b42385baaf3a

Last change on this file since 1615:b42385baaf3a was 1614:350c1d8bb7cc, checked in by Hegyi Péter, 14 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
Line 
1#include "graph_displayer_canvas.h"
2#include "broken_edge.h"
3#include <math.h>
4
5GraphDisplayerCanvas::GraphDisplayerCanvas(MapStorage & ms, MapWin & mw, Gtk::Window * mainwin) :
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)
10{
11  parentwin=mainwin;
12
13  //base event handler is move tool
14  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
15  actual_tool=MOVE;
16
17  //setting event handler for the editor widget
18  entrywidget.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::entryWidgetChangeHandler), false);
19
20  active_node=INVALID;
21  active_edge=INVALID;
22  forming_edge=INVALID;
23}
24
25GraphDisplayerCanvas::~GraphDisplayerCanvas()
26{
27  for (NodeIt n(mapstorage.graph); n != INVALID; ++n)
28  {
29    delete nodesmap[n];
30    delete nodetextmap[n];
31  }
32
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{
47  //first edges are drawn, to hide joining with nodes later
48
49  for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
50  {
51
52    //drawing green lines, coordinates are from mapstorage.coords
53
54    Gnome::Canvas::Points coos;
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));
61   
62    edgesmap[i]=new BrokenEdge(displayed_graph, coos, *this);
63    *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green");
64    edgesmap[i]->property_width_units().set_value(10);   
65   
66    //initializing edge-text as well, to empty string
67
68    xy<double> text_pos=edgesmap[i]->getArrowPos();
69    text_pos+=(xy<double>(10,10));
70
71    edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
72    edgetextmap[i]->property_fill_color().set_value("darkgreen");
73    edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
74  }
75
76  //afterwards nodes come to be drawn
77
78  for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
79  {
80    //drawing bule nodes, with black line around them
81
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);
88    *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue");
89    *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black");
90
91    //initializing edge-text as well, to empty string
92
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));
96
97    nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph,
98        text_pos.x, text_pos.y, "");
99    nodetextmap[i]->property_fill_color().set_value("darkblue");
100    nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
101  }
102
103  updateScrollRegion();
104}
105
106void GraphDisplayerCanvas::clear()
107{
108  active_node=INVALID;
109  active_edge=INVALID;
110  forming_edge=INVALID;
111
112  for (NodeIt n(mapstorage.graph); n != INVALID; ++n)
113  {
114    delete nodesmap[n];
115    delete nodetextmap[n];
116  }
117
118  for (EdgeIt e(mapstorage.graph); e != INVALID; ++e)
119  {
120    delete edgesmap[e];
121    delete edgetextmap[e];
122  }
123}
Note: See TracBrowser for help on using the repository browser.