## 분할 대상 및 결과 ### AgentLoopService.cs (1,334줄 → 846줄) - AgentLoopService.HtmlReport.cs (151줄): AutoSaveAsHtml, ConvertTextToHtml, EscapeHtml - AgentLoopService.Verification.cs (349줄): 도구 분류 판별 + RunPostToolVerificationAsync + EmitEvent + CheckDecisionRequired + FormatToolCallSummary ### ChatWindow 분할 (8개 신규 파셜 파일) - ChatWindow.PlanViewer.cs (474줄): 계획 뷰어 — AddPlanningCard, AddDecisionButtons, CollapseDecisionButtons, ShowPlanButton 등 8개 메서드 - ChatWindow.EventBanner.cs (411줄): AddAgentEventBanner, BuildFileQuickActions - ChatWindow.TaskDecomposition.cs (1,170줄 → 307줄): RenderSuggestActionChips, BuildFeedbackContext, UpdateProgressBar, BuildDiffView 잔류 - ChatWindow.BottomBar.cs (345줄): BuildBottomBar, BuildCodeBottomBar, ShowLogLevelMenu, ShowLanguageMenu 등 - ChatWindow.MoodMenu.cs (456줄): ShowFormatMenu, ShowMoodMenu, ShowCustomMoodDialog 등 - ChatWindow.CustomPresets.cs (978줄 → 203줄): ShowCustomPresetDialog, SelectTopic 잔류 - ChatWindow.ConversationMenu.cs (255줄): ShowConversationMenu (카테고리/삭제/즐겨찾기 팝업) - ChatWindow.ConversationTitleEdit.cs (108줄): EnterTitleEditMode ### SettingsViewModel 분할 - SettingsViewModel.LlmProperties.cs (417줄): LLM·에이전트 관련 바인딩 프로퍼티 - SettingsViewModel.Properties.cs (837줄 → 427줄): 기능 토글·테마·스니펫 등 앱 수준 프로퍼티 ### TemplateService 분할 - TemplateService.Css.cs (559줄): 11종 CSS 테마 문자열 상수 - TemplateService.cs (734줄 → 179줄): 메서드 로직만 잔류 ### PlanViewerWindow 분할 - PlanViewerWindow.StepRenderer.cs (616줄): RenderSteps + SwapSteps + EditStep + 버튼 빌더 9개 - PlanViewerWindow.cs (931줄 → 324줄): Win32/생성자/공개 API 잔류 ### App.xaml.cs 분할 (776줄 → 452줄) - App.Settings.cs (252줄): SetupTrayIcon, OpenSettings, ToggleDockBar, RefreshDockBar, OpenAiChat - App.Helpers.cs (92줄): LoadAppIcon, IsAutoStartEnabled, SetAutoStart, OnExit ### LlmService.ToolUse.cs 분할 (719줄 → 115줄) - LlmService.ClaudeTools.cs (180줄): SendClaudeWithToolsAsync, BuildClaudeToolBody - LlmService.GeminiTools.cs (175줄): SendGeminiWithToolsAsync, BuildGeminiToolBody - LlmService.OpenAiTools.cs (215줄): SendOpenAiWithToolsAsync, BuildOpenAiToolBody ### SettingsWindow.UI.cs 분할 (802줄 → 310줄) - SettingsWindow.Storage.cs (167줄): RefreshStorageInfo, BtnStorageCleanup_Click 등 - SettingsWindow.HotkeyUI.cs (127줄): RefreshHotkeyBadges, EnsureHotkeyInCombo, GetKeyName 등 - SettingsWindow.DevMode.cs (90줄): DevModeCheckBox_Checked, UpdateDevModeContentVisibility ## 빌드 결과: 경고 0, 오류 0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
98 lines
4.0 KiB
C#
98 lines
4.0 KiB
C#
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
|
|
namespace AxCopilot.Views;
|
|
|
|
public partial class SettingsWindow
|
|
{
|
|
private void DevModeCheckBox_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
if (sender is not CheckBox cb || !cb.IsChecked.GetValueOrDefault()) return;
|
|
// 설정 창 로드 중 바인딩에 의한 자동 Checked 이벤트 무시 (이미 활성화된 상태 복원)
|
|
if (!IsLoaded) return;
|
|
|
|
// 테마 리소스 조회
|
|
var bgBrush = TryFindResource("LauncherBackground") as Brush ?? new SolidColorBrush(Color.FromRgb(0x1E, 0x1E, 0x2E));
|
|
var fgBrush = TryFindResource("PrimaryText") as Brush ?? Brushes.White;
|
|
var subFgBrush = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray;
|
|
var borderBrush = TryFindResource("BorderColor") as Brush ?? new SolidColorBrush(Color.FromRgb(0x40, 0x40, 0x60));
|
|
var itemBg = TryFindResource("ItemBackground") as Brush ?? new SolidColorBrush(Color.FromRgb(0x2A, 0x2A, 0x40));
|
|
|
|
// 비밀번호 확인 다이얼로그
|
|
var dlg = new Window
|
|
{
|
|
Title = "개발자 모드 — 비밀번호 확인",
|
|
Width = 340, SizeToContent = SizeToContent.Height,
|
|
WindowStartupLocation = WindowStartupLocation.CenterOwner,
|
|
Owner = this, ResizeMode = ResizeMode.NoResize,
|
|
WindowStyle = WindowStyle.None, AllowsTransparency = true,
|
|
Background = Brushes.Transparent,
|
|
};
|
|
var border = new Border
|
|
{
|
|
Background = bgBrush, CornerRadius = new CornerRadius(12),
|
|
BorderBrush = borderBrush, BorderThickness = new Thickness(1), Padding = new Thickness(20),
|
|
};
|
|
var stack = new StackPanel();
|
|
stack.Children.Add(new TextBlock
|
|
{
|
|
Text = "\U0001f512 개발자 모드 활성화",
|
|
FontSize = 15, FontWeight = FontWeights.SemiBold,
|
|
Foreground = fgBrush, Margin = new Thickness(0, 0, 0, 12),
|
|
});
|
|
stack.Children.Add(new TextBlock
|
|
{
|
|
Text = "비밀번호를 입력하세요:",
|
|
FontSize = 12, Foreground = subFgBrush, Margin = new Thickness(0, 0, 0, 6),
|
|
});
|
|
var pwBox = new PasswordBox
|
|
{
|
|
FontSize = 14, Padding = new Thickness(8, 6, 8, 6),
|
|
Background = itemBg, Foreground = fgBrush, BorderBrush = borderBrush, PasswordChar = '*',
|
|
};
|
|
stack.Children.Add(pwBox);
|
|
|
|
var btnRow = new StackPanel { Orientation = Orientation.Horizontal, HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(0, 16, 0, 0) };
|
|
var cancelBtn = new Button { Content = "취소", Padding = new Thickness(16, 6, 16, 6), Margin = new Thickness(0, 0, 8, 0) };
|
|
cancelBtn.Click += (_, _) => { dlg.DialogResult = false; };
|
|
btnRow.Children.Add(cancelBtn);
|
|
var okBtn = new Button { Content = "확인", Padding = new Thickness(16, 6, 16, 6), IsDefault = true };
|
|
okBtn.Click += (_, _) =>
|
|
{
|
|
if (pwBox.Password == "mouse12#")
|
|
dlg.DialogResult = true;
|
|
else
|
|
{
|
|
pwBox.Clear();
|
|
pwBox.Focus();
|
|
}
|
|
};
|
|
btnRow.Children.Add(okBtn);
|
|
stack.Children.Add(btnRow);
|
|
border.Child = stack;
|
|
dlg.Content = border;
|
|
dlg.Loaded += (_, _) => pwBox.Focus();
|
|
|
|
if (dlg.ShowDialog() != true)
|
|
{
|
|
// 비밀번호 실패/취소 — 체크 해제 + DevMode 강제 false
|
|
_vm.DevMode = false;
|
|
cb.IsChecked = false;
|
|
}
|
|
UpdateDevModeContentVisibility();
|
|
}
|
|
|
|
private void DevModeCheckBox_Unchecked(object sender, RoutedEventArgs e)
|
|
{
|
|
UpdateDevModeContentVisibility();
|
|
}
|
|
|
|
/// <summary>개발자 모드 활성화 상태에 따라 개발자 탭 내용 표시/숨김.</summary>
|
|
private void UpdateDevModeContentVisibility()
|
|
{
|
|
if (DevModeContent != null)
|
|
DevModeContent.Visibility = _vm.DevMode ? Visibility.Visible : Visibility.Collapsed;
|
|
}
|
|
}
|