using Compdfkit_Tools.Helper; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Windows; using RadioButton = System.Windows.Controls.RadioButton; namespace Compdfkit_Tools.PDFControl { /// /// Interaction logic for PageRangeDialog.xaml /// public partial class PageRangeDialog : Window, INotifyPropertyChanged { private bool canContinue = true; private int pageCount = 0; private List defaultPageList = new List(); private List _pageIndexList = new List(); public List PageIndexList { get => _pageIndexList; set { _pageIndexList = value; PreviewControl.PageRangeList = _pageIndexList; } } private bool _isEvenEnable = false; public bool IsEvenEnable { get => _isEvenEnable; set { UpdateProper(ref _isEvenEnable, value); } } private string _pageRange; public string PageRange { get => _pageRange; set { if (fileInfo != null & UpdateProper(ref _pageRange, value)) { List list = new List(); canContinue = CommonHelper.GetPagesInRange(ref list, PageRange, fileInfo.Document.PageCount, new char[] { ',' }, new char[] { '-' }); if (canContinue) { List newList = list.Select(item => item + 1).ToList(); PageIndexList = newList; } else { PageIndexList = fileInfo.PageRangeList; } } } } private FileInfoWithRange fileInfo; private WeakReference weakReference; public delegate void WindowClosedEventHandler(object sender, List result); public event WindowClosedEventHandler WindowClosed; public PageRangeDialog() { this.DataContext = this; InitializeComponent(); } public void InitWithFileInfo(FileInfoWithRange fileInfo) { this.fileInfo = fileInfo; } private void ConfirmBtn_Click(object sender, RoutedEventArgs e) { if (!canContinue) { MessageBox.Show("Please enter the right page range", LanguageHelper.CommonManager.GetString("Caption_Warning"), MessageBoxButton.OK, MessageBoxImage.Information); return; } WindowClosed?.Invoke(weakReference.Target, PageIndexList); this.Close(); } private void CancelBtn_Click(object sender, RoutedEventArgs e) { WindowClosed?.Invoke(weakReference.Target, null); this.Close(); } protected override void OnClosed(EventArgs e) { fileInfo.Document.ReleasePages(); base.OnClosed(e); } private void Window_Loaded(object sender, RoutedEventArgs e) { weakReference = new WeakReference(this); PreviewControl.InitPreview(fileInfo.Document); defaultPageList = CommonHelper.GetDefaultPageList(fileInfo.Document); PageIndexList = defaultPageList; pageCount = fileInfo.Document.PageCount; if (pageCount <= 1) { IsEvenEnable = false; } else { IsEvenEnable = true; } } private void RangeRdo_Checked(object sender, RoutedEventArgs e) { var radioButton = sender as RadioButton; if (radioButton != null && fileInfo != null) { canContinue = true; switch (radioButton.Tag) { case "All": PageIndexList = defaultPageList; break; case "Odd": PageIndexList = defaultPageList.Where(value => value % 2 != 0).ToList(); break; case "Even": if (defaultPageList.Count > 1) { PageIndexList = defaultPageList.Where(value => value % 2 == 0).ToList(); } break; case "Custom": List list = new List(); canContinue = CommonHelper.GetPagesInRange(ref list, PageRange, fileInfo.Document.PageCount, new char[] { ',' }, new char[] { '-' }, false); if (canContinue) { // Increment each element in the list by 1 for (int i = 0; i < list.Count; i++) { list[i]++; } PageIndexList = list; } else { PageIndexList = defaultPageList; } break; default: break; } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected bool UpdateProper(ref T properValue, T newValue, [CallerMemberName] string properName = "") { if (object.Equals(properValue, newValue)) return false; properValue = newValue; OnPropertyChanged(properName); return true; } } }