graph_displayer_canvas.cc
branchgui
changeset 16 319a4fa65e05
parent 14 39945305a572
child 17 c95aff79e893
equal deleted inserted replaced
9:85adf31cf2ca 10:598abebb8745
   620     case GDK_BUTTON_RELEASE:
   620     case GDK_BUTTON_RELEASE:
   621       if(active_item==(get_item_at(e->button.x, e->button.y)))
   621       if(active_item==(get_item_at(e->button.x, e->button.y)))
   622 	{
   622 	{
   623 	  if(active_node!=INVALID)
   623 	  if(active_node!=INVALID)
   624 	    {
   624 	    {
   625 //	      EdgeIt e;
   625 
   626 // 	      g.firstOut(e,active_node);
   626 	      //collecting edges to delete
   627 // 	      for(;e!=INVALID;g.nextOut(e))
   627 	      EdgeIt e;
   628 // 		{
   628 	      std::set<Graph::Edge> edges_to_delete;
   629 // 		  if(e!=INVALID)delete_item(e);
   629 
   630 // 		}
   630 	      g.firstOut(e,active_node);
   631 
   631 	      for(;e!=INVALID;g.nextOut(e))
   632 // 	      g.firstIn(e,active_node);
   632 		{
   633 // 	      for(;e!=INVALID;g.nextIn(e))
   633 		      edges_to_delete.insert(e);
   634 // 		{
   634 		}
   635 // 		  if(e!=INVALID)delete_item(e);
   635 
   636 // 		}
   636 	      g.firstIn(e,active_node);
   637 	      for (EdgeIt i(g); i!=INVALID; ++i)
   637 	      for(;e!=INVALID;g.nextIn(e))
   638 		{
   638 		{
   639 		  //std::cout << g.source(i).id << "-" << g.target(i).id << " " << active_node.id << std::endl;
   639 		      edges_to_delete.insert(e);
   640 		  if((g.source(i)==active_node)||(g.target(i)==active_node))
   640 		}
   641 		    {
   641 
   642 		      delete_item(i);
   642 	      //deleting collected edges
   643 		    }
   643 	      for(std::set<Graph::Edge>::iterator edge_set_it=edges_to_delete.begin();edge_set_it!=edges_to_delete.end();edge_set_it++)
       
   644 		{
       
   645 		  delete_item(*edge_set_it);
   644 		}
   646 		}
   645 	      delete_item(active_node);
   647 	      delete_item(active_node);
   646 	    }
   648 	    }
       
   649 	  //a simple edge was chosen
   647 	  else
   650 	  else
   648 	    {
   651 	    {
   649 	      delete_item(active_edge);
   652 	      delete_item(active_edge);
   650 	    }
   653 	    }
   651 
   654 
   652 	  
   655 	  
   653 	}
   656 	}
       
   657       //pointer was moved, deletion is cancelled
   654       else
   658       else
   655 	{
   659 	{
   656 	  if(active_node!=INVALID)
   660 	  if(active_node!=INVALID)
   657 	    {
   661 	    {
   658 	      *active_item << Gnome::Canvas::Properties::fill_color("blue");
   662 	      *active_item << Gnome::Canvas::Properties::fill_color("blue");
   660 	  else
   664 	  else
   661 	    {
   665 	    {
   662 	      *active_item << Gnome::Canvas::Properties::fill_color("green");
   666 	      *active_item << Gnome::Canvas::Properties::fill_color("green");
   663 	    }
   667 	    }
   664 	}
   668 	}
       
   669       //reseting datas
   665       active_item=NULL;
   670       active_item=NULL;
   666       active_edge=INVALID;
   671       active_edge=INVALID;
   667       active_node=INVALID;
   672       active_node=INVALID;
   668       break;
   673       break;
   669 
   674 
   686 {
   691 {
   687   delete(edgesmap[edge_to_delete]);
   692   delete(edgesmap[edge_to_delete]);
   688   g.erase(edge_to_delete);
   693   g.erase(edge_to_delete);
   689 }
   694 }
   690 
   695 
       
   696 void GraphDisplayerCanvas::delete_item(Graph::Edge edge_to_delete)
       
   697 {
       
   698   delete(edgesmap[edge_to_delete]);
       
   699   g.erase(edge_to_delete);
       
   700 }
       
   701