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