Browse Source

Add http://treemaps.codeplex.com/ to a TabItem for testing

pull/20/merge
PeterForstmeier 14 years ago
parent
commit
28080e33d1
  1. 5
      src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj
  2. 12
      src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.sln
  3. 434
      src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml
  4. 10
      src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml.cs
  5. 101
      src/AddIns/Analysis/CodeQuality/Src/MainWindowModel.cs

5
src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj

@ -252,6 +252,10 @@
<Private>True</Private> <Private>True</Private>
<EmbedInteropTypes>False</EmbedInteropTypes> <EmbedInteropTypes>False</EmbedInteropTypes>
</ProjectReference> </ProjectReference>
<ProjectReference Include="TreeMaps\TreeMaps.csproj">
<Project>{3ED2897F-1A8A-4106-89D2-4D342860D480}</Project>
<Name>TreeMaps</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="CodeQualityAnalysis.addin"> <Content Include="CodeQualityAnalysis.addin">
@ -260,6 +264,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Src\Utility" /> <Folder Include="Src\Utility" />
<Folder Include="Src\Utility\LocaliceableCombo" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.

12
src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.sln

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 11.00 Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010 # Visual Studio 2010
# SharpDevelop 4.2.0.7909-alpha # SharpDevelop 4.2.0.7939-alpha
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeQualityAnalysis", "CodeQualityAnalysis.csproj", "{76DD1CC0-0D86-44A1-9BD6-D91F79807BC3}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeQualityAnalysis", "CodeQualityAnalysis.csproj", "{76DD1CC0-0D86-44A1-9BD6-D91F79807BC3}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\..\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\..\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
@ -20,6 +20,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "..\..\..\Libr
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "..\..\..\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "..\..\..\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TreeMaps", "TreeMaps\TreeMaps.csproj", "{3ED2897F-1A8A-4106-89D2-4D342860D480}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -90,6 +92,14 @@ Global
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Debug|x86.Build.0 = Debug|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Debug|x86.ActiveCfg = Debug|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Release|Any CPU.Build.0 = Release|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Release|x86.Build.0 = Release|Any CPU
{3ED2897F-1A8A-4106-89D2-4D342860D480}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

434
src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml

