using ComPDFKit.PDFAnnotation;
using ComPDFKitViewer;
using ComPDFKitViewer.AnnotEvent;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace PDF_Master.ViewModels.Tools.AnnotManager
{
///
/// 注释面板与外部(如注释工具)关联
///
public class AnnotTransfer
{
public event EventHandler> DataChanged;
public event EventHandler> AnnotTypeChanged;
public bool IsAddLink = false;
public bool IsSelectedTextAddLink = false;
public bool IsSelectedTextAddShape = false;
public AnnotAttribEvent AnnotEvent { get; set; }
public List AnnotEvents = new List();
public AnnotHandlerEventArgs annot;
public List annotlists;
public Dictionary LastAnnotDict = new Dictionary();
public AnnotHandlerEventArgs LastArrowAnnot = null;
public string SharpsAnnot = "Rect";
public string AnnotSelect = "";
//是否为填写与签名的日期文本
public bool IsTextFill { get; private set; }
public void SetIsTextFill(bool isTextFill)
{
IsTextFill = isTextFill;
}
private bool isSharpAnnotSelected = true;
public bool IsSharpAnnotSelected
{
get { return isSharpAnnotSelected; }
set { isSharpAnnotSelected = value; }
}
private bool isFreeHandSelected = true;
public bool IsFreeHandSelected
{
get { return isFreeHandSelected; }
set
{
isFreeHandSelected = value;
}
}
public bool IsMultiSelected
{ get { return (annotlists != null && annotlists.Count > 1); } }
public AnnotTransfer()
{
LastAnnotDict.Add(AnnotArgsType.AnnotHighlight, null);
LastAnnotDict.Add(AnnotArgsType.AnnotUnderline, null);
LastAnnotDict.Add(AnnotArgsType.AnnotStrikeout, null);
LastAnnotDict.Add(AnnotArgsType.AnnotFreehand, null);
LastAnnotDict.Add(AnnotArgsType.AnnotFreeText, null);
LastAnnotDict.Add(AnnotArgsType.AnnotSticky, null);
LastAnnotDict.Add(AnnotArgsType.AnnotSquare, null);
LastAnnotDict.Add(AnnotArgsType.AnnotCircle, null);
LastAnnotDict.Add(AnnotArgsType.AnnotLine, null);
}
public void SaveLastAnnot()
{
if (annot == null)
{
return;
}
if (annot.EventType == AnnotArgsType.AnnotLine)
{
var lineAnnotArgs = annot as LineAnnotArgs;
if (lineAnnotArgs.HeadLineType >= (C_LINE_TYPE)1 || lineAnnotArgs.TailLineType >= (C_LINE_TYPE)1)
{
LastArrowAnnot = annot;
return;
}
}
if (LastAnnotDict.ContainsKey(annot.EventType))
{
LastAnnotDict[annot.EventType] = annot;
}
}
#region 静态
//是否为形状注释
public static bool IsShapAnnot(AnnotHandlerEventArgs annot)
{
if (annot.EventType == AnnotArgsType.AnnotCircle ||
annot.EventType == AnnotArgsType.AnnotSquare ||
annot.EventType == AnnotArgsType.AnnotLine
)
{
return true;
}
else
{
return false;
}
}
//是否为高亮注释
public static bool IsHightAnnot(AnnotHandlerEventArgs annot)
{
if (annot.EventType == AnnotArgsType.AnnotUnderline ||
annot.EventType == AnnotArgsType.AnnotSquiggly ||
annot.EventType == AnnotArgsType.AnnotHighlight ||
annot.EventType == AnnotArgsType.AnnotStrikeout
)
{
return true;
}
else
{
return false;
}
}
//判断注释列表是否有不同种类的注释
public static bool IsDifferentTypeAnnots(List annotlists)
{
//如高亮、下划线、删除线,是属于同一种类的注释
bool isDifferentAnnotTyle = false;
var annot = annotlists[0];
var lastAnnot = annot;
foreach (var item in annotlists)
{
if (lastAnnot.EventType != item.EventType)
{
if ((AnnotTransfer.IsShapAnnot(annot) == true && AnnotTransfer.IsShapAnnot(item) == true) || (AnnotTransfer.IsHightAnnot(annot) == true && AnnotTransfer.IsHightAnnot(item) == true))
{
lastAnnot = item;
continue;
}
lastAnnot = item;
isDifferentAnnotTyle = true;
break;
}
}
return isDifferentAnnotTyle;
}
//外部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;
}
#endregion 静态
//单个属性更改
public void UpdateAnnotAAttrib(AnnotAttrib annotAttrib, object obj)
{
//if(obj is Color)
//{
// if (AnnotEvents != null)
// {
// foreach (var itemevent in AnnotEvents)
// {
// itemevent?.UpdateAttrib(annotAttrib, obj);
// itemevent?.UpdateAnnot();
// }
// }
//}
if (annotlists == null) return;
if (annotlists != null && annotlists.Count > 1)
{
foreach (var itemevent in AnnotEvents)
{
itemevent?.UpdateAttrib(annotAttrib, obj);
itemevent?.UpdateAnnot();
}
}
else if (annotlists.Count == 1)
{
AnnotEvent?.UpdateAttrib(annotAttrib, obj);
AnnotEvent?.UpdateAnnot();
//this.annot = AnnotEvent.AnnotItemsList[0];
}
}
//多个属性更改
public void UpdateAnnotAllAttribs(Dictionary AnnotAttribDir)
{
if (annotlists == null) return;
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 if (annotlists.Count == 1)
{
foreach (var item in AnnotAttribDir)
{
AnnotEvent?.UpdateAttrib(item.Key, item.Value);
}
AnnotEvent?.UpdateAnnot();
//this.annot = AnnotEvent.AnnotItemsList[0];
}
}
//是否为多选
#region Invoke
///
/// 更新多个属性,触发到工具栏注释工具,改变工具图标下的颜色值
///
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);
}
#endregion Invoke
}
}