增加布局存储和还原

This commit is contained in:
ww-rm
2025-09-04 19:27:10 +08:00
parent 99ff6f9f0a
commit c7493372e9
3 changed files with 84 additions and 5 deletions

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace SpineViewer.Models
{
public class MainWindowLayoutModel
{
public double WindowLeft { get; set; }
public double WindowTop { get; set; }
public double WindowWidth { get; set; }
public double WindowHeight { get; set; }
public WindowState WindowState { get; set; }
public double RootGridCol0Width { get; set; }
public double ModelListRow0Height { get; set; }
public double ExplorerGridRow0Height { get; set; }
public double RightPanelGridRow0Height { get; set; }
}
}

View File

@@ -76,7 +76,7 @@
</Border> </Border>
<Border Grid.Row="1"> <Border Grid.Row="1">
<Grid> <Grid x:Name="_rootGrid">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition/> <ColumnDefinition/>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
@@ -91,7 +91,7 @@
<!-- 模型列表页 --> <!-- 模型列表页 -->
<TabItem Header="{DynamicResource Str_SpineObject}"> <TabItem Header="{DynamicResource Str_SpineObject}">
<Grid> <Grid x:Name="_modelListGrid">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
@@ -578,7 +578,7 @@
<!-- 浏览页 --> <!-- 浏览页 -->
<TabItem Header="{DynamicResource Str_Explorer}" DataContext="{Binding ExplorerListViewModel}"> <TabItem Header="{DynamicResource Str_Explorer}" DataContext="{Binding ExplorerListViewModel}">
<Grid> <Grid x:Name="_explorerGrid">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
@@ -785,14 +785,14 @@
<GridSplitter Grid.Column="1" ResizeDirection="Columns"/> <GridSplitter Grid.Column="1" ResizeDirection="Columns"/>
<Border Grid.Column="2"> <Border Grid.Column="2">
<Grid> <Grid x:Name="_rightPanelGrid">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="5*"/> <RowDefinition Height="5*"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid > <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>

View File

@@ -3,12 +3,15 @@ using NLog;
using NLog.Layouts; using NLog.Layouts;
using NLog.Targets; using NLog.Targets;
using Spine; using Spine;
using SpineViewer.Models;
using SpineViewer.Natives; using SpineViewer.Natives;
using SpineViewer.Resources; using SpineViewer.Resources;
using SpineViewer.Utils;
using SpineViewer.ViewModels.MainWindow; using SpineViewer.ViewModels.MainWindow;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@@ -26,6 +29,11 @@ namespace SpineViewer.Views;
/// </summary> /// </summary>
public partial class MainWindow : Window public partial class MainWindow : Window
{ {
/// <summary>
/// 布局文件保存路径
/// </summary>
public static readonly string LayoutFilePath = Path.Combine(Path.GetDirectoryName(Environment.ProcessPath), "layout.json");
private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
private ListViewItem? _listViewDragSourceItem = null; private ListViewItem? _listViewDragSourceItem = null;
private Point _listViewDragSourcePoint; private Point _listViewDragSourcePoint;
@@ -46,6 +54,8 @@ public partial class MainWindow : Window
private void MainWindow_Loaded(object sender, RoutedEventArgs e) private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{ {
LoadLayout();
var vm = _vm.SFMLRendererViewModel; var vm = _vm.SFMLRendererViewModel;
_renderPanel.CanvasMouseWheelScrolled += vm.CanvasMouseWheelScrolled; _renderPanel.CanvasMouseWheelScrolled += vm.CanvasMouseWheelScrolled;
_renderPanel.CanvasMouseButtonPressed += vm.CanvasMouseButtonPressed; _renderPanel.CanvasMouseButtonPressed += vm.CanvasMouseButtonPressed;
@@ -70,6 +80,8 @@ public partial class MainWindow : Window
{ {
var vm = _vm.SFMLRendererViewModel; var vm = _vm.SFMLRendererViewModel;
vm.StopRender(); vm.StopRender();
SaveLayout();
} }
/// <summary> /// <summary>
@@ -100,6 +112,50 @@ public partial class MainWindow : Window
LogManager.ReconfigExistingLoggers(); LogManager.ReconfigExistingLoggers();
} }
private void LoadLayout()
{
if (JsonHelper.Deserialize<MainWindowLayoutModel>(LayoutFilePath, out var m, true))
{
Left = m.WindowLeft;
Top = m.WindowTop;
Width = m.WindowWidth;
Height = m.WindowHeight;
if (m.WindowState == WindowState.Maximized)
{
WindowState = WindowState.Maximized;
}
else
{
WindowState = WindowState.Normal;
}
_rootGrid.ColumnDefinitions[0].Width = new(m.RootGridCol0Width);
_modelListGrid.RowDefinitions[0].Height = new(m.ModelListRow0Height);
_explorerGrid.RowDefinitions[0].Height = new(m.ExplorerGridRow0Height);
_rightPanelGrid.RowDefinitions[0].Height = new(m.RightPanelGridRow0Height);
}
}
private void SaveLayout()
{
var m = new MainWindowLayoutModel()
{
WindowLeft = Left,
WindowTop = Top,
WindowWidth = Width,
WindowHeight = Height,
WindowState = WindowState,
RootGridCol0Width = _rootGrid.ColumnDefinitions[0].ActualWidth,
ModelListRow0Height = _modelListGrid.RowDefinitions[0].ActualHeight,
ExplorerGridRow0Height = _explorerGrid.RowDefinitions[0].ActualHeight,
RightPanelGridRow0Height = _rightPanelGrid.RowDefinitions[0].ActualHeight,
};
JsonHelper.Serialize(m, LayoutFilePath);
}
#region _spinesListView #region _spinesListView
private void SpinesListView_RequestSelectionChanging(object? sender, NotifyCollectionChangedEventArgs e) private void SpinesListView_RequestSelectionChanging(object? sender, NotifyCollectionChangedEventArgs e)