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 @@ -830,6 +830,7 @@
<x:String x:Key="Text.Repository.HistoriesLayout" xml:space="preserve">LAYOUT</x:String>
<x:String x:Key="Text.Repository.HistoriesLayout.Horizontal" xml:space="preserve">Horizontal</x:String>
<x:String x:Key="Text.Repository.HistoriesLayout.Vertical" xml:space="preserve">Vertical</x:String>
<x:String x:Key="Text.Repository.HistoriesLayout.WideDetails" xml:space="preserve">Wide Details</x:String>
<x:String x:Key="Text.Repository.HistoriesOrder" xml:space="preserve">COMMITS ORDER</x:String>
<x:String x:Key="Text.Repository.HistoriesOrder.ByDate" xml:space="preserve">Commit Date</x:String>
<x:String x:Key="Text.Repository.HistoriesOrder.Topo" xml:space="preserve">Topologically</x:String>
Expand Down
17 changes: 16 additions & 1 deletion src/ViewModels/Preferences.cs
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,21 @@ public bool UseCompactBranchNamesInGraph
public bool UseTwoColumnsLayoutInHistories
{
get => _useTwoColumnsLayoutInHistories;
set => SetProperty(ref _useTwoColumnsLayoutInHistories, value);
set
{
if (SetProperty(ref _useTwoColumnsLayoutInHistories, value) && value)
UseWideDetailsLayoutInHistories = false;
}
}

public bool UseWideDetailsLayoutInHistories
{
get => _useWideDetailsLayoutInHistories;
set
{
if (SetProperty(ref _useWideDetailsLayoutInHistories, value) && value)
UseTwoColumnsLayoutInHistories = false;
}
}

public bool DisplayTimeAsPeriodInHistories
Expand Down Expand Up @@ -813,6 +827,7 @@ private bool RemoveInvalidRepositoriesRecursive(List<RepositoryNode> collection)

private bool _showTagsInGraph = true;
private bool _useTwoColumnsLayoutInHistories = false;
private bool _useWideDetailsLayoutInHistories = false;
private bool _displayTimeAsPeriodInHistories = false;
private bool _useSideBySideDiff = false;
private bool _ignoreWhitespaceChangesInDiff = false;
Expand Down
536 changes: 269 additions & 267 deletions src/Views/Histories.axaml

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion src/Views/Histories.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,8 @@ private void DecrNoSelectionChangeCount()

