mirror of
https://github.com/2dust/v2rayN.git
synced 2026-10-01 03:08:14 +03:00
Introduce a small update-notification feature: add AppEvents.HasUpdateNotified event and have TaskManager publish it when update messages exist. Add localized resource key (menuNewUpdate) and expose it in the ResUI designer; update resource files for several languages. In the UI, add a New Update button in MainWindow.xaml, wire its click to the existing check-update handler, bind its visibility to a new BlNewUpdate property on MainWindowViewModel, and subscribe the viewmodel to the new event. Also reset the notification flag after showing the Check Update dialog.
159 lines
9.7 KiB
XML
159 lines
9.7 KiB
XML
<Window
|
|
x:Class="v2rayN.Desktop.Views.MainWindow"
|
|
xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:dialogHost="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:resx="clr-namespace:ServiceLib.Resx;assembly=ServiceLib"
|
|
xmlns:view="using:v2rayN.Desktop.Views"
|
|
xmlns:vms="clr-namespace:ServiceLib.ViewModels;assembly=ServiceLib"
|
|
Title="v2rayN"
|
|
Width="1200"
|
|
Height="800"
|
|
MinWidth="600"
|
|
x:DataType="vms:MainWindowViewModel"
|
|
Icon="/Assets/NotifyIcon1.ico"
|
|
ShowInTaskbar="True"
|
|
WindowStartupLocation="CenterScreen"
|
|
mc:Ignorable="d">
|
|
<dialogHost:DialogHost
|
|
Background="Gray"
|
|
CloseOnClickAway="True"
|
|
DisableOpeningAnimation="True">
|
|
<DockPanel>
|
|
<DockPanel Margin="{StaticResource Margin8}" DockPanel.Dock="Top">
|
|
<ContentControl x:Name="conTheme" DockPanel.Dock="Right" />
|
|
<Menu Margin="{StaticResource Margin4}">
|
|
<MenuItem Header="{x:Static resx:ResUI.menuServers}">
|
|
<MenuItem
|
|
x:Name="menuAddServerViaClipboard"
|
|
Header="{x:Static resx:ResUI.menuAddServerViaClipboard}"
|
|
InputGesture="Ctrl+V" />
|
|
<MenuItem
|
|
x:Name="menuAddServerViaScan"
|
|
Header="{x:Static resx:ResUI.menuAddServerViaScan}"
|
|
InputGesture="Ctrl+S" />
|
|
<MenuItem x:Name="menuAddServerViaImage" Header="{x:Static resx:ResUI.menuAddServerViaImage}" />
|
|
<MenuItem x:Name="menuAddCustomServer" Header="{x:Static resx:ResUI.menuAddCustomServer}" />
|
|
<MenuItem x:Name="menuAddPolicyGroupServer" Header="{x:Static resx:ResUI.menuAddPolicyGroupServer}" />
|
|
<MenuItem x:Name="menuAddProxyChainServer" Header="{x:Static resx:ResUI.menuAddProxyChainServer}" />
|
|
<Separator />
|
|
<MenuItem x:Name="menuAddVmessServer" Header="{x:Static resx:ResUI.menuAddVmessServer}" />
|
|
<MenuItem x:Name="menuAddVlessServer" Header="{x:Static resx:ResUI.menuAddVlessServer}" />
|
|
<MenuItem x:Name="menuAddShadowsocksServer" Header="{x:Static resx:ResUI.menuAddShadowsocksServer}" />
|
|
<MenuItem x:Name="menuAddTrojanServer" Header="{x:Static resx:ResUI.menuAddTrojanServer}" />
|
|
<MenuItem x:Name="menuAddHysteria2Server" Header="{x:Static resx:ResUI.menuAddHysteria2Server}" />
|
|
<MenuItem x:Name="menuAddWireguardServer" Header="{x:Static resx:ResUI.menuAddWireguardServer}" />
|
|
<MenuItem x:Name="menuAddSocksServer" Header="{x:Static resx:ResUI.menuAddSocksServer}" />
|
|
<MenuItem x:Name="menuAddHttpServer" Header="{x:Static resx:ResUI.menuAddHttpServer}" />
|
|
<Separator />
|
|
<MenuItem x:Name="menuAddTuicServer" Header="{x:Static resx:ResUI.menuAddTuicServer}" />
|
|
<MenuItem x:Name="menuAddAnytlsServer" Header="{x:Static resx:ResUI.menuAddAnytlsServer}" />
|
|
<MenuItem x:Name="menuAddNaiveServer" Header="{x:Static resx:ResUI.menuAddNaiveServer}" />
|
|
</MenuItem>
|
|
|
|
<MenuItem Header="{x:Static resx:ResUI.menuSubscription}">
|
|
<MenuItem x:Name="menuSubSetting" Header="{x:Static resx:ResUI.menuSubSetting}" />
|
|
<Separator />
|
|
<MenuItem x:Name="menuSubUpdate" Header="{x:Static resx:ResUI.menuSubUpdate}" />
|
|
<MenuItem x:Name="menuSubUpdateViaProxy" Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" />
|
|
<MenuItem x:Name="menuSubGroupUpdate" Header="{x:Static resx:ResUI.menuSubGroupUpdate}" />
|
|
<MenuItem x:Name="menuSubGroupUpdateViaProxy" Header="{x:Static resx:ResUI.menuSubGroupUpdateViaProxy}" />
|
|
</MenuItem>
|
|
|
|
<MenuItem Header="{x:Static resx:ResUI.menuSetting}">
|
|
<MenuItem x:Name="menuOptionSetting" Header="{x:Static resx:ResUI.menuOptionSetting}" />
|
|
<MenuItem x:Name="menuRoutingSetting" Header="{x:Static resx:ResUI.menuRoutingSetting}" />
|
|
<MenuItem x:Name="menuDNSSetting" Header="{x:Static resx:ResUI.menuDNSSetting}" />
|
|
<MenuItem x:Name="menuFullConfigTemplate" Header="{x:Static resx:ResUI.menuFullConfigTemplate}" />
|
|
<MenuItem
|
|
x:Name="menuGlobalHotkeySetting"
|
|
Header="{x:Static resx:ResUI.menuGlobalHotkeySetting}"
|
|
IsVisible="{Binding BlIsWindows}" />
|
|
<Separator />
|
|
<MenuItem
|
|
x:Name="menuRebootAsAdmin"
|
|
Header="{x:Static resx:ResUI.menuRebootAsAdmin}"
|
|
IsVisible="{Binding BlIsWindows}" />
|
|
<MenuItem
|
|
x:Name="menuSettingsSetUWP"
|
|
Header="{x:Static resx:ResUI.TbSettingsSetUWP}"
|
|
IsVisible="{Binding BlIsWindows}" />
|
|
<MenuItem x:Name="menuClearServerStatistics" Header="{x:Static resx:ResUI.menuClearServerStatistics}" />
|
|
<Separator />
|
|
<MenuItem Header="{x:Static resx:ResUI.menuRegionalPresets}">
|
|
<MenuItem x:Name="menuRegionalPresetsDefault" Header="{x:Static resx:ResUI.menuRegionalPresetsDefault}" />
|
|
<MenuItem x:Name="menuRegionalPresetsRussia" Header="{x:Static resx:ResUI.menuRegionalPresetsRussia}" />
|
|
<MenuItem x:Name="menuRegionalPresetsIran" Header="{x:Static resx:ResUI.menuRegionalPresetsIran}" />
|
|
</MenuItem>
|
|
<MenuItem x:Name="menuBackupAndRestore" Header="{x:Static resx:ResUI.menuBackupAndRestore}" />
|
|
<MenuItem x:Name="menuOpenTheFileLocation" Header="{x:Static resx:ResUI.menuOpenTheFileLocation}" />
|
|
</MenuItem>
|
|
|
|
<MenuItem x:Name="menuHelp" Header="{x:Static resx:ResUI.menuHelp}">
|
|
<MenuItem x:Name="menuCheckUpdate" Header="{x:Static resx:ResUI.menuCheckUpdate}" />
|
|
<Separator />
|
|
</MenuItem>
|
|
|
|
<MenuItem x:Name="menuReload" Header="{x:Static resx:ResUI.menuReload}" />
|
|
|
|
<MenuItem x:Name="menuPromotion" Header="{x:Static resx:ResUI.menuPromotion}" />
|
|
|
|
<MenuItem x:Name="menuClose" Header="{x:Static resx:ResUI.menuExit}" />
|
|
</Menu>
|
|
|
|
<Button
|
|
x:Name="btnNewUpdate"
|
|
Margin="{StaticResource MarginLr8}"
|
|
HorizontalAlignment="Left"
|
|
Content="{x:Static resx:ResUI.menuNewUpdate}"
|
|
IsVisible="False" />
|
|
</DockPanel>
|
|
|
|
<view:StatusBarView DockPanel.Dock="Bottom" />
|
|
|
|
<Grid>
|
|
<Grid
|
|
x:Name="gridMain"
|
|
ColumnDefinitions="1*,10,1*"
|
|
IsVisible="False">
|
|
<ContentControl x:Name="tabProfiles" Grid.Column="0" />
|
|
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
|
|
<TabControl
|
|
x:Name="tabMain"
|
|
Grid.Column="2"
|
|
HorizontalContentAlignment="Left">
|
|
<TabItem x:Name="tabMsgView" Header="{x:Static resx:ResUI.MsgInformationTitle}" />
|
|
<TabItem x:Name="tabClashProxies" Header="{x:Static resx:ResUI.TbProxies}" />
|
|
<TabItem x:Name="tabClashConnections" Header="{x:Static resx:ResUI.TbConnections}" />
|
|
</TabControl>
|
|
</Grid>
|
|
<Grid
|
|
x:Name="gridMain1"
|
|
IsVisible="False"
|
|
RowDefinitions="1*,10,1*">
|
|
<ContentControl x:Name="tabProfiles1" Grid.Row="0" />
|
|
<GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" />
|
|
<TabControl
|
|
x:Name="tabMain1"
|
|
Grid.Row="2"
|
|
TabStripPlacement="Left">
|
|
<TabItem x:Name="tabMsgView1" Header="{x:Static resx:ResUI.MsgInformationTitle}" />
|
|
<TabItem x:Name="tabClashProxies1" Header="{x:Static resx:ResUI.TbProxies}" />
|
|
<TabItem x:Name="tabClashConnections1" Header="{x:Static resx:ResUI.TbConnections}" />
|
|
</TabControl>
|
|
</Grid>
|
|
<Grid x:Name="gridMain2" IsVisible="False">
|
|
<TabControl x:Name="tabMain2" TabStripPlacement="Left">
|
|
<TabItem x:Name="tabProfiles2" Header="{x:Static resx:ResUI.menuServers}" />
|
|
<TabItem x:Name="tabMsgView2" Header="{x:Static resx:ResUI.MsgInformationTitle}" />
|
|
<TabItem x:Name="tabClashProxies2" Header="{x:Static resx:ResUI.TbProxies}" />
|
|
<TabItem x:Name="tabClashConnections2" Header="{x:Static resx:ResUI.TbConnections}" />
|
|
</TabControl>
|
|
</Grid>
|
|
</Grid>
|
|
</DockPanel>
|
|
</dialogHost:DialogHost>
|
|
</Window>
|