Browse Source

Add TreeMaps.csproj again

pull/20/merge
PeterForstmeier 14 years ago
parent
commit
819024be9f
  1. 4
      src/AddIns/Analysis/CodeQuality/CodeQualityAnalysis.csproj
  2. 90
      src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/SquarifiedTreeMapsPanel.cs
  3. 239
      src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/TreeMapItem.cs
  4. 92
      src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/TreeMaps.cs
  5. 292
      src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/TreeMapsPanel.cs
  6. 40
      src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/ValueDataTemplate.cs
  7. 62
      src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/AssemblyInfo.cs
  8. 63
      src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Resources.Designer.cs
  9. 117
      src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Resources.resx
  10. 26
      src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Settings.Designer.cs
  11. 7
      src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Settings.settings
  12. 126
      src/AddIns/Analysis/CodeQuality/TreeMaps/Themes/generic.xaml
  13. 104
      src/AddIns/Analysis/CodeQuality/TreeMaps/TreeMaps.csproj
  14. 6
      src/AddIns/Analysis/CodeQuality/TreeMaps/TreeMaps.csproj.user

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

@ -258,6 +258,10 @@ @@ -258,6 +258,10 @@
<Project>{3ED2897F-1A8A-4106-89D2-4D342860D480}</Project>
<Name>TreeMaps</Name>
</ProjectReference>
<ProjectReference Include="TreeMaps\TreeMaps.csproj">
<Project>{3ED2897F-1A8A-4106-89D2-4D342860D480}</Project>
<Name>TreeMaps</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="CodeQualityAnalysis.addin">

90
src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/SquarifiedTreeMapsPanel.cs

@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
namespace TreeMaps.Controls
{
public class SquarifiedTreeMapsPanel : TreeMapsPanel
{
#region protected methods
protected override Rect GetRectangle(RowOrientation orientation, WeightUIElement item, double x, double y, double width, double height)
{
if (orientation == RowOrientation.Horizontal)
return new Rect(x, y, width, item.RealArea / width);
else
return new Rect(x, y, item.RealArea / height, height);
}
protected override void ComputeNextPosition(RowOrientation orientation, ref double xPos, ref double yPos, double width, double height)
{
if (orientation == RowOrientation.Horizontal)
yPos += height;
else
xPos += width;
}
protected override void ComputeBounds()
{
this.Squarify(this.ManagedItems, new List<WeightUIElement>(), this.GetShortestSide());
}
#endregion
#region private methods
private void Squarify(List<WeightUIElement> items, List<WeightUIElement> row, double sideLength)
{
if (items.Count == 0)
{
this.AddRowToLayout(row);
return;
}
WeightUIElement item = items[0];
List<WeightUIElement> row2 = new List<WeightUIElement>(row);
row2.Add(item);
List<WeightUIElement> items2 = new List<WeightUIElement>(items);
items2.RemoveAt(0);
double worst1 = this.Worst(row, sideLength);
double worst2 = this.Worst(row2, sideLength);
if (row.Count == 0 || worst1 > worst2)
this.Squarify(items2, row2, sideLength);
else
{
this.AddRowToLayout(row);
this.Squarify(items, new List<WeightUIElement>(), this.GetShortestSide());
}
}
private void AddRowToLayout(List<WeightUIElement> row)
{
base.ComputeTreeMaps(row);
}
private double Worst(List<WeightUIElement> row, double sideLength)
{
if (row.Count == 0) return 0;
double maxArea = 0;
double minArea = double.MaxValue;
double totalArea = 0;
foreach (WeightUIElement item in row)
{
maxArea = Math.Max(maxArea, item.RealArea);
minArea = Math.Min(minArea, item.RealArea);
totalArea += item.RealArea;
}
if (minArea == double.MaxValue) minArea = 0;
double val1 = (sideLength * sideLength * maxArea) / (totalArea * totalArea);
double val2 = (totalArea * totalArea) / (sideLength * sideLength * minArea);
return Math.Max(val1, val2);
}
#endregion
}
}

239
src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/TreeMapItem.cs

