Пример #1
0
 /// <summary>
 ///     The send message.
 /// </summary>
 /// <param name="key">
 ///     The key.
 /// </param>
 /// <param name="message">
 ///     The message.
 /// </param>
 public static void SendMessage(uint key, Utils.WindowsMessages message)
 {
     foreach (var menu in RootMenus)
     {
         menu.Value.OnReceiveMessage(message, Game.MouseScreenPosition, key);
     }
 }
Пример #2
0
        /// <summary>
        ///     The on receive message.
        /// </summary>
        /// <param name="message">
        ///     The message.
        /// </param>
        /// <param name="cursorPos">
        ///     The cursor position.
        /// </param>
        /// <param name="menuItem">
        ///     The menu item.
        /// </param>
        public void OnReceiveMessage(Utils.WindowsMessages message, Vector2 cursorPos, MenuItem menuItem)
        {
            if (!MenuVariables.DragAndDropDictionary.ContainsKey(this.name))
            {
                MenuVariables.DragAndDropDictionary.Add(
                    this.name,
                    new DragAndDrop(MenuSettings.MenuItemHeight, this.itemList));
            }

            if (message == Utils.WindowsMessages.WM_LBUTTONDOWN)
            {
                MenuVariables.DragAndDropDictionary[this.name].LeftButtonDown(cursorPos);
                return;
            }

            if (message == Utils.WindowsMessages.WM_LBUTTONUP)
            {
                MenuVariables.DragAndDropDictionary[this.name].LeftButtonUp(cursorPos, menuItem);
            }
        }
Пример #3
0
 /// <summary>
 ///     The on receive message.
 /// </summary>
 /// <param name="message">
 ///     The message.
 /// </param>
 /// <param name="cursorPos">
 ///     The cursor position.
 /// </param>
 /// <param name="key">
 ///     The key.
 /// </param>
 /// <param name="args">
 ///     The args.
 /// </param>
 protected abstract void OnReceiveMessage(
     Utils.WindowsMessages message,
     Vector2 cursorPos,
     uint key,
     WndEventArgs args = null);
Пример #4
0
        /// <summary>
        ///     The on receive message.
        /// </summary>
        /// <param name="message">
        ///     The message.
        /// </param>
        /// <param name="cursorPos">
        ///     The cursor position.
        /// </param>
        /// <param name="key">
        ///     The key.
        /// </param>
        /// <param name="draggableItems">
        ///     The Items.
        /// </param>
        /// <param name="args">
        ///     The args.
        /// </param>
        protected void DraggableOnReceiveMessage(
            Utils.WindowsMessages message,
            Vector2 cursorPos,
            uint key,
            List <DraggableItem> draggableItems,
            WndEventArgs args = null)
        {
            if (!this.IsInside(cursorPos) && !this.BeingDragged)
            {
                this.OnReceiveMessage(message, cursorPos, key, args);
                return;
            }

            if (!this.BeingDragged && message == Utils.WindowsMessages.WM_MOUSEMOVE &&
                cursorPos.Distance(this.lastClickMousePosition) > 1 &&
                Math.Abs(cursorPos.Y - this.lastClickMousePosition.Y) > 5)
            {
                if (this.leftButtonDown && !this.ResizeTransition.Moving)
                {
                    this.PrepareDraggedIcon();
                    return;
                }
            }

            if (this.BeingDragged && message == Utils.WindowsMessages.WM_MOUSEMOVE)
            {
                foreach (var draggableItem in
                         draggableItems.Where(
                             draggableItem => !draggableItem.BeingDragged && !draggableItem.DragTransition.Moving))
                {
                    if (cursorPos.Y < draggableItem.RealPosition.Y + draggableItem.Height &&
                        draggableItem.OrderNumber == this.OrderNumber - 1)
                    {
                        draggableItem.DragTransition.Start(draggableItem.RealPosition, this.RealPosition);
                        this.OrderNumber--;
                        draggableItem.OrderNumber++;
                        break;
                    }

                    if (!(cursorPos.Y > draggableItem.RealPosition.Y) ||
                        draggableItem.OrderNumber != this.OrderNumber + 1)
                    {
                        continue;
                    }

                    draggableItem.DragTransition.Start(draggableItem.RealPosition, this.RealPosition);
                    this.OrderNumber++;
                    draggableItem.OrderNumber--;
                    break;
                }
            }

            if (!this.dragAndDropSleeper.Sleeping && message == Utils.WindowsMessages.WM_LBUTTONDOWN)
            {
                this.leftButtonDown = true;
                this.dragAndDropSleeper.Sleep(200);
                this.lastClickMousePosition = cursorPos;
                DelayAction.Add(
                    200,
                    () =>
                {
                    if (!this.BeingDragged && this.leftButtonDown)
                    {
                        this.PrepareDraggedIcon();
                    }
                });
            }

            if (message != Utils.WindowsMessages.WM_LBUTTONUP)
            {
                return;
            }

            this.leftButtonDown = false;
            if (this.BeingDragged)
            {
                this.DragTransition.Start(this.Position, this.RealPosition);
                this.ResizeBack();
                this.BeingDragged = false;
                return;
            }

            if (!this.dragAndDropSleeper.Sleeping)
            {
                return;
            }

            this.OnReceiveMessage(message, cursorPos, key, args);
        }
