[Lemon-commits] [lemon_svn] hegyi: r2098 - hugo/trunk/gui
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:50:08 CET 2006
Author: hegyi
Date: Wed Jul 27 12:47:38 2005
New Revision: 2098
Modified:
hugo/trunk/gui/graph_displayer_canvas-event.cc
hugo/trunk/gui/map_win.cc
Log:
Documentation was added to GUI.
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 Wed Jul 27 12:47:38 2005
@@ -424,10 +424,13 @@
switch(e->type)
{
case GDK_BUTTON_PRESS:
+ //finding the clicked items
window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
active_item=(get_item_at(clicked_x, clicked_y));
active_node=INVALID;
active_edge=INVALID;
+
+ //was it a node?
for (NodeIt i(g); i!=INVALID; ++i)
{
if(nodesmap[i]==active_item)
@@ -435,6 +438,7 @@
active_node=i;
}
}
+ //or was it an edge?
if(active_node==INVALID)
{
for (EdgeIt i(g); i!=INVALID; ++i)
@@ -445,6 +449,8 @@
}
}
}
+
+ //recolor activated item
if(active_item)
{
*active_item << Gnome::Canvas::Properties::fill_color("red");
@@ -455,8 +461,10 @@
window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
if(active_item)
{
+ //the cursor was not moved since pressing it
if( active_item == ( get_item_at (clicked_x, clicked_y) ) )
{
+ //a node was found
if(active_node!=INVALID)
{
@@ -522,14 +530,19 @@
switch(e->type)
{
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)
{
@@ -538,29 +551,55 @@
clicked_edge=i;
}
}
+ //if it was really an edge...
if(clicked_edge!=INVALID)
{
- if(edgetextmap[clicked_edge]->property_text().get_value()!="")
+ //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())
{
- active_edge=clicked_edge;
- if(canvasentrywidget)
+ //and there is activated map
+ if(edgetextmap[clicked_edge]->property_text().get_value()!="")
{
- delete(canvasentrywidget);
+ //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();
+
+ //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()*1.5);
+ canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5);
}
- 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);
}
}
+ //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;
@@ -579,6 +618,7 @@
switch(e->type)
{
case GDK_KEY_PRESS:
+ //for Escape or Enter hide the displayed widget
{
switch(((GdkEventKey*)e)->keyval)
{
@@ -596,9 +636,13 @@
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)
{
@@ -607,6 +651,8 @@
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
@@ -620,16 +666,24 @@
//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()!="")
{
+ //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();
+
+ //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;
@@ -641,8 +695,12 @@
}
}
}
+ //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;
@@ -670,8 +728,11 @@
case GDK_KP_Enter:
case GDK_Return:
{
+ //these variables check whether the text in the entry is valid
bool valid_double=true;
int point_num=0;
+
+ //getting the value from the entry and converting it to double
Glib::ustring mapvalue_str = entrywidget.get_text();
char * mapvalue_ch=new char [mapvalue_str.length()];
@@ -693,46 +754,10 @@
double mapvalue_d=atof(mapvalue_ch);
-// double double_map_fract_value=0;
-// double double_map_value=0;
-// int offset=0;
-// int found_letter=0;
- //converting text to double
-// for(int i=0;i<(int)(mapvalue.length());i++)
-// {
-// if(((mapvalue[i]<='9')&&(mapvalue[i]>='0'))||(mapvalue[i]=='.'))
-// {
-// if(mapvalue[i]=='.')
-// {
-// //for calculating non-integer part of double we step backward from the end
-// //after each step the number will be divided by ten, and the new value will be added
-// //to step backward from the end until the point the actual character of the string is the following:
-// // mapvalue.length()-(i-position_of_point)
-// //if i was the number of the first character after the decimal point the selected character will be the last
-// //if i was the number of the last character, the selected character will be the first after the decimal point
-// offset=mapvalue.length()+i;
-// }
-// else
-// {
-// if(!offset)
-// {
-// double_map_value=10*double_map_value+mapvalue[i]-'0';
-// }
-// else
-// {
-// double_map_fract_value=double_map_fract_value/10+(double)(mapvalue[offset-i]-'0')/10;
-// }
-// }
-// }
-// else
-// {
-// found_letter++;
-// continue;
-// }
-// }
-
+ //if the text in the entry was correct
if((point_num<=1)&&(valid_double))
{
+ //save the value to the correct place
switch(actual_tool)
{
case EDGE_MAP_EDIT:
@@ -748,6 +773,7 @@
}
entrywidget.hide();
}
+ //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;
@@ -826,17 +852,27 @@
void GraphDisplayerCanvas::addNewEdgeMap(double default_value, std::string mapname)
{
+ //create the new map
Graph::EdgeMap<double> * emptr=new Graph::EdgeMap<double> (g,default_value);
mapstorage.addEdgeMap(mapname,emptr);
+
+ //add it to the list of the displayable maps
mapwin->registerNewEdgeMap(mapname);
+
+ //display it
changeEdgeText(mapname);
}
void GraphDisplayerCanvas::addNewNodeMap(double default_value, std::string mapname)
{
+ //create the new map
Graph::NodeMap<double> * emptr=new Graph::NodeMap<double> (g,default_value);
mapstorage.addNodeMap(mapname,emptr);
+
+ //add it to the list of the displayable maps
mapwin->registerNewNodeMap(mapname);
+
+ //display it
changeNodeText(mapname);
}
Modified: hugo/trunk/gui/map_win.cc
==============================================================================
--- hugo/trunk/gui/map_win.cc (original)
+++ hugo/trunk/gui/map_win.cc Wed Jul 27 12:47:38 2005
@@ -259,6 +259,7 @@
listStrings.push_back(newmapname);
e_combo_array[i].set_popdown_strings(listStrings);
}
+ //setting text property for the new map
Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry();
entry->set_text((Glib::ustring)newmapname);
}
@@ -272,6 +273,7 @@
listStrings.push_back(newmapname);
n_combo_array[i].set_popdown_strings(listStrings);
}
+ //setting text property for the new map
Gtk::Entry* entry = n_combo_array[N_TEXT].get_entry();
entry->set_text((Glib::ustring)newmapname);
}
More information about the Lemon-commits
mailing list