# HG changeset patch
# User hegyi
# Date 1121462238 0
# Node ID 73c3f5d0079c45498edad75b79f395875a900a4d
# Parent  be178ff8871160e9f64bfdc64cb1a57c494f1d27
EdgeMapEditor is on its way, but it is far not yet ready.

diff -r be178ff88711 -r 73c3f5d0079c gui/graph_displayer_canvas-event.cc
--- a/gui/graph_displayer_canvas-event.cc	Fri Jul 15 16:12:35 2005 +0000
+++ b/gui/graph_displayer_canvas-event.cc	Fri Jul 15 21:17:18 2005 +0000
@@ -13,51 +13,65 @@
 
 void GraphDisplayerCanvas::changeEditorialTool(int newtool)
 {
-  actual_handler.disconnect();
+  if(actual_tool!=newtool)
+    {
 
-  if(actual_tool==CREATE_EDGE)
-    {
-	GdkEvent * generated=new GdkEvent();
-	generated->type=GDK_BUTTON_RELEASE;
-	generated->button.button=3;
-	createEdgeEventHandler(generated);      
-    }
+      actual_handler.disconnect();
 
-  actual_tool=newtool;
+      switch(actual_tool)
+	{
+	case CREATE_EDGE:
+	  {
+	    GdkEvent * generated=new GdkEvent();
+	    generated->type=GDK_BUTTON_RELEASE;
+	    generated->button.button=3;
+	    createEdgeEventHandler(generated);      
+	    break;
+	  }
+	case EDGE_MAP_EDIT:
+	  break;
+	default:
+	  break;
+	}
 
-  active_item=NULL; 
-  target_item=NULL; 
-  active_edge=INVALID;	
-  active_node=INVALID;	
+      active_item=NULL; 
+      target_item=NULL; 
+      active_edge=INVALID;	
+      active_node=INVALID;	
 
-  switch(newtool)
-    {
-    case MOVE:
-      actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
-      break;
 
-    case CREATE_NODE:
-      actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createNodeEventHandler), false);
-      break;
+      actual_tool=newtool;
+  
+      switch(newtool)
+	{
+	case MOVE:
+	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
+	  break;
 
-    case CREATE_EDGE:
-      actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createEdgeEventHandler), false);
-      break;
+	case CREATE_NODE:
+	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createNodeEventHandler), false);
+	  break;
 
-    case ERASER:
-      actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false);
-      break;
+	case CREATE_EDGE:
+	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::createEdgeEventHandler), false);
+	  break;
 
-    case EDGE_MAP_EDIT:
-      actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
-      break;
+	case ERASER:
+	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false);
+	  break;
 
-    case NODE_MAP_EDIT:
-      actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
-      break;
+	case EDGE_MAP_EDIT:
+	  grab_focus();
+	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
+	  break;
 
-    default:
-      break;
+	case NODE_MAP_EDIT:
+	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
+	  break;
+
+	default:
+	  break;
+	}
     }
 }
 
