refactor(P5b-6): 옵션/탭/충돌/결합 핸들러 5개 → 선언적 바인딩·커맨드 (의존성 0)
새 패키지 없이 회귀 없는 핸들러 제거/전환: - OnQualityChanged 제거 → QualityValueText.Text를 Options.Quality에 StringFormat 바인딩. - OnAiTaskChanged 제거 → AiTargetLangPanel.Visibility를 AiTaskCombo.SelectedIndex DataTrigger로. - OnTabClick 제거 → TabCommand(ToggleButton.Command + CommandParameter "Active"/"Past"). - OnConflictSegmentClick → SetConflictRule + ConflictRuleCommand(CommandParameter "Skip/Rename/Replace"). - OnCombineToggleChanged 제거 → CombineToggleCommand(CheckBox.Command, 토글 시 발화). - 검증: 빌드 0/0, 83 테스트 그린, publish 후 메인 창 크래시 없이 로드(언핸들드 로그 없음). - 잔여: 동적 포맷 콤보 SelectionChanged, 드래그앤드롭, 행 미리보기 클릭(IsInsideButton 가드), 복합 ProcessQueue 버튼.
This commit is contained in:
parent
a05bbcf709
commit
ccba168f9a
2 changed files with 38 additions and 50 deletions
|
|
@ -50,6 +50,9 @@ public partial class MainWindow : Wpf.Ui.Controls.FluentWindow
|
|||
public ICommand PreviewOpenFolderCommand { get; }
|
||||
public ICommand RemoveQueueItemCommand { get; }
|
||||
public ICommand OpenFolderCommand { get; }
|
||||
public ICommand TabCommand { get; }
|
||||
public ICommand ConflictRuleCommand { get; }
|
||||
public ICommand CombineToggleCommand { get; }
|
||||
|
||||
public MainWindow(ConversionEngine engine, ISettingsStore settings, IReadOnlyList<string>? initialFiles = null)
|
||||
{
|
||||
|
|
@ -72,6 +75,9 @@ public partial class MainWindow : Wpf.Ui.Controls.FluentWindow
|
|||
PreviewOpenFolderCommand = new RelayCommand(_ => OnPreviewOpenFolder(this, new RoutedEventArgs()));
|
||||
RemoveQueueItemCommand = new RelayCommand(p => RemoveQueueItem(p as QueueItem));
|
||||
OpenFolderCommand = new RelayCommand(p => OpenFolderForPath(p as string));
|
||||
TabCommand = new RelayCommand(p => ShowTab(p as string ?? "Past"));
|
||||
ConflictRuleCommand = new RelayCommand(p => SetConflictRule(p as string));
|
||||
CombineToggleCommand = new RelayCommand(_ => UpdateCombineState(SelectedOutputExtension));
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
|
|
@ -147,14 +153,6 @@ public partial class MainWindow : Wpf.Ui.Controls.FluentWindow
|
|||
|
||||
// ============== Tabs ==============
|
||||
|
||||
private void OnTabClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is ToggleButton tb && tb.Tag is string tag)
|
||||
{
|
||||
ShowTab(tag);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowTab(string tag)
|
||||
{
|
||||
TabActiveBtn.IsChecked = tag == "Active";
|
||||
|
|
@ -270,32 +268,18 @@ public partial class MainWindow : Wpf.Ui.Controls.FluentWindow
|
|||
|
||||
// ============== Sidebar inputs ==============
|
||||
|
||||
private void OnQualityChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||
private void SetConflictRule(string? tag)
|
||||
{
|
||||
if (QualityValueText is null) return;
|
||||
QualityValueText.Text = $"{(int)e.NewValue}%";
|
||||
}
|
||||
|
||||
private void OnConflictSegmentClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is not ToggleButton clicked) return;
|
||||
ConflictSkipBtn.IsChecked = clicked == ConflictSkipBtn;
|
||||
ConflictRenameBtn.IsChecked = clicked == ConflictRenameBtn;
|
||||
ConflictReplaceBtn.IsChecked = clicked == ConflictReplaceBtn;
|
||||
_conflictRule = (clicked.Tag as string) switch
|
||||
_conflictRule = tag switch
|
||||
{
|
||||
"Skip" => NameCollision.Skip,
|
||||
"Replace" => NameCollision.Overwrite,
|
||||
_ => NameCollision.AppendNumber,
|
||||
};
|
||||
}
|
||||
|
||||
private void OnAiTaskChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
// 번역(인덱스 1)일 때만 대상 언어 입력을 표시
|
||||
if (AiTargetLangPanel is null) return;
|
||||
AiTargetLangPanel.Visibility =
|
||||
(AiTaskCombo?.SelectedIndex == 1) ? Visibility.Visible : Visibility.Collapsed;
|
||||
// 세그먼트 토글 그룹의 상호배제(하나만 체크).
|
||||
ConflictSkipBtn.IsChecked = tag == "Skip";
|
||||
ConflictRenameBtn.IsChecked = tag == "Rename";
|
||||
ConflictReplaceBtn.IsChecked = tag == "Replace";
|
||||
}
|
||||
|
||||
private void OnPickOutputFolderClick(object sender, RoutedEventArgs e)
|
||||
|
|
@ -1052,11 +1036,6 @@ public partial class MainWindow : Wpf.Ui.Controls.FluentWindow
|
|||
};
|
||||
}
|
||||
|
||||
private void OnCombineToggleChanged(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UpdateCombineState(SelectedOutputExtension);
|
||||
}
|
||||
|
||||
private void OnOutputFormatChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (_suppressFormatChanged) return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue