From 191b3010bb2bde5a98640dd1650417db612a760e Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Thu, 14 Feb 2019 15:15:42 +0100 Subject: [PATCH] Improve Config --- EDMI_ClientSuite/ClassConfig.vb | 44 +++++++++++++++++++++- EDMI_ClientSuite/MyApplication.vb | 5 +++ EDMI_ClientSuite/frmConfigService.vb | 11 +++++- EDMI_ClientSuite/frmConfigUser.Designer.vb | 22 +++-------- EDMI_ClientSuite/frmConfigUser.resx | 9 ----- EDMI_ClientSuite/frmConfigUser.vb | 10 +++-- 6 files changed, 68 insertions(+), 33 deletions(-) diff --git a/EDMI_ClientSuite/ClassConfig.vb b/EDMI_ClientSuite/ClassConfig.vb index 34f14285..d4a2c7f5 100644 --- a/EDMI_ClientSuite/ClassConfig.vb +++ b/EDMI_ClientSuite/ClassConfig.vb @@ -1,3 +1,43 @@ -Public Class ClassConfig - Public Property ServiceConnection As String = String.Empty +Imports System.ComponentModel +Imports System.Runtime.CompilerServices +Imports System.Xml.Serialization + +''' +''' --- User Config for EDMI --- +''' +''' All settings are simple properties that should have a default value where possible +''' +''' More complex properties (for example, ServiceConnection) are built from simple ones, +''' should be readonly and have an `XmlIgnore` Attribute to prevent them from being saved to the config file. +''' +''' They can make saving and loading complex properties more easy. +''' +''' The config is loaded with `ConfigManager` which is initialized in ApplicationEvents +''' to ensure that the config is loaded before any of the forms (that might need a config) +''' +''' The config object can be accessed in two ways: +''' +''' - My.ConfigManager.Config +''' - My.Config (which simply points to My.ConfigManager.Config) +''' +''' After changing a config value, My.ConfigManager.Save() must be called to persist the change in the config file +''' +Public Class ClassConfig + ' === Complex/Readonly Config Properties + + Public ReadOnly Property ServiceConnection As String + Get + If ServiceIP = String.Empty Or ServicePort = -1 Then + Return String.Empty + Else + Return $"net.tcp://{ServiceIP}:{ServicePort}/DigitalData/Services/Main" + End If + End Get + End Property + + ' === Simple/Actual Config Properties === + Public Property ServiceIP As String = String.Empty + Public Property ServicePort As Integer = -1 + Public Property LogDebug As Boolean = False + Public Property UserLanguage As String = "de-DE" End Class diff --git a/EDMI_ClientSuite/MyApplication.vb b/EDMI_ClientSuite/MyApplication.vb index f0442aed..a6e04ea8 100644 --- a/EDMI_ClientSuite/MyApplication.vb +++ b/EDMI_ClientSuite/MyApplication.vb @@ -12,6 +12,11 @@ Namespace My Module Extension Property ConfigManager As ConfigManager(Of ClassConfig) + ReadOnly Property Config As ClassConfig + Get + Return ConfigManager.Config + End Get + End Property Property LogConfig As LogConfig Property ChannelFactory As ChannelFactory(Of IEDMServiceChannel) Property Channel As IEDMServiceChannel diff --git a/EDMI_ClientSuite/frmConfigService.vb b/EDMI_ClientSuite/frmConfigService.vb index 3fbfd691..9e9ef5a2 100644 --- a/EDMI_ClientSuite/frmConfigService.vb +++ b/EDMI_ClientSuite/frmConfigService.vb @@ -6,6 +6,11 @@ Public Class frmConfigService Private Sub frmServiceConfig_Load(sender As Object, e As EventArgs) Handles Me.Load _Init = New ClassInit() + If My.ConfigManager.Config.ServiceConnection <> String.Empty Then + txtIPAddress.Text = My.ConfigManager.Config.ServiceIP + txtPort.Text = My.ConfigManager.Config.ServicePort + End If + txtIPAddress.Focus() End Sub @@ -15,12 +20,14 @@ Public Class frmConfigService Dim oEndpointURL = $"net.tcp://{oIPAddress}:{oPort}/DigitalData/Services/Main" Dim oResult As ConnectionTestResult + My.Config.ServiceIP = oIPAddress + My.Config.ServicePort = Integer.Parse(oPort) + lblStatus.Text = "Verbindung wird hergestellt..." - oResult = Await _Init.TestConnectionAsync(oEndpointURL) + oResult = Await _Init.TestConnectionAsync(My.ConfigManager.Config.ServiceConnection) If oResult = ConnectionTestResult.Successful Then ' Save Endpoint URL - My.ConfigManager.Config.ServiceConnection = oEndpointURL My.ConfigManager.Save() 'My.Settings.ICMServiceAddress = oEndpointURL lblStatus.Text = "Verbindung hergestellt." diff --git a/EDMI_ClientSuite/frmConfigUser.Designer.vb b/EDMI_ClientSuite/frmConfigUser.Designer.vb index 94f24f2a..7d598497 100644 --- a/EDMI_ClientSuite/frmConfigUser.Designer.vb +++ b/EDMI_ClientSuite/frmConfigUser.Designer.vb @@ -1,9 +1,9 @@ - _ + Partial Class frmConfigUser Inherits System.Windows.Forms.Form 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then @@ -20,11 +20,10 @@ Partial Class frmConfigUser 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ + Private Sub InitializeComponent() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmConfigUser)) Me.TabPageSupport = New DevExpress.XtraTab.XtraTabPage() - Me.SimpleButton1 = New DevExpress.XtraEditors.SimpleButton() Me.btnAppFolder = New DevExpress.XtraEditors.SimpleButton() Me.btnLogFolder = New DevExpress.XtraEditors.SimpleButton() Me.Button4 = New System.Windows.Forms.Button() @@ -43,7 +42,6 @@ Partial Class frmConfigUser ' 'TabPageSupport ' - Me.TabPageSupport.Controls.Add(Me.SimpleButton1) Me.TabPageSupport.Controls.Add(Me.btnAppFolder) Me.TabPageSupport.Controls.Add(Me.btnLogFolder) Me.TabPageSupport.Controls.Add(Me.Button4) @@ -51,18 +49,9 @@ Partial Class frmConfigUser Me.TabPageSupport.Controls.Add(Me.chkLogErrorsOnly) Me.TabPageSupport.ImageOptions.Image = CType(resources.GetObject("TabPageSupport.ImageOptions.Image"), System.Drawing.Image) Me.TabPageSupport.Name = "TabPageSupport" - Me.TabPageSupport.Size = New System.Drawing.Size(703, 448) + Me.TabPageSupport.Size = New System.Drawing.Size(700, 444) Me.TabPageSupport.Text = "Support" ' - 'SimpleButton1 - ' - Me.SimpleButton1.ImageOptions.Image = CType(resources.GetObject("SimpleButton1.ImageOptions.Image"), System.Drawing.Image) - Me.SimpleButton1.Location = New System.Drawing.Point(349, 100) - Me.SimpleButton1.Name = "SimpleButton1" - Me.SimpleButton1.Size = New System.Drawing.Size(164, 36) - Me.SimpleButton1.TabIndex = 21 - Me.SimpleButton1.Text = "AppData Ordner öffnen" - ' 'btnAppFolder ' Me.btnAppFolder.ImageOptions.Image = CType(resources.GetObject("btnAppFolder.ImageOptions.Image"), System.Drawing.Image) @@ -135,7 +124,7 @@ Partial Class frmConfigUser Me.TabPageMain.Controls.Add(Me.cmbLanguage) Me.TabPageMain.ImageOptions.Image = CType(resources.GetObject("TabPageMain.ImageOptions.Image"), System.Drawing.Image) Me.TabPageMain.Name = "TabPageMain" - Me.TabPageMain.Size = New System.Drawing.Size(703, 448) + Me.TabPageMain.Size = New System.Drawing.Size(700, 444) Me.TabPageMain.Text = "Allgemein" ' 'Label1 @@ -197,5 +186,4 @@ Partial Class frmConfigUser Friend WithEvents cmbLanguage As ComboBox Friend WithEvents btnLogFolder As DevExpress.XtraEditors.SimpleButton Friend WithEvents btnAppFolder As DevExpress.XtraEditors.SimpleButton - Friend WithEvents SimpleButton1 As DevExpress.XtraEditors.SimpleButton End Class diff --git a/EDMI_ClientSuite/frmConfigUser.resx b/EDMI_ClientSuite/frmConfigUser.resx index 8540ece9..c4c2117d 100644 --- a/EDMI_ClientSuite/frmConfigUser.resx +++ b/EDMI_ClientSuite/frmConfigUser.resx @@ -118,15 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAArdEVYdFRpdGxlAE9wZW47Rm9sZGVyO0JhcnM7Umli - Ym9uO1N0YW5kYXJkO0xvYWTxw8RjAAAAb0lEQVQ4T6XQ0Q2AIAwEUBbsMs7Q0ZzHFeqVRIJ6VQof7+fC - XUiLmS2hYQYNM4qqChjhOS31fICVL8JKvb+BSBueHUB3cQCGB+oxmWjgVjj2TcAC8hzwx1+Fl34gXYb2 - g6ky1BtMl1295AoajrNyArCYwjN4ThJYAAAAAElFTkSuQmCC - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m diff --git a/EDMI_ClientSuite/frmConfigUser.vb b/EDMI_ClientSuite/frmConfigUser.vb index 44537f4f..9f083691 100644 --- a/EDMI_ClientSuite/frmConfigUser.vb +++ b/EDMI_ClientSuite/frmConfigUser.vb @@ -13,6 +13,8 @@ Public Class frmConfigUser Private Sub frmUserBasics_Load(sender As Object, e As EventArgs) Handles Me.Load _Logger = My.LogConfig.GetLogger() + + chkLogErrorsOnly.Checked = Not My.Config.LogDebug End Sub Private Sub btnLogFolder_Click(sender As Object, e As EventArgs) Handles btnLogFolder.Click @@ -23,8 +25,10 @@ Public Class frmConfigUser Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)) End Sub - Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click - Dim config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) - MessageBox.Show(config.FilePath) + Private Sub chkLogErrorsOnly_CheckedChanged(sender As Object, e As EventArgs) Handles chkLogErrorsOnly.CheckedChanged + Dim oLogDebug = Not chkLogErrorsOnly.Checked + My.LogConfig.Debug = oLogDebug + My.Config.LogDebug = oLogDebug + My.ConfigManager.Save() End Sub End Class \ No newline at end of file