@ -1,153 +1,212 @@
<Window x:Class="ICSharpCode.CodeQualityAnalysis.MainWindow" <?xml version="1.0" encoding="utf-8"?>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Window
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ICSharpCode.CodeQualityAnalysis.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Controls="clr-namespace:ICSharpCode.WpfDesign.Designer.Controls;assembly=ICSharpCode.WpfDesign.Designer" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:GraphSharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls" xmlns:Controls="clr-namespace:ICSharpCode.WpfDesign.Designer.Controls;assembly=ICSharpCode.WpfDesign.Designer"
xmlns:Graph="clr-namespace:ICSharpCode.CodeQualityAnalysis.Controls" xmlns:GraphSharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
xmlns:src="clr-namespace:ICSharpCode.CodeQualityAnalysis" xmlns:Graph="clr-namespace:ICSharpCode.CodeQualityAnalysis.Controls"
xmlns:debug="clr-namespace:System.Diagnostics;assembly=System" xmlns:src="clr-namespace:ICSharpCode.CodeQualityAnalysis"
xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:debug="clr-namespace:System.Diagnostics;assembly=System"
xmlns:tree="http://icsharpcode.net/sharpdevelop/treeview" xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:tree="http://icsharpcode.net/sharpdevelop/treeview"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="{Binding FrmTitle}" xmlns:t="clr-namespace:TreeMaps.Controls;assembly=TreeMaps"
Title="{Binding FrmTitle}"
x:Name="root"> x:Name="root">
<Window.DataContext> <Window.DataContext>
<src:MainWindowViewModel/> <src:MainWindowViewModel />
</Window.DataContext> </Window.DataContext>
<Window.Resources> <Window.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Resources/GraphTemplate.xaml" /> <ResourceDictionary
<ResourceDictionary Source="../Resources/GridSplitterTemplate.xaml" /> Source="../Resources/GraphTemplate.xaml" />
<ResourceDictionary
Source="../Resources/GridSplitterTemplate.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</Window.Resources> </Window.Resources>
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition
Height="Auto" />
<RowDefinition /> <RowDefinition />
<RowDefinition Height="Auto" /> <RowDefinition
Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<ToolBarTray
<ToolBarTray Background="White" Grid.Row="0"> Background="White"
Grid.Row="0">
<ToolBar> <ToolBar>
<Button Name="btnOpenAssembly" <Button
Content="{Binding btnOpenAssembly}" Name="btnOpenAssembly"
Click="btnOpenAssembly_Click" Content="{Binding btnOpenAssembly}"
Margin="0 0 5 0"></Button> Click="btnOpenAssembly_Click"
Margin="0 0 5 0"></Button>
</ToolBar> </ToolBar>
</ToolBarTray> </ToolBarTray>
<TabControl
<TabControl Grid.Row="1" IsEnabled="{Binding MainTabEnable}"> <!-- It is enabled once assembly is loaded. --> Grid.Row="1"
<TabItem Header="{Binding TabDependencyGraph}"> IsEnabled="{Binding MainTabEnable}">
<!-- It is enabled once assembly is loaded. -->
<TabItem
Header="{Binding TabDependencyGraph}">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition
Height="Auto" />
<RowDefinition /> <RowDefinition />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="250px" /> <ColumnDefinition
<ColumnDefinition Width="Auto"></ColumnDefinition> Width="250px" />
<ColumnDefinition
Width="Auto"></ColumnDefinition>
<ColumnDefinition /> <ColumnDefinition />
<ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition
<ColumnDefinition Width="200px" /> Width="Auto"></ColumnDefinition>
<ColumnDefinition
Width="200px" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<ToolBarTray
<ToolBarTray Grid.Row="0" Grid.ColumnSpan="5"> Grid.Row="0"
Grid.ColumnSpan="5">
<ToolBar> <ToolBar>
<Button Name="btnRelayout" Click="btnRelayout_Click" Margin="0 0 5 0">Relayout</Button> <Button
<Button Name="btnContinueLayout" Click="btnContinueLayout_Click" Margin="0 0 5 0">Continue Layout</Button> Name="btnRelayout"
<Button Name="btnResetGraph" Click="btnResetGraph_Click" Margin="0 0 5 0">Reset Graph</Button> Click="btnRelayout_Click"
<Button Name="btnSaveImageGraph" Click="btnSaveImageGraph_Click">Save an Image of Graph</Button> Margin="0 0 5 0">Relayout</Button>
<Button
Name="btnContinueLayout"
Click="btnContinueLayout_Click"
Margin="0 0 5 0">Continue Layout</Button>
<Button
Name="btnResetGraph"
Click="btnResetGraph_Click"
Margin="0 0 5 0">Reset Graph</Button>
<Button
Name="btnSaveImageGraph"
Click="btnSaveImageGraph_Click">Save an Image of Graph</Button>
</ToolBar> </ToolBar>
</ToolBarTray> </ToolBarTray>
<tree:SharpTreeView
Name="definitionTree"
<tree:SharpTreeView Name="definitionTree" Grid.Row="1"
Grid.Row="1" Grid.Column="0" Grid.Column="0"
Margin="2" Margin="2"
SelectionChanged="definitionTree_SelectedItemChanged"> SelectionChanged="definitionTree_SelectedItemChanged"></tree:SharpTreeView>
</tree:SharpTreeView> <GridSplitter
Grid.Column="1"
<GridSplitter Grid.Column="1" Grid.Row="1"
Grid.Row="1" Grid.RowSpan="2"
Grid.RowSpan="2" ResizeDirection="Columns"
ResizeDirection="Columns" HorizontalAlignment="Stretch"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
VerticalAlignment="Stretch" Style="{DynamicResource GridSplitterStyle1}"></GridSplitter>
Style="{DynamicResource GridSplitterStyle1}"></GridSplitter> <Controls:ZoomControl
Grid.Row="1"
<Controls:ZoomControl Grid.Row="1" Grid.Column="2" Name="zoom" AlwaysShowZoomButtons="True" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"> Grid.Column="2"
<Graph:DependencyGraphLayout x:Name="graphLayout" Name="zoom"
AlwaysShowZoomButtons="True"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible">
<Graph:DependencyGraphLayout
x:Name="graphLayout"
LayoutAlgorithmType="LinLog" LayoutAlgorithmType="LinLog"
OverlapRemovalAlgorithmType="FSA" OverlapRemovalAlgorithmType="FSA"
HighlightAlgorithmType="Simple" HighlightAlgorithmType="Simple"
VertexClick="graphLayout_VertexClick" VertexClick="graphLayout_VertexClick" />
/>
</Controls:ZoomControl> </Controls:ZoomControl>
<GridSplitter
<GridSplitter Grid.Column="3" Grid.Column="3"
Grid.Row="2" Grid.Row="2"
ResizeDirection="Columns" ResizeDirection="Columns"
ResizeBehavior="PreviousAndNext" ResizeBehavior="PreviousAndNext"
Style="{DynamicResource GridSplitterStyle1}"></GridSplitter> Style="{DynamicResource GridSplitterStyle1}"></GridSplitter>
<TextBlock
<TextBlock Name="txbTypeInfo" Name="txbTypeInfo"
Text="{Binding TypeInfo}" Text="{Binding TypeInfo}"
Margin="2" MinWidth="30" Margin="2"
Grid.Column="4" Grid.Row="1" MinWidth="30"
Padding="5" Grid.Column="4"
Background="LightBlue"/> Grid.Row="1"
Padding="5"
Background="LightBlue" />
</Grid> </Grid>
</TabItem> </TabItem>
<TabItem Header="{Binding TabDependencyMatrix}"> <TabItem
<Graph:TreeMatrixControl x:Name="matrixControl"></Graph:TreeMatrixControl> Header="{Binding TabDependencyMatrix}">
<Graph:TreeMatrixControl
x:Name="matrixControl"></Graph:TreeMatrixControl>
</TabItem> </TabItem>
<TabItem Header="{Binding TabMetrics}" IsEnabled="{Binding MetrixTabEnable}"> <TabItem
Header="{Binding TabMetrics}"
IsEnabled="{Binding MetrixTabEnable}">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition
<RowDefinition Height="*" /> Height="Auto" />
<RowDefinition
Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition
Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<ToolBarTray
<ToolBarTray Background="White" Grid.Row="0" Grid.Column="0"> Background="White"
Grid.Row="0"
Grid.Column="0">
<ToolBar> <ToolBar>
<TextBlock Text="Level: " /> <TextBlock
<ComboBox IsEditable="False" Text="Level: " />
x:Name="cbxMetrixLevel" <ComboBox
IsDropDownOpen="True" IsEditable="False"
Width="150" SelectionChanged="MetricLevel_SelectionChanged"> x:Name="cbxMetrixLevel"
<ComboBoxItem Name="assembly">Assembly</ComboBoxItem> IsDropDownOpen="True"
<ComboBoxItem Name="namespace">Namespace</ComboBoxItem> Width="150"
<ComboBoxItem Name="type">Type</ComboBoxItem> SelectionChanged="MetricLevel_SelectionChanged">
<ComboBoxItem Name="field">Field</ComboBoxItem> <ComboBoxItem
<ComboBoxItem Name="method">Method</ComboBoxItem> Name="assembly">Assembly</ComboBoxItem>
<ComboBoxItem
Name="namespace">Namespace</ComboBoxItem>
<ComboBoxItem
Name="type">Type</ComboBoxItem>
<ComboBoxItem
Name="field">Field</ComboBoxItem>
<ComboBoxItem
Name="method">Method</ComboBoxItem>
</ComboBox> </ComboBox>
<TextBlock Text="Metric: " /> <TextBlock
<ComboBox Width="200" x:Name="cbxMetrics" SelectionChanged="Metrics_SelectionChanged" /> Text="Metric: " />
<ComboBox
Width="200"
x:Name="cbxMetrics"
SelectionChanged="Metrics_SelectionChanged" />
</ToolBar> </ToolBar>
</ToolBarTray> </ToolBarTray>
<datavis:TreeMap
<datavis:TreeMap x:Name="treemap" Grid.Row="1" Grid.Column="0"> x:Name="treemap"
Grid.Row="1"
Grid.Column="0">
<datavis:TreeMap.ItemDefinition> <datavis:TreeMap.ItemDefinition>
<datavis:TreeMapItemDefinition ValuePath="Instructions.Count"> <datavis:TreeMapItemDefinition
ValuePath="Instructions.Count">
<DataTemplate> <DataTemplate>
<Border Background="AliceBlue" BorderBrush="Black" BorderThickness="1" ToolTipService.ToolTip="{Binding ToolTip}"> <Border
Background="AliceBlue"
BorderBrush="Black"
BorderThickness="1"
ToolTipService.ToolTip="{Binding ToolTip}">
<StackPanel> <StackPanel>
<TextBlock Text="{Binding DeclaringType.Name}" /> <TextBlock
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"/> Text="{Binding DeclaringType.Name}" />
<TextBlock
Text="{Binding Name}"
VerticalAlignment="Center"
TextAlignment="Center"
TextWrapping="Wrap" />
</StackPanel> </StackPanel>
</Border> </Border>
</DataTemplate> </DataTemplate>
@ -156,51 +215,164 @@
</datavis:TreeMap> </datavis:TreeMap>
</Grid> </Grid>
</TabItem> </TabItem>
</TabControl>
<TabItem
Header="{Binding TabMetrics}"
IsEnabled="{Binding MetrixTabEnable}">
<TabItem.Resources>
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="MetricsLevel">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="src:MetricsLevel" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type sys:Enum}"
x:Key="Metrics">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="src:Metrics" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<DataTemplate
x:Key="TreeMapDataTemplate">
<Border
Background="AliceBlue"
BorderBrush="Black"
BorderThickness="1">
<StackPanel>
<TextBlock
Text="{Binding DeclaringType.Name}" />
<TextBlock
Text="{Binding Name}"
VerticalAlignment="Center"
TextAlignment="Center"
TextWrapping="Wrap" />
</StackPanel>
</Border>
</DataTemplate>
</TabItem.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto" />
<RowDefinition
Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="*" />
</Grid.ColumnDefinitions>
<ToolBarTray
Background="White"
Grid.Row="0"
Grid.Column="0">
<ToolBar>
<TextBlock Text="Level: " />
<!-- SelectedItem="{Binding MetricsLevelSelectedItem}"-->
<ComboBox Width="200"
ItemsSource="{Binding Source={StaticResource MetricsLevel}}"></ComboBox>
<TextBlock Margin="4,0,0,0" Text="Metric: " />
<ComboBox Width="200" Margin="4,0,0,0"
ItemsSource="{Binding Source={StaticResource Metrics}}"
SelectedItem="{Binding SelectedMetrics}">
</ComboBox>
</ToolBar>
</ToolBarTray>
<!-- http://treemaps.codeplex.com/-->
<t:TreeMaps
Grid.Row="1"
Grid.Column="0"
ItemsSource="{Binding Nodes}"
Background="LightGray"
ItemTemplate="{StaticResource TreeMapDataTemplate}"
ValuePropertyName="{Binding TreeValueProperty}">
</t:TreeMaps>
</Grid>
</TabItem>
<StatusBar Grid.Row="2"> </TabControl>
<StatusBarItem HorizontalAlignment="Left" Visibility="{Binding ProgressbarVisible}"> <StatusBar
<StackPanel Orientation="Horizontal"> Grid.Row="2">
<TextBlock Text="Loading " /> <StatusBarItem
<TextBlock Text="{Binding FileName}"></TextBlock> HorizontalAlignment="Left"
<TextBlock Text="..." Margin="0, 0, 5, 0" /> Visibility="{Binding ProgressbarVisible}">
<ProgressBar IsIndeterminate="True" Width="95" Height="15" /> <StackPanel
Orientation="Horizontal">
<TextBlock
Text="Loading " />
<TextBlock
Text="{Binding FileName}"></TextBlock>
<TextBlock
Text="..."
Margin="0, 0, 5, 0" />
<ProgressBar
IsIndeterminate="True"
Width="95"
Height="15" />
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
<StatusBarItem HorizontalAlignment="Right" Visibility="{Binding AssemblyStatsVisible}"> <StatusBarItem
<StackPanel Orientation="Horizontal"> HorizontalAlignment="Right"
Visibility="{Binding AssemblyStatsVisible}">
<StackPanel
Orientation="Horizontal">
<StatusBarItem> <StatusBarItem>
<StackPanel Orientation="Horizontal"> <StackPanel
<TextBlock Text="Namespaces: " /> Orientation="Horizontal">
<TextBlock Text="{Binding Path=MainModule.Namespaces.Count}" /> <TextBlock
Text="Namespaces: " />
<TextBlock
Text="{Binding Path=MainModule.Namespaces.Count}" />
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
<StatusBarItem> <StatusBarItem>
<StackPanel Orientation="Horizontal"> <StackPanel
<TextBlock Text="Types: " /> Orientation="Horizontal">
<TextBlock Text="{Binding Path=MainModule.TypesCount}" /> <TextBlock
Text="Types: " />
<TextBlock
Text="{Binding Path=MainModule.TypesCount}" />
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
<StatusBarItem> <StatusBarItem>
<StackPanel Orientation="Horizontal"> <StackPanel
<TextBlock Text="Methods: " /> Orientation="Horizontal">
<TextBlock Text="{Binding Path=MainModule.MethodsCount}" /> <TextBlock
Text="Methods: " />
<TextBlock
Text="{Binding Path=MainModule.MethodsCount}" />
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
<StatusBarItem> <StatusBarItem>
<StackPanel Orientation="Horizontal"> <StackPanel
<TextBlock Text="Fields: " /> Orientation="Horizontal">
<TextBlock Text="{Binding Path=MainModule.FieldsCount}" /> <TextBlock
Text="Fields: " />
<TextBlock
Text="{Binding Path=MainModule.FieldsCount}" />
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
<StatusBarItem> <StatusBarItem>
<StackPanel Orientation="Horizontal"> <StackPanel
<TextBlock Text="IL instructions: " /> Orientation="Horizontal">
<TextBlock Text="{Binding Path=MainModule.InstructionsCount}" /> <TextBlock
Text="IL instructions: " />
<TextBlock
Text="{Binding Path=MainModule.InstructionsCount}" />
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
</StackPanel> </StackPanel>
</StatusBarItem> </StatusBarItem>
</StatusBar> </StatusBar>
</Grid> </Grid>
</Window> </Window>

