diff --git a/src/Everything2Everything.App/Views/MainWindow.xaml b/src/Everything2Everything.App/Views/MainWindow.xaml index 3ff0122..ac6d56a 100644 --- a/src/Everything2Everything.App/Views/MainWindow.xaml +++ b/src/Everything2Everything.App/Views/MainWindow.xaml @@ -107,8 +107,7 @@ Margin="0,12,0,0" Content="단일 파일로 결합 (큐 전체 → 한 파일)" IsEnabled="False" - Checked="OnCombineToggleChanged" - Unchecked="OnCombineToggleChanged"/> + Command="{Binding CombineToggleCommand, RelativeSource={RelativeSource AncestorType=Window}}"/> @@ -129,14 +128,13 @@ + Text="{Binding Options.Quality, RelativeSource={RelativeSource AncestorType=Window}, StringFormat={}{0}%}"/> + Value="{Binding Options.Quality, RelativeSource={RelativeSource AncestorType=Window}, Mode=TwoWay}"/> @@ -178,17 +176,17 @@ + Command="{Binding ConflictRuleCommand, RelativeSource={RelativeSource AncestorType=Window}}" + CommandParameter="Skip"/> + Command="{Binding ConflictRuleCommand, RelativeSource={RelativeSource AncestorType=Window}}" + CommandParameter="Rename"/> + Command="{Binding ConflictRuleCommand, RelativeSource={RelativeSource AncestorType=Window}}" + CommandParameter="Replace"/> @@ -202,8 +200,7 @@ + SelectedIndex="0"> @@ -211,8 +208,18 @@ - + + + + + Command="{Binding TabCommand, RelativeSource={RelativeSource AncestorType=Window}}" + CommandParameter="Active"> @@ -351,7 +359,8 @@ + Command="{Binding TabCommand, RelativeSource={RelativeSource AncestorType=Window}}" + CommandParameter="Past"> diff --git a/src/Everything2Everything.App/Views/MainWindow.xaml.cs b/src/Everything2Everything.App/Views/MainWindow.xaml.cs index ded3f96..2296a29 100644 --- a/src/Everything2Everything.App/Views/MainWindow.xaml.cs +++ b/src/Everything2Everything.App/Views/MainWindow.xaml.cs @@ -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? 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 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;