// parse a game file and choose a game (which can be changed later) // TODO: refactor back into compiler PolyGame CreateMenuModel() { if (_input == null) { if (!File.Exists(SourcePath)) { throw Error.Fatal("file does not exist: " + SourcePath); } _input = new StreamReader(SourcePath); } var parser = Parser.Create(); var nodes = parser.ParseNodes(_input, Console.Out, SourcePath).ToList(); _input.Close(); if (parser.Error) { throw Error.Fatal("compilation terminated"); } var generator = Generator.Create(); var compiler = Compiler.Create(SourcePath, generator, parser.Symbols); compiler.CompileMenu(nodes); var evaluator = Evaluator.Create(Console.Out, Console.In); var start = StartCode.Create(evaluator, generator.Code); if (Logger.Level >= 4) { generator.Decode(Logger.Out); } var menudef = start.CreateMenu(); _menumodel = MenuModel.Create(menudef); if (_gamedefs.Count == 0) { throw Error.Fatal("no games found"); } //if (Logger.Level >= 3) _menudef.Dump(Logger.Out); return(this); }
public void OnActionExecuted(ActionExecutedContext filterContext) { //skip requests (json) without a model if (filterContext.Controller.ViewData.Model == null) { return; } var actionName = filterContext.ActionDescriptor.ActionName; if (actionName == "Index") { return; } var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; var controller = filterContext.Controller as RestrictedControllerBase; MenuModel menu = MenuModel.Create(controller.ViewData.Model, controllerName, actionName, controller.SecurityToken.RoleName); menu.BuildMenus(); controller.ViewBag.Menu = menu; }