Skip to content

Commit 072acc6

Browse files
committed
feature: support to collapse commit details panel (only vertical layout)
Signed-off-by: leo <longshuang@msn.cn>
1 parent d85f709 commit 072acc6

7 files changed

Lines changed: 177 additions & 36 deletions

File tree

src/Resources/Icons.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<StreamGeometry x:Key="Icons.Clone">M1280 704c0 141-115 256-256 256H288C129 960 0 831 0 672c0-126 80-232 192-272A327 327 0 01192 384c0-177 143-320 320-320 119 0 222 64 277 160C820 204 857 192 896 192c106 0 192 86 192 192 0 24-5 48-13 69C1192 477 1280 580 1280 704zm-493-128H656V352c0-18-14-32-32-32h-96c-18 0-32 14-32 32v224h-131c-29 0-43 34-23 55l211 211c12 12 33 12 45 0l211-211c20-20 6-55-23-55z</StreamGeometry>
2424
<StreamGeometry x:Key="Icons.Close">M523 398 918 3l113 113-396 396 397 397-113 113-397-397-397 397-113-113 397-397L14 116l113-113 396 396z</StreamGeometry>
2525
<StreamGeometry x:Key="Icons.Code">M853 102H171C133 102 102 133 102 171v683C102 891 133 922 171 922h683C891 922 922 891 922 853V171C922 133 891 102 853 102zM390 600l-48 48L205 512l137-137 48 48L301 512l88 88zM465 819l-66-18L559 205l66 18L465 819zm218-171L634 600 723 512l-88-88 48-48L819 512 683 649z</StreamGeometry>
26+
<StreamGeometry x:Key="Icons.CollapseToBottom">M213 896h597c47 0 85-38 85-85V213c0-47-38-85-85-85H213c-47 0-85 38-85 85v597c0 47 38 85 85 85zM811 213l0 384H213V213h597z</StreamGeometry>
2627
<StreamGeometry x:Key="Icons.ColorPicker">M128 854h768v86H128zM390 797c13 13 29 19 48 19s35-6 45-19l291-288c26-22 26-64 0-90L435 83l-61 61L426 192l-272 269c-22 22-22 64 0 90l237 246zm93-544 211 211-32 32H240l243-243zM707 694c0 48 38 86 86 86 48 0 86-38 86-86 0-22-10-45-26-61L794 576l-61 61c-13 13-26 35-26 58z</StreamGeometry>
2728
<StreamGeometry x:Key="Icons.Command">M325 312l-60 60L404 513 265 652l60 60 200-200L325 312zm194 345h236v97h-236v-97zM29 77v870h968V77H29zm870 774H125V173h774v678z</StreamGeometry>
2829
<StreamGeometry x:Key="Icons.Commit">M0 512M1024 512M512 0M512 1024M796 471A292 292 0 00512 256a293 293 0 00-284 215H0v144h228A293 293 0 00512 832a291 291 0 00284-217H1024V471h-228M512 688A146 146 0 01366 544A145 145 0 01512 400c80 0 146 63 146 144A146 146 0 01512 688</StreamGeometry>

src/Resources/Styles.axaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1385,11 +1385,14 @@
13851385
<Setter Property="Foreground" Value="{DynamicResource Brush.FG1}"/>
13861386
<Setter Property="Opacity" Value="1"/>
13871387
</Style>
1388-
13891388
<Style Selector="TabItem:selected TextBlock.tab_header">
13901389
<Setter Property="Foreground" Value="{DynamicResource Brush.Accent}"/>
13911390
<Setter Property="Opacity" Value="1"/>
13921391
</Style>
1392+
<Style Selector="TabItem:disabled TextBlock.tab_header">
1393+
<Setter Property="Foreground" Value="{DynamicResource Brush.FG1}"/>
1394+
<Setter Property="Opacity" Value="0.35"/>
1395+
</Style>
13931396

13941397
<Style Selector="NumericUpDown">
13951398
<Style Selector="^ /template/ ButtonSpinner#PART_Spinner">

src/ViewModels/Histories.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,25 @@ public GridLength TopArea
138138

