7 changed files with 369 additions and 6 deletions
@ -0,0 +1,102 @@ |
|||||||
|
/* |
||||||
|
* 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.ComponentModel; |
||||||
|
using System.Linq; |
||||||
|
using System.Windows.Input; |
||||||
|
|
||||||
|
using ICSharpCode.CodeQualityAnalysis.Controls; |
||||||
|
using ICSharpCode.CodeQualityAnalysis.Utility; |
||||||
|
using Microsoft.Win32; |
||||||
|
|
||||||
|
namespace ICSharpCode.CodeQualityAnalysis |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Description of MainWindowViewModel.
|
||||||
|
/// </summary>
|
||||||
|
public class MainWindowTranslationViewModel :ViewModelBase |
||||||
|
{ |
||||||
|
|
||||||
|
public MainWindowTranslationViewModel():base() |
||||||
|
{ |
||||||
|
this.Title = "Code Quality Analysis"; |
||||||
|
this.OpenAssembly = "OpenAssembly"; |
||||||
|
} |
||||||
|
|
||||||
|
public string Title {get;private set;} |
||||||
|
|
||||||
|
public string OpenAssembly {get; private set;} |
||||||
|
|
||||||
|
|
||||||
|
#region OpenAssembly
|
||||||
|
/* |
||||||
|
public ICommand OpenAssemblyCommand |
||||||
|
{ |
||||||
|
get { return new RelayCommand(OpenAssemblyExecute, CanOpenAssemblyExecute); } |
||||||
|
} |
||||||
|
|
||||||
|
Boolean CanOpenAssemblyExecute() |
||||||
|
{ |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void OpenAssemblyExecute() |
||||||
|
{ |
||||||
|
var fileDialog = new OpenFileDialog |
||||||
|
{ |
||||||
|
Filter = "Component Files (*.dll, *.exe)|*.dll;*.exe" |
||||||
|
}; |
||||||
|
|
||||||
|
fileDialog.ShowDialog(); |
||||||
|
|
||||||
|
if (String.IsNullOrEmpty(fileDialog.FileName)) |
||||||
|
return; |
||||||
|
|
||||||
|
progressBar.Visibility = Visibility.Visible; |
||||||
|
assemblyStats.Visibility = Visibility.Hidden; |
||||||
|
fileAssemblyLoading.Text = System.IO.Path.GetFileName(fileDialog.FileName); |
||||||
|
|
||||||
|
var worker = new BackgroundWorker(); |
||||||
|
worker.DoWork += (source, args) => MetricsReader = new MetricsReader(fileDialog.FileName); |
||||||
|
worker.RunWorkerCompleted += (source, args) => { |
||||||
|
|
||||||
|
progressBar.Visibility = Visibility.Hidden; |
||||||
|
assemblyStats.Visibility = Visibility.Visible; |
||||||
|
mainTabs.IsEnabled = true; |
||||||
|
Helper.FillTree(definitionTree, metricsReader.MainModule); |
||||||
|
|
||||||
|
FillMatrix(); |
||||||
|
}; |
||||||
|
|
||||||
|
worker.RunWorkerAsync(); |
||||||
|
} |
||||||
|
|
||||||
|
private void FillMatrix() |
||||||
|
{ |
||||||
|
var matrix = new DependencyMatrix(); |
||||||
|
|
||||||
|
foreach (var ns in metricsReader.MainModule.Namespaces) { |
||||||
|
matrix.HeaderRows.Add(new Cell<INode>(ns)); |
||||||
|
foreach (var type in ns.Types) { |
||||||
|
matrix.HeaderRows.Add(new Cell<INode>(type)); |
||||||
|
} |
||||||
|
matrix.HeaderColumns.Add(new Cell<INode>(ns)); |
||||||
|
foreach (var type in ns.Types) { |
||||||
|
matrix.HeaderColumns.Add(new Cell<INode>(type)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//matrixControl.Matrix = matrix;
|
||||||
|
//matrixControl.DrawTree(metricsReader.MainModule);
|
||||||
|
} |
||||||
|
*/ |
||||||
|
#endregion
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,155 @@ |
|||||||
|
/* |
||||||
|
* Created by SharpDevelop. |
||||||
|
* User: Peter Forstmeier |
||||||
|
* Date: 03.09.2011 |
||||||
|
* Time: 14:25 |
||||||
|
* |
||||||
|
* To change this template use Tools | Options | Coding | Edit Standard Headers. |
||||||
|
*/ |
||||||
|
using System; |
||||||
|
using System.Diagnostics; |
||||||
|
using System.Windows.Input; |
||||||
|
|
||||||
|
namespace ICSharpCode.CodeQualityAnalysis.Utility |
||||||
|
{ |
||||||
|
public class RelayCommand<T> : ICommand |
||||||
|
{ |
||||||
|
|
||||||
|
#region Declarations
|
||||||
|
|
||||||
|
readonly Predicate<T> _canExecute; |
||||||
|
readonly Action<T> _execute; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="RelayCommand<T>"/> class and the command can always be executed.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="execute">The execution logic.</param>
|
||||||
|
public RelayCommand(Action<T> execute) |
||||||
|
: this(execute, null) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="RelayCommand<T>"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="execute">The execution logic.</param>
|
||||||
|
/// <param name="canExecute">The execution status logic.</param>
|
||||||
|
public RelayCommand(Action<T> execute, Predicate<T> canExecute) |
||||||
|
{ |
||||||
|
|
||||||
|
if (execute == null) |
||||||
|
throw new ArgumentNullException("execute"); |
||||||
|
_execute = execute; |
||||||
|
_canExecute = canExecute; |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ICommand Members
|
||||||
|
|
||||||
|
public event EventHandler CanExecuteChanged |
||||||
|
{ |
||||||
|
add |
||||||
|
{ |
||||||
|
|
||||||
|
if (_canExecute != null) |
||||||
|
CommandManager.RequerySuggested += value; |
||||||
|
} |
||||||
|
remove |
||||||
|
{ |
||||||
|
|
||||||
|
if (_canExecute != null) |
||||||
|
CommandManager.RequerySuggested -= value; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[DebuggerStepThrough] |
||||||
|
public Boolean CanExecute(Object parameter) |
||||||
|
{ |
||||||
|
return _canExecute == null ? true : _canExecute((T)parameter); |
||||||
|
} |
||||||
|
|
||||||
|
public void Execute(Object parameter) |
||||||
|
{ |
||||||
|
_execute((T)parameter); |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A command whose sole purpose is to relay its functionality to other objects by invoking delegates. The default return value for the CanExecute method is 'true'.
|
||||||
|
/// </summary>
|
||||||
|
public class RelayCommand : ICommand |
||||||
|
{ |
||||||
|
|
||||||
|
#region Declarations
|
||||||
|
|
||||||
|
readonly Func<Boolean> _canExecute; |
||||||
|
readonly Action _execute; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="RelayCommand<T>"/> class and the command can always be executed.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="execute">The execution logic.</param>
|
||||||
|
public RelayCommand(Action execute) |
||||||
|
: this(execute, null) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="RelayCommand<T>"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="execute">The execution logic.</param>
|
||||||
|
/// <param name="canExecute">The execution status logic.</param>
|
||||||
|
public RelayCommand(Action execute, Func<Boolean> canExecute) |
||||||
|
{ |
||||||
|
|
||||||
|
if (execute == null) |
||||||
|
throw new ArgumentNullException("execute"); |
||||||
|
_execute = execute; |
||||||
|
_canExecute = canExecute; |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ICommand Members
|
||||||
|
|
||||||
|
public event EventHandler CanExecuteChanged |
||||||
|
{ |
||||||
|
add |
||||||
|
{ |
||||||
|
|
||||||
|
if (_canExecute != null) |
||||||
|
CommandManager.RequerySuggested += value; |
||||||
|
} |
||||||
|
remove |
||||||
|
{ |
||||||
|
|
||||||
|
if (_canExecute != null) |
||||||
|
CommandManager.RequerySuggested -= value; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[DebuggerStepThrough] |
||||||
|
public Boolean CanExecute(Object parameter) |
||||||
|
{ |
||||||
|
return _canExecute == null ? true : _canExecute(); |
||||||
|
} |
||||||
|
|
||||||
|
public void Execute(Object parameter) |
||||||
|
{ |
||||||
|
_execute(); |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,80 @@ |
|||||||
|
/* |
||||||
|
* Created by SharpDevelop. |
||||||
|
* User: Peter Forstmeier |
||||||
|
* Date: 03.09.2011 |
||||||
|
* Time: 13:36 |
||||||
|
* |
||||||
|
* To change this template use Tools | Options | Coding | Edit Standard Headers. |
||||||
|
*/ |
||||||
|
using System; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.Linq; |
||||||
|
using System.Linq.Expressions; |
||||||
|
using System.Reflection; |
||||||
|
|
||||||
|
namespace ICSharpCode.CodeQualityAnalysis.Utility |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Description of ViewModelBase.
|
||||||
|
/// </summary>
|
||||||
|
public class ViewModelBase:INotifyPropertyChanged |
||||||
|
{ |
||||||
|
public ViewModelBase() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged; |
||||||
|
|
||||||
|
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) |
||||||
|
{ |
||||||
|
var handler = this.PropertyChanged; |
||||||
|
if (handler != null) |
||||||
|
{ |
||||||
|
handler(this, e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpresssion) |
||||||
|
{ |
||||||
|
var propertyName = ExtractPropertyName(propertyExpresssion); |
||||||
|
this.RaisePropertyChanged(propertyName); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected void RaisePropertyChanged(String propertyName) |
||||||
|
{ |
||||||
|
OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static String ExtractPropertyName<T>(Expression<Func<T>> propertyExpresssion) |
||||||
|
{ |
||||||
|
if (propertyExpresssion == null) |
||||||
|
{ |
||||||
|
throw new ArgumentNullException("propertyExpresssion"); |
||||||
|
} |
||||||
|
|
||||||
|
var memberExpression = propertyExpresssion.Body as MemberExpression; |
||||||
|
if (memberExpression == null) |
||||||
|
{ |
||||||
|
throw new ArgumentException("The expression is not a member access expression.", "propertyExpresssion"); |
||||||
|
} |
||||||
|
|
||||||
|
var property = memberExpression.Member as PropertyInfo; |
||||||
|
if (property == null) |
||||||
|
{ |
||||||
|
throw new ArgumentException("The member access expression does not access a property.", "propertyExpresssion"); |
||||||
|
} |
||||||
|
|
||||||
|
var getMethod = property.GetGetMethod(true); |
||||||
|
if (getMethod.IsStatic) |
||||||
|
{ |
||||||
|
throw new ArgumentException("The referenced property is a static property.", "propertyExpresssion"); |
||||||
|
} |
||||||
|
|
||||||
|
return memberExpression.Member.Name; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue