hegyi@1876: #include <kruskalbox.h>
hegyi@1876: 
hegyi@1879: enum {INPUT, OUTPUT, MAP_NUM};
hegyi@1879: 
hegyi@1878: KruskalBox::KruskalBox(std::vector<std::string> t):AlgoBox()
hegyi@1876: {
hegyi@1878:   init(t);
hegyi@1876: }
hegyi@1876:     
hegyi@1876: void KruskalBox::run()
hegyi@1876: {
hegyi@1884:   if(
hegyi@1884:      tabcbt.get_active_text()!="" &&
hegyi@1884:      (edgemapcbts[INPUT])->get_active_text()!="" &&
hegyi@1884:      (edgemapcbts[OUTPUT])->get_active_text()!=""
hegyi@1884:      )
hegyi@1884:     {
hegyi@1879: 
hegyi@1884:       Graph g=mapstorage->graph;
hegyi@1884:       Graph::EdgeMap<double> * inputmap=
hegyi@1884: 	((mapstorage->edgemap_storage)[(edgemapcbts[INPUT])->get_active_text()]);
hegyi@1884:       Graph::EdgeMap<bool> outputmap(g);
hegyi@1884:       double res=kruskal(g, *inputmap, outputmap);
hegyi@1879: 
hegyi@1884:       for (EdgeIt i(g); i!=INVALID; ++i)
hegyi@1884: 	{
hegyi@1884: 	  if(outputmap[i])
hegyi@1884: 	    {
hegyi@1884: 	      (*((mapstorage->edgemap_storage)[(edgemapcbts[OUTPUT])->
hegyi@1884: 					       get_active_text()]))[i]=1;
hegyi@1884: 	    }
hegyi@1884: 	  else
hegyi@1884: 	    {
hegyi@1884: 	      (*((mapstorage->edgemap_storage)[(edgemapcbts[OUTPUT])->
hegyi@1884: 					       get_active_text()]))[i]=0;
hegyi@1884: 	    }
hegyi@1884: 	}
hegyi@1881: 
hegyi@1884:       std::ostringstream o;
hegyi@1884:       o << "Result: " << res;
hegyi@1884:       resultlabel.set_text(o.str());
hegyi@1884: 
hegyi@1884:       mapstorage->mapChanged(true, (edgemapcbts[OUTPUT])->get_active_text());
hegyi@1884:       //   mapstorage->changeActiveMap(true, E_COLOR,
hegyi@1884:       // 			      (edgemapcbts[OUTPUT])->get_active_text());
hegyi@1884:       //   mapstorage->changeActiveMap(true, E_TEXT,
hegyi@1884:       // 			      (edgemapcbts[INPUT])->get_active_text());
alpar@1880:   
hegyi@1884:     }
hegyi@1876: }
hegyi@1876:     
hegyi@1876: void KruskalBox::build_box()
hegyi@1876: {
hegyi@1884:   std::vector<std::string> empty_vector;
hegyi@1884: 
hegyi@1879:   edgemapcbts.resize(MAP_NUM);
hegyi@1876: 
hegyi@1884:   edgemapcbts[0]=new MapSelector(empty_vector,"","Edgecosts: ",true, false);
hegyi@1884:   edgemapcbts[0]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &AlgoBox::emit_new_map_signal));
hegyi@1879: 
hegyi@1884:   pack_start(*(edgemapcbts[INPUT]));
hegyi@1876: 
hegyi@1884:   edgemapcbts[1]=new MapSelector(empty_vector,"","Edges of tree here: ",true, false);
hegyi@1884:   edgemapcbts[1]->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &AlgoBox::emit_new_map_signal));
hegyi@1876: 
hegyi@1884:   pack_start(*(edgemapcbts[OUTPUT]));
hegyi@1879: 
hegyi@1879:   resultlabel.set_text("Result: algorithm is not run yet.");
hegyi@1879:   pack_start(resultlabel);
hegyi@1876: }