diff --git a/Config/ConfigManager.vb b/Config/ConfigManager.vb index e32f5059..5762d979 100644 --- a/Config/ConfigManager.vb +++ b/Config/ConfigManager.vb @@ -51,17 +51,21 @@ Public Class ConfigManager(Of T) _Serializer = New XmlSerializer(_Blueprint.GetType) If Not Directory.Exists(UserConfigPath) Then - Throw New DirectoryNotFoundException($"Path {UserConfigPath} does not exist!") - End If + Directory.CreateDirectory(UserConfigPath) - If Not Directory.Exists(ComputerConfigPath) Then - Throw New DirectoryNotFoundException($"Path {ComputerConfigPath} does not exist!") + 'Throw New DirectoryNotFoundException($"Path {UserConfigPath} does not exist!") End If If Not _File.TestPathIsDirectory(UserConfigPath) Then Throw New ArgumentException($"Path {UserConfigPath} is not a directory!") End If + If Not Directory.Exists(ComputerConfigPath) Then + Directory.CreateDirectory(ComputerConfigPath) + + 'Throw New DirectoryNotFoundException($"Path {ComputerConfigPath} does not exist!") + End If + If Not _File.TestPathIsDirectory(ComputerConfigPath) Then Throw New ArgumentException($"Path {ComputerConfigPath} is not a directory!") End If diff --git a/EDMI_ClientSuite/ApplicationEvents.vb b/EDMI_ClientSuite/ApplicationEvents.vb index 505e4b67..fec512bb 100644 --- a/EDMI_ClientSuite/ApplicationEvents.vb +++ b/EDMI_ClientSuite/ApplicationEvents.vb @@ -14,10 +14,16 @@ Namespace My Public Sub App_Startup() Handles Me.Startup Dim oLogConfig As New LogConfig(PathType.AppData) - Dim oConfigManager As New ConfigManager(Of ClassConfig)(oLogConfig, Windows.Forms.Application.UserAppDataPath, Windows.Forms.Application.CommonAppDataPath) + + ' TODO: WHERE SHOULD CONFIG BE SAVED? LOCAL/ROAMING + Dim oUIConfigPAth = IO.Path.Combine(Windows.Forms.Application.UserAppDataPath, ClassConstants.FOLDER_NAME_LAYOUT) + + Dim oSystemConfigManager As New ConfigManager(Of ClassConfig)(oLogConfig, Windows.Forms.Application.UserAppDataPath, Windows.Forms.Application.CommonAppDataPath) + Dim oUIConfigManager As New ConfigManager(Of ClassUIConfig)(oLogConfig, oUIConfigPAth, oUIConfigPAth) LogConfig = oLogConfig - ConfigManager = oConfigManager + SystemConfigManager = oSystemConfigManager + UIConfigManager = oUIConfigManager _Logger = LogConfig.GetLogger() _Logger.Debug("Starting Client Suite..") diff --git a/EDMI_ClientSuite/ClassConstants.vb b/EDMI_ClientSuite/ClassConstants.vb index 7921d995..2a49aa78 100644 --- a/EDMI_ClientSuite/ClassConstants.vb +++ b/EDMI_ClientSuite/ClassConstants.vb @@ -9,4 +9,12 @@ Public Const FOLDER_NAME_LAYOUT = "Layout" Public Const ATTRIBUTE_ID_COLUMN = "RECORD_ID" + + + + Public Const DB_USER_ATTRIBUTE_ID = 1 + Public Const DB_USER_ATTRIBUTE_SYSKEY = "001" + + Public Const DB_GROUP_ATTRIBUTE_ID = 2 + Public Const DB_GROUP_ATTRIBUTE_SYSKEY = "002" End Class diff --git a/EDMI_ClientSuite/ClassLayout.vb b/EDMI_ClientSuite/ClassLayout.vb index 1935d98d..ada8f44d 100644 --- a/EDMI_ClientSuite/ClassLayout.vb +++ b/EDMI_ClientSuite/ClassLayout.vb @@ -1,4 +1,5 @@ Imports System.IO +Imports DevExpress.XtraGrid.Views.Base ''' ''' Helper Class to save DevExpress layouts @@ -17,6 +18,7 @@ Public Class ClassLayout Public Enum GroupName LayoutMain + LayoutUserManager End Enum Public Enum LayoutComponent @@ -35,6 +37,29 @@ Public Class ClassLayout Return Path.Combine(GetLayoutDirectory(), oFileName) End Function + ''' + ''' Returns a path for the chosen Devexpress layout file + ''' + ''' The Group to which the the component belongs to. For example, a form could be a Layout + ''' The component to which the layout belongs to + ''' + Public Shared Function GetLayoutPath(Group As GroupName, Component As String) As String + Dim oFileName As String = $"{Group.ToString}-{Component}.xml" + Return Path.Combine(GetLayoutDirectory(), oFileName) + End Function + + ''' + ''' Returns a path for the chosen Devexpress layout file + ''' + ''' The Group to which the the component belongs to. For example, a form could be a Layout + ''' The component to which the layout belongs to + ''' The sub component under the component + ''' + Public Shared Function GetLayoutPath(Group As GroupName, Component As String, SubComponent As String) As String + Dim oFileName As String = $"{Group.ToString}-{Component}-{SubComponent}.xml" + Return Path.Combine(GetLayoutDirectory(), oFileName) + End Function + Public Shared Function GetLayoutDirectory() As String Return Path.Combine(GetAppDataFolder(), ClassConstants.FOLDER_NAME_LAYOUT) End Function diff --git a/EDMI_ClientSuite/ClassService.vb b/EDMI_ClientSuite/ClassService.vb index 50f0c09e..7c4b39fb 100644 --- a/EDMI_ClientSuite/ClassService.vb +++ b/EDMI_ClientSuite/ClassService.vb @@ -19,7 +19,7 @@ Public Class ClassService End Sub Public Function TestConnection() As ConnectionTestResult - Return TestConnection(My.Config.ServiceConnection) + Return TestConnection(My.SysConfig.ServiceConnection) End Function Public Function TestConnection(EndpointURL As String) As ConnectionTestResult @@ -41,7 +41,7 @@ Public Class ClassService End Function Public Async Function TestConnectionAsync() As Task(Of ConnectionTestResult) - Return Await TestConnectionAsync(My.Config.ServiceConnection) + Return Await TestConnectionAsync(My.SysConfig.ServiceConnection) End Function Public Async Function TestConnectionAsync(EndpointURL As String) As Task(Of ConnectionTestResult) @@ -65,7 +65,7 @@ Public Class ClassService End Function Public Function GetChannelFactory() As IChannelFactory(Of IEDMServiceChannel) - Return GetChannelFactory(My.Config.ServiceConnection) + Return GetChannelFactory(My.SysConfig.ServiceConnection) End Function Public Function GetChannelFactory(EndpointURL As String) As ChannelFactory(Of IEDMServiceChannel) diff --git a/EDMI_ClientSuite/ClassUIConfig.vb b/EDMI_ClientSuite/ClassUIConfig.vb new file mode 100644 index 00000000..1829fcb9 --- /dev/null +++ b/EDMI_ClientSuite/ClassUIConfig.vb @@ -0,0 +1,3 @@ +Public Class ClassUIConfig + Public Property SkinName As String = "Office 2016 Colorful" +End Class diff --git a/EDMI_ClientSuite/ClientSuite.vbproj b/EDMI_ClientSuite/ClientSuite.vbproj index 20ac0fdc..591d747c 100644 --- a/EDMI_ClientSuite/ClientSuite.vbproj +++ b/EDMI_ClientSuite/ClientSuite.vbproj @@ -123,6 +123,7 @@ + diff --git a/EDMI_ClientSuite/My Project/licenses.licx b/EDMI_ClientSuite/My Project/licenses.licx index 8c918bc0..94f1f510 100644 --- a/EDMI_ClientSuite/My Project/licenses.licx +++ b/EDMI_ClientSuite/My Project/licenses.licx @@ -1,9 +1,10 @@ -DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.Docking.DockManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.Docking2010.DocumentManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraDataLayout.DataLayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraVerticalGrid.PropertyGridControl, DevExpress.XtraVerticalGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Docking.DockManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Docking2010.DocumentManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraTabbedMdi.XtraTabbedMdiManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/EDMI_ClientSuite/MyApplication.vb b/EDMI_ClientSuite/MyApplication.vb index 668e9a65..d8f84a02 100644 --- a/EDMI_ClientSuite/MyApplication.vb +++ b/EDMI_ClientSuite/MyApplication.vb @@ -11,12 +11,20 @@ Namespace My ''' Module Extension - Property ConfigManager As ConfigManager(Of ClassConfig) - ReadOnly Property Config As ClassConfig + Property SystemConfigManager As ConfigManager(Of ClassConfig) + ReadOnly Property SysConfig As ClassConfig Get - Return ConfigManager.Config + Return SystemConfigManager.Config End Get End Property + + Property UIConfigManager As ConfigManager(Of ClassUIConfig) + ReadOnly Property UIConfig As ClassUIConfig + Get + Return UIConfigManager.Config + End Get + End Property + Property LogConfig As LogConfig Property ChannelFactory As ChannelFactory(Of IEDMServiceChannel) Property Channel As IEDMServiceChannel diff --git a/EDMI_ClientSuite/UserManager/UserControlAssignment.vb b/EDMI_ClientSuite/UserManager/UserControlAssignment.vb index 3682d4c1..b8537657 100644 --- a/EDMI_ClientSuite/UserManager/UserControlAssignment.vb +++ b/EDMI_ClientSuite/UserManager/UserControlAssignment.vb @@ -1,6 +1,7 @@ Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Views.Base Imports DevExpress.XtraGrid.Views.Grid +Imports DigitalData.GUIs.ClientSuite.ClassLayout Public Class UserControlAssignment Private _DragDropManager As ClassDragDrop @@ -41,6 +42,22 @@ Public Class UserControlAssignment GridAssignedToParent = ClassUIUtils.ConfigureGridControlDefaults(GridAssignedToParent, [ReadOnly]:=True) ViewAssignedToParent.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect ViewAssignedToParent.OptionsSelection.MultiSelect = True + + ' Load view layouts + + Dim ViewParentListPath = GetLayoutPath(GroupName.LayoutUserManager, Name, ViewParentList.Name) + Dim ViewAssignedPath = GetLayoutPath(GroupName.LayoutUserManager, Name, ViewAssignedToParent.Name) + Dim ViewNotAssignedPath = GetLayoutPath(GroupName.LayoutUserManager, Name, ViewNotAssignedToParent.Name) + + If IO.File.Exists(ViewParentListPath) Then + ViewParentList.RestoreLayoutFromXml(ViewParentListPath) + End If + If IO.File.Exists(ViewAssignedPath) Then + ViewAssignedToParent.RestoreLayoutFromXml(ViewAssignedPath) + End If + If IO.File.Exists(ViewNotAssignedPath) Then + ViewNotAssignedToParent.RestoreLayoutFromXml(ViewNotAssignedPath) + End If End Sub Private Function MaybeCopyToDataTable(RowCollection As EnumerableRowCollection(Of DataRow)) As DataTable @@ -174,4 +191,10 @@ Public Class UserControlAssignment GridAssignedToParent.DataSource = MaybeCopyToDataTable(oAssignedChildren) GridNotAssignedToParent.DataSource = MaybeCopyToDataTable(oNotAssignedChildren) End Sub + + Private Sub View_LayoutChanged(sender As Object, e As EventArgs) Handles ViewNotAssignedToParent.Layout, ViewAssignedToParent.Layout, ViewParentList.Layout + Dim oView As BaseView = sender + Dim oLayoutPath = GetLayoutPath(GroupName.LayoutUserManager, Name, oView.Name) + oView.SaveLayoutToXml(oLayoutPath) + End Sub End Class diff --git a/EDMI_ClientSuite/UserManager/frmEdit.Designer.vb b/EDMI_ClientSuite/UserManager/frmEdit.Designer.vb index be510285..9acf8be7 100644 --- a/EDMI_ClientSuite/UserManager/frmEdit.Designer.vb +++ b/EDMI_ClientSuite/UserManager/frmEdit.Designer.vb @@ -1,6 +1,6 @@  Partial Class frmEdit - Inherits System.Windows.Forms.Form + Inherits DevExpress.XtraBars.Ribbon.RibbonForm 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. @@ -22,27 +22,38 @@ Partial Class frmEdit 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl() Me.GridList = New DevExpress.XtraGrid.GridControl() Me.ViewList = New DevExpress.XtraGrid.Views.Grid.GridView() - Me.PanelEditControls = New DevExpress.XtraEditors.PanelControl() + Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl() + Me.LayoutControlGroup1 = New DevExpress.XtraLayout.LayoutControlGroup() + Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() + Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() + Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() + Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage() + Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainerControl1.SuspendLayout() CType(Me.GridList, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ViewList, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PanelEditControls, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.LayoutControlGroup1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'SplitContainerControl1 ' Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill - Me.SplitContainerControl1.Location = New System.Drawing.Point(0, 0) + Me.SplitContainerControl1.Location = New System.Drawing.Point(0, 146) Me.SplitContainerControl1.Name = "SplitContainerControl1" Me.SplitContainerControl1.Panel1.Controls.Add(Me.GridList) Me.SplitContainerControl1.Panel1.Text = "Panel1" - Me.SplitContainerControl1.Panel2.Controls.Add(Me.PanelEditControls) + Me.SplitContainerControl1.Panel2.Controls.Add(Me.LayoutControl1) Me.SplitContainerControl1.Panel2.Text = "Panel2" - Me.SplitContainerControl1.Size = New System.Drawing.Size(1104, 505) + Me.SplitContainerControl1.Size = New System.Drawing.Size(1104, 338) Me.SplitContainerControl1.SplitterPosition = 332 Me.SplitContainerControl1.TabIndex = 0 Me.SplitContainerControl1.Text = "SplitContainerControl1" @@ -53,7 +64,7 @@ Partial Class frmEdit Me.GridList.Location = New System.Drawing.Point(0, 0) Me.GridList.MainView = Me.ViewList Me.GridList.Name = "GridList" - Me.GridList.Size = New System.Drawing.Size(332, 505) + Me.GridList.Size = New System.Drawing.Size(332, 338) Me.GridList.TabIndex = 0 Me.GridList.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.ViewList}) ' @@ -62,13 +73,70 @@ Partial Class frmEdit Me.ViewList.GridControl = Me.GridList Me.ViewList.Name = "ViewList" ' - 'PanelEditControls + 'LayoutControl1 ' - Me.PanelEditControls.Dock = System.Windows.Forms.DockStyle.Fill - Me.PanelEditControls.Location = New System.Drawing.Point(0, 0) - Me.PanelEditControls.Name = "PanelEditControls" - Me.PanelEditControls.Size = New System.Drawing.Size(760, 505) - Me.PanelEditControls.TabIndex = 0 + Me.LayoutControl1.Dock = System.Windows.Forms.DockStyle.Fill + Me.LayoutControl1.Location = New System.Drawing.Point(0, 0) + Me.LayoutControl1.Name = "LayoutControl1" + Me.LayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(-870, 211, 650, 400) + Me.LayoutControl1.Root = Me.LayoutControlGroup1 + Me.LayoutControl1.Size = New System.Drawing.Size(760, 338) + Me.LayoutControl1.TabIndex = 0 + Me.LayoutControl1.Text = "LayoutControl1" + ' + 'LayoutControlGroup1 + ' + Me.LayoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.[True] + Me.LayoutControlGroup1.GroupBordersVisible = False + Me.LayoutControlGroup1.Name = "Root" + Me.LayoutControlGroup1.Size = New System.Drawing.Size(760, 338) + Me.LayoutControlGroup1.TextVisible = False + ' + 'RibbonControl1 + ' + Me.RibbonControl1.ExpandCollapseItem.Id = 0 + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.BarButtonItem1}) + Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) + Me.RibbonControl1.MaxItemId = 2 + Me.RibbonControl1.Name = "RibbonControl1" + Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) + Me.RibbonControl1.Size = New System.Drawing.Size(1104, 146) + Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1 + ' + 'RibbonPage1 + ' + Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2}) + Me.RibbonPage1.Name = "RibbonPage1" + Me.RibbonPage1.Text = "RibbonPage1" + ' + 'RibbonPageGroup1 + ' + Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1) + Me.RibbonPageGroup1.Name = "RibbonPageGroup1" + Me.RibbonPageGroup1.Text = "RibbonPageGroup1" + ' + 'RibbonPageGroup2 + ' + Me.RibbonPageGroup2.Name = "RibbonPageGroup2" + Me.RibbonPageGroup2.Text = "RibbonPageGroup2" + ' + 'RibbonStatusBar1 + ' + Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 484) + Me.RibbonStatusBar1.Name = "RibbonStatusBar1" + Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1 + Me.RibbonStatusBar1.Size = New System.Drawing.Size(1104, 21) + ' + 'RibbonPage2 + ' + Me.RibbonPage2.Name = "RibbonPage2" + Me.RibbonPage2.Text = "RibbonPage2" + ' + 'BarButtonItem1 + ' + Me.BarButtonItem1.Caption = "BarButtonItem1" + Me.BarButtonItem1.Id = 1 + Me.BarButtonItem1.Name = "BarButtonItem1" ' 'frmEdit ' @@ -76,19 +144,34 @@ Partial Class frmEdit Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(1104, 505) Me.Controls.Add(Me.SplitContainerControl1) + Me.Controls.Add(Me.RibbonStatusBar1) + Me.Controls.Add(Me.RibbonControl1) Me.Name = "frmEdit" + Me.Ribbon = Me.RibbonControl1 + Me.StatusBar = Me.RibbonStatusBar1 Me.Text = "frmEdit" CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.SplitContainerControl1.ResumeLayout(False) CType(Me.GridList, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.ViewList, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PanelEditControls, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.LayoutControlGroup1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) + Me.PerformLayout() End Sub Friend WithEvents SplitContainerControl1 As DevExpress.XtraEditors.SplitContainerControl Friend WithEvents GridList As DevExpress.XtraGrid.GridControl Friend WithEvents ViewList As DevExpress.XtraGrid.Views.Grid.GridView - Friend WithEvents PanelEditControls As DevExpress.XtraEditors.PanelControl + Friend WithEvents LayoutControl1 As DevExpress.XtraLayout.LayoutControl + Friend WithEvents LayoutControlGroup1 As DevExpress.XtraLayout.LayoutControlGroup + Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl + Friend WithEvents RibbonPage1 As DevExpress.XtraBars.Ribbon.RibbonPage + Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup + Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup + Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar + Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage + Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem End Class diff --git a/EDMI_ClientSuite/UserManager/frmEdit.vb b/EDMI_ClientSuite/UserManager/frmEdit.vb index 059a28d8..1ffbb539 100644 --- a/EDMI_ClientSuite/UserManager/frmEdit.vb +++ b/EDMI_ClientSuite/UserManager/frmEdit.vb @@ -1,11 +1,104 @@ -Public Class frmEdit - Public Property Datatable As DataTable +Imports DevExpress.XtraEditors +Imports DevExpress.XtraLayout - Private Sub frmEdit_Load(sender As Object, e As EventArgs) Handles MyBase.Load - GridList = ClassUIUtils.ConfigureGridControlDefaults(GridList) +Public Class frmEdit + Private ReadOnly _Datatable As DataTable + Private _LanguageDatatable As DataTable + Private _AttributeId As Integer + + Public Sub New(AttributeId As Integer, Datatable As DataTable) + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. - _Datatable = DataTable - GridList.DataSource = DataTable + _Datatable = Datatable + _AttributeId = AttributeId + End Sub + + Private Async Sub frmEdit_Load(sender As Object, e As EventArgs) Handles MyBase.Load + GridList = ClassUIUtils.ConfigureGridControlDefaults(GridList, [ReadOnly]:=True) + + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + GridList.DataSource = _Datatable + + Dim oUserLanguage = My.Application.User.Language + Await LoadLanguageTableAsync(oUserLanguage) + LoadFormLayout() + End Sub + + Private Async Function LoadLanguageTableAsync(UserLanguage As String) As Task + Dim oSQL = $"SELECT * FROM VWICM_ATTRIBUTE_LANGUAGE WHERE LANGUAGE_CODE = '{UserLanguage}' AND PARENT_ATTRIBUTE_ID = '{_AttributeId}' ORDER BY ""SEQUENCE"";" + + Await My.Channel.CreateDatabaseRequestAsync("Language Syskey", False) + Dim oResult = Await My.Channel.ReturnDatatableAsync(oSQL) + _LanguageDatatable = oResult.Table + + Await My.Channel.CloseDatabaseRequestAsync() + End Function + + Private Function GetColumnEditor(Column As DataColumn, AttributeId As Integer) + Dim oEditor As BaseEdit + + Select Case Column.DataType + Case GetType(Int64) + Dim oTextEdit = New TextEdit() + oTextEdit.Name = Column.ColumnName + oTextEdit.Properties.Mask.MaskType = Mask.MaskType.Numeric + oTextEdit.Properties.Mask.EditMask = "n" + oEditor = oTextEdit + Case Else + oEditor = New TextEdit() With {.Name = Column.ColumnName} + End Select + + If AttributeId > 0 Then + oEditor.Tag = AttributeId + End If + + Return oEditor + End Function + + Private Function GetColumnCaption(Column As DataColumn, SequenceId As Integer) + Dim oRow = GetRowBySequence(SequenceId) + Dim oCaption = Column.ColumnName + + If oRow IsNot Nothing Then + oCaption = oRow.Item("LANGUAGE_TERM") + ElseIf oCaption = ClassConstants.ATTRIBUTE_ID_COLUMN Then + oCaption = "ID" + End If + + Return oCaption + End Function + + Private Function GetRowBySequence(SequenceId As Integer) + Return _LanguageDatatable.Select($"SEQUENCE = {SequenceId}").FirstOrDefault() + End Function + + Private Function GetRowItemBySequence(SequenceId As Integer, ColumnName As String) + Dim oRow = _LanguageDatatable.Select($"SEQUENCE = {SequenceId}").FirstOrDefault() + Return oRow?.Item(ColumnName) + End Function + + Private Sub LoadFormLayout() + ' Counter is used to match SEQUENCE in Attributes + ' to column order in the used View (eg. VWICM_USER) + Dim oCounter = 0 + + For Each oColumn As DataColumn In _Datatable.Columns + Dim oAttributeId As Integer = GetRowItemBySequence(oCounter, "ATTRIBUTE_ID") + Dim oCaption = GetColumnCaption(oColumn, oCounter) + Dim oEditor = GetColumnEditor(oColumn, oAttributeId) + oEditor.DataBindings.Add(New Binding("Text", _Datatable, oColumn.ColumnName)) + + ' Add Control to Layout + LayoutControlGroup1.AddItem(oCaption, oEditor) + ViewList.Columns.Item(oColumn.ColumnName).Caption = oCaption + + oCounter = oCounter + 1 + Next + + ' General Layout Tweaks + LayoutControlGroup1.AddItem(New EmptySpaceItem()) + LayoutControlGroup1.LayoutMode = Utils.LayoutMode.Flow End Sub End Class \ No newline at end of file diff --git a/EDMI_ClientSuite/UserManager/frmUserManager.vb b/EDMI_ClientSuite/UserManager/frmUserManager.vb index 54f54217..02a8b415 100644 --- a/EDMI_ClientSuite/UserManager/frmUserManager.vb +++ b/EDMI_ClientSuite/UserManager/frmUserManager.vb @@ -18,6 +18,8 @@ Public Class frmUserManager AddHandler UCUserToGroup.ChildRemoved, AddressOf HandleUserAssignedToGroup AddHandler UCUserToGroup.ChildAdded, AddressOf HandleUserDismissedFromGroup + + RibbonControl.SelectPage(RibbonPageUserManager) End Sub Private Async Function InitUserToGroupData() As Task @@ -65,19 +67,20 @@ Public Class frmUserManager Private Async Sub BarButtonUserEdit_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonUserEdit.ItemClick Dim oDatatable = Await GetAttributeListAsync("User") - Dim oForm As New frmEdit() - oForm.Datatable = oDatatable + Dim oForm As New frmEdit(ClassConstants.DB_USER_ATTRIBUTE_ID, oDatatable) + 'oForm.MdiParent = o oForm.Show() End Sub Private Async Sub BarButtonGroupEdit_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonGroupEdit.ItemClick Dim oDatatable = Await GetAttributeListAsync("Group") - Dim oForm As New frmEdit() - oForm.Datatable = oDatatable + Dim oForm As New frmEdit(ClassConstants.DB_GROUP_ATTRIBUTE_ID, oDatatable) oForm.Show() End Sub Private Async Sub BarButtonRefresh_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonRefresh.ItemClick Await UpdateUserToGroupData() End Sub + + End Class \ No newline at end of file diff --git a/EDMI_ClientSuite/frmConfigService.vb b/EDMI_ClientSuite/frmConfigService.vb index 60a66feb..46993fb2 100644 --- a/EDMI_ClientSuite/frmConfigService.vb +++ b/EDMI_ClientSuite/frmConfigService.vb @@ -4,9 +4,9 @@ Private Sub frmServiceConfig_Load(sender As Object, e As EventArgs) Handles Me.Load _Service = New ClassService(My.LogConfig) - If My.ConfigManager.Config.ServiceConnection <> String.Empty Then - txtIPAddress.Text = My.ConfigManager.Config.ServiceIP - txtPort.Text = My.ConfigManager.Config.ServicePort + If My.SystemConfigManager.Config.ServiceConnection <> String.Empty Then + txtIPAddress.Text = My.SystemConfigManager.Config.ServiceIP + txtPort.Text = My.SystemConfigManager.Config.ServicePort End If txtIPAddress.Focus() @@ -18,14 +18,14 @@ Dim oEndpointURL = $"net.tcp://{oIPAddress}:{oPort}/DigitalData/Services/Main" Dim oResult As ClassService.ConnectionTestResult - My.Config.ServiceIP = oIPAddress - My.Config.ServicePort = Integer.Parse(oPort) + My.SysConfig.ServiceIP = oIPAddress + My.SysConfig.ServicePort = Integer.Parse(oPort) lblStatus.Text = "Verbindung wird hergestellt..." oResult = Await _Service.TestConnectionAsync() If oResult = ClassService.ConnectionTestResult.Successful Then - My.ConfigManager.Save() + My.SystemConfigManager.Save() lblStatus.Text = "Verbindung hergestellt." Else Select Case oResult diff --git a/EDMI_ClientSuite/frmConfigUser.vb b/EDMI_ClientSuite/frmConfigUser.vb index 9f083691..620653b4 100644 --- a/EDMI_ClientSuite/frmConfigUser.vb +++ b/EDMI_ClientSuite/frmConfigUser.vb @@ -14,7 +14,7 @@ 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 + chkLogErrorsOnly.Checked = Not My.SysConfig.LogDebug End Sub Private Sub btnLogFolder_Click(sender As Object, e As EventArgs) Handles btnLogFolder.Click @@ -28,7 +28,7 @@ Public Class frmConfigUser 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() + My.SysConfig.LogDebug = oLogDebug + My.SystemConfigManager.Save() End Sub End Class \ No newline at end of file diff --git a/EDMI_ClientSuite/frmMain.resx b/EDMI_ClientSuite/frmMain.resx index 25645f24..16b2b657 100644 --- a/EDMI_ClientSuite/frmMain.resx +++ b/EDMI_ClientSuite/frmMain.resx @@ -123,57 +123,56 @@ - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAHXRFWHRUaXRsZQBDbG9zZTtF - eGl0O0JhcnM7UmliYm9uO0YDuegAAAC0SURBVDhPrZJBCsJAEAQ9Bf1XfuJHVCJINPgWPfkUf7N2LztL - 7+x4kHgoxO7pIgY37/2Y1vB3wROcXaZMgDc1UwGLIaWcnSQ3DqUbwMNyFcw8MPBdJXks3WKdCsjFHR6B - H1/LbSggjURB14xJJCCdBFk3Jt8EzWMXAX9OdxsJurGBrpN4gX9hNxC92FAwuUOOrfOS+mdTwQvsgrGR - JfjcAt7mXAWExd1lygzqmHjBz6wUjOkDS6KAnnKqaOAAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAddEVYdFRpdGxlAENsb3NlO0V4aXQ7QmFycztSaWJi + b247RgO56AAAALRJREFUOE+tkkEKwkAQBD0F/Vd+4kdUIkg0+BY9+RR/s3YvO0vv7HiQeCjE7ukiBjfv + /ZjW8HfBE5xdpkyANzVTAYshpZydJDcOpRvAw3IVzDww8F0leSzdYp0KyMUdHoEfX8ttKCCNREHXjEkk + IJ0EWTcm3wTNYxcBf053Gwm6sYGuk3iBf2E3EL3YUDC5Q46t85L6Z1PBC+yCsZEl+NwC3uZcBYTF3WXK + DOqYeMHPrBSM6QNLooCecqpo4AAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAHXRFWHRUaXRsZQBDbG9zZTtF - eGl0O0JhcnM7UmliYm9uO0YDuegAAAF2SURBVFhH7ZZBTsMwEEW76n1AIFDFkptwPSrRLjgLhwDBBcDM - R/Mj2/l2xiAUJLp4rer543lJk7SblNKqfL083d2mNTgJ/AuBd7E2ERF4M26Mx2wtytHYGa/ZWsGSAIZf - en1rjEhg+NZ7Lwwp0RPAqduhRuxzVGIanvXiTHx4fQK1lgC4N4qNPNuTUMMh/uD1AtQZmhWdvaE2VBLH - PJdl5XCADIMy4Oy5IbG1WmLoyAlyDMtARu9MzIZ7vTscIMewDFS0JIaPnCA/IgBmEjmoGaHhAD1slIEG - UgJrRng4QN93BFrfOa8J1SNB36iAHE5QM8IS6GGjDFS0bjW1FpJAPirQu89b18SiBHIMy4ATecL1nhP5 - XgXIMSwDRu/I62zkiVmADIMq0LraD1mmZuhMoM5QXcRP5zU38Qw26g0nSuLKGP45fjHOvR4dTiYJez8z - nn29YEkAQAL2I8MJJNArh4OIAOj+sVzgx39Kf5WTwN8RWI+0+QTdeyAQju/HFwAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAddEVYdFRpdGxlAENsb3NlO0V4aXQ7QmFycztSaWJi + b247RgO56AAAAXZJREFUWEftlkFOwzAQRbvqfUAgUMWSm3A9KtEuOAuHAMEFwMxH8yPb+XbGIBQkunit + 6vnjeUmTtJuU0qp8vTzd3aY1OAn8C4F3sTYREXgzbozHbC3K0dgZr9lawZIAhl96fWuMSGD41nsvDCnR + E8Cp26FG7HNUYhqe9eJMfHh9ArWWALg3io0825NQwyH+4PUC1BmaFZ29oTZUEsc8l2XlcIAMgzLg7Lkh + sbVaYujICXIMy0BG70zMhnu9Oxwgx7AMVLQkho+cID8iAGYSOagZoeEAPWyUgQZSAmtGeDhA33cEWt85 + rwnVI0HfqIAcTlAzwhLoYaMMVLRuNbUWkkA+KtC7z1vXxKIEcgzLgBN5wvWeE/leBcgxLANG78jrbOSJ + WYAMgyrQutoPWaZm6EygzlBdxE/nNTfxDDbqDSdK4soY/jl+Mc69Hh1OJgl7PzOefb1gSQBAAvYjwwkk + 0CuHg4gA6P6xXODHf0p/lZPA3xFYj7T5BN17IBCO78cXAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAR3RFWHRUaXRsZQBDdXN0b21l - cjtFbXBsb3llZTtGaXg7UHVibGljO1NldHRpbmdzO09wdGlvbnM7Q3VzdG9taXo7R3JvdXA7VGVhbWkL - E4gAAAEQSURBVDhPpdM/agJREMfxNQYtbew9QQoF29xAU9p5AZsUEluR7T1AinSBnMC9ghZ7iOANBBUk - br6/ZR7Mk5UlpPjwmHH+vF01KYriXyqTf5GkaXpPA+84mA88IKqLghtdbFE4Q0R1Pri38QdhwAS+Jxqg - 6X6bKLdz8QK+Jxqg6b5ZlPtEjjZ8fckHmh4NGK2yxDTRx9lOxeVnfkAHRzWagxVp0BtmuNqpuFzgB8gc - YcCUAm1S8cUaAsXKRwMe8YRn06BA19VGNa3Rs1Ox8n016uUs8Y09XkyLAj2zrq2GHrlXnRYrf9aAL4Rr - e+3xajOgqPYGp5vGIKeg7h00w/NXoqD+W6j6hwUqcPzvwHJZ8gvZcCD22oxTxwAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABHdEVYdFRpdGxlAEN1c3RvbWVyO0VtcGxveWVlO0Zp + eDtQdWJsaWM7U2V0dGluZ3M7T3B0aW9ucztDdXN0b21pejtHcm91cDtUZWFtaQsTiAAAARBJREFUOE+l + 0z9qAlEQx/E1Bi1t7D1BCgXb3EBT2nkBmxQSW5HtPUCKdIGcwL2CFnuI4A0EFSRuvr9lHsyTlSWk+PCY + cf68XTUpiuJfKpN/kaRpek8D7ziYDzwgqouCG11sUThDRHU+uLfxB2HABL4nGqDpfpsot3PxAr4nGqDp + vlmU+0SONnx9yQeaHg0YrbLENNHH2U7F5Wd+QAdHNZqDFWnQG2a42qm4XOAHyBxhwJQCbVLxxRoCxcpH + Ax7xhGfToEDX1UY1rdGzU7HyfTXq5SzxjT1eTIsCPbOurYYeuVedFit/1oAvhGt77fFqM6Co9ganm8Yg + p6DuHTTD81eioP5bqPqHBSpw/O/AclnyC9lwIPbajFPHAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAR3RFWHRUaXRsZQBDdXN0b21l - cjtFbXBsb3llZTtGaXg7UHVibGljO1NldHRpbmdzO09wdGlvbnM7Q3VzdG9taXo7R3JvdXA7VGVhbWkL - E4gAAALBSURBVFhHxdZPiE1hGMfxGf/CMLJUFjZScpXCTP4VO+lO3awQFlgodmIhm+lubG0lC0UkK39G - jT8ZhPyXaUZWSNhNIqK5vr+Z922enp5zHVehPjn3ed/397zn3HPOnbZGo/FfhcV/KSyWVa/X1+MyPuIH - PuEqNkTzI2GxDJp04ycaAdXXReu8sFgGDU6ZhpGz0TovLJZBgyeuofc0WueFxTJocBSjpqH3OlrnhcWM - kB0YgL3J7mIn2nEYUXPRfVCJcq2wKCw+YsIi+jcDI4jGpRplW2GRhTPx2QRFvqITt0zNeobpUb4VFlnY - ZYKaWYuLrpbtirK9sMjiTS6siOYdczX5gI4o2wuLLN5nwprZj+Wu9h0bo9xIWCTgngls5gF0vxzHfZzE - b+98KywS0o+ooddfsL6CKdGYFxZTQNF7PtP4Ukxza+dD74vH2KvPdtwLi8LCoscr0wtqMvTrtxsrsAfv - YOfpBXYCc6u9fW1e2FxYUEsBRTS+xtW8hcYCzCu9AWHBGUTBp9P4BVe/Y4ykJq8wnBt6YeOMkKk4gDdQ - g7c4BF36LamW6clp7+m9srrWe2kOx5XUpJHkpp1YlT+HjTMFmuPZ5nhS+n8zhjC2AZp3EzqK59iOG8gb - uJlqGtOcLsQbIGwRdPkPFozrV/C85inE0Nm9QG5aRHM0d2IDhM2CLu8g8mXVW63mmuvS20dU87WuQ4HY - itxIZ6qrIDrOdc2Z+ApYrLvZPz7WQ5zDI1Oz7JXQpc7Ne1JNdJw3oTnjG2DxMnwxYa3QBoZSeHYduXlm - 7wkZ1gbKvnab0QZeuvDb8BtQzc4Z1Aa+ubBWLCYsN7FfQTXVRMfhV/DehbVKf5otIdTfhNcwkI5zfRvG - N2Dv8FbkoKT1x7BVCjFWQmf6dy+iP6EQR6/ZsbNL8gbyZ42VexWXkYOa0I+RBGN9bb8A1yMynixVuyMA - AAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABHdEVYdFRpdGxlAEN1c3RvbWVyO0VtcGxveWVlO0Zp + eDtQdWJsaWM7U2V0dGluZ3M7T3B0aW9ucztDdXN0b21pejtHcm91cDtUZWFtaQsTiAAAAsFJREFUWEfF + 1k+ITWEYx/EZ/8IwslQWNlJylcJM/hU76U7drBAWWCh2YiGb6W5sbSULRSQrf0aNPxmE/JdpRlZI2E0i + orm+v5n3bZ6ennMdV6E+Ofd53/f3vOfcc86dtkaj8V+FxX8pLJZVr9fX4zI+4gc+4So2RPMjYbEMmnTj + JxoB1ddF67ywWAYNTpmGkbPROi8slkGDJ66h9zRa54XFMmhwFKOmofc6WueFxYyQHRiAvcnuYifacRhR + c9F9UIlyrbAoLD5iwiL6NwMjiMalGmVbYZGFM/HZBEW+ohO3TM16hulRvhUWWdhlgppZi4uulu2Ksr2w + yOJNLqyI5h1zNfmAjijbC4ss3mfCmtmP5a72HRuj3EhYJOCeCWzmAXS/HMd9nMRv73wrLBLSj6ih11+w + voIp0ZgXFlNA0Xs+0/hSTHNr50Pvi8fYq8923AuLwsKixyvTC2oy9Ou3GyuwB+9g5+kFdgJzq719bV7Y + XFhQSwFFNL7G1byFxgLMK70BYcEZRMGn0/gFV79jjKQmrzCcG3ph44yQqTiAN1CDtzgEXfotqZbpyWnv + 6b2yutZ7aQ7HldSkkeSmnViVP4eNMwWa49nmeFL6fzOGMLYBmncTOorn2I4byBu4mWoa05wuxBsgbBF0 + +Q8WjOtX8LzmKcTQ2b1AblpEczR3YgOEzYIu7yDyZdVbreaa69LbR1Tzta5DgdiK3EhnqqsgOs51zZn4 + Clisu9k/PtZDnMMjU7PsldClzs17Uk10nDehOeMbYPEyfDFhrdAGhlJ4dh25eWbvCRnWBsq+dpvRBl66 + 8NvwG1DNzhnUBr65sFYsJiw3sV9BNdVEx+FX8N6FtUp/mi0h1N+E1zCQjnN9G8Y3YO/wVuSgpPXHsFUK + MVZCZ/p3L6I/oRBHr9mxs0vyBvJnjZV7FZeRg5rQj5EEY31tvwDXIzKeLFW7IwAAAABJRU5ErkJggg== diff --git a/EDMI_ClientSuite/frmMain.vb b/EDMI_ClientSuite/frmMain.vb index e0f111a7..e4efa7f7 100644 --- a/EDMI_ClientSuite/frmMain.vb +++ b/EDMI_ClientSuite/frmMain.vb @@ -4,10 +4,12 @@ Imports DigitalData.GUIs.ClientSuite.ClassLayout Imports System.IO Imports DigitalData.Modules.Logging Imports DigitalData.Modules.License +Imports DevExpress.LookAndFeel Public Class frmMain Private _Logger As Logger Private _Timer As ClassTimer + Private _Loading As Boolean = True Public Sub New() ' Dieser Aufruf ist für den Designer erforderlich. @@ -36,10 +38,12 @@ Public Class frmMain Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles Me.Load ' Initialize Main Timer - _Timer = New ClassTimer(My.LogConfig, Me, My.Config.HeartbeatInterval) + _Timer = New ClassTimer(My.LogConfig, Me, My.SysConfig.HeartbeatInterval) AddHandler _Timer.OnlineChanged, AddressOf HandleOnlineChanged SetOnlineLabel() + UserLookAndFeel.Default.SetSkinStyle(My.UIConfig.SkinName) + LabelCurrentUser.Caption = My.Application.User.UserName LabelCurrentMachine.Caption = My.Application.User.MachineName LabelCurrentVersion.Caption = My.Application.Info.Version.ToString @@ -64,7 +68,11 @@ Public Class frmMain MsgBox($"Clicked on Document {RowView.Row.Item("DocName")}") End Sub + AddHandler UserLookAndFeel.Default.StyleChanged, AddressOf frmMain_StyleChanged + LoadLayout() + + _Loading = False End Sub Private Sub FrmMain_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing @@ -153,4 +161,11 @@ Public Class frmMain oForm.MdiParent = DocumentManager.MdiParent oForm.Show() End Sub + + Private Sub frmMain_StyleChanged(sender As Object, e As EventArgs) Handles Me.StyleChanged + If _Loading = False Then + My.UIConfig.SkinName = LookAndFeel.ActiveSkinName + My.UIConfigManager.Save() + End If + End Sub End Class \ No newline at end of file diff --git a/EDMI_ClientSuite/frmSplash.vb b/EDMI_ClientSuite/frmSplash.vb index 15d29bdd..6abc3a80 100644 --- a/EDMI_ClientSuite/frmSplash.vb +++ b/EDMI_ClientSuite/frmSplash.vb @@ -25,7 +25,7 @@ Public NotInheritable Class frmSplash BringToFront() Dim oService As New ClassService(My.LogConfig) - Dim oConnectionURLExists As Boolean = My.Config.ServiceConnection <> String.Empty + Dim oConnectionURLExists As Boolean = My.SysConfig.ServiceConnection <> String.Empty 'Dim oInit As New ClassInit() 'Dim oConnectionURLExists = oInit.TestConnectionURLExists()