private static MenuResult getMenuCycleResult(int x, int y, MenuItem menuItem, bool isNewMenu) { x = Math.Min(x, ZConsoleMain.WindowSize.Width - menuItem.GetCalculatedWidth); y = Math.Min(y, ZConsoleMain.WindowSize.Height - menuItem.GetCalculatedHeight); menuStack.Push(new MenuWithCoords(x, y, menuItem)); var resultIndex = getMenuResult(x, y, menuItem, isNewMenu); var menuItemList = menuItem.ChildMenuItems; if (resultIndex >= 0) { var item = menuItemList[resultIndex]; if (!item.HasChilds) { while (menuStack.Count > 0) { var cMenu = menuStack.Pop(); hideMenu(cMenu.X, cMenu.Y, cMenu.Menu); } return new MenuResult(resultIndex, item.Caption); } return getMenuCycleResult(x + menuItem.GetCalculatedWidth, menuItem.GetYPosForMenuItem(y, resultIndex), item, true); } if (resultIndex == -1) { hideMenu(x, y, menuItem); menuStack.Pop(); if (menuItem.Parent != null) { var parentMenu = menuStack.Pop(); return getMenuCycleResult(parentMenu.X, parentMenu.Y, parentMenu.Menu, false); } return new MenuResult(resultIndex, string.Empty); } return null; }