-
Notifications
You must be signed in to change notification settings - Fork 821
Expand file tree
/
Copy pathOperationOutputWindow.axaml.cs
More file actions
55 lines (48 loc) · 1.6 KB
/
OperationOutputWindow.axaml.cs
File metadata and controls
55 lines (48 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System.Collections.Specialized;
using Avalonia.Controls;
using Avalonia.Controls.Documents;
using Avalonia.Threading;
using UniGetUI.Avalonia.ViewModels.DialogPages;
using UniGetUI.Avalonia.ViewModels.Pages.LogPages;
using UniGetUI.PackageOperations;
namespace UniGetUI.Avalonia.Views.DialogPages;
public partial class OperationOutputWindow : Window
{
public OperationOutputWindow(AbstractOperation operation)
{
var vm = new OperationOutputViewModel(operation);
DataContext = vm;
InitializeComponent();
foreach (var line in vm.OutputLines)
AppendLine(line);
vm.OutputLines.CollectionChanged += OnOutputLinesChanged;
}
private void OnOutputLinesChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
Dispatcher.UIThread.Post(() =>
{
if (e.Action == NotifyCollectionChangedAction.Reset)
{
OutputText.Inlines?.Clear();
}
else if (e.NewItems is not null)
{
foreach (LogLineItem item in e.NewItems)
AppendLine(item);
}
OutputScroll.ScrollToEnd();
}, DispatcherPriority.Background);
}
private void AppendLine(LogLineItem line)
{
var inlines = OutputText.Inlines ??= new InlineCollection();
if (inlines.Count > 0)
inlines.Add(new LineBreak());
inlines.Add(new Run(line.Text) { Foreground = line.Foreground });
}
protected override void OnOpened(EventArgs e)
{
base.OnOpened(e);
OutputScroll.ScrollToEnd();
}
}