Changeset 1888:eed01ce27087 in lemon-0.x for gui/graph_displayer_canvas.h
- Timestamp:
- 01/10/06 16:15:57 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2463
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gui/graph_displayer_canvas.h
r1860 r1888 17 17 friend class BrokenEdge; 18 18 19 ///Edge displayer class 20 21 ///This class is responsible for displaying edges in graph. 22 ///The displayed edge is broken in the middle. The 23 ///aim of this is to be able to indicate direction of edges 24 ///and to be able to display more then one edges between the 25 ///same source and target 19 26 class BrokenEdge : public Gnome::Canvas::Line 20 27 { 28 ///The edge that the class displays. 29 30 ///It is needed, because some datas needed from 31 ///graph can be accessed by this or should be sent 32 ///as parameter, but it would be complicated 21 33 Edge edge; 34 35 ///Reference to the canvas, on which the graph is drawn. 36 37 ///It is needed, because some datas needed from 38 ///graph can be accessed by this or should be sent 39 ///as parameter, but it would be complicated 22 40 GraphDisplayerCanvas & gdc; 41 42 ///An arrow that indicates the direction of the edges 43 44 ///in case of directional graph direction can be indicated 45 ///by this polygon. The polygon formulates a red arrow. 23 46 Gnome::Canvas::Polygon * arrow; 24 47 25 ///Indicates whether the button of mouse is pressed or not 48 ///Indicates whether the button of mouse is pressed or not at the moment. 26 49 bool isbutton; 27 50 28 ///At this location was the mousebutton pressed. 29 ///It helps to calculate the distance of dragging. 30 double clicked_x, clicked_y; 31 32 ///event handler for forming edges 33 bool edgeFormerEventHandler(GdkEvent*); 51 ///At this location was the mousebutton pressed. Horizontal component. 52 53 ///It helps to calculate the 54 ///distance of dragging. 55 double clicked_x; 56 57 ///At this location was the mousebutton pressed. Vertical component. 58 59 ///It helps to calculate the 60 ///distance of dragging. 61 double clicked_y; 62 63 ///event handler for forming broken edges 64 65 ///\param event the 66 ///event to handle 67 bool edgeFormerEventHandler(GdkEvent* event); 34 68 public: 35 BrokenEdge(Gnome::Canvas::Group &, Edge, GraphDisplayerCanvas &); 69 70 ///Constructor of broken edge class. 71 72 ///\param g the group to which the edge belongs 73 ///\param _edge the represented edge 74 ///\param gc the canvas 75 BrokenEdge(Gnome::Canvas::Group & g, Edge _edge, GraphDisplayerCanvas & gc); 76 77 ///Destructor of broken edge class 78 79 ///Frees up 80 ///reserved memory 36 81 ~BrokenEdge(); 82 83 ///The function that draws the edge based on collected data 37 84 void draw(); 38 85 }; 86 87 ///Type of canvas, on which the graph is drawn 39 88 typedef Gnome::Canvas::CanvasAA Parent; 40 89 41 90 public: 42 GraphDisplayerCanvas(NoteBookTab &); 91 ///Constructor 92 93 ///\param nbt the tab of the window, in which the graph is displayed 94 GraphDisplayerCanvas(NoteBookTab & nbt); 95 96 ///destructor of the class 43 97 virtual ~GraphDisplayerCanvas(); 44 98 45 ///Changes the linewidth attribute according to the given map. 46 ///\param mapname is the name of the map which contains the new values 47 int changeEdgeWidth (std::string mapname, Edge new_item=INVALID); 48 int resetEdgeWidth (Edge new_item=INVALID); 49 50 ///Changes the linecolor attribute according to the given map. 51 ///\param mapname is the name of the map which contains the new values 52 int changeEdgeColor (std::string mapname, Edge new_item=INVALID); 53 int resetEdgeColor (Edge new_item=INVALID); 54 55 ///Changes the text of line attribute according to the given map. 56 ///\param mapname is the name of the map which contains the new values 57 int changeEdgeText (std::string mapname, Edge new_item=INVALID); 58 int resetEdgeText (Edge new_item=INVALID); 59 60 ///Changes the linewidth attribute according to the given map. 61 ///\param mapname is the name of the map which contains the new values 62 int changeNodeRadius (std::string mapname, Node new_item=INVALID); 63 int resetNodeRadius (Node new_item=INVALID); 64 65 ///Changes the linecolor attribute according to the given map. 66 ///\param mapname is the name of the map which contains the new values 67 int changeNodeColor (std::string mapname, Node new_item=INVALID); 68 int resetNodeColor (Node new_item=INVALID); 69 70 ///Changes the text of line attribute according to the given map. 71 ///\param mapname is the name of the map which contains the new values 72 int changeNodeText (std::string mapname, Node new_item=INVALID); 73 int resetNodeText (Node new_item=INVALID); 74 75 void propertyChange(bool, int); 76 void propertyUpdate(Edge, int, int dummy=0); 77 void propertyUpdate(Node, int, int dummy=0); 78 99 ///Changes the width of edge(s) according to the given map. 100 101 ///\param mapname is the name of the map which contains the values to be set 102 ///\param edge if it is given, only the width of the given edge will be set, instead of all of them. 103 int changeEdgeWidth (std::string mapname, Edge edge=INVALID); 104 105 ///Resets width of edge(s) to the default value 106 107 ///\param edge if it is given, only the width of the 108 ///given edge will be reset, instead of all of them. 109 int resetEdgeWidth (Edge edge=INVALID); 110 111 ///Changes the color of edge(s) according to the given map. 112 113 ///\param mapname is the name of the map which contains the new values 114 ///\param edge if it is given, only the color of the given edge will be set, instead of all of them. 115 int changeEdgeColor (std::string mapname, Edge edge=INVALID); 116 117 ///Resets color of edge(s) to the default value 118 119 ///\param edge if it is given, only the color of the 120 ///given edge will be reset, instead of all of them. 121 int resetEdgeColor (Edge edge=INVALID); 122 123 ///Changes the label of edge(s) according to the given map. 124 125 ///\param mapname is the name of the map which contains the new values 126 ///\param edge if it is given, only the label of the given edge will be set, instead of all of them. 127 int changeEdgeText (std::string mapname, Edge edge=INVALID); 128 129 ///Resets label of edge(s) to the default value 130 131 ///\param edge if it is given, only the color of the 132 ///given edge will be reset, instead of all of them. 133 int resetEdgeText (Edge edge=INVALID); 134 135 ///Changes the radius of node(s) according to the given map. 136 137 ///\param mapname is the name of the map which contains the new values 138 ///\param node if it is given, only the radius of the given node will be set, instead of all of them. 139 int changeNodeRadius (std::string mapname, Node node=INVALID); 140 141 ///Resets radius of node(s) to the default value 142 143 ///\param node if it is given, only the radius of the 144 ///given node will be reset, instead of all of them. 145 int resetNodeRadius (Node node=INVALID); 146 147 ///Changes the color of node(s) according to the given map. 148 149 ///\param mapname is the name of the map which contains the new values 150 ///\param node if it is given, only the color of the given node will be set, instead of all of them. 151 int changeNodeColor (std::string mapname, Node node=INVALID); 152 153 ///Resets color of node(s) to the default value 154 155 ///\param node if it is given, only the color of the 156 ///given node will be reset, instead of all of them. 157 int resetNodeColor (Node node=INVALID); 158 159 ///Changes the label of node(s) according to the given map. 160 161 ///\param mapname is the name of the map which contains the new values 162 ///\param node if it is given, only the label of the given node will be set, instead of all of them. 163 int changeNodeText (std::string mapname, Node node=INVALID); 164 165 ///Resets label of node(s) to the default value 166 167 ///\param node if it is given, only the label of the 168 ///given node will be reset, instead of all of them. 169 int resetNodeText (Node node=INVALID); 170 171 ///This function is called, when any of the displayed attributes have to be updated, or changed 172 173 ///\param itisedge if true, edge property has to be changed, else node property 174 ///\param prop the id of property that has to changed or updated 175 void propertyChange(bool itisedge, int prop); 176 177 ///updates the given property 178 179 ///\param edge if it is not INVALID, only the property of the given edge will be updated, instead of all of them 180 ///\param prop the property to update 181 void propertyUpdate(Edge edge, int prop); 182 183 ///updates the given property 184 185 ///\param node if it is not INVALID, only the property of the given node will be updated, instead of all of them 186 ///\param prop the property to update 187 void propertyUpdate(Node node, int prop); 188 189 ///updates all the property for the given edge 79 190 void propertyUpdate(Edge); 191 192 ///updates all the property for the given node 80 193 void propertyUpdate(Node); 81 194 … … 96 209 protected: 97 210 98 //maximizing, minimizing, restoring window, etc. 211 //maximizing, minimizing, restoring window, etc. 99 212 virtual bool on_expose_event(GdkEventExpose *); 100 213 … … 128 241 ///Moves the text to new place 129 242 void textReposition(xy<double>); 243 130 244 ///Activates an edge belonging to a BrokenEdge 131 /// 245 132 246 ///After we have activated an edge this way, 133 247 ///the GDC object will know, which edge is under forming 134 ///therefore it can redraw the necessar z elementyon the canvas,248 ///therefore it can redraw the necessary elements on the canvas, 135 249 ///for example the text belonging to the \ref BrokenEdge can be 136 250 ///redrawn (\ref textReposition). … … 138 252 139 253 public: 140 ///\return the actual tool in hand 254 255 ///Returns the actual tool in hand 141 256 int getActualTool(); 142 257 258 ///draws the graph 259 260 ///Called when opening a file. 143 261 void drawGraph(); 262 263 ///Clears the canvas 264 265 ///It achieves this by deleting all data 266 ///structure used to help handle the displayed graph. 144 267 void clear(); 145 268 146 269 ///creates a new Nodemap 147 int addNewNodeMap(double,std::string); 270 271 ///\param init initial value of the map 272 ///\param mapname name of new map 273 int addNewNodeMap(double init,std::string mapname); 148 274 ///creates a new Edgemap 149 int addNewEdgeMap(double,std::string); 275 276 ///\param init initial value of the map 277 ///\param mapname name of new map 278 int addNewEdgeMap(double init,std::string mapname); 150 279 151 280 private: … … 184 313 185 314 ///Remembers which Gnome::Canvas::Item was pressed. 186 ///this variable is needed, because 187 ///1. we cannot query the item at he cursor as fast as it could not cause a Segmentation Fault 188 ///2. we would like to handle only ony item per movement, therefore quering it is not a working solution 189 Gnome::Canvas::Item * active_item, * target_item; 315 316 ///this variable is needed, to work on it after selection 317 Gnome::Canvas::Item * active_item; 318 319 ///Remembers which Gnome::Canvas::Item was pressed. 320 321 ///this variable is used at edge creation, it will 322 ///be the secondly selected node. No local variable 323 ///can be used for this purpose inside the function, 324 ///because the node selected by button press, and 325 ///the edge is created by button release. Both of 326 ///them is different function call. 327 Gnome::Canvas::Item * target_item; 328 329 ///selected node (for any editing) 190 330 Node active_node; 331 332 ///selected edge (for any editing) 191 333 Edge active_edge; 334 335 ///the edge that is selected by clicking on the red arrow in the middle of it 336 337 ///This edge is stored only for the purpose of reshape it. 338 ///That is why it is selected in a different manner. 192 339 Edge forming_edge; 193 340 194 std::string nodemap_to_edit, edgemap_to_edit; 341 ///Map displayed by label can be edited. 342 std::string nodemap_to_edit; 343 344 ///Map displayed by label can be edited. 345 std::string edgemap_to_edit; 195 346 196 347 static const int zoom_step = 5; … … 198 349 private: 199 350 200 ///reference to the parent window351 ///reference to the container, in which the canvas is 201 352 NoteBookTab & mytab; 202 353
Note: See TracChangeset
for help on using the changeset viewer.