livia-test/Livia/Views/SettingsWindow.xaml
2025-03-28 14:31:53 +08:00

459 lines
35 KiB
XML

<Window x:Class="Livia.Views.SettingsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Livia.ViewModels"
xmlns:controls="clr-namespace:Livia.Views.Controls"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:attachedProperties="clr-namespace:Livia.Views.AttachedProperties"
xmlns:properties="clr-namespace:Livia.Properties"
xmlns:converters="clr-namespace:Livia.Views.Converters"
PreviewMouseWheel="SettingsWindowOnPreviewMouseWheel"
PreviewMouseDown="SettingsWindowOnPreviewMouseDown"
PreviewMouseMove="SettingsWindowOnPreviewMouseMove"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Style="{StaticResource LiviaWindow}"
Title="{StaticResource SettingsWindowName}"
d:DataContext="{d:DesignInstance Type=viewModels:SettingsWindowViewModel}"
d:DesignHeight="1800"
Height="600"
Width="810">
<Window.Resources>
<converters:StringToFontFamilyConverter x:Key="StringToFontFamilyConverter" />
</Window.Resources>
<Border BorderThickness="1"
Background="{StaticResource White1Brush}"
BorderBrush="{StaticResource Gray3Brush}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0"
MouseLeftButtonDown="TitleBarMouseLeftButtonDown"
Background="{StaticResource PrimaryColorBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Margin="20, 0"
VerticalAlignment="Center"
Style="{StaticResource MaterialDesignHeadline4TextBlock}"
Foreground="{StaticResource White1Brush}"
Text="{StaticResource SettingsWindowName}" />
<controls:MaterialTitleBar Grid.Column="2"
MaximizeButtonVisibility="Collapsed"
Margin="20"
HorizontalAlignment="Right" />
</Grid>
<ScrollViewer Grid.Row="1">
<!-- ReSharper disable once MarkupAttributeTypo -->
<TabControl Style="{StaticResource MaterialDesignNavigationRailTabControl}"
x:Name="TabControl"
TabStripPlacement="Top">
<TabItem Header="{StaticResource GeneralTabName}"
Visibility="{Binding GeneralTabEnabled, Converter={StaticResource BooleanToVisibilityConverter}}"
Width="auto"
Margin="18">
<StackPanel MaxWidth="1000"
MinWidth="500"
HorizontalAlignment="Center">
<materialDesign:Card Margin="20"
Style="{StaticResource LiviaCard}"
Visibility="{Binding DeveloperMode, Source={x:Static properties:Settings.Default}, Converter={StaticResource BooleanToVisibilityConverter}}"
d:Visibility="Visible"
attachedProperties:StringItemProperties.ItemName="{StaticResource DeveloperSettings}">
<StackPanel>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center">
<Button Click="UserCloudServerButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource UserCloudServerButtonText }" />
<Button Click="UserTestServerButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource UserTestServerButtonText }" />
<Button Click="UserLocalhostButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource UserLocalhostButtonText }" />
</StackPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
VerticalAlignment="Center"
Text="{StaticResource ServerAddress}" />
<TextBox DockPanel.Dock="Right"
d:Text="127.0.0.1"
Text="{Binding ServerAddress, Source={x:Static properties:Settings.Default}}"
HorizontalAlignment="Right"
VerticalAlignment="Center" />
</DockPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
VerticalAlignment="Center"
Text="{StaticResource ServerPort}" />
<TextBox DockPanel.Dock="Right"
d:Text="8080"
Text="{Binding ServerPort, Source={x:Static properties:Settings.Default}}"
HorizontalAlignment="Right"
VerticalAlignment="Center" />
</DockPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
VerticalAlignment="Center"
Text="{StaticResource LogoutAfter}" />
<TextBox DockPanel.Dock="Right"
d:Text="10"
Text="{Binding LogoutAfter, Source={x:Static properties:Settings.Default}}"
HorizontalAlignment="Right"
VerticalAlignment="Center" />
</DockPanel>
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ShowArchiveDownloadButton}"
IsChecked="{Binding ShowArchiveDownloadButton, Source={x:Static properties:Settings.Default}}" />
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource AutoRefreshServerJobList}"
IsChecked="{Binding AutoRefreshServerJobList, Source={x:Static properties:Settings.Default}}" />
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ShowPushToPacsButton}"
IsChecked="{Binding ShowPushToPacsButton, Source={x:Static properties:Settings.Default}}" />
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ShowDicomNodeTab}"
IsChecked="{Binding ShowDicomNodeTab, Source={x:Static properties:Settings.Default}}" />
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ShowReportModuleAalCheckbox}"
IsChecked="{Binding ShowReportModuleAalCheckbox, Source={x:Static properties:Settings.Default}}" />
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ShowSelectReportModuleDialog}"
IsChecked="{Binding ShowSelectReportModuleDialog, Source={x:Static properties:Settings.Default}}" />
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
Margin="10"
Text="{StaticResource RestartIsRequireForChangesToTakeEffect}"
HorizontalAlignment="Center" />
<Button Click="OpenTempDirectoryButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource OpenTempDirectoryButtonText}" />
<Button Click="ClearAuthenticationKeyButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource ClearAuthenticationKeyButtonText}" />
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ShowUpdateButton}"
IsChecked="{Binding ShowUpdateButton, Source={x:Static properties:Settings.Default}}" />
<DockPanel>
<TextBlock DockPanel.Dock="Left"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Text="{StaticResource Version}" />
<TextBlock DockPanel.Dock="Right"
HorizontalAlignment="Right"
Style="{StaticResource MaterialDesignBody1TextBlock}"
d:Text="V1.1.1"
Text="{Binding VersionUpdateManager.CurrentVersion}" />
</DockPanel>
<ComboBox Style="{StaticResource SettingsWindowComboBoxItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource UpdateChannel}"
ItemsSource="{Binding Path=UpdateChannels}"
SelectionChanged="LanguageSelectionChanged"
SelectedValue="{Binding UpdateChannel, Source={x:Static properties:Settings.Default}, Mode=TwoWay}">
</ComboBox>
</StackPanel>
</materialDesign:Card>
<materialDesign:Card Margin="20"
Style="{StaticResource LiviaCard}"
Visibility="{Binding DisplaySettingsCardEnabled, Converter={StaticResource BooleanToVisibilityConverter}}"
attachedProperties:StringItemProperties.ItemName="{StaticResource DisplaySettings}">
<StackPanel>
<ComboBox Style="{StaticResource SettingsWindowComboBoxItem}"
Visibility="{Binding LanguageSelectionEnabled, Converter={StaticResource BooleanToVisibilityConverter}}"
attachedProperties:StringItemProperties.ItemName="{StaticResource Language}"
ItemsSource="{Binding Path=Languages}"
SelectionChanged="LanguageSelectionChanged"
SelectedValue="{Binding Language, Source={x:Static properties:Settings.Default}, Mode=TwoWay}"
SelectedValuePath="Id">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=DisplayName}"
FontFamily="{Binding DefaultFont, Converter={StaticResource StringToFontFamilyConverter}}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ComboBox Style="{StaticResource SettingsWindowComboBoxItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource CultureInfo}"
ItemsSource="{Binding Path=CultureInfoCollection}"
SelectedValue="{Binding CultureInfo, Source={x:Static properties:Settings.Default}, Mode=TwoWay}"
SelectedValuePath="IetfLanguageTag"
Cursor="Hand">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=NativeName}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
Margin="10"
Text="{StaticResource RestartIsRequireForChangesToTakeEffect}"
HorizontalAlignment="Center" />
</StackPanel>
</materialDesign:Card>
<materialDesign:Card Margin="20"
Visibility="{Binding ShowExportReportSettings, Converter={StaticResource BooleanToVisibilityConverter}}"
Style="{StaticResource LiviaCard}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ReportSettings}">
<StackPanel>
<ToggleButton Style="{StaticResource SettingsWindowToggleItem}"
attachedProperties:StringItemProperties.ItemName="{StaticResource OpenReportOnFinish}"
IsChecked="{Binding OpenReportOnFinish, Source={x:Static properties:Settings.Default}}"
Cursor="Hand" />
</StackPanel>
</materialDesign:Card>
<Button Click="OpenLogDirectoryButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource OpenLogDirectoryButtonText}" />
</StackPanel>
</TabItem>
<TabItem Header="{StaticResource SecurityTabName}"
Visibility="{Binding SecurityTabEnabled, Converter={StaticResource BooleanToVisibilityConverter}}"
Width="auto"
Margin="18">
<StackPanel MaxWidth="1000"
MinWidth="500"
Visibility="{Binding ServerHandler.IsLoggedIn, Converter={StaticResource BooleanToVisibilityConverter}}"
HorizontalAlignment="Center">
<materialDesign:Card Margin="20"
Style="{StaticResource LiviaCard}"
attachedProperties:StringItemProperties.ItemName="{StaticResource EditPassword}">
<StackPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
VerticalAlignment="Center"
Text="{StaticResource OldPassword}" />
<PasswordBox DockPanel.Dock="Right"
Name="OldPasswordBox"
MaxLength="16"
HorizontalAlignment="Right"
VerticalAlignment="Center"
MinWidth="250" />
</DockPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
VerticalAlignment="Center"
Text="{StaticResource NewPassword}" />
<PasswordBox DockPanel.Dock="Right"
Name="NewPasswordBox"
MaxLength="16"
HorizontalAlignment="Right"
VerticalAlignment="Center"
MinWidth="250" />
</DockPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
VerticalAlignment="Center"
Text="{StaticResource ConfirmPassword}" />
<PasswordBox DockPanel.Dock="Right"
Name="ConfirmPasswordBox"
MaxLength="16"
HorizontalAlignment="Right"
VerticalAlignment="Center"
MinWidth="250" />
</DockPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
Margin="10"
Text="{StaticResource PasswordRequirement}"
HorizontalAlignment="Center" />
<Button Click="EditPasswordButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
IsEnabled="{Binding ServerHandler.Processing, Converter={StaticResource InvertBooleanConverter}}"
Margin="10"
attachedProperties:StringItemProperties.ItemName="{StaticResource Confirm}" />
</StackPanel>
</materialDesign:Card>
</StackPanel>
</TabItem>
<TabItem Header="{StaticResource ManufacturerInformationTabName}"
Width="auto"
Margin="18">
<StackPanel MaxWidth="1000"
HorizontalAlignment="Center">
<materialDesign:Card Margin="20"
Visibility="{Binding VersionUpdateManager.UpdateAvailable, Converter={StaticResource BooleanToVisibilityConverter}}"
Style="{StaticResource LiviaCard}"
attachedProperties:StringItemProperties.ItemName="{StaticResource InstallUpdateButtonText}">
<StackPanel>
<Button Click="InstallUpdateButtonClick"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
IsEnabled="{Binding ReadyToInstallUpdate}"
attachedProperties:StringItemProperties.ItemName="{StaticResource InstallUpdateButtonText}" />
</StackPanel>
</materialDesign:Card>
<materialDesign:Card Margin="20"
Style="{StaticResource LiviaCard}"
attachedProperties:StringItemProperties.ItemName="{StaticResource SoftwareVersionInfoTabName}">
<DockPanel>
<TextBlock Text="{StaticResource SoftwareVersionInfo}"
Style="{StaticResource MaterialDesignBody1TextBlock}"
VerticalAlignment="Center"
DockPanel.Dock="Left" />
<Button Click="CheckUpdateButtonClick"
DockPanel.Dock="Right"
HorizontalAlignment="Right"
Visibility="{Binding ShowUpdateButton, Source={x:Static properties:Settings.Default}, Converter={StaticResource BooleanToVisibilityConverter}}"
Style="{StaticResource LiviaPrimaryProcessingTextButton}"
IsEnabled="{Binding ReadyToCheckForUpdate}"
attachedProperties:StringItemProperties.ItemName="{StaticResource CheckUpdateButtonText}" />
</DockPanel>
</materialDesign:Card>
<materialDesign:Card Margin="20"
Style="{StaticResource LiviaCard}"
attachedProperties:StringItemProperties.ItemName="{StaticResource ManufacturerInformationTabName}">
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
TextWrapping="Wrap"
MaxWidth="1000"
TextAlignment="Justify"
Text="{StaticResource ManufacturerInformation}" />
</materialDesign:Card>
</StackPanel>
</TabItem>
<TabItem Header="{StaticResource DicomNodeTabName}"
Visibility="{Binding ShowDicomNodeTab, Source={x:Static properties:Settings.Default}, Converter={StaticResource BooleanToVisibilityConverter}}"
d:Visibility="Visible"
Width="auto"
Margin="18">
<StackPanel MaxWidth="1000"
MinWidth="500"
HorizontalAlignment="Center">
<materialDesign:Card Margin="20"
Style="{StaticResource LiviaCard}"
attachedProperties:StringItemProperties.ItemName="{StaticResource DicomNodeTabName}">
<StackPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
VerticalAlignment="Center"
Text="{StaticResource DicomNodeHost}" />
<TextBlock DockPanel.Dock="Right"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
HorizontalAlignment="Right"
Text="{Binding DicomNodeHost}" />
</DockPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
VerticalAlignment="Center"
Text="{StaticResource DicomNodePort}" />
<TextBlock DockPanel.Dock="Right"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
HorizontalAlignment="Right"
Text="{Binding DicomNodePort}" />
</DockPanel>
<DockPanel Margin="0, 10">
<TextBlock DockPanel.Dock="Left"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
VerticalAlignment="Center"
Text="{StaticResource DicomNodeAet}" />
<TextBlock DockPanel.Dock="Right"
Style="{DynamicResource MaterialDesignBody1TextBlock}"
Foreground="{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}"
HorizontalAlignment="Right"
Text="{Binding DicomNodeAet}" />
</DockPanel>
</StackPanel>
</materialDesign:Card>
</StackPanel>
</TabItem>
<TabItem Header="{StaticResource LicenseTabName}"
Width="auto"
Margin="18">
<StackPanel MaxWidth="1000">
<materialDesign:Card Margin="20">
<StackPanel>
<Image Source="/Resources/Images/an-image.png"
RenderOptions.BitmapScalingMode="HighQuality"
Width="256" />
<TextBlock Style="{StaticResource MaterialDesignHeadline3TextBlock}"
Margin="20"
TextAlignment="Center"
Text="{StaticResource LicenseTabName}" />
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}"
Margin="20"
TextWrapping="Wrap"
TextAlignment="Justify"
Text="{StaticResource AnImageLicense}" />
</StackPanel>
</materialDesign:Card>
</StackPanel>
</TabItem>
<TabItem Header="{StaticResource OpenSourceLibraryLicenseTabName}"
Width="auto"
Margin="18, 0">
<StackPanel MaxWidth="1000">
<controls:LicenseInfoControl LicenseTitle=".Net"
LicenseContent="{StaticResource DotNetLicense}"
LicenseUrl="https://dot.net/" />
<controls:LicenseInfoControl LicenseTitle="Material Design In XAML Toolkit"
LicenseContent="{StaticResource MaterialDesignInXamlToolkitLicense}"
LicenseUrl="https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit" />
<controls:LicenseInfoControl LicenseTitle="Windows Community Toolkit"
LicenseContent="{StaticResource WindowsCommunityToolkitLicense}"
LicenseUrl="https://github.com/CommunityToolkit/WindowsCommunityToolkit" />
<!-- ReSharper disable once MarkupAttributeTypo -->
<controls:LicenseInfoControl LicenseTitle="Ookii.Dialogs.Wpf"
LicenseContent="{StaticResource BSD 3-Clause}"
LicenseUrl="https://github.com/ookii-dialogs/ookii-dialogs-wpf" />
<controls:LicenseInfoControl LicenseTitle="Serilog"
LicenseContent="{StaticResource ApacheV2License}"
LicenseUrl="https://github.com/serilog/serilog" />
<controls:LicenseInfoControl LicenseTitle="Fellow Oak DICOM"
LicenseContent="{StaticResource fo-dicomLicense}"
LicenseUrl="https://github.com/fo-dicom/fo-dicom" />
<controls:LicenseInfoControl LicenseTitle="Velopack"
LicenseContent="{StaticResource ClowdSquirrelLicense}"
LicenseUrl="https://github.com/velopack/velopack" />
<controls:LicenseInfoControl LicenseTitle="Source Han Sans | 思源黑体"
LicenseContent="{StaticResource SourceHanSansLicense}"
LicenseUrl="https://github.com/adobe-fonts/source-han-sans" />
</StackPanel>
</TabItem>
</TabControl>
</ScrollViewer>
</Grid>
</Border>
</Window>