@ -0,0 +1,239 @@ @@ -0,0 +1,239 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows;
using System.ComponentModel;
using System.Reflection;
using System.Windows.Data;
namespace TreeMaps.Controls
{
[TemplatePart(Name = TreeMapItem.HeaderPartName, Type = typeof(FrameworkElement))]
public class TreeMapItem : HeaderedItemsControl
{
#region consts
private const string HeaderPartName = "PART_Header";
#endregion
#region fields
private double _area;
private TreeMaps _parentTreeMaps;
#endregion
#region dependency properties
public static DependencyProperty TreeMapModeProperty
= DependencyProperty.Register("TreeMapMode", typeof(TreeMapAlgo), typeof(TreeMapItem), new FrameworkPropertyMetadata(TreeMapAlgo.Squarified,FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));
public static readonly DependencyProperty ValuePropertyNameProperty
= DependencyProperty.Register("ValuePropertyName", typeof(string), typeof(TreeMapItem), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsParentArrange | FrameworkPropertyMetadataOptions.AffectsParentMeasure));
public static readonly DependencyProperty LevelProperty
= DependencyProperty.Register("Level", typeof(int), typeof(TreeMapItem),new FrameworkPropertyMetadata(0,FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty MaxDepthProperty
= DependencyProperty.Register("MaxDepth", typeof(int), typeof(TreeMapItem),new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty MinAreaProperty
= DependencyProperty.Register("MinArea", typeof(int), typeof(TreeMapItem), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty ShouldRecurseProperty
= DependencyProperty.Register("ShouldRecurse", typeof(bool), typeof(TreeMapItem), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender));
#endregion
#region ctors
static TreeMapItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeMapItem), new FrameworkPropertyMetadata(typeof(TreeMapItem)));
}
public TreeMapItem()
{
this.VerticalAlignment = VerticalAlignment.Stretch;
this.HorizontalAlignment = HorizontalAlignment.Stretch;
this.VerticalContentAlignment = VerticalAlignment.Stretch;
this.HorizontalContentAlignment = HorizontalAlignment.Stretch;
this.SnapsToDevicePixels = true;
}
public TreeMapItem(int level, int maxDepth, int minArea, string valuePropertyName)
: this()
{
this.ValuePropertyName = valuePropertyName;
this.Level = level;
this.MaxDepth = maxDepth;
this.MinArea = minArea;
}
#endregion
#region properties
public TreeMapAlgo TreeMapMode
{
get { return (TreeMapAlgo)this.GetValue(TreeMapItem.TreeMapModeProperty); }
set { this.SetValue(TreeMapItem.TreeMapModeProperty, value); }
}
public string ValuePropertyName
{
get { return (string)this.GetValue(TreeMapItem.ValuePropertyNameProperty); }
set { this.SetValue(TreeMapItem.ValuePropertyNameProperty, value); }
}
public int MaxDepth
{
get { return (int)this.GetValue(TreeMapItem.MaxDepthProperty); }
internal set { this.SetValue(TreeMapItem.MaxDepthProperty, value); }
}
public int MinArea
{
get { return (int)this.GetValue(TreeMapItem.MinAreaProperty); }
internal set { this.SetValue(TreeMapItem.MinAreaProperty, value); }
}
public bool ShouldRecurse
{
get { return (bool)this.GetValue(TreeMapItem.ShouldRecurseProperty); }
internal set { this.SetValue(TreeMapItem.ShouldRecurseProperty, value); }
}
public int Level
{
get { return (int)this.GetValue(TreeMapItem.LevelProperty); }
set { this.SetValue(TreeMapItem.LevelProperty, value); }
}
internal double Area
{
get { return _area; }
}
internal ItemsControl ParentItemsControl
{
get { return ItemsControl.ItemsControlFromItemContainer(this); }
}
internal TreeMaps ParentTreeMap
{
get
{
for (ItemsControl control = this.ParentItemsControl; control != null; control = ItemsControl.ItemsControlFromItemContainer(control))
{
TreeMaps view = control as TreeMaps;
if (view != null)
return view;
}
return null;
}
}
internal TreeMapItem ParentTreeMapItem
{
get { return (this.ParentItemsControl as TreeMapItem); }
}
#endregion
#region protected methods
protected override Size ArrangeOverride(Size arrangeBounds)
{
Size size = base.ArrangeOverride(arrangeBounds);
if (this.IsValidSize(size))
_area = size.Width * size.Height;
else
_area = 0;
this.UpdateShouldRecurse();
return size;
}
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeMapItem(this.Level+1,this.MaxDepth,this.MinArea,this.ValuePropertyName);
}
protected override void OnVisualParentChanged(DependencyObject oldParent)
{
base.OnVisualParentChanged(oldParent);
_parentTreeMaps = this.ParentTreeMap;
if (_parentTreeMaps != null)
{
Binding bindingMode = new Binding(TreeMaps.TreeMapModeProperty.Name);
bindingMode.Source = _parentTreeMaps;
BindingOperations.SetBinding(this, TreeMapItem.TreeMapModeProperty, bindingMode);
Binding bindingValue = new Binding(TreeMaps.ValuePropertyNameProperty.Name);
bindingValue.Source = _parentTreeMaps;
BindingOperations.SetBinding(this, TreeMapItem.ValuePropertyNameProperty, bindingValue);
Binding bindingMinArea = new Binding(TreeMaps.MinAreaProperty.Name);
bindingMinArea.Source = _parentTreeMaps;
BindingOperations.SetBinding(this, TreeMapItem.MinAreaProperty, bindingMinArea);
Binding bindingMaxDepth = new Binding(TreeMaps.MaxDepthProperty.Name);
bindingMaxDepth.Source = _parentTreeMaps;
BindingOperations.SetBinding(this, TreeMapItem.MaxDepthProperty, bindingMaxDepth);
}
}
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if (e.Property == TreeMapItem.ValuePropertyNameProperty || e.Property == TreeMapItem.DataContextProperty)
{
if (this.ValuePropertyName != null && this.DataContext != null)
{
Binding binding = new Binding(this.ValuePropertyName);
binding.Source = this.DataContext;
BindingOperations.SetBinding(this, TreeMapsPanel.WeightProperty, binding);
}
}
else if (e.Property == TreeMapItem.MaxDepthProperty)
this.UpdateShouldRecurse();
else if (e.Property == TreeMapItem.MinAreaProperty)
this.UpdateShouldRecurse();
else if (e.Property == TreeMapItem.LevelProperty)
this.UpdateShouldRecurse();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is TreeMapItem);
}
#endregion
#region private methods
private bool IsValidSize(Size size)
{
return (!size.IsEmpty && size.Width > 0 && size.Width != double.NaN && size.Height > 0 && size.Height != double.NaN);
}
private void UpdateShouldRecurse()
{
if (!this.HasHeader)
{
this.ShouldRecurse = false;
return;
}
this.ShouldRecurse = ((this.MaxDepth == 0) || (this.Level < this.MaxDepth)) && ((this.MinArea == 0) || (this.Area >this.MinArea));
}
#endregion
}
}