139139
public GridLength BottomArea
140140
{
141-
get => _bottomArea;
142-
set => SetProperty(ref _bottomArea, value);
141+
get => _isCollapseDetails ? new GridLength(28, GridUnitType.Pixel) : _bottomArea;
142+
set
143+
{
144+
if (!Preferences.Instance.UseTwoColumnsLayoutInHistories && !_isCollapseDetails)
145+
SetProperty(ref _bottomArea, value);
146+
}
147+
}
148+
149+
public bool IsCollapseDetails
150+
{
151+
get => _isCollapseDetails;
152+
set
153+
{
154+
if (!Preferences.Instance.UseTwoColumnsLayoutInHistories && SetProperty(ref _isCollapseDetails, value))
155+
{
156+
OnPropertyChanged(nameof(TopArea));
157+
OnPropertyChanged(nameof(BottomArea));
158+
}
159+
}
143160
}
144161

145162
public Histories(Repository repo)
@@ -493,5 +510,6 @@ private void PostSelectedCommitsChanged()
493510
private GridLength _rightArea = new GridLength(1, GridUnitType.Star);
494511
private GridLength _topArea = new GridLength(1, GridUnitType.Star);
495512
private GridLength _bottomArea = new GridLength(1, GridUnitType.Star);
513+
private bool _isCollapseDetails = false;
496514
}
497515
}

src/Views/CommitDetail.axaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
<!-- Information Page -->
1414
<TabItem>
1515
<TabItem.Header>
16-
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Info}"/>
16+
<Border Background="Transparent" PointerPressed="OnTabHeaderPointerPressed">
17+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Info}"/>
18+
</Border>
1719
</TabItem.Header>
1820

1921
<ScrollViewer Margin="4,0,0,0" Offset="{Binding ScrollOffset, Mode=TwoWay}" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
@@ -83,14 +85,18 @@
8385

8486
<TabItem>
8587
<TabItem.Header>
86-
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Changes}"/>
88+
<Border Background="Transparent" PointerPressed="OnTabHeaderPointerPressed">
89+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Changes}"/>
90+
</Border>
8791
</TabItem.Header>
8892
<v:CommitChanges Margin="4,0"/>
8993
</TabItem>
9094

9195
<TabItem>
9296
<TabItem.Header>
93-
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Files}"/>
97+
<Border Background="Transparent" PointerPressed="OnTabHeaderPointerPressed">
98+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Files}"/>
99+
</Border>
94100
</TabItem.Header>
95101
<v:RevisionFiles Margin="4,0"/>
96102
</TabItem>

src/Views/CommitDetail.axaml.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Avalonia.Input;
88
using Avalonia.LogicalTree;
99
using Avalonia.Platform.Storage;
10+
using Avalonia.VisualTree;
1011

1112
namespace SourceGit.Views
1213
{
@@ -472,6 +473,19 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
472473
return menu;
473474
}
474475

