From 2698137dead0dd8507063acceddb52aaae109f74 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:28:10 +0800 Subject: [PATCH] Improved UI https://github.com/2dust/v2rayN/issues/5814 --- .../ViewModels/MainWindowViewModel.cs | 2 +- .../ViewModels/StatusBarViewModel.cs | 17 +--- .../v2rayN.Desktop/Views/MainWindow.axaml.cs | 84 ++++++++++--------- v2rayN/v2rayN/Views/MainWindow.xaml.cs | 84 ++++++++++--------- 4 files changed, 97 insertions(+), 90 deletions(-) diff --git a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs index 8ccb9033..a691647e 100644 --- a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs @@ -414,7 +414,7 @@ namespace ServiceLib.ViewModels var ret = await _updateView?.Invoke(EViewAction.OptionSettingWindow, null); if (ret == true) { - Locator.Current.GetService()?.InboundDisplayStaus(); + Locator.Current.GetService()?.InboundDisplayStatus(); Reload(); } } diff --git a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index eba1ce1e..a93500bc 100644 --- a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -106,12 +106,10 @@ namespace ServiceLib.ViewModels public StatusBarViewModel(Func>? updateView) { _config = AppHandler.Instance.Config; - _updateView = updateView; - if (_updateView != null) + if (updateView != null) { - MessageBus.Current.Listen(EMsgCommand.RefreshProfiles.ToString()) - .Subscribe(async x => await _updateView?.Invoke(EViewAction.DispatcherRefreshServersBiz, null)); + Init(updateView); } SelectedRouting = new(); @@ -127,7 +125,7 @@ namespace ServiceLib.ViewModels } RefreshRoutingsMenu(); - InboundDisplayStaus(); + InboundDisplayStatus(); ChangeSystemProxyAsync(_config.systemProxyItem.sysProxyType, true); #region WhenAnyValue && ReactiveCommand @@ -426,19 +424,12 @@ namespace ServiceLib.ViewModels #region UI - public void InboundDisplayStaus() + public void InboundDisplayStatus() { StringBuilder sb = new(); sb.Append($"[{EInboundProtocol.socks}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks)}]"); sb.Append(" | "); - //if (_config.systemProxyItem.sysProxyType == ESysProxyType.ForcedChange) - //{ - // sb.Append($"[{Global.InboundHttp}({ResUI.SystemProxy}):{LazyConfig.Instance.GetLocalPort(Global.InboundHttp)}]"); - //} - //else - //{ sb.Append($"[{EInboundProtocol.http}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.http)}]"); - //} InboundDisplay = $"{ResUI.LabLocal}:{sb}"; if (_config.inbound[0].allowLANConn) diff --git a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index 17810f94..f4fd21c5 100644 --- a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -80,26 +80,31 @@ namespace v2rayN.Desktop.Views this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); - if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal) - { - gridMain.IsVisible = true; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies.IsVisible).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections.IsVisible).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain.SelectedIndex).DisposeWith(disposables); - } - else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical) - { - gridMain1.IsVisible = true; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies1.IsVisible).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections1.IsVisible).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain1.SelectedIndex).DisposeWith(disposables); - } - else + switch (_config.uiItem.mainGirdOrientation) { - gridMain2.IsVisible = true; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies2.IsVisible).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections2.IsVisible).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain2.SelectedIndex).DisposeWith(disposables); + case EGirdOrientation.Horizontal: + gridMain.IsVisible = true; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabMsgView.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections.IsVisible).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain.SelectedIndex).DisposeWith(disposables); + break; + + case EGirdOrientation.Vertical: + gridMain1.IsVisible = true; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabMsgView1.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies1.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections1.IsVisible).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain1.SelectedIndex).DisposeWith(disposables); + break; + + case EGirdOrientation.Tab: + default: + gridMain2.IsVisible = true; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies2.IsVisible).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections2.IsVisible).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain2.SelectedIndex).DisposeWith(disposables); + break; } }); @@ -115,26 +120,29 @@ namespace v2rayN.Desktop.Views menuGlobalHotkeySetting.IsVisible = false; } - if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal) + switch (_config.uiItem.mainGirdOrientation) { - tabProfiles.Content ??= new ProfilesView(this); - tabMsgView.Content ??= new MsgView(); - tabClashProxies.Content ??= new ClashProxiesView(); - tabClashConnections.Content ??= new ClashConnectionsView(); - } - else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical) - { - tabProfiles1.Content ??= new ProfilesView(this); - tabMsgView1.Content ??= new MsgView(); - tabClashProxies1.Content ??= new ClashProxiesView(); - tabClashConnections1.Content ??= new ClashConnectionsView(); - } - else - { - tabProfiles2.Content ??= new ProfilesView(this); - tabMsgView2.Content ??= new MsgView(); - tabClashProxies2.Content ??= new ClashProxiesView(); - tabClashConnections2.Content ??= new ClashConnectionsView(); + case EGirdOrientation.Horizontal: + tabProfiles.Content ??= new ProfilesView(this); + tabMsgView.Content ??= new MsgView(); + tabClashProxies.Content ??= new ClashProxiesView(); + tabClashConnections.Content ??= new ClashConnectionsView(); + break; + + case EGirdOrientation.Vertical: + tabProfiles1.Content ??= new ProfilesView(this); + tabMsgView1.Content ??= new MsgView(); + tabClashProxies1.Content ??= new ClashProxiesView(); + tabClashConnections1.Content ??= new ClashConnectionsView(); + break; + + case EGirdOrientation.Tab: + default: + tabProfiles2.Content ??= new ProfilesView(this); + tabMsgView2.Content ??= new MsgView(); + tabClashProxies2.Content ??= new ClashProxiesView(); + tabClashConnections2.Content ??= new ClashConnectionsView(); + break; } conTheme.Content ??= new ThemeSettingView(); diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index 2f45c2e3..9530df9c 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -41,26 +41,29 @@ namespace v2rayN.Views Locator.CurrentMutable.RegisterLazySingleton(() => ViewModel, typeof(MainWindowViewModel)); WindowsHandler.Instance.RegisterGlobalHotkey(_config, OnHotkeyHandler, null); - if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal) - { - tabProfiles.Content ??= new ProfilesView(); - tabMsgView.Content ??= new MsgView(); - tabClashProxies.Content ??= new ClashProxiesView(); - tabClashConnections.Content ??= new ClashConnectionsView(); - } - else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical) - { - tabProfiles1.Content ??= new ProfilesView(); - tabMsgView1.Content ??= new MsgView(); - tabClashProxies1.Content ??= new ClashProxiesView(); - tabClashConnections1.Content ??= new ClashConnectionsView(); - } - else + switch (_config.uiItem.mainGirdOrientation) { - tabProfiles2.Content ??= new ProfilesView(); - tabMsgView2.Content ??= new MsgView(); - tabClashProxies2.Content ??= new ClashProxiesView(); - tabClashConnections2.Content ??= new ClashConnectionsView(); + case EGirdOrientation.Horizontal: + tabProfiles.Content ??= new ProfilesView(); + tabMsgView.Content ??= new MsgView(); + tabClashProxies.Content ??= new ClashProxiesView(); + tabClashConnections.Content ??= new ClashConnectionsView(); + break; + + case EGirdOrientation.Vertical: + tabProfiles1.Content ??= new ProfilesView(); + tabMsgView1.Content ??= new MsgView(); + tabClashProxies1.Content ??= new ClashProxiesView(); + tabClashConnections1.Content ??= new ClashConnectionsView(); + break; + + case EGirdOrientation.Tab: + default: + tabProfiles2.Content ??= new ProfilesView(); + tabMsgView2.Content ??= new MsgView(); + tabClashProxies2.Content ??= new ClashProxiesView(); + tabClashConnections2.Content ??= new ClashConnectionsView(); + break; } pbTheme.Content ??= new ThemeSettingView(); @@ -99,26 +102,31 @@ namespace v2rayN.Views this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); - if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Horizontal) - { - gridMain.Visibility = Visibility.Visible; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies.Visibility).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections.Visibility).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain.SelectedIndex).DisposeWith(disposables); - } - else if (_config.uiItem.mainGirdOrientation == EGirdOrientation.Vertical) - { - gridMain1.Visibility = Visibility.Visible; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies1.Visibility).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections1.Visibility).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain1.SelectedIndex).DisposeWith(disposables); - } - else + switch (_config.uiItem.mainGirdOrientation) { - gridMain2.Visibility = Visibility.Visible; - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies2.Visibility).DisposeWith(disposables); - this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections2.Visibility).DisposeWith(disposables); - this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain2.SelectedIndex).DisposeWith(disposables); + case EGirdOrientation.Horizontal: + gridMain.Visibility = Visibility.Visible; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabMsgView.Visibility).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies.Visibility).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections.Visibility).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain.SelectedIndex).DisposeWith(disposables); + break; + + case EGirdOrientation.Vertical: + gridMain1.Visibility = Visibility.Visible; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabMsgView1.Visibility).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies1.Visibility).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections1.Visibility).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain1.SelectedIndex).DisposeWith(disposables); + break; + + case EGirdOrientation.Tab: + default: + gridMain2.Visibility = Visibility.Visible; + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashProxies2.Visibility).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.ShowClashUI, v => v.tabClashConnections2.Visibility).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.TabMainSelectedIndex, v => v.tabMain2.SelectedIndex).DisposeWith(disposables); + break; } });