internal void OpenMenu(int index, int sIndex = -1, MenuBarItem subMenu = null) { isMenuOpening = true; OnOpenMenu?.Invoke(this, null); int pos = 0; switch (subMenu) { case null: lastFocused = lastFocused ?? SuperView.MostFocused; if (openSubMenu != null) { CloseMenu(false, true); } if (openMenu != null) { SuperView.Remove(openMenu); } for (int i = 0; i < index; i++) { pos += Menus [i].Title.Length + 2; } openMenu = new Menu(this, pos, 1, Menus [index]); openCurrentMenu = openMenu; openCurrentMenu.previousSubFocused = openMenu; SuperView.Add(openMenu); SuperView.SetFocus(openMenu); break; default: if (openSubMenu == null) { openSubMenu = new List <Menu> (); } if (sIndex > -1) { RemoveSubMenu(sIndex); } else { var last = openSubMenu.Count > 0 ? openSubMenu.Last() : openMenu; openCurrentMenu = new Menu(this, last.Frame.Left + last.Frame.Width, last.Frame.Top + 1 + last.current, subMenu); openCurrentMenu.previousSubFocused = last.previousSubFocused; openSubMenu.Add(openCurrentMenu); SuperView.Add(openCurrentMenu); } selectedSub = openSubMenu.Count - 1; SuperView?.SetFocus(openCurrentMenu); break; } isMenuOpening = false; isMenuClosed = false; MenuOpen = true; }
void OpenMenu(int index) { if (openMenu != null) { SuperView.Remove(openMenu); } int pos = 0; for (int i = 0; i < index; i++) { pos += Menus [i].Title.Length + 3; } openMenu = new Menu(this, pos, 1, Menus [index]); SuperView.Add(openMenu); SuperView.SetFocus(openMenu); }