10
src/AddIns/Analysis/CodeQuality/Src/MainWindow.xaml.cs

@ -236,6 +236,7 @@ namespace ICSharpCode.CodeQualityAnalysis
cbxMetrics.Items.Add(new ComboBoxItem { Content = "Cyclomatic Complexity" }); cbxMetrics.Items.Add(new ComboBoxItem { Content = "Cyclomatic Complexity" });
cbxMetrics.Items.Add(new ComboBoxItem { Content = "Variables" }); cbxMetrics.Items.Add(new ComboBoxItem { Content = "Variables" });
} }
} }
@ -262,10 +263,10 @@ namespace ICSharpCode.CodeQualityAnalysis
} else if (level == "Field") { } else if (level == "Field") {
} else if (level == "Method") { } else if (level == "Method") {
var r = from ns in MetricsReader.MainModule.Namespaces // var r = from ns in MetricsReader.MainModule.Namespaces
from type in ns.Types // from type in ns.Types
from method in type.Methods // from method in type.Methods
select method; // select method;
treemap.ItemsSource = from ns in MetricsReader.MainModule.Namespaces treemap.ItemsSource = from ns in MetricsReader.MainModule.Namespaces
from type in ns.Types from type in ns.Types
from method in type.Methods from method in type.Methods
@ -281,5 +282,6 @@ namespace ICSharpCode.CodeQualityAnalysis
treemap.ItemDefinition.ValuePath = "Variables"; treemap.ItemDefinition.ValuePath = "Variables";
} }
} }
} }
} }

