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