/// <summary> /// Adds a menu item button to a menu button. /// </summary> /// <param name="parentButtonText">Text on the parent button.</param> /// <param name="text">Text on the button.</param> /// <param name="image">Image on the button.</param> /// <param name="handler">Handler to call when button is clicked.</param> public void AddButtonToMenu(string parentButtonText, string text, Image image, EventHandler handler) { if (!ButtonsAreToolbar) { throw new NotImplementedException(); } // Find the top-level menu button (the button which, when clicked, causes the menu to appear). MenuToolButton toplevel = btnToolbar.AllChildren.OfType <MenuToolButton>().FirstOrDefault(b => (b.LabelWidget as Label).Text == parentButtonText); if (toplevel.Menu as Menu == null) { toplevel.Menu = new Menu(); } Menu menu = toplevel.Menu as Menu; MenuItem menuItem = WidgetExtensions.CreateImageMenuItem(text, image); menuItem.Activated += handler; menu.Append(menuItem); menuItem.ShowAll(); }
public void PopulateContextMenu(List <MenuDescriptionArgs> menuDescriptions) { ClearPopup(); foreach (MenuDescriptionArgs description in menuDescriptions) { MenuItem item; if (description.ShowCheckbox) { CheckMenuItem checkItem = new CheckMenuItem(description.Name); checkItem.Active = description.Checked; item = checkItem; } else if (!String.IsNullOrEmpty(description.ResourceNameForImage) && MasterView.HasResource(description.ResourceNameForImage)) { item = WidgetExtensions.CreateImageMenuItem(description.Name, new Image(null, description.ResourceNameForImage)); } else { item = new MenuItem(description.Name); } if (!String.IsNullOrEmpty(description.ShortcutKey)) { string keyName = String.Empty; Gdk.ModifierType modifier = Gdk.ModifierType.None; string[] keyNames = description.ShortcutKey.Split(new Char[] { '+' }); foreach (string name in keyNames) { if (name == "Ctrl") { modifier |= Gdk.ModifierType.ControlMask; } else if (name == "Shift") { modifier |= Gdk.ModifierType.ShiftMask; } else if (name == "Alt") { modifier |= Gdk.ModifierType.Mod1Mask; } else if (name == "Del") { keyName = "Delete"; } else { keyName = name; } } try { Gdk.Key accelKey = (Gdk.Key)Enum.Parse(typeof(Gdk.Key), keyName, false); item.AddAccelerator("activate", accel, (uint)accelKey, modifier, AccelFlags.Visible); } catch { } } item.Activated += description.OnClick; popup.Append(item); } if (popup.AttachWidget == null) { popup.AttachToWidget(Listview, null); } popup.ShowAll(); }
/// <summary>Populate the main menu tool strip.</summary> /// <param name="menuDescriptions">Descriptions for each item.</param> public void Populate(List <MenuDescriptionArgs> menuDescriptions) { menu.Clear(); foreach (MenuDescriptionArgs description in menuDescriptions) { MenuItem item; if (description.ShowCheckbox) { CheckMenuItem checkItem = new CheckMenuItem(description.Name); checkItem.Active = description.Checked; item = checkItem; } else { ManifestResourceInfo info = Assembly.GetExecutingAssembly().GetManifestResourceInfo(description.ResourceNameForImage); if (info != null) { MenuItem imageItem = WidgetExtensions.CreateImageMenuItem(description.Name, new Gtk.Image(null, description.ResourceNameForImage)); item = imageItem; } else { item = new MenuItem(description.Name); } } if (!String.IsNullOrEmpty(description.ShortcutKey)) { string keyName = String.Empty; Gdk.ModifierType modifier = Gdk.ModifierType.None; string[] keyNames = description.ShortcutKey.Split(new Char[] { '+' }); foreach (string name in keyNames) { if (name == "Ctrl") { modifier |= Gdk.ModifierType.ControlMask; } else if (name == "Shift") { modifier |= Gdk.ModifierType.ShiftMask; } else if (name == "Alt") { modifier |= Gdk.ModifierType.Mod1Mask; } else if (name == "Del") { keyName = "Delete"; } else { keyName = name; } } try { Gdk.Key accelKey = (Gdk.Key)Enum.Parse(typeof(Gdk.Key), keyName, false); item.AddAccelerator("activate", Accelerators, (uint)accelKey, modifier, AccelFlags.Visible); } catch { } } item.Activated += description.OnClick; if (description.FollowsSeparator && (menu.Children.Length > 0)) { menu.Append(new SeparatorMenuItem()); } menu.Append(item); } menu.ShowAll(); }