E-4: 2-Way 로 돌아오면 LOCAL 옆에 빈 칸이 남던 문제
3-Way 에서 구분선을 끌어 칸 폭을 바꾼 뒤 2-Way 로 돌아오면 LOCAL 오른쪽에 칸 하나만 한 빈 자리가 남았다. 구분선을 건드리지 않으면 멀쩡했다. GridSplitter 는 끌고 나면 양옆 칸을 비율(star)이 아니라 고정 픽셀로 바꿔 놓는다. 그러면 창 크기가 바뀌어도 칸이 따라 늘지 않고, 2-Way 로 돌아와 REMOTE 칸이 접히면서 생긴 자리를 아무도 채우지 않는다. 늘어날 star 칸이 없기 때문이다. - 구분선을 놓는 순간 고정 픽셀을 같은 비율의 star 로 되돌린다. 잡아 놓은 폭은 유지되면서 창 크기를 따라간다. - 2-Way <-> 3-Way 를 오갈 때는 세 칸의 폭 지정을 놓아준다. 배치가 통째로 다르고, REMOTE 칸은 폭을 Style 이 정하는데 끌어서 생긴 값이 남으면 2-Way 에서 접히지 않는다. 확인: 3-Way 에서 구분선을 끌고 2-Way 로 돌아와도 두 칸이 폭을 꽉 채운다. 테스트 399건 그대로 통과. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
9a9c431b43
commit
8def1add2a
20
doc/진행상황.md
20
doc/진행상황.md
@ -141,6 +141,7 @@ CommunityToolkit 커맨드는 CommandManager 를 구독하지 않는데 이 둘
|
||||
| **완료** | E-1 원본 세 칸에 세로 스크롤 막대 |
|
||||
| **완료** | E-2 칸 폭을 줄였다 늘리면 행 높이가 안 돌아옴 |
|
||||
| **완료** | E-3 경로 줄과 코드 사이의 빈 공간 |
|
||||
| **완료** | E-4 2-Way 로 돌아오면 LOCAL 옆에 빈 칸이 남음 |
|
||||
|
||||
---
|
||||
|
||||
@ -178,6 +179,25 @@ CommunityToolkit 커맨드는 CommandManager 를 구독하지 않는데 이 둘
|
||||
**확인**: 2-Way 에서 한 화면에 보이는 코드가 <b>29줄에서 34줄로</b> 늘었다.
|
||||
BASE·LOCAL 의 01행은 같은 높이 그대로다.
|
||||
|
||||
|
||||
#### E-4. 2-Way 로 돌아오면 LOCAL 옆에 빈 칸이 남던 문제
|
||||
|
||||
3-Way 에서 <b>구분선을 끌어 칸 폭을 바꾼 뒤</b> 2-Way 로 돌아오면 LOCAL 오른쪽에
|
||||
칸 하나만 한 빈 자리가 남았다. 구분선을 건드리지 않으면 멀쩡했다.
|
||||
|
||||
`GridSplitter` 는 끌고 나면 양옆 칸을 <b>비율(star)이 아니라 고정 픽셀</b>로 바꿔 놓는다.
|
||||
그러면 두 가지가 어긋난다. 창 크기가 바뀌어도 칸이 따라 늘지 않고, 2-Way 로 돌아와
|
||||
REMOTE 칸이 접히면서 생긴 자리를 <b>아무도 채우지 않는다</b>(늘어날 star 칸이 없으니까).
|
||||
|
||||
- 구분선을 놓는 순간 고정 픽셀을 <b>같은 비율의 star 로 되돌린다.</b> 사용자가 잡아 놓은
|
||||
폭은 그대로 유지되면서 창 크기를 따라가게 된다.
|
||||
- 2-Way ↔ 3-Way 를 오갈 때는 세 칸의 폭 지정을 아예 놓아준다. 배치가 통째로 다르기도 하고,
|
||||
특히 REMOTE 칸은 폭을 Style 이 정하는데 끌어서 생긴 값이 남아 있으면 <b>2-Way 에서 접히지
|
||||
않는다.</b>
|
||||
|
||||
**확인**: 3-Way 에서 구분선을 끌고 2-Way 로 돌아와도 두 칸이 폭을 꽉 채운다.
|
||||
2-Way 에서 끌어 놓은 비율은 다른 모니터를 다녀와도 그대로다.
|
||||
|
||||
**세 가지 모두 확인**: 세로 막대를 끌면 세 칸이 함께 움직인다.
|
||||
2560×1600 ↔ 1920×1080 을 오가도, 가운데 구분선을 끌었다 되돌려도 처음과 같은 화면이 된다.
|
||||
테스트 399건 그대로 통과.
|
||||
|
||||
@ -642,9 +642,9 @@
|
||||
</ColumnDefinition.Style>
|
||||
</ColumnDefinition>
|
||||
<ColumnDefinition Width="4"/>
|
||||
<ColumnDefinition Width="*" MinWidth="200"/>
|
||||
<ColumnDefinition x:Name="LocalColumn" Width="*" MinWidth="200"/>
|
||||
<ColumnDefinition Width="4"/>
|
||||
<ColumnDefinition Width="*" MinWidth="200"/>
|
||||
<ColumnDefinition x:Name="BaseColumn" Width="*" MinWidth="200"/>
|
||||
|
||||
<!-- 3-Way 를 안 쓰면 REMOTE 칸과 그 앞 구분선을 폭 0 으로 접는다.
|
||||
Visibility 만 숨기면 star 열이 자리를 그대로 차지해 빈 칸이 남는다. -->
|
||||
@ -660,7 +660,7 @@
|
||||
</Style>
|
||||
</ColumnDefinition.Style>
|
||||
</ColumnDefinition>
|
||||
<ColumnDefinition MinWidth="0">
|
||||
<ColumnDefinition x:Name="RemoteColumn" MinWidth="0">
|
||||
<ColumnDefinition.Style>
|
||||
<Style TargetType="ColumnDefinition">
|
||||
<Setter Property="Width" Value="0"/>
|
||||
@ -800,7 +800,7 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<GridSplitter Grid.Column="1" Grid.RowSpan="3" Width="4" HorizontalAlignment="Stretch"
|
||||
<GridSplitter Grid.Column="1" Grid.RowSpan="3" Width="4" HorizontalAlignment="Stretch" DragCompleted="PaneSplitter_DragCompleted"
|
||||
Background="{DynamicResource Ubisam.Brush.Table.GridLine}"/>
|
||||
|
||||
<!--
|
||||
@ -951,7 +951,7 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<GridSplitter Grid.Column="3" Grid.Row="0" Width="4" HorizontalAlignment="Stretch"
|
||||
<GridSplitter Grid.Column="3" Grid.Row="0" Width="4" HorizontalAlignment="Stretch" DragCompleted="PaneSplitter_DragCompleted"
|
||||
Background="{DynamicResource Ubisam.Brush.Table.GridLine}"/>
|
||||
|
||||
<!--
|
||||
@ -1223,7 +1223,7 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<GridSplitter Grid.Column="5" Grid.Row="0" Width="4" HorizontalAlignment="Stretch"
|
||||
<GridSplitter Grid.Column="5" Grid.Row="0" Width="4" HorizontalAlignment="Stretch" DragCompleted="PaneSplitter_DragCompleted"
|
||||
Visibility="{Binding IsThreeWay, Converter={StaticResource BoolToVis}}"
|
||||
Background="{DynamicResource Ubisam.Brush.Table.GridLine}"/>
|
||||
|
||||
@ -1307,7 +1307,7 @@
|
||||
Visibility="{Binding IsThreeWay, Converter={StaticResource BoolToVis}}"
|
||||
Background="{DynamicResource Ubisam.Brush.Table.GridLine}"/>
|
||||
|
||||
<GridSplitter Grid.Column="7" Grid.RowSpan="3" Width="4" HorizontalAlignment="Stretch"
|
||||
<GridSplitter Grid.Column="7" Grid.RowSpan="3" Width="4" HorizontalAlignment="Stretch" DragCompleted="PaneSplitter_DragCompleted"
|
||||
Background="{DynamicResource Ubisam.Brush.Table.GridLine}"/>
|
||||
|
||||
<!-- ④ ACTIONS -->
|
||||
|
||||
@ -395,6 +395,12 @@ namespace MergeHub.Views
|
||||
// 배치가 통째로 달라지므로 원본 칸의 가로 위치는 처음으로 되돌린다.
|
||||
SourceShiftX = 0;
|
||||
|
||||
// 사용자가 구분선을 끌어 놓은 칸 폭은 여기서 놓아준다. 3-Way 의 세 칸과
|
||||
// 2-Way 의 두 칸은 애초에 다른 배치라 그대로 물려받을 것이 없고,
|
||||
// 특히 REMOTE 칸은 폭을 Style 이 정하는데 끌어서 생긴 값이 남아 있으면
|
||||
// <b>2-Way 로 돌아와도 접히지 않아 오른쪽에 빈 칸이 남는다.</b>
|
||||
foreach (var column in PaneColumns) column.ClearValue(ColumnDefinition.WidthProperty);
|
||||
|
||||
// 열 폭이 실제로 다시 잡힌 뒤에 재야 한다.
|
||||
Dispatcher.BeginInvoke(new Action(MatchTextWidths), DispatcherPriority.Loaded);
|
||||
}
|
||||
@ -440,6 +446,28 @@ namespace MergeHub.Views
|
||||
///
|
||||
/// 워드랩은 폭이 1px 만 달라도 접히는 자리가 달라져 행이 어긋난다.
|
||||
/// 편집기에는 세로 스크롤 막대가 늘 붙어 있고 그 칸 오른쪽에는 미니맵이 있으므로,
|
||||
/// <summary>칸 폭을 사용자가 끌어 놓을 수 있는 세 칸.</summary>
|
||||
private ColumnDefinition[] PaneColumns => new[] { LocalColumn, BaseColumn, RemoteColumn };
|
||||
|
||||
/// <summary>
|
||||
/// 구분선을 끌고 난 뒤 칸 폭을 다시 <b>비율</b>로 돌려놓는다.
|
||||
///
|
||||
/// GridSplitter 는 끌고 나면 양옆 칸을 <b>고정 픽셀</b>로 바꿔 놓는다. 그러면 두 가지가 어긋난다.
|
||||
/// 창 크기가 바뀌어도 칸이 따라 늘지 않고, 3-Way 에서 끌어 놓은 채 2-Way 로 돌아오면
|
||||
/// REMOTE 칸이 접히면서 생긴 자리를 <b>아무도 채우지 않아 오른쪽에 빈 공간이 남는다.</b>
|
||||
/// </summary>
|
||||
private void PaneSplitter_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
|
||||
{
|
||||
foreach (var column in PaneColumns)
|
||||
{
|
||||
// 접혀 있는 칸(2-Way 의 REMOTE)은 건드리지 않는다. Style 이 폭을 쥐고 있다.
|
||||
if (column.ActualWidth <= 0) continue;
|
||||
if (!column.Width.IsAbsolute) continue;
|
||||
|
||||
column.Width = new GridLength(column.ActualWidth, GridUnitType.Star);
|
||||
}
|
||||
}
|
||||
|
||||
/// 표시층에 그만큼 오른쪽 여백을 줘서 남는 폭을 같게 만든다.
|
||||
///
|
||||
/// 맞춰야 할 묶음이 모드마다 다르다.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user