moved to MVVM architecture
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
using System.Globalization;
|
||||
|
||||
namespace CursorLang.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Раскладка клавиатуры в удобном для отображения виде.
|
||||
/// </summary>
|
||||
/// <param name="LocaleId">Идентификатор локали (младшее слово HKL).</param>
|
||||
/// <param name="ShortName">Короткое имя для подсказки у курсора, например «RU».</param>
|
||||
/// <param name="DisplayName">Полное имя, например «RU — русский (Россия)».</param>
|
||||
public sealed record KeyboardLayout(int LocaleId, string ShortName, string DisplayName)
|
||||
{
|
||||
/// <summary>
|
||||
/// Строит модель по идентификатору локали. Неизвестные локали не являются
|
||||
/// ошибкой: для них показываем сам идентификатор.
|
||||
/// </summary>
|
||||
public static KeyboardLayout FromLocaleId(int localeId)
|
||||
{
|
||||
CultureInfo? culture = TryGetCulture(localeId);
|
||||
if (culture is null)
|
||||
{
|
||||
string fallback = $"0x{localeId:X4}";
|
||||
return new KeyboardLayout(localeId, fallback, fallback);
|
||||
}
|
||||
|
||||
string shortName = culture.TwoLetterISOLanguageName.ToUpperInvariant();
|
||||
return new KeyboardLayout(localeId, shortName, $"{shortName} — {culture.NativeName}");
|
||||
}
|
||||
|
||||
private static CultureInfo? TryGetCulture(int localeId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new CultureInfo(localeId);
|
||||
}
|
||||
catch (CultureNotFoundException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
namespace CursorLang.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Почему изменилась текущая раскладка.
|
||||
/// </summary>
|
||||
public enum LayoutChangeReason
|
||||
{
|
||||
/// <summary>Пользователь переключил раскладку в активном приложении.</summary>
|
||||
UserSwitched,
|
||||
|
||||
/// <summary>Пользователь перешёл в другое приложение, где своя раскладка.</summary>
|
||||
ApplicationSwitched,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Данные события смены раскладки.
|
||||
/// </summary>
|
||||
public sealed class LayoutChangedEventArgs(KeyboardLayout layout, LayoutChangeReason reason) : EventArgs
|
||||
{
|
||||
public KeyboardLayout Layout { get; } = layout;
|
||||
|
||||
public LayoutChangeReason Reason { get; } = reason;
|
||||
}
|
||||
Reference in New Issue
Block a user