101
src/AddIns/Analysis/CodeQuality/Src/MainWindowModel.cs

@ -16,6 +16,7 @@ using System.Windows.Media.Imaging;
using ICSharpCode.CodeQualityAnalysis.Controls; using ICSharpCode.CodeQualityAnalysis.Controls;
using ICSharpCode.CodeQualityAnalysis.Utility; using ICSharpCode.CodeQualityAnalysis.Utility;
using Microsoft.Win32; using Microsoft.Win32;
namespace ICSharpCode.CodeQualityAnalysis namespace ICSharpCode.CodeQualityAnalysis
@ -23,7 +24,20 @@ namespace ICSharpCode.CodeQualityAnalysis
/// <summary> /// <summary>
/// Description of MainWindowViewModel. /// Description of MainWindowViewModel.
/// </summary> /// </summary>
public enum MetricsLevel
{
Assembly,
Namespace,
Type,
Method
}
public enum Metrics
{
ILInstructions,
CyclomaticComplexity,
Variables
}
public class MainWindowViewModel :ViewModelBase public class MainWindowViewModel :ViewModelBase
{ {
@ -38,6 +52,7 @@ namespace ICSharpCode.CodeQualityAnalysis
this.TabDependencyMatrix = "$Dependency Matrix"; this.TabDependencyMatrix = "$Dependency Matrix";
this.TabMetrics = "$Metrics"; this.TabMetrics = "$Metrics";
#endregion #endregion
MetrixTabEnable = false; MetrixTabEnable = false;
} }
@ -112,8 +127,90 @@ namespace ICSharpCode.CodeQualityAnalysis
public Module MainModule { public Module MainModule {
get { return mainModule; } get { return mainModule; }
set { mainModule = value; set { mainModule = value;
base.RaisePropertyChanged(() =>this.MainModule);} base.RaisePropertyChanged(() =>this.MainModule);
}
} }
private ObservableCollection<INode> nodes;
public ObservableCollection<INode> Nodes {
get { return nodes; }
set { nodes = value;
base.RaisePropertyChanged(() =>this.Nodes);}
}
//http://stackoverflow.com/questions/58743/databinding-an-enum-property-to-a-combobox-in-wpf#62032 http://stackoverflow.com/questions/58743/databinding-an-enum-property-to-a-combobox-in-wpf#62032
//http://www.ageektrapped.com/blog/the-missing-net-7-displaying-enums-in-wpf/
// http://www.codeproject.com/KB/WPF/FriendlyEnums.aspx
private string treeValueProperty ;
public string TreeValueProperty {
get { return treeValueProperty; }
set { treeValueProperty = value;
base.RaisePropertyChanged(() =>this.TreeValueProperty);}
}
// First Combo
public MetricsLevel MetricsLevel {
get {return MetricsLevel;}
}
// MetricsLevel metricsLevelSelectedItem = MetricsLevel.Assembly;
//
// public MetricsLevel MetricsLevelSelectedItem {
// get { return metricsLevelSelectedItem; }
// set { metricsLevelSelectedItem = value;
// base.RaisePropertyChanged(() =>this.MetricsLevelSelectedItem);
// }
// }
// Second Combo
public Metrics Metrics
{
get {return Metrics;}
}
Metrics selectedMetrics;
public Metrics SelectedMetrics {
get { return selectedMetrics; }
set { selectedMetrics = value;
base.RaisePropertyChanged(() =>this.SelectedMetrics);
ActivateTreemap();
}
}
void ActivateTreemap()
{
var r = from ns in MainModule.Namespaces
from type in ns.Types
from method in type.Methods
select method;
Nodes = new ObservableCollection<INode>(r);
switch (selectedMetrics)
{
case Metrics.ILInstructions:
TreeValueProperty = "Instructions.Count";
break;
case Metrics.CyclomaticComplexity:
TreeValueProperty = Metrics.CyclomaticComplexity.ToString();
break;
case Metrics.Variables:
TreeValueProperty = Metrics.Variables.ToString();
break;
default:
throw new Exception("Invalid value for Metrics");
}
}
} }
} }

Loading…
Cancel
Save