mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-03 01:36:31 +02:00
<!-- 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
148 lines
5.0 KiB
C#
148 lines
5.0 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using Microsoft.CommandPalette.Extensions;
|
|
using Microsoft.CommandPalette.Extensions.Toolkit;
|
|
using SamplePagesExtension.Pages;
|
|
using SamplePagesExtension.Pages.IssueSpecificPages;
|
|
|
|
namespace SamplePagesExtension;
|
|
|
|
public partial class SamplesListPage : ListPage
|
|
{
|
|
private readonly IListItem[] _commands = [
|
|
|
|
// List pages
|
|
new ListItem(new SampleListPage())
|
|
{
|
|
Title = "List Page Sample Command",
|
|
Subtitle = "Display a list of items",
|
|
},
|
|
new ListItem(new SampleListPageWithDetails())
|
|
{
|
|
Title = "List Page With Details",
|
|
Subtitle = "A list of items, each with additional details to display",
|
|
},
|
|
new ListItem(new SectionsIndexPage())
|
|
{
|
|
Title = "List Pages With Sections",
|
|
Subtitle = "A list of items, with sections header",
|
|
},
|
|
new ListItem(new SampleUpdatingItemsPage())
|
|
{
|
|
Title = "List page with items that change",
|
|
Subtitle = "The items on the list update themselves in real time",
|
|
},
|
|
new ListItem(new SampleDynamicListPage())
|
|
{
|
|
Title = "Dynamic List Page Command",
|
|
Subtitle = "Changes the list of items in response to the typed query",
|
|
},
|
|
new ListItem(new SampleGridsListPage())
|
|
{
|
|
Title = "Grid views and galleries",
|
|
Subtitle = "Displays items as a gallery",
|
|
},
|
|
new ListItem(new OnLoadPage())
|
|
{
|
|
Title = "Demo of OnLoad/OnUnload",
|
|
Subtitle = "Changes the list of items every time the page is opened / closed",
|
|
},
|
|
new ListItem(new SampleIconPage())
|
|
{
|
|
Title = "Sample Icon Page",
|
|
Subtitle = "A demo of using icons in various ways",
|
|
},
|
|
new ListItem(new SlowListPage())
|
|
{
|
|
Title = "Slow loading list page",
|
|
Subtitle = "A demo of a list page that takes a while to load",
|
|
},
|
|
|
|
// Content pages
|
|
new ListItem(new SampleContentPage())
|
|
{
|
|
Title = "Sample content page",
|
|
Subtitle = "Display mixed forms, markdown, and other types of content",
|
|
},
|
|
new ListItem(new SamplePlainTextContentPage())
|
|
{
|
|
Title = "Sample plain text content page",
|
|
Subtitle = "Display a page of plain text content",
|
|
},
|
|
new ListItem(new SampleImageContentPage())
|
|
{
|
|
Title = "Sample image content page",
|
|
Subtitle = "Display a page with an image",
|
|
},
|
|
new ListItem(new SampleTreeContentPage())
|
|
{
|
|
Title = "Sample nested content",
|
|
Subtitle = "Example of nesting a tree of content",
|
|
},
|
|
new ListItem(new SampleCommentsPage())
|
|
{
|
|
Title = "Sample of nested comments",
|
|
Subtitle = "Demo of using nested trees of content to create a comment thread-like experience",
|
|
Icon = new IconInfo("\uE90A"), // Comment
|
|
},
|
|
new ListItem(new SampleMarkdownPage())
|
|
{
|
|
Title = "Markdown Page Sample Command",
|
|
Subtitle = "Display a page of rendered markdown",
|
|
},
|
|
new ListItem(new SampleMarkdownManyBodies())
|
|
{
|
|
Title = "Markdown with multiple blocks",
|
|
Subtitle = "A page with multiple blocks of rendered markdown",
|
|
},
|
|
new ListItem(new SampleMarkdownDetails())
|
|
{
|
|
Title = "Markdown with details",
|
|
Subtitle = "A page with markdown and details",
|
|
},
|
|
new ListItem(new SampleMarkdownImagesPage())
|
|
{
|
|
Title = "Markdown with images",
|
|
Subtitle = "A page with rendered markdown and images",
|
|
Icon = new IconInfo("\uee71"),
|
|
},
|
|
|
|
// Settings helpers
|
|
new ListItem(new SampleSettingsPage())
|
|
{
|
|
Title = "Sample settings page",
|
|
Subtitle = "A demo of the settings helpers",
|
|
},
|
|
|
|
// Data package samples
|
|
new ListItem(new SampleDataTransferPage())
|
|
{
|
|
Title = "Clipboard and Drag-and-Drop Demo",
|
|
Subtitle = "Demonstrates clipboard integration and drag-and-drop functionality",
|
|
},
|
|
|
|
// Evil edge cases
|
|
// Anything weird that might break the palette - put that in here.
|
|
new ListItem(new EvilSamplesPage())
|
|
{
|
|
Title = "Evil samples",
|
|
Subtitle = "Samples designed to break the palette in many different evil ways",
|
|
},
|
|
new ListItem(new AllIssueSamplesIndexPage())
|
|
{
|
|
Title = "Issue-specific samples",
|
|
Subtitle = "Samples designed to reproduce specific issues",
|
|
}
|
|
];
|
|
|
|
public SamplesListPage()
|
|
{
|
|
Name = "Samples";
|
|
Icon = new IconInfo("\ue946"); // Info
|
|
}
|
|
|
|
public override IListItem[] GetItems() => _commands;
|
|
}
|