MainPage.xaml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <Page
  2. x:Class="Maple_App.MainPage"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  7. xmlns:maple_app="using:Maple_App"
  8. xmlns:pickers="using:Windows.Storage.Pickers"
  9. xmlns:Windows10FallCreatorsUpdate="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5)"
  10. xmlns:Windows10version1809="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)"
  11. xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
  12. mc:Ignorable="d"
  13. NavigationCacheMode="Required"
  14. Loaded="Page_Loaded">
  15. <Page.Resources>
  16. <maple_app:DateTimeConverter x:Key="DateTimeConverter"/>
  17. <pickers:FileOpenPicker x:Key="ImportFilePicker" x:Name="ImportFilePicker"/>
  18. </Page.Resources>
  19. <Grid>
  20. <Grid.RowDefinitions>
  21. <RowDefinition Height="Auto" />
  22. <RowDefinition />
  23. </Grid.RowDefinitions>
  24. <Grid.ColumnDefinitions>
  25. <ColumnDefinition x:Name="LeftPaddingColumn" Width="0"/>
  26. <ColumnDefinition />
  27. <ColumnDefinition x:Name="RightPaddingColumn" Width="0"/>
  28. </Grid.ColumnDefinitions>
  29. <Grid Grid.Column="1" x:Name="CustomTitleBar" Height="32" Background="Transparent">
  30. <TextBlock
  31. x:Name="AppTitleTextBlock"
  32. Text="Maple"
  33. VerticalAlignment="Center"
  34. FontSize="13"
  35. Margin="12, 0, 0, 0"/>
  36. </Grid>
  37. <Grid
  38. x:Name="ConnectionToggleSwitchContainer"
  39. Grid.Column="1"
  40. HorizontalAlignment="Right"
  41. VerticalAlignment="Center"
  42. Background="Transparent">
  43. <ToolTipService.ToolTip>
  44. <ToolTip x:Name="NoProfileToggleTooltip">
  45. Maple VPN profile is not ready. Please check Setting page for more information.
  46. </ToolTip>
  47. </ToolTipService.ToolTip>
  48. <ToggleSwitch x:Name="ConnectionToggleSwitch" IsEnabled="False">
  49. <ToggleSwitch.RenderTransform>
  50. <CompositeTransform ScaleX=".8" ScaleY=".8" TranslateX="90" TranslateY="3" />
  51. </ToggleSwitch.RenderTransform>
  52. </ToggleSwitch>
  53. </Grid>
  54. <SplitView
  55. x:Name="MainSplitView"
  56. RequestedTheme="Light"
  57. Grid.Row="1"
  58. Grid.ColumnSpan="3"
  59. DisplayMode="Overlay"
  60. PaneClosing="MainSplitView_PaneClosing"
  61. Background="White">
  62. <SplitView.Pane>
  63. <Pivot x:Name="MainPivot" PivotItemLoaded="MainPivot_PivotItemLoaded">
  64. <PivotItem Header="Config" Margin="0">
  65. <Grid>
  66. <Grid.RowDefinitions>
  67. <RowDefinition Height="*"/>
  68. <RowDefinition Height="Auto"/>
  69. </Grid.RowDefinitions>
  70. <ListView
  71. x:Name="ConfigListView"
  72. Grid.Row="0"
  73. SelectionMode="Single"
  74. CanDragItems="True"
  75. AllowDrop="True"
  76. ItemsSource="{x:Bind ConfigItems, Mode=OneWay}"
  77. SelectionChanged="ConfigListView_SelectionChanged"
  78. DragItemsStarting="ConfigListView_DragItemsStarting"
  79. DragOver="ConfigListView_DragOver"
  80. Drop="ConfigListView_Drop">
  81. <ListView.ItemContainerStyle>
  82. <Style TargetType="ListViewItem">
  83. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
  84. </Style>
  85. </ListView.ItemContainerStyle>
  86. <ListView.Resources>
  87. <MenuFlyout x:Key="ItemContextFlyout">
  88. <MenuFlyoutItem Icon="Favorite" Text="Set as Default" Click="ConfigSetAsDefaultMenuItem_Click"/>
  89. <MenuFlyoutItem Icon="Copy" Text="Duplicate" Click="ConfigDuplicateMenuItem_Click"/>
  90. <MenuFlyoutItem Icon="Rename" Text="Rename" Click="ConfigRenameMenuItem_Click">
  91. <Windows10FallCreatorsUpdate:MenuFlyoutItem.KeyboardAccelerators>
  92. <Windows10FallCreatorsUpdate:KeyboardAccelerator Key="F2" ScopeOwner="{x:Bind ConfigListView}"/>
  93. </Windows10FallCreatorsUpdate:MenuFlyoutItem.KeyboardAccelerators>
  94. </MenuFlyoutItem>
  95. <MenuFlyoutItem Icon="Delete" Text="Delete" Click="ConfigDeleteMenuItem_Click">
  96. <MenuFlyoutItem.Command>
  97. <Windows10version1809:StandardUICommand Kind="Delete"/>
  98. </MenuFlyoutItem.Command>
  99. </MenuFlyoutItem>
  100. </MenuFlyout>
  101. <SolidColorBrush x:Key="ListViewItemForegroundSelected" Color="Black" />
  102. <SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="{StaticResource SystemAccentColorLight3}" />
  103. <SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="{StaticResource SystemAccentColorLight3}" Opacity=".6" />
  104. <SolidColorBrush x:Key="ListViewItemBackgroundSelectedPressed" Color="{StaticResource SystemAccentColorLight3}" Opacity=".8" />
  105. </ListView.Resources>
  106. <ListView.ItemTemplate>
  107. <DataTemplate x:DataType="maple_app:ConfigViewModel">
  108. <Grid
  109. HorizontalAlignment="Stretch"
  110. VerticalAlignment="Stretch"
  111. ContextFlyout="{StaticResource ItemContextFlyout}"
  112. DoubleTapped="ConfigItem_DoubleTapped">
  113. <Grid.RowDefinitions>
  114. <RowDefinition Height="Auto"/>
  115. <RowDefinition Height="Auto"/>
  116. </Grid.RowDefinitions>
  117. <Grid.ColumnDefinitions>
  118. <ColumnDefinition Width="0"/>
  119. <ColumnDefinition Width="*"/>
  120. </Grid.ColumnDefinitions>
  121. <Rectangle
  122. Grid.Row="0"
  123. Grid.RowSpan="2"
  124. Grid.Column="0"
  125. Margin="-12, 6, 4, 6"
  126. Fill="{ThemeResource SystemAccentColor}"
  127. Visibility="{x:Bind IsDefault, Mode=OneWay}"/>
  128. <TextBlock
  129. Grid.Row="0"
  130. Grid.Column="1"
  131. Text="{x:Bind Name, Mode=OneWay}"/>
  132. <TextBlock
  133. Grid.Row="1"
  134. Grid.Column="1"
  135. Text="{x:Bind DateUpdated, Mode=OneWay, Converter={StaticResource DateTimeConverter}}"
  136. Style="{ThemeResource CaptionTextBlockStyle}"
  137. Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"/>
  138. </Grid>
  139. </DataTemplate>
  140. </ListView.ItemTemplate>
  141. </ListView>
  142. <CommandBar Grid.Row="1">
  143. <AppBarButton Icon="Add" Label="Add">
  144. <AppBarButton.Flyout>
  145. <MenuFlyout Placement="Top">
  146. <MenuFlyoutItem Text="Conf" Click="ConfigCreateMenuItem_Click"/>
  147. <MenuFlyoutItem Text="JSON" Click="ConfigCreateMenuItem_Click"/>
  148. <MenuFlyoutItem Text="Minimal" Click="ConfigCreateMenuItem_Click"/>
  149. <MenuFlyoutSeparator/>
  150. <MenuFlyoutItem Text="Import…" Click="ConfigImportMenuItem_Click"/>
  151. </MenuFlyout>
  152. </AppBarButton.Flyout>
  153. </AppBarButton>
  154. </CommandBar>
  155. <ContentDialog
  156. x:Name="RenameDialog"
  157. Height="10"
  158. Title="Specify a new file name"
  159. PrimaryButtonText="Rename"
  160. SecondaryButtonText="Close"
  161. PrimaryButtonClick="RenameDialogPrimaryButton_Click">
  162. <ContentDialog.SecondaryButtonCommand>
  163. <Windows10version1809:StandardUICommand Kind="Close"/>
  164. </ContentDialog.SecondaryButtonCommand>
  165. <TextBox
  166. x:Name="RenameDialogText"
  167. MaxLength="100"
  168. Height="32"
  169. AcceptsReturn="False"
  170. TextWrapping="NoWrap"
  171. KeyDown="RenameDialogText_KeyDown"/>
  172. </ContentDialog>
  173. </Grid>
  174. </PivotItem>
  175. <PivotItem Header="Setting">
  176. <ScrollViewer>
  177. <StackPanel>
  178. <TextBlock Margin="0, 18" Text="Network Interface" Style="{ThemeResource TitleTextBlockStyle}"/>
  179. <TextBlock
  180. Text="Choose a default network interface for DNS and outbound connections"
  181. TextWrapping="WrapWholeWords"/>
  182. <ComboBox
  183. x:Name="NetifCombobox"
  184. HorizontalAlignment="Stretch"
  185. Margin="0, 8"
  186. DisplayMemberPath="Desc"
  187. SelectedValuePath="Addr"
  188. SelectionChanged="NetifCombobox_SelectionChanged"/>
  189. <TextBlock Margin="0, 18" Text="VPN Connection" Style="{ThemeResource TitleTextBlockStyle}"/>
  190. <TextBlock Margin="0, 0, 0, 18" TextWrapping="WrapWholeWords">
  191. <Run Text="Connect to Maple in the"/>
  192. <Hyperlink TextDecorations="None" NavigateUri="ms-settings:network-vpn">
  193. <Run Text="Windows Settings"/>
  194. </Hyperlink>
  195. <Run Text="app."/>
  196. </TextBlock>
  197. <TextBlock
  198. Margin="0, 0, 0, 8"
  199. Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
  200. TextWrapping="WrapWholeWords">
  201. <Run Text="For first time connection, create a VPN profile with provider"/>
  202. <Run FontFamily="Consolas" Text="Maple"/>
  203. <Run Text="and server name"/>
  204. <Run FontFamily="Consolas" Text="maple"/>
  205. <Run Text=". Alternatively, select &quot;Generate Profile&quot; to create one automatically (not recommended)."/>
  206. </TextBlock>
  207. <Button Content="Generate Profile" Click="GenerateProfileButton_Click"/>
  208. <TextBlock Margin="0, 18" Text="About" Style="{ThemeResource TitleTextBlockStyle}"/>
  209. <HyperlinkButton Padding="0" Content="Homepage" NavigateUri="https://github.com/YtFlow/Maple"/>
  210. <HyperlinkButton Padding="0" Content="Report Issues" NavigateUri="https://github.com/YtFlow/Maple/issues"/>
  211. <HyperlinkButton Padding="0" Content="License" NavigateUri="https://github.com/YtFlow/Maple/blob/main/LICENSE"/>
  212. <TextBlock Margin="0, 20, 0, 0" TextWrapping="WrapWholeWords">
  213. <Run>This product contains a</Run>
  214. <Hyperlink NavigateUri="https://github.com/YtFlow/leaf" TextDecorations="None">
  215. <Run>modified version</Run>
  216. </Hyperlink>
  217. <Run>of</Run>
  218. <Hyperlink NavigateUri="https://github.com/eycorsican/leaf" TextDecorations="None">
  219. <Run>eycorsican/leaf</Run>
  220. </Hyperlink>
  221. <Run>under</Run>
  222. <Hyperlink NavigateUri="https://github.com/eycorsican/leaf/blob/master/LICENSE" TextDecorations="None">
  223. <Run>Apache License 2.0</Run>
  224. </Hyperlink>
  225. <Run>.</Run>
  226. </TextBlock>
  227. </StackPanel>
  228. </ScrollViewer>
  229. </PivotItem>
  230. </Pivot>
  231. </SplitView.Pane>
  232. <Frame x:Name="MainContentFrame" CacheSize="2" />
  233. </SplitView>
  234. <VisualStateManager.VisualStateGroups>
  235. <VisualStateGroup CurrentStateChanged="WindowWidth_CurrentStateChanged">
  236. <VisualState>
  237. <VisualState.StateTriggers>
  238. <AdaptiveTrigger MinWindowWidth="600"/>
  239. </VisualState.StateTriggers>
  240. <VisualState.Setters>
  241. <Setter Target="MainSplitView.DisplayMode" Value="Inline"/>
  242. <Setter Target="MainSplitView.IsPaneOpen" Value="True"/>
  243. </VisualState.Setters>
  244. </VisualState>
  245. </VisualStateGroup>
  246. </VisualStateManager.VisualStateGroups>
  247. </Grid>
  248. </Page>