Public Access
160 lines
9.6 KiB
XML
160 lines
9.6 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:vm="using:DodoSSH.Client.Shell.ViewModels"
|
|
x:Class="DodoSSH.Client.App.Views.SettingsPreferencesPage"
|
|
x:DataType="vm:MainWindowViewModel">
|
|
|
|
<!--
|
|
v5c: Preferences, against Settings-Preferences.dc.html — the old PreferencesScreen.axaml's real content,
|
|
restyled into the settings page idiom and split across two pages rather than one.
|
|
|
|
THIS MACHINE moved to the Security page whole: Windows Hello's register/"stop unlocking here" pair and
|
|
the no-TPM explanation are Security's UNLOCKING card now, one home rather than two — see the cross-
|
|
reference row at the foot of this page. Device name is not one of the rows that moved; it never existed
|
|
here at all, because there is no device-name setting to move. Logs record the machine name on their own.
|
|
|
|
TERMINAL keeps its one real setting, text size, and drops the design's other five — font, cursor,
|
|
scrollback, copy on select, terminal bell — which the renderer hard-codes. KEYCHAIN keeps Lock now,
|
|
Sync now/Sign in, and the importer rows; the design's own SECURITY card (clipboard-clear delay,
|
|
confirm-run-on-insert) has nothing behind either row and is not drawn here.
|
|
|
|
Two importer rows now rather than the one the old screen had: ~/.ssh/config, and a Hetzner Cloud project.
|
|
-->
|
|
|
|
<ScrollViewer>
|
|
<StackPanel MaxWidth="1100" Margin="40" HorizontalAlignment="Stretch">
|
|
|
|
<TextBlock Classes="settingstitle" Text="Preferences" />
|
|
|
|
<TextBlock Classes="settingssection" Text="TERMINAL" />
|
|
|
|
<Border Classes="settingscard">
|
|
<StackPanel>
|
|
|
|
<Border Classes="settingsrow last">
|
|
<Grid ColumnDefinitions="*,Auto">
|
|
<StackPanel Grid.Column="0" Spacing="6" Margin="0,0,16,0">
|
|
<TextBlock Classes="settingsrowtitle" Text="Text size" />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="How large a terminal draws, in pixels. Ctrl+plus and Ctrl+minus do the same while a terminal has focus, and Ctrl+0 puts it back. It resizes the grid rather than magnifying it, so the remote is told how many columns it now has — which is also why it stops before the columns run out." />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="10" VerticalAlignment="Top">
|
|
<Button Width="36" Height="36" Classes="ghost" Padding="0"
|
|
Command="{Binding ShrinkTerminalFontCommand}"
|
|
IsEnabled="{Binding CanShrinkTerminalFont}"
|
|
ToolTip.Tip="Smaller · Ctrl+minus">
|
|
<TextBlock FontFamily="{StaticResource IconFont}" Text="" FontSize="15" />
|
|
</Button>
|
|
<TextBlock Classes="mono" FontSize="13.5" MinWidth="46" VerticalAlignment="Center"
|
|
TextAlignment="Center" Foreground="{StaticResource Text}"
|
|
Text="{Binding TerminalFontSize, StringFormat={}{0} px}" />
|
|
<Button Width="36" Height="36" Classes="ghost" Padding="0"
|
|
Command="{Binding EnlargeTerminalFontCommand}"
|
|
IsEnabled="{Binding CanEnlargeTerminalFont}"
|
|
ToolTip.Tip="Larger · Ctrl+plus">
|
|
<TextBlock FontFamily="{StaticResource IconFont}" Text="" FontSize="15" />
|
|
</Button>
|
|
<Button Classes="ghost" Height="36" Content="RESET"
|
|
Command="{Binding ResetTerminalFontCommand}"
|
|
ToolTip.Tip="Back to the size it ships at · Ctrl+0" />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<TextBlock Classes="settingssection" Text="KEYCHAIN" />
|
|
|
|
<Border Classes="settingscard">
|
|
<StackPanel>
|
|
|
|
<Border Classes="settingsrow">
|
|
<Grid ColumnDefinitions="*,Auto">
|
|
<StackPanel Grid.Column="0" Spacing="6" Margin="0,0,16,0">
|
|
<TextBlock Classes="settingsrowtitle" Text="Lock the keychain" />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Closes the keychain and forgets every key it held. Shells you have open keep running and reappear when you unlock — locked describes the keychain, not this machine's access to your hosts." />
|
|
</StackPanel>
|
|
<Button Grid.Column="1" Classes="ghost" Height="38" Content="LOCK NOW"
|
|
Command="{Binding LockCommand}" />
|
|
</Grid>
|
|
</Border>
|
|
|
|
<Border Classes="settingsrow">
|
|
<Grid ColumnDefinitions="*,Auto">
|
|
<StackPanel Grid.Column="0" Spacing="6" Margin="0,0,16,0">
|
|
<TextBlock Classes="settingsrowtitle" Text="Synchronise" />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Runs a pass now. One runs on its own when the keychain opens, straight after any change, and every minute while it stays open." />
|
|
<!-- What SYNC NOW said. The status bar that carries it elsewhere is hidden in settings
|
|
mode, so without this the button ran, failed or found the machine offline in silence. -->
|
|
<TextBlock Classes="settingsrowcaption"
|
|
IsVisible="{Binding Vault.Status, Converter={x:Static StringConverters.IsNotNullOrEmpty}, FallbackValue=False}"
|
|
Text="{Binding Vault.Status}" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="8">
|
|
<Button Classes="ghost" Height="38" Content="SIGN IN" Command="{Binding SignInCommand}"
|
|
IsVisible="{Binding !IsOnline}"
|
|
ToolTip.Tip="Opens your browser. Only needed when there is no remembered session to resume." />
|
|
<Button Classes="ghost" Height="38" Content="SYNC NOW" Command="{Binding Vault.SyncCommand}" />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<Border Classes="settingsrow">
|
|
<Grid ColumnDefinitions="*,Auto">
|
|
<StackPanel Grid.Column="0" Spacing="6" Margin="0,0,16,0">
|
|
<TextBlock Classes="settingsrowtitle" Text="Import SSH config" />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Reads this machine's ~/.ssh/config, shows what it found, and imports only what you approve. Nothing is stored during the scan, and no private key is read — where a key file is named, the path is recorded as a note." />
|
|
</StackPanel>
|
|
<Button Grid.Column="1" Classes="ghost" Height="38" Content="OPEN IMPORTER"
|
|
Command="{Binding ShowScreenCommand}"
|
|
CommandParameter="{x:Static vm:ShellScreen.Import}" />
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!--
|
|
The second importer, beside the first rather than folded into it: they read different things
|
|
through different code, and one row that asked "from where?" would put a question in front of
|
|
the far more common answer. See HetznerImportScreen.axaml.
|
|
-->
|
|
<Border Classes="settingsrow last">
|
|
<Grid ColumnDefinitions="*,Auto">
|
|
<StackPanel Grid.Column="0" Spacing="6" Margin="0,0,16,0">
|
|
<TextBlock Classes="settingsrowtitle" Text="Import from Hetzner Cloud" />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Lists the servers in one Hetzner Cloud project and imports the ones you tick. Needs a read-only API token, which is used for a single request and never stored; a token belongs to one project, so an account with several runs this once each. No key can come with them — Hetzner has never held the private half of one — so imported hosts ask for a password until you bind them to a key in your keychain. Dedicated servers behind Hetzner's Robot are not covered." />
|
|
</StackPanel>
|
|
<Button Grid.Column="1" Classes="ghost" Height="38" Content="OPEN WIZARD"
|
|
Command="{Binding ShowScreenCommand}"
|
|
CommandParameter="{x:Static vm:ShellScreen.HetznerImport}" />
|
|
</Grid>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<TextBlock Classes="settingssection" Text="NOT BUILT YET" />
|
|
|
|
<Border Classes="settingscard">
|
|
<StackPanel Margin="24,20" Spacing="10">
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Unlocking with this machine's device key moved to Security — it registers this machine rather than a preference of this screen's, and Security is where the rest of this machine's trust facts live." />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Terminal font, cursor and scrollback — the renderer hard-codes those three. Text size above is the one that is not." />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Copy on select and the terminal bell — neither is wired to anything the renderer does." />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="Clearing the clipboard after copying a secret, and confirming a snippet that runs on insert — neither exists; a copied secret stays on the clipboard until something else replaces it." />
|
|
<TextBlock Classes="settingsrowcaption"
|
|
Text="A device name — there is no such setting. Logs record this machine's own name on their own." />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
</UserControl>
|