Browse Source

Grid visualizer:

- added index column
 - simplified code for showing / hiding columns

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4759 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Martin Koníček 17 years ago
parent
commit
b3755fc862
  1. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  2. 9
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml
  3. 106
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs
  4. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml
  5. 66
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
  6. 15
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ObjectValue.cs
  7. 68
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/SelectedProperties.cs
  8. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/EnumerableValuesProvider.cs
  9. 1
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/ListValuesProvider.cs
  10. 14
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/VirtualizingIEnumerable.cs
  11. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/EnumViewModel.cs
  12. 168
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/GridViewColumnHider.cs
  13. 25
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/GridViewHideableColumn.cs
  14. 8
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/ViewModelBase.cs

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj

@ -156,9 +156,9 @@ @@ -156,9 +156,9 @@
<Compile Include="Src\Visualizers\Graph\TreeModel\NestedNodeType.cs" />
<Compile Include="Src\Visualizers\Graph\TreeModel\NonPublicMembersNode.cs" />
<Compile Include="Src\Visualizers\Graph\TreeModel\PropertyNode.cs" />
<Compile Include="Src\Visualizers\GridVisualizer\SelectedProperties.cs" />
<Compile Include="Src\Visualizers\GridVisualizer\ValueProviders\GridValuesProvider.cs" />
<Compile Include="Src\Visualizers\PresentationBindings\GridViewColumnHider.cs" />
<Compile Include="Src\Visualizers\PresentationBindings\GridViewHideableColumn.cs" />
<Compile Include="Src\Visualizers\PresentationBindings\ScrollUtils.cs" />
<Compile Include="Src\Visualizers\PresentationBindings\TooltipVisibilityConverter.cs" />
<Compile Include="Src\Visualizers\Utils\AtomicType.cs" />
@ -247,7 +247,6 @@ @@ -247,7 +247,6 @@
<Compile Include="Src\Visualizers\GridVisualizer\ObjectValue.cs" />
<Compile Include="Src\Visualizers\GridVisualizer\ValueProviders\EnumerableValuesProvider.cs" />
<Compile Include="Src\Visualizers\GridVisualizer\ValueProviders\ListValuesProvider.cs" />
<Compile Include="Src\Visualizers\GridVisualizer\ValueProviders\VirtualizingIEnumerable.cs" />
<Compile Include="Src\Visualizers\ObjectProperty.cs" />
<Compile Include="Src\Visualizers\Utils\DebuggerHelpers.cs" />
<Compile Include="Src\Visualizers\Utils\DictionaryExtensions.cs" />

9
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml

@ -1,9 +0,0 @@ @@ -1,9 +0,0 @@
<Window x:Class="Debugger.AddIn.Visualizers.Graph.VisualizerWPFWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dv="clr-namespace:Debugger.AddIn.Visualizers.Graph"
xmlns:controls="clr-namespace:Debugger.AddIn.Visualizers.Controls"
Title="Object graph visualizer" Height="400" Width="600">
<dv:ObjectGraphControl x:Name="objectGraphControl"></dv:ObjectGraphControl>
</Window>

106
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs

