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); } } }
void Refresh() { Widget wrapper = Widget.Lookup(this); IDesignArea area = wrapper.GetDesignArea(); if (area == null) { return; } ActionTreeNode selNode = null; foreach (Gtk.Widget w in Children) { CustomMenuBarItem it = w as CustomMenuBarItem; if (it != null && area.IsSelected(it.ActionMenuItem)) { selNode = it.ActionMenuItem.Node; area.ResetSelection(it.ActionMenuItem); } Remove(w); } FillMenu(actionTree); if (selNode != null) { ActionMenuItem mi = FindMenuItem(selNode); if (mi != null) { mi.Select(); } } }
protected override bool OnDragDrop(Gdk.DragContext context, int x, int y, uint time) { ActionPaletteItem dropped = DND.Drop(context, null, time) as ActionPaletteItem; if (dropped == null) { return(false); } if (dropped.Node.Type != Gtk.UIManagerItemType.Menuitem && dropped.Node.Type != Gtk.UIManagerItemType.Menu && dropped.Node.Type != Gtk.UIManagerItemType.Toolitem && dropped.Node.Type != Gtk.UIManagerItemType.Separator) { return(false); } ActionTreeNode newNode = null; // Toolitems are copied, not moved using (wrapper.UndoManager.AtomicChange) { if (dropped.Node.ParentNode != null && dropped.Node.Type != Gtk.UIManagerItemType.Toolitem) { if (dropIndex < nodes.Count) { // Do nothing if trying to drop the node over the same node ActionTreeNode dropNode = nodes [dropIndex]; if (dropNode == dropped.Node) { return(false); } dropped.Node.ParentNode.Children.Remove(dropped.Node); // The drop position may have changed after removing the dropped node, // so get it again. dropIndex = nodes.IndexOf(dropNode); nodes.Insert(dropIndex, dropped.Node); } else { dropped.Node.ParentNode.Children.Remove(dropped.Node); nodes.Add(dropped.Node); dropIndex = nodes.Count - 1; } } else { newNode = new ActionTreeNode(Gtk.UIManagerItemType.Menuitem, null, dropped.Node.Action); nodes.Insert(dropIndex, newNode); } // Select the dropped node ActionMenuItem mi = (ActionMenuItem)menuItems [dropIndex]; mi.Select(); } return(base.OnDragDrop(context, x, y, time)); }
void Refresh() { IDesignArea area = wrapper.GetDesignArea(); ActionTreeNode selNode = null; foreach (Gtk.Widget w in table.Children) { ActionMenuItem ami = w as ActionMenuItem; if (area.IsSelected(w) && ami != null) { selNode = ami.Node; area.ResetSelection(w); } table.Remove(w); } Fill(); ActionMenuItem mi = FindMenuItem(selNode); if (mi != null) { mi.Select(); } GLib.Timeout.Add(50, new GLib.TimeoutHandler(RepositionSubmenu)); }
public void Select(ActionTreeNode node) { ActionMenuItem item = FindMenuItem(node); if (item != null) { item.Select(); } }
void OnAddClicked(object s, Gtk.ButtonPressEventArgs args) { Wrapper.Action ac = (Wrapper.Action)ObjectWrapper.Create(project, new Gtk.Action("", "", null, null)); ActionMenuItem item = InsertAction(ac, actionGroup.Actions.Count); item.EditingDone += OnEditDone; item.Select(); item.StartEditing(); HideAddLabel(); ShowAll(); }
void Fill() { IDesignArea designArea = GetDesignArea(); if (designArea == null) { return; } Wrapper.Action selAction = null; foreach (ActionMenuItem item in items) { if (designArea.IsSelected(item)) { selAction = item.Node.Action; } item.Node.Dispose(); item.Detach(); item.Destroy(); } items.Clear(); if (actionGroup != null) { Wrapper.Action[] sortedActions = new Wrapper.Action [actionGroup.Actions.Count]; actionGroup.Actions.CopyTo(sortedActions, 0); Array.Sort(sortedActions, new ActionComparer()); for (int n = 0; n < sortedActions.Length; n++) { Wrapper.Action action = (Wrapper.Action)sortedActions [n]; ActionMenuItem item = InsertAction(action, n); if (selAction == action) { item.Select(); } } if (selAction == null) { designArea.SetSelection(null, null); } headerLabel.Sensitive = true; PlaceAddLabel(actionGroup.Actions.Count); } else { HideAddLabel(); headerLabel.Text = Catalog.GetString("No selection"); headerLabel.Sensitive = false; } ShowAll(); }
void Fill() { menuItems.Clear(); uint n = 0; ActionMenuItem editItem = null; if (nodes.Count > 0) { foreach (ActionTreeNode node in nodes) { ActionMenuItem item = new ActionMenuItem(wrapper, this, node); item.KeyPressEvent += OnItemKeyPress; item.Attach(table, n++, 0); menuItems.Add(item); // If adding an action with an empty name, select and start editing it // if (node.Action != null && node.Action.Name.Length == 0) // editItem = item; } } emptyLabel = new Gtk.EventBox(); emptyLabel.VisibleWindow = false; Gtk.Label label = new Gtk.Label(); label.Xalign = 0; label.Markup = "<i><span foreground='darkgrey'>" + Catalog.GetString("Click to create action") + "</span></i>"; emptyLabel.Add(label); emptyLabel.ButtonPressEvent += OnAddClicked; table.Attach(emptyLabel, 1, 2, n, n + 1); ShowAll(); if (editItem != null) { // If there is an item with an empty action, it means that it was an item that was // being edited. Restart the editing now. GLib.Timeout.Add(200, delegate { editItem.Select(); editItem.EditingDone += OnEditingDone; editItem.StartEditing(); return(false); }); } }
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(); } } }
ActionTreeNode InsertAction(int pos) { using (wrapper.UndoManager.AtomicChange) { Wrapper.Action ac = (Wrapper.Action)ObjectWrapper.Create(wrapper.Project, new Gtk.Action("", "", null, null)); ActionTreeNode newNode = new ActionTreeNode(Gtk.UIManagerItemType.Menuitem, null, ac); nodes.Insert(pos, newNode); ActionMenuItem item = FindMenuItem(newNode); item.EditingDone += OnEditingDone; item.Select(); item.StartEditing(); emptyLabel.Hide(); if (wrapper.LocalActionGroups.Count == 0) { wrapper.LocalActionGroups.Add(new ActionGroup("Default")); } wrapper.LocalActionGroups [0].Actions.Add(ac); return(newNode); } }
void InsertAction(int pos) { Widget wrapper = Widget.Lookup(this); using (wrapper.UndoManager.AtomicChange) { Wrapper.Action ac = (Wrapper.Action)ObjectWrapper.Create(wrapper.Project, new Gtk.Action("", "", null, null)); ActionTreeNode node = new ActionTreeNode(Gtk.UIManagerItemType.Menu, "", ac); actionTree.Children.Insert(pos, node); ActionMenuItem aitem = FindMenuItem(node); aitem.EditingDone += OnEditingDone; aitem.Select(); aitem.StartEditing(); if (wrapper.LocalActionGroups.Count == 0) { wrapper.LocalActionGroups.Add(new ActionGroup("Default")); } wrapper.LocalActionGroups[0].Actions.Add(ac); } }
public void Select(ActionTreeNode node) { if (node != null) { ActionMenuItem item = FindMenuItem(node); if (item != null) { item.Select(); } } else { if (menuItems.Count > 0) { ((ActionMenuItem)menuItems [0]).Select(); } else { InsertAction(0); } } }
protected override bool OnDragDrop(Gdk.DragContext context, int x, int y, uint time) { ActionPaletteItem dropped = DND.Drop(context, null, time) as ActionPaletteItem; if (dropped == null) { return(false); } if (dropped.Node.Type != Gtk.UIManagerItemType.Menuitem && dropped.Node.Type != Gtk.UIManagerItemType.Menu && dropped.Node.Type != Gtk.UIManagerItemType.Toolitem && dropped.Node.Type != Gtk.UIManagerItemType.Separator) { return(false); } ActionTreeNode newNode = dropped.Node; if (dropped.Node.Type == Gtk.UIManagerItemType.Toolitem) { newNode = newNode.Clone(); newNode.Type = Gtk.UIManagerItemType.Menuitem; } Widget wrapper = Widget.Lookup(this); using (wrapper.UndoManager.AtomicChange) { if (dropIndex < actionTree.Children.Count) { // Do nothing if trying to drop the node over the same node ActionTreeNode dropNode = actionTree.Children [dropIndex]; if (dropNode == dropped.Node) { return(false); } if (newNode.ParentNode != null) { newNode.ParentNode.Children.Remove(newNode); } // The drop position may have changed after removing the dropped node, // so get it again. dropIndex = actionTree.Children.IndexOf(dropNode); actionTree.Children.Insert(dropIndex, newNode); } else { if (newNode.ParentNode != null) { newNode.ParentNode.Children.Remove(newNode); } actionTree.Children.Add(newNode); dropIndex = actionTree.Children.Count - 1; } // Select the dropped node ActionMenuItem mi = (ActionMenuItem)menuItems [dropIndex]; mi.Select(); } return(base.OnDragDrop(context, x, y, time)); }