Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Resources/Locales/en_US.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,7 @@
<x:String x:Key="Text.Histories.HighlightsInGraph.CurrentBranchAndSelectedCommits" xml:space="preserve">Current Branch &amp; Selected Commits</x:String>
<x:String x:Key="Text.Histories.HighlightsInGraph.SelectedCommitsOnly" xml:space="preserve">Selected Commits Only</x:String>
<x:String x:Key="Text.Histories.HighlightsInGraph.SelectedCommitsOnlyFirstParent" xml:space="preserve">Selected Commits (First-parent Only)</x:String>
<x:String x:Key="Text.Histories.ResetColumns" xml:space="preserve">Reset Columns to Defaults</x:String>
<x:String x:Key="Text.Histories.Selected" xml:space="preserve">SELECTED {0} COMMITS</x:String>
<x:String x:Key="Text.Histories.ShowColumns" xml:space="preserve">SHOW COLUMNS</x:String>
<x:String x:Key="Text.Histories.Tips" xml:space="preserve">Hold 'Ctrl' or 'Shift' to select multiple commits.</x:String>
Expand Down
26 changes: 26 additions & 0 deletions src/ViewModels/Histories.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public bool IsAuthorColumnVisible
if (_repo.UIStates.IsAuthorColumnVisibleInHistory != value)
{
_repo.UIStates.IsAuthorColumnVisibleInHistory = value;
_repo.UIStates.Save();
OnPropertyChanged();
}
}
Expand All @@ -71,6 +72,7 @@ public bool IsSHAColumnVisible
if (_repo.UIStates.IsSHAColumnVisibleInHistory != value)
{
_repo.UIStates.IsSHAColumnVisibleInHistory = value;
_repo.UIStates.Save();
OnPropertyChanged();
}
}
Expand All @@ -84,6 +86,7 @@ public bool IsAuthorTimeColumnVisible
if (_repo.UIStates.IsAuthorTimeColumnVisibleInHistory != value)
{
_repo.UIStates.IsAuthorTimeColumnVisibleInHistory = value;
_repo.UIStates.Save();
OnPropertyChanged();
}
}
Expand All @@ -97,6 +100,7 @@ public bool IsCommitTimeColumnVisible
if (_repo.UIStates.IsCommitTimeColumnVisibleInHistory != value)
{
_repo.UIStates.IsCommitTimeColumnVisibleInHistory = value;
_repo.UIStates.Save();
OnPropertyChanged();
}
}
Expand Down Expand Up @@ -240,6 +244,28 @@ public bool HasShowFlag(Models.HistoryShowFlags flag)
return _repo.UIStates.HistoryShowFlags.HasFlag(flag);
}

public void SaveColumnWidths()
{
_repo.UIStates.Save();
}

public void ResetColumns()
{
var defaults = new Models.RepositoryUIStates();
var states = _repo.UIStates;
states.IsAuthorColumnVisibleInHistory = defaults.IsAuthorColumnVisibleInHistory;
states.IsSHAColumnVisibleInHistory = defaults.IsSHAColumnVisibleInHistory;
states.IsAuthorTimeColumnVisibleInHistory = defaults.IsAuthorTimeColumnVisibleInHistory;
states.IsCommitTimeColumnVisibleInHistory = defaults.IsCommitTimeColumnVisibleInHistory;
states.AuthorColumnWidth = defaults.AuthorColumnWidth;
states.Save();

OnPropertyChanged(nameof(IsAuthorColumnVisible));
OnPropertyChanged(nameof(IsSHAColumnVisible));
OnPropertyChanged(nameof(IsAuthorTimeColumnVisible));
OnPropertyChanged(nameof(IsCommitTimeColumnVisible));
}

