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 채팅 클라이언트, 관련 테스트) 포함
This commit is contained in:
parent
f00f6567f4
commit
6a41c4a0dc
37 changed files with 2545 additions and 69 deletions
117
src/Everything2Everything.App/Views/AdLargeCardControl.xaml
Normal file
117
src/Everything2Everything.App/Views/AdLargeCardControl.xaml
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue