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