@ -1,106 +0,0 @@ @@ -1,106 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Debugger.AddIn.Visualizers.Graph.Layout;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Services;
namespace Debugger.AddIn.Visualizers.Graph
{
/// <summary>
/// Interaction logic for VisualizerWPFWindow.xaml
/// </summary>
public partial class VisualizerWPFWindow : Window
{
private WindowsDebugger debuggerService;
public VisualizerWPFWindow()
{
InitializeComponent();
debuggerService = DebuggerService.CurrentDebugger as WindowsDebugger;
if (debuggerService == null)
throw new ApplicationException("Only windows debugger is currently supported");
registerEvents();
instance = this;
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
unregisterEvents();
this.objectGraphControl.ClearUIControlCache();
instance = null;
}
static VisualizerWPFWindow instance;
public static VisualizerWPFWindow Instance
{
get { return instance; }
}
public string ShownExpression
{
get {
return this.objectGraphControl.ShownExpression;
}
set {
if (value != this.objectGraphControl.ShownExpression) {
this.objectGraphControl.ShownExpression = value;
this.objectGraphControl.Refresh();
}
}
}
public static VisualizerWPFWindow EnsureShown()
{
var window = VisualizerWPFWindow.Instance ?? new VisualizerWPFWindow();
window.Topmost = true;
window.Show();
return window;
}
private void registerEvents()
{
debuggerService.IsProcessRunningChanged += new EventHandler(debuggerService_IsProcessRunningChanged);
debuggerService.DebugStopped += new EventHandler(debuggerService_DebugStopped);
}
private void unregisterEvents()
{
debuggerService.IsProcessRunningChanged -= new EventHandler(debuggerService_IsProcessRunningChanged);
debuggerService.DebugStopped -= new EventHandler(debuggerService_DebugStopped);
}
public void debuggerService_IsProcessRunningChanged(object sender, EventArgs e)
{
// on step or breakpoint hit
if (!debuggerService.IsProcessRunning)
{
this.objectGraphControl.Refresh();
}
}
public void debuggerService_DebugStopped(object sender, EventArgs e)
{
this.Close();
}
}
}

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml

@ -219,7 +219,7 @@ @@ -219,7 +219,7 @@
<ComboBox Name="cmbColumns" Style="{StaticResource styleColumnsComboBox}" Width="74" Height="20" HorizontalAlignment="Right">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSelected}" Content="{Binding Path=Name}"></CheckBox>
<CheckBox IsChecked="{Binding Path=IsVisible}" Content="{Binding Path=Header}"></CheckBox>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ToolTip>

66
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs

@ -4,10 +4,11 @@ @@ -4,10 +4,11 @@
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using Debugger.MetaData;
using Debugger.AddIn.Visualizers.PresentationBindings;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
@ -15,12 +16,12 @@ using System.Windows.Data; @@ -15,12 +16,12 @@ using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Linq;
using Debugger.AddIn.Visualizers.Common;
using Debugger.AddIn.Visualizers.Utils;
using Debugger.MetaData;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Services;
using Debugger.AddIn.Visualizers.Utils;
using Debugger.AddIn.Visualizers.Common;
namespace Debugger.AddIn.Visualizers.GridVisualizer
{
@ -29,9 +30,12 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -29,9 +30,12 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
/// </summary>
public partial class GridVisualizerWindow : Window
{
private WindowsDebugger debuggerService;
private GridViewColumnHider columnHider;
private SelectedProperties selectedProperties;
WindowsDebugger debuggerService;
GridViewColumnHider columnHider;
//SelectedProperties selectedProperties;
/// <summary> Number of items shown initially when visualizing IEnumerable. </summary>
static readonly int initialIEnumerableItemsCount = 24;
public GridVisualizerWindow()
{
@ -119,7 +123,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -119,7 +123,6 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
}
if (val != null && !val.IsNull) {
GridValuesProvider gridValuesProvider;
// Value is IList?
DebugType iListType, listItemType;
if (val.Type.ResolveIListImplementation(out iListType, out listItemType)) {
@ -131,7 +134,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -131,7 +134,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
// Value is IEnumerable?
DebugType iEnumerableType, itemType;
if (val.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) {
var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, 24);
var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, initialIEnumerableItemsCount);
var enumerableValuesProvider = new EnumerableValuesProvider(val.ExpressionTree, iEnumerableType, itemType);
lazyListViewWrapper.ItemsSource = new VirtualizingIEnumerable<ObjectValue>(enumerableValuesProvider.ItemsSource);
gridValuesProvider = enumerableValuesProvider;
@ -142,43 +145,38 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -142,43 +145,38 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
}
IList<MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers();
createGridViewColumns((GridView)this.listView.View, itemTypeMembers);
InitializeColumns((GridView)this.listView.View, itemTypeMembers);
this.columnHider = new GridViewColumnHider((GridView)this.listView.View);
// fill column-choosing ComboBox
this.selectedProperties = initializeSelectedPropertiesWithEvents(itemTypeMembers);
cmbColumns.ItemsSource = this.selectedProperties;
cmbColumns.ItemsSource = this.columnHider.HideableColumns;
}
}
private void createGridViewColumns(GridView gridView, IList<MemberInfo> itemTypeMembers)
void InitializeColumns(GridView gridView, IList<MemberInfo> itemTypeMembers)
{
gridView.Columns.Clear();
foreach (var member in itemTypeMembers) {
GridViewColumn column = new GridViewColumn();
column.Header = member.Name;
// "{Binding Path=[Name].Value}"
column.DisplayMemberBinding = new Binding("[" + member.Name + "].Value");
gridView.Columns.Add(column);
}
AddIndexColumn(gridView);
AddMembersColumns(gridView, itemTypeMembers);
}
private SelectedProperties initializeSelectedPropertiesWithEvents(IList<MemberInfo> itemTypeMembers)
void AddIndexColumn(GridView gridView)
{
var selectedProperties = new SelectedProperties(itemTypeMembers.Select(member => member.Name));
foreach (var selectedProperty in selectedProperties) {
selectedProperty.SelectedChanged += new EventHandler(selectedProperty_SelectedChanged);
}
return selectedProperties;
var indexColumn = new GridViewHideableColumn();
indexColumn.CanBeHidden = false;
indexColumn.Width = 36;
indexColumn.Header = string.Empty;
indexColumn.DisplayMemberBinding = new Binding("Index");
gridView.Columns.Add(indexColumn);
}
void selectedProperty_SelectedChanged(object sender, EventArgs e)
void AddMembersColumns(GridView gridView, IList<MemberInfo> itemTypeMembers)
{
var propertySeleted = ((SelectedProperty)sender);
var columnName = propertySeleted.Name;
if (propertySeleted.IsSelected) {
this.columnHider.ShowColumn(columnName);
} else {
this.columnHider.HideColumn(columnName);
foreach (var member in itemTypeMembers) {
var memberColumn = new GridViewHideableColumn();
memberColumn.CanBeHidden = true;
memberColumn.Header = member.Name;
// "{Binding Path=[Name].Value}"
memberColumn.DisplayMemberBinding = new Binding("[" + member.Name + "].Value");
gridView.Columns.Add(memberColumn);
}
}
}

