COIN-OR::LEMON - Graph Library

Changeset 20:a3bd39d50930 in glemon-0.x


Ignore:
Timestamp:
06/16/05 20:58:15 (19 years ago)
Author:
Hegyi Péter
Branch:
gui
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk/gui@1981
Message:

First of all: revision 1981 is mine, what is important me because I was born in 1981. But what is new in my revision? If you drag nodes with left button, edge-breakpoints do not change location. If you drag nodes by right button, they do, they take up their base situation at the halfpoint of the edge.

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • broken_edge.cc

    r19 r20  
    1818}
    1919
    20 void BrokenEdge::set_points(Gnome::Canvas::Points p)
     20void BrokenEdge::set_points(Gnome::Canvas::Points p, bool move)
    2121{
    2222  bool set_arrow=false;
    23   if(p.size()==2)
     23  if(!move)
    2424    {
    25       set_arrow=true;
    26       Gnome::Canvas::Points points_with_center;
    27       points_with_center.push_back(my_points[0]=p[0]);
    28       points_with_center.push_back(my_points[1]=Gnome::Art::Point( (p[0].get_x()+p[1].get_x())/2+0 , (p[0].get_y()+p[1].get_y())/2 )+0 );
    29       points_with_center.push_back(my_points[2]=p[1]);
    30       property_points().set_value(points_with_center);
    31     } 
    32   if(p.size()==3)
     25      if(p.size()==2)
     26        {
     27          set_arrow=true;
     28          Gnome::Canvas::Points points_with_center;
     29          points_with_center.push_back(my_points[0]=p[0]);
     30          points_with_center.push_back(my_points[1]=Gnome::Art::Point( (p[0].get_x()+p[1].get_x())/2+0 , (p[0].get_y()+p[1].get_y())/2 )+0 );
     31          points_with_center.push_back(my_points[2]=p[1]);
     32          property_points().set_value(points_with_center);
     33        } 
     34      if(p.size()==3)
     35        {
     36          set_arrow=true;
     37          property_points().set_value(p);
     38          for(int i=0;i<3;i++)
     39            {
     40              my_points[i]=p[i];
     41            }
     42        }
     43    }
     44  else
    3345    {
    34       set_arrow=true;
    35       property_points().set_value(p);
    36       for(int i=0;i<3;i++)
     46      if(p.size()==2)
    3747        {
    38           my_points[i]=p[i];
     48          Gnome::Canvas::Points points;
     49          my_points[0]=p[0];
     50          my_points[2]=p[1];
     51          for(int i=0;i<3;i++)
     52            {
     53              points.push_back(my_points[i]);
     54            }
     55          property_points().set_value(points);
    3956        }
    4057    }
  • broken_edge.h

    r19 r20  
    2525  BrokenEdge(Gnome::Canvas::Group &, Gnome::Canvas::Points);
    2626  ~BrokenEdge();
    27   void set_points(Gnome::Canvas::Points);
     27  void set_points(Gnome::Canvas::Points, bool move=false);
    2828};
    2929
  • graph_displayer_canvas.cc

    r19 r20  
    33#include <math.h>
    44
    5 GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),displayed_graph(*(root()), 0, 0),mapstorage(ms),isbutton(false),active_item(NULL),target_item(NULL)
     5GraphDisplayerCanvas::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)
    66{
    77 
     
    182182      clicked_y=e->button.y;
    183183      active_item=(get_item_at(e->button.x, e->button.y));
    184       isbutton=true;
     184      isbutton=1;
    185185      break;
    186186    case GDK_BUTTON_RELEASE:
    187       isbutton=false;
     187      isbutton=0;
    188188      active_item=NULL;
    189189      updateScrollRegion();
     
    351351            }
    352352        }
    353       isbutton=true;
     353      switch(e->button.button)
     354        {
     355        case 3:     
     356          isbutton=3;
     357          break;
     358        default:
     359          isbutton=1;
     360          break;
     361        }
    354362      break;
    355363    case GDK_BUTTON_RELEASE:
    356       isbutton=false;
     364      isbutton=0;
    357365      active_item=NULL;
    358366      active_node=INVALID;
     
    377385
    378386        //all the edges connected to the moved point has to be redrawn
    379         EdgeIt e;
    380 
    381         g.firstOut(e,active_node);
    382 
    383         for(;e!=INVALID;g.nextOut(e))
     387        EdgeIt ei;
     388
     389        g.firstOut(ei,active_node);
     390
     391        for(;ei!=INVALID;g.nextOut(ei))
    384392        {
    385393            Gnome::Canvas::Points coos;
    386394            double x1, x2, y1, y2;
    387395
    388             nodesmap[g.source(e)]->get_bounds(x1, y1, x2, y2);
     396            nodesmap[g.source(ei)]->get_bounds(x1, y1, x2, y2);
    389397            coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    390398
    391             nodesmap[g.target(e)]->get_bounds(x1, y1, x2, y2);
     399            nodesmap[g.target(ei)]->get_bounds(x1, y1, x2, y2);
    392400            coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    393401
    394             edgesmap[e]->set_points(coos);
    395 
    396             edgesmap[e]->get_bounds(x1, y1, x2, y2);
    397 
    398             edgetextmap[e]->property_x().set_value((x1+x2)/2);
    399             edgetextmap[e]->property_y().set_value((y1+y2)/2);
     402            if(isbutton==3)
     403              {
     404                edgesmap[ei]->set_points(coos);
     405              }
     406            else
     407              {
     408                edgesmap[ei]->set_points(coos,true);
     409              }
     410
     411            edgesmap[ei]->get_bounds(x1, y1, x2, y2);
     412
     413            edgetextmap[ei]->property_x().set_value((x1+x2)/2);
     414            edgetextmap[ei]->property_y().set_value((y1+y2)/2);
    400415        }
    401416
    402         g.firstIn(e,active_node);
    403         for(;e!=INVALID;g.nextIn(e))
     417        g.firstIn(ei,active_node);
     418        for(;ei!=INVALID;g.nextIn(ei))
    404419        {
    405420            Gnome::Canvas::Points coos;
    406421            double x1, x2, y1, y2;
    407422
    408             nodesmap[g.source(e)]->get_bounds(x1, y1, x2, y2);
     423            nodesmap[g.source(ei)]->get_bounds(x1, y1, x2, y2);
    409424            coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    410425
    411             nodesmap[g.target(e)]->get_bounds(x1, y1, x2, y2);
     426            nodesmap[g.target(ei)]->get_bounds(x1, y1, x2, y2);
    412427            coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));
    413428
    414             edgesmap[e]->set_points(coos);
    415 
    416             edgesmap[e]->get_bounds(x1, y1, x2, y2);
    417 
    418             edgetextmap[e]->property_x().set_value((x1+x2)/2);
    419             edgetextmap[e]->property_y().set_value((y1+y2)/2);
     429            if(isbutton==3)
     430              {
     431                edgesmap[ei]->set_points(coos);
     432              }
     433            else
     434              {
     435                edgesmap[ei]->set_points(coos,true);
     436              }
     437
     438            edgesmap[ei]->get_bounds(x1, y1, x2, y2);
     439
     440            edgetextmap[ei]->property_x().set_value((x1+x2)/2);
     441            edgetextmap[ei]->property_y().set_value((y1+y2)/2);
    420442        }
    421443      }
     
    433455      //draw the new node in red at the clicked place
    434456    case GDK_BUTTON_PRESS:
    435       isbutton=true;
     457      isbutton=1;
    436458
    437459      active_node=NodeIt(g,g.addNode());
     
    461483      //finalize the new node
    462484    case GDK_BUTTON_RELEASE:
    463       isbutton=false;
     485      isbutton=0;
    464486      *active_item << Gnome::Canvas::Properties::fill_color("blue");
    465487      active_item=NULL;
     
    500522                {
    501523                  *(nodesmap[active_node]) << Gnome::Canvas::Properties::fill_color("red");
    502                   isbutton=true;
     524                  isbutton=1;
    503525                }
    504526              //clicked item was not a node. It could be e.g. edge.
     
    565587      break;
    566588    case GDK_BUTTON_RELEASE:
    567       isbutton=false;
     589      isbutton=0;
    568590      //we clear settings in two cases
    569591      //1: the edge is ready (target_item has valid value)
  • graph_displayer_canvas.h

    r19 r20  
    9797
    9898  ///Indicates whether the button of mouse is pressed or not
    99   bool isbutton;
     99  int isbutton;
    100100
    101101  ///At this location was the mousebutton pressed.
Note: See TracChangeset for help on using the changeset viewer.