[Phase 17-UI-A] AgentSettingsPanel 완전 통합 — 설정 버튼 직접 연결
ChatWindow.MoodMenu.cs (BtnSettings_Click 개선): - Shift+클릭 조건 제거 → 기어 버튼 클릭 시 AgentSettingsPanel 직접 열기 - Ctrl+클릭으로 전역 SettingsWindow 열기 (기존 동작 유지) - ToggleSettingsPanel(): _toolRegistry 패널에 전달, SettingsChanged 이벤트 연결 - OnSettingsPanelChanged() 신규: 설정 변경 시 ModelLabel·AnalyzerButton 즉시 갱신 ChatWindow.TabSwitching.cs: - UpdateTabUI(): 설정 패널 열린 상태이면 UpdateActiveTab() 자동 호출 - 탭 전환 시 탭별 전용 설정(Cowork 검증/Code LSP 등) 패널 자동 반영 ChatWindow.xaml: - 설정 버튼 ToolTip: "설정 패널 (Ctrl+클릭: 전역 설정)"으로 UX 안내 추가 AgentSettingsPanel.xaml.cs: - LoadFromSettings(): ToolRegistry? 매개변수 추가 (외부 레지스트리 주입) - BuildToolToggles(): 외부 레지스트리 우선, 없으면 ToolRegistry.CreateDefault() 폴백 - 반영 방식 개선: 리플렉션 해킹 제거 → 실제 ChatWindow._toolRegistry 참조 docs/NEXT_ROADMAP.md: - Phase 17-UI-A 완료 항목 추가 (변경 파일 테이블, 개선 효과) 빌드: 경고 0, 오류 0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -418,15 +418,15 @@ public partial class ChatWindow
|
||||
|
||||
private void BtnSettings_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// Phase 32: Shift+클릭 → 인라인 설정 패널 토글, 일반 클릭 → SettingsWindow
|
||||
if (System.Windows.Input.Keyboard.Modifiers.HasFlag(System.Windows.Input.ModifierKeys.Shift))
|
||||
// Phase 17-UI: 기어 버튼 → 인라인 설정 패널 토글
|
||||
// Ctrl+클릭 → 전역 SettingsWindow
|
||||
if (System.Windows.Input.Keyboard.Modifiers.HasFlag(System.Windows.Input.ModifierKeys.Control))
|
||||
{
|
||||
ToggleSettingsPanel();
|
||||
if (System.Windows.Application.Current is App app)
|
||||
app.OpenSettingsFromChat();
|
||||
return;
|
||||
}
|
||||
|
||||
if (System.Windows.Application.Current is App app)
|
||||
app.OpenSettingsFromChat();
|
||||
ToggleSettingsPanel();
|
||||
}
|
||||
|
||||
/// <summary>Phase 32-E: 우측 설정 패널 슬라이드인/아웃 토글.</summary>
|
||||
@@ -442,9 +442,11 @@ public partial class ChatWindow
|
||||
if (TabCowork?.IsChecked == true) activeTab = "Cowork";
|
||||
else if (TabCode?.IsChecked == true) activeTab = "Code";
|
||||
|
||||
SettingsPanel.LoadFromSettings(_settings, activeTab);
|
||||
SettingsPanel.LoadFromSettings(_settings, activeTab, _toolRegistry);
|
||||
SettingsPanel.CloseRequested -= OnSettingsPanelClose;
|
||||
SettingsPanel.CloseRequested += OnSettingsPanelClose;
|
||||
SettingsPanel.SettingsChanged -= OnSettingsPanelChanged;
|
||||
SettingsPanel.SettingsChanged += OnSettingsPanelChanged;
|
||||
SettingsPanel.IsOpen = true;
|
||||
}
|
||||
}
|
||||
@@ -453,4 +455,13 @@ public partial class ChatWindow
|
||||
{
|
||||
SettingsPanel.IsOpen = false;
|
||||
}
|
||||
|
||||
/// <summary>Phase 17-UI: 설정 패널에서 설정 변경 시 ChatWindow UI를 갱신합니다.</summary>
|
||||
private void OnSettingsPanelChanged(object? sender, EventArgs e)
|
||||
{
|
||||
// 모델 라벨 갱신 — 설정 패널에서 모델/서비스 변경 가능성
|
||||
UpdateModelLabel();
|
||||
// 개발자 모드 변경 → 분석기 버튼 가시성 갱신
|
||||
UpdateAnalyzerButtonVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,6 +143,10 @@ public partial class ChatWindow
|
||||
// 현재 대화를 해당 탭 대화로 전환
|
||||
SwitchToTabConversation();
|
||||
|
||||
// Phase 17-UI: 설정 패널이 열려 있으면 탭 전환 시 패널 업데이트
|
||||
if (SettingsPanel?.IsOpen == true)
|
||||
SettingsPanel.UpdateActiveTab(_activeTab);
|
||||
|
||||
// Cowork/Code 탭 전환 시 팁 표시
|
||||
ShowRandomTip();
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center" Margin="0,0,4,0"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<Button Style="{StaticResource GhostBtn}" Click="BtnSettings_Click" ToolTip="설정">
|
||||
<Button Style="{StaticResource GhostBtn}" Click="BtnSettings_Click" ToolTip="설정 패널 (Ctrl+클릭: 전역 설정)">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="13"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
|
||||
@@ -43,7 +43,8 @@ public partial class AgentSettingsPanel : UserControl
|
||||
}
|
||||
|
||||
/// <summary>현재 설정값으로 UI를 초기화합니다.</summary>
|
||||
public void LoadFromSettings(SettingsService settings, string activeTab)
|
||||
public void LoadFromSettings(SettingsService settings, string activeTab,
|
||||
Services.Agent.ToolRegistry? toolRegistry = null)
|
||||
{
|
||||
_isLoading = true;
|
||||
|
||||
@@ -82,7 +83,7 @@ public partial class AgentSettingsPanel : UserControl
|
||||
}
|
||||
|
||||
// 도구 토글 동적 생성
|
||||
BuildToolToggles(settings);
|
||||
BuildToolToggles(settings, toolRegistry);
|
||||
|
||||
_isLoading = false;
|
||||
}
|
||||
@@ -95,11 +96,13 @@ public partial class AgentSettingsPanel : UserControl
|
||||
PanelCodeSettings.Visibility = tab == "Code" ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void BuildToolToggles(SettingsService settings)
|
||||
private void BuildToolToggles(SettingsService settings,
|
||||
Services.Agent.ToolRegistry? externalRegistry = null)
|
||||
{
|
||||
PanelToolToggles.Children.Clear();
|
||||
|
||||
var registry = CurrentApp?.GetType().GetProperty("ToolRegistry")?.GetValue(CurrentApp) as Services.Agent.ToolRegistry;
|
||||
// Phase 17-UI: 외부에서 전달된 레지스트리 우선, 없으면 독립 생성
|
||||
var registry = externalRegistry ?? Services.Agent.ToolRegistry.CreateDefault();
|
||||
if (registry == null) return;
|
||||
|
||||
var disabled = new HashSet<string>(
|
||||
|
||||
Reference in New Issue
Block a user