gui/mapselector.cc
author hegyi
Fri, 06 Jan 2006 14:36:46 +0000
changeset 1882 2c3f6c7e01b4
child 1884 9c061834b33b
permissions -rw-r--r--
MapSelector has become a standalone class.
     1 #include "mapselector.h"
     2 
     3 MapSelector::MapSelector(std::vector<std::string> ml, std::string act, int identifier, bool edge):id(identifier),itisedge(edge),set_new_map(false)
     4 {
     5   update_list(ml);
     6 
     7   if(act=="")
     8     {
     9       cbt.set_active(0);
    10       default_state=true;
    11     }
    12   else
    13     {
    14       cbt.set_active_text((Glib::ustring)act);
    15       default_state=false;
    16     }
    17 
    18   //binding signal to the actual entry
    19   cbt.signal_changed().connect
    20     (
    21      sigc::mem_fun((*this), &MapSelector::comboChanged),
    22      false
    23      );
    24   
    25   if(itisedge)
    26     {
    27       label=new Gtk::Label(edge_property_strings[id]);
    28     }
    29   else
    30     {
    31       label=new Gtk::Label(node_property_strings[id]);
    32     }
    33 
    34   label->set_width_chars(longest_property_string_length);
    35 
    36   defbut=new Gtk::Button();
    37   defbut->set_label("Reset");
    38 
    39   defbut->signal_pressed().connect
    40     (
    41      sigc::mem_fun(*this, &MapSelector::reset)
    42      );
    43 
    44   newbut=new Gtk::Button(Gtk::Stock::NEW);
    45 
    46   newbut->signal_pressed().connect
    47     (
    48      sigc::mem_fun(*this, &MapSelector::new_but_pressed)
    49      );
    50 
    51   add(*label);
    52 
    53   add(cbt);
    54 
    55   add(*defbut);
    56   add(*newbut);
    57 }
    58 
    59 void MapSelector::new_but_pressed()
    60 {
    61   set_new_map=true;
    62   signal_newmapwin.emit(itisedge);
    63 }
    64 
    65 void MapSelector::update_list( std::vector< std::string > ml )
    66 {
    67   int prev_act=cbt.get_active_row_number();
    68   cbt.clear();
    69   std::vector< std::string >::iterator emsi=ml.begin();
    70   for(;emsi!=ml.end();emsi++)
    71     {
    72       cbt.append_text(*emsi);
    73     }
    74   cbt.prepend_text("Default values");
    75   if(prev_act!=-1)
    76     {
    77       cbt.set_active(prev_act);
    78     }
    79 }
    80 
    81 void MapSelector::comboChanged()
    82 {
    83   if(cbt.get_active_row_number()!=0)
    84     {
    85       default_state=false;
    86       Glib::ustring mapname = cbt.get_active_text();
    87       if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
    88 	{
    89 	  signal_cbt.emit(mapname);
    90 	}
    91     }
    92   else if((!default_state)&&(cbt.get_active_row_number()==0))
    93     {
    94       reset();
    95     }
    96 }
    97 
    98 void MapSelector::reset()
    99 {
   100   default_state=true;
   101 
   102   cbt.set_active(0);
   103 
   104   signal_cbt.emit("");
   105 }
   106 
   107 
   108 Glib::ustring MapSelector::get_active_text()
   109 {
   110   return cbt.get_active_text();
   111 }
   112 
   113 void MapSelector::set_active_text(Glib::ustring text)
   114 {
   115   cbt.set_active_text(text);
   116 }
   117 
   118 void MapSelector::append_text(Glib::ustring text)
   119 {
   120   cbt.append_text(text);
   121   if(set_new_map)
   122     {
   123       set_active_text(text);
   124       set_new_map=false;
   125     }
   126 }
   127 
   128 sigc::signal<void, std::string> MapSelector::signal_cbt_ch()
   129 {
   130   return signal_cbt;
   131 }
   132 
   133 sigc::signal<void, bool> MapSelector::signal_newmapwin_needed()
   134 {
   135   return signal_newmapwin;
   136 }