main_win.cc
branchgui
changeset 106 853dd852abc7
parent 104 623ae8ed0877
child 107 b1be10a9a2b6
equal deleted inserted replaced
31:ede4a1265fa6 32:ac631744b7ff
   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)
   304       if(size==1)
   307       if(size==1)
   305 	{
   308 	{
   306 	  active_tab=-1;
   309 	  active_tab=-1;
   307 	}
   310 	}
   308 
   311 
   309       updateAlgoWins();
   312       updateAlgoWinTabs();
   310     }
   313     }
   311 }
   314 }
   312 
   315 
   313 void MainWin::onChangeTab(GtkNotebookPage* page, guint page_num)
   316 void MainWin::onChangeTab(GtkNotebookPage* page, guint page_num)
   314 {
   317 {
   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);