[RegPreview] Init with header and add NEW button (#37626)

* default value

* add new button

* fix tool tip

* update button symbol

* feedback changes

* spellcheck
This commit is contained in:
Heiko
2025-04-21 10:11:07 +02:00
committed by GitHub
parent 90723d5b12
commit d314fa075e
5 changed files with 95 additions and 0 deletions

View File

@@ -192,12 +192,70 @@ namespace RegistryPreviewUILib
// 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;
}
/// <summary>
/// Resets the editor content
/// </summary>
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;
}
/// <summary>
/// Opens the Registry Editor; UAC is handled by the request to open
/// </summary>

View File

@@ -22,6 +22,8 @@ namespace RegistryPreviewUILib
{
public sealed partial class RegistryPreviewMainPage : Page
{
private const string NEWFILEHEADER = "Windows Registry Editor Version 5.00\r\n\r\n";
private static SemaphoreSlim _dialogSemaphore = new(1);
private string lastKeyPath;
@@ -77,6 +79,9 @@ namespace RegistryPreviewUILib
}
catch
{
// Set default value for empty opening
await MonacoEditor.SetTextAsync(NEWFILEHEADER);
// restore TextChanged handler to make for clean UI
MonacoEditor.TextChanged += MonacoEditor_TextChanged;
@@ -167,6 +172,25 @@ namespace RegistryPreviewUILib
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(NEWFILEHEADER);
// Reset the cursor but leave editor disabled as no content got loaded
ChangeCursor(gridPreview, false);
}
/// <summary>
/// Parses the text that is passed in, which should be the same text that's in editor
/// </summary>

View File

@@ -55,6 +55,15 @@
HorizontalAlignment="Left"
DefaultLabelPosition="Right">
<AppBarButton
x:Name="newButton"
x:Uid="NewButton"
Click="NewButton_Click"
Icon="{ui:FontIcon Glyph=&#xe7c3;}">
<AppBarButton.KeyboardAccelerators>
<KeyboardAccelerator Key="N" Modifiers="Control" />
</AppBarButton.KeyboardAccelerators>
</AppBarButton>
<AppBarButton
x:Name="openButton"
x:Uid="OpenButton"

View File

@@ -297,4 +297,7 @@
<value>Copy value with key path</value>
<comment>Like "Copy item"</comment>
</data>
<data name="NewButton.Label" xml:space="preserve">
<value>New</value>
</data>
</root>