116 lines
3.8 KiB
VB.net
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
|