feat(ui): replace LiveLines with formatted LiveText, add log reload and start feedback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Mika Kuns
2026-04-14 16:28:12 +02:00
parent 503fd69cd1
commit 0764bb30ab
3 changed files with 71 additions and 18 deletions

View File

@@ -107,17 +107,19 @@
<TextBlock Text="Live Output" FontWeight="SemiBold" FontSize="12"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,8,0,2"/>
<Border BorderBrush="{StaticResource BorderSubtleBrush}" BorderThickness="1"
CornerRadius="6" Padding="6" MaxHeight="200">
<ScrollViewer>
<ItemsControl ItemsSource="{Binding LiveLines}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontFamily="Consolas,Courier New,monospace"
FontSize="11" TextWrapping="NoWrap"
Foreground="{StaticResource TextPrimaryBrush}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
CornerRadius="6" Padding="6" MaxHeight="300">
<ScrollViewer x:Name="LiveOutputScroll">
<TextBox x:Name="LiveOutputBox"
Text="{Binding LiveText, Mode=OneWay}"
IsReadOnly="True"
AcceptsReturn="True"
TextWrapping="NoWrap"
FontFamily="Consolas,Courier New,monospace"
FontSize="11"
Foreground="{StaticResource TextPrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Padding="0"/>
</ScrollViewer>
</Border>

View File

@@ -1,3 +1,4 @@
using System.ComponentModel;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
@@ -31,4 +32,22 @@ public partial class TaskDetailView : UserControl
{
this.FindControl<TextBox>("TitleBox")?.Focus();
}
protected override void OnDataContextChanged(EventArgs e)
{
base.OnDataContextChanged(e);
if (DataContext is TaskDetailViewModel vm)
{
vm.PropertyChanged += OnViewModelPropertyChanged;
}
}
private void OnViewModelPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(TaskDetailViewModel.LiveText))
{
var scroll = this.FindControl<ScrollViewer>("LiveOutputScroll");
scroll?.ScrollToEnd();
}
}
}