using System.Globalization; using System.Windows; using System.Windows.Media; using SheetMe.Core.Serialization; using SheetMe.Designer.ViewModels; using SheetMe.Designer.Services; namespace SheetMe.Designer.Views; /// /// 폰트 일괄 변경 대화상자 — 레거시 frmFontManager 이식. /// 문서 전체 (타입·글꼴·크기·스타일) 집계 → 선택 조합 또는 전체에 새 글꼴 일괄 적용(Undo 1스텝). /// public partial class FontManagerDialogView : Window { #region Member Fields private readonly DesignerViewModel designer; #endregion #region Constructors public FontManagerDialogView(DesignerViewModel designer) { this.designer = designer; InitializeComponent(); FamilyBox.ItemsSource = Fonts.SystemFontFamilies .Select(f => f.FamilyNames.Values.FirstOrDefault() ?? f.Source) .Distinct() .OrderBy(name => name, StringComparer.CurrentCulture) .ToList(); FamilyBox.Text = "굴림"; Reload(); } #endregion #region Methods private void Reload() { GroupList.ItemsSource = designer.CollectFontUsage(); } private void OnApplySelected(object sender, RoutedEventArgs e) => Apply(GroupList.SelectedItems.Cast().ToList()); private void OnApplyAll(object sender, RoutedEventArgs e) => Apply(GroupList.Items.Cast().ToList()); private void Apply(List targets) { if (targets.Count == 0) { DialogService.Notify(DialogKind.Warning, "폰트 일괄 변경", "변경할 조합을 선택하세요.", owner: this); return; } var family = FamilyBox.Text.Trim(); if (family.Length == 0) { DialogService.Notify(DialogKind.Warning, "폰트 일괄 변경", "글꼴명을 입력하세요.", owner: this); return; } if (!double.TryParse(SizeBox.Text.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture, out var sizePt) || sizePt <= 0 || sizePt > 200) { DialogService.Notify(DialogKind.Warning, "폰트 일괄 변경", "크기(pt)를 올바르게 입력하세요.", owner: this); return; } var newFont = new LegacyFont { Family = family, SizePt = sizePt, Bold = BoldBox.IsChecked == true, Italic = ItalicBox.IsChecked == true, Underline = UnderlineBox.IsChecked == true, }; var changed = designer.ApplyFontBulk(targets, newFont); ResultText.Text = $"{changed}개 컨트롤 변경됨"; Reload(); } #endregion }