v2rayN/v2rayN/v2rayN.Desktop/Views/SubSettingWindow.axaml.cs

110 lines
3.4 KiB
C#
Raw Normal View History

2025-01-30 09:10:05 +00:00
using System.Reactive.Disposables;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.ReactiveUI;
2024-10-03 09:22:07 +00:00
using DialogHostAvalonia;
using DynamicData;
using MsBox.Avalonia.Enums;
using ReactiveUI;
using v2rayN.Desktop.Common;
namespace v2rayN.Desktop.Views;
public partial class SubSettingWindow : ReactiveWindow<SubSettingViewModel>
{
private bool _manualClose = false;
public SubSettingWindow()
{
InitializeComponent();
menuClose.Click += menuClose_Click;
this.Closing += SubSettingWindow_Closing;
ViewModel = new SubSettingViewModel(UpdateViewHandler);
lstSubscription.DoubleTapped += LstSubscription_DoubleTapped;
lstSubscription.SelectionChanged += LstSubscription_SelectionChanged;
this.WhenActivated(disposables =>
{
this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.lstSubscription.ItemsSource).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedSource, v => v.lstSubscription.SelectedItem).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SubAddCmd, v => v.menuSubAdd).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SubDeleteCmd, v => v.menuSubDelete).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SubEditCmd, v => v.menuSubEdit).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SubShareCmd, v => v.menuSubShare).DisposeWith(disposables);
});
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)
{
switch (action)
{
case EViewAction.CloseWindow:
this.Close();
break;
case EViewAction.ShowYesNo:
if (await UI.ShowYesNo(this, ResUI.RemoveServer) != ButtonResult.Yes)
{
return false;
}
break;
case EViewAction.SubEditWindow:
if (obj is null)
return false;
var window = new SubEditWindow((SubItem)obj);
await window.ShowDialog(this);
break;
case EViewAction.ShareSub:
if (obj is null)
return false;
await ShareSub((string)obj);
break;
}
return await Task.FromResult(true);
}
private async Task ShareSub(string url)
{
if (url.IsNullOrEmpty())
{
return;
}
var dialog = new QrcodeView(url);
await DialogHost.Show(dialog, "dialogHostSub");
}
private void LstSubscription_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
{
ViewModel?.EditSubAsync(false);
}
private void LstSubscription_SelectionChanged(object? sender, SelectionChangedEventArgs e)
{
if (ViewModel != null)
{
ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast<SubItem>().ToList();
}
}
private void menuClose_Click(object? sender, RoutedEventArgs e)
{
_manualClose = true;
this.Close(ViewModel?.IsModified);
}
private void SubSettingWindow_Closing(object? sender, WindowClosingEventArgs e)
{
if (ViewModel?.IsModified == true)
{
if (!_manualClose)
{
menuClose_Click(null, null);
}
}
}
2025-01-30 09:10:05 +00:00
}