92
src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/TreeMaps.cs

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows;
using System.Windows.Shapes;
using System.Windows.Media;
namespace TreeMaps.Controls
{
public class TreeMaps: ItemsControl
{
#region fields
#endregion
#region dependency properties
public static DependencyProperty TreeMapModeProperty
= DependencyProperty.Register("TreeMapMode", typeof(TreeMapAlgo), typeof(TreeMaps), new FrameworkPropertyMetadata(TreeMapAlgo.Squarified,FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));
public static DependencyProperty ValuePropertyNameProperty
= DependencyProperty.Register("ValuePropertyName", typeof(string), typeof(TreeMaps),new FrameworkPropertyMetadata(null,FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));
public static DependencyProperty MaxDepthProperty
= DependencyProperty.Register("MaxDepth", typeof(int), typeof(TreeMaps),new FrameworkPropertyMetadata(1,FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty MinAreaProperty
= DependencyProperty.Register("MinArea", typeof(int), typeof(TreeMaps),new FrameworkPropertyMetadata(64,FrameworkPropertyMetadataOptions.AffectsRender));
#endregion
#region ctors
static TreeMaps()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeMaps), new FrameworkPropertyMetadata(typeof(TreeMaps)));
}
#endregion
#region properties
public TreeMapAlgo TreeMapMode
{
get { return (TreeMapAlgo)this.GetValue(TreeMaps.TreeMapModeProperty); }
set { this.SetValue(TreeMaps.TreeMapModeProperty, value); }
}
public int MaxDepth
{
get { return (int)this.GetValue(TreeMaps.MaxDepthProperty); }
set { this.SetValue(TreeMaps.MaxDepthProperty, value); }
}
public int MinArea
{
get { return (int)this.GetValue(TreeMaps.MinAreaProperty); }
set { this.SetValue(TreeMaps.MinAreaProperty, value); }
}
public string ValuePropertyName
{
get { return (string)this.GetValue(TreeMaps.ValuePropertyNameProperty); }
set { this.SetValue(TreeMaps.ValuePropertyNameProperty, value); }
}
#endregion
#region protected methods
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeMapItem(1, this.MaxDepth, this.MinArea, this.ValuePropertyName);
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is TreeMapItem);
}
#endregion
}
public enum TreeMapAlgo
{
Standard,
Squarified
}
}

