graph_displayer_canvas.cc
branchgui
changeset 13 0b2281cc1e32
parent 12 1db7a6dd17f8
child 14 39945305a572
equal deleted inserted replaced
7:b920ceb8e1a8 8:722c64c1863c
   320       break;
   320       break;
   321 
   321 
   322     case CREATE_EDGE:
   322     case CREATE_EDGE:
   323       actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false);
   323       actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::create_edge_event_handler), false);
   324       break;
   324       break;
       
   325 
       
   326     case ERASER:
       
   327       actual_handler=displayed_graph.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraser_event_handler), false);
       
   328       break;
       
   329 
   325     default:
   330     default:
   326       break;
   331       break;
   327     }
   332     }
   328 }
   333 }
   329 
   334 
   582       break;
   587       break;
   583     }
   588     }
   584   return false;
   589   return false;
   585 }
   590 }
   586 
   591 
       
   592 bool GraphDisplayerCanvas::eraser_event_handler(GdkEvent* e)
       
   593 {
       
   594   switch(e->type)
       
   595     {
       
   596     case GDK_BUTTON_PRESS:
       
   597       active_item=(get_item_at(e->button.x, e->button.y));
       
   598       active_node=INVALID;
       
   599       active_edge=INVALID;
       
   600       for (NodeIt i(g); i!=INVALID; ++i)
       
   601 	{
       
   602 	  if(nodesmap[i]==active_item)
       
   603 	    {
       
   604 	      active_node=i;
       
   605 	    }
       
   606 	}
       
   607       if(active_node==INVALID)
       
   608 	{
       
   609 	  for (EdgeIt i(g); i!=INVALID; ++i)
       
   610 	    {
       
   611 	      if(edgesmap[i]==active_item)
       
   612 		{
       
   613 		  active_edge=i;
       
   614 		}
       
   615 	    }
       
   616 	}
       
   617     *active_item << Gnome::Canvas::Properties::fill_color("red");
       
   618       break;
       
   619 
       
   620     case GDK_BUTTON_RELEASE:
       
   621       if(active_item==(get_item_at(e->button.x, e->button.y)))
       
   622 	{
       
   623 	  if(active_node!=INVALID)
       
   624 	    {
       
   625 	      EdgeIt e;
       
   626 	      g.firstOut(e,active_node);
       
   627 	      for(;e!=INVALID;g.nextOut(e))
       
   628 		{
       
   629 		  delete_item(edgesmap[e]);
       
   630 		  //edgesmap[e]->property_points().set_value(coos);
       
   631 		  //edgetextmap[e]->property_y().set_value((y1+y2)/2);
       
   632 		}
       
   633 
       
   634 	      g.firstIn(e,active_node);
       
   635 	      for(;e!=INVALID;g.nextIn(e))
       
   636 		{
       
   637 		  delete_item(edgesmap[e]);
       
   638 		  //edgesmap[e]->get_bounds(x1, y1, x2, y2);
       
   639 		  //edgetextmap[e]->property_y().set_value((y1+y2)/2);
       
   640 		}
       
   641 	    }
       
   642 	  delete_item(active_item);
       
   643 	  
       
   644 	}
       
   645       else
       
   646 	{
       
   647 	  if(active_node!=INVALID)
       
   648 	    {
       
   649 	      *active_item << Gnome::Canvas::Properties::fill_color("blue");
       
   650 	    }
       
   651 	  else
       
   652 	    {
       
   653 	      *active_item << Gnome::Canvas::Properties::fill_color("green");
       
   654 	    }
       
   655 	}
       
   656       active_item=NULL;
       
   657       active_edge=INVALID;
       
   658       active_node=INVALID;
       
   659       break;
       
   660 
       
   661     case GDK_MOTION_NOTIFY:
       
   662       break;
       
   663 
       
   664     default:
       
   665       break;
       
   666     }
       
   667   return true;
       
   668 }
       
   669 
       
   670 void GraphDisplayerCanvas::delete_item(Gnome::Canvas::Item * item_to_delete)
       
   671 {
       
   672   //item_to_delete->hide();
       
   673   delete(item_to_delete);
       
   674 }
       
   675