Пример #5
0
        /// <summary>
        ///     The on receive message.
        /// </summary>
        /// <param name="message">
        ///     The message.
        /// </param>
        /// <param name="cursorPos">
        ///     The cursor position.
        /// </param>
        /// <param name="key">
        ///     The key.
        /// </param>
        /// <param name="args">
        ///     The args.
        /// </param>
        protected override void OnReceiveMessage(
            Utils.WindowsMessages message,
            Vector2 cursorPos,
            uint key,
            WndEventArgs args = null)
        {
            // Spread the message to the menu's children recursively
            foreach (var item in this.Items)
            {
                item.OnReceiveMessage(message, cursorPos, key, args);

                // Console.WriteLine(args != null && item.IsInside(cursorPos));
            }

            foreach (var child in this.Children)
            {
                child.OnReceiveMessage(message, cursorPos, key, args);
            }

            if (!this.Visible || Config.DisableDrawings)
            {
                return;
            }

            if (message != Utils.WindowsMessages.WM_LBUTTONUP)
            {
                return;
            }

            if (this.IsRootMenu && this.Visible)
            {
                if (cursorPos.X - MenuSettings.BasePosition.X <= MenuSettings.MenuWidth + this.Height + 4)
                {
                    var n = (cursorPos.Y - MenuSettings.BasePosition.Y) / MenuSettings.MenuItemHeight;
                    if (n < 0)
                    {
                        return;
                    }

                    n = (int)n;
                    if (this.MenuCount != n)
                    {
                        foreach (var schild in this.Children)
                        {
                            schild.Visible = false;
                        }

                        foreach (var sitem in this.Items)
                        {
                            sitem.Visible = false;
                        }
                    }
                }
            }

            if (!this.IsInside(cursorPos))
            {
                return;
            }

            if (!this.IsRootMenu && this.Parent != null)
            {
                // Close all the submenus in the level
                foreach (var child in this.Parent.Children)
                {
                    if (child.Name == this.Name)
                    {
                        continue;
                    }

                    foreach (var schild in child.Children)
                    {
                        schild.Visible = false;
                    }

                    foreach (var sitem in child.Items)
                    {
                        sitem.Visible = false;
                    }
                }
            }

            // Hide or Show the submenus.
            foreach (var child in this.Children)
            {
                child.Visible = !child.Visible;
            }

            // Hide or Show the items.
            foreach (var item in this.Items)
            {
                item.Visible = !item.Visible;
            }
        }