Monorepo/GUIs.ZooFlow/Search/frmSearchNeu.vb
2021-11-25 15:48:00 +01:00

123 lines
4.8 KiB
VB.net

Imports System.Collections
Imports System.ComponentModel
Imports DevExpress.XtraEditors
Imports DigitalData.GUIs.ZooFlow.Search
Imports DigitalData.GUIs.ZooFlow.Search.SearchToken
Imports DigitalData.Modules.EDMI.API
Public Class frmSearchNeu
Private Search As Search.Search
Private Database As DatabaseWithFallback
Private TokenListDefault As New Dictionary(Of String, Object)
Private TokenListOperands As New Dictionary(Of String, Object)
Private TokenListAttrValues As New Dictionary(Of String, Object)
Private Sub XtraForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Database = New DatabaseWithFallback(My.LogConfig, My.Application.Service.Client, My.DatabaseECM, My.DatabaseIDB)
Search = New Search.Search(My.LogConfig, My.Application.User, Database)
Dim oTokens = Search.GetAttributeTokens()
AddTokens(SearchControl2, oTokens)
GridControl1.DataSource = Search.Query
cmbSelect.SelectedIndex = 0
End Sub
Private Sub SetTokens(Editor As TokenEdit, Tokens As Dictionary(Of String, Object))
Editor.Properties.Tokens.Clear()
AddTokens(Editor, Tokens)
End Sub
Private Sub AddTokens(Editor As TokenEdit, Tokens As Dictionary(Of String, Object))
For Each oToken In Tokens
Dim oTokenEditToken = New TokenEditToken With {
.Description = oToken.Key,
.Value = oToken.Value
}
Editor.Properties.Tokens.Add(oTokenEditToken)
Next
End Sub
Private Sub SearchControl2_Properties_TokenAdded(sender As Object, e As DevExpress.XtraEditors.TokenEditTokenAddedEventArgs) Handles SearchControl2.Properties.TokenAdded
Dim oEditor As TokenEdit = sender
SetNewTokens(oEditor)
End Sub
Private Sub SearchControl2_Properties_TokenRemoved(sender As Object, e As TokenEditTokenRemovedEventArgs) Handles SearchControl2.Properties.TokenRemoved
Dim oEditor As TokenEdit = sender
SetNewTokens(oEditor)
End Sub
Private Sub SetNewTokens(pEditor As TokenEdit)
Dim oLastToken = pEditor.GetTokenList().LastOrDefault()
pEditor.Properties.BeginUpdate()
If oLastToken IsNot Nothing Then
Select Case oLastToken.Value.GetType
Case GetType(AttributeKeyToken)
' After the attribute key comes an operator
SetTokens(pEditor, Search.GetOperatorTokens(GetType(String)))
Search.InputMode = InputMode.Operator
Case GetType(AttributeOperatorToken)
' After the attribute operator comes a value
SetTokens(pEditor, TokenListAttrValues)
Search.InputMode = InputMode.Value
Case GetType(AttributeValueToken)
' After the attribute value comes another value
SetTokens(pEditor, TokenListAttrValues)
Search.InputMode = InputMode.Value
Case Else
SetTokens(pEditor, TokenListDefault)
Search.InputMode = InputMode.Default
End Select
Else
SetTokens(pEditor, TokenListDefault)
Search.InputMode = InputMode.Default
End If
pEditor.Properties.EndUpdate()
End Sub
Private Sub SearchControl2_CustomDrawTokenGlyph(sender As Object, e As TokenEditCustomDrawTokenGlyphEventArgs) Handles SearchControl2.CustomDrawTokenGlyph
' Set Background according to token type
Select Case e.Value.GetType()
Case GetType(AttributeKeyToken)
e.Graphics.FillRectangle(New SolidBrush(ColorTranslator.FromHtml("#F87171")), e.Bounds)
Case GetType(AttributeOperatorToken)
e.Graphics.FillRectangle(New SolidBrush(ColorTranslator.FromHtml("#34D399")), e.Bounds)
Case GetType(AttributeValueToken)
e.Graphics.FillRectangle(New SolidBrush(ColorTranslator.FromHtml("#60A5FA")), e.Bounds)
Case Else
End Select
' Draw the glyph on top
' This fixes: https://supportcenter.devexpress.com/ticket/details/t215578/tokenedit-glyph-is-not-visible-when-customdrawtokentext-is-used
e.DefaultDraw()
End Sub
Private Sub SearchControl2_KeyUp(sender As Object, e As KeyEventArgs) Handles SearchControl2.KeyUp
If Search.InputMode = InputMode.Value And e.KeyCode = Keys.Enter And SearchControl2.IsPopupOpen Then
Search.Query.Add(New SearchCriteria With {
.ParenLeft = False,
.Key = "test",
.Op = OperatorToken.Equals,
.Value = "test",
.ParentRight = False
})
End If
End Sub
Private Sub RibbonControl1_Click(sender As Object, e As EventArgs) Handles RibbonControl1.Click
End Sub
End Class