Example #1
0
        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);
        }
Example #2
0
        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);
                    }
                }
            }
        }