[Lemon-commits] [lemon_svn] hegyi: r2104 - hugo/trunk/gui

Lemon SVN svn at lemon.cs.elte.hu
Mon Nov 6 20:50:10 CET 2006


Author: hegyi
Date: Thu Jul 28 17:54:00 2005
New Revision: 2104

Modified:
   hugo/trunk/gui/Makefile.am
   hugo/trunk/gui/all_include.h
   hugo/trunk/gui/graph_displayer_canvas-edge.cc
   hugo/trunk/gui/graph_displayer_canvas-event.cc
   hugo/trunk/gui/graph_displayer_canvas-node.cc
   hugo/trunk/gui/graph_displayer_canvas.cc
   hugo/trunk/gui/map_win.cc

Log:
cout->cerr, node radius and edge width is now scaled, maps are editable by clicking on texts.

Modified: hugo/trunk/gui/Makefile.am
==============================================================================
--- hugo/trunk/gui/Makefile.am	(original)
+++ hugo/trunk/gui/Makefile.am	Thu Jul 28 17:54:00 2005
@@ -18,8 +18,6 @@
 	mapstorage.h \
 	map_win.cc \
 	map_win.h \
-	edit_win.cc \
-	edit_win.h \
 	broken_edge.cc \
 	broken_edge.h \
 	new_map_win.cc \

Modified: hugo/trunk/gui/all_include.h
==============================================================================
--- hugo/trunk/gui/all_include.h	(original)
+++ hugo/trunk/gui/all_include.h	Thu Jul 28 17:54:00 2005
@@ -22,7 +22,10 @@
 #define RANGE 3
 #define WIN_WIDTH 900
 #define WIN_HEIGHT 600
-#define ALMOST_ONE 0.9999999999
+#define MIN_EDGE_WIDTH 2
+#define MAX_EDGE_WIDTH 40
+#define MIN_NODE_RADIUS 2
+#define MAX_NODE_RADIUS 80
 
 #ifndef MAIN_PART
 extern std::vector <std::string> edge_property_strings;

Modified: hugo/trunk/gui/graph_displayer_canvas-edge.cc
==============================================================================
--- hugo/trunk/gui/graph_displayer_canvas-edge.cc	(original)
+++ hugo/trunk/gui/graph_displayer_canvas-edge.cc	Thu Jul 28 17:54:00 2005
@@ -6,12 +6,18 @@
 int GraphDisplayerCanvas::changeEdgeWidth (std::string mapname, Graph::Edge edge)
 {
   Graph::EdgeMap<double> * actual_map;
+  double min, max;
+
   if(mapname=="Default")
     {
+      min=edge_property_defaults[E_WIDTH];
+      max=edge_property_defaults[E_WIDTH];
       actual_map=new Graph::EdgeMap<double>(g,edge_property_defaults[E_WIDTH]);
     }
   else
     {
+      min=mapstorage.minOfEdgeMap(mapname);
+      max=mapstorage.maxOfEdgeMap(mapname);
       actual_map=(mapstorage.edgemap_storage)[mapname];
     }
 
@@ -19,11 +25,17 @@
     {
       for (EdgeIt i(g); i!=INVALID; ++i)
 	{
-	  int w=(int)(*actual_map)[i];
-	  if(w>=0)
+	  double v=abs((*actual_map)[i]);
+	  int w;
+	  if(min==max)
+	    {
+	      w=(int)(edge_property_defaults[E_WIDTH]);
+	    }
+	  else
 	    {
-	      edgesmap[i]->property_width_units().set_value(w);
+	      w=(int)(MIN_EDGE_WIDTH+(v-min)/(max-min)*(MAX_EDGE_WIDTH-MIN_EDGE_WIDTH));
 	    }
+	  edgesmap[i]->property_width_units().set_value(w);
 	}
     }
   else

Modified: hugo/trunk/gui/graph_displayer_canvas-event.cc
==============================================================================
--- hugo/trunk/gui/graph_displayer_canvas-event.cc	(original)
+++ hugo/trunk/gui/graph_displayer_canvas-event.cc	Thu Jul 28 17:54:00 2005
@@ -216,7 +216,7 @@
 
       //draw the new node in red at the clicked place
     case GDK_2BUTTON_PRESS:
-      std::cout << "double click" << std::endl;
+      //std::cout << "double click" << std::endl;
       break;
     case GDK_BUTTON_PRESS:
       isbutton=1;
@@ -381,7 +381,7 @@
 		  else
 		    {
 		      target_node=INVALID;
-		      std::cout << "Loop edge is not yet implemented!" << std::endl;
+		      std::cerr << "Loop edge is not yet implemented!" << std::endl;
 		    }
 		}
 	      //clicked item was not a node. it could be an e.g. edge. we do not deal with it furthermore.
