Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
                }
            }
        }