- 좌측 사이드바와 본문 사이 경계선에 GridSplitter 추가 - 사이드바가 열려 있을 때만 드래그 가능하도록 splitter 표시 상태 연동 - 사용자가 조절한 폭을 저장해 사이드바를 닫았다 다시 열어도 마지막 너비 유지 - 열기/닫기 애니메이션이 현재 폭과 저장 폭을 함께 사용하도록 정리 - README 및 DEVELOPMENT 문서에 2026-04-05 23:15 (KST) 기준 변경 이력 반영 검증: - dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ - 경고 0 / 오류 0 확인
This commit is contained in:
@@ -1049,3 +1049,5 @@ MIT License
|
||||
- AX Agent 새 대화 전환 경로를 실제 fresh conversation 생성 기준으로 수정했다. 기존에는 현재 대화를 저장한 뒤 LoadOrCreateConversation()을 다시 호출해 최신 저장 대화를 재로드하는 경로가 섞여 있어, 첫 화면이 잠깐 깜빡인 뒤 기존 대화가 그대로 남는 문제가 있었다. 이제 ClearCurrentConversation() 뒤에는 항상 새 대화를 생성하고, 대화별 설정/압축 메트릭/앱 상태를 새 conversation 기준으로 다시 동기화한 후 빈 transcript를 렌더한다.
|
||||
- 업데이트: 2026-04-05 23:09 (KST)
|
||||
- AX Agent 좌측 패널의 타이포를 전반적으로 키웠다. 헤더, 새 대화, 검색, 상단 필터, 탭별 보조 메뉴, 전체 삭제, 하단 사용자 영역 폰트와 아이콘 크기를 함께 조정하고, 사이드바 폭도 소폭 넓혀 더 이상 지나치게 작고 빽빽하게 보이지 않도록 정리했다. 대화 목록 카드 제목/시간/실행 메타도 함께 키워 실제 읽을 수 있는 수준으로 보정했다.
|
||||
- 업데이트: 2026-04-05 23:15 (KST)
|
||||
- AX Agent 좌측 패널과 본문 사이 경계선을 드래그해 사이드바 폭을 직접 조절할 수 있게 했다. 사이드바가 열려 있을 때만 splitter가 보이며, 사용자가 조절한 폭은 닫았다 다시 열어도 유지된다.
|
||||
|
||||
@@ -4795,3 +4795,6 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
|
||||
- 업데이트: 2026-04-05 23:09 (KST)
|
||||
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 AX Agent 좌측 사이드바 기본 폭을 246 -> 262로 넓히고, AX Agent 헤더, 새 대화, 검색, 상단 공통 필터, 탭별 보조 메뉴, 전체 삭제, 하단 사용자/설정 영역의 폰트와 아이콘 크기를 전반적으로 상향 조정했다.
|
||||
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 대화 목록 렌더에서도 그룹 헤더, 대화 카드 제목, 날짜, 실행 상태, 실행 요약, 편집 아이콘 크기를 함께 키우고 카드 내부 패딩을 늘려 좌측 패널 텍스트가 지나치게 작게 보이던 문제를 보정했다.
|
||||
- 업데이트: 2026-04-05 23:15 (KST)
|
||||
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에 AX Agent 좌측 패널과 본문 사이를 드래그할 수 있는 SidebarResizeSplitter를 추가했다.
|
||||
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 사이드바 마지막 확장 폭을 _sidebarExpandedWidth로 기억하도록 하고, 열기/닫기 애니메이션과 splitter 드래그 완료 이벤트가 같은 폭 상태를 공유하도록 정리했다. 이제 사용자가 경계선을 조절한 뒤 사이드바를 닫았다 다시 열어도 마지막 너비가 유지된다.
|
||||
|
||||
@@ -837,6 +837,20 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<GridSplitter x:Name="SidebarResizeSplitter"
|
||||
Grid.Column="1"
|
||||
Width="8"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Stretch"
|
||||
Background="Transparent"
|
||||
ResizeDirection="Columns"
|
||||
ResizeBehavior="PreviousAndNext"
|
||||
ShowsPreview="False"
|
||||
Cursor="SizeWE"
|
||||
Visibility="Visible"
|
||||
DragCompleted="SidebarResizeSplitter_DragCompleted"
|
||||
Panel.ZIndex="40"/>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════ -->
|
||||
<!-- 우측: 메시지 영역 -->
|
||||
<!-- ══════════════════════════════════════════════════════ -->
|
||||
|
||||
@@ -34,6 +34,7 @@ public partial class ChatWindow : Window
|
||||
private CancellationTokenSource? _streamCts;
|
||||
private bool _isStreaming;
|
||||
private bool _sidebarVisible = true;
|
||||
private double _sidebarExpandedWidth = 262;
|
||||
private string _selectedCategory = ""; // "" = 전체
|
||||
private readonly Dictionary<string, string> _tabSelectedCategory = new(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
@@ -2854,25 +2855,33 @@ public partial class ChatWindow : Window
|
||||
IconBarColumn.Width = new GridLength(0);
|
||||
IconBarPanel.Visibility = Visibility.Collapsed;
|
||||
SidebarPanel.Visibility = Visibility.Visible;
|
||||
SidebarResizeSplitter.Visibility = Visibility.Visible;
|
||||
|
||||
var targetWidth = Math.Max(190, _sidebarExpandedWidth);
|
||||
|
||||
if (animated)
|
||||
{
|
||||
AnimateSidebar(0, 220, () => SidebarColumn.MinWidth = 168);
|
||||
AnimateSidebar(0, targetWidth, () => SidebarColumn.MinWidth = 168);
|
||||
}
|
||||
else
|
||||
{
|
||||
SidebarColumn.MinWidth = 168;
|
||||
SidebarColumn.Width = new GridLength(220);
|
||||
SidebarColumn.MinWidth = 168;
|
||||
SidebarColumn.Width = new GridLength(targetWidth);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var currentWidth = SidebarColumn.ActualWidth > 0 ? SidebarColumn.ActualWidth : SidebarColumn.Width.Value;
|
||||
if (currentWidth > 0)
|
||||
_sidebarExpandedWidth = Math.Max(190, currentWidth);
|
||||
|
||||
SidebarColumn.MinWidth = 0;
|
||||
if (animated)
|
||||
{
|
||||
AnimateSidebar(248, 0, () =>
|
||||
AnimateSidebar(currentWidth > 0 ? currentWidth : _sidebarExpandedWidth, 0, () =>
|
||||
{
|
||||
SidebarPanel.Visibility = Visibility.Collapsed;
|
||||
SidebarResizeSplitter.Visibility = Visibility.Collapsed;
|
||||
IconBarColumn.Width = new GridLength(52);
|
||||
IconBarPanel.Visibility = Visibility.Visible;
|
||||
});
|
||||
@@ -2881,11 +2890,22 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
SidebarColumn.Width = new GridLength(0);
|
||||
SidebarPanel.Visibility = Visibility.Collapsed;
|
||||
SidebarResizeSplitter.Visibility = Visibility.Collapsed;
|
||||
IconBarColumn.Width = new GridLength(52);
|
||||
IconBarPanel.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
|
||||
private void SidebarResizeSplitter_DragCompleted(object sender, DragCompletedEventArgs e)
|
||||
{
|
||||
if (!_sidebarVisible)
|
||||
return;
|
||||
|
||||
var currentWidth = SidebarColumn.ActualWidth > 0 ? SidebarColumn.ActualWidth : SidebarColumn.Width.Value;
|
||||
_sidebarExpandedWidth = Math.Clamp(currentWidth, 190, 420);
|
||||
SidebarColumn.Width = new GridLength(_sidebarExpandedWidth);
|
||||
}
|
||||
|
||||
private void AnimateSidebar(double from, double to, Action? onComplete = null)
|
||||
{
|
||||
var duration = 200.0;
|
||||
|
||||
Reference in New Issue
Block a user