292
src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/TreeMapsPanel.cs

@ -0,0 +1,292 @@ @@ -0,0 +1,292 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows;
namespace TreeMaps.Controls
{
public class TreeMapsPanel : Panel
{
#region fields
private Rect _emptyArea;
private double _weightSum = 0;
private List<WeightUIElement> _items = new List<WeightUIElement>();
#endregion
#region dependency properties
public static readonly DependencyProperty
WeightProperty = DependencyProperty.RegisterAttached("Weight", typeof(double),typeof(TreeMapsPanel),new FrameworkPropertyMetadata(1.0,FrameworkPropertyMetadataOptions.AffectsParentArrange|FrameworkPropertyMetadataOptions.AffectsParentMeasure));
#endregion
#region enum
protected enum RowOrientation
{
Horizontal,
Vertical
}
#endregion
#region properties
public static double GetWeight(DependencyObject uiElement)
{
if (uiElement == null)
return 0;
else
return (double)uiElement.GetValue(TreeMapsPanel.WeightProperty);
}
public static void SetWeight(DependencyObject uiElement, double value)
{
if (uiElement != null)
uiElement.SetValue(TreeMapsPanel.WeightProperty, value);
}
protected Rect EmptyArea
{
get { return _emptyArea; }
set { _emptyArea = value; }
}
protected List<WeightUIElement> ManagedItems
{
get { return _items; }
}
#endregion
#region protected methods
protected override Size ArrangeOverride(Size arrangeSize)
{
foreach (WeightUIElement child in this.ManagedItems)
child.UIElement.Arrange(new Rect(child.ComputedLocation, child.ComputedSize));
return arrangeSize;
}
protected override Size MeasureOverride(Size constraint)
{
this.EmptyArea = new Rect(0, 0, constraint.Width, constraint.Height);
this.PrepareItems();
double area = this.EmptyArea.Width * this.EmptyArea.Height;
foreach (WeightUIElement item in this.ManagedItems)
item.RealArea = area * item.Weight / _weightSum;
this.ComputeBounds();
foreach (WeightUIElement child in this.ManagedItems)
{
if (this.IsValidSize(child.ComputedSize))
child.UIElement.Measure(child.ComputedSize);
else
child.UIElement.Measure(new Size(0, 0));
}
return constraint;
}
protected virtual void ComputeBounds()
{
this.ComputeTreeMaps(this.ManagedItems);
}
protected double GetShortestSide()
{
return Math.Min(this.EmptyArea.Width, this.EmptyArea.Height);
}
protected RowOrientation GetOrientation()
{
return (this.EmptyArea.Width > this.EmptyArea.Height ? RowOrientation.Horizontal : RowOrientation.Vertical);
}
protected virtual Rect GetRectangle(RowOrientation orientation, WeightUIElement item, double x, double y, double width, double height)
{
if (orientation == RowOrientation.Horizontal)
return new Rect(x, y, item.RealArea / height, height);
else
return new Rect(x, y, width, item.RealArea / width);
}
protected virtual void ComputeNextPosition(RowOrientation orientation, ref double xPos, ref double yPos, double width, double height)
{
if (orientation == RowOrientation.Horizontal)
xPos += width;
else
yPos += height;
}
protected void ComputeTreeMaps(List<WeightUIElement> items)
{
RowOrientation orientation = this.GetOrientation();
double areaSum = 0;
foreach (WeightUIElement item in items)
areaSum += item.RealArea;
Rect currentRow;
if (orientation == RowOrientation.Horizontal)
{
currentRow = new Rect(_emptyArea.X, _emptyArea.Y, areaSum / _emptyArea.Height, _emptyArea.Height);
_emptyArea = new Rect(_emptyArea.X + currentRow.Width, _emptyArea.Y, Math.Max(0, _emptyArea.Width - currentRow.Width), _emptyArea.Height);
}
else
{
currentRow = new Rect(_emptyArea.X, _emptyArea.Y, _emptyArea.Width, areaSum / _emptyArea.Width);
_emptyArea = new Rect(_emptyArea.X, _emptyArea.Y + currentRow.Height, _emptyArea.Width, Math.Max(0, _emptyArea.Height - currentRow.Height));
}
double prevX = currentRow.X;
double prevY = currentRow.Y;
foreach (WeightUIElement item in items)
{
Rect rect = this.GetRectangle(orientation, item, prevX, prevY, currentRow.Width, currentRow.Height);
item.AspectRatio = rect.Width / rect.Height;
item.ComputedSize = rect.Size;
item.ComputedLocation = rect.Location;
this.ComputeNextPosition(orientation, ref prevX, ref prevY, rect.Width, rect.Height);
}
}
#endregion
#region private methods
private bool IsValidSize(Size size)
{
return (!size.IsEmpty && size.Width > 0 && size.Width != double.NaN && size.Height > 0 && size.Height != double.NaN);
}
private bool IsValidItem(WeightUIElement item)
{
return (item != null && item.Weight != double.NaN && Math.Round(item.Weight, 0) != 0);
}
private void PrepareItems()
{
_weightSum = 0;
this.ManagedItems.Clear();
foreach (UIElement child in this.Children)
{
WeightUIElement element = new WeightUIElement(child, TreeMapsPanel.GetWeight(child));
if (this.IsValidItem(element))
{
_weightSum += element.Weight;
this.ManagedItems.Add(element);
}
else
{
element.ComputedSize = Size.Empty;
element.ComputedLocation = new Point(0, 0);
element.UIElement.Measure(element.ComputedSize);
element.UIElement.Visibility = Visibility.Collapsed;
}
}
this.ManagedItems.Sort(WeightUIElement.CompareByValueDecreasing);
}
#endregion
#region inner classes
protected class WeightUIElement
{
#region fields
private double _weight;
private double _area;
private UIElement _element;
private Size _desiredSize;
private Point _desiredLocation;
private double _ratio;
#endregion
#region ctors
public WeightUIElement(UIElement element, double weight)
{
_element = element;
_weight = weight;
}
#endregion
#region properties
internal Size ComputedSize
{
get { return _desiredSize; }
set { _desiredSize = value; }
}
internal Point ComputedLocation
{
get { return _desiredLocation; }
set { _desiredLocation = value; }
}
public double AspectRatio
{
get { return _ratio; }
set { _ratio = value; }
}
public double Weight
{
get { return _weight; }
}
public double RealArea
{
get { return _area; }
set { _area = value; }
}
public UIElement UIElement
{
get { return _element; }
}
#endregion
#region static members
public static int CompareByValueDecreasing(WeightUIElement x, WeightUIElement y)
{
if (x == null)
{
if (y == null)
return -1;
else
return 0;
}
else
{
if (y == null)
return 1;
else
return x.Weight.CompareTo(y.Weight) * -1;
}
}
#endregion
}
#endregion
}
}

