@@ -43,7 +43,7 @@ public SearchForIssuesDialog()
4343 {
4444 InitializeComponent ( ) ;
4545 FixCheckBox_Unchecked ( null , null ) ;
46- treeView . Root = new RootTreeNode ( IssueManager . IssueProviders ) ;
46+ treeView . Root = new RootTreeNode ( IssueManager . IssueProviders , TreeNodeCheckedChanged ) ;
4747 searchInRBG . SelectedValue = SearchForIssuesTarget . WholeSolution ;
4848 LoadPreviousSelectionFromSettings ( ) ;
4949 }
@@ -75,7 +75,15 @@ public bool FixIssues {
7575 return fixCheckBox . IsChecked == true ;
7676 }
7777 }
78-
78+
79+ void TreeNodeCheckedChanged ( )
80+ {
81+ if ( treeView . Root == null ) return ;
82+ fixCheckBox . IsEnabled = ! treeView . Root . DescendantsAndSelf ( )
83+ . OfType < IssueTreeNode > ( )
84+ . Any ( n => n . IsChecked == true && ! n . Provider . Attribute . SupportsAutoFix ) ;
85+ }
86+
7987 void searchButton_Click ( object sender , RoutedEventArgs e )
8088 {
8189 DialogResult = true ;
@@ -109,12 +117,16 @@ abstract class BaseTreeNode : SharpTreeNode
109117
110118 sealed class RootTreeNode : BaseTreeNode
111119 {
112- internal RootTreeNode ( IEnumerable < IssueManager . IssueProvider > providers )
120+ readonly Action checkedChanged ;
121+
122+ internal RootTreeNode ( IEnumerable < IssueManager . IssueProvider > providers , Action checkedChanged )
113123 {
114124 this . Children . AddRange ( providers . Where ( p => p . Attribute != null )
115- . GroupBy ( p => p . Attribute . Category , ( key , g ) => new CategoryTreeNode ( key , g ) ) ) ;
125+ . GroupBy ( p => p . Attribute . Category , ( key , g ) => new CategoryTreeNode ( key , g , checkedChanged ) ) ) ;
116126 this . IsChecked = false ;
117127 this . IsExpanded = true ;
128+ this . checkedChanged = checkedChanged ;
129+ this . PropertyChanged += OnPropertyChanged ;
118130 }
119131
120132 public override string Key {
@@ -128,17 +140,26 @@ public override object Text {
128140 public override bool IsCheckable {
129141 get { return true ; }
130142 }
143+
144+ void OnPropertyChanged ( object sender , System . ComponentModel . PropertyChangedEventArgs e )
145+ {
146+ if ( checkedChanged != null && e . PropertyName == "IsChecked" )
147+ checkedChanged ( ) ;
148+ }
131149 }
132150
133151 sealed class CategoryTreeNode : BaseTreeNode
134152 {
135153 readonly string categoryName ;
154+ readonly Action checkedChanged ;
136155
137- internal CategoryTreeNode ( string categoryName , IEnumerable < IssueManager . IssueProvider > providers )
156+ internal CategoryTreeNode ( string categoryName , IEnumerable < IssueManager . IssueProvider > providers , Action checkedChanged )
138157 {
139158 this . categoryName = categoryName ;
140- this . Children . AddRange ( providers . Select ( p => new IssueTreeNode ( p ) ) ) ;
159+ this . Children . AddRange ( providers . Select ( p => new IssueTreeNode ( p , checkedChanged ) ) ) ;
141160 this . IsExpanded = true ;
161+ this . checkedChanged = checkedChanged ;
162+ this . PropertyChanged += OnPropertyChanged ;
142163 }
143164
144165 public override string Key {
@@ -152,17 +173,26 @@ public override object Text {
152173 public override bool IsCheckable {
153174 get { return true ; }
154175 }
176+
177+ void OnPropertyChanged ( object sender , System . ComponentModel . PropertyChangedEventArgs e )
178+ {
179+ if ( checkedChanged != null && e . PropertyName == "IsChecked" )
180+ checkedChanged ( ) ;
181+ }
155182 }
156183
157184 sealed class IssueTreeNode : BaseTreeNode
158185 {
159186 internal readonly IssueManager . IssueProvider Provider ;
160187 readonly IssueDescriptionAttribute attribute ;
188+ readonly Action checkedChanged ;
161189
162- internal IssueTreeNode ( IssueManager . IssueProvider provider )
190+ internal IssueTreeNode ( IssueManager . IssueProvider provider , Action checkedChanged )
163191 {
164192 this . Provider = provider ;
165193 this . attribute = provider . Attribute ;
194+ this . checkedChanged = checkedChanged ;
195+ this . PropertyChanged += OnPropertyChanged ;
166196 }
167197
168198 public override string Key {
@@ -180,6 +210,12 @@ public override object Text {
180210 public override object ToolTip {
181211 get { return attribute . Description ; }
182212 }
213+
214+ void OnPropertyChanged ( object sender , System . ComponentModel . PropertyChangedEventArgs e )
215+ {
216+ if ( checkedChanged != null && e . PropertyName == "IsChecked" )
217+ checkedChanged ( ) ;
218+ }
183219 }
184220 }
185221}
0 commit comments