通知系统,自习系统,反正做了很多

This commit is contained in:
lincube
2026-04-02 11:54:58 +08:00
parent 2272d35c16
commit 964cef27ee
20 changed files with 2824 additions and 222 deletions

View File

@@ -0,0 +1,112 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:LanMountainDesktop.ViewModels"
xmlns:controls="using:LanMountainDesktop.Controls"
xmlns:ui="using:FluentAvalonia.UI.Controls"
xmlns:fi="using:FluentIcons.Avalonia.Fluent"
x:Class="LanMountainDesktop.Views.SettingsPages.NotificationSettingsPage"
x:DataType="vm:NotificationSettingsPageViewModel">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Classes="settings-page-container settings-page-animated">
<controls:IconText Icon="Alert"
Text="{Binding NotificationHeader}"
Margin="0,0,0,4" />
<ui:SettingsExpander Header="{Binding EnableNotificationHeader}"
Description="{Binding EnableNotificationDescription}">
<ui:SettingsExpander.IconSource>
<fi:SymbolIconSource Symbol="Alert" />
</ui:SettingsExpander.IconSource>
<ui:SettingsExpander.Footer>
<ToggleSwitch IsChecked="{Binding IsNotificationEnabled}" />
</ui:SettingsExpander.Footer>
</ui:SettingsExpander>
<Separator Classes="settings-separator" />
<controls:IconText Icon="Alert"
Text="{Binding BehaviorHeader}"
Margin="0,0,0,4" />
<ui:SettingsExpander Header="{Binding HoverPauseHeader}"
Description="{Binding HoverPauseDescription}">
<ui:SettingsExpander.IconSource>
<fi:SymbolIconSource Symbol="CursorHover" />
</ui:SettingsExpander.IconSource>
<ui:SettingsExpander.Footer>
<ToggleSwitch IsChecked="{Binding IsHoverPauseEnabled}" />
</ui:SettingsExpander.Footer>
</ui:SettingsExpander>
<ui:SettingsExpander Header="{Binding ClickCloseHeader}"
Description="{Binding ClickCloseDescription}">
<ui:SettingsExpander.IconSource>
<fi:SymbolIconSource Symbol="CursorClick" />
</ui:SettingsExpander.IconSource>
<ui:SettingsExpander.Footer>
<ToggleSwitch IsChecked="{Binding IsClickCloseEnabled}" />
</ui:SettingsExpander.Footer>
</ui:SettingsExpander>
<ui:SettingsExpander Header="{Binding MaxNotificationsHeader}"
Description="{Binding MaxNotificationsDescription}">
<ui:SettingsExpander.IconSource>
<fi:SymbolIconSource Symbol="NumberSymbol" />
</ui:SettingsExpander.IconSource>
<ui:SettingsExpander.Footer>
<ui:NumberBox Value="{Binding MaxNotificationsPerPosition}"
Minimum="1"
Maximum="10"
Width="100"
SpinButtonPlacementMode="Inline" />
</ui:SettingsExpander.Footer>
</ui:SettingsExpander>
<Separator Classes="settings-separator" />
<controls:IconText Icon="Beaker"
Text="{Binding TestHeader}"
Margin="0,0,0,4" />
<ui:SettingsExpander Header="{Binding TestNotificationHeader}"
Description="{Binding TestNotificationDescription}">
<ui:SettingsExpander.IconSource>
<fi:SymbolIconSource Symbol="Beaker" />
</ui:SettingsExpander.IconSource>
<ui:SettingsExpander.Footer>
<StackPanel Orientation="Horizontal" Spacing="8">
<ComboBox Width="120"
ItemsSource="{Binding TestPositions}"
SelectedItem="{Binding SelectedTestPosition}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="vm:SelectionOption">
<TextBlock Text="{Binding Label}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ComboBox Width="100"
ItemsSource="{Binding TestSeverities}"
SelectedItem="{Binding SelectedTestSeverity}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="vm:SelectionOption">
<TextBlock Text="{Binding Label}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ui:NumberBox Width="100"
Minimum="1"
Maximum="30"
SpinButtonPlacementMode="Inline"
Value="{Binding TestDurationSeconds}" />
<Button Command="{Binding SendTestCommand}"
Classes="accent">
<fi:SymbolIcon Symbol="Send" FontSize="16" />
</Button>
</StackPanel>
</ui:SettingsExpander.Footer>
</ui:SettingsExpander>
</StackPanel>
</ScrollViewer>
</UserControl>

View File

@@ -0,0 +1,30 @@
using LanMountainDesktop.PluginSdk;
using LanMountainDesktop.Services.Settings;
using LanMountainDesktop.ViewModels;
namespace LanMountainDesktop.Views.SettingsPages;
[SettingsPageInfo(
"notifications",
"通知",
SettingsPageCategory.Components,
IconKey = "Bell",
SortOrder = 5,
TitleLocalizationKey = "settings.notifications.title",
DescriptionLocalizationKey = "settings.notifications.description")]
public partial class NotificationSettingsPage : SettingsPageBase
{
public NotificationSettingsPage()
: this(new NotificationSettingsPageViewModel(HostSettingsFacadeProvider.GetOrCreate()))
{
}
public NotificationSettingsPage(NotificationSettingsPageViewModel viewModel)
{
ViewModel = viewModel;
DataContext = ViewModel;
InitializeComponent();
}
public NotificationSettingsPageViewModel ViewModel { get; }
}