@@ -26,18 +26,30 @@ public interface ITreeNode
26
26
27
27
public abstract class TreeBase < TNode , TData > where TNode : class , ITreeNode where TData : struct , ITreeData
28
28
{
29
+ protected ILogging Logger { get ; }
30
+
31
+ protected TreeBase ( )
32
+ {
33
+ Logger = Logging . GetLogger ( GetType ( ) ) ;
34
+ }
35
+
29
36
public abstract IEnumerable < string > GetCheckedFiles ( ) ;
30
37
31
38
public void Load ( IEnumerable < TData > treeDatas )
32
39
{
40
+ Logger . Trace ( "Load" ) ;
41
+
33
42
var collapsedFolders = new HashSet < string > ( GetCollapsedFolders ( ) ) ;
34
43
var selectedNodePath = SelectedNodePath ;
35
44
var checkedFiles = new HashSet < string > ( GetCheckedFiles ( ) ) ;
45
+ var pathSeparator = PathSeparator ;
36
46
37
47
Clear ( ) ;
38
48
39
49
var displayRootLevel = DisplayRootNode ? 1 : 0 ;
40
50
51
+ var isCheckable = IsCheckable ;
52
+
41
53
var isSelected = IsSelectable && selectedNodePath != null && Title == selectedNodePath ;
42
54
AddNode ( Title , Title , - 1 + displayRootLevel , true , false , false , false , isSelected , false , null ) ;
43
55
@@ -48,12 +60,12 @@ public void Load(IEnumerable<TData> treeDatas)
48
60
49
61
foreach ( var treeData in treeDatas )
50
62
{
51
- var parts = treeData . Path . Split ( new [ ] { PathSeparator } , StringSplitOptions . None ) ;
63
+ var parts = treeData . Path . Split ( new [ ] { pathSeparator } , StringSplitOptions . None ) ;
52
64
for ( var i = 0 ; i < parts . Length ; i ++ )
53
65
{
54
66
var label = parts [ i ] ;
55
67
var level = i + 1 ;
56
- var nodePath = String . Join ( PathSeparator , parts , 0 , level ) ;
68
+ var nodePath = String . Join ( pathSeparator , parts , 0 , level ) ;
57
69
var isFolder = i < parts . Length - 1 ;
58
70
var alreadyExists = folders . Contains ( nodePath ) ;
59
71
if ( ! alreadyExists )
@@ -95,7 +107,7 @@ public void Load(IEnumerable<TData> treeDatas)
95
107
{
96
108
isActive = treeData . IsActive ;
97
109
treeNodeTreeData = treeData ;
98
- isChecked = checkedFiles . Contains ( nodePath ) ;
110
+ isChecked = isCheckable && checkedFiles . Contains ( nodePath ) ;
99
111
}
100
112
101
113
isSelected = selectedNodePath != null && nodePath == selectedNodePath ;
@@ -105,19 +117,20 @@ public void Load(IEnumerable<TData> treeDatas)
105
117
}
106
118
}
107
119
108
- if ( IsCheckable && checkedFiles . Any ( ) )
120
+ if ( isCheckable && checkedFiles . Any ( ) )
109
121
{
110
- for ( var index = Nodes . Count - 1 ; index >= 0 ; index -- )
122
+ var nodes = Nodes ;
123
+ for ( var index = nodes . Count - 1 ; index >= 0 ; index -- )
111
124
{
112
- var node = Nodes [ index ] ;
125
+ var node = nodes [ index ] ;
113
126
if ( node . Level >= 0 && node . IsFolder )
114
127
{
115
128
bool ? anyChecked = null ;
116
129
bool ? allChecked = null ;
117
130
118
- for ( var i = index + 1 ; i < Nodes . Count ; i ++ )
131
+ for ( var i = index + 1 ; i < nodes . Count ; i ++ )
119
132
{
120
- var nodeCompare = Nodes [ i ] ;
133
+ var nodeCompare = nodes [ i ] ;
121
134
if ( nodeCompare . Level < node . Level + 1 )
122
135
{
123
136
break ;
0 commit comments