void HandleMouseEvent(object sender, MouseButtonEventArgs e) { int line = margin.GetLineFromMousePosition(e); if (e.ChangedButton == MouseButton.Left) { foreach (var category in MefState.Instance.actionEntries.OrderBy(c => c.Metadata.Order).GroupBy(c => c.Metadata.Category)) { foreach (var entryPair in category) { IBookmarkActionEntry entry = entryPair.Value; if (entryPair.Value.IsEnabled(textView)) { entry.Execute(textView, line); } } } } // context menu entries var bookmarks = new List <IBookmark>(margin.Manager.Bookmarks); bookmarks.AddRange(BookmarkManager.Bookmarks); if (bookmarks.Count == 0) { // don't show the menu e.Handled = true; this.margin.ContextMenu = null; return; } if (e.ChangedButton == MouseButton.Right) { // check if we are on a Member var bms = GetBookmark(bookmarks, line); if (bms.Count == 0) { // don't show the menu e.Handled = true; this.margin.ContextMenu = null; return; } foreach (var bookmark in bms) { ContextMenu menu = new ContextMenu(); foreach (var category in MefState.Instance.contextEntries.OrderBy(c => c.Metadata.Order).GroupBy(c => c.Metadata.Category)) { bool hasAddedSep = menu.Items.Count == 0; foreach (var entryPair in category) { IBookmarkContextMenuEntry entry = entryPair.Value; if (entry.IsVisible(bookmark)) { if (!hasAddedSep) { menu.Items.Add(new Separator()); hasAddedSep = true; } MenuItem menuItem = new MenuItem(); menuItem.Header = entryPair.Metadata.Header; bool isEnabled; if (entryPair.Value.IsEnabled(bookmark)) { menuItem.Click += delegate { entry.Execute(bookmark); }; isEnabled = true; } else { menuItem.IsEnabled = false; isEnabled = false; } if (!string.IsNullOrEmpty(entryPair.Metadata.Icon)) { MainWindow.CreateMenuItemImage(menuItem, entry, entryPair.Metadata.Icon, BackgroundType.ContextMenuItem, isEnabled); } menuItem.InputGestureText = entryPair.Metadata.InputGestureText ?? string.Empty; var entry2 = entry as IBookmarkContextMenuEntry2; if (entry2 != null) { entry2.Initialize(bookmark, menuItem); } menu.Items.Add(menuItem); } } } if (menu.Items.Count > 0) { margin.ContextMenu = menu; return; } } // hide the context menu. e.Handled = true; } }
void HandleMouseEvent(object sender, MouseButtonEventArgs e) { int line = margin.GetLineFromMousePosition(e); if (e.ChangedButton == MouseButton.Left) { foreach (var category in actionEntries.OrderBy(c => c.Metadata.Order).GroupBy(c => c.Metadata.Category)) { foreach (var entryPair in category) { IBookmarkActionEntry entry = entryPair.Value; if (entryPair.Value.IsEnabled()) { entry.Execute(line); } } } } // context menu entries var bookmarks = margin.Manager.Bookmarks.ToArray(); if (bookmarks.Length == 0) { // don't show the menu e.Handled = true; this.margin.ContextMenu = null; return; } if (e.ChangedButton == MouseButton.Right) { // check if we are on a Member var bookmark = bookmarks.FirstOrDefault(b => b.LineNumber == line); if (bookmark == null) { // don't show the menu e.Handled = true; this.margin.ContextMenu = null; return; } ContextMenu menu = new ContextMenu(); foreach (var category in contextEntries.OrderBy(c => c.Metadata.Order).GroupBy(c => c.Metadata.Category)) { bool needSeparatorForCategory = true; foreach (var entryPair in category) { IBookmarkContextMenuEntry entry = entryPair.Value; if (entry.IsVisible(bookmark)) { if (needSeparatorForCategory && menu.Items.Count > 0) { menu.Items.Add(new Separator()); needSeparatorForCategory = false; } MenuItem menuItem = new MenuItem(); menuItem.Header = entryPair.Metadata.Header; if (!string.IsNullOrEmpty(entryPair.Metadata.Icon)) { menuItem.Icon = new Image { Width = 16, Height = 16, Source = Images.LoadImage(entry, entryPair.Metadata.Icon) }; } if (entryPair.Value.IsEnabled(bookmark)) { menuItem.Click += delegate { entry.Execute(bookmark); }; } else { menuItem.IsEnabled = false; } menu.Items.Add(menuItem); } } } if (menu.Items.Count > 0) { margin.ContextMenu = menu; } else { // hide the context menu. e.Handled = true; } } }