@@ -527,189 +527,225 @@
 
 bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e)
 {
-  switch(e->type)
+  if(actual_tool==EDGE_MAP_EDIT)
     {
-    case GDK_KEY_PRESS:
-      //for Escape or Enter hide the displayed widget
-      {
-	nodeMapEditEventHandler(e);
-	break;
-      }
-    case GDK_BUTTON_PRESS:
-      //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge.
-      {
-	//find the activated item
-	window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
-	active_item=(get_item_at(clicked_x, clicked_y));
-
-	//determine, whether it was an edge
-	Graph::EdgeIt clicked_edge=INVALID;
-	for (EdgeIt i(g); i!=INVALID; ++i)
+      switch(e->type)
+	{
+	case GDK_KEY_PRESS:
+	  //for Escape or Enter hide the displayed widget
 	  {
-	    if(edgesmap[i]==active_item)
-	      {
-		clicked_edge=i;
-	      }
+	    nodeMapEditEventHandler(e);
+	    break;
 	  }
-	//if it was really an edge...
-	if(clicked_edge!=INVALID)
+	case GDK_BUTTON_PRESS:
+	  //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge.
 	  {
-	    //If there is already edited edge, it has to be saved first
-	    if(entrywidget.is_visible())
+	    //for determine, whether it was an edge
+	    Graph::EdgeIt clicked_edge=INVALID;
+
+	    //find the activated item between texts
+	    active_item=(get_item_at(e->button.x, e->button.y));
+	    for (EdgeIt i(g); i!=INVALID; ++i)
 	      {
-		GdkEvent * generated=new GdkEvent();
-		generated->type=GDK_KEY_PRESS;
-		((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
-		entryWidgetChangeHandler(generated);
+		if(edgetextmap[i]==active_item)
+		  {
+		    clicked_edge=i;
+		  }
 	      }
-	    //If the previous value could be saved, we can go further, otherwise not
-	    if(!entrywidget.is_visible())
+
+	    //if it was not between texts, search for it between edges
+	    if(clicked_edge==INVALID)
 	      {
-		//and there is activated map
-		if(edgetextmap[clicked_edge]->property_text().get_value()!="")
+		window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
+		active_item=(get_item_at(clicked_x, clicked_y));
+
+		for (EdgeIt i(g); i!=INVALID; ++i)
 		  {
-		    //activate the general variable for it
-		    active_edge=clicked_edge;
-		    //delete visible widget if there is
-		    if(canvasentrywidget)
+		    //at the same time only one can be active
+		    if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item))
 		      {
-			delete(canvasentrywidget);
+			clicked_edge=i;
 		      }
+		  }
+	      }
+	    //if it was really an edge...
+	    if(clicked_edge!=INVALID)
+	      {
+		//If there is already edited edge, it has to be saved first
+		if(entrywidget.is_visible())
+		  {
+		    GdkEvent * generated=new GdkEvent();
+		    generated->type=GDK_KEY_PRESS;
+		    ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
+		    entryWidgetChangeHandler(generated);
+		  }
+		//If the previous value could be saved, we can go further, otherwise not
+		if(!entrywidget.is_visible())
+		  {
+		    //and there is activated map
+		    if(edgetextmap[clicked_edge]->property_text().get_value()!="")
+		      {
+			//activate the general variable for it
+			active_edge=clicked_edge;
+			//delete visible widget if there is
+			if(canvasentrywidget)
+			  {
+			    delete(canvasentrywidget);
+			  }
 
-		    //initialize the entry
-		    entrywidget.show();
+			//initialize the entry
+			entrywidget.show();
 
-		    //fill in the correct value
-		    entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value());
+			//fill in the correct value
+			entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value());
 
-		    //replace and resize the entry to the activated edge and put it in a Canvas::Widget to be able to display it on gdc
-		    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()*4);
-		    canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5);
+			//replace and resize the entry to the activated edge and put it in a Canvas::Widget to be able to display it on gdc
+			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()*4);
+			canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5);
+		      }
 		  }
 	      }