public void ToggleShowFlag(Models.HistoryShowFlags flag)
{
if (HasShowFlag(flag))
Expand Down
1 change: 1 addition & 0 deletions src/Views/Histories.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
ColumnHeaderHeight="24"
RowHeight="26"
LayoutUpdated="OnCommitListLayoutUpdated"
SizeChanged="OnCommitListSizeChanged"
ContextRequested="OnCommitListContextRequested"
DoubleTapped="OnCommitListDoubleTapped">
<DataGrid.Styles>
Expand Down
50 changes: 46 additions & 4 deletions src/Views/Histories.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -464,8 +464,32 @@ protected override void OnDataContextChanged(EventArgs e)
{
base.OnDataContextChanged(e);

if (DataContext is ViewModels.Histories vm)
CommitListContainer.Columns[1].Width = new(vm.AuthorColumnWidth, DataGridLengthUnitType.Pixel);
ApplyAuthorColumnWidth();
}

private void OnCommitListSizeChanged(object sender, SizeChangedEventArgs e)
{
if (e.WidthChanged)
ApplyAuthorColumnWidth();
}

private double GetMaxAuthorColumnWidth()
{
var listWidth = CommitListContainer.Bounds.Width;
return listWidth > 0 ? Math.Max(listWidth * MaxAuthorColumnWidthRatio, MinAuthorColumnWidth) : double.MaxValue;
}

private void ApplyAuthorColumnWidth()
{
if (DataContext is not ViewModels.Histories vm)
return;

// The saved width is kept as-is. It is only capped while displayed, so a width chosen on a
// wide screen does not squeeze the subject column on a narrow one, and comes back when wide again.
var w = Math.Min(vm.AuthorColumnWidth, GetMaxAuthorColumnWidth());
var column = CommitListContainer.Columns[1];
if (column.Width.UnitType != DataGridLengthUnitType.Pixel || column.Width.Value != w)
column.Width = new(w, DataGridLengthUnitType.Pixel);
}

private void OnCommitListHeaderPointerMoved(object sender, PointerEventArgs e)
Expand All @@ -480,9 +504,10 @@ private void OnCommitListHeaderPointerMoved(object sender, PointerEventArgs e)
if (_resizingAuthorColumn)
{
var posX = CommitListContainer.Columns[0].ActualWidth;
var maxW = posX + CommitListContainer.Columns[1].ActualWidth - 100;
var curW = CommitListContainer.Columns[1].ActualWidth;
var maxW = Math.Min(posX + curW - 100, GetMaxAuthorColumnWidth());
var delta = posX - pos.X;
var w = Math.Max(Math.Min(vm.AuthorColumnWidth + delta, maxW), 80);
var w = Math.Max(Math.Min(curW + delta, maxW), MinAuthorColumnWidth);
CommitListContainer.Columns[1].Width = new(w, DataGridLengthUnitType.Pixel);
vm.AuthorColumnWidth = w;
}
Expand Down Expand Up @@ -520,6 +545,9 @@ private void OnCommitListHeaderPointerPressed(object sender, PointerPressedEvent

private void OnCommitListHeaderPointerReleased(object sender, PointerReleasedEventArgs e)
{
if (_resizingAuthorColumn && DataContext is ViewModels.Histories vm)
vm.SaveColumnWidths();

_resizingAuthorColumn = false;
}

Expand Down Expand Up @@ -719,6 +747,16 @@ private void OnOpenAdvancedOptions(object sender, RoutedEventArgs e)
ev.Handled = true;
};

var resetColumns = new MenuItem();
resetColumns.Header = App.Text("Histories.ResetColumns");
resetColumns.Icon = this.CreateMenuIcon("Icons.Reset");
resetColumns.Click += (_, ev) =>
{
histories.ResetColumns();
ApplyAuthorColumnWidth();
ev.Handled = true;
};

var menu = new ContextMenu();
menu.Placement = PlacementMode.BottomEdgeAlignedLeft;
menu.Items.Add(layout);
Expand Down Expand Up @@ -746,6 +784,8 @@ private void OnOpenAdvancedOptions(object sender, RoutedEventArgs e)
menu.Items.Add(shaColumn);
menu.Items.Add(authorTimeColumn);
menu.Items.Add(commitTimeColumn);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(resetColumns);
menu.Open(button);
}

Expand Down Expand Up @@ -1969,6 +2009,8 @@ private async Task InteractiveRebaseWithPrefillActionAsync(ViewModels.Repository
private AvaloniaList<Models.IssueTracker> _issueTrackers = null;
private bool _isScrollToTopVisible = false;
private bool _isDetailsPanelExpanded = true;
private const double MinAuthorColumnWidth = 80;
private const double MaxAuthorColumnWidthRatio = 0.4;
private bool _resizingAuthorColumn = false;
private Cursor _resizingCursor = new(StandardCursorType.SizeWestEast);
}
Expand Down