diff --git a/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Events.cs b/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Events.cs index 0df3a5c0f5ed..20009533c1d5 100644 --- a/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Events.cs +++ b/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Events.cs @@ -192,12 +192,70 @@ private async void RefreshButton_Click(object sender, RoutedEventArgs e) // reload the current Registry file and update the toolbar accordingly. UpdateToolBarAndUI(await OpenRegistryFile(_appFileName), true, true); + // disable the Save button as it's a new file saveButton.IsEnabled = false; // restore the TextChanged handler MonacoEditor.TextChanged += MonacoEditor_TextChanged; } + /// + /// Resets the editor content + /// + private async void NewButton_Click(object sender, RoutedEventArgs e) + { + // Check to see if the current file has been saved + if (saveButton.IsEnabled) + { + ContentDialog contentDialog = new ContentDialog() + { + Title = resourceLoader.GetString("YesNoCancelDialogTitle"), + Content = resourceLoader.GetString("YesNoCancelDialogContent"), + PrimaryButtonText = resourceLoader.GetString("YesNoCancelDialogPrimaryButtonText"), + SecondaryButtonText = resourceLoader.GetString("YesNoCancelDialogSecondaryButtonText"), + CloseButtonText = resourceLoader.GetString("YesNoCancelDialogCloseButtonText"), + DefaultButton = ContentDialogButton.Primary, + }; + + // Use this code to associate the dialog to the appropriate AppWindow by setting + // the dialog's XamlRoot to the same XamlRoot as an element that is already present in the AppWindow. + if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8)) + { + contentDialog.XamlRoot = this.Content.XamlRoot; + } + + ContentDialogResult contentDialogResult = await contentDialog.ShowAsync(); + switch (contentDialogResult) + { + case ContentDialogResult.Primary: + // Save, then continue the file open + SaveFile(); + break; + case ContentDialogResult.Secondary: + // Don't save and continue the file open! + saveButton.IsEnabled = false; + break; + default: + // Don't open the new file! + return; + } + } + + // mute the TextChanged handler to make for clean UI + MonacoEditor.TextChanged -= MonacoEditor_TextChanged; + + // reset editor, file info and ui. + _appFileName = string.Empty; + ResetEditorAndFile(); + + // restore the TextChanged handler + MonacoEditor.TextChanged += MonacoEditor_TextChanged; + + // disable buttons that do not make sense + saveButton.IsEnabled = false; + refreshButton.IsEnabled = false; + } + /// /// Opens the Registry Editor; UAC is handled by the request to open /// diff --git a/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Utilities.cs b/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Utilities.cs index b8fc6e4e1d9a..e7c8328f3ca1 100644 --- a/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Utilities.cs +++ b/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.Utilities.cs @@ -77,6 +77,9 @@ private async Task OpenRegistryFile(string filename) } catch { + // Set default value for empty opening + await MonacoEditor.SetTextAsync("Windows Registry Editor Version 5.00\r\n\r\n"); + // restore TextChanged handler to make for clean UI MonacoEditor.TextChanged += MonacoEditor_TextChanged; @@ -167,6 +170,25 @@ private void RefreshRegistryFile() ChangeCursor(gridPreview, false); } + private async void ResetEditorAndFile() + { + // Disable parts of the UI that can cause trouble when loading + ChangeCursor(gridPreview, true); + + // clear the treeView and dataGrid no matter what + treeView.RootNodes.Clear(); + ClearTable(); + + // update the current window's title with the current filename + _updateWindowTitleFunction(string.Empty); + + // Set default value for empty opening + await MonacoEditor.SetTextAsync("Windows Registry Editor Version 5.00\r\n\r\n"); + + // Reset the cursor but leave editor disabled as no content got loaded + ChangeCursor(gridPreview, false); + } + /// /// Parses the text that is passed in, which should be the same text that's in editor /// diff --git a/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.xaml b/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.xaml index a48222e9aa8f..158a0c4e5c49 100644 --- a/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.xaml +++ b/src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewMainPage.xaml @@ -73,6 +73,15 @@ + + + + + Copy value with key path Like "Copy item" + + New + \ No newline at end of file