UI 복잡 버전 234 RED→GREEN 완료(docs/UI_USECASES.md §A~§J): 라이브 테마 전환(DynamicResource 전환+ThemeResolver+HighContrast 테마, 재시작 없음), 디자인 토큰 체계·WCAG 대비 결함 5건 수정, 설정창 카테고리 내비/검색 재구성+AppConfig 40여 속성, 다운로드 관리자(속도/ETA/세그먼트맵/전체 일시정지-이어받기/CSV 내보내기/예약 게이트/중복 확인), 라이브러리·아카이브·작업공간·재생목록·즐겨찾기 편집 뷰, 접근성(자동화 속성 30여 개·커스텀 피어·docs/ACCESSIBILITY.md), 인터랙션(휠 클릭 새 탭·XButton 탐색·F12·영역 캡처·프로필 전환), 상태/알림(토스트·알림센터·온보딩·CrashReportDialog). 보강 테스트 35건+실창 E2E 4건(StaDispatcher 기반 — 프록시 설정이 기시작 핸들러를 건드리는 크래시 실결함 수정 포함) — 453/453 GREEN. 이전 미커밋 작업(CI 워크플로·Mdns·QueueHub·UpdateChecker·AGENTS/CLAUDE·빌드 스크립트) 일괄 포함
This commit is contained in:
parent
5a0ce730b2
commit
17f2f91152
88 changed files with 9463 additions and 1127 deletions
|
|
@ -1,11 +1,14 @@
|
|||
<Window x:Class="VideoDownloader.App.SettingsWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title="설정" Height="600" Width="620"
|
||||
FontFamily="{StaticResource UiFont}"
|
||||
Background="{StaticResource WindowBgGradient}"
|
||||
Title="설정" Height="680" Width="860"
|
||||
FontFamily="{DynamicResource UiFont}"
|
||||
Background="{DynamicResource WindowBgGradient}"
|
||||
WindowStartupLocation="CenterOwner" ResizeMode="CanResize" ShowInTaskbar="False"
|
||||
WindowStyle="None">
|
||||
UseLayoutRounding="True"
|
||||
KeyboardNavigation.TabNavigation="Cycle"
|
||||
WindowStyle="None"
|
||||
AutomationProperties.Name="설정 창">
|
||||
|
||||
<WindowChrome.WindowChrome>
|
||||
<WindowChrome CaptionHeight="0"
|
||||
|
|
@ -23,153 +26,462 @@
|
|||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 캡션 (드래그 핸들 + 닫기) -->
|
||||
<Border Grid.Row="0" Background="{StaticResource PanelBg}"
|
||||
BorderBrush="{StaticResource BorderSubtle}" BorderThickness="0,0,0,1"
|
||||
<!-- 캡션 (드래그 핸들 + 검색 + 닫기) -->
|
||||
<Border Grid.Row="0" Background="{DynamicResource PanelBg}"
|
||||
BorderBrush="{DynamicResource BorderSubtle}" BorderThickness="0,0,0,1"
|
||||
Padding="22,11,0,11" MouseLeftButtonDown="TitleBar_MouseDown">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource CloseButton}"
|
||||
Content="" ToolTip="닫기" Click="Close_Click"/>
|
||||
<TextBlock Text="설정" Foreground="{StaticResource TextPrimary}"
|
||||
Content="" ToolTip="닫기" Click="Close_Click"
|
||||
AutomationProperties.Name="설정 창 닫기"/>
|
||||
<!-- UC-S01 설정 검색 -->
|
||||
<TextBox x:Name="SettingsSearchBox" DockPanel.Dock="Right" Style="{StaticResource DarkTextBox}"
|
||||
Width="220" FontSize="12" Padding="10,5" Margin="12,0,8,0"
|
||||
TextChanged="SettingsSearchBox_TextChanged" ToolTip="설정 항목 검색"
|
||||
AutomationProperties.Name="설정 검색"/>
|
||||
<TextBlock Text="설정" Foreground="{DynamicResource TextPrimary}"
|
||||
FontWeight="SemiBold" FontSize="14" VerticalAlignment="Center"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
|
||||
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Padding="22,18">
|
||||
<StackPanel>
|
||||
<Grid Grid.Row="1" Margin="18,14,18,8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="170"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Text="외관" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<CheckBox Name="ThemeLightBox" Style="{StaticResource DarkCheckBox}"
|
||||
Content="라이트 테마 사용 (적용 시 앱 재시작)" Margin="0,8,0,18"/>
|
||||
<!-- UC-S02 좌측 카테고리 내비게이션 -->
|
||||
<ListBox x:Name="SettingsNavList" Grid.Column="0" Background="Transparent" BorderThickness="0"
|
||||
SelectionChanged="SettingsNav_SelectionChanged"
|
||||
AutomationProperties.Name="설정 카테고리">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding}" FontSize="12.5" Padding="10,7" Foreground="{DynamicResource TextSecondary}"/>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
<ListBox.ItemContainerStyle>
|
||||
<Style TargetType="ListBoxItem">
|
||||
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
|
||||
<Setter Property="Cursor" Value="Hand"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ListBoxItem">
|
||||
<Border x:Name="bd" Background="Transparent" CornerRadius="7" Padding="10,7" Margin="0,1">
|
||||
<ContentPresenter/>
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
|
||||
</Trigger>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter TargetName="bd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
|
||||
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ListBox.ItemContainerStyle>
|
||||
</ListBox>
|
||||
|
||||
<TextBlock Text="저장 폴더" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,18">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="8,4,4,4" Click="BrowseFolder"/>
|
||||
<TextBox Name="FolderBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" Padding="14,0,4,0">
|
||||
<StackPanel>
|
||||
|
||||
<TextBlock Text="홈 페이지 (홈 버튼이 이동할 주소)" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,18">
|
||||
<TextBox Name="HomeBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
<!-- ==================== 외관 ==================== -->
|
||||
<StackPanel x:Name="SectionAppearance" Margin="0,0,0,20" Tag="외관">
|
||||
<TextBlock Text="외관" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
|
||||
<StackPanel Margin="0,0,0,18">
|
||||
<TextBlock Text="기본 검색 엔진 (주소창에 검색어 입력 시)" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<ComboBox Name="SearchEngineBox" Style="{StaticResource DarkComboBox}" Margin="0,6,0,4"
|
||||
SelectionChanged="SearchEngineBox_SelectionChanged"/>
|
||||
<TextBlock x:Name="SearchEngineHint" FontSize="11" Foreground="{StaticResource TextMuted}" TextWrapping="Wrap"
|
||||
Text="주소창에 `g 검색어`, `yt 검색어` 등 키워드를 입력하면 검색 엔진을 즉시 전환할 수 있어요"/>
|
||||
</StackPanel>
|
||||
<!-- UC-T01/T02/T06 테마: 다크/라이트/시스템/고대비 콤보박스 — 즉시 적용 -->
|
||||
<TextBlock Text="테마" Style="{StaticResource Type.Caption}"/>
|
||||
<ComboBox x:Name="ThemeModeBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag"
|
||||
Margin="0,4,0,8" SelectionChanged="ThemeModeBox_SelectionChanged"
|
||||
AutomationProperties.Name="테마 선택" AutomationProperties.HelpText="선택 즉시 적용됩니다">
|
||||
<ComboBoxItem Content="다크" Tag="dark"/>
|
||||
<ComboBoxItem Content="라이트" Tag="light"/>
|
||||
<ComboBoxItem Content="시스템 설정 따르기" Tag="system"/>
|
||||
<ComboBoxItem Content="고대비" Tag="highcontrast"/>
|
||||
</ComboBox>
|
||||
|
||||
<Grid Margin="0,0,0,18">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="세그먼트 동시 수" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,0">
|
||||
<TextBox Name="ConcurrencyBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
<!-- UC-T07 강조색 프리셋 스와치 + 사용자 지정 -->
|
||||
<TextBlock Text="강조색" Style="{StaticResource Type.Caption}"/>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4,0,4">
|
||||
<RadioButton x:Name="AccentDefault" Style="{StaticResource DarkRadioButton}" Content="기본(보라)" Margin="0,0,12,0" Checked="Accent_Checked" GroupName="accent"/>
|
||||
<RadioButton x:Name="AccentBlue" Style="{StaticResource DarkRadioButton}" Content="파랑" Margin="0,0,12,0" Checked="Accent_Checked" GroupName="accent"/>
|
||||
<RadioButton x:Name="AccentGreen" Style="{StaticResource DarkRadioButton}" Content="초록" Margin="0,0,12,0" Checked="Accent_Checked" GroupName="accent"/>
|
||||
<RadioButton x:Name="AccentPink" Style="{StaticResource DarkRadioButton}" Content="핑크" Margin="0,0,12,0" Checked="Accent_Checked" GroupName="accent"/>
|
||||
</StackPanel>
|
||||
<DockPanel Margin="0,2,0,8">
|
||||
<TextBlock DockPanel.Dock="Right" Text="#RRGGBB" Style="{StaticResource Type.Caption}" VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||||
<TextBox x:Name="AccentColorBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,5"
|
||||
ToolTip="사용자 지정 강조색(#6366F1 등)" AutomationProperties.Name="사용자 지정 강조색"/>
|
||||
</DockPanel>
|
||||
|
||||
<!-- UC-T12 사용자 테마 파일 -->
|
||||
<TextBlock Text="사용자 테마 파일(.xaml)" Style="{StaticResource Type.Caption}"/>
|
||||
<DockPanel Margin="0,4,0,0">
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="8,4,0,4" Click="BrowseThemeFile"
|
||||
AutomationProperties.Name="테마 파일 찾아보기"/>
|
||||
<TextBox x:Name="CustomThemeBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
|
||||
<!-- UC-L02 밀도 -->
|
||||
<TextBlock Text="밀도" Style="{StaticResource Type.Caption}" Margin="0,10,0,4"/>
|
||||
<ComboBox x:Name="UiDensityBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag"
|
||||
AutomationProperties.Name="정보 밀도 선택">
|
||||
<ComboBoxItem Content="컴팩트" Tag="compact"/>
|
||||
<ComboBoxItem Content="보통" Tag="normal"/>
|
||||
<ComboBoxItem Content="여유" Tag="comfortable"/>
|
||||
</ComboBox>
|
||||
|
||||
<!-- UC-L25/A13 배율 -->
|
||||
<TextBlock Text="UI 크기 · 글자 확대 (100~200%)" Style="{StaticResource Type.Caption}" Margin="0,10,0,4"/>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Slider x:Name="UiScaleSlider" Minimum="1.0" Maximum="2.0" Width="180" ValueChanged="UiScaleSlider_ValueChanged"
|
||||
IsSnapToTickEnabled="True" TickFrequency="0.05"
|
||||
AutomationProperties.Name="UI 크기 배율"/>
|
||||
<TextBlock x:Name="UiScaleLabel" Text="100%" Style="{StaticResource Type.Mono}" VerticalAlignment="Center" Margin="10,0,0,0"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<!-- ==================== 글꼴 (UC-F13) ==================== -->
|
||||
<StackPanel x:Name="SectionFont" Margin="0,0,0,20" Tag="글꼴">
|
||||
<TextBlock Text="글꼴" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
<TextBlock Text="기본 폰트" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBox x:Name="UiFontFamilyBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,6" Margin="0,4,0,8"
|
||||
ToolTip="예: Pretendard, 나눔고딕" AutomationProperties.Name="기본 폰트"/>
|
||||
<TextBlock Text="한국어 폴백 폰트" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBox x:Name="UiFontKoreanFallbackBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,6" Margin="0,4,0,8"
|
||||
ToolTip="예: Malgun Gothic" AutomationProperties.Name="한국어 폴백 폰트"/>
|
||||
|
||||
<!-- UC-F15 폰트 크기 프리셋 -->
|
||||
<TextBlock Text="폰트 크기" Style="{StaticResource Type.Caption}"/>
|
||||
<ComboBox x:Name="FontSizeBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag"
|
||||
AutomationProperties.Name="폰트 크기 프리셋">
|
||||
<ComboBoxItem Content="작게 (12)" Tag="12"/>
|
||||
<ComboBoxItem Content="보통 (13)" Tag="13"/>
|
||||
<ComboBoxItem Content="크게 (14)" Tag="14"/>
|
||||
<ComboBoxItem Content="더 크게 (15)" Tag="15"/>
|
||||
</ComboBox>
|
||||
|
||||
<!-- UC-F14 미리보기 -->
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}"
|
||||
BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,10,0,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="미리보기" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBlock x:Name="FontPreviewText" Text="다운로드 완료 — 영상 123개 · 속도 4.5 MB/s"
|
||||
FontSize="13" Foreground="{DynamicResource TextPrimary}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="최대 동시 항목" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,0">
|
||||
<TextBox Name="MaxConcurrentBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
|
||||
<!-- ==================== 일반 ==================== -->
|
||||
<StackPanel x:Name="SectionGeneral" Margin="0,0,0,20" Tag="일반">
|
||||
<TextBlock Text="일반" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
<TextBlock Text="저장 폴더" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,10">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="8,4,4,4" Click="BrowseFolder"/>
|
||||
<TextBox Name="FolderBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="홈 페이지 (홈 버튼이 이동할 주소)" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,10">
|
||||
<TextBox Name="HomeBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
|
||||
<!-- UC-S14 UI 언어 -->
|
||||
<TextBlock Text="UI 언어" Style="{StaticResource Type.Caption}"/>
|
||||
<ComboBox x:Name="LanguageBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag" Margin="0,4,0,10"
|
||||
AutomationProperties.Name="UI 언어 선택">
|
||||
<ComboBoxItem Content="한국어" Tag="ko"/>
|
||||
<ComboBoxItem Content="English" Tag="en"/>
|
||||
</ComboBox>
|
||||
|
||||
<StackPanel Margin="0,0,0,10">
|
||||
<TextBlock Text="기본 검색 엔진 (주소창에 검색어 입력 시)" Style="{StaticResource Type.Caption}"/>
|
||||
<ComboBox Name="SearchEngineBox" Style="{StaticResource DarkComboBox}" Margin="0,4,0,4"
|
||||
SelectionChanged="SearchEngineBox_SelectionChanged"/>
|
||||
<TextBlock x:Name="SearchEngineHint" Style="{StaticResource Type.Caption}"
|
||||
Text="주소창에 `g 검색어`, `yt 검색어` 등 키워드를 입력하면 검색 엔진을 즉시 전환할 수 있어요"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- UC-S15 Windows 시작 시 자동 실행 / UC-S16 트레이 최소화 -->
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,2,0,0">
|
||||
<CheckBox Name="AutoStartBox" Style="{StaticResource DarkCheckBox}" Content="Windows 시작 시 자동 실행" Margin="4,4"/>
|
||||
<CheckBox Name="MinimizeToTrayBox" Style="{StaticResource DarkCheckBox}" Content="닫기 버튼으로 트레이로 최소화" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
|
||||
<!-- ==================== 다운로드 ==================== -->
|
||||
<StackPanel x:Name="SectionDownload" Margin="0,0,0,20" Tag="다운로드">
|
||||
<TextBlock Text="다운로드" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
<Grid Margin="0,0,0,10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="세그먼트 동시 수" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,0">
|
||||
<TextBox Name="ConcurrencyBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="최대 동시 항목" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,0">
|
||||
<TextBox Name="MaxConcurrentBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<!-- UC-S11 재시도 횟수 -->
|
||||
<StackPanel Grid.Column="4">
|
||||
<TextBlock Text="재시도 횟수" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,0">
|
||||
<TextBox Name="RetriesBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<Grid Margin="0,0,0,10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="최소 크기 (MB)" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,0">
|
||||
<TextBox Name="MinSizeBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<!-- UC-D22 속도 상한 -->
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="속도 상한 (KB/s, 0=무제한)" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,0">
|
||||
<TextBox Name="MaxSpeedBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,2,0,10">
|
||||
<CheckBox Name="AutoClearCompletedBox" Style="{StaticResource DarkCheckBox}" Content="완료 항목 자동 치우기" Margin="4,4"/>
|
||||
<CheckBox Name="OpenFolderOnCompleteBox" Style="{StaticResource DarkCheckBox}" Content="완료 시 폴더 자동 열기" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
|
||||
<!-- UC-D21 다운로드 예약 창 -->
|
||||
<TextBlock Text="다운로드 예약 시간대 (HH:mm-HH:mm, 비우면 항상)" Style="{StaticResource Type.Caption}" Margin="0,10,0,4"/>
|
||||
<TextBox x:Name="ScheduleBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,5" Width="200" HorizontalAlignment="Left"
|
||||
ToolTip="예: 02:00-08:00 — 이 시간대에만 다운로드가 실행됩니다" AutomationProperties.Name="다운로드 예약 시간대"/>
|
||||
|
||||
<!-- UC-D20 자막 언어 -->
|
||||
<TextBlock Text="자막 언어 (ko/en/…, 비우면 자막 안 받음)" Style="{StaticResource Type.Caption}" Margin="0,10,0,4"/>
|
||||
<ComboBox x:Name="SubtitleLangBox" Style="{StaticResource DarkComboBox}" IsEditable="True" Margin="0,4,0,0"
|
||||
AutomationProperties.Name="자막 언어 선택">
|
||||
<ComboBoxItem Content="(자막 없음)" Tag=""/>
|
||||
<ComboBoxItem Content="한국어 (ko)" Tag="ko"/>
|
||||
<ComboBoxItem Content="English (en)" Tag="en"/>
|
||||
<ComboBoxItem Content="日本語 (ja)" Tag="ja"/>
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
|
||||
<!-- ==================== 알림 (UC-S17) ==================== -->
|
||||
<StackPanel x:Name="SectionNotify" Margin="0,0,0,20" Tag="알림">
|
||||
<TextBlock Text="알림" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,0,0,8">
|
||||
<CheckBox Name="NotifySoundBox" Style="{StaticResource DarkCheckBox}" Content="완료 알림 소리" Margin="4,4"/>
|
||||
<CheckBox Name="DoNotDisturbBox" Style="{StaticResource DarkCheckBox}" Content="방해 금지 (토스트 숨김)" Margin="4,4"/>
|
||||
<CheckBox Name="PauseOnPowerSaverBox" Style="{StaticResource DarkCheckBox}" Content="절전 모드 진입 시 일시정지" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
<TextBlock Text="토스트 표시 시간 (초)" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBox x:Name="ToastDurationBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,5" Width="120" HorizontalAlignment="Left"
|
||||
AutomationProperties.Name="토스트 표시 시간"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- ==================== 접근성 (UC-A12) ==================== -->
|
||||
<StackPanel x:Name="SectionAccessibility" Margin="0,0,0,20" Tag="접근성">
|
||||
<TextBlock Text="접근성" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,0,0,8">
|
||||
<CheckBox Name="ReduceMotionBox" Style="{StaticResource DarkCheckBox}" Content="애니메이션 줄이기" Margin="4,4"/>
|
||||
<CheckBox Name="ShowCaptionsBox" Style="{StaticResource DarkCheckBox}" Content="영상 자막 표시" Margin="4,4"/>
|
||||
<CheckBox Name="FocusSelectsAddressBox" Style="{StaticResource DarkCheckBox}" Content="주소창 포커스 시 전체 선택" Margin="4,4"/>
|
||||
<CheckBox Name="PasteAndGoBox" Style="{StaticResource DarkCheckBox}" Content="붙여넣으면 즉시 이동" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
<TextBlock Text="글자 확대 배율 (저시력 지원, 외관 섹션 슬라이더와 연동)" Style="{StaticResource Type.Caption}"/>
|
||||
<Slider x:Name="UiFontScaleSlider" Minimum="1.0" Maximum="2.0" Width="220" HorizontalAlignment="Left"
|
||||
IsSnapToTickEnabled="True" TickFrequency="0.1" ValueChanged="UiFontScaleSlider_ValueChanged"
|
||||
AutomationProperties.Name="글자 확대 배율"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- ==================== 브라우저 ==================== -->
|
||||
<StackPanel x:Name="SectionBrowser" Margin="0,0,0,20" Tag="브라우저">
|
||||
<TextBlock Text="브라우저" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,10"/>
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,0,0,8">
|
||||
<CheckBox Name="TabWheelSwitchBox" Style="{StaticResource DarkCheckBox}" Content="휠로 탭 전환" Margin="4,4"/>
|
||||
<CheckBox Name="ConfirmCloseMultipleTabsBox" Style="{StaticResource DarkCheckBox}" Content="여러 탭 닫기 전 확인" Margin="4,4"/>
|
||||
<CheckBox Name="BookmarkBarVisibleBox" Style="{StaticResource DarkCheckBox}" Content="북마크바 표시" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
<!-- UC-L18 탭 스트립 위치 -->
|
||||
<TextBlock Text="탭 스트립 위치" Style="{StaticResource Type.Caption}"/>
|
||||
<ComboBox x:Name="TabStripPositionBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag" Margin="0,4,0,8"
|
||||
AutomationProperties.Name="탭 스트립 위치 선택">
|
||||
<ComboBoxItem Content="위 (기본)" Tag="top"/>
|
||||
<ComboBoxItem Content="아래" Tag="bottom"/>
|
||||
<ComboBoxItem Content="왼쪽 (세로 탭)" Tag="left"/>
|
||||
</ComboBox>
|
||||
<TextBlock Text="반응할 형식" Style="{StaticResource Type.Caption}" Margin="0,4,0,6"/>
|
||||
<WrapPanel Orientation="Horizontal">
|
||||
<CheckBox Name="FmtHls" Style="{StaticResource DarkCheckBox}" Content="HLS (m3u8)" Margin="4,5"/>
|
||||
<CheckBox Name="FmtDash" Style="{StaticResource DarkCheckBox}" Content="DASH (.mpd)" Margin="4,5"/>
|
||||
<CheckBox Name="FmtMp4" Style="{StaticResource DarkCheckBox}" Content="MP4" Margin="4,5"/>
|
||||
<CheckBox Name="FmtWebM" Style="{StaticResource DarkCheckBox}" Content="WebM" Margin="4,5"/>
|
||||
<CheckBox Name="FmtMkv" Style="{StaticResource DarkCheckBox}" Content="MKV" Margin="4,5"/>
|
||||
<CheckBox Name="FmtM4v" Style="{StaticResource DarkCheckBox}" Content="M4V" Margin="4,5"/>
|
||||
<CheckBox Name="FmtMov" Style="{StaticResource DarkCheckBox}" Content="MOV" Margin="4,5"/>
|
||||
<CheckBox Name="FmtAvi" Style="{StaticResource DarkCheckBox}" Content="AVI" Margin="4,5"/>
|
||||
<CheckBox Name="FmtAudio" Style="{StaticResource DarkCheckBox}" Content="오디오 (m4a/mp3/ogg...)" Margin="4,5"/>
|
||||
</WrapPanel>
|
||||
<TextBlock Text="브라우저 데이터" Style="{StaticResource Type.Caption}" Margin="0,10,0,4"/>
|
||||
<TextBlock x:Name="ProfileModeText" Text="" Style="{StaticResource Type.Caption}" Margin="0,0,0,6"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,0,0,0">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="삭제" Padding="12,4" Margin="8,4,4,4"
|
||||
ToolTip="쿠키·localStorage·캐시 삭제 (현재 프로필)" Click="ClearData_Click"/>
|
||||
<TextBox x:Name="ProfilePathBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent" IsReadOnly="True"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="4">
|
||||
<TextBlock Text="최소 크기 (MB)" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,0">
|
||||
<TextBox Name="MinSizeBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
|
||||
<!-- ==================== 고급 (UC-S07 접힘) ==================== -->
|
||||
<Expander x:Name="AdvancedSection" Header="고급" FontSize="14" Foreground="{DynamicResource TextPrimary}" Margin="0,0,0,20"
|
||||
ExpandDirection="Down" IsExpanded="False" Tag="고급">
|
||||
<StackPanel Margin="0,10,0,0">
|
||||
<TextBlock Text="ffmpeg 경로" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,4">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="8,4,4,4" Click="BrowseFfmpeg"/>
|
||||
<TextBox Name="FfmpegBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<TextBlock Text="비워두면 시스템 PATH 의 ffmpeg 사용 (HLS→MP4 리먹스)" Style="{StaticResource Type.Caption}" Margin="0,0,0,10"/>
|
||||
|
||||
<!-- UC-S12 User-Agent / UC-S13 프록시 -->
|
||||
<TextBlock Text="User-Agent" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBox x:Name="UserAgentBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,6" Margin="0,4,0,10"
|
||||
AutomationProperties.Name="User-Agent"/>
|
||||
<TextBlock Text="프록시 서버 (http://host:port)" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBox x:Name="ProxyBox" Style="{StaticResource DarkTextBox}" FontSize="12" Padding="8,6" Margin="0,4,0,4"
|
||||
AutomationProperties.Name="프록시 서버"/>
|
||||
<TextBlock Text="프록시·개인정보 보호 모드 변경은 앱 다시 시작 후 적용됩니다" Style="{StaticResource Type.Caption}"/>
|
||||
|
||||
<TextBlock Text="소셜 영상 (YouTube·Instagram·X)" Style="{StaticResource Type.Caption}" Margin="0,10,0,6"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,0,0,4">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="재설치" Padding="12,4" Margin="4,4,8,4" ToolTip="yt-dlp 최신 버전으로 다시 다운로드" Click="ReinstallYtDlp_Click"/>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="4,4,4,4" Click="BrowseYtDlp"/>
|
||||
<TextBox Name="YtDlpBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<TextBlock Text="비워두면 자동/PATH 의 yt-dlp 사용" Style="{StaticResource Type.Caption}" Margin="0,0,0,8"/>
|
||||
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,0,0,10">
|
||||
<CheckBox Name="UseCookiesBox" Style="{StaticResource DarkCheckBox}" Content="로그인 필요 영상을 위해 브라우저 쿠키 사용" Margin="4,4"/>
|
||||
<CheckBox Name="AutoInstallBox" Style="{StaticResource DarkCheckBox}" Content="yt-dlp 가 없으면 자동 다운로드" Margin="4,4"/>
|
||||
<CheckBox Name="AutoUpdateBox" Style="{StaticResource DarkCheckBox}" Content="YouTube 차단 시 yt-dlp 자동 갱신 후 재시도" Margin="4,4"/>
|
||||
<CheckBox Name="AutoInstallDenoBox" Style="{StaticResource DarkCheckBox}" Content="Deno(JS 런타임) 자동 설치 — YouTube 차단 해제용" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
|
||||
<TextBlock Text="기본 화질" Style="{StaticResource Type.Caption}"/>
|
||||
<ComboBox Name="DefaultQualityBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag" Margin="0,4,0,10">
|
||||
<ComboBoxItem Content="최고 화질 (MP4)" Tag="best"/>
|
||||
<ComboBoxItem Content="1080p" Tag="1080"/>
|
||||
<ComboBoxItem Content="720p" Tag="720"/>
|
||||
<ComboBoxItem Content="480p" Tag="480"/>
|
||||
<ComboBoxItem Content="360p" Tag="360"/>
|
||||
<ComboBoxItem Content="오디오만 (MP3)" Tag="audio"/>
|
||||
</ComboBox>
|
||||
|
||||
<TextBlock Text="YouTube 클라이언트 (고급)" Style="{StaticResource Type.Caption}"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,4,0,0">
|
||||
<TextBox Name="YoutubeClientsBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
<TextBlock Text="비워두면 yt-dlp 기본값 사용(권장). 봇 차단/PO 토큰 오류 시 예: tv,android_vr,web" Style="{StaticResource Type.Caption}" Margin="0,4,0,0"/>
|
||||
</StackPanel>
|
||||
</Expander>
|
||||
|
||||
<!-- ==================== 단축키 (UC-K01) ==================== -->
|
||||
<StackPanel x:Name="SectionShortcuts" Margin="0,0,0,20" Tag="단축키">
|
||||
<TextBlock Text="단축키" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="주요 단축키는 앱 안 Ctrl+K 명령 팔레트와 상태바 ? 버튼(단축키 목록)에서 확인하고, 충돌 없이 직접 바꾸려면 JSON 파일로 관리합니다." Style="{StaticResource Type.Caption}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<TextBlock Text="ffmpeg 경로" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,4">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="8,4,4,4" Click="BrowseFfmpeg"/>
|
||||
<TextBox Name="FfmpegBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<TextBlock Text="비워두면 시스템 PATH 의 ffmpeg 사용 (HLS→MP4 리먹스)" FontSize="11" Foreground="{StaticResource TextMuted}" Margin="0,0,0,18"/>
|
||||
<!-- ==================== 실험적 (UC-S18) ==================== -->
|
||||
<StackPanel x:Name="SectionExperimental" Margin="0,0,0,20" Tag="실험적">
|
||||
<TextBlock Text="실험적" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,6"/>
|
||||
<WrapPanel Orientation="Horizontal">
|
||||
<CheckBox Name="RestoreTabsSuspendedBox" Style="{StaticResource DarkCheckBox}" Content="세션 복원을 잠자기 상태로(빠른 시작)" Margin="4,4"/>
|
||||
<CheckBox Name="TabTitleMultilineBox" Style="{StaticResource DarkCheckBox}" Content="탭 제목 두 줄 표시" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Text="소셜 영상 (YouTube·Instagram·X)" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<TextBlock Text="yt-dlp 로 소셜 사이트 영상을 받습니다" FontSize="11" Foreground="{StaticResource TextMuted}" Margin="0,2,0,8"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,0,0,4">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="재설치" Padding="12,4" Margin="4,4,8,4" ToolTip="yt-dlp 최신 버전으로 다시 다운로드" Click="ReinstallYtDlp_Click"/>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="..." Padding="12,4" Margin="4,4,4,4" Click="BrowseYtDlp"/>
|
||||
<TextBox Name="YtDlpBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<TextBlock Text="비워두면 자동/PATH 의 yt-dlp 사용" FontSize="11" Foreground="{StaticResource TextMuted}" Margin="0,0,0,10"/>
|
||||
<!-- ==================== 업데이트·정보 ==================== -->
|
||||
<StackPanel x:Name="SectionAbout" Margin="0,0,0,10" Tag="정보">
|
||||
<TextBlock Text="앱 업데이트" Style="{StaticResource Type.H1}" FontSize="15" Margin="0,0,0,6"/>
|
||||
<TextBlock Text="GitHub Releases 최신 태그와 비교합니다 (owner/repo 형식)" Style="{StaticResource Type.Caption}" Margin="0,0,0,6"/>
|
||||
<Border Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,0,0,4">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="지금 확인" Padding="12,4" Margin="8,4,4,4"
|
||||
ToolTip="GitHub Releases 에서 새 버전 확인" Click="CheckUpdate_Click"/>
|
||||
<TextBox Name="UpdateRepoBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<TextBlock x:Name="UpdateResultText" Text="" Style="{StaticResource Type.Caption}" Margin="0,0,0,14"/>
|
||||
|
||||
<WrapPanel Orientation="Horizontal" Margin="0,0,0,14">
|
||||
<CheckBox Name="UseCookiesBox" Style="{StaticResource DarkCheckBox}" Content="로그인 필요 영상을 위해 브라우저 쿠키 사용" Margin="4,4"/>
|
||||
<CheckBox Name="AutoInstallBox" Style="{StaticResource DarkCheckBox}" Content="yt-dlp 가 없으면 자동 다운로드" Margin="4,4"/>
|
||||
<CheckBox Name="AutoUpdateBox" Style="{StaticResource DarkCheckBox}" Content="YouTube 차단 시 yt-dlp 자동 갱신 후 재시도" Margin="4,4"/>
|
||||
<CheckBox Name="AutoInstallDenoBox" Style="{StaticResource DarkCheckBox}" Content="Deno(JS 런타임) 자동 설치 — YouTube 차단 해제용" Margin="4,4"/>
|
||||
</WrapPanel>
|
||||
<!-- UC-S20 버전 정보 -->
|
||||
<TextBlock Text="버전" Style="{StaticResource Type.Caption}"/>
|
||||
<TextBlock x:Name="VersionText" Text="-" FontSize="12" Foreground="{DynamicResource TextSecondary}" Margin="0,2,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Margin="0,0,0,18">
|
||||
<TextBlock Text="기본 화질" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<ComboBox Name="DefaultQualityBox" Style="{StaticResource DarkComboBox}" SelectedValuePath="Tag" Margin="0,6,0,0">
|
||||
<ComboBoxItem Content="최고 화질 (MP4)" Tag="best"/>
|
||||
<ComboBoxItem Content="1080p" Tag="1080"/>
|
||||
<ComboBoxItem Content="720p" Tag="720"/>
|
||||
<ComboBoxItem Content="480p" Tag="480"/>
|
||||
<ComboBoxItem Content="360p" Tag="360"/>
|
||||
<ComboBoxItem Content="오디오만 (MP3)" Tag="audio"/>
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Margin="0,0,0,18">
|
||||
<TextBlock Text="YouTube 클라이언트 (고급)" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,6,0,0">
|
||||
<TextBox Name="YoutubeClientsBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent"/>
|
||||
</Border>
|
||||
<TextBlock Text="비워두면 yt-dlp 기본값 사용(권장). 봇 차단/PO 토큰 오류 시 예: tv,android_vr,web" FontSize="11" Foreground="{StaticResource TextMuted}" Margin="0,4,0,0" TextWrapping="Wrap"/>
|
||||
<!-- UC-S03 다시 시작 필요 배너 -->
|
||||
<Border x:Name="RestartBanner" Grid.Row="1" VerticalAlignment="Bottom" Margin="18,0,18,8"
|
||||
Background="{DynamicResource AccentFadeBrush}" BorderBrush="{DynamicResource AccentBrush}" BorderThickness="1"
|
||||
CornerRadius="8" Padding="12,7" Visibility="Collapsed">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource CardActionButton}" Content="지금 다시 시작" Click="RestartNow_Click"/>
|
||||
<TextBlock Text="일부 변경(프록시·개인정보 보호 모드)은 앱을 다시 시작하면 적용됩니다."
|
||||
FontSize="11.5" Foreground="{DynamicResource TextPrimary}" VerticalAlignment="Center"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
|
||||
<!-- 하단 액션 바 -->
|
||||
<Border Grid.Row="2" BorderBrush="{DynamicResource BorderSubtle}" BorderThickness="0,1,0,0" Padding="22,12">
|
||||
<DockPanel>
|
||||
<StackPanel DockPanel.Dock="Left" Orientation="Horizontal">
|
||||
<!-- UC-S04 기본값 복원 · UC-S05/S06 설정 내보내기/가져오기 -->
|
||||
<Button x:Name="ResetDefaultsButton" Style="{StaticResource GhostButton}" Content="기본값으로 되돌리기" Click="ResetDefaults_Click" Margin="0,0,8,0"
|
||||
AutomationProperties.Name="기본값 복원"/>
|
||||
<Button x:Name="ExportSettingsButton" Style="{StaticResource GhostButton}" Content="내보내기" Click="ExportSettings_Click" Margin="0,0,8,0"
|
||||
AutomationProperties.Name="설정 내보내기"/>
|
||||
<Button x:Name="ImportSettingsButton" Style="{StaticResource GhostButton}" Content="가져오기" Click="ImportSettings_Click" Margin="0,0,8,0"
|
||||
AutomationProperties.Name="설정 가져오기"/>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Text="브라우저 데이터" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
<TextBlock x:Name="ProfileModeText" Text="" FontSize="11" Foreground="{StaticResource TextMuted}" Margin="0,0,0,8" TextWrapping="Wrap"/>
|
||||
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1" CornerRadius="9" Margin="0,0,0,18">
|
||||
<DockPanel>
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource GhostButton}" Content="삭제" Padding="12,4" Margin="8,4,4,4"
|
||||
ToolTip="쿠키·localStorage·캐시 삭제 (현재 프로필)" Click="ClearData_Click"/>
|
||||
<TextBox x:Name="ProfilePathBox" Style="{StaticResource DarkTextBox}" BorderThickness="0" Background="Transparent" IsReadOnly="True"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
|
||||
<TextBlock Text="반응할 형식" Foreground="{StaticResource TextPrimary}" FontWeight="SemiBold"/>
|
||||
<TextBlock Text="체크된 형식만 자동 감지/다운로드합니다" FontSize="11" Foreground="{StaticResource TextMuted}" Margin="0,2,0,10"/>
|
||||
<WrapPanel Orientation="Horizontal">
|
||||
<CheckBox Name="FmtHls" Style="{StaticResource DarkCheckBox}" Content="HLS (m3u8)" Margin="4,5"/>
|
||||
<CheckBox Name="FmtDash" Style="{StaticResource DarkCheckBox}" Content="DASH (.mpd)" Margin="4,5"/>
|
||||
<CheckBox Name="FmtMp4" Style="{StaticResource DarkCheckBox}" Content="MP4" Margin="4,5"/>
|
||||
<CheckBox Name="FmtWebM" Style="{StaticResource DarkCheckBox}" Content="WebM" Margin="4,5"/>
|
||||
<CheckBox Name="FmtMkv" Style="{StaticResource DarkCheckBox}" Content="MKV" Margin="4,5"/>
|
||||
<CheckBox Name="FmtM4v" Style="{StaticResource DarkCheckBox}" Content="M4V" Margin="4,5"/>
|
||||
<CheckBox Name="FmtMov" Style="{StaticResource DarkCheckBox}" Content="MOV" Margin="4,5"/>
|
||||
<CheckBox Name="FmtAvi" Style="{StaticResource DarkCheckBox}" Content="AVI" Margin="4,5"/>
|
||||
<CheckBox Name="FmtAudio" Style="{StaticResource DarkCheckBox}" Content="오디오 (m4a/mp3/ogg...)" Margin="4,5"/>
|
||||
</WrapPanel>
|
||||
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
<Border Grid.Row="2" BorderBrush="{StaticResource BorderSubtle}" BorderThickness="0,1,0,0" Padding="22,12">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Style="{StaticResource GhostButton}" Content="취소" Width="90" Margin="0,0,8,0" IsCancel="True"/>
|
||||
<Button Style="{StaticResource PrimaryButton}" Content="확인" Width="90" Click="Ok_Click" IsDefault="True"/>
|
||||
</StackPanel>
|
||||
<!-- UC-S19 검증 힌트 -->
|
||||
<TextBlock x:Name="ValidationHint" Text="" Foreground="{DynamicResource ErrorBrush}" FontSize="11.5"
|
||||
VerticalAlignment="Center" Margin="12,0,12,0" TextTrimming="CharacterEllipsis"
|
||||
AutomationProperties.LiveSetting="Assertive"/>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<Button Style="{StaticResource GhostButton}" Content="취소" Width="90" Margin="0,0,8,0" IsCancel="True" Click="Cancel_Click"/>
|
||||
<Button Style="{StaticResource PrimaryButton}" Content="확인" Width="90" Click="Ok_Click" IsDefault="True"
|
||||
AutomationProperties.Name="설정 저장"/>
|
||||
</StackPanel>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Window>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue