map_win.cc
author hegyi
Tue, 20 Feb 2007 15:08:30 +0000
branchfastopen
changeset 204 8fec6a6472fe
parent 172 fc1e478697d3
child 194 6b2b718420eb
permissions -rw-r--r--
The much faster way.
     1 /* -*- C++ -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library
     4  *
     5  * Copyright (C) 2003-2006
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     8  *
     9  * Permission to use, modify and distribute this software is granted
    10  * provided that this copyright notice appears in all copies. For
    11  * precise terms see the accompanying LICENSE file.
    12  *
    13  * This software is provided "AS IS" with no warranty of any kind,
    14  * express or implied, and with no claim as to its suitability for any
    15  * purpose.
    16  *
    17  */
    18 
    19 #include "map_win.h"
    20 #include <set>
    21 
    22 bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e)
    23 {
    24   if(e->keyval==GDK_Escape)
    25   {
    26     mytab.closeMapWin();
    27     //    hide();
    28   }
    29   return true;
    30 }
    31 
    32 MapWin::MapWin(const std::string& title, std::vector<std::string> eml, std::vector<std::string> nml, NoteBookTab & mw):mytab(mw)
    33 {
    34   set_title(title);
    35   set_default_size(200, 50);
    36 
    37   set_resizable(false);
    38 
    39   signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
    40 
    41   mytab.signal_title_ch().connect(sigc::mem_fun(*this, &MapWin::set_title));
    42 
    43   e_combo_array=new MapSelector * [EDGE_PROPERTY_NUM];
    44 
    45   table=new Gtk::Table(EDGE_PROPERTY_NUM, 1, false);
    46 
    47   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    48   {
    49     e_combo_array[i]=new MapSelector(eml, mytab.getActiveEdgeMap(i), edge_property_strings[i], true);
    50 
    51     (*table).attach((*(e_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    52 
    53     e_combo_array[i]->signal_cbt_ch().connect(sigc::bind(sigc::mem_fun(*this, &MapWin::edgeMapChanged), i));
    54     e_combo_array[i]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &MapWin::newMapWinNeeded));
    55   }
    56 
    57   vbox.pack_start(*(new Gtk::Label("Edge properties")));
    58 
    59   vbox.pack_start(*table);
    60 
    61   vbox.pack_start(*(new Gtk::HSeparator));
    62 
    63   n_combo_array=new MapSelector * [NODE_PROPERTY_NUM];
    64 
    65   table=new Gtk::Table(NODE_PROPERTY_NUM, 1, false);
    66 
    67   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    68   {
    69     n_combo_array[i]=new MapSelector(nml, mytab.getActiveNodeMap(i), node_property_strings[i], false);
    70 
    71     (*table).attach((*(n_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    72 
    73     n_combo_array[i]->signal_cbt_ch().connect(sigc::bind(sigc::mem_fun(*this, &MapWin::nodeMapChanged), i));
    74     n_combo_array[i]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &MapWin::newMapWinNeeded));
    75   }
    76 
    77   add(vbox);
    78 
    79   vbox.pack_start(*(new Gtk::Label("Node properties")));
    80 
    81   vbox.pack_start(*table);
    82 
    83   show_all_children();
    84 
    85 }
    86 
    87 void MapWin::nodeMapChanged(std::string mapname, int prop)
    88 {
    89   mytab.propertyChange(false, prop, mapname);
    90 }
    91 
    92 void MapWin::edgeMapChanged(std::string mapname, int prop)
    93 {
    94   mytab.propertyChange(true, prop, mapname);
    95 }
    96 
    97 void MapWin::newMapWinNeeded(bool itisedge)
    98 {
    99   mytab.popupNewMapWin(itisedge);
   100 }
   101 
   102 void MapWin::update(std::vector<std::string> eml, std::vector<std::string> nml)
   103 {
   104   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   105   {
   106     e_combo_array[i]->update_list(eml);
   107   }
   108 
   109   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   110   {
   111     n_combo_array[i]->update_list(nml);
   112   }
   113 
   114   mytab.active_maps_needed();
   115 }
   116 
   117 void MapWin::registerNewEdgeMap(std::string newmapname)
   118 {
   119   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   120   {
   121     //filling in combo box with choices
   122     e_combo_array[i]->append_text((Glib::ustring)newmapname);
   123   }
   124 }
   125 
   126 void MapWin::registerNewNodeMap(std::string newmapname)
   127 {
   128   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   129   {
   130     //filling in combo box with choices
   131     n_combo_array[i]->append_text((Glib::ustring)newmapname);
   132   }
   133 }
   134 
   135 bool MapWin::on_delete_event(GdkEventAny * event)
   136 {
   137   event=event;
   138   mytab.closeMapWin();
   139   return true;
   140 }
   141 
   142 void MapWin::changeEntry(bool isitedge, int prop, std::string mapname)
   143 {
   144   if(isitedge)
   145     {
   146       e_combo_array[prop]->set_active_text(mapname);
   147     }
   148   else
   149     {
   150       n_combo_array[prop]->set_active_text(mapname);
   151     }
   152 }
   153 
   154 void MapWin::set_title(std::string tabname)
   155 {
   156   Gtk::Window::set_title("Map Setup - "+tabname);
   157 }