ShowSubmenu() public méthode

public ShowSubmenu ( ) : void
Résultat void
        internal void RestoreStatus(ArrayList status, int index)
        {
            int pos = (int)status [index];

            if (pos >= menuItems.Count)
            {
                return;
            }

            ActionMenuItem item = (ActionMenuItem)menuItems [pos];

            if (index == status.Count - 1)
            {
                // The last position in the status is the selected item
                item.Select();
                if (item.Node.Action != null && item.Node.Action.Name.Length == 0)
                {
                    // Then only case when there can have an action when an empty name
                    // is when the user clicked on the "add action" link. In this case,
                    // start editing the item again
                    item.EditingDone += OnEditingDone;
                    item.StartEditing();
                }
            }
            else
            {
                item.ShowSubmenu();
                if (OpenSubmenu != null)
                {
                    OpenSubmenu.RestoreStatus(status, index + 1);
                }
            }
        }
Exemple #2
0
        protected override bool OnDragMotion(Gdk.DragContext context, int x, int y, uint time)
        {
            ActionPaletteItem dragItem = DND.DragWidget as ActionPaletteItem;

            if (dragItem == null)
            {
                return(false);
            }

            if (actionTree.Children.Count > 0)
            {
                ActionMenuItem item = LocateWidget(x, y);
                if (item != null)
                {
                    Widget wrapper = Widget.Lookup(this);

                    // Show the submenu to allow droping to it, but avoid
                    // droping a submenu inside itself
                    if (item.HasSubmenu && item.Node != dragItem.Node)
                    {
                        item.ShowSubmenu(wrapper.GetDesignArea(), item);
                    }

                    // Look for the index where to insert the new item
                    dropIndex = actionTree.Children.IndexOf(item.Node);
                    int mpos = item.Allocation.X + item.Allocation.Width / 2;
                    if (x > mpos)
                    {
                        dropIndex++;
                    }

                    // Calculate the drop position, used to show the drop bar
                    if (dropIndex == 0)
                    {
                        dropPosition = item.Allocation.X;
                    }
                    else if (dropIndex == menuItems.Count)
                    {
                        dropPosition = item.Allocation.Right;
                    }
                    else
                    {
                        item = (ActionMenuItem)menuItems [dropIndex];
                        ActionMenuItem prevItem = (ActionMenuItem)menuItems [dropIndex - 1];
                        dropPosition = prevItem.Allocation.Right + (item.Allocation.X - prevItem.Allocation.Right) / 2;
                    }
                }
            }
            else
            {
                dropIndex = 0;
            }

            QueueDraw();
            return(base.OnDragMotion(context, x, y, time));
        }
Exemple #3
0
        void OnItemKeyPress(object s, Gtk.KeyPressEventArgs args)
        {
            int            pos  = menuItems.IndexOf(s);
            ActionMenuItem item = (ActionMenuItem)s;

            switch (args.Event.Key)
            {
            case Gdk.Key.Left:
                if (pos > 0)
                {
                    ((ActionMenuItem)menuItems[pos - 1]).Select();
                }
                break;

            case Gdk.Key.Right:
                if (pos < menuItems.Count - 1)
                {
                    ((ActionMenuItem)menuItems[pos + 1]).Select();
                }
                else if (pos == menuItems.Count - 1)
                {
                    InsertAction(menuItems.Count);
                }
                break;

            case Gdk.Key.Down:
                if (item.HasSubmenu)
                {
                    item.ShowSubmenu();
                    if (openSubmenu != null)
                    {
                        openSubmenu.Select(null);
                    }
                }
                break;

            case Gdk.Key.Up:
                OpenSubmenu = null;
                break;
            }
            args.RetVal = true;
        }
