using ComPDFKitViewer; using ComPDFKitViewer.AnnotEvent; using PDF_Office.CustomControl.CompositeControl; using PDF_Office.Model; using PDF_Office.Model.PropertyPanel.AnnotPanel; using PDF_Office.ViewModels.Tools; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace PDF_Office.ViewModels.PropertyPanel.AnnotPanel { public class FreetextAnnotPropertyViewModel : BindableBase, INavigationAware { private double fillOpacity = 1; public double FillOpacity { get { return fillOpacity; } set { SetProperty(ref fillOpacity, value); } } private Brush selectColor = new SolidColorBrush(Colors.Black); public Brush SelectColor { get { return selectColor; } set { SetProperty(ref selectColor, value); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontColor, (selectColor as SolidColorBrush).Color); AnnotEvent?.UpdateAnnot(); } } private Brush fillColor = new SolidColorBrush(Colors.Transparent); public Brush FillColor { get { return fillColor; } set { SetProperty(ref fillColor, value); AnnotEvent?.UpdateAttrib(AnnotAttrib.FillColor, (fillColor as SolidColorBrush).Color); AnnotEvent?.UpdateAnnot(); } } private FontFamily fontFamily = new FontFamily("Courier"); public FontFamily TextFontFamily { get { return fontFamily; } set { SetProperty(ref fontFamily, value); } } private FontWeight fontWeights = FontWeights.Normal; public FontWeight TextFontWeights { get { return fontWeights; } set { SetProperty(ref fontWeights, value); } } private FontStyle fontStyle = FontStyles.Normal; public FontStyle TextFontStyle { get { return fontStyle; } set { SetProperty(ref fontStyle, value); } } private int fontSize = 24; public int TextFontSize { get { return fontSize; } set { SetProperty(ref fontSize, value); } } private List fontStyleList = new List(); public List FontStyleList { get { return fontStyleList; } set { SetProperty(ref fontStyleList, value); } } private ComboDataItem _presetTextData; public ComboDataItem PresetTextData { get { return _presetTextData; } set { SetProperty(ref _presetTextData, value); if (_presetTextData != null && FontStyleList != null) { } } } private ComboDataItem _fontSizeData = new ComboDataItem(6); public ComboDataItem FontSizeData { get { return _fontSizeData; } set { SetProperty(ref _fontSizeData, value); } } private ComboDataItem _fontFamilyData; public ComboDataItem FontFamilyData { get { return _fontFamilyData; } set { SetProperty(ref _fontFamilyData, value); } } private FontStyle _fontStyle; public FontStyle FontStyleItem { get { return _fontStyle; } set { SetProperty(ref _fontStyle, value); } } private FontWeight _fontWeight; public FontWeight FontWeightItem { get { return _fontWeight; } set { SetProperty(ref _fontWeight, value); } } private ComboDataItem _fontWeightStyleItem; public ComboDataItem FontWeightStyleItem { get { return _fontWeightStyleItem; } set { SetProperty(ref _fontWeightStyleItem, value); if (_fontWeightStyleItem.ValueStr != null && string.IsNullOrEmpty((string)_fontWeightStyleItem.ValueStr) == false) { switch ((string)_fontWeightStyleItem.ValueStr) { case "Regular": FontStyleItem = FontStyles.Normal; FontWeightItem = FontWeights.Normal; break; case "Bold": FontStyleItem = FontStyles.Normal; FontWeightItem = FontWeights.Bold; break; case "Italic": FontStyleItem = FontStyles.Italic; FontWeightItem = FontWeights.Normal; break; case "Bold Italic": FontStyleItem = FontStyles.Italic; FontWeightItem = FontWeights.Bold; break; } } } } public List PresetTextItems { get; private set; } public List FontFamilyItems { get; private set; } public List FontStyleItems { get; private set; } public DelegateCommand SelectedFillOpacityCommand { get; set; } public DelegateCommand SelectedFontStyleCommand { get; set; } public DelegateCommand SelectedColorCommand { get; set; } public DelegateCommand SelectedFillColorCommand { get; set; } public DelegateCommand FontFamilyChangedCommand { get; set; } public DelegateCommand FontStyleChangedCommand { get; set; } public DelegateCommand FontSizeChangedCommand { get; set; } public DelegateCommand TextAlignCheckedCommand { get; set; } public DelegateCommand LineModeCheckedCommand { get; set; } public DelegateCommand SelectedOpacityValueCommand { get; set; } public event EventHandler LoadPropertyHandler; public FreetextAnnotPropertyViewModel() { SelectedFillOpacityCommand = new DelegateCommand(SelectedFillOpacity); SelectedFontStyleCommand = new DelegateCommand(SelectedFontStyle); SelectedColorCommand = new DelegateCommand(SelectedColor_Command); SelectedFillColorCommand = new DelegateCommand(SelectedFillColor_Command); FontFamilyChangedCommand = new DelegateCommand(FontFamilyChanged_Command); FontStyleChangedCommand = new DelegateCommand(FontStyleChanged_Command); FontSizeChangedCommand = new DelegateCommand(FontSizeChanged_Command); TextAlignCheckedCommand = new DelegateCommand(TextAlignChecked); LineModeCheckedCommand = new DelegateCommand(LineMode_Checked); SelectedOpacityValueCommand = new DelegateCommand(SelectedOpacityValue); InitVariable(); } private void InitVariable() { InitFontStyles(); InitFontFamilyComboBox(); InitFontStyleComboBox(); } private void InitFontFamilyComboBox() { FontFamilyItems = TextFont.GetFamily(); } private void InitFontStyleComboBox() { FontStyleItems = TextFont.GetFontStyle(); } private void InitFontStyles() { PresetTextItems = new List(); FontStyleList = TextFont.GetPresetFontStyle(); foreach (var item in FontStyleList) { ComboDataItem itemData = new ComboDataItem(item.mTag, item.mTagContent); PresetTextItems.Add(itemData); } } private void TextAlignChecked(object obj) { if ((string)obj != null /*&& TextEditEvent != null*/) { switch ((string)obj) { case "AlignLeft": AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Left); break; case "AlignCenter": AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Center); break; case "AlignRight": AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Right); break; case "Align": break; } AnnotEvent?.UpdateAnnot(); } } private void LineMode_Checked(object obj) { if(obj != null) { var tag = ((string)obj); switch (tag) { case "Dashed": AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, DashStyles.Dash); break; case "Solid": AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, DashStyles.Solid); break; } AnnotEvent?.UpdateAnnot(); } } private void SelectedFontStyle(object obj) { if (obj != null && (FontStyleItem)obj != null) { var item = (FontStyleItem)obj; AnnotEvent?.UpdateAttrib(AnnotAttrib.FontSize, item.mFontSize); AnnotEvent?.UpdateAnnot(); } } private void SelectedFillOpacity(object obj) { if (obj != null) { FillOpacity = (double)obj; SelectColor.Opacity = FillOpacity; AnnotEvent?.UpdateAttrib(AnnotAttrib.Transparency, FillOpacity); AnnotEvent?.UpdateAnnot(); } } private void SelectedOpacityValue(object obj) { if (obj != null) { FillOpacity = (double)obj; SelectColor.Opacity = FillOpacity; AnnotEvent?.UpdateAttrib(AnnotAttrib.Transparency, FillOpacity); AnnotEvent?.UpdateAnnot(); } } private void FontSizeChanged_Command(object obj) { if (obj != null) { var item = (ComboBoxItem)obj; var content = (string)item.Content; if (content != null) { var intData = int.Parse(content); TextFontSize = intData; AnnotEvent?.UpdateAttrib(AnnotAttrib.FontSize, intData); AnnotEvent?.UpdateAnnot(); } } } private void FontStyleChanged_Command(object obj) { if (obj != null) { var item = (ComboBoxItem)obj; var content = (string)item.Content; if (content != null) { if (content == "Regular") { AnnotEvent?.UpdateAttrib(AnnotAttrib.FontStyle, FontStyles.Normal); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontWeight, FontWeights.Normal); TextFontWeights = FontWeights.Normal; TextFontStyle = FontStyles.Normal; } if (content == "Bold") { AnnotEvent?.UpdateAttrib(AnnotAttrib.FontStyle, FontStyles.Normal); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontWeight, FontWeights.Bold); TextFontWeights = FontWeights.Bold; TextFontStyle = FontStyles.Normal; } if (content == "Italic") { AnnotEvent?.UpdateAttrib(AnnotAttrib.FontStyle, FontStyles.Italic); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontWeight, FontWeights.Normal); TextFontWeights = FontWeights.Normal; TextFontStyle = FontStyles.Italic; } if (content == "Bold Italic") { AnnotEvent?.UpdateAttrib(AnnotAttrib.FontStyle, FontStyles.Italic); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontWeight, FontWeights.Bold); TextFontWeights = FontWeights.Bold; TextFontStyle = FontStyles.Italic; } AnnotEvent?.UpdateAnnot(); } } } private void FontFamilyChanged_Command(object obj) { if (obj != null) { if ((int)obj > -1) { if ((int)obj == 0) { AnnotEvent?.UpdateAttrib(AnnotAttrib.FontFamily, new FontFamily("Courier")); TextFontFamily = new FontFamily("Courier"); } if ((int)obj == 1) { TextFontFamily = new FontFamily("Helvetica"); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontFamily, new FontFamily("Helvetica")); } if ((int)obj == 2) { TextFontFamily = new FontFamily("Times"); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontFamily, new FontFamily("Times")); } AnnotEvent?.UpdateAnnot(); } } } private void SelectedFillColor_Command(object obj) { if (obj != null) { var colorValue = (Color)obj; if (colorValue != null) { FillColor = new SolidColorBrush(colorValue); FillColor.Opacity = FillOpacity; Dictionary changeData = new Dictionary(); changeData[AnnotArgsType.AnnotFreehand] = obj; PropertyPanel.DataChangedInvoke(this, changeData); } } } private void SelectedColor_Command(object obj) { if (obj != null) { var colorValue = (Color)obj; if (colorValue != null) { SelectColor = new SolidColorBrush(colorValue); SelectColor.Opacity = FillOpacity; Dictionary changeData = new Dictionary(); changeData[AnnotArgsType.AnnotFreehand] = obj; PropertyPanel.DataChangedInvoke(this, changeData); } } } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } public AnnotAttribEvent AnnotEvent { get; set; } private FreeTextAnnotArgs Annot; private AnnotPropertyPanel PropertyPanel; public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.PropertyPanelContentViewModel, out PropertyPanel); if (PropertyPanel != null) { AnnotEvent = PropertyPanel.AnnotEvent; Annot = PropertyPanel.annot as FreeTextAnnotArgs; LoadPropertyHandler?.Invoke(this, Annot); } } } }