Skip to content

Commit 1c524cf

Browse files
committed
enhance: better sidebar layout
1 parent 3193693 commit 1c524cf

File tree

1 file changed

+92
-25
lines changed

1 file changed

+92
-25
lines changed

src/Views/Repository.axaml.cs

Lines changed: 92 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -414,46 +414,113 @@ private void UpdateLeftSidebarLayout()
414414
return;
415415

416416
var leftHeight = leftSidebarGroups.Bounds.Height - 28.0 * 5;
417+
var localBranchRows = vm.IsLocalBranchGroupExpanded ? GetTreeRowsCount(vm.LocalBranchTrees) : 0;
418+
var remoteBranchRows = vm.IsRemoteGroupExpanded ? GetTreeRowsCount(vm.RemoteBranchTrees) : 0;
419+
var desiredBranches = (localBranchRows + remoteBranchRows) * 24.0;
420+
var desiredTag = vm.IsTagGroupExpanded ? tagsList.RowHeight * vm.VisibleTags.Count : 0;
421+
var desiredSubmodule = vm.IsSubmoduleGroupExpanded ? submoduleList.RowHeight * vm.Submodules.Count : 0;
422+
var desiredWorktree = vm.IsWorktreeGroupExpanded ? worktreeList.RowHeight * vm.Worktrees.Count : 0;
423+
var desiredOthers = desiredTag + desiredSubmodule + desiredWorktree;
424+
var hasOverflow = (desiredBranches + desiredOthers > leftHeight);
425+
417426
if (vm.IsTagGroupExpanded)
418427
{
419-
var desiredHeight = Math.Min(200.0, tagsList.RowHeight * vm.VisibleTags.Count);
420-
leftHeight -= desiredHeight;
421-
if (!tagsList.Height.IsClose(desiredHeight))
422-
tagsList.Height = desiredHeight;
428+
var height = desiredTag;
429+
if (hasOverflow)
430+
{
431+
var test = leftHeight - desiredBranches - desiredSubmodule - desiredWorktree;
432+
if (test < 0)
433+
height = Math.Min(200, height);
434+
else
435+
height = Math.Max(200, test);
436+
}
437+
438+
leftHeight -= height;
439+
tagsList.Height = height;
440+
hasOverflow = (desiredBranches + desiredSubmodule + desiredWorktree) > leftHeight;
423441
}
424442

425443
if (vm.IsSubmoduleGroupExpanded)
426444
{
427-
var desiredHeight = Math.Min(200.0, submoduleList.RowHeight * vm.Submodules.Count);
428-
leftHeight -= desiredHeight;
429-
if (!submoduleList.Height.IsClose(desiredHeight))
430-
submoduleList.Height = desiredHeight;
445+
var height = desiredSubmodule;
446+
if (hasOverflow)
447+
{
448+
var test = leftHeight - desiredBranches - desiredWorktree;
449+
if (test < 0)
450+
height = Math.Min(200, height);
451+
else
452+
height = Math.Max(200, test);
453+
}
454+
455+
leftHeight -= height;
456+
submoduleList.Height = height;
457+
hasOverflow = (desiredBranches + desiredWorktree) > leftHeight;
431458
}
432459

433460
if (vm.IsWorktreeGroupExpanded)
434461
{
435-
var desiredHeight = Math.Min(200.0, worktreeList.RowHeight * vm.Worktrees.Count);
436-
leftHeight -= desiredHeight;
437-
if (!worktreeList.Height.IsClose(desiredHeight))
438-
worktreeList.Height = desiredHeight;
462+
var height = desiredWorktree;
463+
if (hasOverflow)
464+
{
465+
var test = leftHeight - desiredBranches;
466+
if (test < 0)
467+
height = Math.Min(200, height);
468+
else
469+
height = Math.Max(200, test);
470+
}
471+
472+
leftHeight -= height;
473+
worktreeList.Height = height;
439474
}
440475

441-
if (vm.IsLocalBranchGroupExpanded)
476+
if (desiredBranches > leftHeight)
442477
{
443-
var localBranchMax = vm.IsRemoteGroupExpanded ? leftHeight * 0.5 : leftHeight;
444-
var desiredHeight = GetTreeRowsCount(vm.LocalBranchTrees) * 24;
445-
var localBranchHeight = Math.Min(localBranchMax, desiredHeight);
446-
if (!localBranchTree.Height.IsClose(localBranchHeight))
447-
localBranchTree.Height = localBranchHeight;
448-
leftHeight -= localBranchHeight;
478+
var local = localBranchRows * 24.0;
479+
var remote = remoteBranchRows * 24.0;
480+
var half = leftHeight / 2;
481+
if (vm.IsLocalBranchGroupExpanded)
482+
{
483+
if (vm.IsRemoteGroupExpanded)
484+
{
485+
if (local < half)
486+
{
487+
localBranchTree.Height = local;
488+
remoteBranchTree.Height = leftHeight - local;
489+
}
490+
else if (remote < half)
491+
{
492+
remoteBranchTree.Height = remote;
493+
localBranchTree.Height = leftHeight - remote;
494+
}
495+
else
496+
{
497+
localBranchTree.Height = half;
498+
remoteBranchTree.Height = half;
499+
}
500+
}
501+
else
502+
{
503+
localBranchTree.Height = leftHeight;
504+
}
505+
}
506+
else if (vm.IsRemoteGroupExpanded)
507+
{
508+
remoteBranchTree.Height = leftHeight;
509+
}
449510
}
450-
451-
if (vm.IsRemoteGroupExpanded)
511+
else
452512
{
453-
var desiredHeight = GetTreeRowsCount(vm.RemoteBranchTrees) * 24;
454-
var remoteHeight = Math.Min(leftHeight, desiredHeight);
455-
if (!remoteBranchTree.Height.IsClose(remoteHeight))
456-
remoteBranchTree.Height = remoteHeight;
513+
if (vm.IsLocalBranchGroupExpanded)
514+
{
515+
var height = localBranchRows * 24;
516+
localBranchTree.Height = height;
517+
}
518+
519+
if (vm.IsRemoteGroupExpanded)
520+
{
521+
var height = remoteBranchRows * 24;
522+
remoteBranchTree.Height = height;
523+
}
457524
}
458525
}
459526

0 commit comments

Comments
 (0)