map_win.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 <map_win.h>
hegyi@194
    20
#include <nbtab.h>
hegyi@194
    21
#include <mapselector.h>
ladanyi@6
    22
#include <set>
ladanyi@6
    23
hegyi@30
    24
bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e)
ladanyi@6
    25
{
hegyi@8
    26
  if(e->keyval==GDK_Escape)
hegyi@8
    27
  {
hegyi@96
    28
    mytab.closeMapWin();
hegyi@95
    29
    //    hide();
hegyi@8
    30
  }
hegyi@8
    31
  return true;
hegyi@8
    32
}
ladanyi@6
    33
ladanyi@201
    34
MapWin::MapWin(const std::string& title,
ladanyi@201
    35
    std::vector<std::string> n_eml,
ladanyi@201
    36
    std::vector<std::string> s_eml,
ladanyi@201
    37
    std::vector<std::string> n_nml,
ladanyi@201
    38
    std::vector<std::string> s_nml,
ladanyi@201
    39
    NoteBookTab & mw):mytab(mw)
hegyi@8
    40
{
hegyi@8
    41
  set_title(title);
hegyi@8
    42
  set_default_size(200, 50);
ladanyi@6
    43
hegyi@146
    44
  set_resizable(false);
hegyi@146
    45
hegyi@30
    46
  signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
ladanyi@6
    47
hegyi@172
    48
  mytab.signal_title_ch().connect(sigc::mem_fun(*this, &MapWin::set_title));
hegyi@172
    49
hegyi@81
    50
  e_combo_array=new MapSelector * [EDGE_PROPERTY_NUM];
hegyi@8
    51
hegyi@81
    52
  table=new Gtk::Table(EDGE_PROPERTY_NUM, 1, false);
hegyi@28
    53
hegyi@28
    54
  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
ladanyi@6
    55
  {
ladanyi@201
    56
    switch (i)
ladanyi@201
    57
    {
ladanyi@201
    58
      case E_WIDTH:
ladanyi@201
    59
        e_combo_array[i]=new MapSelector(n_eml, s_eml,
ladanyi@201
    60
            mytab.getActiveEdgeMap(i), edge_property_strings[i],
ladanyi@201
    61
            true, true, NUM);
ladanyi@201
    62
        break;
ladanyi@201
    63
      case E_COLOR:
ladanyi@201
    64
        e_combo_array[i]=new MapSelector(n_eml, s_eml,
ladanyi@201
    65
            mytab.getActiveEdgeMap(i), edge_property_strings[i],
ladanyi@201
    66
            true, true, NUM);
ladanyi@201
    67
        break;
ladanyi@201
    68
      case E_TEXT:
ladanyi@201
    69
        e_combo_array[i]=new MapSelector(n_eml, s_eml,
ladanyi@201
    70
            mytab.getActiveEdgeMap(i), edge_property_strings[i],
ladanyi@201
    71
            true, true, ALL);
ladanyi@201
    72
        break;
ladanyi@201
    73
    }
hegyi@8
    74
hegyi@81
    75
    (*table).attach((*(e_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
hegyi@94
    76
hegyi@94
    77
    e_combo_array[i]->signal_cbt_ch().connect(sigc::bind(sigc::mem_fun(*this, &MapWin::edgeMapChanged), i));
hegyi@121
    78
    e_combo_array[i]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &MapWin::newMapWinNeeded));
ladanyi@6
    79
  }
ladanyi@6
    80
hegyi@28
    81
  vbox.pack_start(*(new Gtk::Label("Edge properties")));
hegyi@8
    82
hegyi@28
    83
  vbox.pack_start(*table);
hegyi@28
    84
hegyi@28
    85
  vbox.pack_start(*(new Gtk::HSeparator));
hegyi@28
    86
hegyi@81
    87
  n_combo_array=new MapSelector * [NODE_PROPERTY_NUM];
hegyi@28
    88
hegyi@81
    89
  table=new Gtk::Table(NODE_PROPERTY_NUM, 1, false);
hegyi@28
    90
hegyi@28
    91
  for(int i=0;i<NODE_PROPERTY_NUM;i++)
hegyi@28
    92
  {
ladanyi@201
    93
    switch (i)
ladanyi@201
    94
    {
ladanyi@201
    95
      case N_RADIUS:
ladanyi@201
    96
        n_combo_array[i]=new MapSelector(n_nml, s_nml,
ladanyi@201
    97
            mytab.getActiveNodeMap(i), node_property_strings[i],
ladanyi@201
    98
            false, true, NUM);
ladanyi@201
    99
        break;
ladanyi@201
   100
      case N_COLOR:
ladanyi@201
   101
        n_combo_array[i]=new MapSelector(n_nml, s_nml,
ladanyi@201
   102
            mytab.getActiveNodeMap(i), node_property_strings[i],
ladanyi@201
   103
            false, true, NUM);
ladanyi@201
   104
        break;
ladanyi@201
   105
      case N_TEXT:
ladanyi@201
   106
        n_combo_array[i]=new MapSelector(n_nml, s_nml,
ladanyi@201
   107
            mytab.getActiveNodeMap(i), node_property_strings[i],
ladanyi@201
   108
            false, true, ALL);
ladanyi@201
   109
        break;
ladanyi@201
   110
    }
hegyi@28
   111
hegyi@81
   112
    (*table).attach((*(n_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
hegyi@94
   113
hegyi@94
   114
    n_combo_array[i]->signal_cbt_ch().connect(sigc::bind(sigc::mem_fun(*this, &MapWin::nodeMapChanged), i));
hegyi@121
   115
    n_combo_array[i]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &MapWin::newMapWinNeeded));
hegyi@28
   116
  }
hegyi@28
   117
hegyi@28
   118
  add(vbox);
hegyi@28
   119
hegyi@28
   120
  vbox.pack_start(*(new Gtk::Label("Node properties")));
hegyi@28
   121
hegyi@28
   122
  vbox.pack_start(*table);
ladanyi@6
   123
ladanyi@201
   124
  update(n_eml, s_eml, n_nml, s_nml);
ladanyi@201
   125
ladanyi@6
   126
  show_all_children();
ladanyi@6
   127
ladanyi@6
   128
}
ladanyi@6
   129
hegyi@94
   130
void MapWin::nodeMapChanged(std::string mapname, int prop)
hegyi@94
   131
{
hegyi@96
   132
  mytab.propertyChange(false, prop, mapname);
hegyi@94
   133
}
hegyi@94
   134
hegyi@94
   135
void MapWin::edgeMapChanged(std::string mapname, int prop)
hegyi@94
   136
{
hegyi@96
   137
  mytab.propertyChange(true, prop, mapname);
hegyi@94
   138
}
hegyi@94
   139
hegyi@121
   140
void MapWin::newMapWinNeeded(bool itisedge)
hegyi@94
   141
{
hegyi@121
   142
  mytab.popupNewMapWin(itisedge);
hegyi@94
   143
}
hegyi@94
   144
ladanyi@201
   145
void MapWin::update(
ladanyi@201
   146
    std::vector<std::string> n_eml,
ladanyi@201
   147
    std::vector<std::string> s_eml,
ladanyi@201
   148
    std::vector<std::string> n_nml,
ladanyi@201
   149
    std::vector<std::string> s_nml)
ladanyi@53
   150
{
ladanyi@53
   151
  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
ladanyi@53
   152
  {
ladanyi@201
   153
    e_combo_array[i]->update_list(n_eml, s_eml);
hegyi@81
   154
  }
ladanyi@53
   155
ladanyi@53
   156
  for(int i=0;i<NODE_PROPERTY_NUM;i++)
ladanyi@53
   157
  {
ladanyi@201
   158
    n_combo_array[i]->update_list(n_nml, s_nml);
ladanyi@53
   159
  }
hegyi@172
   160
hegyi@172
   161
  mytab.active_maps_needed();
ladanyi@53
   162
}
ladanyi@53
   163
ladanyi@201
   164
void MapWin::registerNewEdgeMap(std::string newmapname, MapValue::Type type)
hegyi@38
   165
{
hegyi@40
   166
  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
hegyi@40
   167
  {
hegyi@40
   168
    //filling in combo box with choices
ladanyi@201
   169
    e_combo_array[i]->append_text((Glib::ustring)newmapname, type);
hegyi@40
   170
  }
hegyi@38
   171
}
hegyi@38
   172
ladanyi@201
   173
void MapWin::registerNewNodeMap(std::string newmapname, MapValue::Type type)
hegyi@38
   174
{
hegyi@41
   175
  for(int i=0;i<NODE_PROPERTY_NUM;i++)
hegyi@40
   176
  {
hegyi@40
   177
    //filling in combo box with choices
ladanyi@201
   178
    n_combo_array[i]->append_text((Glib::ustring)newmapname, type);
hegyi@40
   179
  }
hegyi@38
   180
}
hegyi@95
   181
hegyi@95
   182
bool MapWin::on_delete_event(GdkEventAny * event)
hegyi@95
   183
{
hegyi@95
   184
  event=event;
hegyi@96
   185
  mytab.closeMapWin();
hegyi@95
   186
  return true;
hegyi@95
   187
}
hegyi@172
   188
hegyi@172
   189
void MapWin::changeEntry(bool isitedge, int prop, std::string mapname)
hegyi@172
   190
{
hegyi@172
   191
  if(isitedge)
hegyi@172
   192
    {
hegyi@172
   193
      e_combo_array[prop]->set_active_text(mapname);
hegyi@172
   194
    }
hegyi@172
   195
  else
hegyi@172
   196
    {
hegyi@172
   197
      n_combo_array[prop]->set_active_text(mapname);
hegyi@172
   198
    }
hegyi@172
   199
}
hegyi@172
   200
hegyi@172
   201
void MapWin::set_title(std::string tabname)
hegyi@172
   202
{
hegyi@172
   203
  Gtk::Window::set_title("Map Setup - "+tabname);
hegyi@172
   204
}