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
}