From dd9e2d30b5e669b11fe69309e4e1b4c55ca8f82a Mon Sep 17 00:00:00 2001 From: John Lewin Date: Sat, 3 Jun 2017 15:11:12 -0700 Subject: [PATCH] Revise RenameButtonRenamesLocalLibraryFolder test - Restore support for LocalLibrary -> Create Folder - Share Selection logic between Row/Icon views - Make folders selectable - Improve naming of DirectoryContainerLink --- ApplicationView/ApplicationController.cs | 2 +- .../FileSystem/FileSystemContainer.cs | 8 +- .../MatterControl/SqliteLibraryContainer.cs | 101 ++++++++++-------- Library/Widgets/ListView/IconListView.cs | 25 +---- Library/Widgets/ListView/ListViewItemBase.cs | 27 +++++ Library/Widgets/ListView/RowListView.cs | 28 +---- Library/Widgets/PrintLibraryWidget.cs | 10 +- .../LocalLibraryTests.cs | 9 +- 8 files changed, 97 insertions(+), 113 deletions(-) diff --git a/ApplicationView/ApplicationController.cs b/ApplicationView/ApplicationController.cs index e2a86a79c..740cb56e8 100644 --- a/ApplicationView/ApplicationController.cs +++ b/ApplicationView/ApplicationController.cs @@ -410,7 +410,7 @@ namespace MatterHackers.MatterControl if (Directory.Exists(directory)) { this.Library.RegisterRootProvider( - new FileSystemContainer.ContainerLink(directory) + new FileSystemContainer.DirectoryContainerLink(directory) { UseIncrementedNameDuringTypeChange = true }); diff --git a/Library/Providers/FileSystem/FileSystemContainer.cs b/Library/Providers/FileSystem/FileSystemContainer.cs index 2323a3aff..d59f116fa 100644 --- a/Library/Providers/FileSystem/FileSystemContainer.cs +++ b/Library/Providers/FileSystem/FileSystemContainer.cs @@ -168,7 +168,7 @@ namespace MatterHackers.MatterControl.Library List containers; if (filter == "") { - var directories = Directory.GetDirectories(fullPath, "*.*", searchDepth).Select(p => new ContainerLink(p)).ToList(); + var directories = Directory.GetDirectories(fullPath, "*.*", searchDepth).Select(p => new DirectoryContainerLink(p)).ToList(); containers = directories.Concat(zipFiles.Select(f => new LocalZipContainerLink(f))).OrderBy(d => d.Name).ToList(); } else @@ -346,7 +346,7 @@ namespace MatterHackers.MatterControl.Library public override void Rename(ILibraryItem item, string revisedName) { - if (item is ContainerLink directoryLink) + if (item is DirectoryContainerLink directoryLink) { if (Directory.Exists(directoryLink.Path)) { @@ -378,9 +378,9 @@ namespace MatterHackers.MatterControl.Library #endregion - public class ContainerLink : FileSystemItem, ILibraryContainerLink + public class DirectoryContainerLink : FileSystemItem, ILibraryContainerLink { - public ContainerLink(string path) + public DirectoryContainerLink(string path) : base(path) { } diff --git a/Library/Providers/MatterControl/SqliteLibraryContainer.cs b/Library/Providers/MatterControl/SqliteLibraryContainer.cs index 2aba1b4c4..366504e01 100644 --- a/Library/Providers/MatterControl/SqliteLibraryContainer.cs +++ b/Library/Providers/MatterControl/SqliteLibraryContainer.cs @@ -125,65 +125,68 @@ namespace MatterHackers.MatterControl.Library { await Task.Run(async () => { - /* - * var newCollection = new PrintItemCollection(container.Name, ""); - newCollection.ParentCollectionID = this.CollectionID; - newCollection.Commit(); - this.ReloadContainer(); - * */ - foreach (var item in items.OfType()) + if (items.FirstOrDefault() is ILibraryContainerLink containerInfo) + { + var newCollection = new PrintItemCollection(containerInfo.Name, ""); + newCollection.ParentCollectionID = this.CollectionID; + newCollection.Commit(); + } + else { - string filePath; - if (item is FileSystemFileItem) + foreach (var item in items.OfType()) { - // Get existing file path - var fileItem = item as FileSystemFileItem; - filePath = fileItem.Path; - } - else - { - // Copy stream to library path - filePath = ApplicationDataStorage.Instance.GetNewLibraryFilePath("." + item.ContentType); + string filePath; - using (var outputStream = File.OpenWrite(filePath)) - using (var streamInteface = await item.GetContentStream(null)) + if (item is FileSystemFileItem) { - streamInteface.Stream.CopyTo(outputStream); - } - } - - if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) - { - if (Path.GetExtension(filePath).ToUpper() == ".ZIP") - { - List partFiles = ProjectFileHandler.ImportFromProjectArchive(filePath); - if (partFiles != null) - { - foreach (PrintItem part in partFiles) - { - string childFilePath = part.FileLocation; - using (var fileStream = File.OpenRead(part.FileLocation)) - { - AddItem(fileStream, Path.GetExtension(childFilePath).ToUpper(), PrintItemWrapperExtensionMethods.GetFriendlyName(Path.GetFileNameWithoutExtension(childFilePath))); - } - } - } + // Get existing file path + var fileItem = item as FileSystemFileItem; + filePath = fileItem.Path; } else { - using (var stream = File.OpenRead(filePath)) + // Copy stream to library path + filePath = ApplicationDataStorage.Instance.GetNewLibraryFilePath("." + item.ContentType); + + using (var outputStream = File.OpenWrite(filePath)) + using (var streamInteface = await item.GetContentStream(null)) { - AddItem(stream, Path.GetExtension(filePath).ToUpper(), PrintItemWrapperExtensionMethods.GetFriendlyName(Path.GetFileNameWithoutExtension(filePath))); + streamInteface.Stream.CopyTo(outputStream); + } + } + + if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) + { + if (Path.GetExtension(filePath).ToUpper() == ".ZIP") + { + List partFiles = ProjectFileHandler.ImportFromProjectArchive(filePath); + if (partFiles != null) + { + foreach (PrintItem part in partFiles) + { + string childFilePath = part.FileLocation; + using (var fileStream = File.OpenRead(part.FileLocation)) + { + AddItem(fileStream, Path.GetExtension(childFilePath).ToUpper(), PrintItemWrapperExtensionMethods.GetFriendlyName(Path.GetFileNameWithoutExtension(childFilePath))); + } + } + } + } + else + { + using (var stream = File.OpenRead(filePath)) + { + AddItem(stream, Path.GetExtension(filePath).ToUpper(), PrintItemWrapperExtensionMethods.GetFriendlyName(Path.GetFileNameWithoutExtension(filePath))); + } } } } - - this.ReloadContainer(); } + this.ReloadContainer(); this.OnReloaded(); }); } @@ -227,10 +230,16 @@ namespace MatterHackers.MatterControl.Library sqliteItem.PrintItem.Name = revisedName; sqliteItem.PrintItem.Commit(); } - else if (selectedItem is SqliteLibraryContainerLink) + else if (selectedItem is SqliteLibraryContainerLink containerLink) { - // TODO: lookup collection by id, rename, commit, release, reload - System.Diagnostics.Debugger.Break(); + string sql = $"SELECT * FROM PrintItemCollection WHERE ID = {containerLink.ContainerID}"; + + var container = Datastore.Instance.dbSQLite.Query(sql).FirstOrDefault(); + if (container != null) + { + container.Name = revisedName; + container.Commit(); + } } this.ReloadContainer(); diff --git a/Library/Widgets/ListView/IconListView.cs b/Library/Widgets/ListView/IconListView.cs index c6d755238..546fac043 100644 --- a/Library/Widgets/ListView/IconListView.cs +++ b/Library/Widgets/ListView/IconListView.cs @@ -28,9 +28,7 @@ either expressed or implied, of the FreeBSD Project. */ using System; -using System.Linq; using MatterHackers.Agg; -using MatterHackers.Agg.Image; using MatterHackers.Agg.UI; using MatterHackers.MatterControl.Library; using MatterHackers.VectorMath; @@ -126,28 +124,7 @@ namespace MatterHackers.MatterControl.CustomWidgets imageWidget.Click += (sender, e) => { - bool isContentItem = listViewItem.Model is ILibraryContentItem; - bool isValidStream = (listViewItem.Model is ILibraryContentStream stream - && ApplicationController.Instance.Library.IsContentFileType(stream.FileName)); - - if (isContentItem || isValidStream) - { - if (this.IsSelected) - { - listViewItem.ListView.SelectedItems.Remove(listViewItem); - } - else - { - if (!Keyboard.IsKeyDown(Keys.ControlKey)) - { - listViewItem.ListView.SelectedItems.Clear(); - } - - listViewItem.ListView.SelectedItems.Add(listViewItem); - } - - Invalidate(); - } + this.OnItemSelect(); }; container.AddChild(imageWidget); diff --git a/Library/Widgets/ListView/ListViewItemBase.cs b/Library/Widgets/ListView/ListViewItemBase.cs index 4fe686a16..33d3634c2 100644 --- a/Library/Widgets/ListView/ListViewItemBase.cs +++ b/Library/Widgets/ListView/ListViewItemBase.cs @@ -138,6 +138,33 @@ namespace MatterHackers.MatterControl.CustomWidgets SetItemThumbnail(thumbnail); } + internal void OnItemSelect() + { + bool isContentItem = listViewItem.Model is ILibraryContentItem; + bool isValidStream = (listViewItem.Model is ILibraryContentStream stream + && ApplicationController.Instance.Library.IsContentFileType(stream.FileName)); + bool isContainerLink = listViewItem.Model is ILibraryContainerLink; + + if (isContentItem || isValidStream || isContainerLink) + { + if (this.IsSelected) + { + listViewItem.ListView.SelectedItems.Remove(listViewItem); + } + else + { + if (!Keyboard.IsKeyDown(Keys.ControlKey)) + { + listViewItem.ListView.SelectedItems.Clear(); + } + + listViewItem.ListView.SelectedItems.Add(listViewItem); + } + + Invalidate(); + } + } + protected void SetItemThumbnail(ImageBuffer thumbnail, bool colorize = false) { if (thumbnail != null) diff --git a/Library/Widgets/ListView/RowListView.cs b/Library/Widgets/ListView/RowListView.cs index f69642fd1..cdfeb48d2 100644 --- a/Library/Widgets/ListView/RowListView.cs +++ b/Library/Widgets/ListView/RowListView.cs @@ -174,35 +174,9 @@ namespace MatterHackers.MatterControl.CustomWidgets middleColumn.MouseUp += (sender, e) => { if (mouseDownOnMiddle - && listViewItem.Model is ILibraryContentItem && middleColumn.LocalBounds.Contains(e.Position)) { - // TODO: Resolve missing .EditMode condition - if (false /*this.libraryDataView.EditMode*/) - { - if (this.IsSelected) - { - listViewItem.ListView.SelectedItems.Remove(listViewItem); - } - else - { - listViewItem.ListView.SelectedItems.Remove(listViewItem); - } - Invalidate(); - } - else - { - if (!this.IsSelected) - { - if (!Keyboard.IsKeyDown(Keys.ControlKey)) - { - listViewItem.ListView.SelectedItems.Clear(); - } - - listViewItem.ListView.SelectedItems.Add(listViewItem); - Invalidate(); - } - } + this.OnItemSelect(); } mouseDownOnMiddle = false; diff --git a/Library/Widgets/PrintLibraryWidget.cs b/Library/Widgets/PrintLibraryWidget.cs index c9f6adeee..2820a6a7f 100644 --- a/Library/Widgets/PrintLibraryWidget.cs +++ b/Library/Widgets/PrintLibraryWidget.cs @@ -286,11 +286,13 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (createFolderWindow == null) { - createFolderWindow = new CreateFolderWindow((returnInfo) => + createFolderWindow = new CreateFolderWindow((result) => { - // TODO: Implement - throw new NotImplementedException("createFolderButton click"); - //this.libraryView.ActiveContainer.AddCollectionToLibrary(returnInfo.newName); + if (!string.IsNullOrEmpty(result.newName) + && this.libraryView.ActiveContainer is ILibraryWritableContainer writableContainer) + { + writableContainer.Add(new[] { new DynamicContainerLink(result.newName, null) }); + } }); createFolderWindow.Closed += (sender2, e2) => { createFolderWindow = null; }; } diff --git a/Tests/MatterControl.AutomationTests/LocalLibraryTests.cs b/Tests/MatterControl.AutomationTests/LocalLibraryTests.cs index d366687fa..386412870 100644 --- a/Tests/MatterControl.AutomationTests/LocalLibraryTests.cs +++ b/Tests/MatterControl.AutomationTests/LocalLibraryTests.cs @@ -173,7 +173,7 @@ namespace MatterHackers.MatterControl.Tests.Automation [Test] public async Task RenameButtonRenamesLocalLibraryFolder() { - AutomationTest testToRun = (testRunner) => + await MatterControlUtilities.RunTest((testRunner) => { testRunner.CloseSignInAndPrinterSelect(); // Navigate to Local Library @@ -195,9 +195,6 @@ namespace MatterHackers.MatterControl.Tests.Automation // Confirm newly created folder exists Assert.IsTrue(testRunner.WaitForName("New Folder Row Item Collection", 1), "New folder should appear as GuiWidget"); - testRunner.ClickByName("Library Edit Button"); - testRunner.Delay(.2); - testRunner.ClickByName("New Folder Row Item Collection"); testRunner.Delay(.2); @@ -213,9 +210,7 @@ namespace MatterHackers.MatterControl.Tests.Automation Assert.IsTrue(testRunner.WaitForName("Renamed Library Folder Row Item Collection", 2), "Renamed folder should exist"); return Task.FromResult(0); - }; - - await MatterControlUtilities.RunTest(testToRun); + }); } [Test]