map_win.cc
author ladanyi
Wed, 02 May 2007 20:33:58 +0000
changeset 200 c7ae8642a8d8
parent 174 95872af46fc4
child 201 879e47e5b731
permissions -rw-r--r--
Bugfix.
     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 <nbtab.h>
    21 #include <mapselector.h>
    22 #include <set>
    23 
    24 bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e)
    25 {
    26   if(e->keyval==GDK_Escape)
    27   {
    28     mytab.closeMapWin();
    29     //    hide();
    30   }
    31   return true;
    32 }
    33 
    34 MapWin::MapWin(const std::string& title, std::vector<std::string> eml, std::vector<std::string> nml, NoteBookTab & mw):mytab(mw)
    35 {
    36   set_title(title);
    37   set_default_size(200, 50);
    38 
    39   set_resizable(false);
    40 
    41   signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
    42 
    43   mytab.signal_title_ch().connect(sigc::mem_fun(*this, &MapWin::set_title));
    44 
    45   e_combo_array=new MapSelector * [EDGE_PROPERTY_NUM];
    46 
    47   table=new Gtk::Table(EDGE_PROPERTY_NUM, 1, false);
    48 
    49   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
    50   {
    51     e_combo_array[i]=new MapSelector(eml, mytab.getActiveEdgeMap(i), edge_property_strings[i], true);
    52 
    53     (*table).attach((*(e_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    54 
    55     e_combo_array[i]->signal_cbt_ch().connect(sigc::bind(sigc::mem_fun(*this, &MapWin::edgeMapChanged), i));
    56     e_combo_array[i]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &MapWin::newMapWinNeeded));
    57   }
    58 
    59   vbox.pack_start(*(new Gtk::Label("Edge properties")));
    60 
    61   vbox.pack_start(*table);
    62 
    63   vbox.pack_start(*(new Gtk::HSeparator));
    64 
    65   n_combo_array=new MapSelector * [NODE_PROPERTY_NUM];
    66 
    67   table=new Gtk::Table(NODE_PROPERTY_NUM, 1, false);
    68 
    69   for(int i=0;i<NODE_PROPERTY_NUM;i++)
    70   {
    71     n_combo_array[i]=new MapSelector(nml, mytab.getActiveNodeMap(i), node_property_strings[i], false);
    72 
    73     (*table).attach((*(n_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
    74 
    75     n_combo_array[i]->signal_cbt_ch().connect(sigc::bind(sigc::mem_fun(*this, &MapWin::nodeMapChanged), i));
    76     n_combo_array[i]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &MapWin::newMapWinNeeded));
    77   }
    78 
    79   add(vbox);
    80 
    81   vbox.pack_start(*(new Gtk::Label("Node properties")));
    82 
    83   vbox.pack_start(*table);
    84 
    85   show_all_children();
    86 
    87 }
    88 
    89 void MapWin::nodeMapChanged(std::string mapname, int prop)
    90 {
    91   mytab.propertyChange(false, prop, mapname);
    92 }
    93 
    94 void MapWin::edgeMapChanged(std::string mapname, int prop)
    95 {
    96   mytab.propertyChange(true, prop, mapname);
    97 }
    98 
    99 void MapWin::newMapWinNeeded(bool itisedge)
   100 {
   101   mytab.popupNewMapWin(itisedge);
   102 }
   103 
   104 void MapWin::update(std::vector<std::string> eml, std::vector<std::string> nml)
   105 {
   106   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   107   {
   108     e_combo_array[i]->update_list(eml);
   109   }
   110 
   111   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   112   {
   113     n_combo_array[i]->update_list(nml);
   114   }
   115 
   116   mytab.active_maps_needed();
   117 }
   118 
   119 void MapWin::registerNewEdgeMap(std::string newmapname)
   120 {
   121   for(int i=0;i<EDGE_PROPERTY_NUM;i++)
   122   {
   123     //filling in combo box with choices
   124     e_combo_array[i]->append_text((Glib::ustring)newmapname);
   125   }
   126 }
   127 
   128 void MapWin::registerNewNodeMap(std::string newmapname)
   129 {
   130   for(int i=0;i<NODE_PROPERTY_NUM;i++)
   131   {
   132     //filling in combo box with choices
   133     n_combo_array[i]->append_text((Glib::ustring)newmapname);
   134   }
   135 }
   136 
   137 bool MapWin::on_delete_event(GdkEventAny * event)
   138 {
   139   event=event;
   140   mytab.closeMapWin();
   141   return true;
   142 }
   143 
   144 void MapWin::changeEntry(bool isitedge, int prop, std::string mapname)
   145 {
   146   if(isitedge)
   147     {
   148       e_combo_array[prop]->set_active_text(mapname);
   149     }
   150   else
   151     {
   152       n_combo_array[prop]->set_active_text(mapname);
   153     }
   154 }
   155 
   156 void MapWin::set_title(std::string tabname)
   157 {
   158   Gtk::Window::set_title("Map Setup - "+tabname);
   159 }