Add auto-scroll to interpreter log view

This commit is contained in:
Yoshi Askharoun
2023-06-05 23:33:48 -05:00
parent 474172326e
commit ab7325564f
3 changed files with 54 additions and 28 deletions
@@ -8,26 +8,35 @@
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance local:UIBDisassemblyViewModel}">
<DataGrid x:Name="InstructionListView" x:FieldModifier="public" IsReadOnly="True" AutoGenerateColumns="False"
ItemsSource="{Binding Instructions}" SelectionChanged="InstructionListView_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="Source" Binding="{Binding LoadUri}"/>
<DataGridTextColumn Header="Offset" Binding="{Binding Path=Offset, StringFormat=0x{0:X}}"/>
<DataGridTextColumn Header="OpCode" Binding="{Binding OpCode}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate DataType="uixDebugData:InterpreterEntry">
<Border Padding="8">
<StackPanel Orientation="Vertical">
<TextBlock Text="Parameters:"/>
<ItemsControl ItemsSource="{Binding Parameters}"/>
<Border Height="1" Background="Gray" Margin="0,8"/>
<TextBlock Text="Return values:"/>
<ItemsControl ItemsSource="{Binding ReturnValues}"/>
</StackPanel>
</Border>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox Content="Auto-scroll" IsChecked="{Binding AutoScroll}" Padding="4"/>
<DataGrid x:Name="InstructionListView" IsReadOnly="True" AutoGenerateColumns="False"
ItemsSource="{Binding Instructions}" SelectionChanged="InstructionListView_SelectionChanged"
Grid.Row="1">
<DataGrid.Columns>
<DataGridTextColumn Header="Source" Binding="{Binding LoadUri}"/>
<DataGridTextColumn Header="Instruction" Binding="{Binding InstructionString}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate DataType="uixDebugData:InterpreterEntry">
<Border Padding="8">
<StackPanel Orientation="Vertical">
<TextBlock Text="Parameters:"/>
<ItemsControl ItemsSource="{Binding Parameters}"/>
<Border Height="1" Background="Gray" Margin="0,8"/>
<TextBlock Text="Return values:"/>
<ItemsControl ItemsSource="{Binding ReturnValues}"/>
</StackPanel>
</Border>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
</UserControl>
@@ -1,4 +1,6 @@
using Microsoft.Iris.Debug.Data;
using MahApps.Metro.Controls;
using Microsoft.Iris.Debug.Data;
using System.Windows;
using System.Windows.Controls;
namespace ZuneUIXTools.Modules.UIXCompiled
@@ -13,6 +15,20 @@ namespace ZuneUIXTools.Modules.UIXCompiled
public UIBDisassemblyView()
{
InitializeComponent();
InstructionListView.Loaded += InstructionListView_Loaded;
}
private void InstructionListView_Loaded(object sender, RoutedEventArgs e)
{
InstructionListView.Loaded -= InstructionListView_Loaded;
InstructionListView.FindChild<ScrollViewer>().ScrollChanged += InstructionListView_ScrollChanged;
}
private void InstructionListView_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (ViewModel.AutoScroll && e.ExtentHeightChange != 0)
((ScrollViewer)sender).ScrollToBottom();
}
private void InstructionListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
@@ -6,16 +6,10 @@ using Gemini.Modules.Inspector.Conventions;
using Gemini.Modules.Inspector.Inspectors;
using Microsoft.Iris.Debug.Data;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Windows.Threading;
using WpfHexaEditor.Core.MethodExtention;
using ZuneUIXTools.Converters;
using ZuneUIXTools.Modules.Inspectors;
using ZuneUIXTools.Modules.UIX;
@@ -28,9 +22,16 @@ public class UIBDisassemblyViewModel : Document
readonly DebuggerService _debuggerService;
readonly IShell _shell;
UIBDisassemblyView _view;
bool _autoScroll;
public ObservableCollection<InterpreterEntry> Instructions { get; } = new();
public bool AutoScroll
{
get => _autoScroll;
set => Set(ref _autoScroll, value);
}
[ImportingConstructor]
public UIBDisassemblyViewModel(DebuggerService debuggerService, IShell shell)
{