using ComPDFKitViewer;
using ComPDFKitViewer.AnnotEvent;
using ComPDFKitViewer.PdfViewer;
using PDF_Office.CustomControl;
using PDF_Office.Helper;
using PDF_Office.ViewModels.PropertyPanel.AnnotPanel;
using PDF_Office.Views.PropertyPanel.AnnotPanel;
using PDFSettings.Settings;
using Prism.Commands;
using Prism.Events;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Windows.Media;
namespace PDF_Office.ViewModels.Tools
{
///
/// 改变工具栏注释属性值,主要用来传参数:注释属性和同步工具栏对应图标的属性(颜色)
///
public class AnnotPropertyPanel
{
public bool IsAddLink = false;
public bool IsLocationLink = false;
public AnnotAttribEvent AnnotEvent { get; set; }
public List AnnotEvents = new List();
public AnnotHandlerEventArgs annot;
public List annotlists;
public bool IsTextFill { get; private set; }
public void SetIsTextFill(bool isTextFill)
{
IsTextFill = isTextFill;
}
public event EventHandler> DataChanged;
public event EventHandler> AnnotTypeChanged;
public event EventHandler DefaultStored;
public AnnotPropertyPanel()
{ }
//外部UI控件选中状态
public static bool IsSolidStyle(DashStyle LineDash)
{
bool isSolid = true;
if (LineDash == null || LineDash.Dashes.Count == 0)
{
return isSolid;
}
foreach (var item in LineDash.Dashes)
{
if (item > 0)
{
isSolid = false;
break;
}
}
return isSolid;
}
public static DashStyle GetLineDashStyle(bool isSolid)
{
DashStyle newDash = new DashStyle();
if (isSolid == false)
{
newDash.Dashes.Add(2);
newDash.Dashes.Add(2);
}
else
{
newDash = DashStyles.Solid;
}
return newDash;
}
//单个属性更改
public void UpdateAnnotAAttrib(AnnotAttrib annotAttrib, object obj)
{
if (annotlists != null && annotlists.Count > 1)
{
foreach (var itemevent in AnnotEvents)
{
itemevent?.UpdateAttrib(annotAttrib, obj);
itemevent?.UpdateAnnot();
}
}
else
{
AnnotEvent?.UpdateAttrib(annotAttrib, obj);
AnnotEvent?.UpdateAnnot();
}
}
//多个属性更改
public void UpdateAnnotAllAttribs(Dictionary AnnotAttribDir)
{
if (annotlists != null && annotlists.Count > 1)
{
foreach (var itemevent in AnnotEvents)
{
foreach (var item in AnnotAttribDir)
{
itemevent?.UpdateAttrib(item.Key, item.Value);
}
itemevent?.UpdateAnnot();
}
}
else
{
foreach (var item in AnnotAttribDir)
{
AnnotEvent?.UpdateAttrib(item.Key, item.Value);
}
AnnotEvent?.UpdateAnnot();
}
}
//是否为多选
public bool IsMultiSelected
{ get { return (annotlists != null && annotlists.Count > 1); } }
///
/// 更新多个属性,触发到工具栏注释工具,改变工具图标下的颜色值
///
public void InvokeToMyTools(object sender, Dictionary keyValues)
{
DataChanged?.Invoke(sender, keyValues);
}
///
/// 更新单个属性
///
public void InvokeToMyTools(AnnotArgsType argsType, object obj)
{
Dictionary changeData = new Dictionary();
changeData[argsType] = obj;
DataChanged?.Invoke(null, changeData);
}
//同一属性面板,切换注释工具
public void AnnotTypeChangedInvoke(object sender, Dictionary keyValues)
{
AnnotTypeChanged?.Invoke(sender, keyValues);
}
}
public sealed partial class AnnotToolContentViewModel
{
#region 属性
#region 注释工具
//高亮
private Brush highLightColor = new SolidColorBrush(Color.FromRgb(0xFF, 0xBB, 0x00));
public Brush HighLightColor
{ get { return highLightColor; } set { SetProperty(ref highLightColor, value); } }
//
private double highLightOpacity = 1;
public double HighLightOpacity
{ get { return highLightOpacity; } set { SetProperty(ref highLightOpacity, value); } }
//
private Brush underLine = new SolidColorBrush(Color.FromRgb(0xFF, 0xBB, 0x00));
public Brush UnderLineColor
{ get { return underLine; } set { SetProperty(ref underLine, value); } }
//
private double underLineOpacity = 1;
public double UnderLineOpacity
{ get { return underLineOpacity; } set { SetProperty(ref underLineOpacity, value); } }
//
private Brush squigglyColor = new SolidColorBrush(Color.FromRgb(0xFF, 0xBB, 0x00));
public Brush SquigglyColor
{ get { return squigglyColor; } set { SetProperty(ref squigglyColor, value); } }
//
private double squigglyOpacity = 1;
public double SquigglyOpacity
{ get { return squigglyOpacity; } set { SetProperty(ref squigglyOpacity, value); } }
//
private Brush strikeoutColor = new SolidColorBrush(Color.FromRgb(0xFF, 0xBB, 0x00));
public Brush StrikeoutColor
{ get { return strikeoutColor; } set { SetProperty(ref strikeoutColor, value); } }
//
private double strikeoutOpacity = 1;
public double StrikeoutOpacity
{ get { return strikeoutOpacity; } set { SetProperty(ref strikeoutOpacity, value); } }
private bool btnSelecttoolIsChecked = false;
public bool BtnSelecttoolIsChecked
{
get { return btnSelecttoolIsChecked; }
set
{
SetProperty(ref btnSelecttoolIsChecked, value);
}
}
private bool btnLinkIsChecked = false;
public bool BtnLinkIsChecked
{
get { return btnLinkIsChecked; }
set
{
SetProperty(ref btnLinkIsChecked, value);
}
}
private bool btnHandIsChecked = false;
public bool BtnHandIsChecked
{
get { return btnHandIsChecked; }
set
{
SetProperty(ref btnHandIsChecked, value);
}
}
private bool btnShowAnnotIsChecked = true;
public bool BtnShowAnnotIsChecked
{
get { return btnShowAnnotIsChecked; }
set
{
SetProperty(ref btnShowAnnotIsChecked, value);
}
}
private string _strAnnotToolChecked = "";
public string StrAnnotToolChecked
{
get { return _strAnnotToolChecked; }
set
{
SetProperty(ref _strAnnotToolChecked, value);
}
}
#endregion 注释工具
#endregion 属性
public string PropertyRegionName { get; set; }
private IEventAggregator events;
public IDialogService dialogs;
public IRegionManager region;
public OpenFileInfo OpenFileInfo = null;
public CPDFViewer PDFViewer;
private ViewContentViewModel viewContentViewModel;
private AnnotPropertyPanel propertyPanel = new AnnotPropertyPanel();
private Dictionary ToolExpandDict = new Dictionary();
private Dictionary ToolTipDict = new Dictionary();
private List> AnnotSignatures = new List>();
private StickyNotePopup customStickyPopup;
string Unicode = "";
//private bool isHiddenAnnot = true;
private bool isAddBookMark = true;
private bool IsNoSelectMenu = false;
private bool isRightMenuAddAnnot = false;
private PopMenu HightAnnotPopMenu;
private PopMenu FreeHandAnnotPopMenu;
private PopMenu FreeTextAnnotPopMenu;
private PopMenu StrickNoteAnnotPopMenu;
private PopMenu ShapeAnnotPopMenu;
private PopMenu LinkAnnotPopMenu;
private PopMenu StampAnnotPopMenu;
private PopMenu MultiAnnotPopMenu;
#region 事件
public DelegateCommand MyToolsCommand { get; set; }
private SnapshotEditMenuViewModel snapshotEditMenuViewModel = new SnapshotEditMenuViewModel();
public SnapshotEditMenuViewModel SnapshotEditMenuViewModel { get => snapshotEditMenuViewModel; set => snapshotEditMenuViewModel = value; }
public DelegateCommand SetAddAnnotationCommand { get; set; }
public DelegateCommand AddBookMarkCommand { get; set; }
public DelegateCommand HandCommand { get; set; }
#region 注释 - 右键菜单
//公共
public DelegateCommand AnnotDefaultValue_MenuCommand { get; set; }
public DelegateCommand AnnotColorPalette_MenuCommand { get; set; }
public DelegateCommand AnnotAddNoteText_MenuCommand { get; set; }
//高亮、下划线、删除
public DelegateCommand HightAnnotCopyText_MenuCommand { get; set; }
//手绘
public DelegateCommand FreeHandLineStyle_MenuCommand { get; set; }
//文本
public DelegateCommand FreeTextFontFamily_MenuCommand { get; set; }
public DelegateCommand FreeTextAglin_MenuCommand { get; set; }
//便签
public DelegateCommand StrikeNoteEditStrike_MenuCommand { get; set; }
//形状
public DelegateCommand ShapeLineStyle_MenuCommand { get; set; }
public DelegateCommand ShapeLineDirect_MenuCommand { get; set; }
//图章
public DelegateCommand StampExportPicture_MenuCommand { get; set; }
//链接
public DelegateCommand Link_MenuCommand { get; set; }
#endregion 注释 - 右键菜单
#endregion 事件
}
public enum AddAnnotType
{
AnnotFreehand,//绘制
AnnotFreeText = 1,//文本
AnnotSticky,//便签
AnnotSquare,//矩形
AnnotCircle,//椭圆形
AnnotArrow,//箭头
AnnotLine,//直线
AnnotLink,//链接
AnnotStamp,//图章
AnnotAutograph //签名
}
}