40
src/AddIns/Analysis/CodeQuality/TreeMaps/Controls/ValueDataTemplate.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Data;
namespace TreeMaps.Controls
{
public class ValueDataTemplate : HierarchicalDataTemplate
{
#region fields
private BindingBase _valueBinding;
#endregion
#region ctors
public ValueDataTemplate()
{
}
public ValueDataTemplate(object dataType)
: base(dataType)
{
}
#endregion
#region properties
public BindingBase AreaValue
{
get { return _valueBinding; }
set { _valueBinding = value; }
}
#endregion
}
}

62
src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/AssemblyInfo.cs

@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
#region Using directives
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Resources;
using System.Globalization;
using System.Windows;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SquarifiedTreeMaps")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SquarifiedTreeMaps")]
[assembly: AssemblyCopyright("Copyright @ 2007")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
// Specifies the location in which theme dictionaries are stored for types in an assembly.
[assembly: ThemeInfo(
// Specifies the location of system theme-specific resource dictionaries for this project.
// The default setting in this project is "None" since this default project does not
// include these user-defined theme files:
// Themes\Aero.NormalColor.xaml
// Themes\Classic.xaml
// Themes\Luna.Homestead.xaml
// Themes\Luna.Metallic.xaml
// Themes\Luna.NormalColor.xaml
// Themes\Royale.NormalColor.xaml
ResourceDictionaryLocation.None,
// Specifies the location of the system non-theme specific resource dictionary:
// Themes\generic.xaml
ResourceDictionaryLocation.SourceAssembly)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]

63
src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Resources.Designer.cs generated

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TreeMaps.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TreeMaps.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

117
src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Resources.resx

@ -0,0 +1,117 @@ @@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

26
src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Settings.Designer.cs generated

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TreeMaps.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

7
src/AddIns/Analysis/CodeQuality/TreeMaps/Properties/Settings.settings

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

126
src/AddIns/Analysis/CodeQuality/TreeMaps/Themes/generic.xaml

@ -0,0 +1,126 @@ @@ -0,0 +1,126 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:TreeMaps.Controls"
>
<Style TargetType="{x:Type l:TreeMaps}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<l:SquarifiedTreeMapsPanel SnapsToDevicePixels="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type l:TreeMaps}">
<Border
Name="Bd"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
>
<ItemsPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="TreeMapMode" Value="Standard">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<l:TreeMapsPanel SnapsToDevicePixels="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type l:TreeMapItem}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<l:SquarifiedTreeMapsPanel SnapsToDevicePixels="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type l:TreeMapItem}">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Visibility="{TemplateBinding Visibility}"
Margin="{TemplateBinding Margin}"
>
<Grid>
<ContentPresenter
x:Name="PART_Header"
ContentSource="Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
/>
<ItemsPresenter
x:Name="ItemsHost"
Grid.Row="1"
/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="ShouldRecurse" Value="false">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type l:TreeMapItem}">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Visibility="{TemplateBinding Visibility}"
Margin="{TemplateBinding Margin}"
>
<Grid>
<ContentPresenter
x:Name="PART_Header"
ContentSource="Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="TreeMapMode" Value="Standard">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<l:TreeMapsPanel SnapsToDevicePixels="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>

