[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