15 set_title(title); |
15 set_title(title); |
16 set_default_size(200, 50); |
16 set_default_size(200, 50); |
17 |
17 |
18 signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed)); |
18 signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed)); |
19 |
19 |
20 e_combo_array=new Gtk::Combo [EDGE_PROPERTY_NUM]; |
20 e_combo_array=new MapSelector * [EDGE_PROPERTY_NUM]; |
21 |
21 |
22 table=new Gtk::Table(EDGE_PROPERTY_NUM, 2, false); |
22 table=new Gtk::Table(EDGE_PROPERTY_NUM, 1, false); |
23 |
23 |
24 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
24 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
25 { |
25 { |
26 //filling in combo box with choices |
26 e_combo_array[i]=new MapSelector(gdc, ms, *this, i, true); |
27 std::list<Glib::ustring> listStrings; |
|
28 |
27 |
29 listStrings.push_back("Default"); |
28 (*table).attach((*(e_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); |
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 } |
29 } |
62 |
30 |
63 vbox.pack_start(*(new Gtk::Label("Edge properties"))); |
31 vbox.pack_start(*(new Gtk::Label("Edge properties"))); |
64 |
32 |
65 vbox.pack_start(*table); |
33 vbox.pack_start(*table); |
66 |
34 |
67 vbox.pack_start(*(new Gtk::HSeparator)); |
35 vbox.pack_start(*(new Gtk::HSeparator)); |
68 |
36 |
69 n_combo_array=new Gtk::Combo [NODE_PROPERTY_NUM]; |
37 n_combo_array=new MapSelector * [NODE_PROPERTY_NUM]; |
70 |
38 |
71 table=new Gtk::Table(NODE_PROPERTY_NUM, 2, false); |
39 table=new Gtk::Table(NODE_PROPERTY_NUM, 1, false); |
72 |
40 |
73 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
41 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
74 { |
42 { |
75 //filling in combo box with choices |
43 n_combo_array[i]=new MapSelector(gdc, ms, *this, i, false); |
76 std::list<Glib::ustring> listStrings; |
|
77 |
44 |
78 listStrings.push_back("Default"); |
45 (*table).attach((*(n_combo_array[i])),0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); |
79 |
|
80 std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps(); |
|
81 |
|
82 for(;emsi!=ms.endOfNodeMaps();emsi++) |
|
83 { |
|
84 if ((emsi->first != "coordinates_x") && (emsi->first != "coordinates_y")) |
|
85 { |
|
86 listStrings.push_back(emsi->first); |
|
87 } |
|
88 } |
|
89 |
|
90 n_combo_array[i].set_popdown_strings(listStrings); |
|
91 |
|
92 //Restrict it to these choices only: |
|
93 n_combo_array[i].set_value_in_list(); |
|
94 |
|
95 //binding signal to thew actual entry |
|
96 n_combo_array[i].get_entry()->signal_changed().connect |
|
97 ( |
|
98 sigc::bind |
|
99 ( |
|
100 sigc::mem_fun(*this, &MapWin::nComboChanged), |
|
101 i |
|
102 ) |
|
103 ); |
|
104 |
|
105 //placing actual entry in the right place |
|
106 |
|
107 label=new Gtk::Label; |
|
108 label->set_text(node_property_strings[i]); |
|
109 |
|
110 (*table).attach(*label,0,1,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); |
|
111 (*table).attach(n_combo_array[i],1,2,i,i+1,Gtk::SHRINK,Gtk::SHRINK,10,3); |
|
112 |
|
113 |
|
114 } |
46 } |
115 |
47 |
116 add(vbox); |
48 add(vbox); |
117 |
49 |
118 vbox.pack_start(*(new Gtk::Label("Node properties"))); |
50 vbox.pack_start(*(new Gtk::Label("Node properties"))); |
125 |
57 |
126 void MapWin::update() |
58 void MapWin::update() |
127 { |
59 { |
128 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
60 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
129 { |
61 { |
130 //filling in combo box with choices |
62 e_combo_array[i]->update_list(); |
131 std::list<Glib::ustring> listStrings; |
63 } |
132 |
64 |
133 listStrings.push_back("Default"); |
|
134 |
|
135 std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps(); |
|
136 for(;emsi!=ms.endOfEdgeMaps();emsi++) |
|
137 { |
|
138 listStrings.push_back(emsi->first); |
|
139 } |
|
140 |
|
141 e_combo_array[i].set_popdown_strings(listStrings); |
|
142 } |
|
143 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
65 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
144 { |
66 { |
145 //filling in combo box with choices |
67 n_combo_array[i]->update_list(); |
146 std::list<Glib::ustring> listStrings; |
|
147 |
|
148 listStrings.push_back("Default"); |
|
149 |
|
150 std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps(); |
|
151 |
|
152 for(;emsi!=ms.endOfNodeMaps();emsi++) |
|
153 { |
|
154 if ((emsi->first != "coordinates_x") && (emsi->first != "coordinates_y")) |
|
155 { |
|
156 listStrings.push_back(emsi->first); |
|
157 } |
|
158 } |
|
159 |
|
160 n_combo_array[i].set_popdown_strings(listStrings); |
|
161 } |
68 } |
162 } |
69 } |
163 |
70 |
164 void MapWin::eComboChanged(int prop) |
|
165 { |
|
166 |
|
167 Gtk::Entry* entry = e_combo_array[prop].get_entry(); |
|
168 |
|
169 if(entry) |
|
170 { |
|
171 Glib::ustring mapname = entry->get_text(); |
|
172 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. |
|
173 { |
|
174 if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") ) |
|
175 { |
|
176 switch(prop) |
|
177 { |
|
178 case E_WIDTH: |
|
179 gdc.changeEdgeWidth(mapname); |
|
180 break; |
|
181 case E_COLOR: |
|
182 gdc.changeEdgeColor(mapname); |
|
183 break; |
|
184 case E_TEXT: |
|
185 gdc.changeEdgeText(mapname); |
|
186 break; |
|
187 default: |
|
188 std::cerr<<"Error\n"; |
|
189 } |
|
190 } |
|
191 } |
|
192 } |
|
193 }; |
|
194 |
|
195 void MapWin::nComboChanged(int prop) |
|
196 { |
|
197 |
|
198 Gtk::Entry* entry = n_combo_array[prop].get_entry(); |
|
199 |
|
200 if(entry) |
|
201 { |
|
202 Glib::ustring mapname = entry->get_text(); |
|
203 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. |
|
204 { |
|
205 if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") ) |
|
206 { |
|
207 switch(prop) |
|
208 { |
|
209 case N_RADIUS: |
|
210 gdc.changeNodeRadius(mapname); |
|
211 break; |
|
212 case N_COLOR: |
|
213 gdc.changeNodeColor(mapname); |
|
214 break; |
|
215 case N_TEXT: |
|
216 gdc.changeNodeText(mapname); |
|
217 break; |
|
218 default: |
|
219 std::cerr<<"Error\n"; |
|
220 } |
|
221 } |
|
222 } |
|
223 } |
|
224 }; |
|
225 |
71 |
226 void MapWin::updateNode(Node node) |
72 void MapWin::updateNode(Node node) |
227 { |
73 { |
228 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
74 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
229 { |
75 { |
230 Gtk::Entry* entry = n_combo_array[i].get_entry(); |
76 n_combo_array[i]->update(node); |
231 |
|
232 if(entry) |
|
233 { |
|
234 Glib::ustring mapname = entry->get_text(); |
|
235 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. |
|
236 { |
|
237 if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") ) |
|
238 { |
|
239 switch(i) |
|
240 { |
|
241 case N_RADIUS: |
|
242 gdc.changeNodeRadius(mapname, node); |
|
243 break; |
|
244 case N_COLOR: |
|
245 gdc.changeNodeColor(mapname, node); |
|
246 break; |
|
247 case N_TEXT: |
|
248 gdc.changeNodeText(mapname, node); |
|
249 break; |
|
250 default: |
|
251 std::cerr<<"Error\n"; |
|
252 } |
|
253 } |
|
254 } |
|
255 } |
|
256 } |
77 } |
257 } |
78 } |
258 |
79 |
259 void MapWin::updateEdge(Edge edge) |
80 void MapWin::updateEdge(Edge edge) |
260 { |
81 { |
261 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
82 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
262 { |
83 { |
263 |
84 e_combo_array[i]->update(edge); |
264 Gtk::Entry* entry = e_combo_array[i].get_entry(); |
|
265 |
|
266 if(entry) |
|
267 { |
|
268 Glib::ustring mapname = entry->get_text(); |
|
269 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. |
|
270 { |
|
271 |
|
272 if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") ) |
|
273 { |
|
274 switch(i) |
|
275 { |
|
276 case E_WIDTH: |
|
277 gdc.changeEdgeWidth(mapname, edge); |
|
278 break; |
|
279 case E_COLOR: |
|
280 gdc.changeEdgeColor(mapname, edge); |
|
281 break; |
|
282 case E_TEXT: |
|
283 gdc.changeEdgeText(mapname, edge); |
|
284 break; |
|
285 default: |
|
286 std::cerr<<"Error\n"; |
|
287 } |
|
288 } |
|
289 } |
|
290 } |
|
291 } |
85 } |
292 } |
86 } |
293 |
87 |
294 void MapWin::registerNewEdgeMap(std::string newmapname) |
88 void MapWin::registerNewEdgeMap(std::string newmapname) |
295 { |
89 { |
296 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
90 for(int i=0;i<EDGE_PROPERTY_NUM;i++) |
297 { |
91 { |
298 //filling in combo box with choices |
92 //filling in combo box with choices |
299 std::list<Glib::ustring> listStrings=e_combo_array[i].get_popdown_strings(); |
93 e_combo_array[i]->append_text((Glib::ustring)newmapname); |
300 listStrings.push_back(newmapname); |
|
301 e_combo_array[i].set_popdown_strings(listStrings); |
|
302 } |
94 } |
303 //setting text property for the new map |
95 //setting text property for the new map |
304 Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry(); |
96 e_combo_array[N_TEXT]->set_active_text((Glib::ustring)newmapname); |
305 entry->set_text((Glib::ustring)newmapname); |
|
306 } |
97 } |
307 |
98 |
308 void MapWin::registerNewNodeMap(std::string newmapname) |
99 void MapWin::registerNewNodeMap(std::string newmapname) |
309 { |
100 { |
310 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
101 for(int i=0;i<NODE_PROPERTY_NUM;i++) |
311 { |
102 { |
312 //filling in combo box with choices |
103 //filling in combo box with choices |
313 std::list<Glib::ustring> listStrings=n_combo_array[i].get_popdown_strings(); |
104 e_combo_array[i]->append_text((Glib::ustring)newmapname); |
314 listStrings.push_back(newmapname); |
|
315 n_combo_array[i].set_popdown_strings(listStrings); |
|
316 } |
105 } |
317 //setting text property for the new map |
106 //setting text property for the new map |
318 Gtk::Entry* entry = n_combo_array[N_TEXT].get_entry(); |
107 n_combo_array[N_TEXT]->set_active_text((Glib::ustring)newmapname); |
319 entry->set_text((Glib::ustring)newmapname); |
|
320 } |
108 } |