104
src/AddIns/Analysis/CodeQuality/TreeMaps/TreeMaps.csproj

@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3ED2897F-1A8A-4106-89D2-4D342860D480}</ProjectGuid>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<RootNamespace>TreeMaps</RootNamespace>
<AssemblyName>TreeMaps</AssemblyName>
<WarningLevel>4</WarningLevel>
<OutputType>Library</OutputType>
<MinFrameworkVersionRequired>3.0</MinFrameworkVersionRequired>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
<UpdateEnabled>true</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>false</MapFileExtensions>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>
<PublishUrl>Publish\</PublishUrl>
<StartupObject>
</StartupObject>
<TargetFrameworkProfile />
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>false</DebugSymbols>
<Optimize>true</Optimize>
<OutputPath>.\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="UIAutomationProvider" />
<Reference Include="UIAutomationTypes" />
<Reference Include="ReachFramework" />
<Reference Include="System.Printing" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.IdentityModel" />
</ItemGroup>
<ItemGroup>
<Page Include="Themes\generic.xaml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Controls\SquarifiedTreeMapsPanel.cs" />
<Compile Include="Controls\TreeMapItem.cs" />
<Compile Include="Controls\TreeMaps.cs" />
<Compile Include="Controls\TreeMapsPanel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<AppDesigner Include="Properties\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
</Project>

6
src/AddIns/Analysis/CodeQuality/TreeMaps/TreeMaps.csproj.user

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
</Project>
Loading…
Cancel
Save