mapselector.cc
author ladanyi
Wed, 02 Jan 2008 21:03:09 +0000
changeset 201 879e47e5b731
parent 194 6b2b718420eb
permissions -rw-r--r--
Merge branches/akos to trunk.
alpar@174
     1
/* -*- C++ -*-
alpar@174
     2
 *
alpar@174
     3
 * This file is a part of LEMON, a generic C++ optimization library
alpar@174
     4
 *
alpar@174
     5
 * Copyright (C) 2003-2006
alpar@174
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@174
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@174
     8
 *
alpar@174
     9
 * Permission to use, modify and distribute this software is granted
alpar@174
    10
 * provided that this copyright notice appears in all copies. For
alpar@174
    11
 * precise terms see the accompanying LICENSE file.
alpar@174
    12
 *
alpar@174
    13
 * This software is provided "AS IS" with no warranty of any kind,
alpar@174
    14
 * express or implied, and with no claim as to its suitability for any
alpar@174
    15
 * purpose.
alpar@174
    16
 *
alpar@174
    17
 */
alpar@174
    18
hegyi@194
    19
#include <mapselector.h>
hegyi@112
    20
ladanyi@201
    21
MapSelector::MapSelector(std::vector<std::string> n_ml,
ladanyi@201
    22
    std::vector<std::string> s_ml, std::string act,
ladanyi@201
    23
    std::string labeltext, bool edge, bool d, MapType type) :
ladanyi@201
    24
  def(d),
ladanyi@201
    25
  itisedge(edge),
ladanyi@201
    26
  set_new_map(false),
ladanyi@201
    27
  label(labeltext),
ladanyi@201
    28
  map_type(type),
ladanyi@201
    29
  newbut(Gtk::Stock::NEW)
hegyi@112
    30
{
ladanyi@201
    31
  update_list(n_ml, s_ml);
hegyi@112
    32
hegyi@112
    33
  if(act=="")
ladanyi@201
    34
  {
ladanyi@201
    35
    cbt.set_active(0);
ladanyi@201
    36
    default_state=true;
ladanyi@201
    37
  }
hegyi@112
    38
  else
ladanyi@201
    39
  {
ladanyi@201
    40
    cbt.set_active_text((Glib::ustring)act);
ladanyi@201
    41
    default_state=false;
ladanyi@201
    42
  }
hegyi@112
    43
hegyi@112
    44
  //binding signal to the actual entry
hegyi@112
    45
  cbt.signal_changed().connect
hegyi@112
    46
    (
hegyi@112
    47
     sigc::mem_fun((*this), &MapSelector::comboChanged),
hegyi@112
    48
     false
ladanyi@201
    49
    );
hegyi@112
    50
ladanyi@201
    51
  label.set_width_chars(longest_property_string_length);
hegyi@112
    52
hegyi@122
    53
  if(def)
ladanyi@201
    54
  {
ladanyi@201
    55
    defbut.set_label("Reset");
ladanyi@201
    56
    defbut.signal_pressed().connect
ladanyi@201
    57
      (
ladanyi@201
    58
       sigc::mem_fun(*this, &MapSelector::reset)
ladanyi@201
    59
      );
ladanyi@201
    60
  }
hegyi@112
    61
hegyi@112
    62
ladanyi@201
    63
  newbut.signal_pressed().connect
hegyi@112
    64
    (
hegyi@112
    65
     sigc::mem_fun(*this, &MapSelector::new_but_pressed)
ladanyi@201
    66
    );
hegyi@112
    67
ladanyi@201
    68
  add(label);
hegyi@112
    69
hegyi@112
    70
  add(cbt);
hegyi@112
    71
hegyi@122
    72
  if(def)
ladanyi@201
    73
  {
ladanyi@201
    74
    add(defbut);
ladanyi@201
    75
  }
hegyi@122
    76
ladanyi@201
    77
  add(newbut);
hegyi@112
    78
}
hegyi@112
    79
hegyi@112
    80
void MapSelector::new_but_pressed()
hegyi@112
    81
{
hegyi@112
    82
  set_new_map=true;
hegyi@112
    83
  signal_newmapwin.emit(itisedge);
hegyi@112
    84
}
hegyi@112
    85
ladanyi@201
    86
void MapSelector::update_list(std::vector<std::string> n_ml,
ladanyi@201
    87
    std::vector<std::string> s_ml)
