#include "map_win.h" MapWin::MapSelector::MapSelector(std::vector ml, std::string act, int identifier, bool edge):id(identifier),itisedge(edge),set_new_map(false) { update_list(ml); if(act=="") { cbt.set_active(0); default_state=true; } else { cbt.set_active_text((Glib::ustring)act); default_state=false; } //binding signal to the actual entry cbt.signal_changed().connect ( sigc::mem_fun((*this), &MapWin::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, &MapWin::MapSelector::reset) ); newbut=new Gtk::Button(Gtk::Stock::NEW); newbut->signal_pressed().connect ( sigc::mem_fun(*this, &MapWin::MapSelector::new_but_pressed) ); add(*label); add(cbt); add(*defbut); add(*newbut); } void MapWin::MapSelector::new_but_pressed() { set_new_map=true; signal_newmapwin.emit(itisedge); } void MapWin::MapSelector::update_list( std::vector< std::string > ml ) { int prev_act=cbt.get_active_row_number(); cbt.clear(); std::vector< std::string >::iterator emsi=ml.begin(); for(;emsi!=ml.end();emsi++) { cbt.append_text(*emsi); } cbt.prepend_text("Default values"); if(prev_act!=-1) { cbt.set_active(prev_act); } } void MapWin::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. { signal_cbt.emit(mapname); } } else if((!default_state)&&(cbt.get_active_row_number()==0)) { reset(); } } void MapWin::MapSelector::reset() { default_state=true; cbt.set_active(0); signal_cbt.emit(""); } Glib::ustring MapWin::MapSelector::get_active_text() { return cbt.get_active_text(); } void MapWin::MapSelector::set_active_text(Glib::ustring text) { cbt.set_active_text(text); } void MapWin::MapSelector::append_text(Glib::ustring text) { cbt.append_text(text); if(set_new_map) { set_active_text(text); set_new_map=false; } } sigc::signal MapWin::MapSelector::signal_cbt_ch() { return signal_cbt; } sigc::signal MapWin::MapSelector::signal_newmapwin_needed() { return signal_newmapwin; }