mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-20 19:55:00 +00:00
feature: auto-select first change in commit details panel and revision/branch compare panel (#1019)
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
1f35e83799
commit
c6747f72f9
11 changed files with 71 additions and 21 deletions
|
@ -36,7 +36,7 @@ namespace SourceGit.Models
|
|||
{
|
||||
if (startIdx > 0)
|
||||
OnReceive(buffer.Substring(0, startIdx));
|
||||
|
||||
|
||||
var endIdx = buffer.IndexOf(">", startIdx + 1, StringComparison.Ordinal);
|
||||
if (endIdx <= startIdx)
|
||||
{
|
||||
|
|
|
@ -25,8 +25,15 @@ namespace SourceGit.ViewModels
|
|||
|
||||
public int ActivePageIndex
|
||||
{
|
||||
get => _activePageIndex;
|
||||
set => SetProperty(ref _activePageIndex, value);
|
||||
get => _repo.CommitDetailActivePageIndex;
|
||||
set
|
||||
{
|
||||
if (_repo.CommitDetailActivePageIndex != value)
|
||||
{
|
||||
_repo.CommitDetailActivePageIndex = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Models.Commit Commit
|
||||
|
@ -617,11 +624,7 @@ namespace SourceGit.ViewModels
|
|||
_changes = null;
|
||||
_revisionFiles.Clear();
|
||||
|
||||
FullMessage = string.Empty;
|
||||
SignInfo = null;
|
||||
Changes = [];
|
||||
VisibleChanges = null;
|
||||
SelectedChanges = null;
|
||||
ViewRevisionFileContent = null;
|
||||
Children.Clear();
|
||||
RevisionFileSearchFilter = string.Empty;
|
||||
|
@ -821,7 +824,6 @@ namespace SourceGit.ViewModels
|
|||
};
|
||||
|
||||
private Repository _repo = null;
|
||||
private int _activePageIndex = 0;
|
||||
private Models.Commit _commit = null;
|
||||
private string _fullMessage = string.Empty;
|
||||
private Models.CommitSignInfo _signInfo = null;
|
||||
|
|
|
@ -453,6 +453,12 @@ namespace SourceGit.ViewModels
|
|||
private set => SetProperty(ref _isAutoFetching, value);
|
||||
}
|
||||
|
||||
public int CommitDetailActivePageIndex
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = 0;
|
||||
|
||||
public Repository(bool isBare, string path, string gitDir)
|
||||
{
|
||||
IsBare = isBare;
|
||||
|
|
|
@ -1466,7 +1466,7 @@ namespace SourceGit.ViewModels
|
|||
return unstaged;
|
||||
|
||||
var visible = new List<Models.Change>();
|
||||
|
||||
|
||||
foreach (var c in unstaged)
|
||||
{
|
||||
if (c.Path.Contains(_unstagedFilter, StringComparison.OrdinalIgnoreCase))
|
||||
|
|
|
@ -134,6 +134,7 @@
|
|||
<v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
|
||||
Changes="{Binding VisibleChanges}"
|
||||
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
||||
AutoSelectFirstChange="True"
|
||||
ContextRequested="OnChangeContextRequested"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
@ -85,6 +85,15 @@ namespace SourceGit.Views
|
|||
set => SetValue(ChangesProperty, value);
|
||||
}
|
||||
|
||||
public static readonly StyledProperty<bool> AutoSelectFirstChangeProperty =
|
||||
AvaloniaProperty.Register<ChangeCollectionView, bool>(nameof(AutoSelectFirstChange), false);
|
||||
|
||||
public bool AutoSelectFirstChange
|
||||
{
|
||||
get => GetValue(AutoSelectFirstChangeProperty);
|
||||
set => SetValue(AutoSelectFirstChangeProperty, value);
|
||||
}
|
||||
|
||||
public static readonly StyledProperty<List<Models.Change>> SelectedChangesProperty =
|
||||
AvaloniaProperty.Register<ChangeCollectionView, List<Models.Change>>(nameof(SelectedChanges));
|
||||
|
||||
|
@ -205,9 +214,9 @@ namespace SourceGit.Views
|
|||
base.OnPropertyChanged(change);
|
||||
|
||||
if (change.Property == ViewModeProperty)
|
||||
UpdateDataSource(false);
|
||||
else if (change.Property == ChangesProperty)
|
||||
UpdateDataSource(true);
|
||||
else if (change.Property == ChangesProperty)
|
||||
UpdateDataSource(false);
|
||||
else if (change.Property == SelectedChangesProperty)
|
||||
UpdateSelection();
|
||||
}
|
||||
|
@ -292,9 +301,9 @@ namespace SourceGit.Views
|
|||
}
|
||||
}
|
||||
|
||||
private void UpdateDataSource(bool disableEvents)
|
||||
private void UpdateDataSource(bool onlyViewModeChange)
|
||||
{
|
||||
_disableSelectionChangingEvent = disableEvents;
|
||||
_disableSelectionChangingEvent = !onlyViewModeChange;
|
||||
|
||||
var changes = Changes;
|
||||
if (changes == null || changes.Count == 0)
|
||||
|
@ -324,7 +333,19 @@ namespace SourceGit.Views
|
|||
MakeTreeRows(rows, tree.Tree);
|
||||
tree.Rows.AddRange(rows);
|
||||
|
||||
if (selected.Count > 0)
|
||||
if (!onlyViewModeChange && AutoSelectFirstChange)
|
||||
{
|
||||
foreach (var row in tree.Rows)
|
||||
{
|
||||
if (row.Change != null)
|
||||
{
|
||||
tree.SelectedRows.Add(row);
|
||||
SetCurrentValue(SelectedChangesProperty, [row.Change]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (selected.Count > 0)
|
||||
{
|
||||
var sets = new HashSet<Models.Change>();
|
||||
foreach (var c in selected)
|
||||
|
@ -346,16 +367,34 @@ namespace SourceGit.Views
|
|||
{
|
||||
var grid = new ViewModels.ChangeCollectionAsGrid();
|
||||
grid.Changes.AddRange(changes);
|
||||
if (selected.Count > 0)
|
||||
|
||||
if (!onlyViewModeChange && AutoSelectFirstChange)
|
||||
{
|
||||
grid.SelectedChanges.Add(changes[0]);
|
||||
SetCurrentValue(SelectedChangesProperty, [changes[0]]);
|
||||
}
|
||||
else if (selected.Count > 0)
|
||||
{
|
||||
grid.SelectedChanges.AddRange(selected);
|
||||
}
|
||||
|
||||
Content = grid;
|
||||
}
|
||||
else
|
||||
{
|
||||
var list = new ViewModels.ChangeCollectionAsList();
|
||||
list.Changes.AddRange(changes);
|
||||
if (selected.Count > 0)
|
||||
|
||||
if (!onlyViewModeChange && AutoSelectFirstChange)
|
||||
{
|
||||
list.SelectedChanges.Add(changes[0]);
|
||||
SetCurrentValue(SelectedChangesProperty, [changes[0]]);
|
||||
}
|
||||
else if (selected.Count > 0)
|
||||
{
|
||||
list.SelectedChanges.AddRange(selected);
|
||||
}
|
||||
|
||||
Content = list;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
|
||||
Changes="{Binding VisibleChanges}"
|
||||
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
||||
AutoSelectFirstChange="True"
|
||||
ContextRequested="OnChangeContextRequested"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace SourceGit.Views
|
|||
}
|
||||
|
||||
public static readonly RoutedEvent<LauncherTabSelectedEventArgs> PageSelectedEvent =
|
||||
RoutedEvent.Register<ChangeCollectionView, LauncherTabSelectedEventArgs>(nameof(PageSelected), RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
|
||||
RoutedEvent.Register<LauncherTabsSelector, LauncherTabSelectedEventArgs>(nameof(PageSelected), RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
|
||||
|
||||
public event EventHandler<LauncherTabSelectedEventArgs> PageSelected
|
||||
{
|
||||
|
@ -74,7 +74,7 @@ namespace SourceGit.Views
|
|||
|
||||
private void OnPageSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (sender is ListBox { SelectedItem : ViewModels.LauncherPage page })
|
||||
if (sender is ListBox { SelectedItem: ViewModels.LauncherPage page })
|
||||
{
|
||||
_isProcessingSelection = true;
|
||||
RaiseEvent(new LauncherTabSelectedEventArgs(page));
|
||||
|
@ -88,7 +88,7 @@ namespace SourceGit.Views
|
|||
{
|
||||
if (_isProcessingSelection)
|
||||
return;
|
||||
|
||||
|
||||
VisiblePages.Clear();
|
||||
|
||||
if (Pages == null)
|
||||
|
|
|
@ -522,7 +522,7 @@ namespace SourceGit.Views
|
|||
|
||||
private void OnRemoveSelectedHistoriesFilter(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (DataContext is ViewModels.Repository repo && sender is Button { DataContext: Models.Filter filter})
|
||||
if (DataContext is ViewModels.Repository repo && sender is Button { DataContext: Models.Filter filter })
|
||||
repo.RemoveHistoriesFilter(filter);
|
||||
|
||||
e.Handled = true;
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
<v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
|
||||
Changes="{Binding VisibleChanges}"
|
||||
SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
|
||||
AutoSelectFirstChange="True"
|
||||
ContextRequested="OnChangeContextRequested"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
@ -1006,7 +1006,7 @@ namespace SourceGit.Views
|
|||
|
||||
if (startPosition.Location > endPosition.Location)
|
||||
(startPosition, endPosition) = (endPosition, startPosition);
|
||||
|
||||
|
||||
var startIdx = Math.Min(startPosition.Line - 1, lines.Count - 1);
|
||||
var endIdx = Math.Min(endPosition.Line - 1, lines.Count - 1);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue