Files
PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Panels/MouseJumpPanel.xaml.cs
Michael Clayton 53212188b7 [Mouse Jump] Customisable appearance - borders, margins, colours, etc - final part (#35521)
* [MouseJump] move Mouse Jump settings into separate control (#27511)

* [MouseJump] added Mouse Jump style controls to Settings UI (#27511)

* [MouseJump] added Mouse Jump style controls to Settings UI (#27511)

* [MouseJump] removing unused MouseJumpUI code (#27511)

* [MouseJump] whitespace (#27511)

* [MouseJump] fix spellcheck (#27511)

* [MouseJump] enabled "Copy to custom style" (#27511)

* [MouseJump] fixing build (internal members -> public) (#27511)

* [MouseJump] remove unused "using"s (#27511)

* [MouseJump] use custom styles in preview image (#27511)

* [MouseJump] fixing failing test (#27511)

* [MouseJump] fixing failing test (#27511)

* [MouseJump] fixing failing test (#27511)

* [MouseJump] fixing failing test (#27511)

* [MouseJump] delinting to trigger a build (#27511)

* [MouseJump] updated settings preview image ("browser" header) (#27511)

* [MouseJump] upgrade default "custom" style settings in config (#27511)

* [MouseJump] fixed a glitch in settings upgrade (#27511)

* [MouseJump] fixed spell checker (#27511)

* [MouseJump] typo in resource strings (image -> images) (#27511)

* Remove unused include
2024-11-26 15:37:59 +00:00

160 lines
8.2 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;
using System.Collections.Generic;
using System.Linq;
using CommunityToolkit.WinUI;
using CommunityToolkit.WinUI.Controls;
using Microsoft.PowerToys.Settings.UI.ViewModels;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using MouseJump.Common.Helpers;
using MouseJump.Common.Models.Settings;
namespace Microsoft.PowerToys.Settings.UI.Panels
{
public sealed partial class MouseJumpPanel : UserControl
{
internal MouseUtilsViewModel ViewModel { get; set; }
public MouseJumpPanel()
{
InitializeComponent();
}
private void PreviewImage_Loaded(object sender, RoutedEventArgs e)
{
bool TryFindFrameworkElement(SettingsCard settingsCard, string partName, out FrameworkElement result)
{
result = settingsCard.FindDescendants()
.OfType<FrameworkElement>()
.FirstOrDefault(
x => x.Name == partName);
return result is not null;
}
/*
apply a variation of the "Left" VisualState for SettingsCards
to center the preview image in the true center of the card
see https://github.com/CommunityToolkit/Windows/blob/9c7642ff35eaaa51a404f9bcd04b10c7cf851921/components/SettingsControls/src/SettingsCard/SettingsCard.xaml#L334-L347
*/
var settingsCard = (SettingsCard)sender;
var partNames = new List<string>
{
"PART_HeaderIconPresenterHolder",
"PART_DescriptionPresenter",
"PART_HeaderPresenter",
"PART_ActionIconPresenter",
};
foreach (var partName in partNames)
{
if (!TryFindFrameworkElement(settingsCard, partName, out var element))
{
continue;
}
element.Visibility = Visibility.Collapsed;
}
if (TryFindFrameworkElement(settingsCard, "PART_ContentPresenter", out var content))
{
Grid.SetRow(content, 1);
Grid.SetColumn(content, 1);
content.HorizontalAlignment = HorizontalAlignment.Center;
}
}
private void PreviewTypeSetting_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// hide or display controls based on whether the "Custom" preview type is selected
var selectedPreviewType = this.GetSelectedPreviewType();
var customPreviewTypeSelected = selectedPreviewType == PreviewType.Custom;
this.CopyStyleToCustom.IsEnabled = !customPreviewTypeSelected;
var customControlVisibility = customPreviewTypeSelected
? Visibility.Visible
: Visibility.Collapsed;
this.MouseUtils_MouseJump_BackgroundColor1.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_BackgroundColor2.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_BorderThickness.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_BorderColor.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_Border3dDepth.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_BorderPadding.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_BezelThickness.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_BezelColor.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_Bezel3dDepth.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_ScreenMargin.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_ScreenColor1.Visibility = customControlVisibility;
this.MouseUtils_MouseJump_ScreenColor2.Visibility = customControlVisibility;
}
private /* async */ void CopyStyleToCustom_Click(object sender, RoutedEventArgs e)
{
/*
var resourceLoader = ResourceLoaderInstance.ResourceLoader;
var messageBox = this.MouseUtils_MouseJump_CopyToCustomStyle_MessageBox;
messageBox.Title = resourceLoader.GetString("MouseUtils_MouseJump_CopyToCustomStyle_MessageBox_Title");
messageBox.PrimaryButtonText = resourceLoader.GetString("MouseUtils_MouseJump_CopyToCustomStyle_MessageBox_PrimaryButtonText");
messageBox.PrimaryButtonCommand = new RelayCommand(this.MouseUtils_MouseJump_CopyToCustomStyle_MessageBox_PrimaryButtonCommand);
// await messageBox.ShowAsync();
*/
this.MouseUtils_MouseJump_CopyToCustomStyle_MessageBox_PrimaryButtonCommand();
}
private void MouseUtils_MouseJump_CopyToCustomStyle_MessageBox_PrimaryButtonCommand()
{
var selectedPreviewType = this.GetSelectedPreviewType();
var selectedPreviewStyle = selectedPreviewType switch
{
PreviewType.Compact => StyleHelper.CompactPreviewStyle,
PreviewType.Bezelled => StyleHelper.BezelledPreviewStyle,
PreviewType.Custom => StyleHelper.BezelledPreviewStyle,
_ => throw new InvalidOperationException(),
};
// convert the color into a string.
// note that we have to replace Named and System colors with their ARGB equivalents
// so that serialization returns an ARGB string rather than the Named or System color *name*.
this.ViewModel.MouseJumpPreviewType = selectedPreviewType.ToString();
this.ViewModel.MouseJumpBackgroundColor1 = ConfigHelper.SerializeToConfigColorString(
ConfigHelper.ToUnnamedColor(selectedPreviewStyle.CanvasStyle.BackgroundStyle.Color1));
this.ViewModel.MouseJumpBackgroundColor2 = ConfigHelper.SerializeToConfigColorString(
ConfigHelper.ToUnnamedColor(selectedPreviewStyle.CanvasStyle.BackgroundStyle.Color2));
this.ViewModel.MouseJumpBorderThickness = (int)selectedPreviewStyle.CanvasStyle.BorderStyle.Top;
this.ViewModel.MouseJumpBorderColor = ConfigHelper.SerializeToConfigColorString(
ConfigHelper.ToUnnamedColor(selectedPreviewStyle.CanvasStyle.BorderStyle.Color));
this.ViewModel.MouseJumpBorder3dDepth = (int)selectedPreviewStyle.CanvasStyle.BorderStyle.Depth;
this.ViewModel.MouseJumpBorderPadding = (int)selectedPreviewStyle.CanvasStyle.PaddingStyle.Top;
this.ViewModel.MouseJumpBezelThickness = (int)selectedPreviewStyle.ScreenStyle.BorderStyle.Top;
this.ViewModel.MouseJumpBezelColor = ConfigHelper.SerializeToConfigColorString(
ConfigHelper.ToUnnamedColor(selectedPreviewStyle.ScreenStyle.BorderStyle.Color));
this.ViewModel.MouseJumpBezel3dDepth = (int)selectedPreviewStyle.ScreenStyle.BorderStyle.Depth;
this.ViewModel.MouseJumpScreenMargin = (int)selectedPreviewStyle.ScreenStyle.MarginStyle.Top;
this.ViewModel.MouseJumpScreenColor1 = ConfigHelper.SerializeToConfigColorString(
ConfigHelper.ToUnnamedColor(selectedPreviewStyle.ScreenStyle.BackgroundStyle.Color1));
this.ViewModel.MouseJumpScreenColor2 = ConfigHelper.SerializeToConfigColorString(
ConfigHelper.ToUnnamedColor(selectedPreviewStyle.ScreenStyle.BackgroundStyle.Color2));
}
private PreviewType GetSelectedPreviewType()
{
// this needs to match the order of the SegmentedItems in the "Preview Type" Segmented control
var previewTypeOrder = new PreviewType[]
{
PreviewType.Compact, PreviewType.Bezelled, PreviewType.Custom,
};
var selectedIndex = this.PreviewTypeSetting.SelectedIndex;
if ((selectedIndex < 0) || (selectedIndex >= previewTypeOrder.Length))
{
throw new InvalidOperationException();
}
return previewTypeOrder[selectedIndex];
}
}
}