gui/mapselector.cc
author deba
Wed, 01 Mar 2006 10:25:30 +0000
changeset 1991 d7442141d9ef
parent 1884 9c061834b33b
permissions -rw-r--r--
The graph adadptors can be alteration observed.
In most cases it uses the adapted graph alteration notifiers.
Only special case is now the UndirGraphAdaptor, where
we have to proxy the signals from the graph.

The SubBidirGraphAdaptor is removed, because it doest not
gives more feature than the EdgeSubGraphAdaptor<UndirGraphAdaptor<Graph>>.

The ResGraphAdaptor is based on this composition.
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
}