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