hegyi@112
    88
{
hegyi@112
    89
  int prev_act=cbt.get_active_row_number();
hegyi@112
    90
  cbt.clear();
hegyi@172
    91
  cbt_content.clear();
ladanyi@201
    92
ladanyi@201
    93
  if (map_type & NUM)
ladanyi@201
    94
  {
ladanyi@201
    95
    std::vector< std::string >::iterator emsi=n_ml.begin();
ladanyi@201
    96
    for(;emsi!=n_ml.end();emsi++)
hegyi@112
    97
    {
hegyi@112
    98
      cbt.append_text(*emsi);
hegyi@172
    99
      cbt_content.push_back(*emsi);
hegyi@112
   100
    }
ladanyi@201
   101
  }
ladanyi@201
   102
  if (map_type & STR)
ladanyi@201
   103
  {
ladanyi@201
   104
    std::vector< std::string >::iterator emsi=s_ml.begin();
ladanyi@201
   105
    for(;emsi!=s_ml.end();emsi++)
ladanyi@201
   106
    {
ladanyi@201
   107
      cbt.append_text(*emsi);
ladanyi@201
   108
      cbt_content.push_back(*emsi);
ladanyi@201
   109
    }
ladanyi@201
   110
  }
hegyi@114
   111
  if(def)
hegyi@114
   112
    {
hegyi@114
   113
      cbt.prepend_text("Default values");
hegyi@172
   114
      cbt_content.push_back("Default values");
hegyi@114
   115
    }
hegyi@112
   116
  if(prev_act!=-1)
hegyi@112
   117
    {
hegyi@112
   118
      cbt.set_active(prev_act);
hegyi@112
   119
    }
hegyi@112
   120
}
hegyi@112
   121
hegyi@112
   122
void MapSelector::comboChanged()
hegyi@112
   123
{
hegyi@122
   124
  if(cbt.get_active_row_number()!=0 || !def)
hegyi@112
   125
    {
hegyi@112
   126
      default_state=false;
hegyi@112
   127
      Glib::ustring mapname = cbt.get_active_text();
hegyi@112
   128
      if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
hegyi@112
   129
	{
hegyi@112
   130
	  signal_cbt.emit(mapname);
hegyi@112
   131
	}
hegyi@112
   132
    }
hegyi@112
   133
  else if((!default_state)&&(cbt.get_active_row_number()==0))
hegyi@112
   134
    {
hegyi@112
   135
      reset();
hegyi@112
   136
    }
hegyi@112
   137
}
hegyi@112
   138
hegyi@112
   139
void MapSelector::reset()
hegyi@112
   140
{
hegyi@112
   141
  default_state=true;
hegyi@112
   142
hegyi@112
   143
  cbt.set_active(0);
hegyi@112
   144
hegyi@112
   145
  signal_cbt.emit("");
hegyi@112
   146
}
hegyi@112
   147
hegyi@112
   148
hegyi@112
   149
Glib::ustring MapSelector::get_active_text()
hegyi@112
   150
{
hegyi@112
   151
  return cbt.get_active_text();
hegyi@112
   152
}
hegyi@112
   153
hegyi@112
   154
void MapSelector::set_active_text(Glib::ustring text)
hegyi@112
   155
{
hegyi@172
   156
  if(text.compare(""))
hegyi@172
   157
    {
hegyi@172
   158
      cbt.set_active_text(text);
hegyi@172
   159
    }
hegyi@172
   160
  else
hegyi@172
   161
    { 
hegyi@172
   162
      cbt.set_active_text("Default values");
hegyi@172
   163
    }
hegyi@112
   164
}
hegyi@112
   165
ladanyi@201
   166
void MapSelector::append_text(Glib::ustring text, MapValue::Type type)
hegyi@112
   167
{
ladanyi@201
   168
  if (type & map_type)
ladanyi@201
   169
  {
ladanyi@201
   170
    cbt.append_text(text);
ladanyi@201
   171
    cbt_content.push_back(text);
hegyi@172
   172
ladanyi@201
   173
    if(set_new_map)
hegyi@112
   174
    {
hegyi@112
   175
      set_active_text(text);
hegyi@112
   176
      set_new_map=false;
hegyi@112
   177
    }
ladanyi@201
   178
  }
hegyi@112
   179
}
hegyi@112
   180
hegyi@112
   181
sigc::signal<void, std::string> MapSelector::signal_cbt_ch()
hegyi@112
   182
{
hegyi@112
   183
  return signal_cbt;
hegyi@112
   184
}
hegyi@112
   185
hegyi@112
   186
sigc::signal<void, bool> MapSelector::signal_newmapwin_needed()
hegyi@112
   187
{
hegyi@112
   188
  return signal_newmapwin;
hegyi@112
   189
}