feature: supports to hide AUTHOR and SHA columns in HISTORY (#2097)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2026-02-04 15:12:22 +08:00
parent 6c2a89bd58
commit bf8e392bb2
10 changed files with 107 additions and 23 deletions

View File

@@ -15,13 +15,25 @@ namespace SourceGit.Models
set;
} = HistoryShowFlags.None;
public bool EnableTopoOrderInHistories
public bool IsAuthorColumnVisibleInHistory
{
get;
set;
} = true;
public bool IsSHAColumnVisibleInHistory
{
get;
set;
} = true;
public bool EnableTopoOrderInHistory
{
get;
set;
} = false;
public bool OnlyHighlightCurrentBranchInHistories
public bool OnlyHighlightCurrentBranchInHistory
{
get;
set;
@@ -386,7 +398,7 @@ namespace SourceGit.Models
var builder = new StringBuilder();
if (EnableTopoOrderInHistories)
if (EnableTopoOrderInHistory)
builder.Append("--topo-order ");
else
builder.Append("--date-order ");

View File

@@ -474,6 +474,7 @@
<x:String x:Key="Text.Histories.Header.SHA" xml:space="preserve">SHA</x:String>
<x:String x:Key="Text.Histories.Header.Time" xml:space="preserve">COMMIT TIME</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>
<x:String x:Key="Text.Histories.Tips.MacOS" xml:space="preserve">Hold ⌘ or ⇧ to select multiple commits.</x:String>
<x:String x:Key="Text.Histories.Tips.Prefix" xml:space="preserve">TIPS:</x:String>

View File

@@ -478,6 +478,7 @@
<x:String x:Key="Text.Histories.Header.SHA" xml:space="preserve">提交指纹</x:String>
<x:String x:Key="Text.Histories.Header.Time" xml:space="preserve">提交时间</x:String>
<x:String x:Key="Text.Histories.Selected" xml:space="preserve">已选中 {0} 项提交</x:String>
<x:String x:Key="Text.Histories.ShowColumns" xml:space="preserve">显示列</x:String>
<x:String x:Key="Text.Histories.Tips" xml:space="preserve">可以按住 Ctrl 或 Shift 键选择多个提交</x:String>
<x:String x:Key="Text.Histories.Tips.MacOS" xml:space="preserve">可以按住 ⌘ 或 ⇧ 键选择多个提交</x:String>
<x:String x:Key="Text.Histories.Tips.Prefix" xml:space="preserve">小提示:</x:String>

View File

@@ -478,6 +478,7 @@
<x:String x:Key="Text.Histories.Header.SHA" xml:space="preserve">提交編號</x:String>
<x:String x:Key="Text.Histories.Header.Time" xml:space="preserve">提交時間</x:String>
<x:String x:Key="Text.Histories.Selected" xml:space="preserve">已選取 {0} 項提交</x:String>
<x:String x:Key="Text.Histories.ShowColumns" xml:space="preserve">顯示欄位</x:String>
<x:String x:Key="Text.Histories.Tips" xml:space="preserve">可以按住 Ctrl 或 Shift 鍵選擇多個提交</x:String>
<x:String x:Key="Text.Histories.Tips.MacOS" xml:space="preserve">可以按住 ⌘ 或 ⇧ 鍵選擇多個提交</x:String>
<x:String x:Key="Text.Histories.Tips.Prefix" xml:space="preserve">小提示:</x:String>

View File

@@ -18,6 +18,32 @@ namespace SourceGit.ViewModels
set => SetProperty(ref _isLoading, value);
}
public bool IsAuthorColumnVisible
{
get => _repo.UIStates.IsAuthorColumnVisibleInHistory;
set
{
if (_repo.UIStates.IsAuthorColumnVisibleInHistory != value)
{
_repo.UIStates.IsAuthorColumnVisibleInHistory = value;
OnPropertyChanged();
}
}
}
public bool IsSHAColumnVisible
{
get => _repo.UIStates.IsSHAColumnVisibleInHistory;
set
{
if (_repo.UIStates.IsSHAColumnVisibleInHistory != value)
{
_repo.UIStates.IsSHAColumnVisibleInHistory = value;
OnPropertyChanged();
}
}
}
public List<Models.Commit> Commits
{
get => _commits;

View File

@@ -79,14 +79,14 @@ namespace SourceGit.ViewModels
set => SetProperty(ref _selectedView, value);
}
public bool EnableTopoOrderInHistories
public bool EnableTopoOrderInHistory
{
get => _uiStates.EnableTopoOrderInHistories;
get => _uiStates.EnableTopoOrderInHistory;
set
{
if (value != _uiStates.EnableTopoOrderInHistories)
if (value != _uiStates.EnableTopoOrderInHistory)
{
_uiStates.EnableTopoOrderInHistories = value;
_uiStates.EnableTopoOrderInHistory = value;
RefreshCommits();
}
}
@@ -105,14 +105,14 @@ namespace SourceGit.ViewModels
}
}
public bool OnlyHighlightCurrentBranchInHistories
public bool OnlyHighlightCurrentBranchInHistory
{
get => _uiStates.OnlyHighlightCurrentBranchInHistories;
get => _uiStates.OnlyHighlightCurrentBranchInHistory;
set
{
if (value != _uiStates.OnlyHighlightCurrentBranchInHistories)
if (value != _uiStates.OnlyHighlightCurrentBranchInHistory)
{
_uiStates.OnlyHighlightCurrentBranchInHistories = value;
_uiStates.OnlyHighlightCurrentBranchInHistory = value;
OnPropertyChanged();
}
}

View File

@@ -165,7 +165,7 @@
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="80" CanUserResize="True" IsReadOnly="True">
<DataGridTemplateColumn MinWidth="80" CanUserResize="True" IsReadOnly="True" IsVisible="{Binding IsAuthorColumnVisible, Mode=OneWay}">
<DataGridTemplateColumn.Width>
<Binding Source="{x:Static vm:Preferences.Instance}"
Path="Layout.AuthorColumnWidth"
@@ -198,7 +198,7 @@
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="100" CanUserResize="False" IsReadOnly="True">
<DataGridTemplateColumn MinWidth="100" CanUserResize="False" IsReadOnly="True" IsVisible="{Binding IsSHAColumnVisible, Mode=OneWay}">
<DataGridTemplateColumn.Header>
<TextBlock Classes="table_header" Text="{DynamicResource Text.Histories.Header.SHA}" HorizontalAlignment="Center"/>
</DataGridTemplateColumn.Header>

View File

@@ -216,13 +216,16 @@ namespace SourceGit.Views
private void OnCommitListContextRequested(object sender, ContextRequestedEventArgs e)
{
if (sender is DataGrid { SelectedItems: { } selected } dataGrid &&
e.Source is Control { DataContext: Models.Commit })
if (e.Source is Control { DataContext: Models.Commit })
{
var repoView = this.FindAncestorOfType<Repository>();
if (repoView is not { DataContext: ViewModels.Repository repo })
return;
var selected = CommitListContainer.SelectedItems;
if (selected is not { Count: > 0 })
return;
var commits = new List<Models.Commit>();
for (var i = selected.Count - 1; i >= 0; i--)
{
@@ -233,14 +236,54 @@ namespace SourceGit.Views
if (selected.Count > 1)
{
var menu = CreateContextMenuForMultipleCommits(repo, commits);
menu.Open(dataGrid);
menu.Open(CommitListContainer);
}
else if (selected.Count == 1)
{
var menu = CreateContextMenuForSingleCommit(repo, commits[0]);
menu.Open(dataGrid);
menu.Open(CommitListContainer);
}
}
else if (e.Source is Control elem)
{
var headersPresenter = CommitListContainer.FindDescendantOfType<DataGridColumnHeadersPresenter>();
if (!headersPresenter.IsVisualAncestorOf(elem))
return;
if (DataContext is not ViewModels.Histories vm)
return;
var columnsHeader = new MenuItem();
columnsHeader.Header = App.Text("Histories.ShowColumns");
columnsHeader.IsEnabled = false;
var authorColumn = new MenuItem();
authorColumn.Header = App.Text("Histories.Header.Author");
if (vm.IsAuthorColumnVisible)
authorColumn.Icon = App.CreateMenuIcon("Icons.Check");
authorColumn.Click += (_, ev) =>
{
vm.IsAuthorColumnVisible = !vm.IsAuthorColumnVisible;
ev.Handled = true;
};
var shaColumn = new MenuItem();
shaColumn.Header = App.Text("Histories.Header.SHA");
if (vm.IsSHAColumnVisible)
shaColumn.Icon = App.CreateMenuIcon("Icons.Check");
shaColumn.Click += (_, ev) =>
{
vm.IsSHAColumnVisible = !vm.IsSHAColumnVisible;
ev.Handled = true;
};
var menu = new ContextMenu();
menu.Items.Add(columnsHeader);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(authorColumn);
menu.Items.Add(shaColumn);
menu.Open(CommitListContainer);
}
e.Handled = true;
}

View File

@@ -105,7 +105,7 @@
Classes="line_path"
Width="26" Height="26"
Background="Transparent"
IsChecked="{Binding OnlyHighlightCurrentBranchInHistories, Mode=TwoWay}"
IsChecked="{Binding OnlyHighlightCurrentBranchInHistory, Mode=TwoWay}"
ToolTip.Tip="{DynamicResource Text.Repository.OnlyHighlightCurrentBranchInGraph}">
<Path Width="12" Height="12" Data="{StaticResource Icons.LightOn}"/>
</ToggleButton>
@@ -851,7 +851,7 @@
<v:Histories CurrentBranch="{Binding $parent[v:Repository].((vm:Repository)DataContext).CurrentBranch}"
Bisect="{Binding Bisect}"
IssueTrackers="{Binding $parent[v:Repository].((vm:Repository)DataContext).IssueTrackers}"
OnlyHighlightCurrentBranch="{Binding $parent[v:Repository].((vm:Repository)DataContext).OnlyHighlightCurrentBranchInHistories}"
OnlyHighlightCurrentBranch="{Binding $parent[v:Repository].((vm:Repository)DataContext).OnlyHighlightCurrentBranchInHistory}"
NavigationId="{Binding NavigationId}"/>
</DataTemplate>

View File

@@ -407,22 +407,22 @@ namespace SourceGit.Views
var dateOrder = new MenuItem();
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
dateOrder.Tag = "--date-order";
if (!repo.EnableTopoOrderInHistories)
if (!repo.EnableTopoOrderInHistory)
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
dateOrder.Click += (_, ev) =>
{
repo.EnableTopoOrderInHistories = false;
repo.EnableTopoOrderInHistory = false;
ev.Handled = true;
};
var topoOrder = new MenuItem();
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
topoOrder.Tag = "--topo-order";
if (repo.EnableTopoOrderInHistories)
if (repo.EnableTopoOrderInHistory)
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
topoOrder.Click += (_, ev) =>
{
repo.EnableTopoOrderInHistories = true;
repo.EnableTopoOrderInHistory = true;
ev.Handled = true;
};