using ComPDFKit.PDFDocument;
using compdfkit_tools.PDFControlUI;
using compdfkit_tools.PDFView.PDFOutline.PDFOutlineData;
using ComPDFKitViewer.PdfViewer;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace compdfkit_tools.PDFControl
{
///
/// CPDFOutlineControl.xaml 的交互逻辑
///
public partial class CPDFOutlineControl : UserControl
{
CPDFViewer pdfViewer;
private CPDFOutline CurrentCPDFOutline { set; get; }
public ObservableCollection OutlineList
{
set; get;
}
public CPDFOutlineControl()
{
InitializeComponent();
}
private int GetIndexFromParent(List parentlist, CPDFOutline outline)
{
for (int i = 0; i < parentlist.Count; i++)
{
if (parentlist[i] == outline)
{
return i;
}
}
return -1;
}
public CPDFOutlineNode FindOutlineFromDto(ObservableCollection list, CPDFOutline outline)
{
foreach (CPDFOutlineNode item in list)
{
CPDFOutline parent = outline.GetParent();
CPDFOutline PARENT = item.PDFOutline.GetParent();
item.CurrentNodeName = outline.Title;
int i = GetIndexFromParent(parent.ChildList, outline);
int I = GetIndexFromParent(PARENT.ChildList, item.PDFOutline);
if (item.PDFOutline.Title == outline.Title && i == I && outline.Level == item.PDFOutline.Level && ((parent.Title == PARENT.Title) || (parent.Title == null && PARENT.Title == null)))
{
return item;
}
else if (item.ChildrenNodeList.Count > 0)
{
CPDFOutlineNode retdto = FindOutlineFromDto(item.ChildrenNodeList, outline);
if (retdto != null)
{
return retdto;
}
}
}
return null;
}
private CPDFOutlineNode ConvertCPDFToOutlineNode(CPDFOutline outline, CPDFOutlineNode parent)
{
CPDFOutlineNode node = new CPDFOutlineNode();
if (outline != null)
{
node.PDFOutline = outline;
if (parent != null)
{
node.ParentNode = parent;
}
if (OutlineList != null && OutlineList.Count > 0)
{
CPDFOutlineNode oldnode = FindOutlineFromDto(OutlineList, node.PDFOutline);
}
node.ChildrenNodeList = new ObservableCollection();
if (outline.ChildList.Count > 0)
{
foreach (CPDFOutline item in outline.ChildList)
{
node.ChildrenNodeList.Add(ConvertCPDFToOutlineNode(item, node));
}
}
}
return node;
}
public ObservableCollection GetOutlineViewDataSource()
{
ObservableCollection data = new ObservableCollection();
List datasource = pdfViewer.Document.GetOutlineList();
foreach (CPDFOutline item in datasource)
{
CPDFOutlineNode dto = ConvertCPDFToOutlineNode(item, null);
if (dto != null)
{
data.Add(dto);
}
}
return data;
}
public void InitWithPDFViewer(CPDFViewer pdfViewer)
{
this.pdfViewer = pdfViewer;
List outlineList = pdfViewer.Document.GetOutlineList();
CPDFOutlineUI.SetOutlineTree(outlineList);
}
}
}