COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/mw-mapselector.cc @ 1836:1fee7c6b5129

Last change on this file since 1836:1fee7c6b5129 was 1823:cb082cdf3667, checked in by Hegyi Péter, 18 years ago

NewMapWin? has become Dialog instead of Window. Therefore it is created dynamically, when there is need for it, instead of keeping one instance in memory. This solution is slower, but more correct than before.

File size: 4.2 KB
Line 
1#include "map_win.h"
2
3MapWin::MapSelector::MapSelector(GraphDisplayerCanvas & grdispc, MapStorage & mapst, int identifier, bool edge):gdc(grdispc),ms(mapst),id(identifier),itisedge(edge),default_state(true),set_new_map(false),node_to_update(INVALID),edge_to_update(INVALID)
4{
5  update_list();
6
7  cbt.set_active(0);
8
9  //binding signal to the actual entry
10  cbt.signal_changed().connect
11    (
12     sigc::mem_fun((*this), &MapWin::MapSelector::comboChanged),
13     false
14     );
15 
16  if(itisedge)
17    {
18      label=new Gtk::Label(edge_property_strings[id]);
19    }
20  else
21    {
22      label=new Gtk::Label(node_property_strings[id]);
23    }
24
25  label->set_width_chars(longest_property_string_length);
26
27  defbut=new Gtk::Button();
28  defbut->set_label("Reset");
29
30  defbut->signal_pressed().connect
31    (
32     sigc::mem_fun(*this, &MapWin::MapSelector::reset)
33     );
34
35  newbut=new Gtk::Button(Gtk::Stock::NEW);
36
37  newbut->signal_pressed().connect
38    (
39     sigc::mem_fun(*this, &MapWin::MapSelector::new_but_pressed)
40     );
41
42  add(*label);
43
44  add(cbt);
45
46  add(*defbut);
47  add(*newbut);
48}
49
50void MapWin::MapSelector::new_but_pressed()
51{
52  set_new_map=true;
53  (new NewMapWin("NewMapWin", gdc, itisedge, false))->run();
54}
55
56void MapWin::MapSelector::update_list()
57{
58  cbt.clear();
59  if(itisedge)
60    {
61      std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
62      for(;emsi!=ms.endOfEdgeMaps();emsi++)
63        {
64          cbt.append_text(emsi->first);
65        }
66    }
67  else
68    {
69      std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
70      for(;emsi!=ms.endOfNodeMaps();emsi++)
71        {
72          cbt.append_text(emsi->first);
73        }
74    }
75  cbt.prepend_text("Default values");
76}
77
78void MapWin::MapSelector::comboChanged()
79{
80  if(cbt.get_active_row_number()!=0)
81    {
82      default_state=false;
83      Glib::ustring mapname = cbt.get_active_text();
84      if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
85        {
86          if(itisedge)
87            {
88              if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) )
89                {
90                  Edge edge=edge_to_update;
91                  switch(id)
92                    {
93                    case E_WIDTH:
94                      gdc.changeEdgeWidth(mapname, edge);
95                      break;
96                    case E_COLOR:
97                      gdc.changeEdgeColor(mapname, edge);
98                      break;
99                    case E_TEXT:
100                      gdc.changeEdgeText(mapname, edge);
101                      break;
102                    default:
103                      std::cerr<<"Error\n";
104                    }
105                }
106            }
107          else
108            {
109              if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) )
110                {
111                  Node node=node_to_update;
112                  switch(id)
113                    {
114                    case N_RADIUS:
115                      gdc.changeNodeRadius(mapname, node);
116                      break;
117                    case N_COLOR:
118                      gdc.changeNodeColor(mapname, node);
119                      break;
120                    case N_TEXT:
121                      gdc.changeNodeText(mapname, node);
122                      break;
123                    default:
124                      std::cerr<<"Error\n";
125                    }
126                }
127            }
128        }
129    }
130  else if((!default_state)&&(cbt.get_active_row_number()==0))
131    {
132      reset();
133    }
134}
135
136void MapWin::MapSelector::reset()
137{
138  default_state=true;
139  cbt.set_active(0);
140
141  if(itisedge)
142    {
143      Edge edge=edge_to_update;
144      switch(id)
145        {
146        case E_WIDTH:
147          gdc.resetEdgeWidth(edge);
148          break;
149        case E_COLOR:
150          gdc.resetEdgeColor(edge);
151          break;
152        case E_TEXT:
153          gdc.resetEdgeText(edge);
154          break;
155        default:
156          std::cerr<<"Error\n";
157        }
158    }
159  else
160    {
161      Node node=node_to_update;
162      switch(id)
163        {
164        case N_RADIUS:
165          gdc.resetNodeRadius(node);
166          break;
167        case N_COLOR:
168          gdc.resetNodeColor(node);
169          break;
170        case N_TEXT:
171          gdc.resetNodeText(node);
172          break;
173        default:
174          std::cerr<<"Error\n";
175        }
176    }
177}
178
179void MapWin::MapSelector::update(Node node)
180{
181  node_to_update=node;
182  if(default_state)
183    {
184      reset();
185    }
186  else
187    {
188      comboChanged();
189    }
190  node_to_update=INVALID;
191}
192
193void MapWin::MapSelector::update(Edge edge)
194{
195  edge_to_update=edge;
196  if(default_state)
197    {
198      reset();
199    }
200  else
201    {
202      comboChanged();
203    }
204  edge_to_update=INVALID;
205}
206
207Glib::ustring MapWin::MapSelector::get_active_text()
208{
209  return cbt.get_active_text();
210}
211
212void MapWin::MapSelector::set_active_text(Glib::ustring text)
213{
214  cbt.set_active_text(text);
215}
216
217void MapWin::MapSelector::append_text(Glib::ustring text)
218{
219  cbt.append_text(text);
220  if(set_new_map)
221    {
222      set_active_text(text);
223      set_new_map=false;
224    }
225}
Note: See TracBrowser for help on using the repository browser.