COIN-OR::LEMON - Graph Library

source: lemon-0.x/gui/mapselector.cc @ 1795:ed3c253b9c29

Last change on this file since 1795:ed3c253b9c29 was 1737:dc821d2668c1, checked in by Hegyi Péter, 18 years ago

Newly created map is realized by the property givening by common sense.

File size: 4.1 KB
Line 
1#include "mapselector.h"
2
3MapSelector::MapSelector(GraphDisplayerCanvas & grdispc, MapStorage & mapst, NewMapWin & newmapw, int identifier, bool edge):gdc(grdispc),ms(mapst),nmw(newmapw),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), &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, &MapSelector::reset)
33     );
34
35  newbut=new Gtk::Button(Gtk::Stock::NEW);
36
37  newbut->signal_pressed().connect
38    (
39     sigc::mem_fun(*this, &MapSelector::new_but_pressed)
40     );
41
42  add(*label);
43
44  add(cbt);
45
46  add(*defbut);
47  add(*newbut);
48}
49
50void MapSelector::new_but_pressed()
51{
52  set_new_map=true;
53  nmw.showByPreChoose(itisedge);
54}
55
56void 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 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 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 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 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 MapSelector::get_active_text()
208{
209  return cbt.get_active_text();
210}
211
212void MapSelector::set_active_text(Glib::ustring text)
213{
214  cbt.set_active_text(text);
215}
216
217void 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.