Changeset 1474:75c6d2eb187a in lemon-0.x
- Timestamp:
- 06/13/05 12:30:08 (19 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1954
- Location:
- gui
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
gui/graph_displayer_canvas.cc
r1468 r1474 2 2 #include <math.h> 3 3 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(false),active_item(NULL) 5 { 6 Gnome::Canvas::Ellipse * origo=new Gnome::Canvas::Ellipse(displayed_graph, 0-20, 0-20, 0+20, 0+20); 7 *origo << Gnome::Canvas::Properties::fill_color("black"); 8 *origo << Gnome::Canvas::Properties::outline_color("black"); 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(false),active_item(NULL),target_item(NULL) 5 { 9 6 10 actual_handler= /*displayed_graph.*/signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_node_event_handler), false);7 actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false); 11 8 12 9 //set_center_scroll_region(true); … … 367 364 368 365 //all the edges connected to the moved point has to be redrawn 369 370 366 EdgeIt e; 371 367 … … 459 455 bool GraphDisplayerCanvas::create_edge_event_handler(GdkEvent* e) 460 456 { 461 e=e; 457 switch(e->type) 458 { 459 case GDK_BUTTON_PRESS: 460 if(!active_item) 461 { 462 //we mark the location of the event to be able to calculate parameters of dragging 463 clicked_x=e->button.x; 464 clicked_y=e->button.y; 465 active_item=(get_item_at(e->button.x, e->button.y)); 466 active_node=INVALID; 467 for (NodeIt i(g); i!=INVALID; ++i) 468 { 469 if(nodesmap[i]==active_item) 470 { 471 active_node=i; 472 } 473 } 474 *(nodesmap[active_node]) << Gnome::Canvas::Properties::fill_color("red"); 475 isbutton=true; 476 } 477 else 478 { 479 target_item=(get_item_at(e->button.x, e->button.y)); 480 Graph::NodeIt target_node=INVALID; 481 for (NodeIt i(g); i!=INVALID; ++i) 482 { 483 if(nodesmap[i]==target_item) 484 { 485 target_node=i; 486 } 487 } 488 *(nodesmap[target_node]) << Gnome::Canvas::Properties::fill_color("red"); 489 490 //creating new edge 491 // Graph::Edge new_edge=g.addEdge(active_node, target_node); 492 active_edge=EdgeIt(g,g.addEdge(active_node, target_node)); 493 494 //calculating coordinates of new edge 495 Gnome::Canvas::Points coos; 496 double x1, x2, y1, y2; 497 498 active_item->get_bounds(x1, y1, x2, y2); 499 coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); 500 501 target_item->get_bounds(x1, y1, x2, y2); 502 coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); 503 504 //drawing new edge 505 edgesmap[active_edge]=new Gnome::Canvas::Line(displayed_graph, coos); 506 *(edgesmap[active_edge]) << Gnome::Canvas::Properties::fill_color("green"); 507 edgesmap[active_edge]->property_width_pixels().set_value(10); 508 509 //redraw nodes to blank terminations of the new edge 510 target_item->raise_to_top(); 511 active_item->raise_to_top(); 512 513 //initializing edge-text as well, to empty string 514 edgesmap[active_edge]->get_bounds(x1, y1, x2, y2); 515 edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph,(x1+x2)/2, (y1+y2)/2, ""); 516 edgetextmap[active_edge]->property_fill_color().set_value("black"); 517 } 518 break; 519 case GDK_BUTTON_RELEASE: 520 isbutton=false; 521 if(target_item) 522 { 523 *active_item << Gnome::Canvas::Properties::fill_color("blue"); 524 *target_item << Gnome::Canvas::Properties::fill_color("blue"); 525 active_item=NULL; 526 target_item=NULL; 527 } 528 break; 529 default: 530 break; 531 } 462 532 return false; 463 533 } -
gui/graph_displayer_canvas.h
r1468 r1474 97 97 ///1. we cannot query the item at he cursor as fast as it could not cause a Segmentation Fault 98 98 ///2. we would like to handle only ony item per movement, therefore quering it is not a working solution 99 Gnome::Canvas::Item * active_item ;99 Gnome::Canvas::Item * active_item, * target_item; 100 100 Graph::NodeIt active_node; 101 Graph::EdgeIt active_edge; 101 102 102 103 static const int zoom_step = 5;
Note: See TracChangeset
for help on using the changeset viewer.