C-1: 경로를 읽으라고 적는다
늘 똑같은 BASE/LOCAL 이 크고 정작 경로가 회색 작은 글씨였다. 뒤집었다. 접두사를 빼고 본문 색 고정폭 12px 로, 갈리는 첫 칸만 굵은 강조색.
This commit is contained in:
parent
a6877d7b13
commit
9f0802e58f
@ -293,4 +293,31 @@ D:\work\branch\src\a.cpp → branch\src\a.cpp
|
||||
검사 11건 추가(`PathTest` 43 → 54). 전체 **571건 통과**.
|
||||
|
||||
**남길 것** - 화면을 줄이는 일은 <b>무엇이 남아야 하는지부터 정하고</b> 줄여야 한다.
|
||||
여기서는 "경로가 길다"만 보고 줄였는데, 정작 그 경로가 두 칸을 가르는 유일한 정보였다.
|
||||
여기서는 "경로가 길다"만 보고 줄였는데, 정작 그 경로가 두 칸을 가르는 유일한 정보였다.
|
||||
### C-1 또 한 번 — 경로를 읽으라고 적는다 (2026-09-10)
|
||||
|
||||
**사용자 지적** - "경로를 좀 잘 보이게 해볼까."
|
||||
|
||||
머리글의 위아래가 뒤집혀 있었다. **늘 똑같은 `BASE` 는 크고 파란데,
|
||||
정작 이 칸이 무엇인지 말하는 경로는 회색 작은 글씨였다.** 정보를 담은 쪽이 뒤로 물러나 있었다.
|
||||
|
||||
세 가지를 바꿨다.
|
||||
|
||||
- 경로 줄에서 `BASE ·` `LOCAL ·` 접두사를 뺐다. **위 제목이 이미 그 말을 하고 있다.**
|
||||
- 회색(Muted) 을 걷고 본문 색으로, 11 → 12px, 글꼴은 코드와 같은 Consolas 로.
|
||||
경로는 기호가 많아 고정폭이 읽기 쉽다.
|
||||
- **갈리는 첫 칸만 굵은 강조색**으로 칠한다(`left\` · `right\`). 나머지는 양쪽이 같은 글자라
|
||||
읽을 값이 없다. 어디가 다른지 눈이 바로 간다.
|
||||
|
||||
```
|
||||
BASE LOCAL
|
||||
left\WeldController.cpp right\WeldController.cpp
|
||||
^^^^ ^^^^^ (굵은 강조색)
|
||||
```
|
||||
|
||||
Git 모드도 같이 정리됐다 - `BASE / 9c9e0bb · StartWeld.cs`, `LOCAL / master`.
|
||||
|
||||
**걸린 것 하나** - `SplitLead` 의 튜플 요소 이름을 `Rest` 로 뒀다가 CS8126 이 났다.
|
||||
`Rest` 는 `ValueTuple` 이 제 필드 이름으로 쓰는 예약어다. `Tail` 로 바꿨다.
|
||||
|
||||
검사 571건 통과 · 빌드 경고 0 · 오류 0.
|
||||
@ -785,12 +785,16 @@ namespace MergeHub.ViewModels
|
||||
|
||||
// BASE 가 비어 있으면 <b>그 파일이 공통 조상에 없었다</b>는 뜻이다 - 양쪽 브랜치가
|
||||
// 각자 새로 만든 파일이라 견줄 조상이 없다. 그냥 두면 빈 칸이 고장으로 보인다.
|
||||
// 큰 제목이 이미 BASE/LOCAL 이라고 말하므로 여기서는 되풀이하지 않는다(4차 C-1).
|
||||
BaseHeaderLead = string.Empty;
|
||||
LocalHeaderLead = string.Empty;
|
||||
|
||||
BaseHeader = threeWay
|
||||
? string.IsNullOrEmpty(baseText)
|
||||
? $"BASE ({baseOrigin}) · 이 파일 없음 - 양쪽에서 새로 만든 파일입니다"
|
||||
: $"BASE ({baseOrigin}) · {path}"
|
||||
: $"BASE · {commit.ShortSha} · {path}";
|
||||
LocalHeader = $"LOCAL · {_workspace.CurrentBranch}";
|
||||
? $"({baseOrigin}) 이 파일 없음 - 양쪽에서 새로 만든 파일입니다"
|
||||
: $"({baseOrigin}) {path}"
|
||||
: $"{commit.ShortSha} · {path}";
|
||||
LocalHeader = _workspace.CurrentBranch;
|
||||
RemoteHeader = isConflict
|
||||
? "REMOTE · THEIRS"
|
||||
: $"REMOTE · {branch}";
|
||||
@ -1883,10 +1887,38 @@ namespace MergeHub.ViewModels
|
||||
{
|
||||
var (left, right) = PathUtil.DistinctTail(LeftFile, RightFile);
|
||||
|
||||
BaseHeader = $"BASE · {left}";
|
||||
LocalHeader = $"LOCAL · {right}";
|
||||
// 큰 제목이 이미 BASE/LOCAL 이라고 말한다. 여기에 또 적으면 자리만 먹는다.
|
||||
var l = SplitLead(left);
|
||||
BaseHeaderLead = l.Lead;
|
||||
BaseHeader = l.Tail;
|
||||
|
||||
var r = SplitLead(right);
|
||||
LocalHeaderLead = r.Lead;
|
||||
LocalHeader = r.Tail;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 경로에서 <b>실제로 갈리는 첫 칸</b>만 떼어 낸다.
|
||||
///
|
||||
/// <see cref="PathUtil.DistinctTail"/> 이 같은 앞부분을 이미 뗐으므로, 남은 것의 첫 칸이
|
||||
/// 두 쪽을 가르는 자리다(<c>left\</c> · <c>branch\</c>). 그 칸만 굵게 칠하면
|
||||
/// <b>어디가 다른지 눈이 바로 간다</b> - 나머지는 양쪽이 같은 글자라 읽을 값이 없다.
|
||||
/// 칸이 하나뿐이면(파일 이름만 남은 경우) 뗄 것이 없다.
|
||||
/// </summary>
|
||||
// 'Rest' 는 ValueTuple 이 제 필드 이름으로 쓰는 예약어라 튜플 요소 이름으로 못 쓴다.
|
||||
private static (string Lead, string Tail) SplitLead(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) return (string.Empty, string.Empty);
|
||||
|
||||
var at = path.IndexOfAny(new[] { '\\', '/' });
|
||||
return at < 0 ? (string.Empty, path) : (path.Substring(0, at + 1), path.Substring(at + 1));
|
||||
}
|
||||
|
||||
/// <summary>머리글에서 굵게 칠할 앞부분. 없으면 빈 글자.</summary>
|
||||
[ObservableProperty] private string _baseHeaderLead = string.Empty;
|
||||
|
||||
[ObservableProperty] private string _localHeaderLead = string.Empty;
|
||||
|
||||
// ================= 저장 안 한 편집 지키기 =================
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -949,9 +949,17 @@
|
||||
패널마다 세로 40px 남짓을 먹었다. 전체 경로는 툴팁으로 옮기고
|
||||
<b>복사는 우클릭 메뉴로</b> 지켰다 - 읽기전용 TextBox 를 뒀던 까닭이 복사였다.
|
||||
-->
|
||||
<TextBlock Text="{Binding BaseHeader}" Style="{StaticResource Muted}" FontSize="11"
|
||||
<!--
|
||||
경로가 이 칸의 정체다(4차 C-1). 늘 똑같은 "BASE" 는 위 제목이 이미 말하므로
|
||||
여기서는 경로만, 그것도 <b>회색 작은 글씨가 아니라 읽으라고</b> 적는다.
|
||||
갈리는 첫 칸만 굵게 칠해 어디가 다른지 눈이 바로 가게 한다.
|
||||
-->
|
||||
<TextBlock FontFamily="Consolas" FontSize="12" Margin="0,1,0,0"
|
||||
TextTrimming="CharacterEllipsis"
|
||||
Foreground="{DynamicResource Ubisam.Brush.ContentForeground}"
|
||||
ToolTip="{Binding BaseFileLocation}">
|
||||
<Run Text="{Binding BaseHeaderLead, Mode=OneWay}" FontWeight="Bold"
|
||||
Foreground="{DynamicResource Ubisam.Brush.Accent}"/><Run Text="{Binding BaseHeader, Mode=OneWay}"/>
|
||||
<TextBlock.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="전체 경로 복사" Click="CopyBasePath_Click"/>
|
||||
@ -1048,9 +1056,12 @@
|
||||
<StackPanel Grid.Row="0" Margin="8,6">
|
||||
<TextBlock Text="{Binding LocalTitle}" Style="{StaticResource PanelTitle}"/>
|
||||
<!-- BASE 와 같은 처리(4차 C-1). 전체 경로는 툴팁, 복사는 우클릭 메뉴. -->
|
||||
<TextBlock Text="{Binding LocalHeader}" Style="{StaticResource Muted}" FontSize="11"
|
||||
<TextBlock FontFamily="Consolas" FontSize="12" Margin="0,1,0,0"
|
||||
TextTrimming="CharacterEllipsis"
|
||||
Foreground="{DynamicResource Ubisam.Brush.ContentForeground}"
|
||||
ToolTip="{Binding SelectedFileFullPath}">
|
||||
<Run Text="{Binding LocalHeaderLead, Mode=OneWay}" FontWeight="Bold"
|
||||
Foreground="{DynamicResource Ubisam.Brush.Accent}"/><Run Text="{Binding LocalHeader, Mode=OneWay}"/>
|
||||
<TextBlock.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="전체 경로 복사" Click="CopyLocalPath_Click"/>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user