From 7005b2138f9d4659c8108966f9c8f69b8673a05b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= <115746022+josef-poetzl@users.noreply.github.com> Date: Fri, 17 May 2024 15:52:17 +0200 Subject: [PATCH 1/5] + UserSettingDialog (import from old AccUnit version) --- source/AccUnit/AccessCodeLib.AccUnit.csproj | 2 + source/AccUnit/Integration/UserSettings.cs | 110 +++++++++ source/AccUnit/Properties/AssemblyInfo.cs | 4 +- source/AccUnit/Tools/UserSettings.cs | 111 +++++++++ .../AccessCodeLib.AccUnit.VbeAddIn.csproj | 24 ++ vbe-add-In/AccUnit.VbeAddIn/AddInManager.cs | 6 +- .../Properties/AssemblyInfo.cs | 4 +- .../UserSettingWindow/DialogManager.cs | 93 +++++++ .../SettingsPropertyWrapper.cs | 41 ++++ .../UserSettingWindow/SettingsViewModel.cs | 39 +++ .../UserSettingWindow/SettingsWindow.xaml | 23 ++ .../UserSettingWindow/SettingsWindow.xaml.cs | 29 +++ .../UserSettingDialog.Designer.cs | 75 ++++++ .../UserSettingWindow/UserSettingDialog.cs | 26 ++ .../UserSettingDialog.de.resx | 126 ++++++++++ .../UserSettingWindow/UserSettingDialog.resx | 228 ++++++++++++++++++ vbe-add-In/AccUnit.VbeAddIn/UserSettings.cs | 181 ++++++++++++++ 17 files changed, 1116 insertions(+), 6 deletions(-) create mode 100644 source/AccUnit/Integration/UserSettings.cs create mode 100644 source/AccUnit/Tools/UserSettings.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/DialogManager.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsPropertyWrapper.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsViewModel.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsWindow.xaml create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsWindow.xaml.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/UserSettingDialog.Designer.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/UserSettingDialog.cs create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/UserSettingDialog.de.resx create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/UserSettingDialog.resx create mode 100644 vbe-add-In/AccUnit.VbeAddIn/UserSettings.cs diff --git a/source/AccUnit/AccessCodeLib.AccUnit.csproj b/source/AccUnit/AccessCodeLib.AccUnit.csproj index 8d94471..60d52eb 100644 --- a/source/AccUnit/AccessCodeLib.AccUnit.csproj +++ b/source/AccUnit/AccessCodeLib.AccUnit.csproj @@ -146,6 +146,7 @@ + @@ -250,6 +251,7 @@ Settings.settings + diff --git a/source/AccUnit/Integration/UserSettings.cs b/source/AccUnit/Integration/UserSettings.cs new file mode 100644 index 0000000..865a4ca --- /dev/null +++ b/source/AccUnit/Integration/UserSettings.cs @@ -0,0 +1,110 @@ +using AccessCodeLib.AccUnit.Properties; +using AccessCodeLib.Common.Tools.Logging; +using System; +using System.ComponentModel; + +namespace AccessCodeLib.AccUnit +{ + public class UserSettings + { + #region Static members + + /// + /// Unloads the previously loaded instance provided via property Current. + /// This method is mainly needed to support testing the singleton implementation in property Current. + /// + public static void UnloadCurrent() + { + _current = null; + } + + private static UserSettings _current; + public static UserSettings Current + { + get + { + if (_current == null) + { + _current = new UserSettings(); + _current.Load(); + } + return _current; + } + set + { + _current = value ?? throw new ArgumentNullException(); + } + } + + #endregion + + private UserSettings() + { + } + + public UserSettings Clone() + { + var clone = new UserSettings + { + ImportExportFolder = ImportExportFolder, + SeparatorChar = SeparatorChar, + SeparatorMaxLength = SeparatorMaxLength + }; + return clone; + } + + #region Load/Save + + private void Load() + { + using (new BlockLogger()) + { + ImportExportFolder = Settings.Default.ImportExportFolder; + SeparatorMaxLength = Settings.Default.SeparatorMaxLength; + SeparatorChar = Settings.Default.SeparatorChar; + } + } + + public void Save() + { + Settings.Default.ImportExportFolder = ImportExportFolder; + Settings.Default.SeparatorMaxLength = SeparatorMaxLength; + Settings.Default.SeparatorChar = SeparatorChar; + Settings.Default.Save(); + } + + #endregion + + #region Setting Properties + + private string _importExportFolder; + public string ImportExportFolder + { + get + { + return _importExportFolder; + } + set + { + _importExportFolder = value.TrimEnd('\\', ' ').TrimStart(); + } + } + + [Category("Text output")] + [DefaultValue(60)] + [Description("")] + // ReSharper disable MemberCanBePrivate.Global + public int SeparatorMaxLength { get; set; } + // ReSharper restore MemberCanBePrivate.Global + + [Category("Text output")] + [DefaultValue('-')] + [Description("")] + // ReSharper disable MemberCanBePrivate.Global + public char SeparatorChar { get; set; } + // ReSharper restore MemberCanBePrivate.Global + + + #endregion + } +} diff --git a/source/AccUnit/Properties/AssemblyInfo.cs b/source/AccUnit/Properties/AssemblyInfo.cs index 2ea2cd7..675753b 100644 --- a/source/AccUnit/Properties/AssemblyInfo.cs +++ b/source/AccUnit/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.9.9.0")] -[assembly: AssemblyFileVersion("0.9.9.0")] +[assembly: AssemblyVersion("0.9.10.0")] +[assembly: AssemblyFileVersion("0.9.10.0")] diff --git a/source/AccUnit/Tools/UserSettings.cs b/source/AccUnit/Tools/UserSettings.cs new file mode 100644 index 0000000..447683f --- /dev/null +++ b/source/AccUnit/Tools/UserSettings.cs @@ -0,0 +1,111 @@ +using AccessCodeLib.AccUnit.Properties; +using AccessCodeLib.AccUnit.Tools.Templates; +using AccessCodeLib.Common.Tools.Logging; +using System; + +namespace AccessCodeLib.AccUnit.Tools +{ + public class UserSettings + { + #region Static members + + /// + /// Unloads the previously loaded instance provided via property Current. + /// This method is mainly needed to support testing the singleton implementation in property Current. + /// + public static void UnloadCurrent() + { + _current = null; + } + + private static UserSettings _current; + public static UserSettings Current + { + get + { + if (_current == null) + { + _current = new UserSettings(); + _current.Load(); + } + return _current; + } + set + { + _current = value ?? throw new ArgumentNullException(); + } + } + + #endregion + + private UserSettings() + { + } + + public UserSettings Clone() + { + var clone = new UserSettings + { + TemplateFolder = TemplateFolder, + TestTemplates = TestTemplates, + UserDefinedTemplates = UserDefinedTemplates, + TestMethodTemplate = TestMethodTemplate + }; + return clone; + } + + #region Load/Save + + private void Load() + { + using (new BlockLogger()) + { + TemplateFolder = Settings.Default.TemplateFolder; + TestMethodTemplate = GetTestMethodTemplate(); + TestTemplates = new TestTemplateCollection(); + UserDefinedTemplates = new TestTemplateCollection(TestTemplates.UserDefinedTemplates); + } + } + + private static string GetTestMethodTemplate() + { + var savedTemplate = Settings.Default.TestMethodTemplate; + return !string.IsNullOrEmpty(savedTemplate) ? savedTemplate : Resources.DefaultTestMethodTemplate; + } + + public void Save() + { + using (new BlockLogger()) + { + Settings.Default.TestMethodTemplate = TestMethodTemplate; + Settings.Default.TemplateFolder = TemplateFolder; + Settings.Default.Save(); + UserDefinedTemplates.Save(); + TestTemplates = new TestTemplateCollection(); + } + } + + #endregion + + #region Setting Properties + + private string _templateFolder; + public string TemplateFolder + { + get + { + return _templateFolder; + } + set + { + _templateFolder = value.TrimEnd('\\', ' ').TrimStart(); + } + } + + public TestTemplateCollection TestTemplates { get; private set; } + public TestTemplateCollection UserDefinedTemplates { get; private set; } + public string TestMethodTemplate { get; set; } + + #endregion + } +} diff --git a/vbe-add-In/AccUnit.VbeAddIn/AccessCodeLib.AccUnit.VbeAddIn.csproj b/vbe-add-In/AccUnit.VbeAddIn/AccessCodeLib.AccUnit.VbeAddIn.csproj index a3bb8af..0c0b630 100644 --- a/vbe-add-In/AccUnit.VbeAddIn/AccessCodeLib.AccUnit.VbeAddIn.csproj +++ b/vbe-add-In/AccUnit.VbeAddIn/AccessCodeLib.AccUnit.VbeAddIn.csproj @@ -92,6 +92,7 @@ + @@ -135,6 +136,8 @@ + + CheckableTreeView.xaml @@ -223,6 +226,17 @@ + + + SettingsWindow.xaml + + + + Form + + + UserSettingDialog.cs + @@ -280,6 +294,12 @@ VbeCommandbars.Designer.cs Designer + + UserSettingDialog.cs + + + UserSettingDialog.cs + @@ -321,6 +341,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + diff --git a/vbe-add-In/AccUnit.VbeAddIn/AddInManager.cs b/vbe-add-In/AccUnit.VbeAddIn/AddInManager.cs index cd3b485..50fbec3 100644 --- a/vbe-add-In/AccUnit.VbeAddIn/AddInManager.cs +++ b/vbe-add-In/AccUnit.VbeAddIn/AddInManager.cs @@ -27,11 +27,12 @@ internal class AddInManager : IDisposable private readonly TestStarter _testStarter = new TestStarter(); private readonly TestExplorerManager _testExplorerManager; + private readonly DialogManager _dialogManager = new DialogManager(); /* private readonly TagListManager _tagListManager = new TagListManager(); - private readonly DialogManager _dialogManager = new DialogManager(); + private readonly TestTemplateGenerator _testTemplateGenerator = new TestTemplateGenerator(); private AccSpecCommandBarAdapterClient _accSpecCommandBarAdapterClient; private AccSpecManager _accSpecManager; @@ -130,12 +131,13 @@ private void InitCommandBarsAdapter() _commandBarsAdapter.AddClient(_testStarter); _commandBarsAdapter.AddClient(_vbeIntegrationManager); _commandBarsAdapter.AddClient(_testExplorerManager); + _commandBarsAdapter.AddClient(_dialogManager); /* _commandBarsAdapter.AddClient(_tagListManager); _commandBarsAdapter.AddClient(_testTemplateGenerator); - _commandBarsAdapter.AddClient(_dialogManager); + */ /* diff --git a/vbe-add-In/AccUnit.VbeAddIn/Properties/AssemblyInfo.cs b/vbe-add-In/AccUnit.VbeAddIn/Properties/AssemblyInfo.cs index a57c307..2f45ad6 100644 --- a/vbe-add-In/AccUnit.VbeAddIn/Properties/AssemblyInfo.cs +++ b/vbe-add-In/AccUnit.VbeAddIn/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.9.1.0")] -[assembly: AssemblyFileVersion("0.9.1.0")] +[assembly: AssemblyVersion("0.9.2.0")] +[assembly: AssemblyFileVersion("0.9.2.0")] diff --git a/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/DialogManager.cs b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/DialogManager.cs new file mode 100644 index 0000000..e6742b1 --- /dev/null +++ b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/DialogManager.cs @@ -0,0 +1,93 @@ +using System; +using System.Windows.Forms; +using AccessCodeLib.AccUnit.VbeAddIn.UserSettingWindow; +using AccessCodeLib.Common.Tools.Logging; +using AccessCodeLib.Common.VBIDETools.Commandbar; +using Microsoft.Office.Core; + +namespace AccessCodeLib.AccUnit.VbeAddIn +{ + class DialogManager : ICommandBarsAdapterClient + { + + public event EventHandler RefreshTestTemplates; + /* + private static void ShowAboutDialog() + { + var aboutForm = new AboutForm(AddInManager.FileVersion, AddInManager.SimplyVbUnitVersion); + aboutForm.ShowDialog(); + } + */ + + #region ICommandBarsAdapterClient support + + public void SubscribeToCommandBarAdapter(VbeCommandBarAdapter commandBarAdapter) + { + using (new BlockLogger()) + { + if (!(commandBarAdapter is AccUnitCommandBarAdapter accUnitCommandBarAdapter)) return; + + var popUp = accUnitCommandBarAdapter.AccUnitSubMenu; + CreateCommandBarItems(commandBarAdapter, popUp); + } + } + + private void CreateCommandBarItems(VbeCommandBarAdapter commandBarAdapter, CommandBarPopup popUp) + { + var buttonData = new CommandbarButtonData + { + Caption = Resources.VbeCommandbars.ToolsUserSettingFormCommandbarButtonCaption, + Description = string.Empty, + FaceId = 222, + BeginGroup = true + }; + commandBarAdapter.AddCommandBarButton(popUp, buttonData, AccUnitMenuItemsShowUserSettingForm); + /* + buttonData = new CommandbarButtonData + { + Caption = Resources.VbeCommandbars.ToolsAboutCommandbarButtonCaption, + Description = string.Empty, + FaceId = 487, + BeginGroup = true + }; + commandBarAdapter.AddCommandBarButton(popUp, buttonData, AccUnitMenuItemsShowAboutForm); + */ + } + + /* + static void AccUnitMenuItemsShowAboutForm(CommandBarButton ctrl, ref bool cancelDefault) + { + ShowAboutDialog(); + } + */ + + void AccUnitMenuItemsShowUserSettingForm(CommandBarButton ctrl, ref bool cancelDefault) + { + try + { + /* + var dialog = new SettingsWindow(new SettingsViewModel()); + dialog.ShowDialog(); + */ + + using (var settingDialog = new UserSettingDialog()) + { + settingDialog.Settings = UserSettings.Current.Clone(); + if (settingDialog.ShowDialog() == DialogResult.OK) + { + UserSettings.Current = settingDialog.Settings as UserSettings; + UserSettings.Current?.Save(); + RefreshTestTemplates?.Invoke(this, null); + } + } + } + catch (Exception ex) + { + UITools.ShowException(ex); + } + } + + #endregion + + } +} diff --git a/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsPropertyWrapper.cs b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsPropertyWrapper.cs new file mode 100644 index 0000000..3493cf4 --- /dev/null +++ b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsPropertyWrapper.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace AccessCodeLib.AccUnit.VbeAddIn.UserSettingWindow +{ + internal class SettingsPropertyWrapper : INotifyPropertyChanged + { + private readonly PropertyInfo _propertyInfo; + private readonly Properties.Settings _settings; + + public SettingsPropertyWrapper(PropertyInfo propertyInfo, Properties.Settings settings) + { + _propertyInfo = propertyInfo; + _settings = settings; + } + + public string Name => _propertyInfo.Name; + + public object Value + { + get { return _propertyInfo.GetValue(_settings); } + set + { + _propertyInfo.SetValue(_settings, value); + OnPropertyChanged(nameof(Value)); + } + } + + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged(string propertyName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } + +} diff --git a/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsViewModel.cs b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsViewModel.cs new file mode 100644 index 0000000..aff0542 --- /dev/null +++ b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsViewModel.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace AccessCodeLib.AccUnit.VbeAddIn.UserSettingWindow +{ + internal class SettingsViewModel + { + public ObservableCollection SettingsProperties { get; private set; } + public ICommand SaveCommand { get; private set; } + + public SettingsViewModel() + { + SettingsProperties = new ObservableCollection(); + + foreach (PropertyInfo property in typeof(Properties.Settings).GetProperties(BindingFlags.Public | BindingFlags.Instance)) + { + if (property.CanRead && property.CanWrite) + { + SettingsProperties.Add(new SettingsPropertyWrapper(property, Properties.Settings.Default)); + } + } + + SaveCommand = new RelayCommand(SaveSettings); + } + + public void SaveSettings() + { + Properties.Settings.Default.Save(); + } + } + + +} diff --git a/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsWindow.xaml b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsWindow.xaml new file mode 100644 index 0000000..c53b602 --- /dev/null +++ b/vbe-add-In/AccUnit.VbeAddIn/UserSettingWindow/SettingsWindow.xaml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + +