4차 C-3: Git 탭의 원격 칸을 접는다
원격 저장소가 없어 전부 비활성인 세 줄이 위쪽 4분의 1을 차지했다. 지우지 않고 접었다. 새로고침은 로컬 작업이라 로컬 경로 줄로 옮겼다. 펼침 상태는 설정에 남기되 Browsable(false) 로 설정 화면에는 안 내놓는다.
This commit is contained in:
parent
aa30988a35
commit
d8c8d6c6f7
@ -416,4 +416,39 @@ MERGED 바닥② 편집 0건 · 되돌리기 0건 · 남은 차이 10 라인 |
|
||||
| 엔터 20번 | 622ms (한 번당 31ms) — 글자 치기와 같은 값 유지 |
|
||||
|
||||
**남길 것** - 화면 반응을 앞당길 때 <b>어느 이벤트 안에서 부르는지</b>를 먼저 봐야 한다.
|
||||
"바로 부른다"가 "지금 이 자리에서 부른다"가 되면 되돌이가 생긴다.
|
||||
"바로 부른다"가 "지금 이 자리에서 부른다"가 되면 되돌이가 생긴다.
|
||||
---
|
||||
|
||||
## 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.
|
||||
@ -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** — 아래쪽 세 군데 상태 정보를 창 아래 한 줄로. 두 패널 코드 높이가 저절로 맞는다 | 아래 |
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
|---|---|
|
||||
| **완료** | C-1 같은 경로가 세 군데 나온다 |
|
||||
| **완료** | C-2 아래쪽 정보가 세 군데로 흩어져 있다 |
|
||||
| 대기 | C-3 Git 탭의 원격 블록을 접는다 |
|
||||
| **완료** | C-3 Git 탭의 원격 블록을 접는다 |
|
||||
| 대기 | C-4 색 구분 범례를 이동 도구로 |
|
||||
| 대기 | C-5 ACTIONS 칸을 자주 쓰는 것과 한 번 정하는 것으로 나눈다 |
|
||||
|
||||
|
||||
@ -87,5 +87,15 @@ namespace MergeHub
|
||||
[DisplayName("작성자 (비우면 git config user.name)")]
|
||||
public string MergeCommentAuthor { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Git 탭의 원격 칸을 펼쳐 두었는지.
|
||||
///
|
||||
/// <b>설정 화면에는 안 내놓는다</b>(Browsable). 화면에서 접고 펴는 것이지
|
||||
/// 사람이 설정 목록에서 찾아 고칠 값이 아니다. 여기 두는 까닭은
|
||||
/// <b>다음에 켤 때도 그대로</b>여야 하기 때문이다.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public bool GitRemoteExpanded { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 지금 설정을 파일에 쓴다. 화면에서 켜고 끈 것이 다음에 켤 때도 남게 하려는 것이다.
|
||||
/// 설정 화면에서 고치는 값은 그쪽이 알아서 쓰므로 여기를 부를 일이 없다.
|
||||
/// </summary>
|
||||
public void SaveSettings() => _settingsService.Save(nameof(MergeHubSettings));
|
||||
|
||||
/// <summary>저장소 상태가 다시 읽힐 때마다 발생. 화면들이 자기 패널을 갱신한다.</summary>
|
||||
public event Action? Refreshed;
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
// ================= 원격 칸 접고 펴기 =================
|
||||
|
||||
/// <summary>
|
||||
/// 원격 칸(원격 URL · Gitea 계정 · Fetch/Pull/Push)을 펼쳐 두었는지.
|
||||
///
|
||||
/// <b>왜 접나</b> - 이 도구는 로컬에서 쓰는 머지툴이 우선이고 아직 원격 저장소가 없다.
|
||||
/// 그런데 화면에서는 원격이 위쪽 4분의 1을 차지한 채 전부 비활성이었다.
|
||||
/// <b>지우지는 않는다</b> - 사내 Gitea 가 생기면 다시 필요하다.
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(RemoteToggleLabel))]
|
||||
private bool _isRemoteOpen;
|
||||
|
||||
/// <summary>단추가 지금 상태를 그대로 말한다. 화살표 방향이 다음에 일어날 일을 가리킨다.</summary>
|
||||
public string RemoteToggleLabel => IsRemoteOpen ? "▾ 원격 · 계정" : "▸ 원격 · 계정";
|
||||
|
||||
[RelayCommand]
|
||||
private void ToggleRemote()
|
||||
{
|
||||
IsRemoteOpen = !IsRemoteOpen;
|
||||
|
||||
_workspace.Settings.GitRemoteExpanded = IsRemoteOpen;
|
||||
_workspace.SaveSettings();
|
||||
}
|
||||
|
||||
public GitWorkspace Workspace => _workspace;
|
||||
|
||||
@ -55,20 +55,36 @@
|
||||
Background="{DynamicResource Ubisam.Brush.Input.Background}"
|
||||
BorderBrush="{DynamicResource Ubisam.Brush.Input.Border}" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Text="저장소 연결" Style="{StaticResource GroupTitle}"/>
|
||||
<!--
|
||||
저장소 연결(4차 C-3).
|
||||
|
||||
<b>로컬 경로 한 줄만 늘 보인다.</b> 이 도구는 로컬에서 쓰는 머지툴이 우선이고
|
||||
아직 원격 저장소가 없다. 그런데 예전에는 원격 URL · 계정 · Fetch/Pull/Push 가
|
||||
화면 위쪽 4분의 1을 차지한 채 전부 비활성이었다.
|
||||
<b>지우지 않고 접었다</b> - 사내 Gitea 가 생기면 다시 필요하다.
|
||||
-->
|
||||
<StackPanel Orientation="Horizontal" Margin="0,0,0,4">
|
||||
<TextBlock Text="저장소 연결" Style="{StaticResource GroupTitle}" Margin="0,0,10,0"/>
|
||||
<Button Content="{Binding RemoteToggleLabel}" Command="{Binding ToggleRemoteCommand}"
|
||||
MinWidth="110" MinHeight="22" Padding="8,1" FontSize="11" Margin="0,0,0,4"
|
||||
ToolTip="원격 저장소·계정 칸을 접거나 폅니다. 접힌 상태는 다음에 켤 때도 그대로입니다"/>
|
||||
</StackPanel>
|
||||
<Grid Margin="0,0,0,4">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="로컬 경로" Style="{StaticResource Muted}" Margin="0,0,6,0"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Workspace.RepositoryPath, UpdateSourceTrigger=PropertyChanged}"/>
|
||||
<Button Grid.Column="2" Content="폴더..." Click="BrowseFolder_Click"/>
|
||||
<Button Grid.Column="3" Content="열기" Command="{Binding OpenCommand}"/>
|
||||
<!-- 새로고침은 로컬 작업이다. 원격 줄에 있다가 접히면 함께 사라져 여기로 옮겼다. -->
|
||||
<Button Grid.Column="4" Content="새로고침" Command="{Binding RefreshCommand}"/>
|
||||
</Grid>
|
||||
<Grid>
|
||||
<Grid Visibility="{Binding IsRemoteOpen, Converter={StaticResource BoolToVis}}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@ -88,7 +104,8 @@
|
||||
ToolTip="다른 저장소를 원격으로 등록하고 바로 fetch"/>
|
||||
<Button Grid.Column="6" Content="원격 삭제" Command="{Binding RemoveRemoteCommand}"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,4,0,0">
|
||||
<Grid Margin="0,4,0,0"
|
||||
Visibility="{Binding IsRemoteOpen, Converter={StaticResource BoolToVis}}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="150"/>
|
||||
@ -107,7 +124,6 @@
|
||||
<Button Content="Fetch" Command="{Binding FetchCommand}"/>
|
||||
<Button Content="Pull" Command="{Binding PullCommand}"/>
|
||||
<Button Content="Push" Command="{Binding PushCommand}"/>
|
||||
<Button Content="새로고침" Command="{Binding RefreshCommand}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user