+	    //if it was not an edge...
+	    else
+	      {
+		//In this case the click did not happen on an edge
+		//if there is visible entry we save the value in it
+		//we pretend like an Enter was presse din the Entry widget
+		GdkEvent * generated=new GdkEvent();
+		generated->type=GDK_KEY_PRESS;
+		((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
+		entryWidgetChangeHandler(generated);
+	      }
+	    break;
 	  }
-	//if it was not an edge...
-	else
-	  {
-	    //In this case the click did not happen on an edge
-	    //if there is visible entry we save the value in it
-	    //we pretend like an Enter was presse din the Entry widget
-	    GdkEvent * generated=new GdkEvent();
-	    generated->type=GDK_KEY_PRESS;
-	    ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
-	    entryWidgetChangeHandler(generated);
-	  }
-	break;
-      }
-    default:
-      break;
+	default:
+	  break;
+	}
     }
   return false;  
 }
 
 bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e)
 {
-  switch(e->type)
+  if(actual_tool==NODE_MAP_EDIT)
     {
-    case GDK_KEY_PRESS:
-      //for Escape or Enter hide the displayed widget
-      {
-	switch(((GdkEventKey*)e)->keyval)
+      switch(e->type)
+	{
+	case GDK_KEY_PRESS:
+	  //for Escape or Enter hide the displayed widget
 	  {
-	  case GDK_Escape:
-	    entrywidget.hide();
-	    break;
-	  case GDK_Return:
-	  case GDK_KP_Enter:
-	    entrywidget.hide();
-	    break;
-	  default:
+	    switch(((GdkEventKey*)e)->keyval)
+	      {
+	      case GDK_Escape:
+		entrywidget.hide();
+		break;
+	      case GDK_Return:
+	      case GDK_KP_Enter:
+		entrywidget.hide();
+		break;
+	      default:
+		break;
+	      }
+  
 	    break;
 	  }
-  
-	break;
-      }
-    case GDK_BUTTON_PRESS:
-      //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge.
-      {
-	//find the activated item
-	window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
-	active_item=(get_item_at(clicked_x, clicked_y));
-
-	//determine, whether it was a node
-	Graph::NodeIt clicked_node=INVALID;
-	for (NodeIt i(g); i!=INVALID; ++i)
+	case GDK_BUTTON_PRESS:
+	  //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge.
 	  {
-	    if(nodesmap[i]==active_item)
+	    //for determine, whether it was a node
+	    Graph::NodeIt clicked_node=INVALID;
+
+	    //find the activated item between texts
+	    active_item=(get_item_at(e->button.x, e->button.y));
+	    for (NodeIt i(g); i!=INVALID; ++i)
 	      {
-		clicked_node=i;
+		//at the same time only one can be active
+		if(nodetextmap[i]==active_item)
+		  {
+		    clicked_node=i;
+		  }
 	      }
-	  }
 
-	//if it was really an edge...
-	if(clicked_node!=INVALID)
-	  {
-	    //If there is already edited edge, it has to be saved first
-	    if(entrywidget.is_visible())
+	    //if there was not, search for it between nodes
+	    if(clicked_node==INVALID)
 	      {
-		GdkEvent * generated=new GdkEvent();
-		generated->type=GDK_KEY_PRESS;
-		((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
-		entryWidgetChangeHandler(generated);
+		window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
+		active_item=(get_item_at(clicked_x, clicked_y));
+
+		for (NodeIt i(g); i!=INVALID; ++i)
+		  {
+		    //at the same time only one can be active
+		    if(nodesmap[i]==active_item)
+		      {
+			clicked_node=i;
+		      }
+		  }
 	      }
-	    //If the previous value could be saved, we can go further, otherwise not
-	    if(!entrywidget.is_visible())
+	    //if it was really an edge...
+	    if(clicked_node!=INVALID)
 	      {
-		//and there is activated map
-		if(nodetextmap[clicked_node]->property_text().get_value()!="")
+		//If there is already edited edge, it has to be saved first
+		if(entrywidget.is_visible())
 		  {
-		    //activate the general variable for it
-		    active_node=clicked_node;
-		    //delete visible widget if there is
-		    if(canvasentrywidget)
+		    GdkEvent * generated=new GdkEvent();
+		    generated->type=GDK_KEY_PRESS;
+		    ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
+		    entryWidgetChangeHandler(generated);
+		  }
+		//If the previous value could be saved, we can go further, otherwise not
+		if(!entrywidget.is_visible())
+		  {
+		    //and there is activated map
+		    if(nodetextmap[clicked_node]->property_text().get_value()!="")
 		      {
-			delete(canvasentrywidget);
-		      }
+			//activate the general variable for it
+			active_node=clicked_node;
+			//delete visible widget if there is
+			if(canvasentrywidget)
+			  {
+			    delete(canvasentrywidget);
+			  }
 
-		    //initialize the entry
-		    entrywidget.show();
+			//initialize the entry
+			entrywidget.show();
 
-		    //fill in the correct value
-		    entrywidget.set_text(nodetextmap[active_node]->property_text().get_value());
+			//fill in the correct value
+			entrywidget.set_text(nodetextmap[active_node]->property_text().get_value());
 
-		    //replace and resize the entry to the activated node and put it in a Canvas::Widget to be able to display it on gdc
-		    xy<double> entry_coos;
-		    entry_coos.x=(nodetextmap[active_node])->property_x().get_value();
-		    entry_coos.x-=nodetextmap[active_node]->property_text_width().get_value()/2;
-		    entry_coos.y=(nodetextmap[active_node])->property_y().get_value();
-		    entry_coos.y-=nodetextmap[active_node]->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(nodetextmap[active_node]->property_text_width().get_value()*1.5);
-		    canvasentrywidget->property_height().set_value(nodetextmap[active_node]->property_text_height().get_value()*1.5);
+			//replace and resize the entry to the activated node and put it in a Canvas::Widget to be able to display it on gdc
+			xy<double> entry_coos;
+			entry_coos.x=(nodetextmap[active_node])->property_x().get_value();
+			entry_coos.x-=nodetextmap[active_node]->property_text_width().get_value()/2;
+			entry_coos.y=(nodetextmap[active_node])->property_y().get_value();
+			entry_coos.y-=nodetextmap[active_node]->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(nodetextmap[active_node]->property_text_width().get_value()*4);
+			canvasentrywidget->property_height().set_value(nodetextmap[active_node]->property_text_height().get_value()*1.5);
+		      }
 		  }
 	      }
+	    //if it was not an edge...
+	    else
+	      {
+		//In this case the click did not happen on an edge
+		//if there is visible entry we save the value in it
+		//we pretend like an Enter was presse din the Entry widget
+		GdkEvent * generated=new GdkEvent();
+		generated->type=GDK_KEY_PRESS;
+		((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
+		entryWidgetChangeHandler(generated);
+	      }
+	    break;
 	  }
-	//if it was not an edge...
-	else
-	  {
-	    //In this case the click did not happen on an edge
-	    //if there is visible entry we save the value in it
-	    //we pretend like an Enter was presse din the Entry widget
-	    GdkEvent * generated=new GdkEvent();
-	    generated->type=GDK_KEY_PRESS;
-	    ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
-	    entryWidgetChangeHandler(generated);
-	  }
-	break;
-      }
-    default:
-      break;
+	default:
+	  break;
+	}
     }
   return false;  
 }
@@ -782,7 +818,7 @@
 		//the text in the entry was not correct for a double
 		else
 		  {
-		    std::cout << "ERROR: only handling of double values is implemented yet!" << std::endl;
+		    std::cerr << "ERROR: only handling of double values is implemented yet!" << std::endl;
 		  }
 
 		break;
@@ -829,7 +865,7 @@
     {
       if(forming_edge!=INVALID)
 	{
-	  std::cout << "ERROR!!!! Valid edge found!" << std::endl;
+	  std::cerr << "ERROR!!!! Valid edge found!" << std::endl;
 	}
       else
 	{
@@ -850,7 +886,7 @@
 	}
       else
 	{
-	  std::cout << "ERROR!!!! Invalid edge found!" << std::endl;
+	  std::cerr << "ERROR!!!! Invalid edge found!" << std::endl;
 	}
     }
 

Modified: hugo/trunk/gui/graph_displayer_canvas-node.cc
==============================================================================
--- hugo/trunk/gui/graph_displayer_canvas-node.cc	(original)
+++ hugo/trunk/gui/graph_displayer_canvas-node.cc	Thu Jul 28 17:54:00 2005
@@ -6,12 +6,17 @@
 int GraphDisplayerCanvas::changeNodeRadius (std::string mapname, Graph::Node node)
 {
   Graph::NodeMap<double> * actual_map;
+  double min, max;
   if(mapname=="Default")
     {
+      min=node_property_defaults[N_RADIUS];
+      max=node_property_defaults[N_RADIUS];
       actual_map=new Graph::NodeMap<double>(g,node_property_defaults[N_RADIUS]);
     }
   else
     {
+      min=mapstorage.minOfNodeMap(mapname);
+      max=mapstorage.maxOfNodeMap(mapname);
       actual_map=(mapstorage.nodemap_storage)[mapname];
     }
 
@@ -19,7 +24,16 @@
     {
       for (NodeIt i(g); i!=INVALID; ++i)
 	{
-	  int w=(int)(*actual_map)[i];
+	  double v=abs((*actual_map)[i]);
+	  int w;
+	  if(min==max)
+	    {
+	      w=(int)(node_property_defaults[N_RADIUS]);
+	    }
+	  else
+	    {
+	      w=(int)(MIN_NODE_RADIUS+(v-min)/(max-min)*(MAX_NODE_RADIUS-MIN_NODE_RADIUS));
+	    }
 	  if(w>=0)
 	    {
 	      double x1, y1, x2, y2;

Modified: hugo/trunk/gui/graph_displayer_canvas.cc
==============================================================================
--- hugo/trunk/gui/graph_displayer_canvas.cc	(original)
+++ hugo/trunk/gui/graph_displayer_canvas.cc	Thu Jul 28 17:54:00 2005
@@ -41,6 +41,7 @@
 
     edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
     edgetextmap[i]->property_fill_color().set_value("darkgreen");
+    edgetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
   }
 
   //afterwards nodes come to be drawn
@@ -69,6 +70,7 @@
 
     nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, "");
     nodetextmap[i]->property_fill_color().set_value("darkblue");
+    nodetextmap[i]->signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
   }
 
   updateScrollRegion();

Modified: hugo/trunk/gui/map_win.cc
==============================================================================
--- hugo/trunk/gui/map_win.cc	(original)
+++ hugo/trunk/gui/map_win.cc	Thu Jul 28 17:54:00 2005
@@ -144,7 +144,7 @@
 	    gdc.changeEdgeText(mapname);
 	    break;
           default:
-	    std::cout<<"Error\n";
+	    std::cerr<<"Error\n";
 	}
       }
     }
@@ -175,7 +175,7 @@
 	    gdc.changeNodeText(mapname);
 	    break;
           default:
-	    std::cout<<"Error\n";
+	    std::cerr<<"Error\n";
 	}
       }
     }
@@ -207,7 +207,7 @@
 		      gdc.changeNodeText(mapname, node);
 		      break;
 		    default:
-		      std::cout<<"Error\n";
+		      std::cerr<<"Error\n";
 		    }
 		}
 	    }
@@ -242,7 +242,7 @@
 		      gdc.changeEdgeText(mapname, edge);
 		      break;
 		    default:
-		      std::cout<<"Error\n";
+		      std::cerr<<"Error\n";
 		    }
 		}
 	    }



More information about the Lemon-commits mailing list