mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-03 09:46:54 +02:00
[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:
1
.github/actions/spell-check/expect.txt
vendored
1
.github/actions/spell-check/expect.txt
vendored
@@ -1006,6 +1006,7 @@ netsh
|
|||||||
newcolor
|
newcolor
|
||||||
NEWDIALOGSTYLE
|
NEWDIALOGSTYLE
|
||||||
NEWFILE
|
NEWFILE
|
||||||
|
NEWFILEHEADER
|
||||||
newitem
|
newitem
|
||||||
newpath
|
newpath
|
||||||
newplus
|
newplus
|
||||||
|
|||||||
@@ -192,12 +192,70 @@ namespace RegistryPreviewUILib
|
|||||||
// reload the current Registry file and update the toolbar accordingly.
|
// reload the current Registry file and update the toolbar accordingly.
|
||||||
UpdateToolBarAndUI(await OpenRegistryFile(_appFileName), true, true);
|
UpdateToolBarAndUI(await OpenRegistryFile(_appFileName), true, true);
|
||||||
|
|
||||||
|
// disable the Save button as it's a new file
|
||||||
saveButton.IsEnabled = false;
|
saveButton.IsEnabled = false;
|
||||||
|
|
||||||
// restore the TextChanged handler
|
// restore the TextChanged handler
|
||||||
MonacoEditor.TextChanged += MonacoEditor_TextChanged;
|
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>
|
/// <summary>
|
||||||
/// Opens the Registry Editor; UAC is handled by the request to open
|
/// Opens the Registry Editor; UAC is handled by the request to open
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ namespace RegistryPreviewUILib
|
|||||||
{
|
{
|
||||||
public sealed partial class RegistryPreviewMainPage : Page
|
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 static SemaphoreSlim _dialogSemaphore = new(1);
|
||||||
private string lastKeyPath;
|
private string lastKeyPath;
|
||||||
|
|
||||||
@@ -77,6 +79,9 @@ namespace RegistryPreviewUILib
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
// Set default value for empty opening
|
||||||
|
await MonacoEditor.SetTextAsync(NEWFILEHEADER);
|
||||||
|
|
||||||
// restore TextChanged handler to make for clean UI
|
// restore TextChanged handler to make for clean UI
|
||||||
MonacoEditor.TextChanged += MonacoEditor_TextChanged;
|
MonacoEditor.TextChanged += MonacoEditor_TextChanged;
|
||||||
|
|
||||||
@@ -167,6 +172,25 @@ namespace RegistryPreviewUILib
|
|||||||
ChangeCursor(gridPreview, false);
|
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>
|
/// <summary>
|
||||||
/// Parses the text that is passed in, which should be the same text that's in editor
|
/// Parses the text that is passed in, which should be the same text that's in editor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -55,6 +55,15 @@
|
|||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
DefaultLabelPosition="Right">
|
DefaultLabelPosition="Right">
|
||||||
|
|
||||||
|
<AppBarButton
|
||||||
|
x:Name="newButton"
|
||||||
|
x:Uid="NewButton"
|
||||||
|
Click="NewButton_Click"
|
||||||
|
Icon="{ui:FontIcon Glyph=}">
|
||||||
|
<AppBarButton.KeyboardAccelerators>
|
||||||
|
<KeyboardAccelerator Key="N" Modifiers="Control" />
|
||||||
|
</AppBarButton.KeyboardAccelerators>
|
||||||
|
</AppBarButton>
|
||||||
<AppBarButton
|
<AppBarButton
|
||||||
x:Name="openButton"
|
x:Name="openButton"
|
||||||
x:Uid="OpenButton"
|
x:Uid="OpenButton"
|
||||||
|
|||||||
@@ -297,4 +297,7 @@
|
|||||||
<value>Copy value with key path</value>
|
<value>Copy value with key path</value>
|
||||||
<comment>Like "Copy item"</comment>
|
<comment>Like "Copy item"</comment>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="NewButton.Label" xml:space="preserve">
|
||||||
|
<value>New</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
Reference in New Issue
Block a user