15
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ObjectValue.cs

@ -14,10 +14,16 @@ using ICSharpCode.NRefactory.Ast; @@ -14,10 +14,16 @@ using ICSharpCode.NRefactory.Ast;
namespace Debugger.AddIn.Visualizers.GridVisualizer
{
/// <summary>
/// Object in the debugee, with lazy evaluated properties.
/// Item of a collection in the debugee, with lazy evaluated properties.
/// </summary>
public class ObjectValue
{
private int index;
/// <summary> Index of this item in the collection. </summary>
public int Index {
get { return index; }
}
// Used to be able to expand items of IEnumerable
// Now we rely on PermanentReference to be able to get member values on demand. With IList, PermanentReference could be replaced by Expression
public Value PermanentReference { get; private set; }
@ -27,8 +33,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -27,8 +33,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
/// <summary> Used to quickly find MemberInfo by member name - DebugType.GetMember(name) uses a loop to search members </summary>
private Dictionary<string, MemberInfo> memberForNameMap;
internal ObjectValue(Dictionary<string, MemberInfo> memberFromNameMap)
internal ObjectValue(int index, Dictionary<string, MemberInfo> memberFromNameMap)
{
this.index = index;
this.memberForNameMap = memberFromNameMap;
}
@ -58,9 +65,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -58,9 +65,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
//set { properties[key] = value; }
}
public static ObjectValue Create(Debugger.Value value, Dictionary<string, MemberInfo> memberFromName)
public static ObjectValue Create(Debugger.Value value, int index, Dictionary<string, MemberInfo> memberFromName)
{
ObjectValue result = new ObjectValue(memberFromName);
ObjectValue result = new ObjectValue(index, memberFromName);
// remember PermanentReference for expanding IEnumerable
Value permanentReference = value.GetPermanentReference();

68
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/SelectedProperties.cs

@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System.Collections.Generic;
using System.Linq;
using System;
namespace Debugger.AddIn.Visualizers.GridVisualizer
{
/// <summary>
/// Remembers which properties are selected to display in the Grid visualizer.
/// </summary>
public class SelectedProperties : IEnumerable<SelectedProperty>
{
private List<SelectedProperty> properties = new List<SelectedProperty>();
public SelectedProperties(IEnumerable<string> propertyNames)
{
foreach (var propName in propertyNames)
{
properties.Add(new SelectedProperty { Name = propName, IsSelected = true });
}
}
#region IEnumerable<PropertySelected> Members
public IEnumerator<SelectedProperty> GetEnumerator()
{
return ((IEnumerable<SelectedProperty>)properties).GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return ((System.Collections.IEnumerable)properties).GetEnumerator();
}
#endregion
}
/// <summary>
/// Property name + IsSelected.
/// </summary>
public class SelectedProperty
{
public event EventHandler SelectedChanged;
public string Name { get; set; }
private bool isSelected = true;
public bool IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
if (SelectedChanged != null)
SelectedChanged(this, EventArgs.Empty);
}
}
}
}

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/EnumerableValuesProvider.cs

