Browse Source

Set MixedMode by adding Tuple to RuleState

pull/30/head
PeterForstmeier 14 years ago
parent
commit
e009596f6e
  1. 48
      src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml
  2. 35
      src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs
  3. 86
      src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs

48
src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml

@ -9,13 +9,18 @@ @@ -9,13 +9,18 @@
xmlns:local="clr-namespace:ICSharpCode.CodeAnalysis"
xmlns:core="http://icsharpcode.net/sharpdevelop/core">
<optionpanels:ProjectOptionPanel.Resources>
<local:ImageConverter x:Key="imageConverter"></local:ImageConverter>
<DataTemplate x:Key="comboTemplate">
<ComboBox Background="Transparent" Width="100"
HorizontalAlignment="Center" VerticalAlignment="Center"
ItemsSource="{Binding Path=RuleState}"
SelectedItem="{Binding SelectedNode}"
IsReadOnly="False"
SelectionChanged="ComboBox_SelectionChanged"
SelectedIndex="{Binding Index}">
<ComboBox.ItemTemplate>
@ -32,8 +37,14 @@ @@ -32,8 +37,14 @@
</ComboBox>
</DataTemplate>
<!--<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListViewItem}}, Path=IsSelected}" Value="True">
<Setter TargetName="MyGrid" Property="Background" Value="Red" />
</DataTrigger>
</DataTemplate.Triggers>-->
<DataTemplate x:Key="txtTemplate">
<!-- <DataTemplate x:Key="txtTemplate">
<StackPanel Orientation="Horizontal">
<Image VerticalAlignment="Center" Height="15" Margin="3,0,5,0"
Source="{Binding MixedModeIcon}"></Image>
@ -41,12 +52,17 @@ @@ -41,12 +52,17 @@
<TextBlock Text="{Binding MixedModeText}"></TextBlock>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListViewItem}}, Path=IsSelected}" Value="True">
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
-->
<local:TypeSelector x:Key="TypeSelector" ComboTemplate="{StaticResource comboTemplate}"
TxtTemplate="{StaticResource txtTemplate}"></local:TypeSelector>
<!-- <local:TypeSelector x:Key="TypeSelector" ComboTemplate="{StaticResource comboTemplate}"
TxtTemplate="{StaticResource txtTemplate}"></local:TypeSelector>-->
</optionpanels:ProjectOptionPanel.Resources>
@ -92,16 +108,17 @@ @@ -92,16 +108,17 @@
<!-- http://finercode.net/2012/06/05/using-a-different-datatemplate-when-a-wpf-combobox-is-expanded/ -->
<GridViewColumn Header="Action"
<!-- <GridViewColumn Header="Action"
CellTemplateSelector="{StaticResource TypeSelector}">
</GridViewColumn>
</GridViewColumn>-->
</tv:SharpGridView.Columns>
<!-- </tv:SharpGridView.Columns>-->
<!--<GridViewColumn Header="Action" x:Name="xxx">
<GridViewColumn Header="Action" x:Name="xxx">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ComboBox Background="Transparent" Width="100"
HorizontalAlignment="Center" VerticalAlignment="Center"
ItemsSource="{Binding Path=RuleState}"
@ -121,13 +138,22 @@ @@ -121,13 +138,22 @@
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="{Binding Index}" ></TextBlock>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</tv:SharpGridView.Columns>-->
<GridViewColumn Header="test">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Index}"></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</tv:SharpGridView.Columns>
</tv:SharpGridView>

35
src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanelXaml.xaml.cs

