@@ -183,23 +183,9 @@ protected bool PromoteNode(TNode previouslyAddedNode, string nextLabel)
183
183
184
184
public void SetCheckStateOnAll ( bool isChecked )
185
185
{
186
- var nodeCheckState = isChecked ? CheckState . Checked : CheckState . Empty ;
187
186
foreach ( var node in Nodes )
188
187
{
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 ) ;
203
189
}
204
190
}
205
191
@@ -250,60 +236,42 @@ protected void ToggleNodeVisibility(int idx, TNode node)
250
236
251
237
protected void ToggleNodeChecked ( int idx , TNode node )
252
238
{
239
+ CheckState checkState ;
253
240
var isChecked = false ;
254
-
255
241
switch ( node . CheckState )
256
242
{
257
243
case CheckState . Mixed :
258
244
case CheckState . Empty :
259
- node . CheckState = CheckState . Checked ;
245
+ checkState = CheckState . Checked ;
260
246
isChecked = true ;
261
247
break ;
262
248
263
249
case CheckState . Checked :
264
- node . CheckState = CheckState . Empty ;
250
+ checkState = CheckState . Empty ;
265
251
break ;
266
- }
267
252
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" ) ;
278
255
}
279
256
257
+ SetCheckStateOnNode ( node , checkState ) ;
258
+
280
259
if ( node . IsFolderOrContainer )
281
260
{
282
261
ToggleChildrenChecked ( idx , node , isChecked ) ;
283
262
}
284
263
285
- ToggleParentFoldersChecked ( idx , node , isChecked ) ;
264
+ ToggleParentFolderAndContainersChecked ( idx , node , isChecked ) ;
286
265
}
287
266
288
267
private void ToggleChildrenChecked ( int idx , TNode node , bool isChecked )
289
268
{
290
269
for ( var i = idx + 1 ; i < Nodes . Count && node . Level < Nodes [ i ] . Level ; i ++ )
291
270
{
292
271
var childNode = Nodes [ i ] ;
293
- var wasChecked = childNode . CheckState == CheckState . Checked ;
294
- childNode . CheckState = isChecked ? CheckState . Checked : CheckState . Empty ;
295
272
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 ) ;
307
275
308
276
if ( childNode . IsFolderOrContainer )
309
277
{
@@ -332,7 +300,29 @@ private List<TNode> GetLeafNodes(TNode node, int idx)
332
300
return results ;
333
301
}
334
302
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 )
336
326
{
337
327
while ( true )
338
328
{
@@ -383,14 +373,15 @@ private void ToggleParentFoldersChecked(int idx, TNode node, bool isChecked)
383
373
384
374
var parentIndex = firstSiblingIndex - 1 ;
385
375
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 ) ;
394
385
395
386
idx = parentIndex ;
396
387
node = parentNode ;
0 commit comments