@@ -414,46 +414,113 @@ private void UpdateLeftSidebarLayout()
414
414
return ;
415
415
416
416
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
+
417
426
if ( vm . IsTagGroupExpanded )
418
427
{
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 ;
423
441
}
424
442
425
443
if ( vm . IsSubmoduleGroupExpanded )
426
444
{
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 ;
431
458
}
432
459
433
460
if ( vm . IsWorktreeGroupExpanded )
434
461
{
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 ;
439
474
}
440
475
441
- if ( vm . IsLocalBranchGroupExpanded )
476
+ if ( desiredBranches > leftHeight )
442
477
{
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
+ }
449
510
}
450
-
451
- if ( vm . IsRemoteGroupExpanded )
511
+ else
452
512
{
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
+ }
457
524
}
458
525
}
459
526
0 commit comments