Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Imports DevExpress.Xpf.NavBar
Imports DevExpress.Xpf.Core.WPFCompatibility
Imports System.Text
Imports DevExpress.Xpf.Editors
Namespace NavBarDemo
Partial Public Class Events
Inherits NavBarDemoModule
Public Sub New()
InitializeComponent()
navBar.View = UpdateSubscription(New ExplorerBarView())
UpdateControlAvailability()
navBar.AddHandler(NavBarControl.MouseLeftButtonDownEvent, New MouseButtonEventHandler(AddressOf OnNavBarMouseDown), True)
AddHandler navBar.MouseMove, AddressOf OnNavBarMouseMove
navBar.AddHandler(NavBarControl.MouseLeftButtonUpEvent, New MouseButtonEventHandler(AddressOf OnNavBarMouseUp), True)
End Sub
Protected Overrides Function GetExplorerBarView() As ExplorerBarView
Return CType(UpdateSubscription(MyBase.GetExplorerBarView()), ExplorerBarView)
End Function
Protected Overrides Function GetNavigationPaneView() As NavigationPaneView
Return CType(UpdateSubscription(MyBase.GetNavigationPaneView()), NavigationPaneView)
End Function
Protected Overrides Function GetSideBarView() As SideBarView
Return CType(UpdateSubscription(MyBase.GetSideBarView()), SideBarView)
End Function
Private Sub SubscribeView(ByVal view As NavBarViewBase)
If view Is Nothing Then
Return
End If
If TypeOf view Is ExplorerBarView Then
AddHandler (CType(view, ExplorerBarView)).GroupExpandedChanging, AddressOf OnViewGroupExpandedChanging
AddHandler (CType(view, ExplorerBarView)).GroupExpandedChanged, AddressOf OnViewGroupExpandedChanged
End If
If TypeOf view Is NavigationPaneView Then
AddHandler (CType(view, NavigationPaneView)).NavPaneExpandedChanging, AddressOf navPane_NavPaneExpandedChanging
AddHandler (CType(view, NavigationPaneView)).NavPaneExpandedChanged, AddressOf navPane_NavPaneExpandingChanged
End If
AddHandler view.ItemSelecting, AddressOf OnViewSelectionChanging
AddHandler view.ItemSelected, AddressOf OnViewSelectionChanged
AddHandler view.ActiveGroupChanging, AddressOf OnViewActiveGroupChanging
AddHandler view.ActiveGroupChanged, AddressOf OnViewActiveGroupChanged
AddHandler view.Click, AddressOf OnViewClick
End Sub
Private Sub UnsubscribeView(ByVal view As NavBarViewBase)
If view Is Nothing Then
Return
End If
If TypeOf view Is ExplorerBarView Then
RemoveHandler (CType(view, ExplorerBarView)).GroupExpandedChanging, AddressOf OnViewGroupExpandedChanging
RemoveHandler (CType(view, ExplorerBarView)).GroupExpandedChanged, AddressOf OnViewGroupExpandedChanged
End If
If TypeOf view Is NavigationPaneView Then
RemoveHandler (CType(view, NavigationPaneView)).NavPaneExpandedChanging, AddressOf navPane_NavPaneExpandedChanging
RemoveHandler (CType(view, NavigationPaneView)).NavPaneExpandedChanged, AddressOf navPane_NavPaneExpandingChanged
End If
RemoveHandler view.ItemSelecting, AddressOf OnViewSelectionChanging
RemoveHandler view.ItemSelected, AddressOf OnViewSelectionChanged
RemoveHandler view.ActiveGroupChanging, AddressOf OnViewActiveGroupChanging
RemoveHandler view.ActiveGroupChanged, AddressOf OnViewActiveGroupChanged
RemoveHandler view.Click, AddressOf OnViewClick
End Sub
Private Sub UpdateControlAvailability()
cbEventGroupExpandedChanged.IsEnabled = TypeOf navBar.View Is ExplorerBarView
cbEventGroupExpandedChanging.IsEnabled = TypeOf navBar.View Is ExplorerBarView
navPaneExpandedChangedCheckbox.IsEnabled = TypeOf navBar.View Is NavigationPaneView
navPaneExpandedChangingCheckbox.IsEnabled = TypeOf navBar.View Is NavigationPaneView
End Sub
Private Function UpdateSubscription(ByVal view As NavBarViewBase) As NavBarViewBase
UnsubscribeView(navBar.View)
SubscribeView(view)
Return view
End Function
Protected Overrides Sub SelectView(ByVal sender As Object, ByVal e As RoutedEventArgs)
MyBase.SelectView(sender, e)
UpdateControlAvailability()
End Sub
Private Sub OnNavBarMouseDown(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim group As NavBarGroup = navBar.View.GetNavBarGroup(e)
Dim item As NavBarItem = navBar.View.GetNavBarItem(e)
If group IsNot Nothing OrElse item IsNot Nothing Then
AddToStack("MouseDown: " & (If(item IsNot Nothing, GetItemContent(item), GetGroupHeader(group))), cbEventMouseDown)
End If
End Sub
Private Sub OnNavBarMouseMove(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim group As NavBarGroup = navBar.View.GetNavBarGroup(e)
Dim item As NavBarItem = navBar.View.GetNavBarItem(e)
If group IsNot Nothing OrElse item IsNot Nothing Then
AddToStack("MouseMove: " & (If(item IsNot Nothing, GetItemContent(item), GetGroupHeader(group))), cbEventMouseMove)
End If
End Sub
Private Sub OnNavBarMouseUp(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim group As NavBarGroup = navBar.View.GetNavBarGroup(e)
Dim item As NavBarItem = navBar.View.GetNavBarItem(e)
If group IsNot Nothing OrElse item IsNot Nothing Then
AddToStack("MouseUp: " & (If(item IsNot Nothing, GetItemContent(item), GetGroupHeader(group))), cbEventMouseUp)
End If
End Sub
Private Sub OnViewClick(ByVal sender As Object, ByVal e As SLRoutedEventArgs)
Dim group As NavBarGroup = navBar.View.GetNavBarGroup(e)
Dim item As NavBarItem = navBar.View.GetNavBarItem(e)
If group IsNot Nothing OrElse item IsNot Nothing Then
AddToStack("Click: " & (If(item IsNot Nothing, GetItemContent(item), GetGroupHeader(group))), cbEventClick)
End If
End Sub
Private Sub OnViewGroupExpandedChanging(ByVal sender As Object, ByVal e As NavBarGroupExpandedChangingEventArgs)
AddToStack("GroupExpandedChanging: Group '" & GetGroupHeader(e.Group) & "', IsExpanded=" & e.IsExpanded.ToString(), cbEventGroupExpandedChanging)
End Sub
Private Sub OnViewGroupExpandedChanged(ByVal sender As Object, ByVal e As NavBarGroupExpandedChangedEventArgs)
AddToStack("GroupExpandedChanged: Group '" & GetGroupHeader(e.Group) & "', IsExpanded=" & e.IsExpanded.ToString(), cbEventGroupExpandedChanged)
End Sub
Private Sub OnViewSelectionChanging(ByVal sender As Object, ByVal e As NavBarItemSelectingEventArgs)
AddToStack("ItemSelecting: " & "PrevGroup '" & GetGroupHeader(e.PrevGroup) & "', PrevItem '" & GetItemContent(e.PrevItem) & "'; " & "NewGroup '" & GetGroupHeader(e.NewGroup) & "', NewItem '" & GetItemContent(e.NewItem) & "'", cbEventItemSelecting)
End Sub
Private Sub OnViewSelectionChanged(ByVal sender As Object, ByVal e As NavBarItemSelectedEventArgs)
AddToStack("ItemSelected: Group '" & e.Group.Header.ToString() & "', Item '" & e.Item.Content.ToString() & "'", cbEventItemSelected)
End Sub
Private Sub OnViewActiveGroupChanging(ByVal sender As Object, ByVal e As NavBarActiveGroupChangingEventArgs)
AddToStack("ActiveGroupChanging: " & "PrevGroup '" & GetGroupHeader(e.PrevGroup) & "'; " & "NewGroup '" & GetGroupHeader(e.NewGroup) & "'", cbEventActiveGroupChanging)
End Sub
Private Sub OnViewActiveGroupChanged(ByVal sender As Object, ByVal e As NavBarActiveGroupChangedEventArgs)
AddToStack("ActiveGroupChanged: " & GetGroupHeader(e.Group), cbEventActiveGroupChanged)
End Sub
Private Sub navPane_NavPaneExpandedChanging(ByVal sender As Object, ByVal e As NavPaneExpandedChangingEventArgs)
AddToStack("NavPaneExpandedChanging: IsExpanded=" & e.IsExpanded, navPaneExpandedChangingCheckbox)
End Sub
Private Sub navPane_NavPaneExpandingChanged(ByVal sender As Object, ByVal e As NavPaneExpandedChangedEventArgs)
AddToStack("NavPaneExpandedChanged: IsExpanded=" & e.IsExpanded, navPaneExpandedChangedCheckbox)
End Sub
Private Function GetGroupHeader(ByVal group As NavBarGroup) As String
Return If(group IsNot Nothing, group.Header.ToString(), "null")
End Function
Private Function GetItemContent(ByVal item As NavBarItem) As String
Return If(item IsNot Nothing, item.Content.ToString(), "null")
End Function
Protected Overridable Sub OnClearLogClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
logQueue.Clear()
log.Text = String.Empty
End Sub
Private logQueue As New Queue(Of String)()
Private Const logEntriesCount As Integer = 100
Protected Sub AddToStack(ByVal str As String, ByVal checkEdit As CheckEdit)
If (Not CBool(checkEdit.IsChecked)) Then
Return
End If
logQueue.Enqueue(str)
If logQueue.Count > logEntriesCount Then
logQueue.Dequeue()
End If
log.Text = String.Empty
Dim builder As New StringBuilder()
For Each text As String In logQueue
builder.Append((If(builder.Length <> 0, Environment.NewLine, String.Empty)) & text)
Next text
log.Text = builder.ToString()
log.SelectionLength = 0
log.SelectionStart = log.Text.Length
End Sub
End Class
End Namespace