diff --git a/README.md b/README.md index 9908145..fad1d1a 100644 --- a/README.md +++ b/README.md @@ -1023,3 +1023,5 @@ MIT License - AX Agent 빈 상태 상단 심볼은 더 크게 키우고, 대화 주제/작업 유형 프리셋 카드 내부 아이콘은 한 단계 줄여 시각 균형을 조정했다. - 업데이트: 2026-04-05 19:46 (KST) - 모델 빠른 설정 팝업에서 하단 중복 모델 칩 줄을 제거하고, 하단 모델 라벨은 서비스+모델 조합 대신 현재 모델명만 보이도록 더 심플하게 정리했다. +- 업데이트: 2026-04-05 19:53 (KST) + - 작업 폴더 선택 팝업을 검색/요약 중심 구조에서 `최근 폴더 목록 + 현재 선택 체크 + 다른 폴더 선택` 형태로 단순화해 더 빠르게 고를 수 있게 정리했다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index f98419c..e521869 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4768,3 +4768,5 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - `ChatWindow` 빈 상태 상단 심볼 크기를 확대하고, 프리셋 카드/기타/프리셋 추가 카드의 내부 아이콘 크기를 축소해 화면 비율을 정리했다. - 업데이트: 2026-04-05 19:46 (KST) - `ChatWindow` 모델 선택 팝업의 중복 `InlineModelChipPanel`을 제거하고, 하단 `ModelLabel`은 현재 모델명 중심으로 단순화해 Claude류의 간결한 표시 방식에 가깝게 조정했다. +- 업데이트: 2026-04-05 19:53 (KST) + - `ChatWindow` 작업 폴더 팝업을 최근 목록 중심 UI로 재구성하고, 검색 박스와 요약 스트립을 제거해 `최근 폴더 + 다른 폴더 선택` 흐름으로 단순화했다. diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index 4e76600..24c4bc2 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -1502,48 +1502,23 @@ AllowsTransparency="True" PopupAnimation="Fade"> + BorderThickness="1" + CornerRadius="16" + MinWidth="286" + MaxWidth="332"> - - - - - - - - - - - + Padding="10,0,10,10"> diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index c8c3156..345f6b3 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -72,8 +72,6 @@ public partial class ChatWindow : Window private readonly HashSet _sessionPermissionRules = new(StringComparer.OrdinalIgnoreCase); private readonly Dictionary _sessionMcpEnabledOverrides = new(StringComparer.OrdinalIgnoreCase); private readonly Dictionary _sessionMcpAuthTokens = new(StringComparer.OrdinalIgnoreCase); - private string _folderMenuSearchText = ""; - // 경과 시간 표시 private readonly DispatcherTimer _elapsedTimer; private DateTime _streamStartTime; @@ -1360,14 +1358,12 @@ public partial class ChatWindow : Window private void FolderPathLabel_Click(object sender, MouseButtonEventArgs e) => ShowFolderMenu(); private void FolderMenuSearchBox_TextChanged(object sender, TextChangedEventArgs e) { - _folderMenuSearchText = FolderMenuSearchBox?.Text?.Trim() ?? ""; - RenderFolderMenuItems(_folderMenuSearchText); + RenderFolderMenuItems(null); } private void ShowFolderMenu() { - _folderMenuSearchText = FolderMenuSearchBox?.Text?.Trim() ?? ""; - RenderFolderMenuItems(_folderMenuSearchText); + RenderFolderMenuItems(null); FolderMenuPopup.IsOpen = true; } @@ -1378,8 +1374,6 @@ public partial class ChatWindow : Window var accentBrush = TryFindResource("AccentColor") as Brush ?? Brushes.CornflowerBlue; var primaryText = TryFindResource("PrimaryText") as Brush ?? Brushes.White; var secondaryText = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray; - var query = (searchText ?? "").Trim(); - var maxDisplay = Math.Clamp(_settings.Settings.Llm.MaxRecentFolders, 3, 30); var currentFolder = GetCurrentWorkFolder(); var conversationFolders = _storage.LoadAllMeta() @@ -1394,31 +1388,13 @@ public partial class ChatWindow : Window .Concat(conversationFolders) .Concat(string.IsNullOrWhiteSpace(currentFolder) ? Enumerable.Empty() : new[] { currentFolder }) .Distinct(StringComparer.OrdinalIgnoreCase) - .Where(path => - string.IsNullOrWhiteSpace(query) - || path.Contains(query, StringComparison.OrdinalIgnoreCase) - || System.IO.Path.GetFileName(path).Contains(query, StringComparison.OrdinalIgnoreCase)) - .Take(maxDisplay * 3) + .Take(maxDisplay * 2) .ToList(); var filteredRecent = recentFolders - .Where(path => - string.IsNullOrWhiteSpace(query) - || path.Contains(query, StringComparison.OrdinalIgnoreCase) - || System.IO.Path.GetFileName(path).Contains(query, StringComparison.OrdinalIgnoreCase)) .Take(maxDisplay) .ToList(); - var currentWorkspaceName = string.IsNullOrWhiteSpace(currentFolder) - ? "없음" - : System.IO.Path.GetFileName(currentFolder.TrimEnd('\\', '/')); - FolderMenuItems.Children.Add(CreatePopupSummaryStrip(new[] - { - ("현재", currentWorkspaceName, "#F8FAFC", "#E2E8F0", "#475569"), - ("최근", filteredRecent.Count.ToString(), "#EFF6FF", "#BFDBFE", "#1D4ED8"), - ("전체", workspaceFolders.Count.ToString(), "#F5F3FF", "#DDD6FE", "#6D28D9"), - })); - void AddWorkspaceRows(IEnumerable folders) { foreach (var folder in folders) @@ -1426,9 +1402,9 @@ public partial class ChatWindow : Window var isActive = folder.Equals(currentFolder, StringComparison.OrdinalIgnoreCase); var displayName = System.IO.Path.GetFileName(folder); if (string.IsNullOrEmpty(displayName)) displayName = folder; - var detailText = isActive ? $"현재 선택 · {folder}" : folder; + var detailText = folder; var itemBorder = CreatePopupMenuRow( - isActive ? "\uE73E" : "\uE8B7", + "\uE8B7", displayName, detailText, isActive, @@ -1454,7 +1430,6 @@ public partial class ChatWindow : Window if (filteredRecent.Count > 0) { - FolderMenuItems.Children.Add(CreatePopupSectionLabel($"최근 워크스페이스 · {filteredRecent.Count}", new Thickness(10, 6, 10, 4))); AddWorkspaceRows(filteredRecent); } @@ -1464,46 +1439,51 @@ public partial class ChatWindow : Window if (remainingFolders.Count > 0) { - var workspaceLabel = filteredRecent.Count > 0 - ? $"전체 워크스페이스 · {remainingFolders.Count}" - : $"워크스페이스 · {remainingFolders.Count}"; - FolderMenuItems.Children.Add(CreatePopupSectionLabel(workspaceLabel, new Thickness(10, 6, 10, 4))); - AddWorkspaceRows(remainingFolders); - FolderMenuItems.Children.Add(new Border { Height = 1, Background = TryFindResource("BorderColor") as Brush ?? Brushes.Gray, - Margin = new Thickness(8, 4, 8, 4), - Opacity = 0.5, + Margin = new Thickness(8, 4, 8, 8), + Opacity = 0.45, }); + AddWorkspaceRows(remainingFolders); } - else if (filteredRecent.Count == 0) + + if (filteredRecent.Count == 0 && remainingFolders.Count == 0) { FolderMenuItems.Children.Add(new TextBlock { - Text = "검색 결과가 없습니다.", + Text = "최근 작업 폴더가 없습니다.", FontSize = 11.5, Foreground = secondaryText, - Margin = new Thickness(10, 8, 10, 10), + Margin = new Thickness(10, 6, 10, 10), }); } - // 폴더 찾아보기 버튼 + FolderMenuItems.Children.Add(new Border + { + Height = 1, + Background = TryFindResource("BorderColor") as Brush ?? Brushes.Gray, + Margin = new Thickness(8, 8, 8, 8), + Opacity = 0.45, + }); + + // 다른 폴더 선택 버튼 var browseSp = new StackPanel { Orientation = Orientation.Horizontal }; browseSp.Children.Add(new TextBlock { - Text = "\uED25", + Text = "\uE710", FontFamily = new FontFamily("Segoe MDL2 Assets"), - FontSize = 14, + FontSize = 13, Foreground = accentBrush, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 8, 0), }); browseSp.Children.Add(new TextBlock { - Text = "폴더 찾아보기...", - FontSize = 14, + Text = "다른 폴더 선택", + FontSize = 13, + FontWeight = FontWeights.SemiBold, Foreground = primaryText, VerticalAlignment = VerticalAlignment.Center, });