mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 19:27:56 +01: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 changes the positioning of Label and Description from ToggleSetting, making it more similar to `CheckBoxWithDescriptionControl` used in Settings. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #39283 - [ ] **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 I initially tried solving this by using a Regex on the card JSON to replace all `Input.Toggle` elements with the new `ColumnSet` structure. However, since `ToggleSetting.cs` already serves as a wrapper for creating an Input.Toggle, I decided it was more effective to update the declaration inside the `ToDictionary()` method directly. ### This is the result: <img width="797" height="531" alt="Screenshot 2025-11-11 120426" src="https://github.com/user-attachments/assets/2ae5d15d-699e-45ef-ab52-afd653d82111" /> <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
115 lines
3.8 KiB
C#
115 lines
3.8 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 System.Text.Json;
|
|
using System.Text.Json.Nodes;
|
|
|
|
namespace Microsoft.CommandPalette.Extensions.Toolkit;
|
|
|
|
public sealed class ToggleSetting : Setting<bool>
|
|
{
|
|
private ToggleSetting()
|
|
: base()
|
|
{
|
|
}
|
|
|
|
public ToggleSetting(string key, bool defaultValue)
|
|
: base(key, defaultValue)
|
|
{
|
|
}
|
|
|
|
public ToggleSetting(string key, string label, string description, bool defaultValue)
|
|
: base(key, label, description, defaultValue)
|
|
{
|
|
}
|
|
|
|
public override Dictionary<string, object> ToDictionary()
|
|
{
|
|
var items = new List<Dictionary<string, object>>();
|
|
|
|
if (!string.IsNullOrEmpty(Label))
|
|
{
|
|
items.Add(
|
|
new()
|
|
{
|
|
{ "type", "TextBlock" },
|
|
{ "text", Label },
|
|
{ "wrap", true },
|
|
});
|
|
}
|
|
|
|
if (!(string.IsNullOrEmpty(Description) || string.Equals(Description, Label, StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
items.Add(
|
|
new()
|
|
{
|
|
{ "type", "TextBlock" },
|
|
{ "text", Description },
|
|
{ "isSubtle", true },
|
|
{ "size", "Small" },
|
|
{ "spacing", "Small" },
|
|
{ "wrap", true },
|
|
});
|
|
}
|
|
|
|
return new()
|
|
{
|
|
{ "type", "ColumnSet" },
|
|
{
|
|
"columns", new List<Dictionary<string, object>>
|
|
{
|
|
new()
|
|
{
|
|
{ "type", "Column" },
|
|
{ "width", "20px" },
|
|
{
|
|
"items", new List<Dictionary<string, object>>
|
|
{
|
|
new()
|
|
{
|
|
{ "type", "Input.Toggle" },
|
|
{ "title", " " },
|
|
{ "id", Key },
|
|
{ "value", JsonSerializer.Serialize(Value, JsonSerializationContext.Default.Boolean) },
|
|
{ "isRequired", IsRequired },
|
|
{ "errorMessage", ErrorMessage },
|
|
},
|
|
}
|
|
},
|
|
{ "verticalContentAlignment", "Center" },
|
|
},
|
|
new()
|
|
{
|
|
{ "type", "Column" },
|
|
{ "width", "stretch" },
|
|
{ "items", items },
|
|
{ "verticalContentAlignment", "Center" },
|
|
},
|
|
}
|
|
},
|
|
{ "spacing", "Medium" },
|
|
};
|
|
}
|
|
|
|
public static ToggleSetting LoadFromJson(JsonObject jsonObject) => new() { Value = jsonObject["value"]?.GetValue<bool>() ?? false };
|
|
|
|
public override void Update(JsonObject payload)
|
|
{
|
|
// If the key doesn't exist in the payload, don't do anything
|
|
if (payload[Key] is not null)
|
|
{
|
|
// Adaptive cards returns boolean values as a string "true"/"false", cause of course.
|
|
var strFromJson = payload[Key]?.GetValue<string>() ?? string.Empty;
|
|
var val = strFromJson switch { "true" => true, "false" => false, _ => false };
|
|
Value = val;
|
|
}
|
|
}
|
|
|
|
public override string ToState()
|
|
{
|
|
var adaptiveCardsUsesStringsForBools = Value ? "true" : "false";
|
|
return $"\"{Key}\": \"{adaptiveCardsUsesStringsForBools}\"";
|
|
}
|
|
}
|