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