/// <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); } }
/// <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); } }
/// <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);
/// <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); }
/// <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; } }