From 221b2877a328b207ca048356200ae07cc3ebe03c Mon Sep 17 00:00:00 2001 From: Jteve-Sobs Date: Sat, 27 May 2023 09:32:02 +0200 Subject: [PATCH] Add configuration file to save selected mode and version The UIA version and selected modes are saved in the App.config. If the mode and version is set at application start, then both is set. Also when switching the mode it is saved in the config. Additionally, when the UIA version wants to be changed then the new menu entry is selected --- src/FlaUInspect/FlaUInspect.csproj | 4 ++ src/FlaUInspect/ViewModels/MainViewModel.cs | 69 +++++++++++++++++++-- src/FlaUInspect/Views/MainWindow.xaml | 1 + src/FlaUInspect/Views/MainWindow.xaml.cs | 35 +++++++++-- 4 files changed, 99 insertions(+), 10 deletions(-) diff --git a/src/FlaUInspect/FlaUInspect.csproj b/src/FlaUInspect/FlaUInspect.csproj index 26a4194..d8da3f4 100644 --- a/src/FlaUInspect/FlaUInspect.csproj +++ b/src/FlaUInspect/FlaUInspect.csproj @@ -44,6 +44,7 @@ + @@ -176,6 +177,9 @@ + + 3.2.0 + 3.2.0 diff --git a/src/FlaUInspect/ViewModels/MainViewModel.cs b/src/FlaUInspect/ViewModels/MainViewModel.cs index 6334fd2..f158a10 100644 --- a/src/FlaUInspect/ViewModels/MainViewModel.cs +++ b/src/FlaUInspect/ViewModels/MainViewModel.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Configuration; using System.Diagnostics; using System.Drawing.Imaging; using System.Linq; @@ -31,6 +32,16 @@ public MainViewModel() var info = new ProcessStartInfo(Assembly.GetExecutingAssembly().Location); Process.Start(info); }); + StartNewInstanceWithVersionSelectionCommand = new RelayCommand(o => + { + // Reset UIA version in configuration + Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath); + config.AppSettings.Settings.Remove("version"); + config.Save(ConfigurationSaveMode.Minimal); + + var info = new ProcessStartInfo(Assembly.GetExecutingAssembly().Location); + Process.Start(info); + }); CaptureSelectedItemCommand = new RelayCommand(o => { if (SelectedItemInTree == null) @@ -65,8 +76,19 @@ public bool EnableHoverMode { if (SetProperty(value)) { - if (value) { _hoverMode.Start(); } - else { _hoverMode.Stop(); } + Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath); + config.AppSettings.Settings.Remove("EnableHoverMode"); + if (value) + { + config.AppSettings.Settings.Add("EnableHoverMode", "true"); + _hoverMode.Start(); + } + else + { + config.AppSettings.Settings.Add("EnableHoverMode", "false"); + _hoverMode.Stop(); + } + config.Save(ConfigurationSaveMode.Minimal); } } } @@ -78,8 +100,19 @@ public bool EnableFocusTrackingMode { if (SetProperty(value)) { - if (value) { _focusTrackingMode.Start(); } - else { _focusTrackingMode.Stop(); } + Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath); + config.AppSettings.Settings.Remove("EnableFocusTrackingMode"); + if (value) + { + config.AppSettings.Settings.Add("EnableFocusTrackingMode", "true"); + _focusTrackingMode.Start(); + } + else + { + config.AppSettings.Settings.Add("EnableFocusTrackingMode", "false"); + _focusTrackingMode.Stop(); + } + config.Save(ConfigurationSaveMode.Minimal); } } } @@ -87,7 +120,22 @@ public bool EnableFocusTrackingMode public bool EnableXPath { get { return GetProperty(); } - set { SetProperty(value); } + set + { + Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath); + config.AppSettings.Settings.Remove("EnableXPath"); + if (value) + { + config.AppSettings.Settings.Add("EnableXPath", "true"); + } + else + { + config.AppSettings.Settings.Add("EnableXPath", "false"); + } + config.Save(ConfigurationSaveMode.Minimal); + + SetProperty(value); + } } public AutomationType SelectedAutomationType @@ -100,6 +148,8 @@ public AutomationType SelectedAutomationType public ICommand StartNewInstanceCommand { get; private set; } + public ICommand StartNewInstanceWithVersionSelectionCommand { get; private set; } + public ICommand CaptureSelectedItemCommand { get; private set; } public ICommand RefreshCommand { get; private set; } @@ -135,6 +185,15 @@ public void Initialize(AutomationType selectedAutomationType) // Initialize focus tracking _focusTrackingMode = new FocusTrackingMode(_automation); _focusTrackingMode.ElementFocused += ElementToSelectChanged; + + // Set modes from config file + var enableHoverMode = ConfigurationManager.AppSettings["EnableHoverMode"]; + var enableFocusTrackingMode = ConfigurationManager.AppSettings["EnableFocusTrackingMode"]; + var enableXPath = ConfigurationManager.AppSettings["EnableXPath"]; + + EnableHoverMode = enableHoverMode == "true"; + EnableFocusTrackingMode = enableFocusTrackingMode == "true"; + EnableXPath = enableXPath == "true"; } private void ElementToSelectChanged(AutomationElement obj) diff --git a/src/FlaUInspect/Views/MainWindow.xaml b/src/FlaUInspect/Views/MainWindow.xaml index 8f3b5b5..24fd0f0 100644 --- a/src/FlaUInspect/Views/MainWindow.xaml +++ b/src/FlaUInspect/Views/MainWindow.xaml @@ -24,6 +24,7 @@ + diff --git a/src/FlaUInspect/Views/MainWindow.xaml.cs b/src/FlaUInspect/Views/MainWindow.xaml.cs index 7dabbd7..2124045 100644 --- a/src/FlaUInspect/Views/MainWindow.xaml.cs +++ b/src/FlaUInspect/Views/MainWindow.xaml.cs @@ -1,6 +1,8 @@ -using System.Reflection; +using System.Configuration; +using System.Reflection; using System.Windows; using System.Windows.Controls; +using FlaUI.Core; using FlaUInspect.ViewModels; namespace FlaUInspect.Views @@ -36,12 +38,35 @@ private void MainWindow_Loaded(object sender, System.EventArgs e) { if (!_vm.IsInitialized) { - var dlg = new ChooseVersionWindow { Owner = this }; - if (dlg.ShowDialog() != true) + // Start application if version is saved + var version = ConfigurationManager.AppSettings["version"]; + if (version == "2") { - Close(); + _vm.Initialize(AutomationType.UIA2); + } + else if (version == "3") + { + _vm.Initialize(AutomationType.UIA3); + } + else + { + var dlg = new ChooseVersionWindow { Owner = this }; + if (dlg.ShowDialog() != true) + { + Close(); + } + // Save selected UIA version if dialog is not closed + else if (dlg.SelectedAutomationType == AutomationType.UIA2 + || dlg.SelectedAutomationType == AutomationType.UIA3) + { + Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath); + config.AppSettings.Settings.Remove("version"); + config.AppSettings.Settings.Add("version", dlg.SelectedAutomationType == AutomationType.UIA2 ? "2" : "3"); + config.Save(ConfigurationSaveMode.Minimal); + } + + _vm.Initialize(dlg.SelectedAutomationType); } - _vm.Initialize(dlg.SelectedAutomationType); Loaded -= MainWindow_Loaded; } }