AX Agent 사이드바 상호작용 프레젠테이션 분리 및 구조 개선 후속 정리
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- ChatWindow에서 검색/새 대화 사이드바 interaction을 SidebarInteractionPresentation partial로 분리 - 검색 열기/닫기 애니메이션과 hover 상태 변경을 메인 창 orchestration 코드 밖으로 이동 - README와 DEVELOPMENT 문서에 2026-04-06 11:03 (KST) 기준 구조 개선 완료 범위와 남은 후속 작업 수준 반영 - dotnet build 검증 경고 0, 오류 0 확인
This commit is contained in:
107
src/AxCopilot/Views/ChatWindow.SidebarInteractionPresentation.cs
Normal file
107
src/AxCopilot/Views/ChatWindow.SidebarInteractionPresentation.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace AxCopilot.Views;
|
||||
|
||||
public partial class ChatWindow
|
||||
{
|
||||
private void SidebarSearchTrigger_MouseEnter(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarSearchTrigger != null)
|
||||
SidebarSearchTrigger.Background = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.Transparent;
|
||||
if (SidebarSearchShortcutHint != null)
|
||||
SidebarSearchShortcutHint.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
private void SidebarSearchTrigger_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarSearchTrigger != null)
|
||||
SidebarSearchTrigger.Background = Brushes.Transparent;
|
||||
if (SidebarSearchShortcutHint != null)
|
||||
SidebarSearchShortcutHint.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void SidebarSearchTrigger_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
OpenSidebarSearch();
|
||||
}
|
||||
|
||||
private void SidebarNewChatTrigger_MouseEnter(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarNewChatTrigger != null)
|
||||
SidebarNewChatTrigger.Background = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.Transparent;
|
||||
if (SidebarNewChatShortcutHint != null)
|
||||
SidebarNewChatShortcutHint.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
private void SidebarNewChatTrigger_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarNewChatTrigger != null)
|
||||
SidebarNewChatTrigger.Background = Brushes.Transparent;
|
||||
if (SidebarNewChatShortcutHint != null)
|
||||
SidebarNewChatShortcutHint.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void SidebarNewChatTrigger_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
BtnNewChat_Click(sender, new RoutedEventArgs());
|
||||
}
|
||||
|
||||
private void BtnSidebarSearchClose_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
CloseSidebarSearch(clearText: true);
|
||||
}
|
||||
|
||||
private void OpenSidebarSearch()
|
||||
{
|
||||
if (SidebarSearchEditor == null || SidebarSearchTrigger == null || SidebarSearchEditorScale == null)
|
||||
return;
|
||||
|
||||
SidebarSearchTrigger.Visibility = Visibility.Collapsed;
|
||||
SidebarSearchEditor.Visibility = Visibility.Visible;
|
||||
SidebarSearchEditor.Opacity = 0;
|
||||
SidebarSearchEditorScale.ScaleX = 0.85;
|
||||
|
||||
var duration = TimeSpan.FromMilliseconds(160);
|
||||
SidebarSearchEditor.BeginAnimation(OpacityProperty, new DoubleAnimation(0, 1, duration));
|
||||
SidebarSearchEditorScale.BeginAnimation(System.Windows.Media.ScaleTransform.ScaleXProperty, new DoubleAnimation(0.85, 1, duration)
|
||||
{
|
||||
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }
|
||||
});
|
||||
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
SearchBox?.Focus();
|
||||
SearchBox?.SelectAll();
|
||||
}), DispatcherPriority.Background);
|
||||
}
|
||||
|
||||
private void CloseSidebarSearch(bool clearText)
|
||||
{
|
||||
if (SidebarSearchEditor == null || SidebarSearchTrigger == null || SidebarSearchEditorScale == null)
|
||||
return;
|
||||
|
||||
if (clearText && SearchBox != null && !string.IsNullOrEmpty(SearchBox.Text))
|
||||
SearchBox.Text = "";
|
||||
|
||||
var duration = TimeSpan.FromMilliseconds(140);
|
||||
var opacityAnim = new DoubleAnimation(1, 0, duration);
|
||||
opacityAnim.Completed += (_, _) =>
|
||||
{
|
||||
SidebarSearchEditor.Visibility = Visibility.Collapsed;
|
||||
SidebarSearchTrigger.Visibility = Visibility.Visible;
|
||||
SidebarSearchTrigger.Background = Brushes.Transparent;
|
||||
if (SidebarSearchShortcutHint != null)
|
||||
SidebarSearchShortcutHint.Visibility = Visibility.Collapsed;
|
||||
};
|
||||
SidebarSearchEditor.BeginAnimation(OpacityProperty, opacityAnim);
|
||||
SidebarSearchEditorScale.BeginAnimation(System.Windows.Media.ScaleTransform.ScaleXProperty, new DoubleAnimation(1, 0.85, duration)
|
||||
{
|
||||
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2087,102 +2087,6 @@ public partial class ChatWindow : Window
|
||||
|
||||
// ─── 검색 ────────────────────────────────────────────────────────────
|
||||
|
||||
private void SidebarSearchTrigger_MouseEnter(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarSearchTrigger != null)
|
||||
SidebarSearchTrigger.Background = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.Transparent;
|
||||
if (SidebarSearchShortcutHint != null)
|
||||
SidebarSearchShortcutHint.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
private void SidebarSearchTrigger_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarSearchTrigger != null)
|
||||
SidebarSearchTrigger.Background = Brushes.Transparent;
|
||||
if (SidebarSearchShortcutHint != null)
|
||||
SidebarSearchShortcutHint.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void SidebarSearchTrigger_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
OpenSidebarSearch();
|
||||
}
|
||||
|
||||
private void SidebarNewChatTrigger_MouseEnter(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarNewChatTrigger != null)
|
||||
SidebarNewChatTrigger.Background = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.Transparent;
|
||||
if (SidebarNewChatShortcutHint != null)
|
||||
SidebarNewChatShortcutHint.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
private void SidebarNewChatTrigger_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (SidebarNewChatTrigger != null)
|
||||
SidebarNewChatTrigger.Background = Brushes.Transparent;
|
||||
if (SidebarNewChatShortcutHint != null)
|
||||
SidebarNewChatShortcutHint.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void SidebarNewChatTrigger_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
BtnNewChat_Click(sender, new RoutedEventArgs());
|
||||
}
|
||||
|
||||
private void BtnSidebarSearchClose_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
CloseSidebarSearch(clearText: true);
|
||||
}
|
||||
|
||||
private void OpenSidebarSearch()
|
||||
{
|
||||
if (SidebarSearchEditor == null || SidebarSearchTrigger == null || SidebarSearchEditorScale == null)
|
||||
return;
|
||||
|
||||
SidebarSearchTrigger.Visibility = Visibility.Collapsed;
|
||||
SidebarSearchEditor.Visibility = Visibility.Visible;
|
||||
SidebarSearchEditor.Opacity = 0;
|
||||
SidebarSearchEditorScale.ScaleX = 0.85;
|
||||
|
||||
var duration = TimeSpan.FromMilliseconds(160);
|
||||
SidebarSearchEditor.BeginAnimation(OpacityProperty, new DoubleAnimation(0, 1, duration));
|
||||
SidebarSearchEditorScale.BeginAnimation(System.Windows.Media.ScaleTransform.ScaleXProperty, new DoubleAnimation(0.85, 1, duration)
|
||||
{
|
||||
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }
|
||||
});
|
||||
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
SearchBox?.Focus();
|
||||
SearchBox?.SelectAll();
|
||||
}), DispatcherPriority.Background);
|
||||
}
|
||||
|
||||
private void CloseSidebarSearch(bool clearText)
|
||||
{
|
||||
if (SidebarSearchEditor == null || SidebarSearchTrigger == null || SidebarSearchEditorScale == null)
|
||||
return;
|
||||
|
||||
if (clearText && SearchBox != null && !string.IsNullOrEmpty(SearchBox.Text))
|
||||
SearchBox.Text = "";
|
||||
|
||||
var duration = TimeSpan.FromMilliseconds(140);
|
||||
var opacityAnim = new DoubleAnimation(1, 0, duration);
|
||||
opacityAnim.Completed += (_, _) =>
|
||||
{
|
||||
SidebarSearchEditor.Visibility = Visibility.Collapsed;
|
||||
SidebarSearchTrigger.Visibility = Visibility.Visible;
|
||||
SidebarSearchTrigger.Background = Brushes.Transparent;
|
||||
if (SidebarSearchShortcutHint != null)
|
||||
SidebarSearchShortcutHint.Visibility = Visibility.Collapsed;
|
||||
};
|
||||
SidebarSearchEditor.BeginAnimation(OpacityProperty, opacityAnim);
|
||||
SidebarSearchEditorScale.BeginAnimation(System.Windows.Media.ScaleTransform.ScaleXProperty, new DoubleAnimation(1, 0.85, duration)
|
||||
{
|
||||
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
|
||||
});
|
||||
}
|
||||
|
||||
private void SearchBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
_conversationSearchTimer.Stop();
|
||||
|
||||
Reference in New Issue
Block a user