@ -44,15 +44,10 @@ namespace ICSharpCode.CodeAnalysis @@ -44,15 +44,10 @@ namespace ICSharpCode.CodeAnalysis
private bool userCheck;
private Dictionary<string, RuleTreeNode> rules = new Dictionary<string, RuleTreeNode>();
private List<Tuple<Icon,string,int>> bla = new List<Tuple<Icon,string,int>>();
public AnalysisProjectOptionsPanelXaml()
{
InitializeComponent();
DataContext = this;
bla.Add(Tuple.Create<Icon,string,int>(SystemIcons.Warning,ResourceService.GetString("Global.WarningText"),0));
bla.Add(Tuple.Create<Icon,string,int>(SystemIcons.Error,ResourceService.GetString("Global.ErrorText"),1));
// bla.Add(Tuple.Create<Icon,string>(null,"None"));
}
@ -169,19 +164,23 @@ namespace ICSharpCode.CodeAnalysis @@ -169,19 +164,23 @@ namespace ICSharpCode.CodeAnalysis
void SetCategoryIcon() {
foreach (CategoryTreeNode element in ruleTreeView.Root.Children) {
foreach (CategoryTreeNode categoryNode in ruleTreeView.Root.Children) {
// Console.WriteLine(" {0} ",element.Text);
if (!element.NewErrorState.HasValue) {
Console.WriteLine (" {0} is Mixed Mode",element.Text);
if (!categoryNode.NewErrorState.HasValue) {
Console.WriteLine (" {0} is Mixed Mode",categoryNode.Text);
categoryNode.AddMixedMode();
} else{
if (element.NewErrorState == true) {
Console.WriteLine (" {0} is Error",element.Text);
element.Index = 1;
if (categoryNode.NewErrorState == true) {
Console.WriteLine (" {0} is Error",categoryNode.Text);
categoryNode.Index = 1;
} else {
Console.WriteLine (" {0} is Warning",element.Text);
Console.WriteLine (" {0} is Warning",categoryNode.Text);
}
}
}
Console.WriteLine("--------------");
}
string ruleString = "";
@ -247,7 +246,7 @@ namespace ICSharpCode.CodeAnalysis @@ -247,7 +246,7 @@ namespace ICSharpCode.CodeAnalysis
ruleTreeView.Root.Children.Add(new MessageNode(StringParser.Parse("${res:ICSharpCode.CodeAnalysis.ProjectOptions.SpecifyFxCopPath}")));
} else {
foreach (FxCopCategory cat in ruleList) {
CategoryTreeNode catNode = new CategoryTreeNode(cat,bla);
CategoryTreeNode catNode = new CategoryTreeNode(cat);
catNode.PropertyChanged += OnPropertyChanged;
ruleTreeView.Root.Children.Add(catNode);
foreach (RuleTreeNode ruleNode in catNode.Children) {
@ -322,7 +321,14 @@ namespace ICSharpCode.CodeAnalysis @@ -322,7 +321,14 @@ namespace ICSharpCode.CodeAnalysis
}
}
void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// throw new NotImplementedException();
}
#endregion
}
@ -334,6 +340,7 @@ namespace ICSharpCode.CodeAnalysis @@ -334,6 +340,7 @@ namespace ICSharpCode.CodeAnalysis
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
Console.WriteLine ("------- TypeSelector ---------");
var rule = item as RuleTreeNode;
if (rule != null) {
@ -359,7 +366,7 @@ namespace ICSharpCode.CodeAnalysis @@ -359,7 +366,7 @@ namespace ICSharpCode.CodeAnalysis
[ValueConversion(typeof(System.Drawing.Icon), typeof(System.Windows.Media.ImageSource))]
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType,
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// empty images are empty...

86
src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsTreeNodes.cs

@ -7,8 +7,12 @@ @@ -7,8 +7,12 @@
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
@ -23,12 +27,22 @@ namespace ICSharpCode.CodeAnalysis @@ -23,12 +27,22 @@ namespace ICSharpCode.CodeAnalysis
{
private int index;
public BaseTree(IEnumerable<Tuple<Icon,string,int>> ruleState)
public BaseTree()
{
this.RuleState = ruleState;
RuleState = new ObservableCollection<Tuple<Icon,string>>();
this.RuleState.Add(Tuple.Create<Icon,string>(SystemIcons.Warning,ResourceService.GetString("Global.WarningText")));
this.RuleState.Add(Tuple.Create<Icon,string>(SystemIcons.Error,ResourceService.GetString("Global.ErrorText")));
// bla.Add(Tuple.Create<Icon,string>(null,"None"));
}
public IEnumerable<Tuple<Icon,string,int>> RuleState {get;set;}
public ObservableCollection<Tuple<Icon,string>> RuleState {get;set;}
private Tuple<Icon,string> selectedItem;
public Tuple<Icon, string> SelectedNode {
get { return selectedItem; }
set { selectedItem = value; }
}
public virtual int Index {
@ -36,37 +50,27 @@ namespace ICSharpCode.CodeAnalysis @@ -36,37 +50,27 @@ namespace ICSharpCode.CodeAnalysis
set {
if (index != value) {
index = value;
switch (index) {
case 0:
break;
case 1:
break;
case 2:
break;
default:
break;
}
base.RaisePropertyChanged("Index");
}
base.RaisePropertyChanged("Index");
}
}
}
public class CategoryTreeNode : BaseTree
{
internal FxCopCategory category;
private string mixedModeText;
private ImageSource mixedModeIcon;
private Tuple<Icon,string> mixedTuple;
public CategoryTreeNode(FxCopCategory category,IEnumerable<Tuple<Icon,string,int>> bla):base(bla)
public CategoryTreeNode(FxCopCategory category):base()
{
mixedModeText = StringParser.Parse("${res:ICSharpCode.CodeAnalysis.ProjectOptions.WarningErrorMixed}");
mixedModeIcon = PresentationResourceService.GetBitmapSource("Icons.16x16.ClosedFolderBitmap");
this.category = category;
foreach (FxCopRule rule in category.Rules) {
this.Children.Add(new RuleTreeNode(rule,bla));
this.Children.Add(new RuleTreeNode(rule));
}
}
@ -83,22 +87,27 @@ namespace ICSharpCode.CodeAnalysis @@ -83,22 +87,27 @@ namespace ICSharpCode.CodeAnalysis
set {
if (value != base.Index) {
base.Index = value;
foreach (RuleTreeNode rule in this.Children) {
rule.Index = Index;
if (mixedTuple == null) {
foreach (RuleTreeNode rule in this.Children) {
rule.Index = Index;
}
}
}
}
}
public ImageSource MixedModeIcon {
get { return mixedModeIcon; }
}
public string MixedModeText
public void AddMixedMode()
{
get {return mixedModeText;}
}
Bitmap b = (Bitmap)ResourceService.GetImageResource("Icons.16x16.ClosedFolderBitmap");
System.Drawing.Icon ico = (Icon)System.Drawing.Icon.FromHandle(b.GetHicon());
mixedTuple = Tuple.Create<Icon,string>(ico,
StringParser.Parse("${res:ICSharpCode.CodeAnalysis.ProjectOptions.WarningErrorMixed}"));
RuleState.Add(mixedTuple);
Index = RuleState.Count -1;
}
public Nullable<bool> NewErrorState {
get {
@ -153,15 +162,16 @@ namespace ICSharpCode.CodeAnalysis @@ -153,15 +162,16 @@ namespace ICSharpCode.CodeAnalysis
set {
if (error != value) {
error = value;
if (error) {
base.Index = 1;
}
}
}
}
public RuleTreeNode(FxCopRule rule,IEnumerable<Tuple<Icon,string,int>> ruleState):base(ruleState)
public RuleTreeNode(FxCopRule rule):base()
{
this.rule = rule;
}
@ -184,13 +194,16 @@ namespace ICSharpCode.CodeAnalysis @@ -184,13 +194,16 @@ namespace ICSharpCode.CodeAnalysis
public override int Index {
get { return base.Index; }
set {
if (value != Index) {
if (Index == 1) {
error = true;
} else {
error = false;
}
if (base.Index != value) {
isError = value == 1;
base.Index = value;
// if (base.Index == 1) {
// error = true;
// } else {
// error = false;
// }
Console.WriteLine ("RuleNode {0} - index {1} - error {2}",rule.DisplayName,Index, isError);
}
}
}
@ -210,5 +223,4 @@ namespace ICSharpCode.CodeAnalysis @@ -210,5 +223,4 @@ namespace ICSharpCode.CodeAnalysis
get { return message; }
}
}
}

Loading…
Cancel
Save