476+
private void OnTabHeaderPointerPressed(object sender, PointerPressedEventArgs e)
477+
{
478+
if (ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories)
479+
return;
480+
481+
var historiesView = this.FindAncestorOfType<Histories>();
482+
if (historiesView is not { DataContext: ViewModels.Histories vm })
483+
return;
484+
485+
if (vm.IsCollapseDetails)
486+
vm.IsCollapseDetails = false;
487+
}
488+
475489
private async void OnCommitListKeyDown(object sender, KeyEventArgs e)
476490
{
477491
if (DataContext is not ViewModels.CommitDetail vm)

src/Views/Histories.axaml

Lines changed: 117 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<v:HistoriesLayout.RowDefinitions>
1515
<RowDefinition Height="{Binding TopArea, Mode=TwoWay}" MinHeight="100"/>
1616
<RowDefinition Height="3"/>
17-
<RowDefinition Height="{Binding BottomArea, Mode=TwoWay}" MinHeight="200"/>
17+
<RowDefinition Height="{Binding BottomArea, Mode=TwoWay}" MinHeight="28"/>
1818
</v:HistoriesLayout.RowDefinitions>
1919

2020
<v:HistoriesLayout.ColumnDefinitions>
@@ -268,49 +268,136 @@
268268
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
269269
Background="{DynamicResource Brush.Window}"
270270
BorderBrush="{DynamicResource Brush.Border0}"
271-
Focusable="False"/>
271+
Focusable="False">
272+
<GridSplitter.IsEnabled>
273+
<MultiBinding Converter="{x:Static BoolConverters.Or}">
274+
<Binding Source="{x:Static vm:Preferences.Instance}" Path="UseTwoColumnsLayoutInHistories"/>
275+
<Binding Path="IsCollapseDetails" Converter="{x:Static BoolConverters.Not}"/>
276+
</MultiBinding>
277+
</GridSplitter.IsEnabled>
278+
</GridSplitter>
272279

273280
<Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3">
274-
<Grid IsVisible="{Binding DetailContext, Converter={x:Static ObjectConverters.IsNull}}">
275-
<Path Width="128" Height="128"
276-
Data="{StaticResource Icons.Detail}"
277-
HorizontalAlignment="Center"
278-
Fill="{DynamicResource Brush.FG2}"/>
279-
280-
<StackPanel Margin="0,8" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom">
281-
<Path Width="12" Height="12" VerticalAlignment="Center" Data="{StaticResource Icons.Info}" Fill="{DynamicResource Brush.FG2}"/>
282-
<TextBlock Margin="4,0" Text="{DynamicResource Text.Histories.Tips.Prefix}" FontWeight="Bold" Foreground="{DynamicResource Brush.FG2}"/>
283-
<TextBlock Text="{DynamicResource Text.Histories.Tips}" Foreground="{DynamicResource Brush.FG2}" IsVisible="{OnPlatform True, macOS=False}"/>
284-
<TextBlock Text="{DynamicResource Text.Histories.Tips.MacOS}" Foreground="{DynamicResource Brush.FG2}" IsVisible="{OnPlatform False, macOS=True}"/>
285-
</StackPanel>
286-
</Grid>
287-
288-
<ContentControl Content="{Binding DetailContext}">
281+
<ContentControl>
282+
<ContentControl.Content>
283+
<Binding Path="DetailContext">
284+
<Binding.TargetNullValue>
285+
<TabControl Padding="0,4">
286+
<TabItem>
287+
<TabItem.Header>
288+
<Border Background="Transparent" PointerPressed="OnTabHeaderPointerPressed">
289+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Info}"/>
290+
</Border>
291+
</TabItem.Header>
292+
293+
<Grid Margin="0,32,0,0" ClipToBounds="True">
294+
<Path Width="128" Height="128"
295+
Data="{StaticResource Icons.Detail}"
296+
HorizontalAlignment="Center"
297+
Fill="{DynamicResource Brush.FG2}"/>
298+
299+
<StackPanel Margin="0,8" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom">
300+
<Path Width="12" Height="12" VerticalAlignment="Center" Data="{StaticResource Icons.Info}" Fill="{DynamicResource Brush.FG2}"/>
301+
<TextBlock Margin="4,0" Text="{DynamicResource Text.Histories.Tips.Prefix}" FontWeight="Bold" Foreground="{DynamicResource Brush.FG2}"/>
302+
<TextBlock Text="{DynamicResource Text.Histories.Tips}" Foreground="{DynamicResource Brush.FG2}" IsVisible="{OnPlatform True, macOS=False}"/>
303+
<TextBlock Text="{DynamicResource Text.Histories.Tips.MacOS}" Foreground="{DynamicResource Brush.FG2}" IsVisible="{OnPlatform False, macOS=True}"/>
304+
</StackPanel>
305+
</Grid>
306+
</TabItem>
307+
308+
<TabItem IsEnabled="False">
309+
<TabItem.Header>
310+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Changes}"/>
311+
</TabItem.Header>
312+
</TabItem>
313+
314+
<TabItem IsEnabled="False">
315+
<TabItem.Header>
316+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Files}"/>
317+
</TabItem.Header>
318+
</TabItem>
319+
</TabControl>
320+
</Binding.TargetNullValue>
321+
</Binding>
322+
</ContentControl.Content>
323+
289324
<ContentControl.DataTemplates>
290325
<DataTemplate DataType="vm:CommitDetail">
291326
<v:CommitDetail/>
292327
</DataTemplate>
293328

