hegyi@89: #include "map_win.h" hegyi@81: hegyi@94: MapWin::MapSelector::MapSelector(std::vector ml, int identifier, bool edge):id(identifier),itisedge(edge),default_state(true),set_new_map(false) hegyi@81: { hegyi@94: update_list(ml); hegyi@81: hegyi@81: cbt.set_active(0); hegyi@81: hegyi@81: //binding signal to the actual entry hegyi@81: cbt.signal_changed().connect hegyi@81: ( hegyi@89: sigc::mem_fun((*this), &MapWin::MapSelector::comboChanged), hegyi@81: false hegyi@81: ); hegyi@81: hegyi@81: if(itisedge) hegyi@81: { hegyi@81: label=new Gtk::Label(edge_property_strings[id]); hegyi@81: } hegyi@81: else hegyi@81: { hegyi@81: label=new Gtk::Label(node_property_strings[id]); hegyi@81: } hegyi@81: hegyi@81: label->set_width_chars(longest_property_string_length); hegyi@81: hegyi@81: defbut=new Gtk::Button(); hegyi@81: defbut->set_label("Reset"); hegyi@81: hegyi@81: defbut->signal_pressed().connect hegyi@81: ( hegyi@89: sigc::mem_fun(*this, &MapWin::MapSelector::reset) hegyi@81: ); hegyi@81: hegyi@81: newbut=new Gtk::Button(Gtk::Stock::NEW); hegyi@81: hegyi@82: newbut->signal_pressed().connect hegyi@82: ( hegyi@89: sigc::mem_fun(*this, &MapWin::MapSelector::new_but_pressed) hegyi@82: ); hegyi@82: hegyi@81: add(*label); hegyi@81: hegyi@81: add(cbt); hegyi@81: hegyi@81: add(*defbut); hegyi@81: add(*newbut); hegyi@81: } hegyi@81: hegyi@89: void MapWin::MapSelector::new_but_pressed() hegyi@85: { hegyi@85: set_new_map=true; hegyi@94: signal_newmapwin.emit(itisedge); hegyi@85: } hegyi@85: hegyi@94: void MapWin::MapSelector::update_list( std::vector< std::string > ml ) hegyi@81: { hegyi@81: cbt.clear(); hegyi@94: std::vector< std::string >::iterator emsi=ml.begin(); hegyi@94: for(;emsi!=ml.end();emsi++) hegyi@81: { hegyi@94: cbt.append_text(*emsi); hegyi@81: } hegyi@81: cbt.prepend_text("Default values"); hegyi@81: } hegyi@81: hegyi@89: void MapWin::MapSelector::comboChanged() hegyi@81: { hegyi@81: if(cbt.get_active_row_number()!=0) hegyi@81: { hegyi@81: default_state=false; hegyi@81: Glib::ustring mapname = cbt.get_active_text(); hegyi@81: if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. hegyi@81: { hegyi@94: signal_cbt.emit(mapname); hegyi@81: } hegyi@81: } hegyi@81: else if((!default_state)&&(cbt.get_active_row_number()==0)) hegyi@81: { hegyi@94: signal_cbt.emit(""); hegyi@81: reset(); hegyi@81: } hegyi@81: } hegyi@81: hegyi@89: void MapWin::MapSelector::reset() hegyi@81: { hegyi@81: default_state=true; hegyi@81: cbt.set_active(0); hegyi@81: hegyi@94: signal_cbt.emit(""); hegyi@81: } hegyi@81: hegyi@81: hegyi@89: Glib::ustring MapWin::MapSelector::get_active_text() hegyi@81: { hegyi@81: return cbt.get_active_text(); hegyi@81: } hegyi@81: hegyi@89: void MapWin::MapSelector::set_active_text(Glib::ustring text) hegyi@81: { hegyi@81: cbt.set_active_text(text); hegyi@81: } hegyi@81: hegyi@89: void MapWin::MapSelector::append_text(Glib::ustring text) hegyi@81: { hegyi@81: cbt.append_text(text); hegyi@85: if(set_new_map) hegyi@85: { hegyi@85: set_active_text(text); hegyi@85: set_new_map=false; hegyi@85: } hegyi@81: } hegyi@94: hegyi@94: sigc::signal MapWin::MapSelector::signal_cbt_ch() hegyi@94: { hegyi@94: return signal_cbt; hegyi@94: } hegyi@94: hegyi@94: sigc::signal MapWin::MapSelector::signal_newmapwin_needed() hegyi@94: { hegyi@94: return signal_newmapwin; hegyi@94: }