Files
cursor-lang/CursorLang/Models/AppSettings.cs
T
2026-08-08 21:48:16 +05:00

51 lines
1.9 KiB
C#

using System.Text.Json.Serialization;
using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel;
namespace CursorLang.Models;
/// <summary>
/// Настройки приложения. Все изменения применяются на лету: подсказка и окно
/// настроек привязаны к этим свойствам, а <c>SettingsService</c> сохраняет их на диск.
/// </summary>
public sealed partial class AppSettings : ObservableObject
{
/// <summary>Язык интерфейса в виде кода культуры: «ru», «en».</summary>
[ObservableProperty]
private string _language = "en";
[ObservableProperty]
private PopupPlacementMode _placementMode = PopupPlacementMode.AtCursor;
[ObservableProperty]
private CursorCorner _cursorCorner = CursorCorner.BottomRight;
/// <summary>Отступ от курсора в единицах WPF.</summary>
[ObservableProperty]
private double _cursorOffset = 16;
[ObservableProperty]
private ScreenPosition _screenPosition = ScreenPosition.BottomRight;
/// <summary>Отступ от края монитора в единицах WPF.</summary>
[ObservableProperty]
private double _screenMargin = 24;
[ObservableProperty]
private double _fontSize = 20;
/// <summary>Непрозрачность подсказки: 1.0 — полностью непрозрачная.</summary>
[ObservableProperty]
private double _opacity = 0.9;
/// <summary>Сколько подсказка держится на экране, в миллисекундах.</summary>
[ObservableProperty]
private double _durationMilliseconds = 500;
[ObservableProperty]
private Color _backgroundColor = Color.FromRgb(0x20, 0x20, 0x20);
[JsonIgnore]
public TimeSpan Duration => TimeSpan.FromMilliseconds(DurationMilliseconds);
}