diff --git a/src/ViewModels/Histories.cs b/src/ViewModels/Histories.cs index 092a89f21..a96bf7fe7 100644 --- a/src/ViewModels/Histories.cs +++ b/src/ViewModels/Histories.cs @@ -144,10 +144,10 @@ public GridLength TopArea public GridLength BottomArea { - get => _isCollapseDetails ? new GridLength(28, GridUnitType.Pixel) : _bottomArea; + get => _bottomArea; set { - if (!Preferences.Instance.UseTwoColumnsLayoutInHistories && !_isCollapseDetails) + if (!Preferences.Instance.UseTwoColumnsLayoutInHistories) SetProperty(ref _bottomArea, value); } } @@ -168,14 +168,43 @@ public bool IsCollapseDetails get => _isCollapseDetails; set { - if (!Preferences.Instance.UseTwoColumnsLayoutInHistories && SetProperty(ref _isCollapseDetails, value)) - { - OnPropertyChanged(nameof(TopArea)); - OnPropertyChanged(nameof(BottomArea)); - } + if (Preferences.Instance.UseTwoColumnsLayoutInHistories) + return; + + if (SetProperty(ref _isCollapseDetails, value)) + if (value) + { + _bottomAreaBackup = _bottomArea; + BottomArea = new GridLength(28, GridUnitType.Pixel); + } + else + BottomArea = _bottomAreaBackup; } } + public void BeginDetailsResize() + { + if (!Preferences.Instance.UseTwoColumnsLayoutInHistories && !_isCollapseDetails) + _bottomAreaBackup = _bottomArea; + } + + public void PreviewDetailsResize(bool shouldCollapse) + { + if (!Preferences.Instance.UseTwoColumnsLayoutInHistories) + SetProperty(ref _isCollapseDetails, shouldCollapse, nameof(IsCollapseDetails)); + } + + public void EndDetailsResize(bool shouldCollapse) + { + if (Preferences.Instance.UseTwoColumnsLayoutInHistories) + return; + + SetProperty(ref _isCollapseDetails, shouldCollapse, nameof(IsCollapseDetails)); + + if (shouldCollapse) + BottomArea = new GridLength(28, GridUnitType.Pixel); + } + public Histories(Repository repo) { _repo = repo; @@ -506,6 +535,7 @@ private void GenerateGraph(List commits, bool commitsChanged = fa private GridLength _rightArea = new(1, GridUnitType.Star); private GridLength _topArea = new(1, GridUnitType.Star); private GridLength _bottomArea = new(1, GridUnitType.Star); + private GridLength _bottomAreaBackup = new(1, GridUnitType.Star); private bool _isCollapseDetails = false; } } diff --git a/src/Views/Histories.axaml b/src/Views/Histories.axaml index 871b3afa6..6f39f9f56 100644 --- a/src/Views/Histories.axaml +++ b/src/Views/Histories.axaml @@ -259,9 +259,11 @@ Background="{DynamicResource Brush.Window}" BorderBrush="{DynamicResource Brush.Border0}" Focusable="False" - IsEnabled="{Binding #ThisControl.IsDetailsPanelExpanded, Mode=OneWay}"/> + DragStarted="OnDetailsSplitterDragStarted" + DragDelta="OnDetailsSplitterDragDelta" + DragCompleted="OnDetailsSplitterDragCompleted"/> - + diff --git a/src/Views/Histories.axaml.cs b/src/Views/Histories.axaml.cs index c845cca43..6a739dd9c 100644 --- a/src/Views/Histories.axaml.cs +++ b/src/Views/Histories.axaml.cs @@ -648,6 +648,33 @@ private void OnTabHeaderPointerPressed(object sender, PointerPressedEventArgs e) vm.IsCollapseDetails = false; } + private void OnDetailsSplitterDragStarted(object sender, VectorEventArgs e) + { + if (ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories) + return; + + if (DataContext is ViewModels.Histories vm) + vm.BeginDetailsResize(); + } + + private void OnDetailsSplitterDragDelta(object sender, VectorEventArgs e) + { + if (ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories) + return; + + if (DataContext is ViewModels.Histories vm) + vm.PreviewDetailsResize(DetailsArea.Bounds.Height <= 48); + } + + private void OnDetailsSplitterDragCompleted(object sender, VectorEventArgs e) + { + if (ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories) + return; + + if (DataContext is ViewModels.Histories vm) + vm.EndDetailsResize(DetailsArea.Bounds.Height <= 48); + } + private void OnOpenDetailsAsStandalone(object sender, RoutedEventArgs e) { if (DataContext is ViewModels.Histories vm)