diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml index f829ff6198..f42dad8f88 100644 --- a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml +++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml @@ -8,63 +8,6 @@ xmlns:tv="http://icsharpcode.net/sharpdevelop/treeview" xmlns:local="clr-namespace:ICSharpCode.CodeAnalysis" xmlns:core="http://icsharpcode.net/sharpdevelop/core"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -92,7 +35,7 @@ Content="{core:Localize ICSharpCode.CodeAnalysis.ProjectOptions.AddRemoveRuleAssembly}"> + Grid.Row="2" Grid.ColumnSpan="3"> @@ -104,34 +47,24 @@ - - - - - - - - - + - + Source="{Binding Item1}"> + @@ -139,22 +72,11 @@ - - - - - - - - - - - - - + + diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs index 9dac8b9661..f2445d89c3 100644 --- a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs +++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs @@ -144,43 +144,32 @@ namespace ICSharpCode.CodeAnalysis } } 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() { - + + Console.WriteLine("SetCategoryicon"); foreach (CategoryTreeNode categoryNode in ruleTreeView.Root.Children) { -// Console.WriteLine(" {0} ",element.Text); + categoryNode.CheckMode(); + /* if (!categoryNode.NewErrorState.HasValue) { - Console.WriteLine (" {0} is Mixed Mode",categoryNode.Text); + Console.WriteLine ("\t{0} is Mixed Mode",categoryNode.Text); categoryNode.AddMixedMode(); } else{ if (categoryNode.NewErrorState == true) { - Console.WriteLine (" {0} is Error",categoryNode.Text); - categoryNode.Index = 1; + Console.WriteLine ("\t{0} is Error",categoryNode.Text); +// categoryNode.Index = 1; } else { - Console.WriteLine (" {0} is Warning",categoryNode.Text); + Console.WriteLine ("\t{0} is Warning",categoryNode.Text); +// categoryNode.Index = ; } } + */ } Console.WriteLine("--------------"); - + } string ruleString = ""; @@ -219,7 +208,6 @@ namespace ICSharpCode.CodeAnalysis #endregion - #region RuleList void ReloadRuleList() @@ -254,7 +242,6 @@ namespace ICSharpCode.CodeAnalysis rules[ruleNode.Identifier] = ruleNode; } } - ReadRuleString(); initSuccess = true; } @@ -265,16 +252,18 @@ namespace ICSharpCode.CodeAnalysis private void OnPropertyChanged(object sender,System.ComponentModel.PropertyChangedEventArgs e) { if (initSuccess) { - base.IsDirty = true; + Console.WriteLine("OnPropertyChanged {0}",e.PropertyName); if (e.PropertyName == "Index") { - RuleTreeNode r = sender as RuleTreeNode; - if (r != null) { - var p = r.Parent; - if (p != null) { - SetCategoryIcon(); - } - } + base.IsDirty = true; +// var rule = sender as RuleTreeNode; +// if (rule != null) { +// var cat = rule.Parent as CategoryTreeNode; +// if (cat != null) { +// cat.CheckMode(); +// } +// } } + } } @@ -321,73 +310,8 @@ namespace ICSharpCode.CodeAnalysis } } - void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) - { -// throw new NotImplementedException(); - } - #endregion - - } - - public class TypeSelector : DataTemplateSelector - { - - public DataTemplate ComboTemplate { get; set; } - public DataTemplate TxtTemplate { get; set; } - - public override DataTemplate SelectTemplate(object item, DependencyObject container) - { - Console.WriteLine ("------- TypeSelector ---------"); - var rule = item as RuleTreeNode; - - if (rule != null) { - return ComboTemplate; - } - - var cat = item as CategoryTreeNode; - - if (cat != null) { - if (!cat.NewErrorState.HasValue) { - //Mixed Mode - return TxtTemplate; - } else { - //All childs has same value - return ComboTemplate; - } - } - return ComboTemplate; - } - } - - - [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; - } - public object ConvertBack(object value, Type targetType, - 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 index 95338ceda2..065e383a9c 100644 --- a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs +++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs @@ -26,16 +26,42 @@ namespace ICSharpCode.CodeAnalysis public class BaseTree:SharpTreeNode { private int index; - + + + public BaseTree() { - RuleState = new ObservableCollection>(); - this.RuleState.Add(Tuple.Create(SystemIcons.Warning,ResourceService.GetString("Global.WarningText"))); - this.RuleState.Add(Tuple.Create(SystemIcons.Error,ResourceService.GetString("Global.ErrorText"))); + RuleState = new ObservableCollection>(); + + Icon icon = SystemIcons.Warning; + ImageSource imageSource = ToImageSource(icon); + this.RuleState.Add(Tuple.Create(imageSource, + ResourceService.GetString("Global.WarningText"))); + + icon = SystemIcons.Error; + imageSource = ToImageSource(icon); + this.RuleState.Add(Tuple.Create(imageSource, + ResourceService.GetString("Global.ErrorText"))); // bla.Add(Tuple.Create(null,"None")); } - public ObservableCollection> RuleState {get;set;} + private static ImageSource ToImageSource( Icon icon) + { + Bitmap bitmap = icon.ToBitmap(); + IntPtr hBitmap = bitmap.GetHbitmap(); + + ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap( + hBitmap, + IntPtr.Zero, + Int32Rect.Empty, + BitmapSizeOptions.FromEmptyOptions()); + + return wpfBitmap; + } + + + + public ObservableCollection> RuleState {get;set;} private Tuple selectedItem; @@ -48,10 +74,7 @@ namespace ICSharpCode.CodeAnalysis public virtual int Index { get { return index; } set { - if (index != value) { - index = value; - } - base.RaisePropertyChanged("Index"); + index = value; } } } @@ -61,7 +84,7 @@ namespace ICSharpCode.CodeAnalysis public class CategoryTreeNode : BaseTree { internal FxCopCategory category; - private Tuple mixedTuple; + private Tuple mixedModeTuple; public CategoryTreeNode(FxCopCategory category):base() { @@ -71,6 +94,7 @@ namespace ICSharpCode.CodeAnalysis this.Children.Add(new RuleTreeNode(rule)); } + CheckMode(); } @@ -87,28 +111,65 @@ namespace ICSharpCode.CodeAnalysis set { if (value != base.Index) { base.Index = value; - if (mixedTuple == null) { + if (mixedModeTuple == null) { + Console.WriteLine("Set all to index"); foreach (RuleTreeNode rule in this.Children) { rule.Index = Index; } + base.RaisePropertyChanged("Index"); } - } } } - public void AddMixedMode() + private void AddMixedMode() { - Bitmap b = (Bitmap)ResourceService.GetImageResource("Icons.16x16.ClosedFolderBitmap"); - System.Drawing.Icon ico = (Icon)System.Drawing.Icon.FromHandle(b.GetHicon()); - - mixedTuple = Tuple.Create(ico, - StringParser.Parse("${res:ICSharpCode.CodeAnalysis.ProjectOptions.WarningErrorMixed}")); - RuleState.Add(mixedTuple); - Index = RuleState.Count -1; + Console.WriteLine("AddMixedMode"); + if (!RuleState.Contains(mixedModeTuple)) { + var image = PresentationResourceService.GetBitmapSource("Icons.16x16.ClosedFolderBitmap"); + mixedModeTuple = Tuple.Create(image, + StringParser.Parse("${res:ICSharpCode.CodeAnalysis.ProjectOptions.WarningErrorMixed}")); + RuleState.Add(mixedModeTuple); + Index = RuleState.Count -1; + base.RaisePropertyChanged("Index"); + CheckMode(); + } } + private void RemoveMixedMode() + { + Console.WriteLine("RemoveMixedMode("); + if (mixedModeTuple != null) { + if (RuleState.Contains(mixedModeTuple)) { + RuleState.Remove(mixedModeTuple); + mixedModeTuple = null; + base.RaisePropertyChanged("Index"); + CheckMode(); + } + } + } + + public void CheckMode () + { + Console.WriteLine("CheckMode"); + if (!NewErrorState.HasValue) { + Console.WriteLine ("\t{0} is Mixed Mode",Text); + AddMixedMode(); +// categoryNode.AddMixedMode(); + } else{ + RemoveMixedMode(); + if (NewErrorState == true) { + Console.WriteLine ("\t{0} is Error",Text); +// categoryNode.Index = 1; + } else { + Console.WriteLine ("\t{0} is Warning",Text); +// categoryNode.Index = ; + } + } + } + + public Nullable NewErrorState { get { bool allWarn = true; @@ -160,13 +221,7 @@ namespace ICSharpCode.CodeAnalysis internal bool isError { get { return error; } set { - if (error != value) { - error = value; - - if (error) { - base.Index = 1; - } - } + error = value; } } @@ -197,12 +252,8 @@ namespace ICSharpCode.CodeAnalysis if (base.Index != value) { isError = value == 1; base.Index = value; - -// if (base.Index == 1) { -// error = true; -// } else { -// error = false; -// } + var p = Parent as CategoryTreeNode; + p.CheckMode(); Console.WriteLine ("RuleNode {0} - index {1} - error {2}",rule.DisplayName,Index, isError); } }