From 74dcbc52dce6cc5a5e18b08fd7422f15c807e303 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 3 May 2018 23:32:17 -0700 Subject: [PATCH] Add LibraryCollectionContainer - Issue MatterHackers/MCCentral#3287 Bucket library containers into a common root - like History --- ApplicationView/ApplicationController.cs | 25 +----- Library/Providers/LibraryConfig.cs | 1 + .../LibraryCollectionContainer.cs | 76 +++++++++++++++++++ MatterControl.csproj | 1 + 4 files changed, 82 insertions(+), 21 deletions(-) create mode 100644 Library/Providers/MatterControl/LibraryCollectionContainer.cs diff --git a/ApplicationView/ApplicationController.cs b/ApplicationView/ApplicationController.cs index f613ea409..bcb5cccab 100644 --- a/ApplicationView/ApplicationController.cs +++ b/ApplicationView/ApplicationController.cs @@ -655,30 +655,13 @@ namespace MatterHackers.MatterControl })); } - this.Library.RegisterContainer( - new DynamicContainerLink( - () => "Calibration Parts".Localize(), - AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "folder.png")), - () => new CalibrationPartsContainer()) - { - IsReadOnly = true - }); + this.Library.LibraryCollectionContainer = new LibraryCollectionContainer(); this.Library.RegisterContainer( new DynamicContainerLink( - () => "Print Queue".Localize(), - AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "queue_folder.png")), - () => new PrintQueueContainer())); - - var rootLibraryCollection = Datastore.Instance.dbSQLite.Table().Where(v => v.Name == "_library").Take(1).FirstOrDefault(); - if (rootLibraryCollection != null) - { - this.Library.RegisterContainer( - new DynamicContainerLink( - () => "Local Library".Localize(), - AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "library_folder.png")), - () => new SqliteLibraryContainer(rootLibraryCollection.Id))); - } + () => "Library".Localize(), + AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "library_folder.png")), + () => this.Library.LibraryCollectionContainer)); if (File.Exists(ApplicationDataStorage.Instance.CustomLibraryFoldersPath)) { diff --git a/Library/Providers/LibraryConfig.cs b/Library/Providers/LibraryConfig.cs index 39d6e1b1b..091d070bf 100644 --- a/Library/Providers/LibraryConfig.cs +++ b/Library/Providers/LibraryConfig.cs @@ -127,6 +127,7 @@ namespace MatterHackers.MatterControl.Library public PlatingHistoryContainer PlatingHistory { get; internal set; } public PartHistoryContainer PartHistory { get; internal set; } + public LibraryCollectionContainer LibraryCollectionContainer { get; internal set; } public IContentProvider GetContentProvider(ILibraryItem item) { diff --git a/Library/Providers/MatterControl/LibraryCollectionContainer.cs b/Library/Providers/MatterControl/LibraryCollectionContainer.cs new file mode 100644 index 000000000..86d02238b --- /dev/null +++ b/Library/Providers/MatterControl/LibraryCollectionContainer.cs @@ -0,0 +1,76 @@ +/* +Copyright (c) 2018, John Lewin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. +*/ + +using System.Collections.Generic; +using System.IO; +using MatterHackers.Agg.Platform; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.DataStorage; + +namespace MatterHackers.MatterControl.Library +{ + public class LibraryCollectionContainer : LibraryContainer + { + public LibraryCollectionContainer() + { + this.ChildContainers = new List(); + this.Items = new List(); + this.Name = "Library".Localize(); + + var rootLibraryCollection = Datastore.Instance.dbSQLite.Table().Where(v => v.Name == "_library").Take(1).FirstOrDefault(); + if (rootLibraryCollection != null) + { + this.ChildContainers.Add( + new DynamicContainerLink( + () => "Local Library".Localize(), + AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "library_folder.png")), + () => new SqliteLibraryContainer(rootLibraryCollection.Id))); + } + + this.ChildContainers.Add( + new DynamicContainerLink( + () => "Calibration Parts".Localize(), + AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "folder.png")), + () => new CalibrationPartsContainer()) + { + IsReadOnly = true + }); + + this.ChildContainers.Add( + new DynamicContainerLink( + () => "Print Queue".Localize(), + AggContext.StaticData.LoadIcon(Path.Combine("FileDialog", "queue_folder.png")), + () => new PrintQueueContainer())); + } + + public override void Load() + { + } + } +} diff --git a/MatterControl.csproj b/MatterControl.csproj index 667868eb1..b27ca8e9b 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -80,6 +80,7 @@ +