// 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.Diagnostics.CodeAnalysis; using Microsoft.PowerToys.Settings.UI.Services; using Microsoft.PowerToys.Settings.UI.ViewModels; using Windows.Data.Json; using Windows.UI.Xaml.Controls; namespace Microsoft.PowerToys.Settings.UI.Views { /// /// Root page. /// public sealed partial class ShellPage : UserControl { /// /// Declaration for the ipc callback function. /// /// message. public delegate void IPCMessageCallback(string msg); /// /// Declaration for the opening oobe window callback function. /// public delegate void OobeOpeningCallback(); /// /// Gets or sets a shell handler to be used to update contents of the shell dynamically from page within the frame. /// public static ShellPage ShellHandler { get; set; } /// /// Gets or sets iPC default callback function. /// public static IPCMessageCallback DefaultSndMSGCallback { get; set; } /// /// Gets or sets iPC callback function for restart as admin. /// public static IPCMessageCallback SndRestartAsAdminMsgCallback { get; set; } /// /// Gets or sets iPC callback function for checking updates. /// public static IPCMessageCallback CheckForUpdatesMsgCallback { get; set; } /// /// Gets or sets callback function for opening oobe window /// public static OobeOpeningCallback OpenOobeWindowCallback { get; set; } /// /// Gets view model. /// public ShellViewModel ViewModel { get; } = new ShellViewModel(); /// /// Gets a collection of functions that handle IPC responses. /// public List> IPCResponseHandleList { get; } = new List>(); public static bool IsElevated { get; set; } public static bool IsUserAnAdmin { get; set; } /// /// Initializes a new instance of the class. /// Shell page constructor. /// public ShellPage() { InitializeComponent(); DataContext = ViewModel; ShellHandler = this; ViewModel.Initialize(shellFrame, navigationView, KeyboardAccelerators); shellFrame.Navigate(typeof(GeneralPage)); } public static int SendDefaultIPCMessage(string msg) { DefaultSndMSGCallback?.Invoke(msg); return 0; } public static int SendCheckForUpdatesIPCMessage(string msg) { CheckForUpdatesMsgCallback?.Invoke(msg); return 0; } public static int SendRestartAdminIPCMessage(string msg) { SndRestartAsAdminMsgCallback?.Invoke(msg); return 0; } /// /// Set Default IPC Message callback function. /// /// delegate function implementation. public static void SetDefaultSndMessageCallback(IPCMessageCallback implementation) { DefaultSndMSGCallback = implementation; } /// /// Set restart as admin IPC callback function. /// /// delegate function implementation. public static void SetRestartAdminSndMessageCallback(IPCMessageCallback implementation) { SndRestartAsAdminMsgCallback = implementation; } /// /// Set check for updates IPC callback function. /// /// delegate function implementation. public static void SetCheckForUpdatesMessageCallback(IPCMessageCallback implementation) { CheckForUpdatesMsgCallback = implementation; } /// /// Set oobe opening callback function /// /// delegate function implementation. public static void SetOpenOobeCallback(OobeOpeningCallback implementation) { OpenOobeWindowCallback = implementation; } public static void SetElevationStatus(bool isElevated) { IsElevated = isElevated; } public static void SetIsUserAnAdmin(bool isAdmin) { IsUserAnAdmin = isAdmin; } public static void Navigate(Type type) { NavigationService.Navigate(type); } public void Refresh() { shellFrame.Navigate(typeof(GeneralPage)); } [SuppressMessage("Usage", "CA1801:Review unused parameters", Justification = "Params are required for event handler signature requirements.")] private void NavigationView_SelectionChanged(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewSelectionChangedEventArgs args) { scrollViewer.ChangeView(null, 0, null, true); } } }