Modules/Controls.ChatControl/ChatControl.vb
2020-05-28 14:55:43 +02:00

116 lines
3.8 KiB
VB.net

Imports DevExpress.XtraGrid.Views.Tile
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Public Class ChatControl
Private ReadOnly IdColumn As String = "ID"
Private ReadOnly UsernameColumn As String = "USERNAME"
Private ReadOnly MessageColumn As String = "MESSAGE"
Private ReadOnly DateColumn As String = "DATE"
Private Db As MSSQLServer
Private LogConfig As LogConfig
Private Logger As Logger
Private ReadOnly UsernameColorsDict As New Dictionary(Of String, Color)
Private ReadOnly UsernameColors As New List(Of Color) From {
Color.Purple,
Color.Red,
Color.LightBlue,
Color.DarkSeaGreen
}
Public IDBObjectId As Long
Public ConnectionString As String
Public Sub New()
InitializeComponent()
End Sub
Public Sub Init(ConnectionString As String, IDBObjectId As Long, CurrentUser As String)
End Sub
Public Function InitData() As DataTable
Dim oDatatable As New DataTable()
Dim oColumns As New List(Of DataColumn) From {
New DataColumn(IdColumn, New Integer.GetType),
New DataColumn(UsernameColumn),
New DataColumn(MessageColumn),
New DataColumn(DateColumn, New Date.GetType)
}
oDatatable.Columns.AddRange(oColumns.ToArray)
Dim oRow1 = oDatatable.NewRow()
With oRow1
.Item(IdColumn) = 0
.Item(UsernameColumn) = "Jonathan"
.Item(MessageColumn) = "Hi"
.Item(DateColumn) = Now.AddMinutes(-10).ToShortTimeString
End With
Dim oRow2 = oDatatable.NewRow()
With oRow2
.Item(IdColumn) = 0
.Item(UsernameColumn) = "Marlon"
.Item(MessageColumn) = "Was geht?"
.Item(DateColumn) = Now.ToShortTimeString
End With
oDatatable.Rows.Add(oRow1)
oDatatable.Rows.Add(oRow2)
oDatatable.AcceptChanges()
Return oDatatable
End Function
Private Sub ChatControl_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim oDatatable = InitData()
BuildUsernameColorDict(oDatatable)
GridChat.DataSource = ChatSource
ChatSource.DataSource = oDatatable
End Sub
Private Sub BuildUsernameColorDict(Datatable As DataTable)
Dim oIndex = 0
Datatable.AsEnumerable().
Select(Function(Row) Row.Item(UsernameColumn)).
Distinct().ToList().
ForEach(Sub(Name)
UsernameColorsDict.Add(Name, UsernameColors.Item(oIndex))
oIndex += 1
End Sub)
End Sub
Private Sub ChatView_CustomItemTemplate(sender As Object, e As DevExpress.XtraGrid.Views.Tile.TileViewCustomItemTemplateEventArgs) Handles ChatView.CustomItemTemplate
Dim oRow As DataRow = ChatView.GetDataRow(e.RowHandle)
Dim oUsername As String = oRow.Item(UsernameColumn)
If oUsername = "Jonathan" Then
e.Template = e.Templates.Item("ChatRight")
Else
e.Template = e.Templates.Item("ChatLeft")
End If
End Sub
Private Sub ChatView_ItemCustomize(sender As Object, e As TileViewItemCustomizeEventArgs) Handles ChatView.ItemCustomize
Dim oRow As DataRow = ChatView.GetDataRow(e.RowHandle)
Dim oUsername As String = oRow.Item(UsernameColumn)
Dim oColor As Color = UsernameColorsDict.Item(oUsername)
If oUsername = "Jonathan" Then
e.Item.AppearanceItem.Normal.BackColor = Color.LightGray
End If
e.Item.Item(UsernameColumn).Appearance.Normal.ForeColor = oColor
End Sub
Private Sub txtMessage_KeyUp(sender As Object, e As KeyEventArgs) Handles txtMessage.KeyUp
If e.Control And e.KeyCode = Keys.Enter Then
End If
End Sub
End Class