Alpar had the key, focus can be set in the window class. But it is not enough, the focused widget has to be activated, as well! Was a hard task to find out... By the way, two compilation warnings are removed.
4 bool MapWin::closeIfEscapeIsPressed(GdkEventKey* e)
6 if(e->keyval==GDK_Escape)
13 MapWin::MapWin(const std::string& title, MapStorage & mapst, GraphDisplayerCanvas & grdispc):gdc(grdispc),ms(mapst)
16 set_default_size(200, 50);
18 signal_key_press_event().connect(sigc::mem_fun(*this, &MapWin::closeIfEscapeIsPressed));
20 e_combo_array=new Gtk::Combo [EDGE_PROPERTY_NUM];
22 table=new Gtk::Table(EDGE_PROPERTY_NUM, 2, false);
24 for(int i=0;i<EDGE_PROPERTY_NUM;i++)
26 //filling in combo box with choices
27 std::list<Glib::ustring> listStrings;
29 listStrings.push_back("Default");
31 std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
32 for(;emsi!=ms.endOfEdgeMaps();emsi++)
34 listStrings.push_back(emsi->first);
37 e_combo_array[i].set_popdown_strings(listStrings);
39 //Restrict it to these choices only:
40 e_combo_array[i].set_value_in_list();
42 //binding signal to the actual entry
43 e_combo_array[i].get_entry()->signal_changed().connect
47 sigc::mem_fun(*this, &MapWin::eComboChanged),
52 //placing actual entry in the right place
55 label->set_text(edge_property_strings[i]);
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);
63 vbox.pack_start(*(new Gtk::Label("Edge properties")));
65 vbox.pack_start(*table);
67 vbox.pack_start(*(new Gtk::HSeparator));
69 n_combo_array=new Gtk::Combo [NODE_PROPERTY_NUM];
71 table=new Gtk::Table(NODE_PROPERTY_NUM, 2, false);
73 for(int i=0;i<NODE_PROPERTY_NUM;i++)
75 //filling in combo box with choices
76 std::list<Glib::ustring> listStrings;
78 listStrings.push_back("Default");
80 std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
82 for(;emsi!=ms.endOfNodeMaps();emsi++)
84 listStrings.push_back(emsi->first);
87 n_combo_array[i].set_popdown_strings(listStrings);
89 //Restrict it to these choices only:
90 n_combo_array[i].set_value_in_list();
92 //binding signal to thew actual entry
93 n_combo_array[i].get_entry()->signal_changed().connect
97 sigc::mem_fun(*this, &MapWin::nComboChanged),
102 //placing actual entry in the right place
104 label=new Gtk::Label;
105 label->set_text(node_property_strings[i]);
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);
115 vbox.pack_start(*(new Gtk::Label("Node properties")));
117 vbox.pack_start(*table);
123 void MapWin::update()
125 for(int i=0;i<EDGE_PROPERTY_NUM;i++)
127 //filling in combo box with choices
128 std::list<Glib::ustring> listStrings;
130 listStrings.push_back("Default");
132 std::map< std::string,Graph::EdgeMap<double> * >::iterator emsi=ms.beginOfEdgeMaps();
133 for(;emsi!=ms.endOfEdgeMaps();emsi++)
135 listStrings.push_back(emsi->first);
138 e_combo_array[i].set_popdown_strings(listStrings);
140 for(int i=0;i<NODE_PROPERTY_NUM;i++)
142 //filling in combo box with choices
143 std::list<Glib::ustring> listStrings;
145 listStrings.push_back("Default");
147 std::map< std::string,Graph::NodeMap<double> * >::iterator emsi=ms.beginOfNodeMaps();
149 for(;emsi!=ms.endOfNodeMaps();emsi++)
151 listStrings.push_back(emsi->first);
154 n_combo_array[i].set_popdown_strings(listStrings);
158 void MapWin::eComboChanged(int prop)
161 Gtk::Entry* entry = e_combo_array[prop].get_entry();
165 Glib::ustring mapname = entry->get_text();
166 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
168 if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
173 gdc.changeEdgeWidth(mapname);
176 gdc.changeEdgeColor(mapname);
179 gdc.changeEdgeText(mapname);
182 std::cerr<<"Error\n";
189 void MapWin::nComboChanged(int prop)
192 Gtk::Entry* entry = n_combo_array[prop].get_entry();
196 Glib::ustring mapname = entry->get_text();
197 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
199 if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
204 gdc.changeNodeRadius(mapname);
207 gdc.changeNodeColor(mapname);
210 gdc.changeNodeText(mapname);
213 std::cerr<<"Error\n";
220 void MapWin::updateNode(Graph::Node node)
222 for(int i=0;i<NODE_PROPERTY_NUM;i++)
224 Gtk::Entry* entry = n_combo_array[i].get_entry();
228 Glib::ustring mapname = entry->get_text();
229 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
231 if( ( (ms.nodemap_storage).find(mapname) != (ms.nodemap_storage).end() ) || (mapname=="Default") )
236 gdc.changeNodeRadius(mapname, node);
239 gdc.changeNodeColor(mapname, node);
242 gdc.changeNodeText(mapname, node);
245 std::cerr<<"Error\n";
253 void MapWin::updateEdge(Graph::Edge edge)
255 for(int i=0;i<EDGE_PROPERTY_NUM;i++)
258 Gtk::Entry* entry = e_combo_array[i].get_entry();
262 Glib::ustring mapname = entry->get_text();
263 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
266 if( ( (ms.edgemap_storage).find(mapname) != (ms.edgemap_storage).end() ) || (mapname=="Default") )
271 gdc.changeEdgeWidth(mapname, edge);
274 gdc.changeEdgeColor(mapname, edge);
277 gdc.changeEdgeText(mapname, edge);
280 std::cerr<<"Error\n";
288 void MapWin::registerNewEdgeMap(std::string newmapname)
290 for(int i=0;i<EDGE_PROPERTY_NUM;i++)
292 //filling in combo box with choices
293 std::list<Glib::ustring> listStrings=e_combo_array[i].get_popdown_strings();
294 listStrings.push_back(newmapname);
295 e_combo_array[i].set_popdown_strings(listStrings);
297 //setting text property for the new map
298 Gtk::Entry* entry = e_combo_array[E_TEXT].get_entry();
299 entry->set_text((Glib::ustring)newmapname);
302 void MapWin::registerNewNodeMap(std::string newmapname)
304 for(int i=0;i<NODE_PROPERTY_NUM;i++)
306 //filling in combo box with choices
307 std::list<Glib::ustring> listStrings=n_combo_array[i].get_popdown_strings();
308 listStrings.push_back(newmapname);
309 n_combo_array[i].set_popdown_strings(listStrings);
311 //setting text property for the new map
312 Gtk::Entry* entry = n_combo_array[N_TEXT].get_entry();
313 entry->set_text((Glib::ustring)newmapname);