COIN-OR::LEMON - Graph Library

source: glemon-0.x/map_win.cc @ 38:9cab23d9b124

gui
Last change on this file since 38:9cab23d9b124 was 38:9cab23d9b124, checked in by Hegyi Péter, 15 years ago

Continuing adding new maps.

File size: 5.8 KB
Line 
1#include <map_win.h>
2#include <set>
3
4bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e)
5{
6  if(e->keyval==GDK_Escape)
7  {
8    hide();
9  }
10  return true;
11}
12
13MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst)
14{
15  set_title(title);
16  set_default_size(200, 50);
17
18  signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
19
20  e_combo_array=new Gtk::Combo [EDGE_PROPERTY_NUM];
21
22  table=new Gtk::Table(EDGE_PROPERTY_NUM, 2, false);
23
24  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
25  {
26    //filling in combo box with choices
27    std::list<Glib::ustring> listStrings;
28
29    listStrings.push_back("Default");
30
31    std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
32    for(;emsi!=ms.endOfEdgeMaps();emsi++)
33    {
34        listStrings.push_back(emsi->first);
35    }
36
37    e_combo_array[i].set_popdown_strings(listStrings);
38
39    //Restrict it to these choices only:
40    e_combo_array[i].set_value_in_list();
41
42    //binding signal to the actual entry
43    e_combo_array[i].get_entry()->signal_changed().connect
44    (
45     sigc::bind
46     (
47      sigc::mem_fun(*this, &MapWin::eComboChanged),
48      i
49     )
50    );
51
52    //placing actual entry in the right place
53
54    label=new Gtk::Label;
55    label->set_text(edge_property_strings[i]);
56       
57    (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
58    (*table).attach(e_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
59
60
61  }
62
63  vbox.pack_start(*(new Gtk::Label("Edge properties")));
64
65  vbox.pack_start(*table);
66
67  vbox.pack_start(*(new Gtk::HSeparator));
68
69  n_combo_array=new Gtk::Combo [NODE_PROPERTY_NUM];
70
71  table=new Gtk::Table(NODE_PROPERTY_NUM, 2, false);
72
73  for(int i=0;i<NODE_PROPERTY_NUM;i++)
74  {
75    //filling in combo box with choices
76    std::list<Glib::ustring> listStrings;
77
78    listStrings.push_back("Default");
79
80    std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
81
82    for(;emsi!=ms.endOfNodeMaps();emsi++)
83    {
84      listStrings.push_back(emsi->first);
85    }
86
87    n_combo_array[i].set_popdown_strings(listStrings);
88
89    //Restrict it to these choices only:
90    n_combo_array[i].set_value_in_list();
91
92    //binding signal to thew actual entry
93    n_combo_array[i].get_entry()->signal_changed().connect
94    (
95     sigc::bind
96     (
97      sigc::mem_fun(*this, &MapWin::nComboChanged),
98      i
99     )
100    );
101
102    //placing actual entry in the right place
103
104    label=new Gtk::Label;
105    label->set_text(node_property_strings[i]);
106       
107    (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
108    (*table).attach(n_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3);
109
110
111  }
112
113  add(vbox);
114
115  vbox.pack_start(*(new Gtk::Label("Node properties")));
116
117  vbox.pack_start(*table);
118
119  show_all_children();
120
121}
122
123void MapWin::eComboChanged(int prop)
124{
125  Gtk::Entry* entry = e_combo_array[prop].get_entry();
126
127  if(entry)
128  {
129    Glib::ustring mapname = entry->get_text();
130    if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
131    {
132      if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
133      {
134        switch(prop)
135        {
136          case E_WIDTH:
137            gdc.changeEdgeWidth(mapname);
138            break;
139          case E_COLOR:
140            gdc.changeEdgeColor(mapname);
141            break;
142          case E_TEXT:
143            gdc.changeEdgeText(mapname);
144            break;
145          default:
146            std::cout<<"Error\n";
147        }
148      }
149    }
150  }
151};
152
153void MapWin::nComboChanged(int prop)
154{
155
156  Gtk::Entry* entry = n_combo_array[prop].get_entry();
157
158  if(entry)
159  {
160    Glib::ustring mapname = entry->get_text();
161    if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
162    {
163      if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
164      {
165        switch(prop)
166        {
167          case N_RADIUS:
168            gdc.changeNodeRadius(mapname);
169            break;
170          case N_COLOR:
171            gdc.changeNodeColor(mapname);
172            break;
173          case N_TEXT:
174            gdc.changeNodeText(mapname);
175            break;
176          default:
177            std::cout<<"Error\n";
178        }
179      }
180    }
181  }
182};
183
184void MapWin::updateNode(Graph::Node node)
185{
186  for(int i=0;i<NODE_PROPERTY_NUM;i++)
187    {
188      Gtk::Entry* entry = n_combo_array[i].get_entry();
189
190      if(entry)
191        {
192          Glib::ustring mapname = entry->get_text();
193          if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
194            {
195              if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
196                {
197                  switch(i)
198                    {
199                    case N_RADIUS:
200                      gdc.changeNodeRadius(mapname, node);
201                      break;
202                    case N_COLOR:
203                      gdc.changeNodeColor(mapname, node);
204                      break;
205                    case N_TEXT:
206                      gdc.changeNodeText(mapname, node);
207                      break;
208                    default:
209                      std::cout<<"Error\n";
210                    }
211                }
212            }
213        }
214    }
215}
216
217void MapWin::updateEdge(Graph::Edge edge)
218{
219  for(int i=0;i<EDGE_PROPERTY_NUM;i++)
220    {
221
222      Gtk::Entry* entry = e_combo_array[i].get_entry();
223
224      if(entry)
225        {
226          Glib::ustring mapname = entry->get_text();
227          if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
228            {
229
230              if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
231                {
232                  switch(i)
233                    {
234                    case E_WIDTH:
235                      gdc.changeEdgeWidth(mapname, edge);
236                      break;
237                    case E_COLOR:
238                      gdc.changeEdgeColor(mapname, edge);
239                      break;
240                    case E_TEXT:
241                      gdc.changeEdgeText(mapname, edge);
242                      break;
243                    default:
244                      std::cout<<"Error\n";
245                    }
246                }
247            }
248        }
249    }
250}
251
252void MapWin::registerNewEdgeMap(std::string)
253{
254  std::cout << "void MapWin::registerNewEdgeMap(std::string) is not yet implemented" << std::endl;
255}
256
257void MapWin::registerNewNodeMap(std::string)
258{
259  std::cout << "void MapWin::registerNewNodeMap(std::string) is not yet implemented" << std::endl;
260}
Note: See TracBrowser for help on using the repository browser.