@ -39,10 +39,11 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -39,10 +39,11 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
MethodInfo moveNextMethod = enumerator.Type.GetMethod("MoveNext");
PropertyInfo currentproperty = enumerator.Type.GetInterface(typeof(IEnumerator).FullName).GetProperty("Current");
int index = 0;
while ((bool)enumerator.InvokeMethod(moveNextMethod, null).PrimitiveValue)
{
Value currentValue = enumerator.GetPropertyValue(currentproperty);
yield return ObjectValue.Create(currentValue, this.memberFromNameMap);
yield return ObjectValue.Create(currentValue, index++, this.memberFromNameMap);
}
}
}

1
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/ListValuesProvider.cs

@ -41,6 +41,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -41,6 +41,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
return ObjectValue.Create(
targetObject.AppendIndexer(index).Evaluate(WindowsDebugger.CurrentProcess),
//targetObject.AppendIndexer(index), // use Expression instead of value - possible only for IList though
index,
this.memberFromNameMap);
}

14
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/VirtualizingIEnumerable.cs

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace Debugger.AddIn.Visualizers.GridVisualizer
{
}

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/EnumViewModel.cs

@ -62,7 +62,7 @@ namespace Debugger.AddIn.Visualizers @@ -62,7 +62,7 @@ namespace Debugger.AddIn.Visualizers
{
if (_enumValue.Equals(value)) return;
_enumValue = value;
onPropertyChanged("SelectedEnumValue");
OnPropertyChanged("SelectedEnumValue");
}
}
}

168
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/GridViewColumnHider.cs

