1
0
Fork 0
Everything2Everything/src/Everything2Everything.App/Views/AdLargeCardControl.xaml
Yun Chan 6a41c4a0dc feat(tools): add first-run external tool installer wizard and catalog
첫 실행 시 외부 도구 설치 마법사를 띄우고 7종(FFmpeg·LibreOffice·Pandoc·ImageMagick·H2Orestart·agy·Codex)을 기본 전체 선택 상태로 순차 설치한다.
- Core: ExternalToolCatalog(정적 카탈로그, winget ID 실검증), ExternalToolInstaller(winget 무인 실행·재감지 판정, IExternalCommandRunner 시드로 테스트 가능)
- Core: ExternalToolDetector에 winget FFmpeg 스캔 + Pandoc/ImageMagick 감지 추가
- App: ToolSetupWindow + ToolSetupViewModel, 첫 실행 플래그(setup.tools.done), 설정 창 '외부 도구 설치/검증' 재진입 버튼
- Tests: ExternalToolInstallerTests 5건
- 기존 미커밋 작업(광고 Ads 지원: AdBannerControl/AdLargeCardControl/AdService, AI 백엔드 agy·switchboard·codex 채팅 클라이언트, 관련 테스트) 포함
2026-09-07 21:16:49 +09:00

117 lines
6.3 KiB
XML

<UserControl x:Class="Everything2Everything.App.Views.AdLargeCardControl"
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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="220" d:DesignWidth="320">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="FormatShiftTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
</ResourceDictionary>
</UserControl.Resources>
<Border Visibility="{Binding IsLargeCardVisible, Converter={StaticResource BoolToVis}}"
Style="{StaticResource FsDoubleBezelShellStyle}"
Margin="0,16,0,0">
<Border Style="{StaticResource FsDoubleBezelCoreStyle}" Padding="16">
<StackPanel>
<!-- 1. 헤더: 스폰서 배지 + 닫기 버튼 -->
<Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
<Border Padding="6,2"
CornerRadius="4"
Background="#1A3B82F6"
BorderBrush="{StaticResource FsAccentBlue}"
BorderThickness="1"
VerticalAlignment="Center">
<TextBlock Text="{Binding CurrentLargeAd.BadgeText, FallbackValue='스폰서 추천'}"
FontSize="10"
FontWeight="Bold"
Foreground="{StaticResource FsAccentBlue}"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"/>
</Border>
</StackPanel>
<Button Grid.Column="1"
Width="22" Height="22"
VerticalAlignment="Center"
Style="{StaticResource FsIconButtonStyle}"
Command="{Binding DismissLargeCardCommand}"
ToolTip="광고 닫기">
<ui:SymbolIcon Symbol="Dismiss24"
FontSize="10"
Foreground="{StaticResource FsTextTertiary}"
VerticalAlignment="Center"/>
</Button>
</Grid>
<!-- 2. 본문: 아이콘/이미지 + 타이틀 + 설명 -->
<Grid Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Width="36" Height="36"
CornerRadius="8"
Background="{StaticResource FsBgInput}"
BorderBrush="{StaticResource FsBorderSubtle}"
BorderThickness="1"
Margin="0,0,12,0"
VerticalAlignment="Center">
<Image Width="20" Height="20"
VerticalAlignment="Center"
HorizontalAlignment="Center"
RenderOptions.BitmapScalingMode="HighQuality"
Source="pack://application:,,,/Everything2Everything;component/Assets/logo-mark.png"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="{Binding CurrentLargeAd.Title, FallbackValue='비즈니스 미디어 솔루션'}"
Style="{StaticResource FsLabelStyle}"
Foreground="{StaticResource FsTextPrimary}"
FontWeight="SemiBold"
FontSize="13"
TextTrimming="CharacterEllipsis"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding CurrentLargeAd.Description, FallbackValue='고성능 무손실 일괄 변환을 업무 환경에 적용하세요.'}"
Style="{StaticResource FsCaptionStyle}"
Foreground="{StaticResource FsTextSecondary}"
Margin="0,3,0,0"
TextWrapping="Wrap"
VerticalAlignment="Center"/>
</StackPanel>
</Grid>
<!-- 3. 하단 전면 CTA 버튼 -->
<Button Style="{StaticResource FsIslandPrimaryButtonStyle}"
Height="34"
Command="{Binding ClickLargeAdCommand}"
ToolTip="자세히 보기">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="{Binding CurrentLargeAd.CtaText, FallbackValue='솔루션 살펴보기'}"
FontSize="12"
FontWeight="SemiBold"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"/>
<ui:SymbolIcon Symbol="ArrowRight24"
FontSize="12"
Margin="6,0,0,0"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
</StackPanel>
</Border>
</Border>
</UserControl>