Very small bug is corrected: if node creator tool is active, the small red arrows won't move, if you click on them and if you drag the newly created node... 'was hard to notice it :-) gui
authorhegyi
Fri, 17 Jun 2005 12:25:53 +0000
branchgui
changeset 2144bb92014108
parent 20 a3bd39d50930
child 22 c4d09637b2f8
Very small bug is corrected: if node creator tool is active, the small red arrows won't move, if you click on them and if you drag the newly created node... 'was hard to notice it :-)
all_include.h
broken_edge.cc
broken_edge.h
graph_displayer_canvas.cc
graph_displayer_canvas.h
     1.1 --- a/all_include.h	Thu Jun 16 18:58:15 2005 +0000
     1.2 +++ b/all_include.h	Fri Jun 17 12:25:53 2005 +0000
     1.3 @@ -17,7 +17,7 @@
     1.4  #include <lemon/xy.h>
     1.5  
     1.6  enum {WIDTH, COLOR, TEXT, PROPERTY_NUM}; // edge properties;
     1.7 -enum {MOVE, CREATE_NODE, CREATE_EDGE, ERASER, TOOL_NUM}; // tools;
     1.8 +enum {MOVE, CREATE_NODE, CREATE_EDGE, ERASER, EDGE_MAP_EDIT, TOOL_NUM}; // tools;
     1.9  #define RANGE 3
    1.10  #define WIN_WIDTH 900
    1.11  #define WIN_HEIGHT 600
     2.1 --- a/broken_edge.cc	Thu Jun 16 18:58:15 2005 +0000
     2.2 +++ b/broken_edge.cc	Fri Jun 17 12:25:53 2005 +0000
     2.3 @@ -2,7 +2,7 @@
     2.4  #include <lemon/xy.h>
     2.5  #include <math.h>
     2.6  
     2.7 -BrokenEdge::BrokenEdge(Gnome::Canvas::Group & g, Gnome::Canvas::Points p) : Line(g), isbutton(false)
     2.8 +BrokenEdge::BrokenEdge(Gnome::Canvas::Group & g, Gnome::Canvas::Points p, GraphDisplayerCanvas & gc) : Line(g), gdc(gc), isbutton(false)
     2.9  {
    2.10    my_points=new Gnome::Art::Point[3];
    2.11  
    2.12 @@ -110,9 +110,12 @@
    2.13      {
    2.14      case GDK_BUTTON_PRESS:
    2.15        //we mark the location of the event to be able to calculate parameters of dragging
    2.16 -      clicked_x=e->button.x;
    2.17 -      clicked_y=e->button.y;
    2.18 -      isbutton=true;
    2.19 +      if(gdc.get_actual_tool()!=CREATE_NODE)
    2.20 +	{
    2.21 +	  clicked_x=e->button.x;
    2.22 +	  clicked_y=e->button.y;
    2.23 +	  isbutton=true;
    2.24 +	}
    2.25        break;
    2.26      case GDK_BUTTON_RELEASE:
    2.27        isbutton=false;
     3.1 --- a/broken_edge.h	Thu Jun 16 18:58:15 2005 +0000
     3.2 +++ b/broken_edge.h	Fri Jun 17 12:25:53 2005 +0000
     3.3 @@ -3,15 +3,20 @@
     3.4  #ifndef BROKEN_EDGE_H
     3.5  #define BROKEN_EDGE_H
     3.6  
     3.7 +class BrokenEdge;
     3.8 +
     3.9  #include <all_include.h>
    3.10  #include <libgnomecanvasmm.h>
    3.11  #include <libgnomecanvasmm/polygon.h>
    3.12 +#include <graph_displayer_canvas.h>
    3.13  
    3.14  class BrokenEdge : public Gnome::Canvas::Line
    3.15  {
    3.16 +  GraphDisplayerCanvas & gdc;
    3.17    Gnome::Canvas::Polygon * arrow;
    3.18    Gnome::Art::Point * my_points;
    3.19  
    3.20 +
    3.21    ///Indicates whether the button of mouse is pressed or not
    3.22    bool isbutton;
    3.23  
    3.24 @@ -22,7 +27,7 @@
    3.25    ///event handler for forming edges
    3.26    bool edge_former_event_handler(GdkEvent*);
    3.27   public:
    3.28 -  BrokenEdge(Gnome::Canvas::Group &, Gnome::Canvas::Points);
    3.29 +  BrokenEdge(Gnome::Canvas::Group &, Gnome::Canvas::Points, GraphDisplayerCanvas &);
    3.30    ~BrokenEdge();
    3.31    void set_points(Gnome::Canvas::Points, bool move=false);
    3.32  };
     4.1 --- a/graph_displayer_canvas.cc	Thu Jun 16 18:58:15 2005 +0000
     4.2 +++ b/graph_displayer_canvas.cc	Fri Jun 17 12:25:53 2005 +0000
     4.3 @@ -5,7 +5,8 @@
     4.4  GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),displayed_graph(*(root()), 0, 0),mapstorage(ms),isbutton(0),active_item(NULL),target_item(NULL)
     4.5  {
     4.6    
     4.7 -  actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false);
     4.8 +  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_node_event_handler), false);
     4.9 +  actual_tool=CREATE_NODE;
    4.10  
    4.11    active_node=INVALID;
    4.12    active_edge=INVALID;
    4.13 @@ -23,7 +24,7 @@
    4.14      coos.push_back(Gnome::Art::Point(cm[g.source(i)].x,cm[g.source(i)].y));
    4.15      coos.push_back(Gnome::Art::Point(cm[g.target(i)].x,cm[g.target(i)].y));
    4.16      
    4.17 -    edgesmap[i]=new BrokenEdge(displayed_graph, coos);
    4.18 +    edgesmap[i]=new BrokenEdge(displayed_graph, coos, *this);
    4.19      *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green");
    4.20      edgesmap[i]->property_width_pixels().set_value(10);    
    4.21      
    4.22 @@ -309,6 +310,16 @@
    4.23  {
    4.24    actual_handler.disconnect();
    4.25  
    4.26 +  if(actual_tool==CREATE_EDGE)
    4.27 +    {
    4.28 +	GdkEvent * generated=new GdkEvent();
    4.29 +	generated->type=GDK_BUTTON_RELEASE;
    4.30 +	generated->button.button=3;
    4.31 +	create_edge_event_handler(generated);      
    4.32 +    }
    4.33 +
    4.34 +  actual_tool=newtool;
    4.35 +
    4.36    switch(newtool)
    4.37      {
    4.38      case MOVE:
    4.39 @@ -333,6 +344,11 @@
    4.40      }
    4.41  }
    4.42  
    4.43 +int GraphDisplayerCanvas::get_actual_tool()
    4.44 +{
    4.45 +  return actual_tool;
    4.46 +}
    4.47 +
    4.48  bool GraphDisplayerCanvas::move_event_handler(GdkEvent* e)
    4.49  {
    4.50    switch(e->type)
    4.51 @@ -564,7 +580,7 @@
    4.52  		  coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    4.53  
    4.54  		  //drawing new edge
    4.55 -		  edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos);
    4.56 +		  edgesmap[active_edge]=new BrokenEdge(displayed_graph, coos, *this);
    4.57  		  *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green");
    4.58  		  edgesmap[active_edge]->property_width_pixels().set_value(10);
    4.59  
     5.1 --- a/graph_displayer_canvas.h	Thu Jun 16 18:58:15 2005 +0000
     5.2 +++ b/graph_displayer_canvas.h	Fri Jun 17 12:25:53 2005 +0000
     5.3 @@ -3,6 +3,8 @@
     5.4  #ifndef GRAPH_DISPLAYER_CANVAS_H
     5.5  #define GRAPH_DISPLAYER_CANVAS_H
     5.6  
     5.7 +class GraphDisplayerCanvas;
     5.8 +
     5.9  #include <all_include.h>
    5.10  #include <mapstorage.h>
    5.11  #include <broken_edge.h>
    5.12 @@ -69,7 +71,14 @@
    5.13    bool create_edge_event_handler(GdkEvent*);
    5.14    ///event handler for the case when eraser-tool is active
    5.15    bool eraser_event_handler(GdkEvent*);
    5.16 +  ///event handler for the case when eraser-tool is active
    5.17 +  bool edge_map_edit_event_handler(GdkEvent*);
    5.18  
    5.19 +public:
    5.20 +  ///\return the actual tool in hand
    5.21 +  int get_actual_tool();
    5.22 +
    5.23 +private:
    5.24    ///Deletes the given element.
    5.25    void delete_item(NodeIt);
    5.26    ///Deletes the given element.
    5.27 @@ -77,6 +86,8 @@
    5.28    ///Deletes the given element.
    5.29    void delete_item(Graph::Edge);
    5.30  
    5.31 +private:
    5.32 +
    5.33    ///The graph, on which we work
    5.34    Graph g;
    5.35  
    5.36 @@ -98,6 +109,9 @@
    5.37    ///Indicates whether the button of mouse is pressed or not
    5.38    int isbutton;
    5.39  
    5.40 +  ///Stores the actual tool in hand
    5.41 +  int actual_tool;
    5.42 +
    5.43    ///At this location was the mousebutton pressed.
    5.44    ///It helps to calculate the distance of dragging.
    5.45    double clicked_x, clicked_y;