graph_displayer_canvas-event.cc
changeset 149 930e838ad5b6
parent 148 5adf29662354
child 150 86273bfe0e4d
     1.1 --- a/graph_displayer_canvas-event.cc	Mon Sep 18 16:02:20 2006 +0000
     1.2 +++ b/graph_displayer_canvas-event.cc	Tue Sep 19 07:43:55 2006 +0000
     1.3 @@ -27,9 +27,7 @@
     1.4  	    createEdgeEventHandler(generated);      
     1.5  	    break;
     1.6  	  }
     1.7 -	case EDGE_MAP_EDIT:
     1.8 -	  //has to do the same thing as in the case of NODE_MAP_EDIT
     1.9 -	case NODE_MAP_EDIT:
    1.10 +	case MAP_EDIT:
    1.11  	  {
    1.12  	    break;
    1.13  	  }
    1.14 @@ -63,13 +61,9 @@
    1.15  	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::eraserEventHandler), false);
    1.16  	  break;
    1.17  
    1.18 -	case EDGE_MAP_EDIT:
    1.19 +	case MAP_EDIT:
    1.20  	  grab_focus();
    1.21 -	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::edgeMapEditEventHandler), false);
    1.22 -	  break;
    1.23 -
    1.24 -	case NODE_MAP_EDIT:
    1.25 -	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::nodeMapEditEventHandler), false);
    1.26 +	  actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::mapEditEventHandler), false);
    1.27  	  break;
    1.28  
    1.29  	default:
    1.30 @@ -622,179 +616,163 @@
    1.31    return false;
    1.32  }
    1.33  
    1.34 -bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e)
    1.35 +bool GraphDisplayerCanvas::mapEditEventHandler(GdkEvent* e)
    1.36  {
    1.37 -  if(actual_tool==EDGE_MAP_EDIT)
    1.38 -  {
    1.39 -    switch(e->type)
    1.40 +  if(actual_tool==MAP_EDIT)
    1.41      {
    1.42 -      case GDK_BUTTON_PRESS:
    1.43 -        {
    1.44 -          //for determine, whether it was an edge
    1.45 -          Edge clicked_edge=INVALID;
    1.46 +      switch(e->type)
    1.47 +	{
    1.48 +	case GDK_BUTTON_PRESS:
    1.49 +	  {
    1.50 +	    //for determine, whether it was an edge
    1.51 +	    Edge clicked_edge=INVALID;
    1.52 +	    //for determine, whether it was a node
    1.53 +	    Node clicked_node=INVALID;
    1.54  
    1.55 -          window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
    1.56 -          active_item=(get_item_at(clicked_x, clicked_y));
    1.57 +	    window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
    1.58 +	    active_item=(get_item_at(clicked_x, clicked_y));
    1.59  
    1.60 -          //find the activated item between texts
    1.61 -          for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
    1.62 -          {
    1.63 -            //at the same time only one can be active
    1.64 -            if(edgetextmap[i]==active_item)
    1.65 -            {
    1.66 -              clicked_edge=i;
    1.67 -            }
    1.68 -          }
    1.69 +	    //find the activated item between text of nodes
    1.70 +	    for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
    1.71 +	      {
    1.72 +		//at the same time only one can be active
    1.73 +		if(nodetextmap[i]==active_item)
    1.74 +		  {
    1.75 +		    clicked_node=i;
    1.76 +		  }
    1.77 +	      }
    1.78  
    1.79 -          //if it was not between texts, search for it between edges
    1.80 -          if(clicked_edge==INVALID)
    1.81 -          {
    1.82 -            for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
    1.83 -            {
    1.84 -              //at the same time only one can be active
    1.85 -              if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item))
    1.86 -              {
    1.87 -                clicked_edge=i;
    1.88 -              }
    1.89 -            }
    1.90 -          }
    1.91 - 
    1.92 -          //if it was really an edge...
    1.93 -          if(clicked_edge!=INVALID)
    1.94 -          {
    1.95 -            // the id map is not editable
    1.96 -            if (edgemap_to_edit == "label") return 0;
    1.97 +	    //if there was not, search for it between nodes
    1.98 +	    if(clicked_node==INVALID)
    1.99 +	      {
   1.100 +		for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
   1.101 +		  {
   1.102 +		    //at the same time only one can be active
   1.103 +		    if(nodesmap[i]==active_item)
   1.104 +		      {
   1.105 +			clicked_node=i;
   1.106 +		      }
   1.107 +		  }
   1.108 +	      }
   1.109  
   1.110 -            //and there is activated map
   1.111 -            if(edgetextmap[clicked_edge]->property_text().get_value()!="")
   1.112 -            {
   1.113 -              //activate the general variable for it
   1.114 -              active_edge=clicked_edge;
   1.115 +	    if(clicked_node==INVALID)
   1.116 +	      {
   1.117 +		//find the activated item between texts
   1.118 +		for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
   1.119 +		  {
   1.120 +		    //at the same time only one can be active
   1.121 +		    if(edgetextmap[i]==active_item)
   1.122 +		      {
   1.123 +			clicked_edge=i;
   1.124 +		      }
   1.125 +		  }
   1.126  
   1.127 -              //create a dialog
   1.128 -              Gtk::Dialog dialog("Edit value", true);
   1.129 -              dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.130 -              dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
   1.131 -              Gtk::VBox* vbox = dialog.get_vbox();
   1.132 -              Gtk::SpinButton spin(0.0, 4);
   1.133 -              spin.set_increments(1.0, 10.0);
   1.134 -              spin.set_range(-1000000.0, 1000000.0);
   1.135 -              spin.set_numeric(true);
   1.136 -              vbox->add(spin);
   1.137 -              spin.show();
   1.138 -              switch (dialog.run())
   1.139 -              {
   1.140 -                case Gtk::RESPONSE_NONE:
   1.141 -                case Gtk::RESPONSE_CANCEL:
   1.142 -                  break;
   1.143 -                case Gtk::RESPONSE_ACCEPT:
   1.144 -                  double new_value = spin.get_value();
   1.145 -                  (*(mytab.mapstorage).edgemap_storage[edgemap_to_edit])[active_edge] =
   1.146 -                    new_value;
   1.147 -                  std::ostringstream ostr;
   1.148 -                  ostr << new_value;
   1.149 -                  edgetextmap[active_edge]->property_text().set_value(
   1.150 -                      ostr.str());
   1.151 -                  //mapwin.updateEdge(active_edge);
   1.152 -//                   mapwin.updateEdge(Edge(INVALID));
   1.153 -                  propertyUpdate(Edge(INVALID));
   1.154 -              }
   1.155 -            }
   1.156 -          }
   1.157 -          break;
   1.158 -        }
   1.159 -      default:
   1.160 -        break;
   1.161 +		//if it was not between texts, search for it between edges
   1.162 +		if(clicked_edge==INVALID)
   1.163 +		  {
   1.164 +		    for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
   1.165 +		      {
   1.166 +			//at the same time only one can be active
   1.167 +			if((edgesmap[i]->getLine())==active_item)
   1.168 +			  {
   1.169 +			    clicked_edge=i;
   1.170 +			  }
   1.171 +		      }
   1.172 +		  }
   1.173 +	      }
   1.174 +
   1.175 +	    //if it was really a node...
   1.176 +	    if(clicked_node!=INVALID)
   1.177 +	      {
   1.178 +		// the id map is not editable
   1.179 +		if (nodemap_to_edit == "label") return 0;
   1.180 +
   1.181 +		//and there is activated map
   1.182 +		if(nodetextmap[clicked_node]->property_text().get_value()!="")
   1.183 +		  {
   1.184 +		    //activate the general variable for it
   1.185 +		    active_node=clicked_node;
   1.186 +
   1.187 +		    //create a dialog
   1.188 +		    Gtk::Dialog dialog("Edit value", true);
   1.189 +		    dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.190 +		    dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
   1.191 +		    Gtk::VBox* vbox = dialog.get_vbox();
   1.192 +		    Gtk::SpinButton spin(0.0, 4);
   1.193 +		    spin.set_increments(1.0, 10.0);
   1.194 +		    spin.set_range(-1000000.0, 1000000.0);
   1.195 +		    spin.set_numeric(true);
   1.196 +		    spin.set_value(atof(nodetextmap[active_node]->property_text().get_value().c_str()));
   1.197 +		    vbox->add(spin);
   1.198 +		    spin.show();
   1.199 +		    switch (dialog.run())
   1.200 +		      {
   1.201 +		      case Gtk::RESPONSE_NONE:
   1.202 +		      case Gtk::RESPONSE_CANCEL:
   1.203 +			break;
   1.204 +		      case Gtk::RESPONSE_ACCEPT:
   1.205 +			double new_value = spin.get_value();
   1.206 +			(*(mytab.mapstorage).nodemap_storage[nodemap_to_edit])[active_node] =
   1.207 +			  new_value;
   1.208 +			std::ostringstream ostr;
   1.209 +			ostr << new_value;
   1.210 +			nodetextmap[active_node]->property_text().set_value(ostr.str());
   1.211 +			//mapwin.updateNode(active_node);
   1.212 +			//mapwin.updateNode(Node(INVALID));
   1.213 +			propertyUpdate(Node(INVALID));
   1.214 +		      }
   1.215 +		  }
   1.216 +	      }
   1.217 +	    else
   1.218 +	      //if it was really an edge...
   1.219 +	      if(clicked_edge!=INVALID)
   1.220 +		{
   1.221 +		  // the id map is not editable
   1.222 +		  if (edgemap_to_edit == "label") return 0;
   1.223 +
   1.224 +		  //and there is activated map
   1.225 +		  if(edgetextmap[clicked_edge]->property_text().get_value()!="")
   1.226 +		    {
   1.227 +		      //activate the general variable for it
   1.228 +		      active_edge=clicked_edge;
   1.229 +
   1.230 +		      //create a dialog
   1.231 +		      Gtk::Dialog dialog("Edit value", true);
   1.232 +		      dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.233 +		      dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
   1.234 +		      Gtk::VBox* vbox = dialog.get_vbox();
   1.235 +		      Gtk::SpinButton spin(0.0, 4);
   1.236 +		      spin.set_increments(1.0, 10.0);
   1.237 +		      spin.set_range(-1000000.0, 1000000.0);
   1.238 +		      spin.set_numeric(true);
   1.239 +		      spin.set_value(atof(edgetextmap[active_edge]->property_text().get_value().c_str()));
   1.240 +		      vbox->add(spin);
   1.241 +		      spin.show();
   1.242 +		      switch (dialog.run())
   1.243 +			{
   1.244 +			case Gtk::RESPONSE_NONE:
   1.245 +			case Gtk::RESPONSE_CANCEL:
   1.246 +			  break;
   1.247 +			case Gtk::RESPONSE_ACCEPT:
   1.248 +			  double new_value = spin.get_value();
   1.249 +			  (*(mytab.mapstorage).edgemap_storage[edgemap_to_edit])[active_edge] =
   1.250 +			    new_value;
   1.251 +			  std::ostringstream ostr;
   1.252 +			  ostr << new_value;
   1.253 +			  edgetextmap[active_edge]->property_text().set_value(
   1.254 +									      ostr.str());
   1.255 +			  //mapwin.updateEdge(active_edge);
   1.256 +			  //                   mapwin.updateEdge(Edge(INVALID));
   1.257 +			  propertyUpdate(Edge(INVALID));
   1.258 +			}
   1.259 +		    }
   1.260 +		}
   1.261 +	    break;
   1.262 +	  }
   1.263 +	default:
   1.264 +	  break;
   1.265 +	}
   1.266      }
   1.267 -  }
   1.268 -  return false;  
   1.269 -}
   1.270 -
   1.271 -bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e)
   1.272 -{
   1.273 -  if(actual_tool==NODE_MAP_EDIT)
   1.274 -  {
   1.275 -    switch(e->type)
   1.276 -    {
   1.277 -      case GDK_BUTTON_PRESS:
   1.278 -        {
   1.279 -          //for determine, whether it was a node
   1.280 -          Node clicked_node=INVALID;
   1.281 -
   1.282 -          window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
   1.283 -          active_item=(get_item_at(clicked_x, clicked_y));
   1.284 -
   1.285 -          //find the activated item between texts
   1.286 -          for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
   1.287 -          {
   1.288 -            //at the same time only one can be active
   1.289 -            if(nodetextmap[i]==active_item)
   1.290 -            {
   1.291 -              clicked_node=i;
   1.292 -            }
   1.293 -          }
   1.294 -
   1.295 -          //if there was not, search for it between nodes
   1.296 -          if(clicked_node==INVALID)
   1.297 -          {
   1.298 -            for (NodeIt i((mytab.mapstorage).graph); i!=INVALID; ++i)
   1.299 -            {
   1.300 -              //at the same time only one can be active
   1.301 -              if(nodesmap[i]==active_item)
   1.302 -              {
   1.303 -                clicked_node=i;
   1.304 -              }
   1.305 -            }
   1.306 -          }
   1.307 -
   1.308 -          //if it was really a node...
   1.309 -          if(clicked_node!=INVALID)
   1.310 -          {
   1.311 -            // the id map is not editable
   1.312 -            if (nodemap_to_edit == "label") return 0;
   1.313 -
   1.314 -            //and there is activated map
   1.315 -            if(nodetextmap[clicked_node]->property_text().get_value()!="")
   1.316 -            {
   1.317 -              //activate the general variable for it
   1.318 -              active_node=clicked_node;
   1.319 -
   1.320 -              //create a dialog
   1.321 -              Gtk::Dialog dialog("Edit value", true);
   1.322 -              dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
   1.323 -              dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
   1.324 -              Gtk::VBox* vbox = dialog.get_vbox();
   1.325 -              Gtk::SpinButton spin(0.0, 4);
   1.326 -              spin.set_increments(1.0, 10.0);
   1.327 -              spin.set_range(-1000000.0, 1000000.0);
   1.328 -              spin.set_numeric(true);
   1.329 -              vbox->add(spin);
   1.330 -              spin.show();
   1.331 -              switch (dialog.run())
   1.332 -              {
   1.333 -                case Gtk::RESPONSE_NONE:
   1.334 -                case Gtk::RESPONSE_CANCEL:
   1.335 -                  break;
   1.336 -                case Gtk::RESPONSE_ACCEPT:
   1.337 -                  double new_value = spin.get_value();
   1.338 -                  (*(mytab.mapstorage).nodemap_storage[nodemap_to_edit])[active_node] =
   1.339 -                    new_value;
   1.340 -                  std::ostringstream ostr;
   1.341 -                  ostr << new_value;
   1.342 -                  nodetextmap[active_node]->property_text().set_value(
   1.343 -                      ostr.str());
   1.344 -                  //mapwin.updateNode(active_node);
   1.345 -//                   mapwin.updateNode(Node(INVALID));
   1.346 -                  propertyUpdate(Node(INVALID));
   1.347 -              }
   1.348 -            }
   1.349 -          }
   1.350 -          break;
   1.351 -        }
   1.352 -      default:
   1.353 -        break;
   1.354 -    }
   1.355 -  }
   1.356    return false;  
   1.357  }
   1.358