diff --git a/src/AddIns/Analysis/CodeAnalysis/CodeAnalysis.csproj b/src/AddIns/Analysis/CodeAnalysis/CodeAnalysis.csproj
index 56a8a9d0e1..f15494109a 100644
--- a/src/AddIns/Analysis/CodeAnalysis/CodeAnalysis.csproj
+++ b/src/AddIns/Analysis/CodeAnalysis/CodeAnalysis.csproj
@@ -72,6 +72,7 @@
AnalysisProjectOptionsPanelXaml.xaml
Code
+
diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml
index a96d97aef5..7dc0ca2cb9 100644
--- a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml
+++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml
@@ -8,9 +8,43 @@
xmlns:tv="http://icsharpcode.net/sharpdevelop/treeview"
xmlns:local="clr-namespace:ICSharpCode.CodeAnalysis"
xmlns:core="http://icsharpcode.net/sharpdevelop/core">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -30,15 +64,15 @@
-
+
-
+
-
+
@@ -49,26 +83,38 @@
+
+
+
+
+
+
+
+
-
+
+
+
diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs
index 6d17061ffa..bf10252ce2 100644
--- a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs
+++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs
@@ -44,14 +44,14 @@ namespace ICSharpCode.CodeAnalysis
private bool userCheck;
private Dictionary rules = new Dictionary();
- private List> bla = new List>();
+ private List> bla = new List>();
public AnalysisProjectOptionsPanelXaml()
{
InitializeComponent();
DataContext = this;
- bla.Add(Tuple.Create(SystemIcons.Warning,"Warning"));
- bla.Add(Tuple.Create(SystemIcons.Error,"Error"));
+ bla.Add(Tuple.Create(SystemIcons.Warning,"Warning",0));
+ bla.Add(Tuple.Create(SystemIcons.Error,"Error",1));
// bla.Add(Tuple.Create(null,"None"));
}
@@ -86,12 +86,12 @@ namespace ICSharpCode.CodeAnalysis
ruleAssemblies = value;
if (initSuccess) {
- //// OnOptionChanged(EventArgs.Empty);
ReloadRuleList();
}
}
}
}
+
#endregion
#region Rule string Property
@@ -106,20 +106,18 @@ namespace ICSharpCode.CodeAnalysis
b.Append(';');
if ((bool)rule.IsChecked)
b.Append('+');
-
else
b.Append('-');
if (rule.isError)
b.Append('!');
b.Append(rule.Identifier);
}
- Console.WriteLine("");
- Console.WriteLine(b.ToString());
}
}
return b.ToString();
}
+
void ReadRuleString()
{
userCheck = false;
@@ -150,21 +148,42 @@ namespace ICSharpCode.CodeAnalysis
ruleNode.isError = error;
}
}
- /*
- foreach (SharpTreeNode cat in ruleTreeView.Root.Children) {
- bool noneChecked = true;
- foreach (RuleTreeNode rtn in cat.Children) {
- if ((bool)rtn.IsChecked) {
- noneChecked = false;
- break;
+ userCheck = true;
+// SetCategoryIcon();
+ SetCategoryIcon();
+ }
+
+ /*
+ void oldSetCategoryIcon()
+ {
+ foreach (CategoryTreeNode element in ruleTreeView.Root.Children) {
+ Console.WriteLine(" {0} - errorstate {1}",element.Text, element.ErrorState.ToString());
+ if (element.ErrorState > -1) {
+ element.Index = element.ErrorState;
+ }
+ Console.WriteLine("-------------------------");
+ }
+
+ }
+ */
+
+
+ void SetCategoryIcon() {
+ foreach (CategoryTreeNode element in ruleTreeView.Root.Children) {
+// Console.WriteLine(" {0} ",element.Text);
+ if (!element.NewErrorState.HasValue) {
+ Console.WriteLine (" {0} is Mixed Mode",element.Text);
+ } else{
+ if (element.NewErrorState == true) {
+ Console.WriteLine (" {0} is Error",element.Text);
+ element.Index = 1;
+ } else {
+ Console.WriteLine (" {0} is Warning",element.Text);
}
}
- cat.IsChecked = !noneChecked;
- } */
- userCheck = true;
+ }
}
-
string ruleString = "";
public string RuleString {
@@ -229,18 +248,16 @@ namespace ICSharpCode.CodeAnalysis
} else {
foreach (FxCopCategory cat in ruleList) {
CategoryTreeNode catNode = new CategoryTreeNode(cat,bla);
+ catNode.PropertyChanged += OnPropertyChanged;
ruleTreeView.Root.Children.Add(catNode);
foreach (RuleTreeNode ruleNode in catNode.Children) {
+ ruleNode.PropertyChanged += OnPropertyChanged;
rules[ruleNode.Identifier] = ruleNode;
}
}
- initSuccess = true;
+
ReadRuleString();
- foreach (var element in ruleTreeView.Root.Children) {
- element.PropertyChanged += delegate {
- base.IsDirty = true;
- };
- }
+ initSuccess = true;
}
}
}
@@ -248,9 +265,20 @@ namespace ICSharpCode.CodeAnalysis
private void OnPropertyChanged(object sender,System.ComponentModel.PropertyChangedEventArgs e)
{
- base.IsDirty = true;
+ if (initSuccess) {
+ base.IsDirty = true;
+ if (e.PropertyName == "Index") {
+ RuleTreeNode r = sender as RuleTreeNode;
+ if (r != null) {
+ var p = r.Parent;
+ if (p != null) {
+ SetCategoryIcon();
+ }
+ }
+ }
+ }
}
-
+
private string[] GetRuleAssemblyList(bool replacePath)
{
@@ -270,6 +298,7 @@ namespace ICSharpCode.CodeAnalysis
return list.ToArray();
}
+
private void ChangeRuleAssembliesButtonClick( object sender, RoutedEventArgs e)
{
var stringListDialog = new StringListEditorDialog();
@@ -289,183 +318,59 @@ namespace ICSharpCode.CodeAnalysis
this.RuleAssemblies = b.ToString();
} finally {
initSuccess = oldInitSuccess;
-// base.IsDirty = true;
}
}
}
-
#endregion
+ }
+
+ public class TypeSelector : DataTemplateSelector
+ {
- #region TreeNodes
-
- class BaseTree:SharpTreeNode
- {
- private int index;
-
- public BaseTree(IEnumerable> ruleState)
- {
- this.RuleState = ruleState;
- }
-
- public IEnumerable> RuleState {get;set;}
-
-
- public virtual int Index {
- get { return index; }
- set {
- if (index != value) {
- index = value;
- switch (index) {
- case 0:
- break;
- case 1:
- break;
- case 2:
- break;
- default:
- break;
- }
- base.RaisePropertyChanged("Index");
- }
- }
-
- }
- }
-
-
- class CategoryTreeNode : BaseTree
- {
- internal FxCopCategory category;
-
- public CategoryTreeNode(FxCopCategory category,IEnumerable> bla):base(bla)
- {
- this.category = category;
- foreach (FxCopRule rule in category.Rules) {
- this.Children.Add(new RuleTreeNode(rule,bla));
- }
- }
-
-
- public override bool IsCheckable {
- get { return true; }
- }
-
- public override object Text {
- get { return category.DisplayName; }
- }
-
-
- internal int ErrorState {
- get {
- bool allWarn = true;
- bool allErr = true;
- foreach (RuleTreeNode tn in Children) {
- if (tn.isError)
- allWarn = false;
- else
- allErr = false;
- }
- if (allErr)
- return 1;
- else if (allWarn)
- return 0;
- else
- return -1;
- }
- }
- }
-
+ public DataTemplate ComboTemplate { get; set; }
+ public DataTemplate TxtTemplate { get; set; }
- class RuleTreeNode :BaseTree
+ public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
- internal FxCopRule rule;
-// internal bool isError;
- bool error;
-
- internal bool isError {
- get { return error; }
- set { error = value;
- if (error) {
- base.Index = 1;
- }
- }
- }
-
- public RuleTreeNode(FxCopRule rule,IEnumerable> ruleState):base(ruleState)
- {
- this.rule = rule;
- }
-
- public override bool IsCheckable {
- get { return true; }
- }
-
- public override object Text {
- get { return rule.CheckId + " : " + rule.DisplayName; }
- }
-
- public string Identifier {
- get {
- return rule.CategoryName + "#" + rule.CheckId;
- }
- }
-
- public override int Index {
- get { return base.Index; }
- set { base.Index = value;
- if (Index == 1) {
- error = true;
- }
- }
- }
+// var element = item as RuleTreeNode;
+// if (element != null) {
+// return ComboTemplate;
+// } else {
+// return TxtTemplate;
+// }
+ return ComboTemplate;
}
-
- class MessageNode : SharpTreeNode
- {
- private string message;
- public MessageNode (string message)
- {
- this.message = message;
- }
-
- public override object Text {
- get { return message; }
- }
- }
- #endregion
-
}
-
+
[ValueConversion(typeof(System.Drawing.Icon), typeof(System.Windows.Media.ImageSource))]
public class ImageConverter : IValueConverter
- {
+ {
public object Convert(object value, Type targetType,
- object parameter, CultureInfo culture)
- {
- // empty images are empty...
- if (value == null) { return null; }
- var image = (System.Drawing.Icon)value;
- // Winforms Image we want to get the WPF Image from...
- var bitmap = new System.Windows.Media.Imaging.BitmapImage();
- bitmap.BeginInit();
- MemoryStream memoryStream = new MemoryStream();
- // Save to a memory stream...
- image.Save(memoryStream);
- // Rewind the stream...
- memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
- bitmap.StreamSource = memoryStream;
- bitmap.EndInit();
- return bitmap;
- }
+ object parameter, CultureInfo culture)
+ {
+ // empty images are empty...
+ if (value == null) { return null; }
+ var image = (System.Drawing.Icon)value;
+ // Winforms Image we want to get the WPF Image from...
+ var bitmap = new System.Windows.Media.Imaging.BitmapImage();
+ bitmap.BeginInit();
+ MemoryStream memoryStream = new MemoryStream();
+ // Save to a memory stream...
+ image.Save(memoryStream);
+ // Rewind the stream...
+ memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+ bitmap.StreamSource = memoryStream;
+ bitmap.EndInit();
+ return bitmap;
+ }
public object ConvertBack(object value, Type targetType,
- object parameter, CultureInfo culture)
- {
- return null;
- }
+ object parameter, CultureInfo culture)
+ {
+ return null;
+ }
}
-
}
\ No newline at end of file
diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs
new file mode 100644
index 0000000000..042d7332ae
--- /dev/null
+++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs
@@ -0,0 +1,199 @@
+/*
+ * Created by SharpDevelop.
+ * User: Peter Forstmeier
+ * Date: 30.06.2012
+ * Time: 20:55
+ * To change this template use Tools | Options | Coding | Edit Standard Headers.
+ */
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+
+using ICSharpCode.TreeView;
+
+namespace ICSharpCode.CodeAnalysis
+{
+ ///
+ /// Description of AnalysisProjectOptionsTreeNodes.
+ ///
+ public class BaseTree:SharpTreeNode
+ {
+ private int index;
+
+ public BaseTree(IEnumerable> ruleState)
+ {
+ this.RuleState = ruleState;
+ }
+
+ public IEnumerable> RuleState {get;set;}
+
+
+ public virtual int Index {
+ get { return index; }
+ set {
+ if (index != value) {
+ index = value;
+ switch (index) {
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ break;
+ default:
+ break;
+ }
+ base.RaisePropertyChanged("Index");
+ }
+ }
+ }
+ }
+
+
+ public class CategoryTreeNode : BaseTree
+ {
+ internal FxCopCategory category;
+
+ public CategoryTreeNode(FxCopCategory category,IEnumerable> bla):base(bla)
+ {
+ this.category = category;
+ foreach (FxCopRule rule in category.Rules) {
+ this.Children.Add(new RuleTreeNode(rule,bla));
+ }
+ }
+
+
+ public override bool IsCheckable {
+ get { return true; }
+ }
+
+ public override object Text {
+ get { return category.DisplayName; }
+ }
+
+ public override int Index {
+ get { return base.Index; }
+ set {
+ if (value != base.Index) {
+ base.Index = value;
+ foreach (RuleTreeNode rule in this.Children) {
+ rule.Index = Index;
+ }
+ }
+ }
+ }
+
+
+
+ public Nullable NewErrorState {
+ get {
+ bool allWarn = true;
+ bool allErr = true;
+ foreach (RuleTreeNode tn in Children) {
+ if (tn.isError)
+ allWarn = false;
+ else
+ allErr = false;
+ }
+ if (allErr)
+ return true;
+ else if (allWarn)
+ return false;
+ else
+ return null;
+
+ }
+ }
+
+ /*
+ internal int ErrorState {
+ get {
+ bool allWarn = true;
+ bool allErr = true;
+ foreach (RuleTreeNode tn in Children) {
+ if (tn.isError)
+ allWarn = false;
+ else
+ allErr = false;
+ }
+ if (allErr)
+ return 1;
+ else if (allWarn)
+ return 0;
+ else
+ return -1;
+ }
+ }
+ */
+ }
+
+
+ public class RuleTreeNode :BaseTree
+ {
+ internal FxCopRule rule;
+ bool error;
+
+ internal bool isError {
+ get { return error; }
+ set {
+ if (error != value) {
+ error = value;
+ if (error) {
+ base.Index = 1;
+ }
+ }
+
+ }
+ }
+
+ public RuleTreeNode(FxCopRule rule,IEnumerable> ruleState):base(ruleState)
+ {
+ this.rule = rule;
+ }
+
+ public override bool IsCheckable {
+ get { return true; }
+ }
+
+ public override object Text {
+ get { return rule.CheckId + " : " + rule.DisplayName; }
+ }
+
+ public string Identifier {
+ get {
+ return rule.CategoryName + "#" + rule.CheckId;
+ }
+ }
+
+
+ public override int Index {
+ get { return base.Index; }
+ set {
+ if (value != Index) {
+ if (Index == 1) {
+ error = true;
+ } else {
+ error = false;
+ }
+ base.Index = value;
+ }
+ }
+ }
+ }
+
+
+ public class MessageNode : SharpTreeNode
+ {
+ private string message;
+
+ public MessageNode (string message)
+ {
+ this.message = message;
+ }
+
+ public override object Text {
+ get { return message; }
+ }
+ }
+
+}