Browse Source

Refactored LazyListView to LazyItemsControl, can be used with any ItemsControl.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4584 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Martin Koníček 16 years ago
parent
commit
8ffd9d8269
  1. 27
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoProcess.cs
  2. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/GridVisualizerWindow.xaml.cs
  3. 34
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/LazyListView.cs
  4. 8
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/GridValuesProvider.cs
  5. 6
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/ListValuesProvider.cs
  6. 5
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/VirtualizingIEnumerable.cs

27
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoProcess.cs

@ -17,19 +17,9 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -17,19 +17,9 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
{
private System.Diagnostics.Process neatoProcess;
/// <summary>
/// Creates new NeatoProcess.
/// </summary>
/// <param name="neatoProcess">Underlying neato.exe process</param>
private NeatoProcess(System.Diagnostics.Process neatoProcess)
{
this.neatoProcess = neatoProcess;
}
/// <summary>
/// Starts neato.exe
/// </summary>
/// <returns></returns>
public static NeatoProcess Start()
{
System.Diagnostics.Process neatoProcess = new System.Diagnostics.Process();
@ -56,24 +46,33 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -56,24 +46,33 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
return new NeatoProcess(neatoProcess);
}
/// <summary>Creates new NeatoProcess.</summary>
/// <param name="neatoProcess">Underlying neato.exe process</param>
private NeatoProcess(System.Diagnostics.Process neatoProcess)
{
this.neatoProcess = neatoProcess;
}
/// <summary>Gets directory where Debugger.AddIn.dll resides</summary>
private static string getCurrentAssemblyPath()
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
}
private static string getNeatoExePath()
{
return System.IO.Path.Combine(getCurrentAssemblyPath(), "neato.exe");
return Path.Combine(getCurrentAssemblyPath(), "neato.exe");
}
/// <summary>
/// Passes given graph to neato and reads output.
/// </summary>
/// <param name="dotGraph">Graph in Graphviz dot format.</param>
/// <returns>Same graph in Graphviz plain with position information added.</returns>
/// <returns>Same graph in Graphviz plain format with position information added.</returns>
public string CalculatePositions(string dotGraph)
{
/*using (var writer = new StreamWriter("logIn.gv"))
// write the input to neato.exe to a file for testing purposes
/*using (var writer = new StreamWriter(Path.Combine(getCurrentAssemblyPath(), "logIn.gv")))
{
writer.Write(dotGraph);
}*/

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

@ -77,9 +77,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -77,9 +77,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
DebugType iEnumerableType, itemType;
if (val.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType))
{
var lazyListViewWrapper = new LazyListView<ObjectValue>(this.listView);
var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView);
var enumerableValuesProvider = new EnumerableValuesProvider(val.ExpressionTree, iEnumerableType, itemType);
lazyListViewWrapper.ItemsSource = new VirtualizingIEnumerable<ObjectValue>(enumerableValuesProvider.ItemsSource);
lazyListViewWrapper.ItemsSource = enumerableValuesProvider.ItemsSource;
gridValuesProvider = enumerableValuesProvider;
}
else

34
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/LazyListView.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Windows.Controls;
namespace Debugger.AddIn.Visualizers.GridVisualizer
@ -13,22 +14,28 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -13,22 +14,28 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
/// ListView that takes VirtualizingIEnumerable as source,
/// and requests additional items from the source as needed when scrolling.
/// </summary>
public class LazyListView<T>
public class LazyItemsControl<T>
{
private ListView listView;
private ItemsControl itemsControl;
public LazyListView(ListView wrappedListView)
public LazyItemsControl(ItemsControl wrappedItemsControl)
{
if (wrappedListView == null)
if (wrappedItemsControl == null)
throw new ArgumentNullException("wrappedListView");
this.listView = wrappedListView;
this.listView.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(handleListViewScroll));
this.itemsControl = wrappedItemsControl;
this.itemsControl.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(handleListViewScroll));
}
private VirtualizingIEnumerable<T> itemsSource;
public VirtualizingIEnumerable<T> ItemsSource
/// <summary> The collection that underlying ItemsControl sees. </summary>
private VirtualizingIEnumerable<T> itemsSourceVirtualized;
private IEnumerable<T> itemsSource;
/// <summary>
/// IEnumerable providing all the items. LazyItemsControl pulls next items from this source when scrolled to bottom.
/// </summary>
public IEnumerable<T> ItemsSource
{
get
{
@ -37,8 +44,11 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -37,8 +44,11 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
set
{
this.itemsSource = value;
this.itemsSource.RequestNextItems(25);
this.listView.ItemsSource = value;
// virtualize IEnumerable and use it as ItemsControl source
// -> ItemsControl sees only a few items, more are added when scrolled to bottom
this.itemsSourceVirtualized = new VirtualizingIEnumerable<T>(value);
this.itemsSourceVirtualized.AddNextItems(25);
this.itemsControl.ItemsSource = this.itemsSourceVirtualized;
}
}
@ -47,9 +57,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -47,9 +57,9 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
if (e.VerticalChange > 0)
{
// scrolled to bottom
if (e.VerticalOffset == this.itemsSource.Count - e.ViewportHeight)
if (e.VerticalOffset == this.itemsSourceVirtualized.Count - e.ViewportHeight)
{
this.itemsSource.RequestNextItems(1);
this.itemsSourceVirtualized.AddNextItems(1);
}
}
}

8
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/GridVisualizer/ValueProviders/GridValuesProvider.cs

@ -4,13 +4,11 @@ @@ -4,13 +4,11 @@
// <owner name="Martin Koníèek" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using Debugger.MetaData;
using Debugger.AddIn.Visualizers.Utils;
using System;
using System.Collections;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Services;
using Debugger.MetaData;
using ICSharpCode.NRefactory.Ast;
using Debugger.AddIn.Visualizers.Utils;
namespace Debugger.AddIn.Visualizers.GridVisualizer
{
@ -20,7 +18,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -20,7 +18,7 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
/// </summary>
public class GridValuesProvider
{
protected readonly Debugger.MetaData.BindingFlags memberBindingFlags =
protected readonly BindingFlags memberBindingFlags =
BindingFlags.Public | BindingFlags.Instance | BindingFlags.Field | BindingFlags.GetProperty;
/// <summary> Used to quickly find MemberInfo by member name - DebugType.GetMember(name) uses a loop to search members </summary>

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

@ -4,14 +4,12 @@ @@ -4,14 +4,12 @@
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using Debugger.AddIn.Visualizers.Common;
using System;
using System.Collections;
using System.Collections.Generic;
using Debugger.AddIn.Visualizers.Common;
using Debugger.AddIn.Visualizers.Utils;
using Debugger.MetaData;
using ICSharpCode.SharpDevelop.Services;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.SharpDevelop.Services;
namespace Debugger.AddIn.Visualizers.GridVisualizer
{

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

@ -28,7 +28,10 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer @@ -28,7 +28,10 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer
this.originalSourceEnumerator = originalSource.GetEnumerator();
}
public void RequestNextItems(int count)
/// <summary>
/// Requests next <paramref name="count"/> items from underlying IEnumerable source and adds them to the collection.
/// </summary>
public void AddNextItems(int count)
{
for (int i = 0; i < count; i++)
{

Loading…
Cancel
Save