@ -4,86 +4,122 @@ @@ -4,86 +4,122 @@
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System.Collections.Generic;
using Debugger.AddIn.Visualizers.PresentationBindings;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using ICSharpCode.SharpDevelop;
namespace Debugger.AddIn.Visualizers
{
public class GridViewColumnWithVisibility
{
public bool IsVisible { get; set; }
public GridViewColumn Column { get; set; }
}
public class GridViewColumnWithVisibility : ViewModelBase
{
public GridViewColumn Column { get; set; }
public string Header
{
get { return this.Column.Header.ToString(); }
}
private bool isVisible = true;
public bool IsVisible
{
get { return isVisible; }
set
{
if (isVisible != value)
{
isVisible = value;
OnPropertyChanged("IsVisible");
ExtensionMethods.RaiseEvent(IsVisibleChanged, this, EventArgs.Empty);
}
}
}
public event EventHandler IsVisibleChanged;
}
/// <summary>
/// Utility for hiding and showing columns in GridView (GridViewColumn does not have Visility property).
/// </summary>
public class GridViewColumnHider
{
private GridView gridView;
private List<GridViewColumnWithVisibility> allColumns = new List<GridViewColumnWithVisibility>();
{
private GridView gridView;
private List<GridViewColumnWithVisibility> allColumns = new List<GridViewColumnWithVisibility>();
public GridViewColumnHider(GridView gridView)
{
this.gridView = gridView;
initializeColumns();
}
public GridViewColumnHider(GridView gridView)
{
this.gridView = gridView;
initializeColumns();
}
void initializeColumns()
{
foreach (var column in gridView.Columns)
{
var columnWithVisibility = new GridViewColumnWithVisibility { Column = column, IsVisible = true };
allColumns.Add(columnWithVisibility);
columnWithVisibility.IsVisibleChanged += columnWithVisibility_IsVisibleChanged;
}
}
private void initializeColumns()
{
foreach (var column in gridView.Columns)
{
allColumns.Add(new GridViewColumnWithVisibility { Column = column, IsVisible = true });
}
}
void columnWithVisibility_IsVisibleChanged(object sender, EventArgs e)
{
var column = ((GridViewColumnWithVisibility)sender);
if (column.IsVisible) {
this.showColumn(column.Header);
} else {
this.hideColumn(column.Header);
}
}
bool canBeHidden(GridViewColumn column)
{
var columnHideable = column as GridViewHideableColumn;
if (columnHideable != null && (!columnHideable.CanBeHidden))
{
return false;
}
return true;
}
public IEnumerable<GridViewColumnWithVisibility> HideableColumns
{
get { return allColumns.Where(columnWithVisibility => canBeHidden(columnWithVisibility.Column)); }
}
private GridViewColumnWithVisibility findColumn(string header)
{
return allColumns.Where(columnVis => columnVis.Column.Header.ToString() == header).First();
}
private GridViewColumnWithVisibility findColumn(string header)
{
return allColumns.Where(columnVis => columnVis.Header == header).First();
}
public void HideColumn(string header)
{
var columnVis = findColumn(header);
if (!columnVis.IsVisible)
{
throw new InvalidOperationException("Column is already hidden.");
}
else
{
var gridColumn = columnVis.Column;
gridColumn.Width = gridColumn.ActualWidth;
gridView.Columns.Remove(gridColumn);
columnVis.IsVisible = false;
}
}
void hideColumn(string header)
{
var columnVis = findColumn(header);
var gridColumn = columnVis.Column;
gridColumn.Width = gridColumn.ActualWidth;
gridView.Columns.Remove(gridColumn);
columnVis.IsVisible = false;
}
public void ShowColumn(string header)
{
int columnsVisibleBefore = 0;
foreach (var columnVis in this.allColumns)
{
if (columnVis.IsVisible)
{
columnsVisibleBefore++;
}
if (columnVis.Column.Header.ToString() == header)
{
if (columnVis.IsVisible)
{
throw new InvalidOperationException("Column is already visible");
}
else
{
columnVis.IsVisible = true;
gridView.Columns.Insert(columnsVisibleBefore, columnVis.Column);
}
return;
}
}
throw new ArgumentException("Column not found");
}
}
void showColumn(string header)
{
int columnsVisibleBefore = 0;
foreach (var columnVis in this.allColumns)
{
if (columnVis.Header == header)
{
columnVis.IsVisible = true;
gridView.Columns.Insert(columnsVisibleBefore, columnVis.Column);
return;
}
if (columnVis.IsVisible)
{
columnsVisibleBefore++;
}
}
throw new ArgumentException("Column not found");
}
}
}

25
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/GridViewHideableColumn.cs

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
namespace Debugger.AddIn.Visualizers.PresentationBindings
{
/// <summary>
/// GridViewColumn that specifies whether it can be hidden using <see cref="GridViewColumnHider"></see>.
/// </summary>
public class GridViewHideableColumn : GridViewColumn
{
public bool CanBeHidden { get; set; }
public GridViewHideableColumn()
{
}
}
}

8
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/PresentationBindings/ViewModelBase.cs

@ -3,15 +3,17 @@ using System.Collections.Generic; @@ -3,15 +3,17 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using ICSharpCode.SharpDevelop;
namespace Debugger.AddIn.Visualizers
{
public class ViewModelBase : INotifyPropertyChanged
{
protected void onPropertyChanged(string propertyName)
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}

Loading…
Cancel
Save