hegyi@1876: #include hegyi@1876: hegyi@1876: enum {N_DEMO1, N_DEMO2, NODE_INPUT_NUM}; // input IDs for nodes; hegyi@1876: enum {E_DEMO1, EDGE_INPUT_NUM}; // input IDs for edges; hegyi@1876: hegyi@1878: AlgoBox::AlgoBox(std::vector tabnames) hegyi@1876: { hegyi@1878: init(tabnames); hegyi@1876: } hegyi@1876: hegyi@1878: void AlgoBox::init(std::vector tabnames) hegyi@1876: { hegyi@1876: set_spacing(5); hegyi@1876: hegyi@1876: update_tablist(tabnames); hegyi@1876: hegyi@1876: //if active tab is changed, the map names in cbt/s have to be updated hegyi@1876: tabcbt.signal_changed().connect(sigc::mem_fun(*this, &AlgoBox::emit_tab_change)); hegyi@1876: hegyi@1876: pack_start(tabcbt); hegyi@1876: build_box(); hegyi@1876: hegyi@1876: show_all_children(); hegyi@1876: }; hegyi@1876: hegyi@1876: void AlgoBox::update_cbt(std::vector< std::string > stringlist, Gtk::ComboBoxText & cbt) hegyi@1876: { hegyi@1876: std::string actname=cbt.get_active_text(); hegyi@1876: int prev_act=-1; hegyi@1876: hegyi@1876: cbt.clear(); hegyi@1876: int actptr=0; hegyi@1876: hegyi@1876: std::vector< std::string >::iterator emsi=stringlist.begin(); hegyi@1876: for(;emsi!=stringlist.end();emsi++) hegyi@1876: { hegyi@1876: if(actname==*emsi) hegyi@1876: { hegyi@1876: prev_act=actptr; hegyi@1876: } hegyi@1876: hegyi@1876: cbt.append_text(*emsi); hegyi@1876: actptr++; hegyi@1876: } hegyi@1876: hegyi@1876: if(prev_act!=-1) hegyi@1876: { hegyi@1876: cbt.set_active(prev_act); hegyi@1876: } hegyi@1876: else if(actptr>0) //so there is item in the list hegyi@1876: { hegyi@1878: //cbt.set_active(0); hegyi@1876: } hegyi@1876: } hegyi@1876: hegyi@1876: void AlgoBox::update_tablist( std::vector< std::string > tl ) hegyi@1876: { hegyi@1876: update_cbt(tl, tabcbt); hegyi@1876: emit_tab_change(); hegyi@1876: } hegyi@1876: hegyi@1879: void AlgoBox::update_maplist(MapStorage * ms) hegyi@1876: { hegyi@1879: mapstorage=ms; hegyi@1878: std::vector nml; hegyi@1878: std::vector eml; hegyi@1878: if(mapstorage!=NULL) hegyi@1878: { hegyi@1878: mapstorage->signal_node_map_ch().connect(sigc::mem_fun(*this, &AlgoBox::nodemaplist_changed)); hegyi@1878: mapstorage->signal_edge_map_ch().connect(sigc::mem_fun(*this, &AlgoBox::edgemaplist_changed)); hegyi@1878: nml=mapstorage->getNodeMapList(); hegyi@1879: eml=mapstorage->getEdgeMapList(); hegyi@1878: } hegyi@1876: for(int i=0;i<(int)nodemapcbts.size();i++) hegyi@1876: { hegyi@1876: update_cbt(nml, *(nodemapcbts[i])); hegyi@1876: } hegyi@1876: for(int i=0;i<(int)edgemapcbts.size();i++) hegyi@1876: { hegyi@1876: update_cbt(eml, *(edgemapcbts[i])); hegyi@1876: } hegyi@1876: } hegyi@1876: hegyi@1878: void AlgoBox::nodemaplist_changed(std::string newmap) hegyi@1878: { hegyi@1878: for(int i=0;i<(int)nodemapcbts.size();i++) hegyi@1878: { hegyi@1878: (nodemapcbts[i])->append_text(newmap); hegyi@1878: } hegyi@1878: } hegyi@1878: hegyi@1878: void AlgoBox::edgemaplist_changed(std::string newmap) hegyi@1878: { hegyi@1878: for(int i=0;i<(int)edgemapcbts.size();i++) hegyi@1878: { hegyi@1878: (edgemapcbts[i])->append_text(newmap); hegyi@1878: } hegyi@1878: } hegyi@1878: hegyi@1876: void AlgoBox::run() hegyi@1876: { hegyi@1876: std::cout << "Start algorithm." << std::endl; hegyi@1876: } hegyi@1876: hegyi@1876: void AlgoBox::build_box() hegyi@1876: { hegyi@1876: pack_start(*(new Gtk::HSeparator())); hegyi@1876: hegyi@1876: label=new Gtk::Label("Specific part for each algorithm."); hegyi@1876: hegyi@1876: pack_start(*label); hegyi@1876: pack_start(*(new Gtk::HSeparator())); hegyi@1876: hegyi@1876: label=new Gtk::Label("Maps in chosen tab:"); hegyi@1876: hegyi@1876: pack_start(*label); hegyi@1876: hegyi@1876: nodemapcbts.resize(NODE_INPUT_NUM); hegyi@1876: for(int i=0;i<(int)nodemapcbts.size();i++) hegyi@1876: { hegyi@1876: Gtk::HBox * hbox=new Gtk::HBox(); hegyi@1876: hegyi@1876: std::ostringstream o; hegyi@1876: o << "NodeInput " << i+1 << ":"; hegyi@1876: label=new Gtk::Label(o.str()); hegyi@1876: hegyi@1876: nodemapcbts[i]=new Gtk::ComboBoxText(); hegyi@1876: hegyi@1876: hbox->pack_start(*label); hegyi@1876: hbox->pack_start(*(nodemapcbts[i])); hegyi@1876: pack_start(*hbox); hegyi@1876: } hegyi@1876: hegyi@1876: pack_start(*(new Gtk::HSeparator())); hegyi@1876: hegyi@1876: edgemapcbts.resize(EDGE_INPUT_NUM); hegyi@1876: for(int i=0;i<(int)edgemapcbts.size();i++) hegyi@1876: { hegyi@1876: Gtk::HBox * hbox=new Gtk::HBox(); hegyi@1876: hegyi@1876: std::ostringstream o; hegyi@1876: o << "EdgeInput " << i+1 << ":"; hegyi@1876: label=new Gtk::Label(o.str()); hegyi@1876: hegyi@1876: edgemapcbts[i]=new Gtk::ComboBoxText(); hegyi@1876: hegyi@1876: hbox->pack_start(*label); hegyi@1876: hbox->pack_start(*(edgemapcbts[i])); hegyi@1876: pack_start(*hbox); hegyi@1876: } hegyi@1876: hegyi@1876: pack_start(*(new Gtk::HSeparator())); hegyi@1876: } hegyi@1876: hegyi@1876: sigc::signal AlgoBox::signal_maplist_needed() hegyi@1876: { hegyi@1876: return signal_maplist_need; hegyi@1876: } hegyi@1876: hegyi@1876: void AlgoBox::emit_tab_change() hegyi@1876: { hegyi@1878: std::string active_tab=tabcbt.get_active_text(); hegyi@1878: if(active_tab!="") hegyi@1878: { hegyi@1878: signal_maplist_need.emit(active_tab); hegyi@1878: } hegyi@1878: else hegyi@1878: { hegyi@1878: std::vector empty_vector; hegyi@1878: update_maplist(NULL); hegyi@1878: } hegyi@1876: }