Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
HelpWindow.xaml.cs319 linesDownload Raw Back to HelpWindow
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Globalization;5using System.Management.Automation;6using System.Windows;7using System.Windows.Documents;8using System.Windows.Input;9 10using Microsoft.Management.UI.Internal;11 12namespace Microsoft.Management.UI13{14    /// <summary>15    /// A window displaying help content and allowing search.16    /// </summary>17    public partial class HelpWindow : Window18    {19        /// <summary>20        /// Minimum zoom in the slider.21        /// </summary>22        public static double MinimumZoom23        {24            get25            {26                return 20;27            }28        }29 30        /// <summary>31        /// Maximum zoom in the slider.32        /// </summary>33        public static double MaximumZoom34        {35            get36            {37                return 300;38            }39        }40 41        /// <summary>42        /// Zoom interval.43        /// </summary>44        public static double ZoomInterval45        {46            get47            {48                return 10;49            }50        }51 52        /// <summary>53        /// The ViewModel for the dialog.54        /// </summary>55        private readonly HelpViewModel viewModel;56 57        /// <summary>58        /// Initializes a new instance of the HelpWindow class.59        /// </summary>60        /// <param name="helpObject">The object with help information.</param>61        public HelpWindow(PSObject helpObject)62        {63            InitializeComponent();64            this.viewModel = new HelpViewModel(helpObject, this.DocumentParagraph);65            CommonHelper.SetStartingPositionAndSize(66                this,67                HelpWindowSettings.Default.HelpWindowTop,68                HelpWindowSettings.Default.HelpWindowLeft,69                HelpWindowSettings.Default.HelpWindowWidth,70                HelpWindowSettings.Default.HelpWindowHeight,71                double.Parse((string)HelpWindowSettings.Default.Properties["HelpWindowWidth"].DefaultValue, CultureInfo.InvariantCulture.NumberFormat),72                double.Parse((string)HelpWindowSettings.Default.Properties["HelpWindowHeight"].DefaultValue, CultureInfo.InvariantCulture.NumberFormat),73                HelpWindowSettings.Default.HelpWindowMaximized);74 75            this.ReadZoomUserSetting();76 77            this.viewModel.PropertyChanged += this.ViewModel_PropertyChanged;78            this.DataContext = this.viewModel;79 80            this.Loaded += this.HelpDialog_Loaded;81            this.Closed += this.HelpDialog_Closed;82        }83 84        /// <summary>85        /// Handles the mouse wheel to zoom in/out.86        /// </summary>87        /// <param name="e">Event arguments.</param>88        protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)89        {90            if (Keyboard.Modifiers != ModifierKeys.Control)91            {92                return;93            }94 95            if (e.Delta > 0)96            {97                this.viewModel.ZoomIn();98                e.Handled = true;99            }100            else101            {102                this.viewModel.ZoomOut();103                e.Handled = true;104            }105        }106 107        /// <summary>108        /// Handles key down to fix the Page/Douwn going to end of help issue109        /// And to implement some additional shortcuts like Ctrl+F and ZoomIn/ZoomOut.110        /// </summary>111        /// <param name="e">Event arguments.</param>112        protected override void OnPreviewKeyDown(KeyEventArgs e)113        {114            if (Keyboard.Modifiers == ModifierKeys.None)115            {116                if (e.Key == Key.PageUp)117                {118                    this.Scroll.PageUp();119                    e.Handled = true;120                    return;121                }122 123                if (e.Key == Key.PageDown)124                {125                    this.Scroll.PageDown();126                    e.Handled = true;127                    return;128                }129            }130 131            if (Keyboard.Modifiers == ModifierKeys.Control)132            {133                this.HandleZoomInAndZoomOut(e);134                if (e.Handled)135                {136                    return;137                }138 139                if (e.Key == Key.F)140                {141                    this.Find.Focus();142                    e.Handled = true;143                    return;144                }145            }146 147            if (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Shift))148            {149                this.HandleZoomInAndZoomOut(e);150            }151        }152 153        /// <summary>154        /// Reads the zoom part of the user settings.155        /// </summary>156        private void ReadZoomUserSetting()157        {158            if (HelpWindowSettings.Default.HelpZoom < HelpWindow.MinimumZoom || HelpWindowSettings.Default.HelpZoom > HelpWindow.MaximumZoom)159            {160                HelpWindowSettings.Default.HelpZoom = 100;161            }162 163            this.viewModel.Zoom = HelpWindowSettings.Default.HelpZoom;164        }165 166        /// <summary>167        /// Handles Zoom in and Zoom out keys.168        /// </summary>169        /// <param name="e">Event arguments.</param>170        private void HandleZoomInAndZoomOut(KeyEventArgs e)171        {172            if (e.Key == Key.OemPlus || e.Key == Key.Add)173            {174                this.viewModel.ZoomIn();175                e.Handled = true;176            }177 178            if (e.Key == Key.OemMinus || e.Key == Key.Subtract)179            {180                this.viewModel.ZoomOut();181                e.Handled = true;182            }183        }184 185        /// <summary>186        /// Listens to changes in the zoom in order to update the user settings.187        /// </summary>188        /// <param name="sender">Event sender.</param>189        /// <param name="e">Event arguments.</param>190        private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)191        {192            if (e.PropertyName == "Zoom")193            {194                HelpWindowSettings.Default.HelpZoom = this.viewModel.Zoom;195            }196        }197 198        /// <summary>199        /// Saves the user settings.200        /// </summary>201        /// <param name="sender">Event sender.</param>202        /// <param name="e">Event arguments.</param>203        private void HelpDialog_Closed(object sender, System.EventArgs e)204        {205            HelpWindowSettings.Default.Save();206        }207 208        /// <summary>209        /// Updates the user setting with window state.210        /// </summary>211        /// <param name="sender">Event sender.</param>212        /// <param name="e">Event arguments.</param>213        private void HelpDialog_StateChanged(object sender, System.EventArgs e)214        {215            HelpWindowSettings.Default.HelpWindowMaximized = this.WindowState == WindowState.Maximized;216        }217 218        /// <summary>219        /// Sets the positions from user settings and start monitoring position changes.220        /// </summary>221        /// <param name="sender">Event sender.</param>222        /// <param name="e">Event arguments.</param>223        private void HelpDialog_Loaded(object sender, RoutedEventArgs e)224        {225            this.StateChanged += this.HelpDialog_StateChanged;226            this.LocationChanged += this.HelpDialog_LocationChanged;227            this.SizeChanged += this.HelpDialog_SizeChanged;228        }229 230        /// <summary>231        /// Saves size changes in user settings.232        /// </summary>233        /// <param name="sender">Event sender.</param>234        /// <param name="e">Event arguments.</param>235        private void HelpDialog_SizeChanged(object sender, SizeChangedEventArgs e)236        {237            HelpWindowSettings.Default.HelpWindowWidth = this.Width;238            HelpWindowSettings.Default.HelpWindowHeight = this.Height;239        }240 241        /// <summary>242        /// Saves position changes in user settings.243        /// </summary>244        /// <param name="sender">Event sender.</param>245        /// <param name="e">Event arguments.</param>246        private void HelpDialog_LocationChanged(object sender, System.EventArgs e)247        {248            HelpWindowSettings.Default.HelpWindowTop = this.Top;249            HelpWindowSettings.Default.HelpWindowLeft = this.Left;250        }251 252        /// <summary>253        /// Called when the settings button is clicked.254        /// </summary>255        /// <param name="sender">Event sender.</param>256        /// <param name="e">Event arguments.</param>257        private void Settings_Click(object sender, RoutedEventArgs e)258        {259            SettingsDialog settings = new SettingsDialog();260            settings.Owner = this;261 262            settings.ShowDialog();263 264            if (settings.DialogResult == true)265            {266                this.viewModel.HelpBuilder.AddTextToParagraphBuilder();267                this.viewModel.Search();268            }269        }270 271        /// <summary>272        /// Called when the Previous button is clicked.273        /// </summary>274        /// <param name="sender">Event sender.</param>275        /// <param name="e">Event arguments.</param>276        private void PreviousMatch_Click(object sender, RoutedEventArgs e)277        {278            this.MoveToNextMatch(false);279        }280 281        /// <summary>282        /// Called when the Next button is clicked.283        /// </summary>284        /// <param name="sender">Event sender.</param>285        /// <param name="e">Event arguments.</param>286        private void NextMatch_Click(object sender, RoutedEventArgs e)287        {288            this.MoveToNextMatch(true);289        }290 291        /// <summary>292        /// Moves to the previous or next match.293        /// </summary>294        /// <param name="forward">True for forward false for backwards.</param>295        private void MoveToNextMatch(bool forward)296        {297            TextPointer caretPosition = this.HelpText.CaretPosition;298            Run nextRun = this.viewModel.Searcher.MoveAndHighlightNextNextMatch(forward, caretPosition);299            this.MoveToRun(nextRun);300        }301 302        /// <summary>303        /// Moves to the caret and brings the view to the <paramref name="run"/>.304        /// </summary>305        /// <param name="run">Run to move to.</param>306        private void MoveToRun(Run run)307        {308            if (run == null)309            {310                return;311            }312 313            run.BringIntoView();314            this.HelpText.CaretPosition = run.ElementEnd;315            this.HelpText.Focus();316        }317    }318}319