123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- using ComPDFKit.PDFDocument;
- using ComPDFKitViewer.PdfViewer;
- using ImTools;
- using Microsoft.Office.Interop.Word;
- using PDF_Office.CustomControl;
- using PDF_Office.Helper;
- using PDF_Office.Model;
- using PDF_Office.Model.PageEdit;
- using Prism.Commands;
- using Prism.Mvvm;
- using Prism.Regions;
- using Prism.Services.Dialogs;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Reflection;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Controls.Primitives;
- using System.Windows.Forms;
- using System.Windows.Input;
- using System.Windows.Markup;
- using System.Windows.Media;
- using static Dropbox.Api.Files.SearchMatchType;
- using static Dropbox.Api.TeamLog.AdminAlertSeverityEnum;
- using static System.Net.Mime.MediaTypeNames;
- using static System.Windows.Forms.VisualStyles.VisualStyleElement;
- using KeyEventArgs = System.Windows.Input.KeyEventArgs;
- using ListViewItem = System.Windows.Controls.ListViewItem;
- using TextBox = System.Windows.Controls.TextBox;
- namespace PDF_Office.ViewModels.BOTA
- {
- public class BookmarkContentViewModel : BindableBase, INavigationAware
- {
- #region 属性
- private IRegionManager region;
- private IDialogService dialogs;
- public CPDFViewer PDFViewer;
- /// <summary>
- /// 书签ItemSouce
- /// </summary>
- private ObservableCollection<CPDFBookmark> bookmarklist;
- public ObservableCollection<CPDFBookmark> Bookmarklist
- {
- get
- {
- return bookmarklist;
- }
- set
- {
- SetProperty(ref bookmarklist, value);
- }
- }
- /// <summary>
- /// 书签列表为空时,显示状态
- /// </summary>
- private Visibility isEmpty;
- public Visibility IsEmptyPanelVisibility
- {
- get
- {
- return isEmpty;
- }
- set
- {
- SetProperty(ref isEmpty, value);
- }
- }
- #endregion 属性
- #region 命令
- public DelegateCommand<object> KeyDownCommand { get; set; }
- public DelegateCommand<object> LostFocusCommand { get; set; }
- public DelegateCommand<object> AddBookmarkCommand { get; set; }
- public DelegateCommand<object> ListViewItemMouseDownCommand { get; set; }
- public DelegateCommand<object> EditPageIndexCommand { get; set; }
- public DelegateCommand<object> DeleteCommand { get; set; }
- #endregion 命令
- public BookmarkContentViewModel(IRegionManager regionManager, IDialogService dialogService)
- {
- region = regionManager;
- dialogs = dialogService;
- Bookmarklist = new ObservableCollection<CPDFBookmark>();
- LostFocusCommand = new DelegateCommand<object>(LostFocusEvent);
- AddBookmarkCommand = new DelegateCommand<object>(AddBookmarkEvent);
- ListViewItemMouseDownCommand = new DelegateCommand<object>(ListViewItemMouseLeftButtonDownEvent);
- DeleteCommand = new DelegateCommand<object>(DelegateEvent);
- EditPageIndexCommand = new DelegateCommand<object>(EditPageIndexEvent);
- KeyDownCommand = new DelegateCommand<object>(KeyDownEvent);
- }
- /// <summary>
- /// 检测ObservableCollection的数据变更
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Bookmarklist_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
- {
- ObservableCollection<CPDFBookmark> obsSender = sender as ObservableCollection<CPDFBookmark>;
- if (obsSender != null)
- {
- if (obsSender.Count < 1)
- {
- IsEmptyPanelVisibility = Visibility.Visible;
- }
- else
- {
- IsEmptyPanelVisibility = Visibility.Collapsed;
- }
- }
- else
- {
- IsEmptyPanelVisibility = Visibility.Visible;
- }
- }
- /// <summary>
- /// 文本框按下Enter键
- /// </summary>
- /// <param name="obj"></param>
- private void KeyDownEvent(object obj)
- {
- if (obj is KeyEventArgs)
- {
- KeyEventArgs keyEventArgs = (KeyEventArgs)obj;
- if (keyEventArgs.Key == Key.Enter)
- {
- if (keyEventArgs.OriginalSource is TextBox)
- {
- TextBox textBox = (TextBox)keyEventArgs.OriginalSource;
- ListViewItem listViewItem = CommonHelper.FindVisualParent<ListViewItem>(textBox);
- UpdateTitle(listViewItem, textBox);
- TextBlock textBlock = CommonHelper.FindVisualChild<TextBlock>(listViewItem);
- textBlock.Text = textBox.Text;
- textBlock.Visibility = Visibility.Visible;
- }
- }
- }
- }
- /// <summary>
- /// 重新定位
- /// </summary>
- /// <param name="obj"></param>
- private void EditPageIndexEvent(object obj)
- {
- CPDFBookmark bookmark = obj as CPDFBookmark;
- if (bookmark != null)
- {
- AlertsMessage alertsMessage = new AlertsMessage();
- alertsMessage.ShowDialog("提示", "确定要将选定大纲的目标位置设置为当前位置吗?", "Cancel", "OK");
- if (alertsMessage.result == ContentResult.Ok)
- {
- if (RemoveBookMark(bookmark))
- {
- bookmarklist.Remove(bookmark);
- CPDFBookmark cPDFBookmark = new CPDFBookmark();
- bookmark.Title = bookmark.Title;
- bookmark.Date = DateTime.Now.ToString(@"yyyyMMddHHmmsszzz\'").Replace(':', '\'') + "\n";
- bookmark.PageIndex = PDFViewer.CurrentIndex;
- if (PDFViewer.Document.AddBookmark(bookmark))
- {
- PDFViewer.UndoManager.CanSave = true;
- Bookmarklist.Add(bookmark);
- }
- }
- }
- }
- }
- /// <summary>
- /// 右键菜单-删除
- /// </summary>
- /// <param name="obj"></param>
- private void DelegateEvent(object obj)
- {
- CPDFBookmark bookmark = obj as CPDFBookmark;
- if (bookmark != null)
- {
- if (RemoveBookMark(bookmark))
- {
- Bookmarklist.Remove(bookmark);
- }
- }
- }
- /// <summary>
- /// 删除书签
- /// </summary>
- /// <param name="item"></param>
- /// <returns></returns>
- private bool RemoveBookMark(CPDFBookmark item)
- {
- var data = item;
- if (data == null)
- {
- return false;
- }
- return PDFViewer.Document.RemoveBookmark(data.PageIndex);
- }
- /// <summary>
- /// ListViewItem失去焦点
- /// </summary>
- /// <param name="obj"></param>
- private void LostFocusEvent(object obj)
- {
- TextBox textBox = null;
- ListViewItem listViewItem = null;
- if (obj is CompositeCommandParameter)
- {
- CompositeCommandParameter parameter = (CompositeCommandParameter)obj;
- if (parameter.Parameter is TextBox)
- {
- textBox = (TextBox)parameter.Parameter;
- listViewItem = CommonHelper.FindVisualParent<ListViewItem>(textBox);
- }
- }
- if (obj is ListBoxItem)
- {
- listViewItem = (ListViewItem)(obj);
- textBox = CommonHelper.FindVisualChild<TextBox>(listViewItem);
- }
- UpdateTitle(listViewItem, textBox);
- }
- /// <summary>
- /// 修改书签标题
- /// </summary>
- /// <param name="listViewItem"></param>
- /// <param name="textBox"></param>
- private void UpdateTitle(ListViewItem listViewItem, TextBox textBox)
- {
- if (listViewItem != null)
- {
- var data = listViewItem.DataContext as CPDFBookmark;
- if (data == null)
- {
- return;
- }
- var result = PDFViewer.Document.EditBookmark(data.PageIndex, textBox.Text.Trim());
- if (result)
- {
- data.Title = textBox.Text.Trim();
- PDFViewer.UndoManager.CanSave = true;
- }
- }
- }
- /// <summary>
- /// ListBoxItem左键单击,页面跳转
- /// </summary>
- /// <param name="obj"></param>
- private void ListViewItemMouseLeftButtonDownEvent(object obj)
- {
- ListBoxItem listBoxItem = (obj as ListBoxItem);
- if (listBoxItem != null)
- {
- if (!(listBoxItem.DataContext is CPDFBookmark))
- {
- return;
- }
- int index = (listBoxItem.DataContext as CPDFBookmark).PageIndex;
- PDFViewer.GoToPage(index);
- }
- }
- /// <summary>
- /// 添加书签
- /// </summary>
- /// <param name="obj"></param>
- private void AddBookmarkEvent(object obj)
- {
- int index = PDFViewer.CurrentIndex;
- string mark = string.Format($"第{index + 1}页");
- //检测是否已存在相同数据
- var list = PDFViewer.Document.GetBookmarkList().FindAll(q => q.PageIndex == index);
- if (list.Count > 0)
- {
- System.Windows.Controls.ListView listView = obj as System.Windows.Controls.ListView;
- if (listView != null)
- {
- ListBoxItem myListBoxItem = (ListBoxItem)(listView.ItemContainerGenerator.ContainerFromItem(list[0]));
- if (myListBoxItem.IsSelected == false)
- {
- myListBoxItem.IsSelected = true;
- myListBoxItem.Focus();
- }
- return;
- }
- }
- DialogParameters value = new DialogParameters();
- value.Add(ParameterNames.Bookmark, mark);
- value.Add(ParameterNames.Title, "创建一个新的书签");
- dialogs.ShowDialog(DialogNames.AddBookmarkDialog, value, e =>
- {
- if (e.Result == ButtonResult.OK && e.Parameters != null)
- {
- if (e.Parameters.ContainsKey(ParameterNames.Bookmark))
- {
- mark = e.Parameters.GetValue<string>(ParameterNames.Bookmark).ToString();
- CPDFBookmark bookmark = new CPDFBookmark();
- bookmark.Title = mark;
- bookmark.Date = DateTime.Now.ToString(@"yyyyMMddHHmmsszzz\'").Replace(':', '\'') + "\n";
- bookmark.PageIndex = PDFViewer.CurrentIndex;
- if (PDFViewer.Document.AddBookmark(bookmark))
- {
- PDFViewer.UndoManager.CanSave = true;
- Bookmarklist.Add(bookmark);
- }
- }
- }
- });
- }
- public void OnNavigatedTo(NavigationContext navigationContext)
- {
- navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
- if (PDFViewer == null)
- {
- IsEmptyPanelVisibility = Visibility.Visible;
- return;
- }
- Bookmarklist = new ObservableCollection<CPDFBookmark>(PDFViewer.Document.GetBookmarkList().OrderBy(d => d.Title));
- Bookmarklist.CollectionChanged += Bookmarklist_CollectionChanged;
- if (Bookmarklist.Count < 1)
- {
- IsEmptyPanelVisibility = Visibility.Visible;
- return;
- }
- else
- {
- IsEmptyPanelVisibility = Visibility.Hidden;
- return;
- }
- }
- public bool IsNavigationTarget(NavigationContext navigationContext)
- {
- return true;
- }
- public void OnNavigatedFrom(NavigationContext navigationContext)
- {
- }
- }
- }
|