Changeset 151:72f1c33f89d4 in glemon-0.x
- Timestamp:
- 09/25/06 09:54:00 (17 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/glemon/trunk@2953
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
gdc-broken_edge.cc
r147 r151 156 156 GraphDisplayerCanvas::LoopEdge::LoopEdge(Gnome::Canvas::Group& _group, 157 157 Edge _edge, GraphDisplayerCanvas& _canvas) : 158 EdgeBase(_group, _edge, _canvas), line(*this) 159 { 160 line.property_fill_color().set_value("green"); 161 line.property_width_units().set_value(10); 158 EdgeBase(_group, _edge, _canvas), line(*this), isbutton(false) 159 { 160 arrow.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::LoopEdge::edgeFormerEventHandler)); 161 162 line.property_outline_color().set_value("green"); 163 line.property_width_units().set_value(10); 162 164 line.lower_to_bottom(); 163 165 … … 200 202 void GraphDisplayerCanvas::LoopEdge::setFillColor(Gdk::Color c) 201 203 { 202 line.property_fill_color_gdk().set_value(c); 203 } 204 line.property_outline_color_gdk().set_value(c); 205 } 206 207 bool GraphDisplayerCanvas::LoopEdge::edgeFormerEventHandler(GdkEvent* e) 208 { 209 switch(e->type) 210 { 211 case GDK_BUTTON_PRESS: 212 if(canvas.getActualTool()!=CREATE_NODE) 213 { 214 canvas.toggleEdgeActivity(this, true); 215 isbutton=true; 216 } 217 break; 218 case GDK_BUTTON_RELEASE: 219 if(canvas.getActualTool()!=CREATE_NODE) 220 { 221 canvas.toggleEdgeActivity(this, false); 222 isbutton=false; 223 } 224 break; 225 case GDK_MOTION_NOTIFY: 226 if(isbutton) 227 { 228 canvas.mytab.mapstorage.arrow_pos.set(edge, XY(e->motion.x, e->motion.y)); 229 230 draw(); 231 canvas.textReposition(canvas.mytab.mapstorage.arrow_pos[edge]); 232 } 233 default: break; 234 } 235 return true; 236 } -
graph_displayer_canvas-event.cc
r150 r151 410 410 if(target_node!=INVALID) 411 411 { 412 (mytab.mapstorage).modified = true; 413 414 *(nodesmap[target_node]) << 415 Gnome::Canvas::Properties::fill_color("red"); 416 417 //creating new edge 418 active_edge=(mytab.mapstorage).graph.addEdge(active_node, 419 target_node); 420 421 // update maps 422 for (std::map<std::string, 423 Graph::EdgeMap<double>*>::const_iterator it = 424 (mytab.mapstorage).edgemap_storage.begin(); it != 425 (mytab.mapstorage).edgemap_storage.end(); ++it) 426 { 427 (*(it->second))[active_edge] = 428 (mytab.mapstorage).edgemap_default[it->first]; 429 } 430 // increment the id map's default value 431 (mytab.mapstorage).edgemap_default["label"] += 1.0; 432 412 433 if(target_node!=active_node) 413 434 { 414 (mytab.mapstorage).modified = true;415 416 *(nodesmap[target_node]) <<417 Gnome::Canvas::Properties::fill_color("red");418 419 //creating new edge420 active_edge=(mytab.mapstorage).graph.addEdge(active_node,421 target_node);422 423 // update maps424 for (std::map<std::string,425 Graph::EdgeMap<double>*>::const_iterator it =426 (mytab.mapstorage).edgemap_storage.begin(); it !=427 (mytab.mapstorage).edgemap_storage.end(); ++it)428 {429 (*(it->second))[active_edge] =430 (mytab.mapstorage).edgemap_default[it->first];431 }432 // increment the id map's default value433 (mytab.mapstorage).edgemap_default["label"] += 1.0;434 435 //calculating coordinates of new edge436 Gnome::Canvas::Points coos;437 double x1, x2, y1, y2;438 439 active_item->get_bounds(x1, y1, x2, y2);440 coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));441 442 target_item->get_bounds(x1, y1, x2, y2);443 coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2));444 445 435 // set the coordinates of the arrow on the new edge 446 436 MapStorage& ms = mytab.mapstorage; … … 452 442 edgesmap[active_edge]=new BrokenEdge(displayed_graph, active_edge, 453 443 *this); 454 455 //initializing edge-text as well, to empty string456 XY text_pos=mytab.mapstorage.arrow_pos[active_edge];457 text_pos+=(XY(10,10));458 459 edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph,460 text_pos.x, text_pos.y, "");461 edgetextmap[active_edge]->property_fill_color().set_value(462 "darkgreen");463 edgetextmap[active_edge]->raise_to_top();464 465 //updating its properties466 // mapwin.updateEdge(active_edge);467 propertyUpdate(active_edge);468 444 } 469 445 else 470 446 { 471 target_node=INVALID; 472 std::cerr << "Loop edge is not yet implemented!" << std::endl; 447 // set the coordinates of the arrow on the new edge 448 MapStorage& ms = mytab.mapstorage; 449 ms.arrow_pos.set(active_edge, 450 (ms.coords[ms.graph.source(active_edge)] + 451 XY(0.0, 80.0))); 452 453 //drawing new edge 454 edgesmap[active_edge]=new LoopEdge(displayed_graph, active_edge, 455 *this); 473 456 } 457 458 //initializing edge-text as well, to empty string 459 XY text_pos=mytab.mapstorage.arrow_pos[active_edge]; 460 text_pos+=(XY(10,10)); 461 462 edgetextmap[active_edge]=new Gnome::Canvas::Text(displayed_graph, 463 text_pos.x, text_pos.y, ""); 464 edgetextmap[active_edge]->property_fill_color().set_value( 465 "darkgreen"); 466 edgetextmap[active_edge]->raise_to_top(); 467 468 propertyUpdate(active_edge); 474 469 } 475 470 //clicked item was not a node. it could be an e.g. edge. we do not -
graph_displayer_canvas.cc
r150 r151 158 158 for (EdgeIt i((mytab.mapstorage).graph); i!=INVALID; ++i) 159 159 { 160 161 //drawing green lines, coordinates are from mapstorage.coords 162 163 Gnome::Canvas::Points coos; 164 coos.push_back(Gnome::Art::Point( 165 (mytab.mapstorage).coords[(mytab.mapstorage).graph.source(i)].x, 166 (mytab.mapstorage).coords[(mytab.mapstorage).graph.source(i)].y)); 167 coos.push_back(Gnome::Art::Point( 168 (mytab.mapstorage).coords[(mytab.mapstorage).graph.target(i)].x, 169 (mytab.mapstorage).coords[(mytab.mapstorage).graph.target(i)].y)); 170 171 edgesmap[i]=new BrokenEdge(displayed_graph, i, *this); 172 160 if (mytab.mapstorage.graph.source(i) == mytab.mapstorage.graph.target(i)) 161 { 162 edgesmap[i]=new LoopEdge(displayed_graph, i, *this); 163 } 164 else 165 { 166 edgesmap[i]=new BrokenEdge(displayed_graph, i, *this); 167 } 173 168 //initializing edge-text as well, to empty string 174 169 -
graph_displayer_canvas.h
r150 r151 107 107 private: 108 108 Gnome::Canvas::Ellipse line; 109 bool edgeFormerEventHandler(GdkEvent* e); 110 bool isbutton; 109 111 public: 110 112 LoopEdge(Gnome::Canvas::Group&, Edge, GraphDisplayerCanvas&); -
mapstorage.cc
r135 r151 320 320 for (EdgeIt e(graph); e != INVALID; ++e) 321 321 { 322 arrow_pos.set(e, (coords[graph.source(e)] + coords[graph.target(e)]) / 2.0); 322 if (graph.source(e) == graph.target(e)) 323 { 324 arrow_pos.set(e, coords[graph.source(e)] + XY(0.0, 80.0)); 325 } 326 else 327 { 328 arrow_pos.set(e, (coords[graph.source(e)] + coords[graph.target(e)]) / 2.0); 329 } 323 330 } 324 331 } … … 365 372 else 366 373 edgemap_default["label"] = 1.0; 367 }368 }369 370 // filter loop edges371 for (EdgeIt e(graph); e != INVALID; ++e)372 {373 if (graph.source(e) == graph.target(e))374 {375 std::cerr << "Removed loop edge " << (*edgemap_storage["label"])[e]376 << " (from " << (*nodemap_storage["label"])[graph.source(e)]377 << ", to " << (*nodemap_storage["label"])[graph.target(e)] << ")."378 << std::endl;379 380 graph.erase(e);381 374 } 382 375 }
Note: See TracChangeset
for help on using the changeset viewer.