첫 실행 시 외부 도구 설치 마법사를 띄우고 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 채팅 클라이언트, 관련 테스트) 포함
117 lines
6.3 KiB
XML
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>
|