102 sigc::mem_fun(*this, &MainWin::createMapWin)); |
102 sigc::mem_fun(*this, &MainWin::createMapWin)); |
103 |
103 |
104 ag->add( Gtk::Action::create("AlgoMenu", "_Algorithms") ); |
104 ag->add( Gtk::Action::create("AlgoMenu", "_Algorithms") ); |
105 ag->add( Gtk::Action::create("AlgoGeneral", "_General"), |
105 ag->add( Gtk::Action::create("AlgoGeneral", "_General"), |
106 sigc::bind( sigc::mem_fun ( *this, &MainWin::createAlgoWin ), 0) ); |
106 sigc::bind( sigc::mem_fun ( *this, &MainWin::createAlgoWin ), 0) ); |
|
107 ag->add( Gtk::Action::create("AlgoKruskal", "_Kruskal"), |
|
108 sigc::bind( sigc::mem_fun ( *this, &MainWin::createAlgoWin ), 1) ); |
107 |
109 |
108 Gtk::RadioAction::Group tool_group; |
110 Gtk::RadioAction::Group tool_group; |
109 ag->add( Gtk::RadioAction::create(tool_group, "MoveItem", Gtk::StockID("gd-move"), "Move"), |
111 ag->add( Gtk::RadioAction::create(tool_group, "MoveItem", Gtk::StockID("gd-move"), "Move"), |
110 sigc::bind( sigc::mem_fun ( *this, &MainWin::changeEditorialTool ), 0) ); |
112 sigc::bind( sigc::mem_fun ( *this, &MainWin::changeEditorialTool ), 0) ); |
111 ag->add( Gtk::RadioAction::create(tool_group, "CreateNode", Gtk::StockID("gd-addnode"), "Create node"), |
113 ag->add( Gtk::RadioAction::create(tool_group, "CreateNode", Gtk::StockID("gd-addnode"), "Create node"), |
151 " <menu action='ShowMenu'>" |
153 " <menu action='ShowMenu'>" |
152 " <menuitem action='ShowMaps'/>" |
154 " <menuitem action='ShowMaps'/>" |
153 " </menu>" |
155 " </menu>" |
154 " <menu action='AlgoMenu'>" |
156 " <menu action='AlgoMenu'>" |
155 " <menuitem action='AlgoGeneral'/>" |
157 " <menuitem action='AlgoGeneral'/>" |
|
158 " <menuitem action='AlgoKruskal'/>" |
156 " </menu>" |
159 " </menu>" |
157 " </menubar>" |
160 " </menubar>" |
158 " <toolbar name='ToolBar'>" |
161 " <toolbar name='ToolBar'>" |
159 " <toolitem action='FileNew' />" |
162 " <toolitem action='FileNew' />" |
160 " <toolitem action='FileOpen' />" |
163 " <toolitem action='FileOpen' />" |
222 o << strinst[name]; |
225 o << strinst[name]; |
223 tabnames[active_tab]=name+" - "+o.str(); |
226 tabnames[active_tab]=name+" - "+o.str(); |
224 } |
227 } |
225 set_title(tabnames[active_tab] + " - " + prog_name); |
228 set_title(tabnames[active_tab] + " - " + prog_name); |
226 notebook.set_tab_label_text((Widget&)*(tabs[active_tab]), tabnames[active_tab]); |
229 notebook.set_tab_label_text((Widget&)*(tabs[active_tab]), tabnames[active_tab]); |
227 updateAlgoWins(); |
230 updateAlgoWinTabs(); |
228 } |
231 } |
229 |
232 |
230 void MainWin::readFile(const std::string & filename) |
233 void MainWin::readFile(const std::string & filename) |
231 { |
234 { |
232 newTab(); |
235 newTab(); |
244 tabs[active_tab]->signal_newmap_needed().connect(sigc::mem_fun(*this, &MainWin::createNewMapWinAfterSignal)); |
247 tabs[active_tab]->signal_newmap_needed().connect(sigc::mem_fun(*this, &MainWin::createNewMapWinAfterSignal)); |
245 tabs[active_tab]->gd_canvas->changeEditorialTool(active_tool); |
248 tabs[active_tab]->gd_canvas->changeEditorialTool(active_tool); |
246 notebook.append_page((Gtk::Widget&)(*(tabs[active_tab]))); |
249 notebook.append_page((Gtk::Widget&)(*(tabs[active_tab]))); |
247 notebook.set_current_page(size); |
250 notebook.set_current_page(size); |
248 set_tabtitle("unsaved file"); |
251 set_tabtitle("unsaved file"); |
249 updateAlgoWins(); |
252 updateAlgoWinTabs(); |
250 } |
253 } |
251 |
254 |
252 void MainWin::closeTab() |
255 void MainWin::closeTab() |
253 { |
256 { |
254 if(active_tab!=-1) |
257 if(active_tab!=-1) |
402 } |
405 } |
403 } |
406 } |
404 |
407 |
405 void MainWin::createAlgoWin(int algoid) |
408 void MainWin::createAlgoWin(int algoid) |
406 { |
409 { |
407 AlgoWin * aw=new AlgoWin(algoid, tabnames); |
410 AlgoWin * aw=new AlgoWin(algoid, tabnames, tabs[0]->mapstorage.getNodeMapList(),tabs[0]->mapstorage.getEdgeMapList()); |
408 aw->signal_closing().connect(sigc::mem_fun(*this, &MainWin::deRegisterAlgoWin)); |
411 aw->signal_closing().connect(sigc::mem_fun(*this, &MainWin::deRegisterAlgoWin)); |
|
412 aw->signal_maplist_needed().connect(sigc::mem_fun(*this, &MainWin::updateAlgoWinMaps)); |
409 aws.insert(aw); |
413 aws.insert(aw); |
410 aw->show(); |
414 aw->show(); |
411 } |
415 } |
412 |
416 |
|
417 void MainWin::updateAlgoWinMaps(AlgoWin * awp, std::string tabname) |
|
418 { |
|
419 int i=0; |
|
420 for(;(i<(int)tabnames.size())&&(tabnames[i]!=tabname);i++) |
|
421 { |
|
422 } |
|
423 awp->update_maplist(tabs[i]->mapstorage.getNodeMapList(),tabs[i]->mapstorage.getEdgeMapList()); |
|
424 } |
|
425 |
413 void MainWin::deRegisterAlgoWin(AlgoWin * awp) |
426 void MainWin::deRegisterAlgoWin(AlgoWin * awp) |
414 { |
427 { |
415 aws.erase(awp); |
428 aws.erase(awp); |
416 } |
429 } |
417 |
430 |
418 void MainWin::updateAlgoWins() |
431 void MainWin::updateAlgoWinTabs() |
419 { |
432 { |
420 std::set< AlgoWin* >::iterator awsi=aws.begin(); |
433 std::set< AlgoWin* >::iterator awsi=aws.begin(); |
421 for(;awsi!=aws.end();awsi++) |
434 for(;awsi!=aws.end();awsi++) |
422 { |
435 { |
423 (*awsi)->update_tablist(tabnames); |
436 (*awsi)->update_tablist(tabnames); |