public partial class Histories : UserControl
{
internal Grid SidebarHost => HistoryArea;

public static readonly DirectProperty<Histories, Models.Branch> CurrentBranchProperty =
AvaloniaProperty.RegisterDirect<Histories, Models.Branch>(
nameof(CurrentBranch),
Expand Down Expand Up @@ -550,11 +552,22 @@ private void OnOpenAdvancedOptions(object sender, RoutedEventArgs e)

var vertical = new MenuItem();
vertical.Header = App.Text("Repository.HistoriesLayout.Vertical");
if (!isHorizontal)
if (!isHorizontal && !pref.UseWideDetailsLayoutInHistories)
vertical.Icon = this.CreateMenuIcon("Icons.Check");
vertical.Click += (_, ev) =>
{
pref.UseTwoColumnsLayoutInHistories = false;
pref.UseWideDetailsLayoutInHistories = false;
ev.Handled = true;
};

var wideDetails = new MenuItem();
wideDetails.Header = App.Text("Repository.HistoriesLayout.WideDetails");
if (pref.UseWideDetailsLayoutInHistories)
wideDetails.Icon = this.CreateMenuIcon("Icons.Check");
wideDetails.Click += (_, ev) =>
{
pref.UseWideDetailsLayoutInHistories = true;
ev.Handled = true;
};

Expand Down Expand Up @@ -724,6 +737,7 @@ private void OnOpenAdvancedOptions(object sender, RoutedEventArgs e)
menu.Items.Add(layout);
menu.Items.Add(horizontal);
menu.Items.Add(vertical);
menu.Items.Add(wideDetails);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(showFlags);
menu.Items.Add(reflog);
Expand Down
20 changes: 14 additions & 6 deletions src/Views/Repository.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
x:Class="SourceGit.Views.Repository"
x:DataType="vm:Repository"
x:Name="ThisControl">
<v:Repository.IsWideDetailsLayoutActive>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Source="{x:Static vm:Preferences.Instance}" Path="UseWideDetailsLayoutInHistories"/>
<Binding Path="IsDashboardVisible"/>
</MultiBinding>
</v:Repository.IsWideDetailsLayoutActive>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="49"/>
Expand Down Expand Up @@ -250,15 +256,17 @@
</Grid>

<!-- Main Body -->
<Grid Grid.Row="1" Background="{DynamicResource Brush.Window}">
<Grid x:Name="MainBody" Grid.Row="1" Background="{DynamicResource Brush.Window}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding #ThisControl.SidebarWidth, Mode=TwoWay}" MinWidth="{Binding #ThisControl.SidebarMinWidth, Mode=OneWay}"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" MinWidth="100"/>
</Grid.ColumnDefinitions>

<!-- Sidebar (Branches/Remotes/Tags/Submodules/Worktrees) -->
<Grid Grid.Column="0" RowDefinitions="Auto,*" IsVisible="{Binding #ThisControl.IsNormalSidebarVisible, Mode=OneWay}">
<Grid x:Name="Sidebar" Grid.Column="0" RowDefinitions="Auto,*"
DataContext="{Binding #ThisControl.DataContext}"
IsVisible="{Binding #ThisControl.IsNormalSidebarVisible, Mode=OneWay}">
<!-- Filter Branches/Tags/Submodules -->
<TextBox Grid.Row="0"
x:Name="FilterBox"
Expand Down Expand Up @@ -575,13 +583,13 @@
</Grid>

<!-- Commit Search Panel -->
<v:CommitSearchView Grid.Column="0"
<v:CommitSearchView x:Name="CommitSearchPanel" Grid.Column="0"
Margin="6,0,4,0"
DataContext="{Binding Histories.SearchCommitContext, Mode=OneWay}"
DataContext="{Binding #ThisControl.DataContext.Histories.SearchCommitContext, Mode=OneWay}"
IsVisible="{Binding #ThisControl.IsCommitSearchPanelVisible, Mode=OneWay}"/>

<!-- Splitter -->
<GridSplitter Grid.Column="1"
<GridSplitter x:Name="SidebarSplitter" Grid.Column="1"
Width="3" MinWidth="3" MaxWidth="3"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Background="Transparent"
Expand Down Expand Up @@ -788,7 +796,7 @@
</Border>

<!-- History -->
<v:Histories Grid.Row="2"
<v:Histories x:Name="DashboardHistories" Grid.Row="2"
DataContext="{Binding Histories, Mode=OneWay}"
CurrentBranch="{Binding CurrentBranch, Mode=OneWay}"
Bisect="{Binding Bisect, Mode=OneWay}"
Expand Down
45 changes: 45 additions & 0 deletions src/Views/Repository.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,22 @@ namespace SourceGit.Views
{
public partial class Repository : UserControl
{
public static readonly DirectProperty<Repository, bool> IsWideDetailsLayoutActiveProperty =
AvaloniaProperty.RegisterDirect<Repository, bool>(
nameof(IsWideDetailsLayoutActive),
static o => o.IsWideDetailsLayoutActive,
static (o, v) => o.IsWideDetailsLayoutActive = v);

public bool IsWideDetailsLayoutActive
{
get => _isWideDetailsLayoutActive;
set
{
if (SetAndRaise(IsWideDetailsLayoutActiveProperty, ref _isWideDetailsLayoutActive, value))
UpdateSidebarPlacement();
}
}

public static readonly DirectProperty<Repository, bool> IsCommitSearchPanelVisibleProperty =
AvaloniaProperty.RegisterDirect<Repository, bool>(
nameof(IsCommitSearchPanelVisible),
Expand Down Expand Up @@ -85,6 +101,33 @@ public Repository()
protected override void OnLoaded(RoutedEventArgs e)
{
base.OnLoaded(e);
UpdateSidebarPlacement();
UpdateLeftSidebarLayout();
}

private void UpdateSidebarPlacement()
{
if (MainBody == null || DashboardHistories == null || _sidebarInHistory == _isWideDetailsLayoutActive)
return;

var historyArea = DashboardHistories.SidebarHost;
var source = _sidebarInHistory ? historyArea : MainBody;
var target = _isWideDetailsLayoutActive ? historyArea : MainBody;

// Move the existing sidebar and its bound width together so resizing and
// collapse/search state work identically in either location.
source.Children.Remove(Sidebar);
source.Children.Remove(CommitSearchPanel);
source.Children.Remove(SidebarSplitter);

var column = source.ColumnDefinitions[0];
source.ColumnDefinitions[0] = target.ColumnDefinitions[0];
target.ColumnDefinitions[0] = column;

target.Children.Add(Sidebar);
target.Children.Add(CommitSearchPanel);
target.Children.Add(SidebarSplitter);
_sidebarInHistory = _isWideDetailsLayoutActive;
UpdateLeftSidebarLayout();
}

Expand Down Expand Up @@ -531,6 +574,8 @@ private void CalculateSidebarWidth()
}

private bool _isNormalSidebarVisible = true;
private bool _isWideDetailsLayoutActive = false;
private bool _sidebarInHistory = false;
private bool _isCommitSearchPanelVisible = false;
private double _sidebarMinWidth = 200;
private GridLength _sidebarWidth;
Expand Down
10 changes: 10 additions & 0 deletions tests/LayoutChecks/LayoutChecks.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="../../src/SourceGit.csproj" />
</ItemGroup>
</Project>
Loading