diff -r c7ae8642a8d8 -r 879e47e5b731 graph_displayer_canvas.cc --- a/graph_displayer_canvas.cc Wed May 02 20:33:58 2007 +0000 +++ b/graph_displayer_canvas.cc Wed Jan 02 21:03:09 2008 +0000 @@ -117,46 +117,57 @@ std::string mapname=mytab.getActiveNodeMap(prop); if(is_drawn) + { + if(mapname!="") { - if(mapname!="") - { - if( ( ((mytab.mapstorage)->nodemap_storage).find(mapname) != ((mytab.mapstorage)->nodemap_storage).end() ) ) - { - switch(prop) - { - case N_RADIUS: - changeNodeRadius(mapname, node); - break; - case N_COLOR: - changeNodeColor(mapname, node); - break; - case N_TEXT: - changeNodeText(mapname, node); - break; - default: - std::cerr<<"Error\n"; - } - } - } - else //mapname=="" - { - Node node=INVALID; - switch(prop) - { - case N_RADIUS: - resetNodeRadius(node); - break; - case N_COLOR: - resetNodeColor(node); - break; - case N_TEXT: - resetNodeText(node); - break; - default: - std::cerr<<"Error\n"; - } - } + std::vector nodemaps = mytab.mapstorage->getNodeMapList(); + bool found = false; + for (std::vector::const_iterator it = nodemaps.begin(); + it != nodemaps.end(); ++it) + { + if (*it == mapname) + { + found = true; + break; + } + } + if (found) + { + switch(prop) + { + case N_RADIUS: + changeNodeRadius(mapname, node); + break; + case N_COLOR: + changeNodeColor(mapname, node); + break; + case N_TEXT: + changeNodeText(mapname, node); + break; + default: + std::cerr<<"Error\n"; + } + } } + else //mapname=="" + { + Node node=INVALID; + switch(prop) + { + case N_RADIUS: + resetNodeRadius(node); + break; + case N_COLOR: + resetNodeColor(node); + break; + case N_TEXT: + resetNodeText(node); + break; + default: + std::cerr<<"Error\n"; + } + } + } } void GraphDisplayerCanvas::propertyUpdate(Edge edge, int prop) @@ -164,45 +175,56 @@ std::string mapname=mytab.getActiveEdgeMap(prop); if(is_drawn) + { + if(mapname!="") { - if(mapname!="") - { - if( ( ((mytab.mapstorage)->edgemap_storage).find(mapname) != ((mytab.mapstorage)->edgemap_storage).end() ) ) - { - switch(prop) - { - case E_WIDTH: - changeEdgeWidth(mapname, edge); - break; - case E_COLOR: - changeEdgeColor(mapname, edge); - break; - case E_TEXT: - changeEdgeText(mapname, edge); - break; - default: - std::cerr<<"Error\n"; - } - } - } - else //mapname=="" - { - switch(prop) - { - case E_WIDTH: - resetEdgeWidth(edge); - break; - case E_COLOR: - resetEdgeColor(edge); - break; - case E_TEXT: - resetEdgeText(edge); - break; - default: - std::cerr<<"Error\n"; - } - } + std::vector edgemaps = mytab.mapstorage->getEdgeMapList(); + bool found = false; + for (std::vector::const_iterator it = edgemaps.begin(); + it != edgemaps.end(); ++it) + { + if (*it == mapname) + { + found = true; + break; + } + } + if (found) + { + switch(prop) + { + case E_WIDTH: + changeEdgeWidth(mapname, edge); + break; + case E_COLOR: + changeEdgeColor(mapname, edge); + break; + case E_TEXT: + changeEdgeText(mapname, edge); + break; + default: + std::cerr<<"Error\n"; + } + } } + else //mapname=="" + { + switch(prop) + { + case E_WIDTH: + resetEdgeWidth(edge); + break; + case E_COLOR: + resetEdgeColor(edge); + break; + case E_TEXT: + resetEdgeText(edge); + break; + default: + std::cerr<<"Error\n"; + } + } + } } void GraphDisplayerCanvas::drawGraph() @@ -221,7 +243,7 @@ } //initializing edge-text as well, to empty string - XY text_pos=mytab.mapstorage->arrow_pos[i]; + XY text_pos=mytab.mapstorage->getArrowCoords(i); text_pos+=(XY(10,10)); edgetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, ""); @@ -238,10 +260,10 @@ nodesmap[i]=new Gnome::Canvas::Ellipse( displayed_graph, - (mytab.mapstorage)->coords[i].x-20, - (mytab.mapstorage)->coords[i].y-20, - (mytab.mapstorage)->coords[i].x+20, - (mytab.mapstorage)->coords[i].y+20); + mytab.mapstorage->getNodeCoords(i).x-20, + mytab.mapstorage->getNodeCoords(i).y-20, + mytab.mapstorage->getNodeCoords(i).x+20, + mytab.mapstorage->getNodeCoords(i).y+20); *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue"); *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black"); nodesmap[i]->raise_to_top(); @@ -249,8 +271,8 @@ //initializing edge-text as well, to empty string XY text_pos( - ((mytab.mapstorage)->coords[i].x+node_property_defaults[N_RADIUS]+5), - ((mytab.mapstorage)->coords[i].y+node_property_defaults[N_RADIUS]+5)); + (mytab.mapstorage->getNodeCoords(i).x+node_property_defaults[N_RADIUS]+5), + (mytab.mapstorage->getNodeCoords(i).y+node_property_defaults[N_RADIUS]+5)); nodetextmap[i]=new Gnome::Canvas::Text(displayed_graph, text_pos.x, text_pos.y, ""); @@ -325,7 +347,8 @@ void GraphDisplayerCanvas::reDesignGraph() { - NodeIt firstnode((mytab.mapstorage)->graph); + MapStorage& ms = *mytab.mapstorage; + NodeIt firstnode(ms.graph); //is it not an empty graph? if(firstnode!=INVALID) { @@ -335,7 +358,7 @@ if(!was_redesigned) { - NodeIt i((mytab.mapstorage)->graph); + NodeIt i(ms.graph); dim2::Point init(init_vector_length*rnd(), init_vector_length*rnd()); @@ -347,28 +370,28 @@ double propulsation; int iterations; - (mytab.mapstorage)->get_design_data(attraction, propulsation, iterations); + ms.get_design_data(attraction, propulsation, iterations); //iteration counter for(int l=0;l x(mytab.mapstorage->graph); - Graph::NodeMap y(mytab.mapstorage->graph); + Graph::NodeMap x(ms.graph); + Graph::NodeMap y(ms.graph); XYMap > actual_forces; actual_forces.setXMap(x); actual_forces.setYMap(y); //count actual force for each nodes - for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i) + for (NodeIt i(ms.graph); i!=INVALID; ++i) { //propulsation of nodes - for (NodeIt j((mytab.mapstorage)->graph); j!=INVALID; ++j) + for (NodeIt j(ms.graph); j!=INVALID; ++j) { if(i!=j) { lemon::dim2::Point delta = - ((mytab.mapstorage)->coords[i]- - (mytab.mapstorage)->coords[j]); + (ms.getNodeCoords(i)- + ms.getNodeCoords(j)); const double length_sqr=std::max(delta.normSquare(),min_dist); @@ -382,55 +405,53 @@ actual_forces.set(i,(actual_forces[i]+delta)); } } - //attraction of nodes, to which actual node is bound - for(OutEdgeIt ei((mytab.mapstorage)->graph,i);ei!=INVALID;++ei) + //attraction of nodes, to which actual node is bound + for(OutEdgeIt ei(ms.graph,i);ei!=INVALID;++ei) + { + lemon::dim2::Point delta = + (ms.getNodeCoords(i)- + ms.getNodeCoords(ms.graph.target(ei))); + + //calculating attraction strength + //greater distance means greater strength + delta*=attraction; + + actual_forces.set(i,actual_forces[i]-delta); + } + for(InEdgeIt ei(ms.graph,i);ei!=INVALID;++ei) + { + lemon::dim2::Point delta = + (ms.getNodeCoords(i)- + ms.getNodeCoords(ms.graph.source(ei))); + + //calculating attraction strength + //greater distance means greater strength + delta*=attraction; + + actual_forces.set(i,actual_forces[i]-delta); + } + } + for (NodeIt i(ms.graph); i!=INVALID; ++i) + { + if((ms.getNodeCoords(i).x)+actual_forces[i].x>max_coord) { - lemon::dim2::Point delta = - ((mytab.mapstorage)->coords[i]- - (mytab.mapstorage)->coords[mytab.mapstorage-> - graph.target(ei)]); - - //calculating attraction strength - //greater distance means greater strength - delta*=attraction; - - actual_forces.set(i,actual_forces[i]-delta); + actual_forces[i].x=max_coord-(ms.getNodeCoords(i).x); + std::cout << "Correction! " << ((ms.getNodeCoords(i).x)+actual_forces[i].x) << std::endl; } - for(InEdgeIt ei((mytab.mapstorage)->graph,i);ei!=INVALID;++ei) + else if((ms.getNodeCoords(i).x)+actual_forces[i].x<(0-max_coord)) { - lemon::dim2::Point delta = - ((mytab.mapstorage)->coords[i]- - (mytab.mapstorage)->coords[mytab.mapstorage-> - graph.source(ei)]); - - //calculating attraction strength - //greater distance means greater strength - delta*=attraction; - - actual_forces.set(i,actual_forces[i]-delta); + actual_forces[i].x=0-max_coord-(ms.getNodeCoords(i).x); + std::cout << "Correction! " << ((ms.getNodeCoords(i).x)+actual_forces[i].x) << std::endl; } - } - for (NodeIt i((mytab.mapstorage)->graph); i!=INVALID; ++i) - { - if(((mytab.mapstorage)->coords[i].x)+actual_forces[i].x>max_coord) + if((ms.getNodeCoords(i).y)+actual_forces[i].y>max_coord) { - actual_forces[i].x=max_coord-((mytab.mapstorage)->coords[i].x); - std::cout << "Correction! " << (((mytab.mapstorage)->coords[i].x)+actual_forces[i].x) << std::endl; + actual_forces[i].y=max_coord-(ms.getNodeCoords(i).y); + std::cout << "Correction! " << ((ms.getNodeCoords(i).y)+actual_forces[i].y) << std::endl; } - else if(((mytab.mapstorage)->coords[i].x)+actual_forces[i].x<(0-max_coord)) + else if((ms.getNodeCoords(i).y)+actual_forces[i].y<(0-max_coord)) { - actual_forces[i].x=0-max_coord-((mytab.mapstorage)->coords[i].x); - std::cout << "Correction! " << (((mytab.mapstorage)->coords[i].x)+actual_forces[i].x) << std::endl; - } - if(((mytab.mapstorage)->coords[i].y)+actual_forces[i].y>max_coord) - { - actual_forces[i].y=max_coord-((mytab.mapstorage)->coords[i].y); - std::cout << "Correction! " << (((mytab.mapstorage)->coords[i].y)+actual_forces[i].y) << std::endl; - } - else if(((mytab.mapstorage)->coords[i].y)+actual_forces[i].y<(0-max_coord)) - { - actual_forces[i].y=0-max_coord-((mytab.mapstorage)->coords[i].y); - std::cout << "Correction! " << (((mytab.mapstorage)->coords[i].y)+actual_forces[i].y) << std::endl; + actual_forces[i].y=0-max_coord-(ms.getNodeCoords(i).y); + std::cout << "Correction! " << ((ms.getNodeCoords(i).y)+actual_forces[i].y) << std::endl; } moveNode(actual_forces[i].x, actual_forces[i].y, nodesmap[i], i); }