Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 633242b

Browse files
Fixed feature to preserve the state (expansions and selection) in the 'Files' tab when switching between commits.
1 parent f716c5e commit 633242b

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

‎src/Views/RevisionFileTreeView.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
99
x:Class="SourceGit.Views.RevisionFileTreeView"
1010
x:Name="ThisControl">
11-
<v:RevisionFileRowsListBox ItemsSource="{Binding #ThisControl.Rows}"
11+
<v:RevisionFileRowsListBox x:Name="RevisionFileRowsListBox"ItemsSource="{Binding #ThisControl.Rows}"
1212
Background="Transparent"
1313
SelectionMode="Single"
1414
SelectionChanged="OnRowsSelectionChanged"

‎src/Views/RevisionFileTreeView.axaml.cs

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3-
3+
usingSystem.Linq;
44
using Avalonia;
55
using Avalonia.Collections;
66
using Avalonia.Controls;
@@ -9,6 +9,7 @@
99
using Avalonia.Layout;
1010
using Avalonia.Media;
1111
using Avalonia.VisualTree;
12+
using SourceGit.ViewModels;
1213

1314
namespace SourceGit.Views
1415
{
@@ -249,6 +250,17 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang
249250

250251
if (change.Property == RevisionProperty)
251252
{
253+
var selectedNode = _revisionFileRowsListBox?.SelectedItem as RevisionFileTreeNode;
254+
255+
var expandedObjects = new List<Models.Object>();
256+
foreach (var node in _rows)
257+
{
258+
if (node.IsExpanded)
259+
{
260+
expandedObjects.Add(node.Backend);
261+
}
262+
}
263+
252264
_tree.Clear();
253265
_rows.Clear();
254266
_searchResult.Clear();
@@ -280,10 +292,51 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang
280292
var topTree = new List<ViewModels.RevisionFileTreeNode>();
281293
MakeRows(topTree, _tree, 0);
282294
_rows.AddRange(topTree);
295+
296+
_revisionFileRowsListBox ??= this.Find<RevisionFileRowsListBox>("RevisionFileRowsListBox");
297+
298+
if (_revisionFileRowsListBox is { IsArrangeValid: true })
299+
{
300+
RestoreTreeState(expandedObjects, selectedNode);
301+
}
302+
283303
GC.Collect();
284304
}
285305
}
286306

307+
private void RestoreTreeState(List<Models.Object> expandedObjects, RevisionFileTreeNode selectedNode)
308+
{
309+
for (int i = 0; i < _rows.Count; i++)
310+
{
311+
var revisionFileTreeNode = _rows[i];
312+
313+
if (!revisionFileTreeNode.IsFolder)
314+
continue;
315+
316+
if (expandedObjects.FirstOrDefault(o => o.SHA == revisionFileTreeNode.Backend.SHA || o.Path == revisionFileTreeNode.Backend.Path) != null)
317+
{
318+
ToggleNodeIsExpanded(revisionFileTreeNode);
319+
}
320+
}
321+
322+
if (selectedNode != null)
323+
{
324+
foreach (var node in _rows)
325+
{
326+
if (node.Backend.SHA != selectedNode.Backend.SHA && node.Backend.Path != selectedNode.Backend.Path)
327+
continue;
328+
329+
selectedNode = node;
330+
break;
331+
}
332+
}
333+
334+
if (_revisionFileRowsListBox != null)
335+
{
336+
_revisionFileRowsListBox.SelectedItem = selectedNode;
337+
}
338+
}
339+
287340
private void OnTreeNodeContextRequested(object sender, ContextRequestedEventArgs e)
288341
{
289342
if (DataContext is ViewModels.CommitDetail vm &&
@@ -372,5 +425,6 @@ private void MakeRows(List<ViewModels.RevisionFileTreeNode> rows, List<ViewModel
372425
private AvaloniaList<ViewModels.RevisionFileTreeNode> _rows = [];
373426
private bool _disableSelectionChangingEvent = false;
374427
private List<ViewModels.RevisionFileTreeNode> _searchResult = [];
428+
private RevisionFileRowsListBox _revisionFileRowsListBox;
375429
}
376430
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /