mirror of
https://github.com/KeyKeeperApp/KeyKeeper.git
synced 2026-05-17 05:46:31 +03:00
merge branch 'Task27'
This commit is contained in:
@@ -19,6 +19,7 @@ public partial class App : Application
|
|||||||
|
|
||||||
public override void OnFrameworkInitializationCompleted()
|
public override void OnFrameworkInitializationCompleted()
|
||||||
{
|
{
|
||||||
|
AppSettings.Load();
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
|
// 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;
|
||||||
using Avalonia.Controls.Shapes;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Layout;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
|
|
||||||
namespace KeyKeeper.Views;
|
namespace KeyKeeper.Views;
|
||||||
|
|
||||||
public class SettingsWindow : Window
|
public class SettingsWindow : Window
|
||||||
{
|
{
|
||||||
public SettingsWindow()
|
public SettingsWindow()
|
||||||
{
|
{
|
||||||
|
// Базовые параметры окна
|
||||||
this.Title = "Settings";
|
this.Title = "Settings";
|
||||||
this.MinWidth = 500;
|
this.Width = 450;
|
||||||
this.MinHeight = 400;
|
this.Height = 250;
|
||||||
this.Width = 400;
|
this.MinWidth = 450;
|
||||||
this.Height = 300;
|
this.MinHeight = 250;
|
||||||
var textBlock = new TextBlock
|
this.WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
||||||
|
this.Padding = new Thickness(25);
|
||||||
|
|
||||||
|
// Контейнер, который выравнивает элементы по вертикали
|
||||||
|
var mainStack = new StackPanel
|
||||||
{
|
{
|
||||||
Text = "Settings window",
|
Spacing = 15,
|
||||||
HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
|
HorizontalAlignment = HorizontalAlignment.Left,
|
||||||
VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center,
|
VerticalAlignment = VerticalAlignment.Top
|
||||||
FontSize = 16
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
WindowStartupLocation = WindowStartupLocation.CenterScreen
|
||||||
};
|
};
|
||||||
repositoryWindow.Closed += (s, e) => this.Close();
|
repositoryWindow.Closed += (s, e) =>
|
||||||
|
{
|
||||||
|
if (AppSettings.ExitOnRepositoryClose)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.Show();
|
||||||
|
}
|
||||||
|
};
|
||||||
repositoryWindow.Show();
|
repositoryWindow.Show();
|
||||||
this.Hide();
|
this.Hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user