@@ -462,18 +462,49 @@ private void BuildAlignedResultPanel()
462462 if ( currentRegion . ResolvedContent != null )
463463 {
464464 // Resolved - show resolved content with color based on resolution type
465- var lineType = currentRegion . ResolutionType switch
465+ if ( currentRegion . ResolutionType == Models . ConflictResolution . UseBothMineFirst )
466466 {
467- Models . ConflictResolution . UseOurs => Models . TextDiffLineType . Deleted , // Mine color
468- Models . ConflictResolution . UseTheirs => Models . TextDiffLineType . Added , // Theirs color
469- _ => Models . TextDiffLineType . Normal
470- } ;
471-
472- foreach ( var line in currentRegion . ResolvedContent )
467+ // First portion is Mine (Deleted color), second is Theirs (Added color)
468+ int mineCount = currentRegion . OursContent . Count ;
469+ for ( int i = 0 ; i < currentRegion . ResolvedContent . Count ; i ++ )
470+ {
471+ var lineType = i < mineCount
472+ ? Models . TextDiffLineType . Deleted
473+ : Models . TextDiffLineType . Added ;
474+ resultLines . Add ( new Models . TextDiffLine (
475+ lineType , currentRegion . ResolvedContent [ i ] , resultLineNumber , resultLineNumber ) ) ;
476+ resultLineNumber ++ ;
477+ }
478+ }
479+ else if ( currentRegion . ResolutionType == Models . ConflictResolution . UseBothTheirsFirst )
473480 {
474- resultLines . Add ( new Models . TextDiffLine (
475- lineType , line , resultLineNumber , resultLineNumber ) ) ;
476- resultLineNumber ++ ;
481+ // First portion is Theirs (Added color), second is Mine (Deleted color)
482+ int theirsCount = currentRegion . TheirsContent . Count ;
483+ for ( int i = 0 ; i < currentRegion . ResolvedContent . Count ; i ++ )
484+ {
485+ var lineType = i < theirsCount
486+ ? Models . TextDiffLineType . Added
487+ : Models . TextDiffLineType . Deleted ;
488+ resultLines . Add ( new Models . TextDiffLine (
489+ lineType , currentRegion . ResolvedContent [ i ] , resultLineNumber , resultLineNumber ) ) ;
490+ resultLineNumber ++ ;
491+ }
492+ }
493+ else
494+ {
495+ var lineType = currentRegion . ResolutionType switch
496+ {
497+ Models . ConflictResolution . UseOurs => Models . TextDiffLineType . Deleted , // Mine color
498+ Models . ConflictResolution . UseTheirs => Models . TextDiffLineType . Added , // Theirs color
499+ _ => Models . TextDiffLineType . Normal
500+ } ;
501+
502+ foreach ( var line in currentRegion . ResolvedContent )
503+ {
504+ resultLines . Add ( new Models . TextDiffLine (
505+ lineType , line , resultLineNumber , resultLineNumber ) ) ;
506+ resultLineNumber ++ ;
507+ }
477508 }
478509 // Pad with empty lines to match Mine/Theirs panel height
479510 int padding = regionLines - currentRegion . ResolvedContent . Count ;
@@ -663,6 +694,104 @@ public void AcceptTheirsAtIndex(int conflictIndex)
663694 IsModified = true ;
664695 }
665696
697+ public void AcceptBothMineFirst ( )
698+ {
699+ if ( _conflictRegions . Count == 0 )
700+ return ;
701+
702+ bool anyResolved = false ;
703+ foreach ( var region in _conflictRegions )
704+ {
705+ if ( ! region . IsResolved )
706+ {
707+ var combined = new List < string > ( region . OursContent ) ;
708+ combined . AddRange ( region . TheirsContent ) ;
709+ region . ResolvedContent = combined ;
710+ region . IsResolved = true ;
711+ region . ResolutionType = Models . ConflictResolution . UseBothMineFirst ;
712+ anyResolved = true ;
713+ }
714+ }
715+
716+ if ( anyResolved )
717+ {
718+ RebuildResultContent ( ) ;
719+ BuildAlignedResultPanel ( ) ;
720+ UpdateConflictInfo ( ) ;
721+ IsModified = true ;
722+ }
723+ }
724+
725+ public void AcceptBothTheirsFirst ( )
726+ {
727+ if ( _conflictRegions . Count == 0 )
728+ return ;
729+
730+ bool anyResolved = false ;
731+ foreach ( var region in _conflictRegions )
732+ {
733+ if ( ! region . IsResolved )
734+ {
735+ var combined = new List < string > ( region . TheirsContent ) ;
736+ combined . AddRange ( region . OursContent ) ;
737+ region . ResolvedContent = combined ;
738+ region . IsResolved = true ;
739+ region . ResolutionType = Models . ConflictResolution . UseBothTheirsFirst ;
740+ anyResolved = true ;
741+ }
742+ }
743+
744+ if ( anyResolved )
745+ {
746+ RebuildResultContent ( ) ;
747+ BuildAlignedResultPanel ( ) ;
748+ UpdateConflictInfo ( ) ;
749+ IsModified = true ;
750+ }
751+ }
752+
753+ public void AcceptBothMineFirstAtIndex ( int conflictIndex )
754+ {
755+ if ( conflictIndex < 0 || conflictIndex >= _conflictRegions . Count )
756+ return ;
757+
758+ var region = _conflictRegions [ conflictIndex ] ;
759+ if ( region . IsResolved )
760+ return ;
761+
762+ var combined = new List < string > ( region . OursContent ) ;
763+ combined . AddRange ( region . TheirsContent ) ;
764+ region . ResolvedContent = combined ;
765+ region . IsResolved = true ;
766+ region . ResolutionType = Models . ConflictResolution . UseBothMineFirst ;
767+
768+ RebuildResultContent ( ) ;
769+ BuildAlignedResultPanel ( ) ;
770+ UpdateConflictInfo ( ) ;
771+ IsModified = true ;
772+ }
773+
774+ public void AcceptBothTheirsFirstAtIndex ( int conflictIndex )
775+ {
776+ if ( conflictIndex < 0 || conflictIndex >= _conflictRegions . Count )
777+ return ;
778+
779+ var region = _conflictRegions [ conflictIndex ] ;
780+ if ( region . IsResolved )
781+ return ;
782+
783+ var combined = new List < string > ( region . TheirsContent ) ;
784+ combined . AddRange ( region . OursContent ) ;
785+ region . ResolvedContent = combined ;
786+ region . IsResolved = true ;
787+ region . ResolutionType = Models . ConflictResolution . UseBothTheirsFirst ;
788+
789+ RebuildResultContent ( ) ;
790+ BuildAlignedResultPanel ( ) ;
791+ UpdateConflictInfo ( ) ;
792+ IsModified = true ;
793+ }
794+
666795 public void UndoResolutionAtIndex ( int conflictIndex )
667796 {
668797 if ( conflictIndex < 0 || conflictIndex >= _conflictRegions . Count )
0 commit comments