Browse Source

fix #316: Error when running Search for issues with Automatically Fix enabled.

Disable "Fix issues" feature once an "unfixable" issue is selected.
pull/520/head
Siegfried Pammer 11 years ago
parent
commit
281d132e43
  1. 48
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesDialog.xaml.cs

48
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesDialog.xaml.cs

@ -43,7 +43,7 @@ namespace CSharpBinding.Refactoring
{ {
InitializeComponent(); InitializeComponent();
FixCheckBox_Unchecked(null, null); FixCheckBox_Unchecked(null, null);
treeView.Root = new RootTreeNode(IssueManager.IssueProviders); treeView.Root = new RootTreeNode(IssueManager.IssueProviders, TreeNodeCheckedChanged);
searchInRBG.SelectedValue = SearchForIssuesTarget.WholeSolution; searchInRBG.SelectedValue = SearchForIssuesTarget.WholeSolution;
LoadPreviousSelectionFromSettings(); LoadPreviousSelectionFromSettings();
} }
@ -76,6 +76,14 @@ namespace CSharpBinding.Refactoring
} }
} }
void TreeNodeCheckedChanged()
{
if (treeView.Root == null) return;
fixCheckBox.IsEnabled = !treeView.Root.DescendantsAndSelf()
.OfType<IssueTreeNode>()
.Any(n => n.IsChecked == true && !n.Provider.Attribute.SupportsAutoFix);
}
void searchButton_Click(object sender, RoutedEventArgs e) void searchButton_Click(object sender, RoutedEventArgs e)
{ {
DialogResult = true; DialogResult = true;
@ -109,12 +117,16 @@ namespace CSharpBinding.Refactoring
sealed class RootTreeNode : BaseTreeNode sealed class RootTreeNode : BaseTreeNode
{ {
internal RootTreeNode(IEnumerable<IssueManager.IssueProvider> providers) readonly Action checkedChanged;
internal RootTreeNode(IEnumerable<IssueManager.IssueProvider> providers, Action checkedChanged)
{ {
this.Children.AddRange(providers.Where(p => p.Attribute != null) this.Children.AddRange(providers.Where(p => p.Attribute != null)
.GroupBy(p => p.Attribute.Category, (key, g) => new CategoryTreeNode(key, g))); .GroupBy(p => p.Attribute.Category, (key, g) => new CategoryTreeNode(key, g, checkedChanged)));
this.IsChecked = false; this.IsChecked = false;
this.IsExpanded = true; this.IsExpanded = true;
this.checkedChanged = checkedChanged;
this.PropertyChanged += OnPropertyChanged;
} }
public override string Key { public override string Key {
@ -128,17 +140,26 @@ namespace CSharpBinding.Refactoring
public override bool IsCheckable { public override bool IsCheckable {
get { return true; } get { return true; }
} }
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (checkedChanged != null && e.PropertyName == "IsChecked")
checkedChanged();
}
} }
sealed class CategoryTreeNode : BaseTreeNode sealed class CategoryTreeNode : BaseTreeNode
{ {
readonly string categoryName; readonly string categoryName;
readonly Action checkedChanged;
internal CategoryTreeNode(string categoryName, IEnumerable<IssueManager.IssueProvider> providers) internal CategoryTreeNode(string categoryName, IEnumerable<IssueManager.IssueProvider> providers, Action checkedChanged)
{ {
this.categoryName = categoryName; this.categoryName = categoryName;
this.Children.AddRange(providers.Select(p => new IssueTreeNode(p))); this.Children.AddRange(providers.Select(p => new IssueTreeNode(p, checkedChanged)));
this.IsExpanded = true; this.IsExpanded = true;
this.checkedChanged = checkedChanged;
this.PropertyChanged += OnPropertyChanged;
} }
public override string Key { public override string Key {
@ -152,17 +173,26 @@ namespace CSharpBinding.Refactoring
public override bool IsCheckable { public override bool IsCheckable {
get { return true; } get { return true; }
} }
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (checkedChanged != null && e.PropertyName == "IsChecked")
checkedChanged();
}
} }
sealed class IssueTreeNode : BaseTreeNode sealed class IssueTreeNode : BaseTreeNode
{ {
internal readonly IssueManager.IssueProvider Provider; internal readonly IssueManager.IssueProvider Provider;
readonly IssueDescriptionAttribute attribute; readonly IssueDescriptionAttribute attribute;
readonly Action checkedChanged;
internal IssueTreeNode(IssueManager.IssueProvider provider) internal IssueTreeNode(IssueManager.IssueProvider provider, Action checkedChanged)
{ {
this.Provider = provider; this.Provider = provider;
this.attribute = provider.Attribute; this.attribute = provider.Attribute;
this.checkedChanged = checkedChanged;
this.PropertyChanged += OnPropertyChanged;
} }
public override string Key { public override string Key {
@ -180,6 +210,12 @@ namespace CSharpBinding.Refactoring
public override object ToolTip { public override object ToolTip {
get { return attribute.Description; } get { return attribute.Description; }
} }
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (checkedChanged != null && e.PropertyName == "IsChecked")
checkedChanged();
}
} }
} }
} }

Loading…
Cancel
Save