// 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. #nullable enable using System.Collections.ObjectModel; using System.Linq; using Microsoft.PowerToys.Settings.UI.Helpers; using Microsoft.PowerToys.Settings.UI.Library; using Microsoft.PowerToys.Settings.UI.ViewModels; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using PowerDisplay.Common.Models; namespace Microsoft.PowerToys.Settings.UI.Views { /// /// Dialog for creating/editing PowerDisplay profiles /// public sealed partial class ProfileEditorDialog : ContentDialog { public ProfileEditorViewModel ViewModel { get; private set; } public PowerDisplayProfile? ResultProfile { get; private set; } public ProfileEditorDialog(ObservableCollection availableMonitors, string defaultName = "") { this.InitializeComponent(); ViewModel = new ProfileEditorViewModel(availableMonitors, defaultName); // Set localized strings for ContentDialog var resourceLoader = ResourceLoaderInstance.ResourceLoader; Title = resourceLoader.GetString("PowerDisplay_ProfileEditor_Title"); PrimaryButtonText = resourceLoader.GetString("PowerDisplay_Dialog_Save"); CloseButtonText = resourceLoader.GetString("PowerDisplay_Dialog_Cancel"); } private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { if (ViewModel.CanSave) { ResultProfile = ViewModel.CreateProfile(); } } private void ContentDialog_CloseButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { ResultProfile = null; } /// /// Pre-fill the dialog with existing profile data /// public void PreFillProfile(PowerDisplayProfile profile) { if (profile == null || ViewModel == null) { return; } // Set profile name ViewModel.ProfileName = profile.Name; // Pre-fill monitor settings from existing profile foreach (var monitorSetting in profile.MonitorSettings) { var monitorItem = ViewModel.Monitors.FirstOrDefault(m => m.Monitor.Id == monitorSetting.MonitorId); if (monitorItem != null) { monitorItem.IsSelected = true; // Set brightness if included in profile if (monitorSetting.Brightness.HasValue) { monitorItem.IncludeBrightness = true; monitorItem.Brightness = monitorSetting.Brightness.Value; } // Set color temperature if included in profile if (monitorSetting.ColorTemperatureVcp.HasValue) { monitorItem.IncludeColorTemperature = true; monitorItem.ColorTemperature = monitorSetting.ColorTemperatureVcp.Value; } // Set contrast if included in profile if (monitorSetting.Contrast.HasValue) { monitorItem.IncludeContrast = true; monitorItem.Contrast = monitorSetting.Contrast.Value; } // Set volume if included in profile if (monitorSetting.Volume.HasValue) { monitorItem.IncludeVolume = true; monitorItem.Volume = monitorSetting.Volume.Value; } } } } } }