251 lines
9.1 KiB
VB.net
251 lines
9.1 KiB
VB.net
Imports System.Windows.Forms
|
|
Imports System.Drawing
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Language.Utils
|
|
Imports DevExpress.XtraEditors
|
|
Imports DigitalData.Controls.LookupGrid
|
|
|
|
Public Class ControlCreator
|
|
Private Form As Form
|
|
Private Panel As Panel
|
|
Private LogConfig As LogConfig
|
|
Private Logger As Logger
|
|
|
|
Private Const DEFAULT_HEIGHT = 27
|
|
Private Const DEFAULT_WIDTH = 450
|
|
Private Const DEFAULT_POSITION_X = 11
|
|
|
|
Private Const TYPE_BOOLEAN = "BOOLEAN"
|
|
Private Const TYPE_DATE = "DATE"
|
|
Private Const TYPE_INTEGER = "INTEGER"
|
|
Private Const TYPE_VARCHAR = "VARCHAR"
|
|
|
|
Private Const PLACEHOLDER_NULL = "$NULL"
|
|
Private Const VECTORSEPARATOR = "╚"
|
|
|
|
Public Property HightlightColor As Color = Color.FromArgb(255, 214, 49)
|
|
Public Property OnControlChanged As Action(Of Control)
|
|
|
|
''' <summary>
|
|
''' Callback Function to Return the Lookup Control's Datasource
|
|
''' Receives the following values:
|
|
''' - Control
|
|
''' - SQL Command
|
|
''' - Connection ID
|
|
''' </summary>
|
|
''' <returns>The Datatable which contains the Control's Data</returns>
|
|
Public Property OnLookupData As Func(Of Control, String, Integer, DataTable)
|
|
|
|
Public Class ControlMeta
|
|
Public Property IndexName As String
|
|
Public Property IndexType As String
|
|
Public Property ControlType As String
|
|
Public Property MultipleValues As Boolean = False
|
|
End Class
|
|
|
|
Public Sub New(LogConfig As LogConfig, Panel As Panel, Form As Form)
|
|
Me.Form = Form
|
|
Me.Panel = Panel
|
|
Me.LogConfig = LogConfig
|
|
Me.Logger = LogConfig.GetLogger
|
|
End Sub
|
|
|
|
Function AddLabel(pIndexName As String, hinweis As String, ylbl As Integer, anz As String) As Label
|
|
Dim lbl As New Label With {
|
|
.Name = "lbl" & pIndexName,
|
|
.AutoSize = True,
|
|
.Text = hinweis,
|
|
.Location = New Point(11, ylbl)
|
|
}
|
|
|
|
Return lbl
|
|
End Function
|
|
|
|
Public Function AddDateTimePicker(pIndexname As String, pY As Integer, pDefaultValue As String) As DateEdit
|
|
Dim oPicker As New DateEdit With {
|
|
.Name = "dtp" & pIndexname,
|
|
.Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
|
|
.Location = New Point(DEFAULT_POSITION_X, pY),
|
|
.Tag = New ControlMeta() With {
|
|
.IndexName = pIndexname,
|
|
.IndexType = TYPE_DATE,
|
|
.ControlType = "dtp"
|
|
}
|
|
}
|
|
|
|
If pDefaultValue.ToUpper = PLACEHOLDER_NULL Then
|
|
oPicker.EditValue = Nothing
|
|
ElseIf pDefaultValue IsNot Nothing Then
|
|
oPicker.EditValue = pDefaultValue
|
|
End If
|
|
|
|
oPicker.Properties.AppearanceFocused.BackColor = HightlightColor
|
|
|
|
Return oPicker
|
|
End Function
|
|
|
|
Public Function AddTextBox(pIndexname As String, pY As Integer, pDefaultValue As String, pDataType As String) As TextEdit
|
|
Dim oEdit As New TextEdit With {
|
|
.Name = "txt" & pIndexname,
|
|
.Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
|
|
.Location = New Point(DEFAULT_POSITION_X, pY),
|
|
.Tag = New ControlMeta() With {
|
|
.IndexName = pIndexname,
|
|
.IndexType = pDataType,
|
|
.ControlType = "txt"
|
|
}
|
|
}
|
|
|
|
Select Case pDataType
|
|
Case TYPE_INTEGER
|
|
oEdit.Properties.Mask.MaskType = Mask.MaskType.Numeric
|
|
oEdit.Properties.Mask.EditMask = "d"
|
|
End Select
|
|
|
|
If pDefaultValue IsNot Nothing Then
|
|
oEdit.Text = pDefaultValue
|
|
oEdit.SelectAll()
|
|
End If
|
|
|
|
AddHandler oEdit.GotFocus, AddressOf OnTextBoxFocus
|
|
AddHandler oEdit.LostFocus, AddressOf OnTextBoxLostFocus
|
|
AddHandler oEdit.KeyUp, AddressOf OnTextBoxKeyUp
|
|
AddHandler oEdit.TextChanged, AddressOf OnTextBoxTextChanged
|
|
|
|
Return oEdit
|
|
End Function
|
|
|
|
Private Sub OnTextBoxFocus(sender As TextEdit, e As EventArgs)
|
|
sender.BackColor = HightlightColor
|
|
sender.SelectAll()
|
|
End Sub
|
|
|
|
Private Sub OnTextBoxTextChanged(sender As TextEdit, e As System.EventArgs)
|
|
Using oGraphics As Graphics = sender.CreateGraphics()
|
|
Dim oNewWidth = oGraphics.MeasureString(sender.Text, sender.Font).Width + 15
|
|
If oNewWidth >= DEFAULT_WIDTH Then
|
|
sender.Width = oNewWidth
|
|
End If
|
|
End Using
|
|
End Sub
|
|
|
|
Private Sub OnTextBoxLostFocus(sender As TextEdit, e As EventArgs)
|
|
sender.BackColor = Color.White
|
|
End Sub
|
|
|
|
Private Sub OnTextBoxKeyUp(sender As TextEdit, e As KeyEventArgs)
|
|
If sender.Text = String.Empty Then
|
|
Exit Sub
|
|
End If
|
|
|
|
If e.KeyCode = Keys.Return Or e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Tab Then
|
|
OnControlChanged.Invoke(sender)
|
|
End If
|
|
|
|
If e.KeyCode = Keys.Return Then
|
|
SendKeys.Send("{TAB}")
|
|
End If
|
|
End Sub
|
|
|
|
Public Function AddCheckBox(pIndexname As String, pY As Integer, pDefaultValue As String, pCaption As String) As CheckEdit
|
|
Try
|
|
Dim oValue As Boolean = False
|
|
Dim oCheckBox As New CheckEdit With {
|
|
.Name = "chk" & pIndexname,
|
|
.AutoSize = False,
|
|
.Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
|
|
.Location = New Point(DEFAULT_POSITION_X, pY),
|
|
.Tag = New ControlMeta() With {
|
|
.IndexName = pIndexname,
|
|
.IndexType = TYPE_BOOLEAN,
|
|
.ControlType = "chk"
|
|
}
|
|
}
|
|
|
|
If pCaption <> "" Then
|
|
oCheckBox.Text = pCaption
|
|
oCheckBox.Size = New Size(CInt(pCaption.Length * 15), 27)
|
|
End If
|
|
|
|
If Boolean.TryParse(pDefaultValue, oValue) = False Then
|
|
If pDefaultValue = "1" Or pDefaultValue = "0" Then
|
|
oCheckBox.Checked = CBool(pDefaultValue)
|
|
Else
|
|
oCheckBox.Checked = False
|
|
End If
|
|
Else
|
|
oCheckBox.Checked = oValue
|
|
End If
|
|
|
|
AddHandler oCheckBox.CheckedChanged, Sub(sender As CheckBox, e As EventArgs)
|
|
OnControlChanged.Invoke(sender)
|
|
End Sub
|
|
|
|
Return oCheckBox
|
|
Catch ex As Exception
|
|
Logger.Warn("Unhandled Exception in AddCheckBox: " & ex.Message)
|
|
Logger.Error(ex)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
Public Function AddLookupControl(pIndexname As String, pY As Integer, pMultiselect As Boolean, pDataType As String, pSQLCommand As String, pConnectionId As Integer, Optional pDefaultValue As String = "", Optional pAddNewValues As Boolean = False, Optional pPreventDuplicateValues As Boolean = False) As LookupControl3
|
|
Dim oControl As New LookupControl3 With {
|
|
.Location = New Point(DEFAULT_POSITION_X, pY),
|
|
.Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT),
|
|
.Name = "cmbMulti" & pIndexname,
|
|
.Tag = New ControlMeta() With {
|
|
.IndexName = pIndexname,
|
|
.IndexType = pDataType,
|
|
.ControlType = "cmbMulti"
|
|
}
|
|
}
|
|
|
|
oControl.Properties.MultiSelect = pMultiselect
|
|
oControl.Properties.AllowAddNewValues = pAddNewValues
|
|
oControl.Properties.PreventDuplicates = pPreventDuplicateValues
|
|
oControl.Properties.AppearanceFocused.BackColor = HightlightColor
|
|
|
|
If Not String.IsNullOrEmpty(pDefaultValue) Then
|
|
Dim oDefaultValues As New List(Of String)
|
|
|
|
If pDefaultValue.Contains(",") Then
|
|
oDefaultValues = pDefaultValue.
|
|
Split(",").ToList().
|
|
Select(Function(item) item.Trim()).
|
|
ToList()
|
|
Else
|
|
oDefaultValues = pDefaultValue.
|
|
Split(VECTORSEPARATOR).ToList().
|
|
Select(Function(item) item.Trim()).
|
|
ToList()
|
|
End If
|
|
oControl.Properties.SelectedValues = oDefaultValues
|
|
End If
|
|
|
|
AddHandler oControl.Properties.SelectedValuesChanged, Sub() OnControlChanged.Invoke(oControl)
|
|
|
|
If OnLookupData Is Nothing Then
|
|
Logger.Warn("LookupGrid Datasource could not be set, OnLookupData Function is not defined!")
|
|
End If
|
|
|
|
Try
|
|
If pSQLCommand IsNot Nothing AndAlso pSQLCommand.Length > 0 Then
|
|
Dim oDataSource = OnLookupData.Invoke(oControl, pSQLCommand, pConnectionId)
|
|
oControl.Properties.DataSource = oDataSource
|
|
|
|
If oDataSource IsNot Nothing AndAlso oDataSource.Columns.Count > 0 Then
|
|
oControl.Properties.DisplayMember = oDataSource.Columns.Item(0).ColumnName
|
|
oControl.Properties.ValueMember = oDataSource.Columns.Item(0).ColumnName
|
|
Else
|
|
Logger.Info("Lookup {0} Datasource did not contain any columns!", oControl.Name)
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
|
|
Return oControl
|
|
End Function
|
|
End Class
|