COIN-OR::LEMON - Graph Library

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

Last change on this file since 1614:350c1d8bb7cc was 1614:350c1d8bb7cc, checked in by Hegyi Péter, 15 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.

File size: 6.1 KB
RevLine 
[1442]1// -*- C++ -*- //
2
3#ifndef GRAPH_DISPLAYER_CANVAS_H
4#define GRAPH_DISPLAYER_CANVAS_H
5
[1501]6class GraphDisplayerCanvas;
7
[1606]8#include "all_include.h"
9#include "mapstorage.h"
10#include "broken_edge.h"
11#include "map_win.h"
[1442]12#include <libgnomecanvasmm.h>
13#include <libgnomecanvasmm/polygon.h>
14
15///This class is the canvas, on which the graph can be drawn.
16class GraphDisplayerCanvas : public Gnome::Canvas::CanvasAA
17{
18  typedef Gnome::Canvas::CanvasAA Parent;
19
20public:
[1614]21  GraphDisplayerCanvas(MapStorage &, MapWin &, Gtk::Window *);
[1442]22  virtual ~GraphDisplayerCanvas();
23
24  ///Changes the linewidth attribute according to the given map.
25  ///\param mapname is the name of the map which contains the new values
[1512]26  int changeEdgeWidth (std::string mapname, Graph::Edge new_item=INVALID);
[1442]27
28  ///Changes the linecolor attribute according to the given map.
29  ///\param mapname is the name of the map which contains the new values
[1512]30  int changeEdgeColor (std::string mapname, Graph::Edge new_item=INVALID);
[1442]31
32  ///Changes the text of line attribute according to the given map.
33  ///\param mapname is the name of the map which contains the new values
[1512]34  int changeEdgeText (std::string mapname, Graph::Edge new_item=INVALID);
35
36  ///Changes the linewidth attribute according to the given map.
37  ///\param mapname is the name of the map which contains the new values
38  int changeNodeRadius (std::string mapname, Graph::Node new_item=INVALID);
39
40  ///Changes the linecolor attribute according to the given map.
41  ///\param mapname is the name of the map which contains the new values
42  int changeNodeColor (std::string mapname, Graph::Node new_item=INVALID);
43
44  ///Changes the text of line attribute according to the given map.
45  ///\param mapname is the name of the map which contains the new values
46  int changeNodeText (std::string mapname, Graph::Node new_item=INVALID);
[1442]47
48  ///Callback for 'ViewZoomIn' action.
49  virtual void zoomIn();
50  ///Callback for 'ViewZoomOut' action.
51  virtual void zoomOut();
52  ///Callback for 'ViewZoomFit' action.
53  virtual void zoomFit();
54  ///Callback for 'ViewZoom100' action.
55  virtual void zoom100();
56  ///Sets the scroll region of the convas to the bounding box of the graph.
57  void updateScrollRegion();
58
[1468]59  ///This function changes the tool in the graph-editor's hand
60  void changeEditorialTool(int);
61
[1442]62protected:
63
64  //maximizing, minimizing, restoring window, etc.
65  virtual bool on_expose_event(GdkEventExpose *);
66
67private:
68
69  ///This function is responsible for the correct
70  ///reaction of any action happened in the territory
71  ///of the canvas
[1505]72  ///DEPRECATED!!!!
[1524]73  bool eventHandler(GdkEvent* e, Node n);
[1442]74
[1468]75  ///actual event handler
76  ///
77  ///Actual event handler should be stored, to be able to disconnect it and later reconnect it.
78  sigc::connection actual_handler;
79
80  ///event handler for the case when move-tool is active
[1524]81  bool moveEventHandler(GdkEvent*);
[1468]82  ///event handler for the case when create_node-tool is active
[1524]83  bool createNodeEventHandler(GdkEvent*);
[1468]84  ///event handler for the case when create_edge-tool is active
[1524]85  bool createEdgeEventHandler(GdkEvent*);
[1485]86  ///event handler for the case when eraser-tool is active
[1524]87  bool eraserEventHandler(GdkEvent*);
[1550]88  ///event handler for the case when edge map editor tool is active
[1524]89  bool edgeMapEditEventHandler(GdkEvent*);
[1550]90  ///event handler for the case when node map editor tool is active
91  bool nodeMapEditEventHandler(GdkEvent*);
[1485]92
[1562]93  ///event handler for the case when the entry widget is changed
94  bool entryWidgetChangeHandler(GdkEvent*);
95
[1501]96public:
[1505]97  ///Moves the text to new place
[1524]98  void textReposition(xy<double>);
[1505]99  ///Activates an edge belonging to a BrokenEdge
[1579]100  ///
101  ///After we have activated an edge this way,
102  ///the GDC object will know, which edge is under forming
103  ///therefore it can redraw the necessarz elementy on the canvas,
104  ///for example the text belonging to the \ref BrokenEdge can be
105  ///redrawn (\ref textReposition).
[1524]106  void toggleEdgeActivity(BrokenEdge*, bool);
[1505]107
108public:
[1501]109  ///\return the actual tool in hand
[1524]110  int getActualTool();
[1501]111
[1606]112  void drawGraph();
113  void clear();
114
[1585]115  ///creates a new Nodemap
[1597]116  int addNewNodeMap(double,std::string);
[1585]117  ///creates a new Edgemap
[1597]118  int addNewEdgeMap(double,std::string);
[1585]119
[1501]120private:
[1486]121  ///Deletes the given element.
[1524]122  void deleteItem(NodeIt);
[1486]123  ///Deletes the given element.
[1524]124  void deleteItem(EdgeIt);
[1496]125  ///Deletes the given element.
[1524]126  void deleteItem(Graph::Edge);
[1468]127
[1501]128private:
129
[1442]130  ///Map of nodes of graph
131  Graph::NodeMap<Gnome::Canvas::Ellipse *> nodesmap;
132
133  ///Map of edges of graph
[1499]134  Graph::EdgeMap<BrokenEdge *> edgesmap;
[1442]135
136  ///Map of texts to write on edges
137  Graph::EdgeMap<Gnome::Canvas::Text *> edgetextmap;
138
[1512]139  ///Map of texts to write on nodes
140  Graph::NodeMap<Gnome::Canvas::Text *> nodetextmap;
141
[1442]142  ///Group of graphical elements of displayed_graph
143  Gnome::Canvas::Group displayed_graph;
144
[1550]145  ///Map editor entry
146  Gtk::Entry entrywidget;
147
148  ///GnomeCanvas holder for entry
149  Gnome::Canvas::Widget * canvasentrywidget;
150
[1442]151  ///Here we store the maps that can be displayed through properties.
[1589]152  MapStorage & mapstorage;
[1442]153
154  ///Indicates whether the button of mouse is pressed or not
[1500]155  int isbutton;
[1442]156
[1501]157  ///Stores the actual tool in hand
158  int actual_tool;
159
[1442]160  ///At this location was the mousebutton pressed.
161  ///It helps to calculate the distance of dragging.
162  double clicked_x, clicked_y;
163
164  ///Remembers which Gnome::Canvas::Item was pressed.
165  ///this variable is needed, because
166  ///1. we cannot query the item at he cursor as fast as it could not cause a Segmentation Fault
167  ///2. we would like to handle only ony item per movement, therefore quering it is not a working solution
[1474]168  Gnome::Canvas::Item * active_item, * target_item;
[1468]169  Graph::NodeIt active_node;
[1474]170  Graph::EdgeIt active_edge;
[1579]171  Graph::EdgeIt forming_edge;
172
173  std::string nodemap_to_edit, edgemap_to_edit;
[1442]174
175  static const int zoom_step = 5;
[1499]176
[1512]177  ///We need to store mapwin, to be able to ask the appropriate values for properties of new items.
[1606]178  MapWin & mapwin;
[1512]179
[1614]180  ///We need to store the parent window to be able to set the focus on a given widget
181  ///We will use this variable to activate the set focus on entry widget in the case of editing map values.
182  Gtk::Window * parentwin;
183
[1442]184};
185
186#endif //GRAPH_DISPLAYER_CANVAS_H
Note: See TracBrowser for help on using the repository browser.