123 lines
4.8 KiB
VB.net
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 |