mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-03 09:46:54 +02:00
CmdPal: Plain text viewer and image viewer IContent (#43964)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This PR introduces new types of IContent: - Plain text content – simple and straightforward, with options to switch between UI and monospace fonts and toggle word wrap. - It's super safe to display any random text content without having to worry about escaping the pesky markdown. - Image viewer content – a more polished way to display images: - When placed in the ContentPage, the component automatically resizes to fit the viewport, ensuring the entire image is visible at once. - Images can be opened in a built-in mini-viewer that lets you view, pan, and zoom without leaving the Command Palette. (Doing this directly on the page proved to be a UX and development headache.) Fully keyboard-controllable, so there’s no need to take your hands off the keys. ## Pictures? Pictures! Plain text content: <img width="960" height="604" alt="image" src="https://github.com/user-attachments/assets/a4ec36f3-2f7f-4a2a-a646-53056c512023" /> Image viewer content: <img width="939" height="605" alt="image" src="https://github.com/user-attachments/assets/c87f5726-8cd0-4015-b2d9-f1457fa1ec96" /> https://github.com/user-attachments/assets/915cd9d2-e4e3-4baf-8df6-6a328a3592ba <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #41038 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
@@ -26,36 +26,36 @@
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
@@ -958,13 +958,13 @@ Right-click to remove the key combination, thereby deactivating the shortcut.</v
|
||||
<data name="Dock_AddBand_NoCommandsAvailable.Text" xml:space="preserve">
|
||||
<value>All available bands are already pinned.</value>
|
||||
</data>
|
||||
<data name="Dock_Pin_Instruction.Text" xml:space="preserve">
|
||||
<data name="Dock_Pin_Instruction.Text" xml:space="preserve">
|
||||
<value>To pin commands, extensions or apps, use the Pin to Dock command in Command Palette.</value>
|
||||
</data>
|
||||
<data name="Dock_Bands_Header.Text" xml:space="preserve">
|
||||
<data name="Dock_Bands_Header.Text" xml:space="preserve">
|
||||
<value>Bands</value>
|
||||
</data>
|
||||
<data name="Dock_AddBand_StartTooltip.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
</data>
|
||||
<data name="Dock_AddBand_StartTooltip.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Add band to start</value>
|
||||
</data>
|
||||
<data name="Dock_AddBand_CenterTooltip.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
@@ -987,7 +987,79 @@ Right-click to remove the key combination, thereby deactivating the shortcut.</v
|
||||
</data>
|
||||
<data name="SettingsPage_NewInfoBadge.Text" xml:space="preserve">
|
||||
<value>NEW</value>
|
||||
<comment>Must be all caps</comment>
|
||||
<comment>Must be all caps</comment>
|
||||
</data>
|
||||
<data name="ImageContentViewer_ZoomAndScroll.Text" xml:space="preserve">
|
||||
<value>Zoom & Scroll</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_OpenZoomViewer.Text" xml:space="preserve">
|
||||
<value>Open image viewer</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_CopyImage.Text" xml:space="preserve">
|
||||
<value>Copy image</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomIn.Content" xml:space="preserve">
|
||||
<value>Zoom in</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomOut.Content" xml:space="preserve">
|
||||
<value>Zoom out</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomToFit.Content" xml:space="preserve">
|
||||
<value>Zoom to fit</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_Copy.Text" xml:space="preserve">
|
||||
<value>Copy</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_SelectAll.Text" xml:space="preserve">
|
||||
<value>Select all</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_WordWrap.Text" xml:space="preserve">
|
||||
<value>Word wrap</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_MonospaceFont.Text" xml:space="preserve">
|
||||
<value>Monospace font</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_ZoomIn.Text" xml:space="preserve">
|
||||
<value>Zoom in</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_ZoomOut.Text" xml:space="preserve">
|
||||
<value>Zoom out</value>
|
||||
</data>
|
||||
<data name="PlainTextContentViewer_ResetZoom.Text" xml:space="preserve">
|
||||
<value>Reset zoom</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_Toast_CopiedImage" xml:space="preserve">
|
||||
<value>Copied image to clipboard</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_Toast_CopiedLink" xml:space="preserve">
|
||||
<value>Copied link to clipboard</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomInButton.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Zoom in</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomInButton.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Zoom in (Ctrl+Plus key)</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomOutButton.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Zoom out</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomOutButton.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Zoom out (Ctrl+Minus key)</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomToFitButton.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Zoom to fit</value>
|
||||
</data>
|
||||
<data name="ImageViewer_ZoomToFitButton.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Zoom to fit (Ctrl+0)</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_OpenZoomOverlayButton.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Open image viewer</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_OpenZoomOverlayButton.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Open image viewer</value>
|
||||
</data>
|
||||
<data name="ImageContentViewer_CopyImageUri.Text" xml:space="preserve">
|
||||
<value>Copy image link</value>
|
||||
</data>
|
||||
<data name="PinToDock_DialogTitle" xml:space="preserve">
|
||||
<value>Pin to Dock</value>
|
||||
|
||||
Reference in New Issue
Block a user