diff -r fffa6456548a -r 616bc933c2bc gui/mapselector.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gui/mapselector.cc Thu Oct 20 15:50:23 2005 +0000 @@ -0,0 +1,209 @@ +#include "mapselector.h" + +MapSelector::MapSelector(GraphDisplayerCanvas & grdispc, MapStorage & mapst, MapWin & mapw, int identifier, bool edge):gdc(grdispc),ms(mapst),mw(mapw),id(identifier),itisedge(edge),default_state(true),node_to_update(INVALID),edge_to_update(INVALID) +{ + update_list(); + + cbt.set_active(0); + + //binding signal to the actual entry + cbt.signal_changed().connect + ( + sigc::mem_fun((*this), &MapSelector::comboChanged), + false + ); + + if(itisedge) + { + label=new Gtk::Label(edge_property_strings[id]); + } + else + { + label=new Gtk::Label(node_property_strings[id]); + } + + label->set_width_chars(longest_property_string_length); + + defbut=new Gtk::Button(); + defbut->set_label("Reset"); + + defbut->signal_pressed().connect + ( + sigc::mem_fun(*this, &MapSelector::reset) + ); + + newbut=new Gtk::Button(Gtk::Stock::NEW); + + add(*label); + + add(cbt); + + add(*defbut); + add(*newbut); +} + +void MapSelector::update_list() +{ + cbt.clear(); + if(itisedge) + { + std::map< std::string,Graph::EdgeMap * >::iterator emsi=ms.beginOfEdgeMaps(); + for(;emsi!=ms.endOfEdgeMaps();emsi++) + { + cbt.append_text(emsi->first); + } + } + else + { + std::map< std::string,Graph::NodeMap * >::iterator emsi=ms.beginOfNodeMaps(); + for(;emsi!=ms.endOfNodeMaps();emsi++) + { + cbt.append_text(emsi->first); + } + } + cbt.prepend_text("Default values"); +} + +void MapSelector::comboChanged() +{ + if(cbt.get_active_row_number()!=0) + { + default_state=false; + Glib::ustring mapname = cbt.get_active_text(); + if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. + { + if(itisedge) + { + if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) ) + { + Edge edge=edge_to_update; + switch(id) + { + case E_WIDTH: + gdc.changeEdgeWidth(mapname, edge); + break; + case E_COLOR: + gdc.changeEdgeColor(mapname, edge); + break; + case E_TEXT: + gdc.changeEdgeText(mapname, edge); + break; + default: + std::cerr<<"Error\n"; + } + } + } + else + { + if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) ) + { + Node node=node_to_update; + switch(id) + { + case N_RADIUS: + gdc.changeNodeRadius(mapname, node); + break; + case N_COLOR: + gdc.changeNodeColor(mapname, node); + break; + case N_TEXT: + gdc.changeNodeText(mapname, node); + break; + default: + std::cerr<<"Error\n"; + } + } + } + } + } + else if((!default_state)&&(cbt.get_active_row_number()==0)) + { + reset(); + } +} + +void MapSelector::reset() +{ + default_state=true; + cbt.set_active(0); + + if(itisedge) + { + Edge edge=edge_to_update; + switch(id) + { + case E_WIDTH: + gdc.resetEdgeWidth(edge); + break; + case E_COLOR: + gdc.resetEdgeColor(edge); + break; + case E_TEXT: + gdc.resetEdgeText(edge); + break; + default: + std::cerr<<"Error\n"; + } + } + else + { + Node node=node_to_update; + switch(id) + { + case N_RADIUS: + gdc.resetNodeRadius(node); + break; + case N_COLOR: + gdc.resetNodeColor(node); + break; + case N_TEXT: + gdc.resetNodeText(node); + break; + default: + std::cerr<<"Error\n"; + } + } +} + +void MapSelector::update(Node node) +{ + node_to_update=node; + if(default_state) + { + reset(); + } + else + { + comboChanged(); + } + node_to_update=INVALID; +} + +void MapSelector::update(Edge edge) +{ + edge_to_update=edge; + if(default_state) + { + reset(); + } + else + { + comboChanged(); + } + edge_to_update=INVALID; +} + +Glib::ustring MapSelector::get_active_text() +{ + return cbt.get_active_text(); +} + +void MapSelector::set_active_text(Glib::ustring text) +{ + cbt.set_active_text(text); +} + +void MapSelector::append_text(Glib::ustring text) +{ + cbt.append_text(text); +}