@@ -183,23 +183,9 @@ protected bool PromoteNode(TNode previouslyAddedNode, string nextLabel)
183183
184184 public void SetCheckStateOnAll ( bool isChecked )
185185 {
186- var nodeCheckState = isChecked ? CheckState . Checked : CheckState . Empty ;
187186 foreach ( var node in Nodes )
188187 {
189- var wasChecked = node . CheckState == CheckState . Checked ;
190- node . CheckState = nodeCheckState ;
191-
192- if ( ! node . IsFolder )
193- {
194- if ( isChecked && ! wasChecked )
195- {
196- AddCheckedNode ( node ) ;
197- }
198- else if ( ! isChecked && wasChecked )
199- {
200- RemoveCheckedNode ( node ) ;
201- }
202- }
188+ SetCheckStateOnNode ( node , isChecked ? CheckState . Checked : CheckState . Empty ) ;
203189 }
204190 }
205191
@@ -250,60 +236,42 @@ protected void ToggleNodeVisibility(int idx, TNode node)
250236
251237 protected void ToggleNodeChecked ( int idx , TNode node )
252238 {
239+ CheckState checkState ;
253240 var isChecked = false ;
254-
255241 switch ( node . CheckState )
256242 {
257243 case CheckState . Mixed :
258244 case CheckState . Empty :
259- node . CheckState = CheckState . Checked ;
245+ checkState = CheckState . Checked ;
260246 isChecked = true ;
261247 break ;
262248
263249 case CheckState . Checked :
264- node . CheckState = CheckState . Empty ;
250+ checkState = CheckState . Empty ;
265251 break ;
266- }
267252
268- if ( ! node . IsFolder )
269- {
270- if ( isChecked )
271- {
272- AddCheckedNode ( node ) ;
273- }
274- else
275- {
276- RemoveCheckedNode ( node ) ;
277- }
253+ default :
254+ throw new ArgumentOutOfRangeException ( "Unknown CheckState" ) ;
278255 }
279256
257+ SetCheckStateOnNode ( node , checkState ) ;
258+
280259 if ( node . IsFolderOrContainer )
281260 {
282261 ToggleChildrenChecked ( idx , node , isChecked ) ;
283262 }
284263
285- ToggleParentFoldersChecked ( idx , node , isChecked ) ;
264+ ToggleParentFolderAndContainersChecked ( idx , node , isChecked ) ;
286265 }
287266
288267 private void ToggleChildrenChecked ( int idx , TNode node , bool isChecked )
289268 {
290269 for ( var i = idx + 1 ; i < Nodes . Count && node . Level < Nodes [ i ] . Level ; i ++ )
291270 {
292271 var childNode = Nodes [ i ] ;
293- var wasChecked = childNode . CheckState == CheckState . Checked ;
294- childNode . CheckState = isChecked ? CheckState . Checked : CheckState . Empty ;
295272
296- if ( ! childNode . IsFolder )
297- {
298- if ( isChecked && ! wasChecked )
299- {
300- AddCheckedNode ( childNode ) ;
301- }
302- else if ( ! isChecked && wasChecked )
303- {
304- RemoveCheckedNode ( childNode ) ;
305- }
306- }
273+ var wasChecked = childNode . CheckState == CheckState . Checked ;
274+ SetCheckStateOnNode ( node , isChecked ? CheckState . Checked : CheckState . Empty ) ;
307275
308276 if ( childNode . IsFolderOrContainer )
309277 {
@@ -332,7 +300,29 @@ private List<TNode> GetLeafNodes(TNode node, int idx)
332300 return results ;
333301 }
334302
335- private void ToggleParentFoldersChecked ( int idx , TNode node , bool isChecked )
303+ private void SetCheckStateOnNode ( TNode node , CheckState nodeCheckState )
304+ {
305+ var isChecked = nodeCheckState == CheckState . Checked
306+ || nodeCheckState == CheckState . Mixed ;
307+
308+ var wasChecked = node . CheckState == CheckState . Checked ;
309+
310+ node . CheckState = nodeCheckState ;
311+
312+ if ( ! node . IsFolder )
313+ {
314+ if ( isChecked && ! wasChecked )
315+ {
316+ AddCheckedNode ( node ) ;
317+ }
318+ else if ( ! isChecked && wasChecked )
319+ {
320+ RemoveCheckedNode ( node ) ;
321+ }
322+ }
323+ }
324+
325+ private void ToggleParentFolderAndContainersChecked ( int idx , TNode node , bool isChecked )
336326 {
337327 while ( true )
338328 {
@@ -383,14 +373,15 @@ private void ToggleParentFoldersChecked(int idx, TNode node, bool isChecked)
383373
384374 var parentIndex = firstSiblingIndex - 1 ;
385375 var parentNode = Nodes [ parentIndex ] ;
386- if ( siblingsInSameState )
387- {
388- parentNode . CheckState = isChecked ? CheckState . Checked : CheckState . Empty ;
389- }
390- else
391- {
392- parentNode . CheckState = CheckState . Mixed ;
393- }
376+
377+ var parentNodeState =
378+ siblingsInSameState
379+ ? isChecked
380+ ? CheckState . Checked
381+ : CheckState . Empty
382+ : CheckState . Mixed ;
383+
384+ SetCheckStateOnNode ( parentNode , parentNodeState ) ;
394385
395386 idx = parentIndex ;
396387 node = parentNode ;
0 commit comments