From 5996e7a996f62074c2ee451b107cf2003bb6263c Mon Sep 17 00:00:00 2001 From: John Lewin Date: Wed, 24 Oct 2018 21:10:39 -0700 Subject: [PATCH] Filter context menu to item actions only - Issue MatterHackers/MCCentral#4333 Right click on list view items should not show container actions --- .../ApplicationView/ApplicationController.cs | 14 ++++----- .../Library/Widgets/LibraryWidget.cs | 30 +++++++++---------- .../Library/Widgets/ListView/ListView.cs | 2 +- .../Widgets/ListView/ListViewItemBase.cs | 2 +- .../Widgets/ListView/PrintItemAction.cs | 24 +++++++++++---- .../Library/Widgets/PrintLibraryWidget.cs | 2 +- 6 files changed, 43 insertions(+), 31 deletions(-) diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index 22dafec78..c4dce8671 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -500,7 +500,7 @@ namespace MatterHackers.MatterControl private EventHandler unregisterEvents; - private Dictionary> registeredLibraryActions = new Dictionary>(); + private Dictionary> registeredLibraryActions = new Dictionary>(); private List registeredSceneOperations; @@ -2034,12 +2034,12 @@ namespace MatterHackers.MatterControl /// /// The section to register in /// The action to register - public void RegisterLibraryAction(string section, PrintItemAction printItemAction) + public void RegisterLibraryAction(string section, LibraryAction printItemAction) { - List items; + List items; if (!registeredLibraryActions.TryGetValue(section, out items)) { - items = new List(); + items = new List(); registeredLibraryActions.Add(section, items); } @@ -2051,15 +2051,15 @@ namespace MatterHackers.MatterControl /// /// The section to enumerate /// - public IEnumerable RegisteredLibraryActions(string section) + public IEnumerable RegisteredLibraryActions(string section) { - List items; + List items; if (registeredLibraryActions.TryGetValue(section, out items)) { return items; } - return Enumerable.Empty(); + return Enumerable.Empty(); } public IEnumerable RegisteredSceneOperations => registeredSceneOperations; diff --git a/MatterControlLib/Library/Widgets/LibraryWidget.cs b/MatterControlLib/Library/Widgets/LibraryWidget.cs index 84a1975d5..cd33de694 100644 --- a/MatterControlLib/Library/Widgets/LibraryWidget.cs +++ b/MatterControlLib/Library/Widgets/LibraryWidget.cs @@ -53,7 +53,7 @@ namespace MatterHackers.MatterControl.PrintLibrary private GuiWidget providerMessageContainer; private TextWidget providerMessageWidget; - private List menuActions = new List(); + private List menuActions = new List(); private FolderBreadCrumbWidget breadCrumbWidget; private GuiWidget searchInput; @@ -568,9 +568,9 @@ namespace MatterHackers.MatterControl.PrintLibrary providerMessageContainer.AddChild(providerMessageWidget); } - public static void CreateMenuActions(ListView libraryView, List menuActions, PartPreviewContent partPreviewContent, ThemeConfig theme, bool allowPrint) + public static void CreateMenuActions(ListView libraryView, List menuActions, PartPreviewContent partPreviewContent, ThemeConfig theme, bool allowPrint) { - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListView) { Icon = AggContext.StaticData.LoadIcon("cube.png", 16, 16, ApplicationController.Instance.MenuTheme.InvertIcons), Title = "Add".Localize(), @@ -598,7 +598,7 @@ namespace MatterHackers.MatterControl.PrintLibrary IsEnabled = (s, l) => libraryView.ActiveContainer is ILibraryWritableContainer }); - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListView) { Title = "Create Folder".Localize(), Icon = AggContext.StaticData.LoadIcon("fa-folder-new_16.png", 16, 16, ApplicationController.Instance.MenuTheme.InvertIcons), @@ -632,7 +632,7 @@ namespace MatterHackers.MatterControl.PrintLibrary if (allowPrint) { - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Print".Localize(), Action = (selectedLibraryItems, listView) => @@ -686,7 +686,7 @@ namespace MatterHackers.MatterControl.PrintLibrary } // Open menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Open".Localize(), Icon = AggContext.StaticData.LoadIcon("cube.png", 16, 16, theme.InvertIcons), @@ -707,7 +707,7 @@ namespace MatterHackers.MatterControl.PrintLibrary }); // edit menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Add to Bed".Localize(), Icon = AggContext.StaticData.LoadIcon("bed_add.png", 16, 16, theme.InvertIcons), @@ -747,7 +747,7 @@ namespace MatterHackers.MatterControl.PrintLibrary }); // edit menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Edit".Localize(), Action = async (selectedLibraryItems, listView) => @@ -787,7 +787,7 @@ namespace MatterHackers.MatterControl.PrintLibrary }); // rename menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Rename".Localize(), Action = (selectedLibraryItems, listView) => @@ -833,7 +833,7 @@ namespace MatterHackers.MatterControl.PrintLibrary }); // move menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Move".Localize(), Action = (selectedLibraryItems, listView) => @@ -868,7 +868,7 @@ namespace MatterHackers.MatterControl.PrintLibrary }); // remove menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Remove".Localize(), Action = (selectedLibraryItems, listView) => @@ -917,7 +917,7 @@ namespace MatterHackers.MatterControl.PrintLibrary menuActions.Add(new MenuSeparator("Export")); // export menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Export".Localize(), Icon = AggContext.StaticData.LoadIcon("cube_export.png", 16, 16, theme.InvertIcons), @@ -938,7 +938,7 @@ namespace MatterHackers.MatterControl.PrintLibrary }); // share menu item - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Share".Localize(), Action = (selectedLibraryItems, listView) => @@ -967,7 +967,7 @@ namespace MatterHackers.MatterControl.PrintLibrary // PDF export is limited to Windows if (AggContext.OperatingSystem == OSType.Windows) { - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Create Part Sheet".Localize(), Action = (selectedLibraryItems, listView) => @@ -1014,7 +1014,7 @@ namespace MatterHackers.MatterControl.PrintLibrary } #endif - menuActions.Add(new PrintItemAction() + menuActions.Add(new LibraryAction(ActionScope.ListItem) { Title = "Open Package".Localize(), Action = (selectedItems, listView) => diff --git a/MatterControlLib/Library/Widgets/ListView/ListView.cs b/MatterControlLib/Library/Widgets/ListView/ListView.cs index baa6a3ffa..9259bb11b 100644 --- a/MatterControlLib/Library/Widgets/ListView/ListView.cs +++ b/MatterControlLib/Library/Widgets/ListView/ListView.cs @@ -61,7 +61,7 @@ namespace MatterHackers.MatterControl.CustomWidgets private Color loadingBackgroundColor; private ImageSequenceWidget loadingIndicator; - public List MenuActions { get; set; } + public List MenuActions { get; set; } // Default constructor uses IconListView public ListView(ILibraryContext context, ThemeConfig theme) diff --git a/MatterControlLib/Library/Widgets/ListView/ListViewItemBase.cs b/MatterControlLib/Library/Widgets/ListView/ListViewItemBase.cs index 5f5e84231..1ce1205f0 100644 --- a/MatterControlLib/Library/Widgets/ListView/ListViewItemBase.cs +++ b/MatterControlLib/Library/Widgets/ListView/ListViewItemBase.cs @@ -344,7 +344,7 @@ namespace MatterHackers.MatterControl.CustomWidgets { var menu = new PopupMenu(ApplicationController.Instance.MenuTheme); - foreach (var menuAction in this.listViewItem.ListView.MenuActions) + foreach (var menuAction in this.listViewItem.ListView.MenuActions.Where(m => m.Scope == ActionScope.ListItem)) { if (menuAction is MenuSeparator) { diff --git a/MatterControlLib/Library/Widgets/ListView/PrintItemAction.cs b/MatterControlLib/Library/Widgets/ListView/PrintItemAction.cs index f06131762..9981b9f6b 100644 --- a/MatterControlLib/Library/Widgets/ListView/PrintItemAction.cs +++ b/MatterControlLib/Library/Widgets/ListView/PrintItemAction.cs @@ -1,5 +1,5 @@ /* -Copyright (c) 2017, John Lewin +Copyright (c) 2018, John Lewin All rights reserved. Redistribution and use in source and binary forms, with or without @@ -30,15 +30,25 @@ either expressed or implied, of the FreeBSD Project. using System; using System.Collections.Generic; using MatterHackers.Agg.Image; -using MatterHackers.Agg.UI; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.Library; -using MatterHackers.MatterControl.PartPreviewWindow; namespace MatterHackers.MatterControl.PrintQueue { - public class PrintItemAction + public enum ActionScope { + ListItem, + ListView, + None + } + + public class LibraryAction + { + public LibraryAction(ActionScope scope) + { + this.Scope = scope; + } + public string Title { get; set; } public Action, ListView> Action { get; set; } @@ -46,17 +56,19 @@ namespace MatterHackers.MatterControl.PrintQueue public Func, ListView, bool> IsEnabled { get; set; } public string ToolTipText { get; internal set; } public ImageBuffer Icon { get; internal set; } + public ActionScope Scope { get; } } - public class MenuSeparator : PrintItemAction + public class MenuSeparator : LibraryAction { public MenuSeparator(string section) + : base(ActionScope.None) { } } public abstract class PrintItemMenuExtension { - public abstract IEnumerable GetMenuItems(); + public abstract IEnumerable GetMenuItems(); } } \ No newline at end of file diff --git a/MatterControlLib/Library/Widgets/PrintLibraryWidget.cs b/MatterControlLib/Library/Widgets/PrintLibraryWidget.cs index 60d010ca4..2ba388fd7 100644 --- a/MatterControlLib/Library/Widgets/PrintLibraryWidget.cs +++ b/MatterControlLib/Library/Widgets/PrintLibraryWidget.cs @@ -57,7 +57,7 @@ namespace MatterHackers.MatterControl.PrintLibrary private GuiWidget providerMessageContainer; private TextWidget providerMessageWidget; - private List menuActions = new List(); + private List menuActions = new List(); private FolderBreadCrumbWidget breadCrumbWidget; private GuiWidget searchInput;