@@ -492,35 +506,60 @@
 {
   switch(e->type)
     {
+    case GDK_KEY_PRESS:
+      {
+	std::cout << "Any button was pressed" << std::endl;
+	switch(((GdkEventKey*)e)->keyval)
+	  {
+	  case GDK_A:
+	    std::cout << "A button was pressed" << std::endl;
+	    break;
+	  default:
+	    break;
+	  }
+  
+	break;
+      }
     case GDK_BUTTON_PRESS:
-      window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
-      active_item=(get_item_at(clicked_x, clicked_y));
-      active_edge=INVALID;
-      for (EdgeIt i(g); i!=INVALID; ++i)
-	{
-	  if(edgesmap[i]==active_item)
-	    {
-	      active_edge=i;
-	    }
-	}
-      if((active_edge!=INVALID)&&(edgetextmap[active_edge]->property_text().get_value()!=""))
-	{
-	  if(canvasentrywidget)
-	    {
-	      delete(canvasentrywidget);
-	    }
-	  entrywidget.show();
-	  entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value());
-	  xy<double> entry_coos;
-	  entry_coos.x=(edgetextmap[active_edge])->property_x().get_value();
-	  entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2;
-	  entry_coos.y=(edgetextmap[active_edge])->property_y().get_value();
-	  entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2;
-	  canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget);
-	  canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*1.5);
-	  canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5);
-	}
-      break;
+      {
+	window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
+	active_item=(get_item_at(clicked_x, clicked_y));
+	Graph::EdgeIt clicked_edge=INVALID;
+	for (EdgeIt i(g); i!=INVALID; ++i)
+	  {
+	    if(edgesmap[i]==active_item)
+	      {
+		clicked_edge=i;
+	      }
+	  }
+	if(clicked_edge!=INVALID)
+	  {
+	    if(edgetextmap[clicked_edge]->property_text().get_value()!="")
+	      {
+		active_edge=clicked_edge;
+		if(canvasentrywidget)
+		  {
+		    delete(canvasentrywidget);
+		  }
+		entrywidget.show();
+		entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value());
+		xy<double> entry_coos;
+		entry_coos.x=(edgetextmap[active_edge])->property_x().get_value();
+		entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2;
+		entry_coos.y=(edgetextmap[active_edge])->property_y().get_value();
+		entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2;
+		canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget);
+		canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*1.5);
+		canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5);
+	      }
+	  }
+	else
+	  {
+	    //mentse el -> problema, hogy nem tudja melyik map-be
+	    entrywidget.hide();
+	  }
+	break;
+      }
     default:
       break;
     }
@@ -533,6 +572,14 @@
   return false;
 }
 
+bool GraphDisplayerCanvas::entryWidgetChangeHandler(GdkEvent* e)
+{
+  Glib::ustring mapvalue = entrywidget.get_text();
+  std::cout << mapvalue << std::endl;
+  e=e;
+  return false;
+}
+
 void GraphDisplayerCanvas::deleteItem(NodeIt node_to_delete)
 {
   delete(nodetextmap[node_to_delete]);
diff -r be178ff88711 -r 73c3f5d0079c gui/graph_displayer_canvas.cc
--- a/gui/graph_displayer_canvas.cc	Fri Jul 15 16:12:35 2005 +0000
+++ b/gui/graph_displayer_canvas.cc	Fri Jul 15 21:17:18 2005 +0000
@@ -5,12 +5,16 @@
 GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm, MapStorage & ms, MapWin * mw):g(gr),nodesmap(g),edgesmap(g),edgetextmap(g),nodetextmap(g),displayed_graph(*(root()), 0, 0),canvasentrywidget(NULL),mapstorage(ms),isbutton(0),active_item(NULL),target_item(NULL),mapwin(mw)
 {
   
+  active_node=INVALID;
+  active_edge=INVALID;
+
+  //setting event handler for the editor widget
+  entrywidget.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::entryWidgetChangeHandler), false);
+
+  //base event handler is move tool
   actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
   actual_tool=CREATE_NODE;
 
-  active_node=INVALID;
-  active_edge=INVALID;
-
   //set_center_scroll_region(true);
 
   //first edges are drawn, to hide joining with nodes later
diff -r be178ff88711 -r 73c3f5d0079c gui/graph_displayer_canvas.h
--- a/gui/graph_displayer_canvas.h	Fri Jul 15 16:12:35 2005 +0000
+++ b/gui/graph_displayer_canvas.h	Fri Jul 15 21:17:18 2005 +0000
@@ -90,6 +90,9 @@
   ///event handler for the case when node map editor tool is active
   bool nodeMapEditEventHandler(GdkEvent*);
 
+  ///event handler for the case when the entry widget is changed
+  bool entryWidgetChangeHandler(GdkEvent*);
+
 public:
   ///Moves the text to new place
   void textReposition(xy<double>);