hegyi@1819: #include "map_win.h"
hegyi@1731: 
hegyi@1838: MapWin::MapSelector::MapSelector(std::vector<std::string> 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<void, std::string> MapWin::MapSelector::signal_cbt_ch()
hegyi@1837: {
hegyi@1837:   return signal_cbt;
hegyi@1837: }
hegyi@1837: 
hegyi@1837: sigc::signal<void, bool> MapWin::MapSelector::signal_newmapwin_needed()
hegyi@1837: {
hegyi@1837:   return signal_newmapwin;
hegyi@1837: }