added multilang and settings

This commit is contained in:
2026-08-08 21:48:16 +05:00
parent 3d614255d8
commit d146fd442a
18 changed files with 1115 additions and 72 deletions
+8 -17
View File
@@ -5,18 +5,6 @@ using CursorLang.Views;
namespace CursorLang.Services;
/// <summary>
/// Настройки подсказки у курсора.
/// </summary>
public sealed class PopupOptions
{
/// <summary>Сколько подсказка держится на экране после последнего переключения.</summary>
public TimeSpan Duration { get; init; } = TimeSpan.FromMilliseconds(500);
/// <summary>Отступ от курсора в единицах WPF, чтобы подсказка не оказалась под ним.</summary>
public double CursorOffset { get; init; } = 16;
}
/// <summary>
/// Управляет временем жизни подсказки: окно отвечает только за показ,
/// а решение «когда показать и когда убрать» принимается здесь.
@@ -25,24 +13,27 @@ public sealed class LayoutPopupService : ILayoutPopupService, IDisposable
{
private readonly LayoutPopupWindow _window;
private readonly LayoutPopupViewModel _viewModel;
private readonly DispatcherTimer _hideTimer;
private readonly AppSettings _settings;
private readonly DispatcherTimer _hideTimer = new();
public LayoutPopupService(LayoutPopupWindow window, LayoutPopupViewModel viewModel, PopupOptions options)
public LayoutPopupService(LayoutPopupWindow window, LayoutPopupViewModel viewModel, AppSettings settings)
{
_window = window;
_viewModel = viewModel;
_settings = settings;
_hideTimer = new DispatcherTimer { Interval = options.Duration };
_hideTimer.Tick += OnHideTimerTick;
}
public void Show(KeyboardLayout layout)
{
_viewModel.ShortName = layout.ShortName;
_window.ShowAtCursor();
_window.ShowPopup();
// Перезапускаем таймер, чтобы быстрые переключения продлевали показ
// Длительность читаем при каждом показе: её меняют в настройках на лету.
// Перезапуск таймера заодно продлевает показ при быстрых переключениях
_hideTimer.Stop();
_hideTimer.Interval = _settings.Duration;
_hideTimer.Start();
}