Exemple #4
0
        public void DropMenu(ActionTreeNode node)
        {
            ActionMenuItem item = FindMenuItem(node);

            if (item != null)
            {
                if (item.HasSubmenu)
                {
                    item.ShowSubmenu();
                    if (openSubmenu != null)
                    {
                        openSubmenu.Select(null);
                    }
                }
                else
                {
                    item.Select();
                }
            }
        }
		void ProcessKey (ActionMenuItem item, Gdk.Key key, Gdk.ModifierType modifier)
		{
			int pos = menuItems.IndexOf (item);
			
			switch (key) {
				case Gdk.Key.Up:
					if (pos > 0)
						((ActionMenuItem)menuItems[pos - 1]).Select ();
					else if (parentMenu.Widget is ActionMenuBar) {
						ActionMenuBar bar = (ActionMenuBar) parentMenu.Widget;
						bar.Select (parentNode);
					}
					break;
				case Gdk.Key.Down:
					if (pos < menuItems.Count - 1)
						((ActionMenuItem)menuItems[pos + 1]).Select ();
					else if (pos == menuItems.Count - 1) {
						InsertAction (menuItems.Count);
					}
					break;
				case Gdk.Key.Right:
					if ((modifier & Gdk.ModifierType.ControlMask) != 0 && item.Node.Type == Gtk.UIManagerItemType.Menuitem) {
						// Create a submenu
						using (item.Node.Action.UndoManager.AtomicChange) {
							item.Node.Type = Gtk.UIManagerItemType.Menu;
						}
						item.Node.Action.NotifyChanged ();
					}
					if (item.HasSubmenu) {
						item.ShowSubmenu ();
						if (openSubmenu != null)
							openSubmenu.Select (null);
					} else if (parentNode != null) {
						ActionMenuBar parentMB = parentMenu.Widget as ActionMenuBar;
						if (parentMB != null) {
							int i = parentNode.ParentNode.Children.IndexOf (parentNode);
							if (i < parentNode.ParentNode.Children.Count - 1)
								parentMB.DropMenu (parentNode.ParentNode.Children [i + 1]);
						}
					}
					break;
				case Gdk.Key.Left:
					if ((modifier & Gdk.ModifierType.ControlMask) != 0 && item.Node.Type == Gtk.UIManagerItemType.Menu) {
						// Remove the submenu
						OpenSubmenu = null;
						using (item.Node.Action.UndoManager.AtomicChange) {
							item.Node.Type = Gtk.UIManagerItemType.Menuitem;
							item.Node.Children.Clear ();
						}
						item.Node.Action.NotifyChanged ();
						break;
					}
					if (parentNode != null) {
						ActionMenu parentAM = parentMenu.Widget as ActionMenu;
						if (parentAM != null) {
							parentAM.Select (parentNode);
						}
						ActionMenuBar parentMB = parentMenu.Widget as ActionMenuBar;
						if (parentMB != null) {
							int i = parentNode.ParentNode.Children.IndexOf (parentNode);
							if (i > 0)
								parentMB.DropMenu (parentNode.ParentNode.Children [i - 1]);
						}
					}
					break;
				case Gdk.Key.Return:
					item.EditingDone += OnEditingDone;
					item.StartEditing ();
					break;
				case Gdk.Key.Insert:
					if ((modifier & Gdk.ModifierType.ControlMask) != 0)
						InsertActionAt (item, true, true);
					else
						InsertActionAt (item, false, false);
					break;
				case Gdk.Key.Delete:
					DeleteAction (item);
					break;
			}
		}
        void ProcessKey(ActionMenuItem item, Gdk.Key key, Gdk.ModifierType modifier)
        {
            int pos = menuItems.IndexOf(item);

            switch (key)
            {
            case Gdk.Key.Up:
                if (pos > 0)
                {
                    ((ActionMenuItem)menuItems[pos - 1]).Select();
                }
                else if (parentMenu.Widget is ActionMenuBar)
                {
                    ActionMenuBar bar = (ActionMenuBar)parentMenu.Widget;
                    bar.Select(parentNode);
                }
                break;

            case Gdk.Key.Down:
                if (pos < menuItems.Count - 1)
                {
                    ((ActionMenuItem)menuItems[pos + 1]).Select();
                }
                else if (pos == menuItems.Count - 1)
                {
                    InsertAction(menuItems.Count);
                }
                break;

            case Gdk.Key.Right:
                if ((modifier & Gdk.ModifierType.ControlMask) != 0 && item.Node.Type == Gtk.UIManagerItemType.Menuitem)
                {
                    // Create a submenu
                    using (item.Node.Action.UndoManager.AtomicChange)
                    {
                        item.Node.Type = Gtk.UIManagerItemType.Menu;
                    }
                    item.Node.Action.NotifyChanged();
                }
                if (item.HasSubmenu)
                {
                    item.ShowSubmenu();
                    if (openSubmenu != null)
                    {
                        openSubmenu.Select(null);
                    }
                }
                else if (parentNode != null)
                {
                    ActionMenuBar parentMB = parentMenu.Widget as ActionMenuBar;
                    if (parentMB != null)
                    {
                        int i = parentNode.ParentNode.Children.IndexOf(parentNode);
                        if (i < parentNode.ParentNode.Children.Count - 1)
                        {
                            parentMB.DropMenu(parentNode.ParentNode.Children [i + 1]);
                        }
                    }
                }
                break;

            case Gdk.Key.Left:
                if ((modifier & Gdk.ModifierType.ControlMask) != 0 && item.Node.Type == Gtk.UIManagerItemType.Menu)
                {
                    // Remove the submenu
                    OpenSubmenu = null;
                    using (item.Node.Action.UndoManager.AtomicChange)
                    {
                        item.Node.Type = Gtk.UIManagerItemType.Menuitem;
                        item.Node.Children.Clear();
                    }
                    item.Node.Action.NotifyChanged();
                    break;
                }
                if (parentNode != null)
                {
                    ActionMenu parentAM = parentMenu.Widget as ActionMenu;
                    if (parentAM != null)
                    {
                        parentAM.Select(parentNode);
                    }
                    ActionMenuBar parentMB = parentMenu.Widget as ActionMenuBar;
                    if (parentMB != null)
                    {
                        int i = parentNode.ParentNode.Children.IndexOf(parentNode);
                        if (i > 0)
                        {
                            parentMB.DropMenu(parentNode.ParentNode.Children [i - 1]);
                        }
                    }
                }
                break;

            case Gdk.Key.Return:
                item.EditingDone += OnEditingDone;
                item.StartEditing();
                break;

            case Gdk.Key.Insert:
                if ((modifier & Gdk.ModifierType.ControlMask) != 0)
                {
                    InsertActionAt(item, true, true);
                }
                else
                {
                    InsertActionAt(item, false, false);
                }
                break;

            case Gdk.Key.Delete:
                DeleteAction(item);
                break;
            }
        }