mirror of
https://github.com/KeyKeeperApp/KeyKeeper.git
synced 2026-05-02 21:06:34 +03:00
merge branch 'Task27'
This commit is contained in:
@@ -19,6 +19,7 @@ public partial class App : Application
|
||||
|
||||
public override void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
AppSettings.Load();
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
|
||||
|
||||
47
src/KeyKeeper/AppSettings.cs
Normal file
47
src/KeyKeeper/AppSettings.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace KeyKeeper;
|
||||
|
||||
public static class AppSettings
|
||||
{
|
||||
private static readonly string FilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "KeyKeeper", "settings.json");
|
||||
|
||||
public static bool ExitOnRepositoryClose { get; set; } = false;
|
||||
|
||||
// Сохранение в файл
|
||||
public static void Save()
|
||||
{
|
||||
var directory = Path.GetDirectoryName(FilePath);
|
||||
if (!string.IsNullOrEmpty(directory))
|
||||
Directory.CreateDirectory(directory);
|
||||
|
||||
var data = new { ExitOnRepositoryClose };
|
||||
string json = JsonSerializer.Serialize(data);
|
||||
File.WriteAllText(FilePath, json);
|
||||
}
|
||||
|
||||
// Загрузка из файла
|
||||
public static void Load()
|
||||
{
|
||||
if (File.Exists(FilePath))
|
||||
{
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(FilePath);
|
||||
var data = JsonSerializer.Deserialize<SettingsData>(json);
|
||||
if (data != null)
|
||||
{
|
||||
ExitOnRepositoryClose = data.ExitOnRepositoryClose;
|
||||
}
|
||||
}
|
||||
catch { /* Если файл поврежден, просто используем значения по умолчанию */ }
|
||||
}
|
||||
}
|
||||
|
||||
private class SettingsData
|
||||
{
|
||||
public bool ExitOnRepositoryClose { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,61 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Shapes;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Layout;
|
||||
using Avalonia.Media;
|
||||
|
||||
namespace KeyKeeper.Views;
|
||||
|
||||
public class SettingsWindow : Window
|
||||
{
|
||||
public SettingsWindow()
|
||||
{
|
||||
// Базовые параметры окна
|
||||
this.Title = "Settings";
|
||||
this.MinWidth = 500;
|
||||
this.MinHeight = 400;
|
||||
this.Width = 400;
|
||||
this.Height = 300;
|
||||
var textBlock = new TextBlock
|
||||
this.Width = 450;
|
||||
this.Height = 250;
|
||||
this.MinWidth = 450;
|
||||
this.MinHeight = 250;
|
||||
this.WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
||||
this.Padding = new Thickness(25);
|
||||
|
||||
// Контейнер, который выравнивает элементы по вертикали
|
||||
var mainStack = new StackPanel
|
||||
{
|
||||
Text = "Settings window",
|
||||
HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
|
||||
VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center,
|
||||
FontSize = 16
|
||||
Spacing = 15,
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
VerticalAlignment = VerticalAlignment.Top
|
||||
};
|
||||
|
||||
this.Content = textBlock;
|
||||
// Заголовок окна
|
||||
var titleText = new TextBlock
|
||||
{
|
||||
Text = "App Settings",
|
||||
FontSize = 20,
|
||||
FontWeight = FontWeight.Bold,
|
||||
Margin = new Thickness(0, 0, 0, 10)
|
||||
};
|
||||
|
||||
// Чекбокс (Галочка)
|
||||
var exitOnCloseCheckBox = new CheckBox
|
||||
{
|
||||
Content = "Exit KeyKeeper when closing vault",
|
||||
FontSize = 14,
|
||||
// Подгружаем сохраненное состояние из статического класса
|
||||
IsChecked = AppSettings.ExitOnRepositoryClose
|
||||
};
|
||||
|
||||
// Событие: когда пользователь щелкает по галочке, данные сразу улетают в AppSettings
|
||||
exitOnCloseCheckBox.IsCheckedChanged += (s, e) =>
|
||||
{
|
||||
AppSettings.ExitOnRepositoryClose = exitOnCloseCheckBox.IsChecked ?? false;
|
||||
AppSettings.Save();
|
||||
};
|
||||
|
||||
// Добавляем элементы в стек
|
||||
mainStack.Children.Add(titleText);
|
||||
mainStack.Children.Add(exitOnCloseCheckBox);
|
||||
|
||||
// Назначаем стек основным контентом окна
|
||||
this.Content = mainStack;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,9 +100,19 @@ namespace KeyKeeper.Views
|
||||
{
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen
|
||||
};
|
||||
repositoryWindow.Closed += (s, e) => this.Close();
|
||||
repositoryWindow.Closed += (s, e) =>
|
||||
{
|
||||
if (AppSettings.ExitOnRepositoryClose)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Show();
|
||||
}
|
||||
};
|
||||
repositoryWindow.Show();
|
||||
this.Hide();
|
||||
this.Hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user