mirror of
https://github.com/BlossomiShymae/Needlework.Net.git
synced 2025-12-06 18:20:47 +01:00
73 lines
2.2 KiB
C#
73 lines
2.2 KiB
C#
using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls.Primitives;
|
|
using Avalonia.Styling;
|
|
using AvaloniaEdit;
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
using Needlework.Net.Desktop.Extensions;
|
|
using Needlework.Net.Desktop.Messages;
|
|
using Needlework.Net.Desktop.ViewModels;
|
|
using System;
|
|
using TextMateSharp.Grammars;
|
|
|
|
namespace Needlework.Net.Desktop.Views;
|
|
|
|
public partial class WebsocketView : UserControl, IRecipient<ResponseUpdatedMessage>
|
|
{
|
|
private TextEditor? _responseEditor;
|
|
public WebsocketViewModel? _viewModel;
|
|
private ListBox? _viewer;
|
|
|
|
public WebsocketView()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void Receive(ResponseUpdatedMessage message)
|
|
{
|
|
_responseEditor!.Text = message.Value;
|
|
}
|
|
|
|
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
|
|
{
|
|
base.OnApplyTemplate(e);
|
|
|
|
_viewModel = (WebsocketViewModel)DataContext!;
|
|
_viewer = this.FindControl<ListBox>("EventViewer");
|
|
_viewModel.EventLog.CollectionChanged += EventLog_CollectionChanged; ;
|
|
|
|
_responseEditor = this.FindControl<TextEditor>("ResponseEditor");
|
|
_responseEditor?.ApplyJsonEditorSettings();
|
|
|
|
WeakReferenceMessenger.Default.Register(this, nameof(WebsocketViewModel));
|
|
|
|
OnBaseThemeChanged(Application.Current!.ActualThemeVariant);
|
|
}
|
|
|
|
private void EventLog_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
|
{
|
|
Avalonia.Threading.Dispatcher.UIThread.Post(async () =>
|
|
{
|
|
if (_viewModel!.IsTail)
|
|
{
|
|
await _viewModel.EventLogLock.WaitAsync();
|
|
try
|
|
{
|
|
_viewer!.ScrollIntoView(_viewModel.EventLog.Count - 1);
|
|
}
|
|
catch (InvalidOperationException) { }
|
|
finally
|
|
{
|
|
_viewModel.EventLogLock.Release();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
private void OnBaseThemeChanged(ThemeVariant currentTheme)
|
|
{
|
|
|
|
var registryOptions = new RegistryOptions(
|
|
currentTheme == ThemeVariant.Dark ? ThemeName.DarkPlus : ThemeName.LightPlus);
|
|
}
|
|
} |