1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/gui/mapselector.cc Fri Jan 06 14:36:46 2006 +0000
1.3 @@ -0,0 +1,136 @@
1.4 +#include "mapselector.h"
1.5 +
1.6 +MapSelector::MapSelector(std::vector<std::string> ml, std::string act, int identifier, bool edge):id(identifier),itisedge(edge),set_new_map(false)
1.7 +{
1.8 + update_list(ml);
1.9 +
1.10 + if(act=="")
1.11 + {
1.12 + cbt.set_active(0);
1.13 + default_state=true;
1.14 + }
1.15 + else
1.16 + {
1.17 + cbt.set_active_text((Glib::ustring)act);
1.18 + default_state=false;
1.19 + }
1.20 +
1.21 + //binding signal to the actual entry
1.22 + cbt.signal_changed().connect
1.23 + (
1.24 + sigc::mem_fun((*this), &MapSelector::comboChanged),
1.25 + false
1.26 + );
1.27 +
1.28 + if(itisedge)
1.29 + {
1.30 + label=new Gtk::Label(edge_property_strings[id]);
1.31 + }
1.32 + else
1.33 + {
1.34 + label=new Gtk::Label(node_property_strings[id]);
1.35 + }
1.36 +
1.37 + label->set_width_chars(longest_property_string_length);
1.38 +
1.39 + defbut=new Gtk::Button();
1.40 + defbut->set_label("Reset");
1.41 +
1.42 + defbut->signal_pressed().connect
1.43 + (
1.44 + sigc::mem_fun(*this, &MapSelector::reset)
1.45 + );
1.46 +
1.47 + newbut=new Gtk::Button(Gtk::Stock::NEW);
1.48 +
1.49 + newbut->signal_pressed().connect
1.50 + (
1.51 + sigc::mem_fun(*this, &MapSelector::new_but_pressed)
1.52 + );
1.53 +
1.54 + add(*label);
1.55 +
1.56 + add(cbt);
1.57 +
1.58 + add(*defbut);
1.59 + add(*newbut);
1.60 +}
1.61 +
1.62 +void MapSelector::new_but_pressed()
1.63 +{
1.64 + set_new_map=true;
1.65 + signal_newmapwin.emit(itisedge);
1.66 +}
1.67 +
1.68 +void MapSelector::update_list( std::vector< std::string > ml )
1.69 +{
1.70 + int prev_act=cbt.get_active_row_number();
1.71 + cbt.clear();
1.72 + std::vector< std::string >::iterator emsi=ml.begin();
1.73 + for(;emsi!=ml.end();emsi++)
1.74 + {
1.75 + cbt.append_text(*emsi);
1.76 + }
1.77 + cbt.prepend_text("Default values");
1.78 + if(prev_act!=-1)
1.79 + {
1.80 + cbt.set_active(prev_act);
1.81 + }
1.82 +}
1.83 +
1.84 +void MapSelector::comboChanged()
1.85 +{
1.86 + if(cbt.get_active_row_number()!=0)
1.87 + {
1.88 + default_state=false;
1.89 + Glib::ustring mapname = cbt.get_active_text();
1.90 + if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
1.91 + {
1.92 + signal_cbt.emit(mapname);
1.93 + }
1.94 + }
1.95 + else if((!default_state)&&(cbt.get_active_row_number()==0))
1.96 + {
1.97 + reset();
1.98 + }
1.99 +}
1.100 +
1.101 +void MapSelector::reset()
1.102 +{
1.103 + default_state=true;
1.104 +
1.105 + cbt.set_active(0);
1.106 +
1.107 + signal_cbt.emit("");
1.108 +}
1.109 +
1.110 +
1.111 +Glib::ustring MapSelector::get_active_text()
1.112 +{
1.113 + return cbt.get_active_text();
1.114 +}
1.115 +
1.116 +void MapSelector::set_active_text(Glib::ustring text)
1.117 +{
1.118 + cbt.set_active_text(text);
1.119 +}
1.120 +
1.121 +void MapSelector::append_text(Glib::ustring text)
1.122 +{
1.123 + cbt.append_text(text);
1.124 + if(set_new_map)
1.125 + {
1.126 + set_active_text(text);
1.127 + set_new_map=false;
1.128 + }
1.129 +}
1.130 +
1.131 +sigc::signal<void, std::string> MapSelector::signal_cbt_ch()
1.132 +{
1.133 + return signal_cbt;
1.134 +}
1.135 +
1.136 +sigc::signal<void, bool> MapSelector::signal_newmapwin_needed()
1.137 +{
1.138 + return signal_newmapwin;
1.139 +}