diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index e50dc5a89..2b9d3fdd8 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -820,7 +820,10 @@ namespace MatterHackers.MatterControl () => "History".Localize(), AggContext.StaticData.LoadIcon(Path.Combine("Library", "folder.png")), AggContext.StaticData.LoadIcon(Path.Combine("Library", "history_icon.png")), - () => new RootHistoryContainer())); + () => new RootHistoryContainer()) + { + IsReadOnly = true + }); // Create a new library context for the SaveAs view this.LibraryTabContext = new LibraryConfig() diff --git a/MatterControlLib/Library/Providers/MatterControl/LibraryCollectionContainer.cs b/MatterControlLib/Library/Providers/MatterControl/LibraryCollectionContainer.cs index 484568ff6..a2307ddbb 100644 --- a/MatterControlLib/Library/Providers/MatterControl/LibraryCollectionContainer.cs +++ b/MatterControlLib/Library/Providers/MatterControl/LibraryCollectionContainer.cs @@ -102,7 +102,10 @@ namespace MatterHackers.MatterControl.Library () => "Pipe Works".Localize(), AggContext.StaticData.LoadIcon(Path.Combine("Library", "folder.png")), null, - () => new PipeWorksContainer())); + () => new PipeWorksContainer()) + { + IsReadOnly = true + }); int index = 0; @@ -146,7 +149,10 @@ namespace MatterHackers.MatterControl.Library }) { DateCreated = new System.DateTime(index++) }, } - })); + }) + { + IsReadOnly = true + }); #endif } diff --git a/MatterControlLib/PartPreviewWindow/SaveAsPage.cs b/MatterControlLib/PartPreviewWindow/SaveAsPage.cs index 8edba504f..6365ea5fb 100644 --- a/MatterControlLib/PartPreviewWindow/SaveAsPage.cs +++ b/MatterControlLib/PartPreviewWindow/SaveAsPage.cs @@ -65,7 +65,10 @@ namespace MatterHackers.MatterControl }; itemNameWidget.ActualTextEditWidget.EnterPressed += (s, e) => { - acceptButton.InvokeClick(); + if (librarySelectorWidget.ActiveContainer is ILibraryWritableContainer) + { + acceptButton.InvokeClick(); + } }; contentRow.AddChild(itemNameWidget); @@ -76,23 +79,68 @@ namespace MatterHackers.MatterControl isEnabled = writableContainer?.AllowAction(ContainerActions.AddContainers) == true; } + var folderButtonRow = new FlowLayoutWidget() + { + HAnchor = HAnchor.Left | HAnchor.Fit, + }; + contentRow.AddChild(folderButtonRow); + + // add a create folder button var createFolderButton = new TextIconButton("Create Folder".Localize(), icon, theme) { Enabled = isEnabled, - HAnchor = HAnchor.Left, VAnchor = VAnchor.Absolute, DrawIconOverlayOnDisabled = true }; + createFolderButton.Name = "Create Folder In Button"; + folderButtonRow.AddChild(createFolderButton); + + var refreshButton = new IconButton(AggContext.StaticData.LoadIcon("fa-refresh_14.png", 16, 16, theme.InvertIcons), theme) + { + ToolTipText = "Refresh Folder".Localize(), + Enabled = isEnabled, + }; + refreshButton.Click += (s, e) => + { + librarySelectorWidget.ActiveContainer.Load(); + }; + + // folderButtonRow.AddChild(refreshButton); + + createFolderButton.Click += CreateFolder_Click; + + // add a message to navigate to a writable folder + var writableMessage = new TextWidget("Please select a writable folder".Localize(), pointSize: theme.DefaultFontSize) + { + TextColor = theme.TextColor, + Margin = new BorderDouble(5, 0), + VAnchor = VAnchor.Center + }; + footerRow.AddChild(writableMessage, 0); + + footerRow.AddChild(new HorizontalSpacer(), 1); + + // change footer in this context + footerRow.HAnchor = HAnchor.Stretch; + footerRow.Margin = 0; libraryNavContext.ContainerChanged += (s, e) => { - createFolderButton.Enabled = libraryNavContext.ActiveContainer is ILibraryWritableContainer; + var writable = libraryNavContext.ActiveContainer is ILibraryWritableContainer; + createFolderButton.Enabled = writable; + refreshButton.Enabled = writable; + writableMessage.Visible = !writable; }; + } - createFolderButton.Name = "Create Folder In Button"; - contentRow.AddChild(createFolderButton); + public override void OnKeyDown(KeyEventArgs keyEvent) + { + if (keyEvent.KeyCode == Keys.F5) + { + librarySelectorWidget.ActiveContainer.Load(); + } - createFolderButton.Click += CreateFolder_Click; + base.OnKeyDown(keyEvent); } private void CreateFolder_Click(object sender, MouseEventArgs e) @@ -108,7 +156,6 @@ namespace MatterHackers.MatterControl { if (librarySelectorWidget.ActiveContainer is ILibraryWritableContainer writableContainer) { - if (!string.IsNullOrEmpty(newName) && writableContainer != null) { diff --git a/MatterControlLib/VersionManagement/WebRequestHandler.cs b/MatterControlLib/VersionManagement/WebRequestHandler.cs index 5799a88ab..6c72098e2 100644 --- a/MatterControlLib/VersionManagement/WebRequestHandler.cs +++ b/MatterControlLib/VersionManagement/WebRequestHandler.cs @@ -261,10 +261,15 @@ namespace MatterHackers.MatterControl.VersionManagement public event EventHandler RequestSucceeded; - public static void Request(string requestUrl, string[] requestStringPairs) + public static void Request(string requestUrl, string[] requestStringPairs, Action requestSucceeded = null) { WebRequestBase tempRequest = new WebRequestBase(); + if (requestSucceeded != null) + { + tempRequest.RequestSucceeded += (s, e) => requestSucceeded(); + } + tempRequest.uri = requestUrl; for (int i = 0; i < requestStringPairs.Length; i += 2) {