294329
<DataTemplate DataType="vm:RevisionCompare">
295-
<v:RevisionCompare/>
330+
<TabControl SelectedIndex="1" Padding="0">
331+
<TabItem IsEnabled="False">
332+
<TabItem.Header>
333+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Info}"/>
334+
</TabItem.Header>
335+
</TabItem>
336+
337+
<TabItem>
338+
<TabItem.Header>
339+
<Border Background="Transparent" PointerPressed="OnTabHeaderPointerPressed">
340+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Changes}"/>
341+
</Border>
342+
</TabItem.Header>
343+
344+
<v:RevisionCompare/>
345+
</TabItem>
346+
347+
<TabItem IsEnabled="False">
348+
<TabItem.Header>
349+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Files}"/>
350+
</TabItem.Header>
351+
</TabItem>
352+
</TabControl>
296353
</DataTemplate>
297354

298355
<DataTemplate DataType="m:Count">
299-
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
300-
<Path Width="128" Height="128"
301-
Data="{StaticResource Icons.Detail}"
302-
HorizontalAlignment="Center"
303-
Fill="{DynamicResource Brush.FG2}"/>
304-
305-
<TextBlock HorizontalAlignment="Center"
306-
Margin="0,16"
307-
FontSize="24" FontWeight="Bold"
308-
Foreground="{DynamicResource Brush.FG2}"
309-
Text="{Binding Value, Converter={x:Static c:StringConverters.FormatByResourceKey}, ConverterParameter='Histories.Selected'}"/>
310-
</StackPanel>
356+
<TabControl Padding="0,4">
357+
<TabItem>
358+
<TabItem.Header>
359+
<Border Background="Transparent" PointerPressed="OnTabHeaderPointerPressed">
360+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Info}"/>
361+
</Border>
362+
</TabItem.Header>
363+
364+
<StackPanel ClipToBounds="True" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
365+
<Path Width="128" Height="128"
366+
Data="{StaticResource Icons.Detail}"
367+
HorizontalAlignment="Center"
368+
Fill="{DynamicResource Brush.FG2}"/>
369+
370+
<TextBlock HorizontalAlignment="Center"
371+
Margin="0,16"
372+
FontSize="24" FontWeight="Bold"
373+
Foreground="{DynamicResource Brush.FG2}"
374+
Text="{Binding Value, Converter={x:Static c:StringConverters.FormatByResourceKey}, ConverterParameter='Histories.Selected'}"/>
375+
</StackPanel>
376+
</TabItem>
377+
378+
<TabItem IsEnabled="False">
379+
<TabItem.Header>
380+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Changes}"/>
381+
</TabItem.Header>
382+
</TabItem>
383+
384+
<TabItem IsEnabled="False">
385+
<TabItem.Header>
386+
<TextBlock Classes="tab_header" Text="{DynamicResource Text.CommitDetail.Files}"/>
387+
</TabItem.Header>
388+
</TabItem>
389+
</TabControl>
311390
</DataTemplate>
312391
</ContentControl.DataTemplates>
313392
</ContentControl>
393+
394+
<ToggleButton Classes="line_path"
395+
HorizontalAlignment="Right" VerticalAlignment="Top"
396+
Margin="0,2,8,0"
397+
IsChecked="{Binding IsCollapseDetails, Mode=TwoWay}"
398+
IsVisible="{Binding Source={x:Static vm:Preferences.Instance}, Path=UseTwoColumnsLayoutInHistories, Mode=OneWay, Converter={x:Static BoolConverters.Not}}">
399+
<Path Width="14" Height="14" Data="{StaticResource Icons.CollapseToBottom}" Margin="0,3,0,0"/>
400+
</ToggleButton>
314401
</Grid>
315402
</v:HistoriesLayout>
316403
</UserControl>

src/Views/Histories.axaml.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,18 @@ sender is DataGrid grid &&
595595
}
596596
}
597597

598+
private void OnTabHeaderPointerPressed(object sender, PointerPressedEventArgs e)
599+
{
600+
if (ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories)
601+
return;
602+
603+
if (DataContext is not ViewModels.Histories vm)
604+
return;
605+
606+
if (vm.IsCollapseDetails)
607+
vm.IsCollapseDetails = false;
608+
}
609+
598610
private ContextMenu CreateContextMenuForMultipleCommits(ViewModels.Repository repo, List<Models.Commit> selected)
599611
{
600612
var canCherryPick = true;

0 commit comments

Comments
 (0)