public virtual bool HighlightOption(int x, int y) { if (SelectedOption?.SubMenu != null && SelectedOption.SubMenu.HighlightOption(x, y)) { } else if (x >= MenuBox.Left && x <= MenuBox.Right && y >= MenuBox.Top && y <= MenuBox.Bottom && Options.Count > 0) { SelectedOption = Options[(y - MenuBox.Top - 1) / OptionHeight]; } else { SelectedOption = null; } Map.Invalidate(); if (SelectedOption != null) { return(true); } return(false); }
public virtual void Draw(Graphics g) { if (MenuBox.Right > Map.Right) { MenuBox.X -= MenuBox.Width; } using (SolidBrush shadowBrush = new SolidBrush(Color.FromArgb(100, Color.Black))) { g.FillRectangle(shadowBrush, MenuBox.X + 3, MenuBox.Y + 3, MenuBox.Width, MenuBox.Height); } using (SolidBrush menuBrush = new SolidBrush(MenuColor)) { g.FillRectangle(menuBrush, MenuBox); } using (Pen shadowPen = new Pen(Color.FromArgb(100, Color.Black))) { g.DrawLine(shadowPen, MenuBox.Left, MenuBox.Top, MenuBox.Left, MenuBox.Bottom); g.DrawLine(shadowPen, MenuBox.Left, MenuBox.Top, MenuBox.Right, MenuBox.Top); } foreach (MapMenuOption option in Options) { int optionYPosition = MenuBox.Y + OptionHeight * Options.IndexOf(option); if (option == SelectedOption && option.Selectable) { using (SolidBrush invertMenu = new SolidBrush(FontColor)) { g.FillRectangle(invertMenu, MenuBox.X, optionYPosition, MenuBox.Width, OptionHeight); } using (Font menuFont = new Font(FontFamily, FontSize)) using (SolidBrush invertFont = new SolidBrush(MenuColor)) { g.DrawString(option.Text, menuFont, invertFont, MenuBox.X + XBuffer, optionYPosition); } } else { if (option.Toggled) { using (SolidBrush toggleBrush = new SolidBrush(ToggleColor)) { g.FillRectangle(toggleBrush, MenuBox.X, optionYPosition, MenuBox.Width, OptionHeight); } } using (Font menuFont = new Font(FontFamily, FontSize)) using (SolidBrush fontBrush = new SolidBrush(FontColor)) { g.DrawString(option.Text, menuFont, fontBrush, MenuBox.X + XBuffer, optionYPosition); } } if (option.SubMenu != null) { using (AdjustableArrowCap subArrow = new AdjustableArrowCap(OptionHeight - 12, 3)) using (Pen arrowPen = new Pen(FontColor)) { arrowPen.CustomEndCap = subArrow; if (option == SelectedOption) { arrowPen.Color = MenuColor; } g.SmoothingMode = SmoothingMode.AntiAlias; g.DrawLine(arrowPen, MenuBox.Right - subArrow.Height - 2, optionYPosition + OptionHeight / 2, MenuBox.Right - 2, optionYPosition + OptionHeight / 2); } } } MapMenuOption autoShowSubMenu = null; if (Options.Count(option => option.OptionObject.GetType() == typeof(Battle)) == 1) { autoShowSubMenu = Options.First(option => option.OptionObject.GetType() == typeof(Battle)); } else if (Options.Count(option => option.OptionObject.GetType() == typeof(List <Battle>)) > 0) { autoShowSubMenu = Options.First(option => option.OptionObject.GetType() == typeof(List <Battle>)); } else if (Options.Count(option1 => option1.OptionObject.GetType() == typeof(Site)) == 1) { autoShowSubMenu = Options.First(option1 => option1.OptionObject.GetType() == typeof(Site)); } else if (Options.Count(option1 => option1.OptionObject.GetType() == typeof(War)) == 1) { autoShowSubMenu = Options.First(option1 => option1.OptionObject.GetType() == typeof(War)); } foreach (MapMenuOption option in Options) { int optionYPosition = MenuBox.Y + OptionHeight * Options.IndexOf(option); if (option.SubMenu != null) { if (option == SelectedOption || !Open && (option == autoShowSubMenu || Options.Count == 1)) { option.SubMenu.MenuBox.Location = new Point(MenuBox.Right, optionYPosition); if (option.SubMenu.MenuBox.Right > Map.Right) { option.SubMenu.MenuBox.X = MenuBox.X - option.SubMenu.MenuBox.Width; } option.SubMenu.Draw(g); } } } }