초기 커밋: Phase 1 — 레지스트리 기반 컨텍스트 메뉴 + 핵심 변환 파이프라인
- Provider 추상화(IConverterProvider + ProviderCapability) — Available/RequiresExternal/ComingSoon 1급 시민 - 변환 구현: Magick(이미지·RAW·GIF·TIFF), HEIC/HEIF(libheif decode→Magick encode), PDF(PDFium), DOCX(Word COM 또는 LibreOffice 자동 감지) - ComingSoon 스텁: HTML, HWP/HWPX (UI 노출, 컨텍스트 메뉴 등록 자동 제외) - WPF + WPF-UI 4.3 Fluent 2 UI: 메인 창(드래그&드롭, Provider 카드), 변환 창(썸네일·옵션·진행률), 빠른 변환 진행 창, 진단 창 - 단일 EXE에 verb 라우팅: quick / dialog / register / unregister / diagnose / help - HKCU SystemFileAssociations 기반 컨텍스트 메뉴 등록 (Win11 "추가 옵션 표시"에 노출) - README, packaging/ Phase 2 placeholder 포함 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
8fa4a613d7
37 changed files with 2727 additions and 0 deletions
111
src/EverythingToJpeg.App/Views/MainWindow.xaml
Normal file
111
src/EverythingToJpeg.App/Views/MainWindow.xaml
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
<ui:FluentWindow x:Class="EverythingToJpeg.App.Views.MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||
Title="EverythingToJpeg"
|
||||
Width="880" Height="640"
|
||||
MinWidth="640" MinHeight="480"
|
||||
ExtendsContentIntoTitleBar="True"
|
||||
WindowBackdropType="Mica"
|
||||
WindowCornerPreference="Round"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
AllowDrop="True"
|
||||
Drop="OnFilesDropped"
|
||||
DragOver="OnDragOver"
|
||||
DragLeave="OnDragLeave">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<ui:TitleBar Grid.Row="0" Title="EverythingToJpeg">
|
||||
<ui:TitleBar.Icon>
|
||||
<ui:SymbolIcon Symbol="ImageMultiple24"/>
|
||||
</ui:TitleBar.Icon>
|
||||
</ui:TitleBar>
|
||||
|
||||
<Grid Grid.Row="1" Margin="32,16,32,32">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Hero -->
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,24">
|
||||
<TextBlock Text="모든 것을 JPEG로." Style="{StaticResource TextTitleLarge}"/>
|
||||
<TextBlock Margin="0,4,0,0" Style="{StaticResource TextBody}"
|
||||
Foreground="{DynamicResource TextFillColorSecondaryBrush}">
|
||||
파일을 우클릭하면 끝. PNG · GIF · HEIC · RAW · PDF · DOCX 가 모두 한 번에 변환됩니다.
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Drop zone -->
|
||||
<Border x:Name="DropZone" Grid.Row="1"
|
||||
BorderBrush="{DynamicResource ControlStrokeColorDefaultBrush}"
|
||||
BorderThickness="2"
|
||||
Background="{DynamicResource ControlFillColorDefaultBrush}"
|
||||
CornerRadius="12"
|
||||
Padding="32,24"
|
||||
Margin="0,0,0,20">
|
||||
<Border.Style>
|
||||
<Style TargetType="Border">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsDraggingOver, RelativeSource={RelativeSource AncestorType=Window}}" Value="True">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource SystemFillColorAttentionBrush}"/>
|
||||
<Setter Property="Background" Value="{DynamicResource SubtleFillColorSecondaryBrush}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<StackPanel HorizontalAlignment="Center">
|
||||
<ui:SymbolIcon Symbol="ImageArrowCounterclockwise24" FontSize="36"
|
||||
Foreground="{DynamicResource AccentTextFillColorPrimaryBrush}"
|
||||
HorizontalAlignment="Center"/>
|
||||
<TextBlock Text="여기에 파일이나 폴더를 끌어다 놓으세요"
|
||||
Style="{StaticResource TextSubtitle}"
|
||||
HorizontalAlignment="Center" Margin="0,12,0,4"/>
|
||||
<TextBlock Style="{StaticResource TextCaption}" HorizontalAlignment="Center">
|
||||
또는
|
||||
<Hyperlink Click="OnPickFilesClick">파일 선택</Hyperlink>
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Provider list -->
|
||||
<ui:Card Grid.Row="2" Padding="0">
|
||||
<DockPanel>
|
||||
<Grid DockPanel.Dock="Top" Margin="20,16,20,12">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="지원 형식" Style="{StaticResource TextSubtitle}"/>
|
||||
<TextBlock Grid.Column="1" Style="{StaticResource TextCaption}"
|
||||
VerticalAlignment="Center">
|
||||
준비된 형식만 우클릭 메뉴에 등록됩니다
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="20,0,20,16">
|
||||
<ItemsControl x:Name="ProvidersList"/>
|
||||
</ScrollViewer>
|
||||
</DockPanel>
|
||||
</ui:Card>
|
||||
|
||||
<!-- Action bar -->
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal"
|
||||
HorizontalAlignment="Right" Margin="0,20,0,0">
|
||||
<ui:Button Content="진단" Icon="{ui:SymbolIcon Stethoscope24}"
|
||||
Click="OnDiagnoseClick" Margin="0,0,8,0"/>
|
||||
<ui:Button x:Name="UnregisterButton" Content="컨텍스트 메뉴 해제"
|
||||
Icon="{ui:SymbolIcon DismissCircle24}"
|
||||
Click="OnUnregisterClick" Margin="0,0,8,0"/>
|
||||
<ui:Button x:Name="RegisterButton" Content="컨텍스트 메뉴 등록"
|
||||
Icon="{ui:SymbolIcon CheckmarkCircle24}"
|
||||
Appearance="Primary" Click="OnRegisterClick"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ui:FluentWindow>
|
||||
Loading…
Add table
Add a link
Reference in a new issue