Monorepo/GUIs.ZooFlow/Administration/ClassDetailPage.vb
2021-04-26 11:35:09 +02:00

132 lines
4.7 KiB
VB.net

Imports System.ComponentModel
Imports DevExpress.XtraEditors
Imports DevExpress.XtraLayout
Imports DevExpress.XtraTab
Imports DigitalData.Modules.Language.Utils
Public Class ClassDetailPages
Public Items As New Dictionary(Of String, DetailPage)
Public CurrentPage As DetailPage
Public Event AnyControl_Focus As EventHandler(Of DetailPageEventArgs)
Public Event AnyControl_Changed As EventHandler(Of DetailPageEventArgs)
Public Class DetailPageEventArgs
Public Property Page As DetailPage
End Class
Public Class DetailPage
Public IsPrimary As Boolean = False
Public TabPage As XtraTabPage
Public Name As String
Public BindingSource As BindingSource
Public DataTable As DataTable
Public AddedWhoEdit As TextEdit
Public ChangedWhoEdit As TextEdit
End Class
Public Sub New(LayoutControls As List(Of LayoutControl))
For Each oLayoutControl In LayoutControls
AddHandler oLayoutControl.Click, AddressOf Handle_Focus
AddHandler oLayoutControl.GotFocus, AddressOf Handle_Focus
For Each oContainer As LayoutControlItem In oLayoutControl.Root.Items
Dim oControl As BaseEdit = oContainer.Control
AddHandler oControl.GotFocus, AddressOf Handle_Focus
AddHandler oControl.EditValueChanged, AddressOf Handle_EditValueChanged
AddHandler oControl.Validating, AddressOf Handle_Validating
Next
Next
End Sub
Public Sub Add(Page As DetailPage)
Items.Add(Page.TabPage.Name, Page)
End Sub
Public Sub AddRange(ParamArray Pages As DetailPage())
For Each oPage In Pages
Add(oPage)
Next
End Sub
Private Sub Handle_Validating(sender As Object, e As CancelEventArgs)
Dim oControl As BaseEdit = sender
Dim oBinding As Binding = oControl.DataBindings.Item("EditValue")
If TypeOf oBinding.DataSource Is BindingSource Then
Dim oSource As BindingSource = oBinding.DataSource
Dim oTableName As String = oSource.DataMember
Dim oDataSet As DataSet = oSource.DataSource
Dim oTable = oDataSet.Tables(oTableName)
Dim oColumnName As String = oBinding.BindingMemberInfo.BindingField
Dim oColumn As DataColumn = oTable.Columns.Item(oColumnName)
Dim oNullable As Boolean = oColumn.AllowDBNull
If oNullable = False And NotNull(oControl.EditValue.ToString, String.Empty) = String.Empty Then
Throw New NoNullAllowedException()
End If
End If
Console.WriteLine()
End Sub
Private Sub Handle_Focus(sender As Control, e As EventArgs)
Dim oControl As Control = sender
Dim oLayoutControl As LayoutControl = Nothing
' Get the Layout Control containing the Edit Contol
If TypeOf oControl.Parent Is LayoutControl Then
oLayoutControl = oControl.Parent
ElseIf TypeOf oControl Is LayoutControl Then
oLayoutControl = oControl
End If
If oLayoutControl Is Nothing Then
Exit Sub
End If
' Get the TabPage containing the Layout Control
Do_Handle_Focus(oLayoutControl, oControl)
End Sub
Private Sub Do_Handle_Focus(LayoutControl As LayoutControl, Control As Control)
If TypeOf LayoutControl.Parent Is XtraTabPage Then
Dim oTabPage As XtraTabPage = LayoutControl.Parent
If Items.ContainsKey(oTabPage.Name) Then
CurrentPage = Items.Item(oTabPage.Name)
Dim oData As New DetailPageEventArgs With {.Page = Items.Item(oTabPage.Name)}
RaiseEvent AnyControl_Focus(Control, oData)
Else
CurrentPage = Nothing
RaiseEvent AnyControl_Focus(Control, Nothing)
End If
End If
End Sub
Private Sub Handle_EditValueChanged(sender As BaseEdit, e As EventArgs)
Dim oControl As BaseEdit = sender
' Get the Layout Control containing the Edit Contol
If TypeOf oControl.Parent Is LayoutControl Then
Dim oLayoutControl As LayoutControl = oControl.Parent
' Get the TabPage containing the Layout Control
If TypeOf oLayoutControl.Parent Is XtraTabPage Then
Dim oTabPage As XtraTabPage = oLayoutControl.Parent
If Items.ContainsKey(oTabPage.Name) Then
Dim oData As New DetailPageEventArgs With {.Page = Items.Item(oTabPage.Name)}
RaiseEvent AnyControl_Changed(oControl, oData)
Else
RaiseEvent AnyControl_Changed(oControl, Nothing)
End If
End If
End If
End Sub
End Class