COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/map_win.cc @ 1435:8e85e6bbefdf

Last change on this file since 1435:8e85e6bbefdf was 1435:8e85e6bbefdf, checked in by Akos Ladanyi, 19 years ago

trunk/src/* move to trunk/

File size: 2.6 KB
Line 
1#include <map_win.h>
2#include <set>
3
4MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst)
5{
6  set_title(title);
7  set_default_size(400, 200);
8
9  rb_array=new Gtk::RadioButton * [PROPERTY_NUM];
10  vbox_r1=new Gtk::VBox[PROPERTY_NUM];
11  vbox_r2=new Gtk::VBox[PROPERTY_NUM];
12  radios=new Gtk::HBox[PROPERTY_NUM];
13  for(int i=0;i<PROPERTY_NUM;i++)
14  {
15    rb_array[i]=new Gtk::RadioButton[ms.numOfEdgeMaps()+1];
16
17    Gtk::RadioButton::Group group;
18
19    std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
20    std::set<int> props;
21
22    int actprop;
23    for(int j=0;j<ms.numOfEdgeMaps();j++)
24    {
25
26      if(emsi->second==&(ms.default_edgemaps[i]))
27      {
28        actprop=j;
29      }
30      for(int k=0;k<PROPERTY_NUM;k++)
31      {
32        if(emsi->second==&(ms.default_edgemaps[k]))
33        {
34          props.insert(j);
35        }
36      }
37      emsi++;
38    }
39
40    rb_array[i][0].set_group(group);
41    rb_array[i][0].set_label("Default");
42    rb_array[i][0].signal_clicked().connect( sigc::bind( sigc::bind( sigc::mem_fun(*this, &MapWin::radio_click), 0), i) );
43    vbox_r1[i].pack_start(rb_array[i][0]);
44
45
46    emsi=ms.beginOfEdgeMaps();
47    int actpos=1;
48    for(int j=0;j<ms.numOfEdgeMaps();j++)
49    {
50      if( ( props.find(j) )==( props.end() ) )
51      {
52        rb_array[i][actpos].set_group(group);
53        rb_array[i][actpos].set_label(emsi->first);
54        rb_array[i][actpos].signal_clicked().connect
55          (
56           sigc::bind(
57            sigc::bind(
58             sigc::mem_fun(*this, &MapWin::radio_click),
59             actpos
60            ),
61            i
62           )
63          );
64
65        if(actpos<(ms.numOfEdgeMaps()-PROPERTY_NUM+1)/2)
66        {
67          vbox_r1[i].pack_start(rb_array[i][actpos]);
68        }
69        else
70        {
71          vbox_r2[i].pack_start(rb_array[i][actpos]);
72        }
73        actpos++;
74      }
75      emsi++;
76    }
77    radios[i].pack_start(vbox_r1[i]);
78    radios[i].pack_start(vbox_r2[i]);
79    notebook.append_page(radios[i], property_strings[i]);
80  }
81
82  add(vbox_b);
83  vbox_b.pack_start(notebook);
84
85  show_all_children();
86
87}
88
89void MapWin::radio_click(int prop, int actpos)
90{
91  if(rb_array[prop][actpos].get_active())
92  {
93
94    std::string mapname=rb_array[prop][actpos].get_label();
95
96    if(mapname=="Default")
97    {
98      mapname=property_strings[prop];
99    }
100
101    switch(prop)
102    {
103      case WIDTH:
104        gdc.changeLineWidth(mapname);
105        break;
106      case COLOR:
107        gdc.changeColor(mapname);
108        break;
109      case TEXT:
110        gdc.changeText(mapname);
111        break;
112      default:
113        std::cout<<"Error\n";
114    }
115  }
116};
Note: See TracBrowser for help on using the repository browser.