@@ -19,7 +19,7 @@ private void HandleKeyboardEvents()
1919 KeyCode . LeftArrow => OnArrowLeft ( ) ,
2020 KeyCode . KeypadEnter => OnEnter ( ) ,
2121 KeyCode . Return => OnEnter ( ) ,
22- KeyCode . DownArrow => _noneElement is { IsSelected : true } ? OnArrowDownNone ( ) : OnArrowDown ( ) ,
22+ KeyCode . DownArrow => OnArrowDown ( ) ,
2323 KeyCode . UpArrow => OnArrowUp ( ) ,
2424 _ => false
2525 } ;
@@ -30,7 +30,7 @@ private void HandleKeyboardEvents()
3030
3131 private bool OnArrowRight ( )
3232 {
33- if ( ! SelectedNode . IsFolder || SelectedNode . Expanded )
33+ if ( SelectedNode == null || DrawInSearchMode || ! SelectedNode . IsFolder || SelectedNode . Expanded )
3434 return false ;
3535
3636 SelectedNode . Expanded = true ;
@@ -39,7 +39,7 @@ private bool OnArrowRight()
3939
4040 private bool OnArrowLeft ( )
4141 {
42- if ( ! SelectedNode . IsFolder || ! SelectedNode . Expanded )
42+ if ( SelectedNode == null || DrawInSearchMode || ! SelectedNode . IsFolder || ! SelectedNode . Expanded )
4343 return false ;
4444
4545 SelectedNode . Expanded = false ;
@@ -48,6 +48,9 @@ private bool OnArrowLeft()
4848
4949 private bool OnEnter ( )
5050 {
51+ if ( SelectedNode == null )
52+ return false ;
53+
5154 if ( SelectedNode . IsFolder )
5255 {
5356 SelectedNode . Expanded = ! SelectedNode . Expanded ;
@@ -62,6 +65,28 @@ private bool OnEnter()
6265
6366 private bool OnArrowDown ( )
6467 {
68+ if ( _noneElement is { IsSelected : true } )
69+ return OnArrowDownNone ( ) ;
70+
71+ if ( DrawInSearchMode )
72+ return OnArrowDownSearch ( ) ;
73+
74+ return OnArrowDownRegular ( ) ;
75+ }
76+
77+ private bool OnArrowDownRegular ( )
78+ {
79+ if ( SelectedNode == null )
80+ {
81+ if ( _root . ChildNodes . Count == 0 )
82+ {
83+ return false ;
84+ }
85+
86+ SelectedNode = _root . ChildNodes [ 0 ] ;
87+ return true ;
88+ }
89+
6590 if ( SelectedNode . IsFolder && SelectedNode . Expanded )
6691 {
6792 SelectedNode = SelectedNode . ChildNodes [ 0 ] ;
@@ -81,6 +106,26 @@ private bool OnArrowDown()
81106 return true ;
82107 }
83108
109+ private bool OnArrowDownSearch ( )
110+ {
111+ if ( _searchModeTree . Count == 0 )
112+ return false ;
113+
114+ int indexOfSelected = _searchModeTree . IndexOf ( SelectedNode ) ;
115+
116+ if ( indexOfSelected == _searchModeTree . Count - 1 )
117+ return false ;
118+
119+ if ( indexOfSelected == - 1 )
120+ {
121+ SelectedNode = _searchModeTree [ 0 ] ;
122+ return true ;
123+ }
124+
125+ SelectedNode = _searchModeTree [ indexOfSelected + 1 ] ;
126+ return true ;
127+ }
128+
84129 private bool OnArrowDownNone ( )
85130 {
86131 var firstItem = _root . ChildNodes . FirstOrDefault ( ) ;
@@ -94,7 +139,10 @@ private bool OnArrowDownNone()
94139
95140 private bool OnArrowUp ( )
96141 {
97- if ( SelectedNode . IsRoot )
142+ if ( DrawInSearchMode )
143+ return OnArrowUpSearch ( ) ;
144+
145+ if ( SelectedNode == null || SelectedNode . IsRoot )
98146 return false ;
99147
100148 if ( SelectedNode . ParentNode . IsRoot )
@@ -126,6 +174,20 @@ private bool OnArrowUp()
126174 return true ;
127175 }
128176
177+ private bool OnArrowUpSearch ( )
178+ {
179+ if ( _searchModeTree . Count == 0 )
180+ return false ;
181+
182+ int indexOfSelected = _searchModeTree . IndexOf ( SelectedNode ) ;
183+
184+ if ( indexOfSelected <= 0 )
185+ return false ;
186+
187+ SelectedNode = _searchModeTree [ indexOfSelected - 1 ] ;
188+ return true ;
189+ }
190+
129191 private bool IsExpandedFolder ( SelectionNode previousNode )
130192 {
131193 return previousNode . IsFolder && previousNode . Expanded && previousNode . ChildNodes . Count != 0 ;
0 commit comments