RS::Bundle::Bundle(Main &main, OCamlBinding &ocaml)
	: tiles(make_tiles())
	, act(WIN_SIZEVI)
{
	ftui::Activity			&act = this->act;
	auto					pushFun =
		[&](std::string const &fname, lua_CFunction f)
		{ act.registerLuaCFun_table("ResultState", fname, f); };
	std::ifstream			is("res/layout/result_state.xml");

	act.inflate(is);
	main.loadSharedScripts(act);
	luaL_dostring(act.getLuaState()
				  , "ResultState = {}; GridColor = 0x0000FF;");
	pushFun("tagForLeave", &tagForLeaveG);
	this->act.fireEvent("ON_GAME_LOADED");
	return ;
}
PS::Bundle::Bundle(Main &main, OCamlBinding &ocaml)
	: tiles(make_tiles())
	, act(WIN_SIZEVI)
	, selectedId(0)
	, grids({Grid::def})
{
	ftui::Activity			&act = this->act;
	auto					pushFun =
		[&](std::string const &fname, lua_CFunction f)
		{ act.registerLuaCFun_table("PickState", fname, f); };
	std::ifstream			is("res/layout/pick_state.xml");
	Grid					*gr;

	act.inflate(is);
	main.loadSharedScripts(act);
	luaL_dostring(act.getLuaState()
				  , "PickState = {}; GridColor = 0x0000FF;");
	pushFun("selectGrid", &selectGridG);
	pushFun("deleteGrid", &deleteGridG);

	pushFun("pushRandomGrid", &pushRandomGridG);

	pushFun("getNumGrids", &getNumGridsG);
	pushFun("getGridName", &getGridNameG);
	pushFun("getGrid", &getGridG);
	pushFun("getMainGridId", &getMainGridIdG);

	pushFun("useDefaultGrid", &useDefaultGridG);
	pushFun("setAlgorithmId", &setAlgorithmIdG);
	pushFun("setHeuristicId", &setHeuristicIdG);
	pushFun("setCost", &setCostG);
	pushFun("tagForSolving", &tagForSolvingG);
	for (auto const &fileName : main.files)
	{
		this->grids.emplace_back(fileName);
		gr = &this->grids[this->grids.size() - 1];
		gr->convert(ocaml.transposition_toabstract(gr->getSize()));
	}
	// this->act.fireEvent("GRID_LIST_UPDATE", this->extractGridNames()
	// 					, this->grids.size());
	this->act.fireEvent("ON_GAME_LOADED");
	return ;
}