/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 03.09.2011
* Time: 13:45
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.CodeQualityAnalysis.Controls;
using ICSharpCode.CodeQualityAnalysis.Utility;
using ICSharpCode.CodeQualityAnalysis.Utility.Localizeable;
using Microsoft.Win32;
namespace ICSharpCode.CodeQualityAnalysis
{
///
/// Description of MainWindowViewModel.
///
public enum MetricsLevel
{
Assembly,
Namespace,
Type,
Method
}
public enum Metrics
{
[LocalizableDescription("IL Instructions")]
ILInstructions,
[LocalizableDescription("Cyclomatic Complexity")]
CyclomaticComplexity,
[LocalizableDescription("Variables")]
Variables
}
public class MainWindowViewModel :ViewModelBase
{
public MainWindowViewModel():base()
{
this.FrmTitle = "Code Quality Analysis";
this.btnOpenAssembly = "Open Assembly";
#region MainTab
this.TabDependencyGraph = "Dependency Graph";
this.TabDependencyMatrix = "Dependency Matrix";
this.TabMetrics = "Metrics";
#endregion
MetrixTabEnable = false;
ActivateMetrics = new RelayCommand(ActivateMetricsExecute);
ShowTreeMap = new RelayCommand(ShowTreemapExecute,CanActivateTreemap);
}
public string FrmTitle {get;private set;}
public string btnOpenAssembly {get; private set;}
#region Main TabControl
public string TabDependencyGraph {get; private set;}
public string TabDependencyMatrix {get; private set;}
public string TabMetrics {get;private set;}
#endregion
private string fileName;
public string FileName {
get { return fileName; }
set { fileName = value;
base.RaisePropertyChanged(() =>FileName);}
}
private Visibility progressbarVisibly = Visibility.Hidden;
public Visibility ProgressbarVisible {
get { return progressbarVisibly; }
set { progressbarVisibly = value;
base.RaisePropertyChanged(() =>ProgressbarVisible);
}
}
private Visibility assemblyStatsVisible= Visibility.Hidden;
public Visibility AssemblyStatsVisible {
get { return assemblyStatsVisible; }
set { assemblyStatsVisible = value;
base.RaisePropertyChanged(() => AssemblyStatsVisible);
}
}
bool mainTabEnable;
public bool MainTabEnable {
get { return mainTabEnable; }
set { mainTabEnable = value;
base.RaisePropertyChanged(() => MainTabEnable);
}
}
bool metrixTabEnable;
public bool MetrixTabEnable {
get { return metrixTabEnable; }
set { metrixTabEnable = value;
base.RaisePropertyChanged(() => MetrixTabEnable);}
}
string typeInfo;
public string TypeInfo {
get { return typeInfo; }
set { typeInfo = value;
base.RaisePropertyChanged(() =>this.TypeInfo);
}
}
private Module mainModule;
public Module MainModule {
get { return mainModule; }
set { mainModule = value;
base.RaisePropertyChanged(() =>this.MainModule);
}
}
private ObservableCollection nodes;
public ObservableCollection Nodes {
get { return nodes; }
set { nodes = value;
base.RaisePropertyChanged(() =>this.Nodes);}
}
private string treeValueProperty ;
public string TreeValueProperty {
get { return treeValueProperty; }
set { treeValueProperty = value;
base.RaisePropertyChanged(() =>this.TreeValueProperty);}
}
// MetricsLevel Combo
public MetricsLevel MetricsLevel {
get {return MetricsLevel;}
}
#region ActivateMetrics
public ICommand ActivateMetrics {get;private set;}
bool metricsIsActive;
void ActivateMetricsExecute ()
{
metricsIsActive = true;
}
#endregion
// Metrics Combo
public Metrics Metrics
{
get {return Metrics;}
}
Metrics selectedMetrics;
public Metrics SelectedMetrics {
get { return selectedMetrics; }
set { selectedMetrics = value;
base.RaisePropertyChanged(() =>this.SelectedMetrics);
}
}
#region ShowTreeMap Treemap
public ICommand ShowTreeMap {get;private set;}
bool CanActivateTreemap()
{
return metricsIsActive;
}
void ShowTreemapExecute()
{
var r = from ns in MainModule.Namespaces
from type in ns.Types
from method in type.Methods
select method;
Nodes = new ObservableCollection(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");
}
}
#endregion
}
}