diff --git a/doc/history/2026-09-10-4차.md b/doc/history/2026-09-10-4차.md index 6294edf..18ed10e 100644 --- a/doc/history/2026-09-10-4차.md +++ b/doc/history/2026-09-10-4차.md @@ -416,4 +416,39 @@ MERGED 바닥② 편집 0건 · 되돌리기 0건 · 남은 차이 10 라인 | | 엔터 20번 | 622ms (한 번당 31ms) — 글자 치기와 같은 값 유지 | **남길 것** - 화면 반응을 앞당길 때 어느 이벤트 안에서 부르는지를 먼저 봐야 한다. -"바로 부른다"가 "지금 이 자리에서 부른다"가 되면 되돌이가 생긴다. \ No newline at end of file +"바로 부른다"가 "지금 이 자리에서 부른다"가 되면 되돌이가 생긴다. +--- + +## C-3. Git 탭에서 지금 못 쓰는 것이 위쪽 4분의 1을 차지하던 것 — **완료** (2026-09-10) + +**무엇이 문제였나** - `저장소 연결` 칸에 원격 URL · 이름 · 클론 · 원격 추가 · 원격 삭제 · +Gitea 계정 · 토큰 · Fetch · Pull · Push 가 세 줄로 있었다. **원격 저장소가 없어 전부 비활성**인데 +화면에서는 원격이 제일 넓었다. 이 도구는 로컬에서 쓰는 머지툴이 우선이고 푸시도 하지 않는다. + +**지우지 않고 접었다.** 사내 Gitea 가 생기면 다시 필요하다. +제목 옆에 `▸ 원격 · 계정` 단추를 두고 두 줄을 함께 접는다. **단추 글자가 지금 상태를 그대로 말한다.** + +**늘 보이는 것은 로컬 경로 한 줄이다** - 경로 · `폴더...` · `열기` · `새로고침`. + +**새로고침을 옮겼다.** 원격 줄에 Fetch/Pull/Push 와 함께 있었는데, 이건 **로컬 작업**이다. +접으면 함께 사라지므로 로컬 경로 줄로 옮겼다. + +**펼침 상태를 기억한다.** `MergeHubSettings.GitRemoteExpanded` 에 남기되 +`[Browsable(false)]` 로 **설정 화면에는 내놓지 않는다** - 화면에서 접고 펴는 것이지 +사람이 설정 목록에서 찾아 고칠 값이 아니다(B-1 의 최근 목록과 같은 판단). +플랫폼 설정 그리드가 `Browsable` 을 이미 보고 있어 별도 처리가 필요 없었다. + +**원격을 이미 쓰고 있으면 펼친 채로 시작한다.** `RemoteUrl` 이 적혀 있으면 접지 않는다 - +쓰던 사람 화면에서 갑자기 사라지면 없어진 줄 안다. + +**화면에서 확인한 것** + +| 확인 | 결과 | +|---|---| +| 접었을 때 | `클론` · `원격 추가/삭제` · `Fetch/Pull/Push` 가 사라진다 | +| 서브탭 줄 위치 | 접으면 위로 올라온다 (2560×1600 에서 약 128px) | +| 펼치면 | 단추가 `▾` 로 바뀌고 예전과 똑같이 나온다 | +| 설정 파일 | `"GitRemoteExpanded": true` / `false` 로 따라 바뀐다 | +| 껐다 켜기 | 펼쳐 둔 채로 껐다 켜면 펼쳐진 채로 뜬다 | + +검사 571건 통과 · 빌드 경고 0 · 오류 0. \ No newline at end of file diff --git a/doc/history/changelog.md b/doc/history/changelog.md index 0ef6759..34cdaa6 100644 --- a/doc/history/changelog.md +++ b/doc/history/changelog.md @@ -8,6 +8,7 @@ | 날짜 | 항목 | 커밋 | |---|---|---| +| 2026-09-10 | **4차 C-3** — Git 탭의 원격 칸을 접을 수 있게. 로컬 경로 한 줄만 남고 세로 128px 가 목록으로 간다 | 아래 | | 2026-09-10 | **엔터 고침의 되돌이 문제** — TextChanged 안에서 편집기 글을 갈아 끼워 캐럿이 엉켰다. 한 차례 뒤로 물림 | 아래 | | 2026-09-10 | **엔터 반응 지연** — 줄 수가 바뀌면 0.6초 타이머만 기다리느라 화면이 비어 있었다. 그 자리에서 다시 맞추게 고침 | 아래 | | 2026-09-10 | **4차 C-2** — 아래쪽 세 군데 상태 정보를 창 아래 한 줄로. 두 패널 코드 높이가 저절로 맞는다 | 아래 | @@ -36,6 +37,7 @@ | 날짜 | 문서 | 내용 | |---|---|---| +| 2026-09-10 | **4차 C-3** — Git 탭의 원격 칸을 접을 수 있게. 로컬 경로 한 줄만 남고 세로 128px 가 목록으로 간다 | 아래 | | 2026-09-10 | **엔터 고침의 되돌이 문제** — TextChanged 안에서 편집기 글을 갈아 끼워 캐럿이 엉켰다. 한 차례 뒤로 물림 | 아래 | | 2026-09-10 | **엔터 반응 지연** — 줄 수가 바뀌면 0.6초 타이머만 기다리느라 화면이 비어 있었다. 그 자리에서 다시 맞추게 고침 | 아래 | | 2026-09-10 | **4차 C-2** — 아래쪽 세 군데 상태 정보를 창 아래 한 줄로. 두 패널 코드 높이가 저절로 맞는다 | 아래 | diff --git a/doc/진행상황.md b/doc/진행상황.md index a90c759..45975a1 100644 --- a/doc/진행상황.md +++ b/doc/진행상황.md @@ -40,7 +40,7 @@ |---|---| | **완료** | C-1 같은 경로가 세 군데 나온다 | | **완료** | C-2 아래쪽 정보가 세 군데로 흩어져 있다 | -| 대기 | C-3 Git 탭의 원격 블록을 접는다 | +| **완료** | C-3 Git 탭의 원격 블록을 접는다 | | 대기 | C-4 색 구분 범례를 이동 도구로 | | 대기 | C-5 ACTIONS 칸을 자주 쓰는 것과 한 번 정하는 것으로 나눈다 | diff --git a/src/MergeHub/MergeHubSettings.cs b/src/MergeHub/MergeHubSettings.cs index d65eb24..b91674a 100644 --- a/src/MergeHub/MergeHubSettings.cs +++ b/src/MergeHub/MergeHubSettings.cs @@ -87,5 +87,15 @@ namespace MergeHub [DisplayName("작성자 (비우면 git config user.name)")] public string MergeCommentAuthor { get; set; } = string.Empty; + /// + /// Git 탭의 원격 칸을 펼쳐 두었는지. + /// + /// 설정 화면에는 안 내놓는다(Browsable). 화면에서 접고 펴는 것이지 + /// 사람이 설정 목록에서 찾아 고칠 값이 아니다. 여기 두는 까닭은 + /// 다음에 켤 때도 그대로여야 하기 때문이다. + /// + [Browsable(false)] + public bool GitRemoteExpanded { get; set; } + } } diff --git a/src/MergeHub/Services/GitWorkspace.cs b/src/MergeHub/Services/GitWorkspace.cs index 89f77f6..d64cd7b 100644 --- a/src/MergeHub/Services/GitWorkspace.cs +++ b/src/MergeHub/Services/GitWorkspace.cs @@ -51,6 +51,7 @@ namespace MergeHub.Services Git = git; _currentUser = currentUser; _uiContext = SynchronizationContext.Current; + _settingsService = settingsService; Settings = settingsService.RegisterSettings(nameof(MergeHubSettings), new MergeHubSettings()); RepositoryPath = Settings.DefaultRepositoryPath; @@ -111,6 +112,14 @@ namespace MergeHub.Services public MergeHubSettings Settings { get; } + private readonly ISettingsService _settingsService; + + /// + /// 지금 설정을 파일에 쓴다. 화면에서 켜고 끈 것이 다음에 켤 때도 남게 하려는 것이다. + /// 설정 화면에서 고치는 값은 그쪽이 알아서 쓰므로 여기를 부를 일이 없다. + /// + public void SaveSettings() => _settingsService.Save(nameof(MergeHubSettings)); + /// 저장소 상태가 다시 읽힐 때마다 발생. 화면들이 자기 패널을 갱신한다. public event Action? Refreshed; diff --git a/src/MergeHub/ViewModels/GitViewModel.cs b/src/MergeHub/ViewModels/GitViewModel.cs index 3844ebf..890b60a 100644 --- a/src/MergeHub/ViewModels/GitViewModel.cs +++ b/src/MergeHub/ViewModels/GitViewModel.cs @@ -28,6 +28,35 @@ namespace MergeHub.ViewModels _workspace.Refreshed += () => OnPropertyChanged(nameof(SelectedCommit)); _workspace.Refreshed += SyncStashSelection; _workspace.StateChanged += RaiseCanExecuteChanged; + + // 원격을 이미 쓰고 있으면 펼쳐 둔다 - 접어 두면 쓰던 사람이 사라진 줄 안다. + _isRemoteOpen = _workspace.Settings.GitRemoteExpanded || + !string.IsNullOrWhiteSpace(_workspace.RemoteUrl); + } + + // ================= 원격 칸 접고 펴기 ================= + + /// + /// 원격 칸(원격 URL · Gitea 계정 · Fetch/Pull/Push)을 펼쳐 두었는지. + /// + /// 왜 접나 - 이 도구는 로컬에서 쓰는 머지툴이 우선이고 아직 원격 저장소가 없다. + /// 그런데 화면에서는 원격이 위쪽 4분의 1을 차지한 채 전부 비활성이었다. + /// 지우지는 않는다 - 사내 Gitea 가 생기면 다시 필요하다. + /// + [ObservableProperty] + [NotifyPropertyChangedFor(nameof(RemoteToggleLabel))] + private bool _isRemoteOpen; + + /// 단추가 지금 상태를 그대로 말한다. 화살표 방향이 다음에 일어날 일을 가리킨다. + public string RemoteToggleLabel => IsRemoteOpen ? "▾ 원격 · 계정" : "▸ 원격 · 계정"; + + [RelayCommand] + private void ToggleRemote() + { + IsRemoteOpen = !IsRemoteOpen; + + _workspace.Settings.GitRemoteExpanded = IsRemoteOpen; + _workspace.SaveSettings(); } public GitWorkspace Workspace => _workspace; diff --git a/src/MergeHub/Views/GitView.xaml b/src/MergeHub/Views/GitView.xaml index 3deb11c..2ec0b75 100644 --- a/src/MergeHub/Views/GitView.xaml +++ b/src/MergeHub/Views/GitView.xaml @@ -55,20 +55,36 @@ Background="{DynamicResource Ubisam.Brush.Input.Background}" BorderBrush="{DynamicResource Ubisam.Brush.Input.Border}" BorderThickness="1"> - + + + +