feature: remember window size and layout information (#165)

This commit is contained in:
leo 2024-06-11 16:36:52 +08:00
parent 7f2e22def6
commit f977e76ea7
No known key found for this signature in database
GPG key ID: B528468E49CD0E58
8 changed files with 94 additions and 5 deletions

View file

@ -0,0 +1,80 @@
using System;
using System.Text.Json.Serialization;
using System.Text.Json;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
namespace SourceGit.ViewModels
{
public class LayoutInfo : ObservableObject
{
public double LauncherWidth
{
get;
set;
} = 1280;
public double LauncherHeight
{
get;
set;
} = 720;
[JsonConverter(typeof(GridLengthConverter))]
public GridLength RepositorySidebarWidth
{
get => _repositorySidebarWidth;
set => SetProperty(ref _repositorySidebarWidth, value);
}
[JsonConverter(typeof(GridLengthConverter))]
public GridLength WorkingCopyLeftWidth
{
get => _workingCopyLeftWidth;
set => SetProperty(ref _workingCopyLeftWidth, value);
}
[JsonConverter(typeof(GridLengthConverter))]
public GridLength StashesLeftWidth
{
get => _stashesLeftWidth;
set => SetProperty(ref _stashesLeftWidth, value);
}
[JsonConverter(typeof(GridLengthConverter))]
public GridLength CommitDetailChangesLeftWidth
{
get => _commitDetailChangesLeftWidth;
set => SetProperty(ref _commitDetailChangesLeftWidth, value);
}
[JsonConverter(typeof(GridLengthConverter))]
public GridLength CommitDetailFilesLeftWidth
{
get => _commitDetailFilesLeftWidth;
set => SetProperty(ref _commitDetailFilesLeftWidth, value);
}
private GridLength _repositorySidebarWidth = new GridLength(250, GridUnitType.Pixel);
private GridLength _workingCopyLeftWidth = new GridLength(300, GridUnitType.Pixel);
private GridLength _stashesLeftWidth = new GridLength(300, GridUnitType.Pixel);
private GridLength _commitDetailChangesLeftWidth = new GridLength(256, GridUnitType.Pixel);
private GridLength _commitDetailFilesLeftWidth = new GridLength(256, GridUnitType.Pixel);
}
public class GridLengthConverter : JsonConverter<GridLength>
{
public override GridLength Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var size = reader.GetDouble();
return new GridLength(size, GridUnitType.Pixel);
}
public override void Write(Utf8JsonWriter writer, GridLength value, JsonSerializerOptions options)
{
writer.WriteNumberValue(value.Value);
}
}
}

View file

@ -109,6 +109,12 @@ namespace SourceGit.ViewModels
set => SetProperty(ref _defaultFontSize, value);
}
public LayoutInfo Layout
{
get => _layout;
set => SetProperty(ref _layout, value);
}
public string AvatarServer
{
get => Models.AvatarManager.SelectedServer;
@ -531,6 +537,7 @@ namespace SourceGit.ViewModels
private FontFamily _defaultFont = null;
private FontFamily _monospaceFont = null;
private double _defaultFontSize = 13;
private LayoutInfo _layout = new LayoutInfo();
private int _maxHistoryCommits = 20000;
private bool _restoreTabs = false;