mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-08-21 04:31:20 +08:00
settings_re8
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<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.LauncherSettingsPage"
|
||||
x:DataType="vm:LauncherSettingsPageViewModel">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Classes="settings-page-container">
|
||||
|
||||
<Border Classes="settings-section-card">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto"
|
||||
ColumnSpacing="18">
|
||||
<Border Classes="settings-section-card-icon-host"
|
||||
Width="72"
|
||||
Height="72"
|
||||
Padding="10">
|
||||
<fi:SymbolIcon Symbol="Apps"
|
||||
FontSize="34"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center" />
|
||||
</Border>
|
||||
|
||||
<StackPanel Grid.Column="1"
|
||||
Spacing="4"
|
||||
VerticalAlignment="Center">
|
||||
<TextBlock Classes="settings-card-header"
|
||||
Text="{Binding LauncherHeader}" />
|
||||
<TextBlock Classes="settings-card-description"
|
||||
Text="{Binding LauncherSubtitle}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Margin="0,10,0,0"
|
||||
Text="{Binding HiddenHint}"
|
||||
TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="2"
|
||||
Spacing="4"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center">
|
||||
<TextBlock Classes="settings-section-title"
|
||||
FontSize="28"
|
||||
HorizontalAlignment="Right"
|
||||
Margin="0"
|
||||
Text="{Binding HiddenCountText}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
HorizontalAlignment="Right"
|
||||
Text="{Binding HiddenSummary}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<controls:IconText Icon="Apps"
|
||||
Text="{Binding HiddenHeader}"
|
||||
Margin="0,0,0,4" />
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding HiddenHeader}"
|
||||
Description="{Binding HiddenDescription}"
|
||||
IsExpanded="True">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="Apps" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpanderItem>
|
||||
<StackPanel Spacing="8">
|
||||
<TextBlock Classes="settings-item-description"
|
||||
IsVisible="{Binding IsHiddenItemsEmpty}"
|
||||
Margin="0,0,0,4"
|
||||
Text="{Binding HiddenEmptyText}"
|
||||
TextWrapping="Wrap" />
|
||||
|
||||
<ItemsControl ItemsSource="{Binding HiddenItems}"
|
||||
IsVisible="{Binding HasHiddenItems}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:LauncherHiddenItemViewModel">
|
||||
<ui:SettingsExpanderItem Content="{Binding DisplayName}"
|
||||
Description="{Binding TypeLabel}"
|
||||
IsClickEnabled="False">
|
||||
<ui:SettingsExpanderItem.IconSource>
|
||||
<fi:SymbolIconSource Symbol="{Binding IconSymbol}" />
|
||||
</ui:SettingsExpanderItem.IconSource>
|
||||
<ui:SettingsExpanderItem.Footer>
|
||||
<Button Command="{Binding RestoreCommand}"
|
||||
Content="{Binding RestoreButtonText}"
|
||||
VerticalAlignment="Center" />
|
||||
</ui:SettingsExpanderItem.Footer>
|
||||
</ui:SettingsExpanderItem>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
</ui:SettingsExpanderItem>
|
||||
</ui:SettingsExpander>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,31 @@
|
||||
using LanMountainDesktop.PluginSdk;
|
||||
using LanMountainDesktop.Services.Settings;
|
||||
using LanMountainDesktop.ViewModels;
|
||||
|
||||
namespace LanMountainDesktop.Views.SettingsPages;
|
||||
|
||||
[SettingsPageInfo(
|
||||
"launcher",
|
||||
"App Launcher",
|
||||
SettingsPageCategory.Components,
|
||||
IconKey = "Apps",
|
||||
SortOrder = 10,
|
||||
Scope = SettingsScope.Launcher,
|
||||
TitleLocalizationKey = "settings.launcher.title",
|
||||
DescriptionLocalizationKey = "settings.launcher.description")]
|
||||
public partial class LauncherSettingsPage : SettingsPageBase
|
||||
{
|
||||
public LauncherSettingsPage()
|
||||
: this(new LauncherSettingsPageViewModel(HostSettingsFacadeProvider.GetOrCreate()))
|
||||
{
|
||||
}
|
||||
|
||||
public LauncherSettingsPage(LauncherSettingsPageViewModel viewModel)
|
||||
{
|
||||
ViewModel = viewModel;
|
||||
DataContext = ViewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public LauncherSettingsPageViewModel ViewModel { get; }
|
||||
}
|
||||
263
LanMountainDesktop/Views/SettingsPages/WeatherSettingsPage.axaml
Normal file
263
LanMountainDesktop/Views/SettingsPages/WeatherSettingsPage.axaml
Normal file
@@ -0,0 +1,263 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:LanMountainDesktop.ViewModels"
|
||||
xmlns:models="using:LanMountainDesktop.Models"
|
||||
xmlns:controls="using:LanMountainDesktop.Controls"
|
||||
xmlns:ui="using:FluentAvalonia.UI.Controls"
|
||||
xmlns:fi="using:FluentIcons.Avalonia.Fluent"
|
||||
x:Class="LanMountainDesktop.Views.SettingsPages.WeatherSettingsPage"
|
||||
x:DataType="vm:WeatherSettingsPageViewModel">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Classes="settings-page-container">
|
||||
|
||||
<Border Classes="settings-section-card">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto" ColumnSpacing="18">
|
||||
<Border Classes="settings-section-card-icon-host"
|
||||
Width="72"
|
||||
Height="72"
|
||||
Padding="10">
|
||||
<Image Source="{Binding PreviewIcon}"
|
||||
Stretch="Uniform" />
|
||||
</Border>
|
||||
|
||||
<StackPanel Grid.Column="1"
|
||||
Spacing="4"
|
||||
VerticalAlignment="Center">
|
||||
<TextBlock Classes="settings-card-header"
|
||||
Text="{Binding PreviewHeader}" />
|
||||
<TextBlock Classes="settings-card-description"
|
||||
Text="{Binding PreviewDescription}" />
|
||||
<TextBlock Classes="settings-section-title"
|
||||
FontSize="24"
|
||||
Margin="0,10,0,0"
|
||||
Text="{Binding PreviewTemperature}" />
|
||||
<TextBlock Classes="settings-item-label"
|
||||
Text="{Binding PreviewLocation}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding PreviewCondition}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding PreviewUpdated}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding PreviewStatus}" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="2"
|
||||
Spacing="12"
|
||||
VerticalAlignment="Center">
|
||||
<Button Classes="settings-accent-button"
|
||||
Command="{Binding RefreshPreviewCommand}"
|
||||
Content="{Binding RefreshButtonText}" />
|
||||
<ui:ProgressRing IsIndeterminate="True"
|
||||
IsVisible="{Binding IsRefreshingPreview}"
|
||||
Width="28"
|
||||
Height="28"
|
||||
HorizontalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding LocationSourceHeader}"
|
||||
Description="{Binding LocationSourceDescription}">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="WeatherMoon" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpander.Footer>
|
||||
<ComboBox Width="220"
|
||||
ItemsSource="{Binding LocationModes}"
|
||||
SelectedItem="{Binding SelectedLocationMode}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:SelectionOption">
|
||||
<TextBlock Text="{Binding Label}" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</ui:SettingsExpander.Footer>
|
||||
<ui:SettingsExpanderItem>
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding CurrentLocationSummary}"
|
||||
TextWrapping="Wrap" />
|
||||
</ui:SettingsExpanderItem>
|
||||
</ui:SettingsExpander>
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding CitySearchHeader}"
|
||||
Description="{Binding CitySearchDescription}"
|
||||
IsVisible="{Binding IsCitySearchMode}">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="Search" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpander.Footer>
|
||||
<Button Classes="settings-accent-button"
|
||||
Command="{Binding ApplyCitySelectionCommand}"
|
||||
Content="{Binding ApplyCityButtonText}" />
|
||||
</ui:SettingsExpander.Footer>
|
||||
<ui:SettingsExpanderItem>
|
||||
<StackPanel Spacing="14">
|
||||
<Grid ColumnDefinitions="*,Auto"
|
||||
ColumnSpacing="12">
|
||||
<TextBox Text="{Binding SearchKeyword}"
|
||||
Watermark="{Binding SearchPlaceholder}" />
|
||||
<Button Grid.Column="1"
|
||||
Command="{Binding SearchCommand}"
|
||||
Content="{Binding SearchButtonText}" />
|
||||
</Grid>
|
||||
|
||||
<ui:ProgressRing IsIndeterminate="True"
|
||||
IsVisible="{Binding IsSearching}"
|
||||
Width="24"
|
||||
Height="24"
|
||||
HorizontalAlignment="Left" />
|
||||
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding SearchStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
|
||||
<ListBox Classes="weather-settings-search-results"
|
||||
ItemsSource="{Binding SearchResults}"
|
||||
SelectedItem="{Binding SelectedSearchResult}">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:WeatherLocation">
|
||||
<Grid ColumnDefinitions="Auto,*"
|
||||
ColumnSpacing="12">
|
||||
<fi:SymbolIcon Classes="icon-s"
|
||||
Margin="0,2,0,0"
|
||||
Symbol="City" />
|
||||
<StackPanel Grid.Column="1"
|
||||
Spacing="4">
|
||||
<TextBlock Classes="settings-item-label"
|
||||
Text="{Binding Name}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding Affiliation}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding LocationKey}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
</ui:SettingsExpanderItem>
|
||||
</ui:SettingsExpander>
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding CoordinatesHeader}"
|
||||
Description="{Binding CoordinatesDescription}"
|
||||
IsVisible="{Binding IsCoordinatesMode}">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="Location" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpander.Footer>
|
||||
<Button Classes="settings-accent-button"
|
||||
Command="{Binding ApplyCoordinatesCommand}"
|
||||
Content="{Binding ApplyCoordinatesButtonText}" />
|
||||
</ui:SettingsExpander.Footer>
|
||||
<ui:SettingsExpanderItem>
|
||||
<Grid ColumnDefinitions="*,*"
|
||||
Classes="settings-inline-pair">
|
||||
<StackPanel Classes="settings-item">
|
||||
<TextBlock Classes="settings-item-label"
|
||||
Text="{Binding LatitudeLabel}" />
|
||||
<NumericUpDown Minimum="-90"
|
||||
Maximum="90"
|
||||
Increment="0.0001"
|
||||
FormatString="F4"
|
||||
Value="{Binding Latitude}" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="1"
|
||||
Classes="settings-item">
|
||||
<TextBlock Classes="settings-item-label"
|
||||
Text="{Binding LongitudeLabel}" />
|
||||
<NumericUpDown Minimum="-180"
|
||||
Maximum="180"
|
||||
Increment="0.0001"
|
||||
FormatString="F4"
|
||||
Value="{Binding Longitude}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ui:SettingsExpanderItem>
|
||||
<ui:SettingsExpanderItem>
|
||||
<TextBox Text="{Binding LocationKey}"
|
||||
Watermark="{Binding LocationKeyPlaceholder}" />
|
||||
</ui:SettingsExpanderItem>
|
||||
<ui:SettingsExpanderItem>
|
||||
<TextBox Text="{Binding LocationName}"
|
||||
Watermark="{Binding LocationNamePlaceholder}" />
|
||||
</ui:SettingsExpanderItem>
|
||||
</ui:SettingsExpander>
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding LocationServicesHeader}"
|
||||
Description="{Binding LocationServicesDescription}">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="Location" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpander.Footer>
|
||||
<Button Classes="settings-accent-button"
|
||||
Command="{Binding UseCurrentLocationCommand}"
|
||||
Content="{Binding UseCurrentLocationButtonText}"
|
||||
IsVisible="{Binding IsLocationSupported}" />
|
||||
</ui:SettingsExpander.Footer>
|
||||
<ui:SettingsExpanderItem>
|
||||
<Grid ColumnDefinitions="*,Auto"
|
||||
ColumnSpacing="16">
|
||||
<StackPanel Classes="settings-item">
|
||||
<TextBlock Classes="settings-item-label"
|
||||
Text="{Binding AutoRefreshLabel}" />
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding LocationActionStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
<ToggleSwitch Grid.Column="1"
|
||||
IsChecked="{Binding AutoRefreshLocation}"
|
||||
IsEnabled="{Binding IsLocationSupported}" />
|
||||
</Grid>
|
||||
</ui:SettingsExpanderItem>
|
||||
<ui:SettingsExpanderItem IsVisible="{Binding IsRefreshingLocation}">
|
||||
<ui:ProgressRing IsIndeterminate="True"
|
||||
IsVisible="{Binding IsRefreshingLocation}"
|
||||
Width="28"
|
||||
Height="28"
|
||||
HorizontalAlignment="Left" />
|
||||
</ui:SettingsExpanderItem>
|
||||
</ui:SettingsExpander>
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding AlertFilterHeader}"
|
||||
Description="{Binding AlertFilterDescription}">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="Warning" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpander.Footer>
|
||||
<TextBox Width="360"
|
||||
MinHeight="120"
|
||||
AcceptsReturn="True"
|
||||
TextWrapping="Wrap"
|
||||
Text="{Binding ExcludedAlerts}" />
|
||||
</ui:SettingsExpander.Footer>
|
||||
</ui:SettingsExpander>
|
||||
|
||||
<ui:SettingsExpander Classes="settings-expander-card"
|
||||
Header="{Binding RequestHeader}"
|
||||
Description="{Binding RequestDescription}">
|
||||
<ui:SettingsExpander.IconSource>
|
||||
<fi:SymbolIconSource Symbol="ShieldDismiss" />
|
||||
</ui:SettingsExpander.IconSource>
|
||||
<ui:SettingsExpander.Footer>
|
||||
<ToggleSwitch IsChecked="{Binding NoTlsRequests}" />
|
||||
</ui:SettingsExpander.Footer>
|
||||
<ui:SettingsExpanderItem>
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Text="{Binding NoTlsToggleText}"
|
||||
TextWrapping="Wrap" />
|
||||
</ui:SettingsExpanderItem>
|
||||
</ui:SettingsExpander>
|
||||
|
||||
<TextBlock Classes="settings-item-description"
|
||||
Margin="0,8,0,0"
|
||||
Text="{Binding FooterHint}"
|
||||
TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,47 @@
|
||||
using LanMountainDesktop.PluginSdk;
|
||||
using LanMountainDesktop.Services;
|
||||
using LanMountainDesktop.Services.Settings;
|
||||
using LanMountainDesktop.ViewModels;
|
||||
|
||||
namespace LanMountainDesktop.Views.SettingsPages;
|
||||
|
||||
[SettingsPageInfo(
|
||||
"weather",
|
||||
"Weather",
|
||||
SettingsPageCategory.Appearance,
|
||||
IconKey = "WeatherMoon",
|
||||
SortOrder = 18,
|
||||
TitleLocalizationKey = "settings.weather.title",
|
||||
DescriptionLocalizationKey = "settings.weather.description")]
|
||||
public partial class WeatherSettingsPage : SettingsPageBase
|
||||
{
|
||||
public WeatherSettingsPage()
|
||||
: this(CreateDefaultViewModel())
|
||||
{
|
||||
}
|
||||
|
||||
public WeatherSettingsPage(WeatherSettingsPageViewModel viewModel)
|
||||
{
|
||||
ViewModel = viewModel;
|
||||
DataContext = ViewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public WeatherSettingsPageViewModel ViewModel { get; }
|
||||
|
||||
private static WeatherSettingsPageViewModel CreateDefaultViewModel()
|
||||
{
|
||||
var settingsFacade = HostSettingsFacadeProvider.GetOrCreate();
|
||||
var localizationService = new LocalizationService();
|
||||
var locationService = HostLocationServiceProvider.GetOrCreate();
|
||||
var weatherLocationRefreshService = new WeatherLocationRefreshService(
|
||||
settingsFacade,
|
||||
locationService,
|
||||
localizationService);
|
||||
return new WeatherSettingsPageViewModel(
|
||||
settingsFacade,
|
||||
localizationService,
|
||||
locationService,
|
||||
weatherLocationRefreshService);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user