ZooFlow: Administration
This commit is contained in:
@@ -1,15 +1,37 @@
|
||||
Imports System.ComponentModel
|
||||
Imports DevExpress.XtraEditors
|
||||
Imports DevExpress.XtraEditors.Controls
|
||||
Imports DevExpress.XtraLayout
|
||||
Imports DevExpress.XtraTab
|
||||
Imports DigitalData.Modules.Language.Utils
|
||||
Imports DigitalData.Modules.Logging
|
||||
|
||||
''' <summary>
|
||||
'''
|
||||
''' </summary>
|
||||
Public Class ClassDetailPages
|
||||
Private ReadOnly LogConfig As LogConfig
|
||||
Private ReadOnly Logger As Logger
|
||||
Private ReadOnly HostForm As IAdminForm
|
||||
|
||||
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 Event CurrentPage_Changed As EventHandler(Of DetailPageEventArgs)
|
||||
|
||||
Private CurrentPage As DetailPage
|
||||
|
||||
Public Property Current As DetailPage
|
||||
Get
|
||||
Return CurrentPage
|
||||
End Get
|
||||
Set(value As DetailPage)
|
||||
CurrentPage = value
|
||||
|
||||
RaiseEvent CurrentPage_Changed(Me, New DetailPageEventArgs With {.Page = CurrentPage})
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Class DetailPageEventArgs
|
||||
Public Property Page As DetailPage
|
||||
@@ -17,6 +39,7 @@ Public Class ClassDetailPages
|
||||
|
||||
Public Class DetailPage
|
||||
Public IsPrimary As Boolean = False
|
||||
Public IsInsert As Boolean = False
|
||||
Public TabPage As XtraTabPage
|
||||
Public Name As String
|
||||
Public BindingSource As BindingSource
|
||||
@@ -25,7 +48,32 @@ Public Class ClassDetailPages
|
||||
Public ChangedWhoEdit As TextEdit
|
||||
End Class
|
||||
|
||||
Public Sub New(LayoutControls As List(Of LayoutControl))
|
||||
''' <summary>
|
||||
''' Detail page which represents the primary page of a form
|
||||
''' </summary>
|
||||
Public Class PrimaryPage
|
||||
Inherits DetailPage
|
||||
|
||||
Public Sub New(Insert As Boolean)
|
||||
IsInsert = Insert
|
||||
IsPrimary = True
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
Public Class ComboBoxItem
|
||||
Public Property Text
|
||||
Public Property Value
|
||||
|
||||
Public Overrides Function ToString() As String
|
||||
Return Text
|
||||
End Function
|
||||
End Class
|
||||
|
||||
Public Sub New(LogConfig As LogConfig, Form As IAdminForm, LayoutControls As List(Of LayoutControl))
|
||||
Me.LogConfig = LogConfig
|
||||
Logger = LogConfig.GetLogger()
|
||||
HostForm = Form
|
||||
|
||||
For Each oLayoutControl In LayoutControls
|
||||
AddHandler oLayoutControl.Click, AddressOf Handle_Focus
|
||||
AddHandler oLayoutControl.GotFocus, AddressOf Handle_Focus
|
||||
@@ -39,21 +87,110 @@ Public Class ClassDetailPages
|
||||
Next
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Add a new DetailPage or a new PrimaryPage
|
||||
''' </summary>
|
||||
Public Sub Add(Page As DetailPage)
|
||||
Items.Add(Page.TabPage.Name, Page)
|
||||
|
||||
AddHandler Page.BindingSource.AddingNew, Sub(sender As Object, e As EventArgs)
|
||||
Page.AddedWhoEdit.EditValue = Environment.UserName
|
||||
End Sub
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Add a list of new DetailPages or new PrimaryPages
|
||||
''' </summary>
|
||||
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")
|
||||
''' <summary>
|
||||
''' Get the DetailPage which uses the given `TabPage`
|
||||
''' </summary>
|
||||
Public Function GetDetailPage(TabPage As XtraTabPage) As DetailPage
|
||||
Try
|
||||
Dim oItem = Items.
|
||||
Where(Function(Item) TabPage.Equals(Item.Value.TabPage)).
|
||||
FirstOrDefault()
|
||||
|
||||
If TypeOf oBinding.DataSource Is BindingSource Then
|
||||
Return oItem.Value
|
||||
Catch ex As Exception
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Saves the pending changes to the binding source
|
||||
''' </summary>
|
||||
''' <returns>True, if changes were made, otherwise False</returns>
|
||||
Public Function PrepareSave() As Boolean
|
||||
Dim oPage = CurrentPage
|
||||
|
||||
If oPage Is Nothing Then
|
||||
Return False
|
||||
End If
|
||||
|
||||
Try
|
||||
oPage.BindingSource.EndEdit()
|
||||
|
||||
If oPage.DataTable.GetChanges() IsNot Nothing Then
|
||||
If oPage.IsInsert Then
|
||||
oPage.AddedWhoEdit.EditValue = My.Application.User.UserName
|
||||
Else
|
||||
oPage.ChangedWhoEdit.EditValue = My.Application.User.UserName
|
||||
End If
|
||||
|
||||
oPage.BindingSource.EndEdit()
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Sub Handle_Validating(sender As Object, e As BaseEditValidatingEventArgs)
|
||||
Dim oControl As BaseEdit = sender
|
||||
Dim oColumn As DataColumn = Get_DataColumnFromBaseEdit(oControl)
|
||||
|
||||
If oColumn IsNot Nothing Then
|
||||
Dim oNullable As Boolean = oColumn.AllowDBNull
|
||||
|
||||
If oNullable = False Then
|
||||
If TypeOf oControl Is ComboBoxEdit AndAlso DirectCast(oControl, ComboBoxEdit).SelectedIndex = -1 Then
|
||||
e.ErrorText = "Please select a value from the list."
|
||||
e.Cancel = True
|
||||
|
||||
ElseIf NotNull(oControl.EditValue.ToString, String.Empty) = String.Empty Then
|
||||
e.ErrorText = "Please input a value"
|
||||
e.Cancel = True
|
||||
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function Get_DataColumnFromBaseEdit(Control As BaseEdit) As DataColumn
|
||||
Dim oBinding As Binding = Control.DataBindings.Item("EditValue")
|
||||
|
||||
If Control.DataBindings.Count = 0 OrElse oBinding Is Nothing Then
|
||||
Return Nothing
|
||||
End If
|
||||
|
||||
If oBinding.DataSource Is Nothing Then
|
||||
Return Nothing
|
||||
End If
|
||||
|
||||
If TypeOf oBinding.DataSource IsNot BindingSource Then
|
||||
Return Nothing
|
||||
End If
|
||||
|
||||
Try
|
||||
Dim oSource As BindingSource = oBinding.DataSource
|
||||
Dim oTableName As String = oSource.DataMember
|
||||
Dim oDataSet As DataSet = oSource.DataSource
|
||||
@@ -61,15 +198,12 @@ Public Class ClassDetailPages
|
||||
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
|
||||
Return oColumn
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Sub Handle_Focus(sender As Control, e As EventArgs)
|
||||
Dim oControl As Control = sender
|
||||
@@ -86,22 +220,20 @@ Public Class ClassDetailPages
|
||||
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 TypeOf oLayoutControl.Parent Is XtraTabPage Then
|
||||
Dim oTabPage As XtraTabPage = oLayoutControl.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)
|
||||
RaiseEvent CurrentPage_Changed(Me, oData)
|
||||
RaiseEvent AnyControl_Focus(oControl, oData)
|
||||
Else
|
||||
CurrentPage = Nothing
|
||||
RaiseEvent AnyControl_Focus(Control, Nothing)
|
||||
|
||||
RaiseEvent CurrentPage_Changed(Me, Nothing)
|
||||
RaiseEvent AnyControl_Focus(oControl, Nothing)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Reference in New Issue
Block a user