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