mapselector.cc
author hegyi
Wed, 25 Oct 2006 13:21:24 +0000
changeset 172 fc1e478697d3
parent 122 96bfa82264c3
child 174 95872af46fc4
permissions -rw-r--r--
Currently visualized map can be saved and loaded from file.
     1 #include "mapselector.h"
     2 
     3 MapSelector::MapSelector(std::vector<std::string> ml, std::string act, std::string labeltext, bool edge, bool d):def(d),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   label=new Gtk::Label(labeltext);
    26 
    27   label->set_width_chars(longest_property_string_length);
    28 
    29   defbut=NULL;
    30   if(def)
    31     {
    32       defbut=new Gtk::Button();
    33       defbut->set_label("Reset");
    34       
    35       defbut->signal_pressed().connect
    36 	(
    37 	 sigc::mem_fun(*this, &MapSelector::reset)
    38 	 );
    39     }
    40 
    41   newbut=new Gtk::Button(Gtk::Stock::NEW);
    42 
    43   newbut->signal_pressed().connect
    44     (
    45      sigc::mem_fun(*this, &MapSelector::new_but_pressed)
    46      );
    47 
    48   add(*label);
    49 
    50   add(cbt);
    51 
    52   if(def)
    53     {
    54       add(*defbut);
    55     }
    56 
    57   add(*newbut);
    58 }
    59 
    60 void MapSelector::new_but_pressed()
    61 {
    62   set_new_map=true;
    63   signal_newmapwin.emit(itisedge);
    64 }
    65 
    66 void MapSelector::update_list( std::vector< std::string > ml )
    67 {
    68   int prev_act=cbt.get_active_row_number();
    69   cbt.clear();
    70   cbt_content.clear();
    71   std::vector< std::string >::iterator emsi=ml.begin();
    72   for(;emsi!=ml.end();emsi++)
    73     {
    74       cbt.append_text(*emsi);
    75       cbt_content.push_back(*emsi);
    76     }
    77   if(def)
    78     {
    79       cbt.prepend_text("Default values");
    80       cbt_content.push_back("Default values");
    81     }
    82   if(prev_act!=-1)
    83     {
    84       cbt.set_active(prev_act);
    85     }
    86 }
    87 
    88 void MapSelector::comboChanged()
    89 {
    90   if(cbt.get_active_row_number()!=0 || !def)
    91     {
    92       default_state=false;
    93       Glib::ustring mapname = cbt.get_active_text();
    94       if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
    95 	{
    96 	  signal_cbt.emit(mapname);
    97 	}
    98     }
    99   else if((!default_state)&&(cbt.get_active_row_number()==0))
   100     {
   101       reset();
   102     }
   103 }
   104 
   105 void MapSelector::reset()
   106 {
   107   default_state=true;
   108 
   109   cbt.set_active(0);
   110 
   111   signal_cbt.emit("");
   112 }
   113 
   114 
   115 Glib::ustring MapSelector::get_active_text()
   116 {
   117   return cbt.get_active_text();
   118 }
   119 
   120 void MapSelector::set_active_text(Glib::ustring text)
   121 {
   122   if(text.compare(""))
   123     {
   124       cbt.set_active_text(text);
   125     }
   126   else
   127     { 
   128       cbt.set_active_text("Default values");
   129     }
   130 }
   131 
   132 void MapSelector::append_text(Glib::ustring text)
   133 {
   134   cbt.append_text(text);
   135   cbt_content.push_back(text);
   136 
   137   if(set_new_map)
   138     {
   139       set_active_text(text);
   140       set_new_map=false;
   141     }
   142 }
   143 
   144 sigc::signal<void, std::string> MapSelector::signal_cbt_ch()
   145 {
   146   return signal_cbt;
   147 }
   148 
   149 sigc::signal<void, bool> MapSelector::signal_newmapwin_needed()
   150 {
   151   return signal_newmapwin;
   152 }