using Compdfkit_Tools.Helper;
using Compdfkit_Tools.PDFControlUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
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.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MessageBox = System.Windows.MessageBox;
namespace Compdfkit_Tools.PDFControl
{
///
/// CPDFPageExtractWindow.xaml 的交互逻辑
///
public partial class CPDFPageExtractWindow : Window
{
private string pageRangeString = string.Empty;
private List pageRangeList = new List();
public ExtractEventClass extractEventClass = new ExtractEventClass();
public delegate void DialogCloseEventHandler(object sender, ExtractDialogCloseEventArgs e);
public event DialogCloseEventHandler DialogClosed;
public CPDFPageExtractWindow()
{
InitializeComponent();
}
public void InitPageExtractWindow(string customPageRange, int maxPage)
{
if (customPageRange == string.Empty)
{
CPDFPageExtractUI.PageRange = PDFControlUI.PageRange.AllPages;
extractEventClass.PageMode = 1;
}
else
{
CPDFPageExtractUI.PageRange = PDFControlUI.PageRange.CustomPages;
extractEventClass.PageMode = 4;
pageRangeString = customPageRange;
CommonHelper.GetPagesInRange(ref pageRangeList, pageRangeString, CPDFPageExtractUI.MaxIndex, new char[] { ',' }, new char[] { '-' });
for (int i = 0; i < pageRangeList.Count; i++)
{
pageRangeList[i]++;
}
}
CPDFPageExtractUI.MaxIndex = maxPage;
CPDFPageExtractUI.CurrentPageRange = customPageRange;
}
private void CPDFPageExtractUI_Loaded(object sender, RoutedEventArgs e)
{
CPDFPageExtractUI.PageRangeChanged += CPDFPageExtractUI_PageRangeChanged;
CPDFPageExtractUI.CustomPageRangeChanged += CPDFPageExtractUI_CustomPageRangeChanged;
CPDFPageExtractUI.SeparateChanged += CPDFPageExtractUI_SeparateChanged;
CPDFPageExtractUI.DeleteChanged += CPDFPageExtractUI_DeleteChanged;
CPDFPageExtractUI.ExtractEvent += CPDFPageExtractUI_ExtractEvent;
CPDFPageExtractUI.CancelEvent += CPDFPageExtractUI_CancelEvent;
}
private void CPDFPageExtractUI_CancelEvent(object sender, EventArgs e)
{
CloseWindow(null);
}
private void CPDFPageExtractUI_ExtractEvent(object sender, EventArgs e)
{
if (extractEventClass.PageMode != 4)
{
if (extractEventClass.PageMode == 1 && extractEventClass.DeleteAfterExtract)
{
MessageBox.Show(" Please keep at least one page.", "Alert", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (extractEventClass.PageMode == 3 && CPDFPageExtractUI.MaxIndex == 1)
{
MessageBox.Show(" No page will be extracted.", "Alert", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
CloseWindow(extractEventClass);
}
else if(extractEventClass.PageMode == 4 && CommonHelper.GetPagesInRange(ref pageRangeList, pageRangeString, CPDFPageExtractUI.MaxIndex, new char[] { ',' }, new char[] { '-' }))
{
if (pageRangeList.Count == CPDFPageExtractUI.MaxIndex && extractEventClass.DeleteAfterExtract)
{
MessageBox.Show(" Please keep at least one page.", "Alert", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
extractEventClass.PageName = pageRangeString;
for (int i = 0; i < pageRangeList.Count; i++)
{
pageRangeList[i]++;
}
extractEventClass.PageParm = pageRangeList;
CloseWindow(extractEventClass);
}
else
{
MessageBox.Show("Please check page range.", "Alert", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
private void CPDFPageExtractUI_CustomPageRangeChanged(object sender, string e)
{
pageRangeString = e;
}
private void CPDFPageExtractUI_DeleteChanged(object sender, bool e)
{
extractEventClass.DeleteAfterExtract = e;
}
private void CPDFPageExtractUI_SeparateChanged(object sender, bool e)
{
extractEventClass.ExtractToSingleFile = e;
}
private void CPDFPageExtractUI_PageRangeChanged(object sender, PDFControlUI.PageRange e)
{
extractEventClass.PageMode = (int)e;
}
private void CPDFPageExtractUI_Unloaded(object sender, RoutedEventArgs e)
{
CPDFPageExtractUI.PageRangeChanged -= CPDFPageExtractUI_PageRangeChanged;
CPDFPageExtractUI.CustomPageRangeChanged -= CPDFPageExtractUI_CustomPageRangeChanged;
CPDFPageExtractUI.SeparateChanged -= CPDFPageExtractUI_SeparateChanged;
CPDFPageExtractUI.DeleteChanged -= CPDFPageExtractUI_DeleteChanged;
CPDFPageExtractUI.ExtractEvent -= CPDFPageExtractUI_ExtractEvent;
CPDFPageExtractUI.CancelEvent -= CPDFPageExtractUI_CancelEvent;
}
// 弹窗关闭时的处理逻辑
private void CloseWindow(ExtractEventClass dialogResult)
{
// 触发关闭事件,并传递返回值
DialogClosed?.Invoke(this, new ExtractDialogCloseEventArgs(dialogResult));
// 关闭窗口
Close();
}
}
// 定义关闭事件参数类,包含返回值
public class ExtractDialogCloseEventArgs : EventArgs
{
public ExtractEventClass DialogResult { get; set; }
public ExtractDialogCloseEventArgs(ExtractEventClass dialogResult)
{
DialogResult = dialogResult;
}
}
}