AnnotToolContentViewModel.cs 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411
  1. using ComPDFKit.PDFAnnotation;
  2. using ComPDFKit.PDFDocument;
  3. using ComPDFKitViewer;
  4. using ComPDFKitViewer.AnnotEvent;
  5. using ComPDFKitViewer.PdfViewer;
  6. using Microsoft.Office.Interop.Excel;
  7. using Microsoft.Office.Interop.Word;
  8. using Microsoft.Win32;
  9. using PDF_Office.CustomControl;
  10. using PDF_Office.EventAggregators;
  11. using PDF_Office.Helper;
  12. using PDF_Office.Model;
  13. using PDF_Office.Properties;
  14. using PDF_Office.ViewModels.BOTA;
  15. using PDF_Office.ViewModels.PropertyPanel;
  16. using PDF_Office.ViewModels.PropertyPanel.AnnotPanel;
  17. using PDF_Office.Views.BOTA;
  18. using PDF_Office.Views.PropertyPanel.AnnotPanel;
  19. using PDFSettings;
  20. using Prism.Commands;
  21. using Prism.Events;
  22. using Prism.Mvvm;
  23. using Prism.Regions;
  24. using Prism.Services.Dialogs;
  25. using System;
  26. using System.Collections.Generic;
  27. using System.Linq;
  28. using System.Reflection;
  29. using System.Text;
  30. using System.Threading.Tasks;
  31. using System.Windows;
  32. using System.Windows.Controls;
  33. using System.Windows.Controls.Primitives;
  34. using System.Windows.Forms;
  35. using System.Windows.Input;
  36. using System.Windows.Media;
  37. using ContextMenu = System.Windows.Controls.ContextMenu;
  38. using MenuItem = System.Windows.Controls.MenuItem;
  39. namespace PDF_Office.ViewModels.Tools
  40. {
  41. public sealed partial class AnnotToolContentViewModel : BindableBase, INavigationAware
  42. {
  43. private IEventAggregator events;
  44. public IDialogService dialogs;
  45. public AnnotToolContentViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IDialogService dialogService)
  46. {
  47. region = regionManager;
  48. events = eventAggregator;
  49. dialogs = dialogService;
  50. MyToolsCommand = new DelegateCommand<CustomIconToggleBtn>(BtnMyTools_Click);
  51. SetAddAnnotationCommand = new DelegateCommand<object>(AddAnnotation_Click);
  52. PropertyRegionName = Guid.NewGuid().ToString();
  53. BindingEvent();
  54. InitDefaultValue();
  55. InitToolDict();
  56. }
  57. private void InitToolDict()
  58. {
  59. ToolExpandDict.Add("SnapshotEdit", AnnotArgsType.SnapshotWithEditTool);
  60. ToolExpandDict.Add("HighLight", AnnotArgsType.AnnotHighlight);
  61. ToolExpandDict.Add("UnderLine", AnnotArgsType.AnnotUnderline);
  62. ToolExpandDict.Add("Squiggly", AnnotArgsType.AnnotSquiggly);
  63. ToolExpandDict.Add("Strikeout", AnnotArgsType.AnnotStrikeout);
  64. ToolExpandDict.Add("Freehand", AnnotArgsType.AnnotFreehand);
  65. ToolExpandDict.Add("Freetext", AnnotArgsType.AnnotFreeText);
  66. ToolExpandDict.Add("StickyNote", AnnotArgsType.AnnotSticky);
  67. ToolExpandDict.Add("Rect", AnnotArgsType.AnnotSquare);
  68. ToolExpandDict.Add("Circle", AnnotArgsType.AnnotCircle);
  69. ToolExpandDict.Add("Arrow", AnnotArgsType.AnnotLine);
  70. ToolExpandDict.Add("Line", AnnotArgsType.AnnotLine);
  71. ToolExpandDict.Add("Link", AnnotArgsType.AnnotLink);
  72. }
  73. private Dictionary<string, AnnotArgsType> ToolExpandDict = new Dictionary<string, AnnotArgsType>();
  74. public void BtnMyTools_Click(CustomIconToggleBtn annotBtn)
  75. {
  76. //不创建注释,属于注释模板
  77. bool isTemplateAnnot = false;
  78. bool isSnapshotEdit = false;
  79. AnnotHandlerEventArgs annotArgs = null;
  80. if (annotBtn.IsChecked == true)
  81. {
  82. var tag = annotBtn.Tag.ToString();
  83. FindAnnotTypeKey(tag, ref annotArgs);
  84. if (tag == "SnapshotEdit")
  85. {
  86. isSnapshotEdit = true;
  87. }
  88. else if (tag == "Signature" || tag == "Stamp")
  89. {
  90. isTemplateAnnot = true;
  91. }
  92. if (annotArgs != null)
  93. {
  94. annotArgs.Author = Settings.Default.AppProperties.Description.Author;
  95. PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
  96. PDFViewer.SetToolParam(annotArgs);
  97. }
  98. }
  99. //当不是注释模板,且无创建注释时,属性面板显示为空内容
  100. if (isTemplateAnnot == false && annotArgs == null)
  101. {
  102. PDFViewer.SetMouseMode(MouseModes.PanTool);
  103. viewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null);
  104. }
  105. if (isSnapshotEdit == true)
  106. {
  107. ShowPropertyPanel(false);
  108. isSnapshotEdit = false;
  109. }
  110. else
  111. {
  112. ShowPropertyPanel((bool)annotBtn.IsChecked);
  113. }
  114. }
  115. private void FindAnnotTypeKey(string tag, ref AnnotHandlerEventArgs annotArgs)
  116. {
  117. switch (tag)
  118. {
  119. case "SnapshotEdit"://内容选择
  120. annotArgs = GetSnapshotEdit();
  121. break;
  122. case "HighLight"://字体高亮
  123. annotArgs = GetHighLight();
  124. break;
  125. case "UnderLine"://下划线
  126. annotArgs = GetUnderLine();
  127. break;
  128. case "Squiggly"://波浪线
  129. annotArgs = GetSquiggly();
  130. break;
  131. case "Strikeout"://删除线
  132. annotArgs = GetStrikeout();
  133. break;
  134. case "Freehand"://手绘
  135. annotArgs = GetFreehand();
  136. break;
  137. case "Freetext"://文本
  138. annotArgs = GetFreetext();
  139. break;
  140. case "StickyNote"://便签
  141. annotArgs = GetStickyNote();
  142. break;
  143. case "Rect"://矩形
  144. annotArgs = GetRect();
  145. break;
  146. case "Circle"://圆
  147. annotArgs = GetCircle();
  148. break;
  149. case "Arrow"://箭头
  150. case "Line"://线
  151. annotArgs = GetArrowLine(tag);
  152. break;
  153. case "Stamp"://图章
  154. annotArgs = GetStamp();
  155. break;
  156. case "Image":
  157. annotArgs = GetImage();
  158. break;
  159. case "Signature"://签名
  160. annotArgs = GetSignature();
  161. PDFViewer.SetMouseMode(MouseModes.PanTool);//清空其他注释
  162. break;
  163. case "Link"://链接
  164. //viewContentViewModel.IsCreateLink = false;
  165. annotArgs = GetLink();
  166. break;
  167. }
  168. }
  169. private void AnnotProperty_DefaultStored(object sender, object e)
  170. {
  171. }
  172. private void AnnotPropertyPanel_AnnotTypeChanged(object sender, Dictionary<AnnotArgsType, object> e)
  173. {
  174. if (e != null)
  175. {
  176. AnnotHandlerEventArgs annotArgs = null;
  177. foreach (AnnotArgsType argsType in e.Keys)
  178. {
  179. switch (argsType)
  180. {
  181. case AnnotArgsType.AnnotSquare:
  182. annotArgs = GetRect();
  183. break;
  184. case AnnotArgsType.AnnotCircle:
  185. annotArgs = GetCircle();
  186. break;
  187. case AnnotArgsType.AnnotLine:
  188. var LineTag = e[argsType] as string;
  189. annotArgs = GetArrowLine(LineTag);
  190. break;
  191. }
  192. if (annotArgs != null)
  193. {
  194. annotArgs.Author = Settings.Default.AppProperties.Description.Author;
  195. PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
  196. PDFViewer.SetToolParam(annotArgs);
  197. }
  198. ShowPropertyPanel();
  199. }
  200. }
  201. }
  202. private void AnnotPropertyPanel_DataChanged(object sender, Dictionary<AnnotArgsType, object> e)
  203. {
  204. if (e != null)
  205. {
  206. foreach (AnnotArgsType argsType in e.Keys)
  207. {
  208. switch (argsType)
  209. {
  210. case AnnotArgsType.AnnotHighlight:
  211. if (e[argsType] is Color)
  212. {
  213. HighLightColor = new SolidColorBrush((Color)e[argsType]);
  214. }
  215. if (e[argsType] is double)
  216. {
  217. HighLightOpacity = (double)e[argsType];
  218. }
  219. break;
  220. case AnnotArgsType.AnnotUnderline:
  221. if (e[argsType] is Color)
  222. {
  223. UnderLineColor = new SolidColorBrush((Color)e[argsType]);
  224. }
  225. if (e[argsType] is double)
  226. {
  227. underLineOpacity = (double)e[argsType];
  228. }
  229. break;
  230. case AnnotArgsType.AnnotSquiggly:
  231. if (e[argsType] is Color)
  232. {
  233. SquigglyColor = new SolidColorBrush((Color)e[argsType]);
  234. }
  235. if (e[argsType] is double)
  236. {
  237. SquigglyOpacity = (double)e[argsType];
  238. }
  239. break;
  240. case AnnotArgsType.AnnotStrikeout:
  241. if (e[argsType] is Color)
  242. {
  243. StrikeoutColor = new SolidColorBrush((Color)e[argsType]);
  244. }
  245. if (e[argsType] is double)
  246. {
  247. StrikeoutOpacity = (double)e[argsType];
  248. }
  249. break;
  250. case AnnotArgsType.AnnotFreehand:
  251. if (e[argsType] is Color)
  252. {
  253. // FreehandPath.Fill = new SolidColorBrush((Color)e[argsType]);
  254. }
  255. if (e[argsType] is double)
  256. {
  257. // FreehandPath.Opacity = (double)e[argsType];
  258. }
  259. break;
  260. case AnnotArgsType.AnnotErase:
  261. if (e[argsType] is ToggleButton)
  262. {
  263. ToggleButton clickBtn = e[argsType] as ToggleButton;
  264. //PDFViewerCtrl viewCtrl = GetCurrentViewer();
  265. // ClearSelectedToolPanel(BtnFreeHand);
  266. // if (viewCtrl != null && viewCtrl.PdfViewer != null)
  267. {
  268. if (clickBtn.IsChecked == true)
  269. {
  270. if (clickBtn.Tag.ToString() == "PenBtn")
  271. {
  272. CustomIconToggleBtn btn = new CustomIconToggleBtn();
  273. btn.Tag = "Freehand"; btn.IsChecked = true;
  274. BtnMyTools_Click(btn);
  275. break;
  276. }
  277. EraseArgs eraseArgs = new EraseArgs();
  278. eraseArgs.UIBorderColor = Color.FromArgb(0x1A, 0x00, 0x00, 0x00);
  279. eraseArgs.UIFillColor = Color.FromArgb(0x1A, 0x00, 0x00, 0x00);
  280. eraseArgs.Thickness = 10;
  281. DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotErase);
  282. if (annotProperty != null)
  283. {
  284. eraseArgs.Thickness = annotProperty.Thickness;
  285. }
  286. PDFViewer.ClearSelectAnnots(false);
  287. PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
  288. PDFViewer.SetToolParam(eraseArgs);
  289. Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
  290. annotAttribsList[AnnotAttrib.Color] = eraseArgs.UIBorderColor;
  291. annotAttribsList[AnnotAttrib.FillColor] = eraseArgs.UIFillColor;
  292. annotAttribsList[AnnotAttrib.Thickness] = eraseArgs.Thickness;
  293. AddToPropertyPanel("FreehandAnnotProperty", "Freehand", eraseArgs, annotAttribsList);
  294. //清空选中注释
  295. //viewCtrl.PdfViewer.ClearSelectAnnots(false);
  296. //viewCtrl.PdfViewer.SetMouseMode(MouseModes.AnnotCreate);
  297. //viewCtrl.PdfViewer.SetToolParam(eraseArgs);
  298. //if (viewCtrl.PropPanel.Children.Count > 0)
  299. //{
  300. // FreehandAnnotProperty freehandPropPanel = viewCtrl.PropPanel.Children[0] as FreehandAnnotProperty;
  301. // if (freehandPropPanel == null)
  302. // {
  303. // viewCtrl.PropPanel.Children.Clear();
  304. // freehandPropPanel = new FreehandAnnotProperty();
  305. // freehandPropPanel.EraseSet = true;
  306. // freehandPropPanel.SetInkThickness(eraseArgs.Thickness);
  307. // freehandPropPanel.DataChanged += AnnotPropertyPanel_DataChanged;
  308. // viewCtrl.PropPanel.Children.Add(freehandPropPanel);
  309. // }
  310. // Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
  311. // annotAttribsList[AnnotAttrib.Color] = eraseArgs.UIBorderColor;
  312. // annotAttribsList[AnnotAttrib.FillColor] = eraseArgs.UIFillColor;
  313. // annotAttribsList[AnnotAttrib.Thickness] = eraseArgs.Thickness;
  314. // freehandPropPanel.AnnotEvent = null;
  315. // freehandPropPanel.SetEraseMode(true);
  316. // freehandPropPanel.AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(eraseArgs, annotAttribsList);
  317. //}
  318. //else
  319. //{
  320. // FreehandAnnotProperty freehandProperty = new FreehandAnnotProperty();
  321. // freehandProperty.DataChanged += AnnotPropertyPanel_DataChanged;
  322. // Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
  323. // annotAttribsList[AnnotAttrib.Color] = eraseArgs.UIBorderColor;
  324. // annotAttribsList[AnnotAttrib.FillColor] = eraseArgs.UIFillColor;
  325. // annotAttribsList[AnnotAttrib.Thickness] = eraseArgs.Thickness;
  326. // freehandProperty.SetInkThickness(eraseArgs.Thickness);
  327. // freehandProperty.EraseSet = true;
  328. // freehandProperty.SetEraseMode(true);
  329. // freehandProperty.AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(eraseArgs, annotAttribsList);
  330. // viewCtrl.AddAnnotPropertyPanel(freehandProperty);
  331. //}
  332. }
  333. else
  334. {
  335. // BtnFreeHand.IsChecked = true;
  336. // BtnTool_Click(BtnFreeHand, new RoutedEventArgs());
  337. }
  338. }
  339. }
  340. break;
  341. }
  342. }
  343. }
  344. }
  345. public IRegionManager region;
  346. public string PropertyRegionName { get; set; }
  347. public bool IsNavigationTarget(NavigationContext navigationContext)
  348. {
  349. return true;
  350. }
  351. public void OnNavigatedFrom(NavigationContext navigationContext)
  352. {
  353. }
  354. public void OnNavigatedTo(NavigationContext navigationContext)
  355. {
  356. navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
  357. navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
  358. // navigationContext.Parameters.TryGetValue<PropertyPanelContentViewModel>(ParameterNames.PropertyPanelContentViewModel, out propertyPanelContentViewModel);
  359. if (PDFViewer != null)
  360. {
  361. PDFViewer.AnnotEditHandler -= PDFViewer_AnnotEditHandler;
  362. PDFViewer.AnnotEditHandler += PDFViewer_AnnotEditHandler;
  363. PDFViewer.AnnotActiveHandler -= PDFViewer_AnnotActiveHandler;
  364. PDFViewer.AnnotActiveHandler += PDFViewer_AnnotActiveHandler;
  365. PDFViewer.AnnotCommandHandler -= PDFViewer_AnnotCommandHandler;
  366. PDFViewer.AnnotCommandHandler += PDFViewer_AnnotCommandHandler;
  367. PDFViewer.WidgetClickHander -= PDFViewer_WidgetClickHander;
  368. PDFViewer.WidgetClickHander += PDFViewer_WidgetClickHander;
  369. PDFViewer.SnapshotCommandHandler -= PDFViewer_SnapshotCommandHandler;
  370. PDFViewer.SnapshotCommandHandler += PDFViewer_SnapshotCommandHandler;
  371. }
  372. }
  373. private void PDFViewer_SnapshotCommandHandler(object sender, SnapshotCommandArgs e)
  374. {
  375. SnapshotEditToolArgs snapToolArgs = (SnapshotEditToolArgs)PDFViewer.ToolManager.CurrentAnnotArgs;
  376. SnapshotEditMenuViewModel.SnapToolArgs = snapToolArgs;
  377. SnapshotEditMenuViewModel.PDFViewer = PDFViewer;
  378. SnapshotEditMenuViewModel.SnapToolEvent += SnapshotEditMenuViewModel_SnapToolEvent; ;
  379. var popMenu = App.Current.FindResource("SnapshotContextMenu") as ContextMenu;
  380. if (e.HitSnapshotTool && e.SnapshotRect.Width > 0 && e.SnapshotRect.Height > 0)
  381. {
  382. e.PopupMenu = popMenu;
  383. e.Handle = true;
  384. if (popMenu != null && popMenu.Items.Count == 5)
  385. {
  386. //复制
  387. MenuItem menuItem = popMenu.Items[0] as MenuItem;
  388. menuItem.CommandTarget = PDFViewer;
  389. menuItem.Command = SnapshotEditMenuViewModel.SnapCopyCommand;
  390. //导出
  391. menuItem = popMenu.Items[1] as MenuItem;
  392. menuItem.CommandTarget = PDFViewer;
  393. if (menuItem.Items.Count == 3)
  394. {
  395. MenuItem menuItem1 = menuItem.Items[0] as MenuItem;
  396. menuItem1.CommandTarget = PDFViewer;
  397. menuItem1.Command = SnapshotEditMenuViewModel.ExportPNGCommand;
  398. menuItem1 = menuItem.Items[1] as MenuItem;
  399. menuItem1.CommandTarget = PDFViewer;
  400. menuItem1.Command = SnapshotEditMenuViewModel.ExportJPGCommand;
  401. menuItem1 = menuItem.Items[2] as MenuItem;
  402. menuItem1.CommandTarget = PDFViewer;
  403. menuItem1.Command = SnapshotEditMenuViewModel.ExportPDFCommand;
  404. }
  405. //裁剪
  406. menuItem = popMenu.Items[2] as MenuItem;
  407. menuItem.CommandTarget = PDFViewer;
  408. menuItem.Command = SnapshotEditMenuViewModel.CroppingCommand;
  409. //缩放至所选区域
  410. menuItem = popMenu.Items[3] as MenuItem;
  411. menuItem.CommandTarget = PDFViewer;
  412. menuItem.Visibility = Visibility.Collapsed;
  413. //menuItem.Command = snapshotEditMenuViewModel.CroppingCommand;
  414. //打印
  415. menuItem = popMenu.Items[4] as MenuItem;
  416. menuItem.CommandTarget = PDFViewer;
  417. menuItem.Command = SnapshotEditMenuViewModel.PrintCommand;
  418. }
  419. }
  420. }
  421. private void SnapshotEditMenuViewModel_SnapToolEvent(object sender, KeyValuePair<string, object> e)
  422. {
  423. switch (e.Key)
  424. {
  425. case "CloseSnap":
  426. {
  427. #region to do
  428. //var item = PDFViewerTab.SelectedItem as TabItem;
  429. //if (item == null)
  430. //{
  431. // ClearSelectedToolPanel();
  432. // return;
  433. //}
  434. //Grid grid = item.Content as Grid;
  435. //if (grid == null || grid.Children.Count == 0)
  436. //{
  437. // ClearSelectedToolPanel();
  438. // return;
  439. //}
  440. //PDFViewerCtrl pdfViewer = grid.Children[0] as PDFViewerCtrl;
  441. //if (pdfViewer == null)
  442. //{
  443. // ClearSelectedToolPanel();
  444. // return;
  445. //}
  446. #endregion to do
  447. switch (PDFViewer.MouseMode)
  448. {
  449. case MouseModes.SelectTextTool:
  450. break;
  451. default:
  452. BtnSelecttoolIsChecked = false;
  453. break;
  454. }
  455. }
  456. break;
  457. default:
  458. break;
  459. }
  460. }
  461. private void PDFViewer_WidgetClickHander(object sender, WidgetArgs e)
  462. {
  463. }
  464. private void PDFViewer_AnnotEditHandler(object sender, List<AnnotEditEvent> e)
  465. {
  466. if (e != null && e.Count > 0)
  467. {
  468. for (int i = 0; i < e.Count; i++)
  469. {
  470. AnnotEditEvent editEvent = e[i];
  471. switch (editEvent.EditAction)
  472. {
  473. case ActionType.Add:
  474. BOTAContentViewModel bOTAContentViewModel = null;
  475. BOTAContent bOTAContent = null;
  476. bool isTabItemAnnotation = IsBOTATabItemShow(out bOTAContentViewModel, out bOTAContent, "TabItemAnnotation");
  477. if (viewContentViewModel.OpenBOTA == true && isTabItemAnnotation == true)
  478. {
  479. AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel);
  480. if (viewModel != null)
  481. {
  482. int pageindex = editEvent.PageIndex;
  483. int annotindex = editEvent.AnnotIndex;
  484. viewModel.UpdateAddedAnnot(pageindex, annotindex);
  485. }
  486. }
  487. break;
  488. case ActionType.Del:
  489. isTabItemAnnotation = IsBOTATabItemShow(out bOTAContentViewModel, out bOTAContent, "TabItemAnnotation");
  490. if (isTabItemAnnotation)
  491. {
  492. AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel);
  493. if (viewModel != null)
  494. {
  495. int pageindex = editEvent.PageIndex;
  496. int annotindex = editEvent.AnnotIndex;
  497. viewModel.UpdateModifiedAnnot(pageindex, annotindex, true);
  498. }
  499. }
  500. break;
  501. case ActionType.Modify:
  502. isTabItemAnnotation = IsBOTATabItemShow(out bOTAContentViewModel, out bOTAContent, "TabItemAnnotation");
  503. if (isTabItemAnnotation)
  504. {
  505. AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel);
  506. if (viewModel != null)
  507. {
  508. int pageindex = editEvent.PageIndex;
  509. int annotindex = editEvent.AnnotIndex;
  510. viewModel.UpdateModifiedAnnot(pageindex, annotindex, false);
  511. }
  512. }
  513. break;
  514. case ActionType.TextEdit:
  515. break;
  516. default:
  517. break;
  518. }
  519. }
  520. }
  521. }
  522. private AnnotationContentViewModel GetAnnotationContentViewModel(BOTAContentViewModel bOTAContentViewModel)
  523. {
  524. AnnotationContentViewModel viewModel = null;
  525. if (bOTAContentViewModel != null)
  526. {
  527. if (region.Regions.ContainsRegionWithName(bOTAContentViewModel.BOTAContentRegionName))
  528. {
  529. var views = region.Regions[bOTAContentViewModel.BOTAContentRegionName].Views;
  530. foreach (var item in views)
  531. {
  532. if (item is AnnotationContent annotation)
  533. {
  534. viewModel = annotation.DataContext as AnnotationContentViewModel;
  535. break;
  536. }
  537. }
  538. }
  539. }
  540. return viewModel;
  541. }
  542. /// <summary>
  543. /// 判断Bota的TabItem是否已显示
  544. /// </summary>
  545. /// <param name="bOTAContentViewModel"></param>
  546. /// <param name="bOTAContent"></param>
  547. /// <param name="tabItemText"></param>
  548. /// <returns></returns>
  549. private bool IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, string tabItemText)
  550. {
  551. bool isTabItem = false;
  552. bOTAContentViewModel = null;
  553. bOTAContent = null;
  554. if (region.Regions.ContainsRegionWithName(viewContentViewModel.BOTARegionName))
  555. {
  556. var views = region.Regions[viewContentViewModel.BOTARegionName].Views;
  557. var model = views.FirstOrDefault(q => q is BOTAContent);
  558. if (model is BOTAContent bOTAContent1)
  559. {
  560. bOTAContent = bOTAContent1;
  561. bOTAContentViewModel = bOTAContent.DataContext as BOTAContentViewModel;
  562. if (bOTAContentViewModel.CurrentBar == tabItemText)
  563. {
  564. isTabItem = true;
  565. }
  566. }
  567. //foreach (var item in views)
  568. //{
  569. // if (item is BOTAContent bOTAContent1)
  570. // {
  571. // bOTAContent = bOTAContent1;
  572. // bOTAContentViewModel = bOTAContent.DataContext as BOTAContentViewModel;
  573. // if (bOTAContentViewModel.CurrentBar == tabItemText)
  574. // {
  575. // isTabItem = true;
  576. // break;
  577. // }
  578. // }
  579. //}
  580. }
  581. return isTabItem;
  582. }
  583. private void PDFViewer_AnnotActiveHandler(object sender, AnnotAttribEvent e)
  584. {
  585. if (e != null)
  586. {
  587. var annot = e.AnnotItemsList[0];
  588. if (annot != null)
  589. {
  590. if (e.AnnotItemsList.Count == 1 && e.IsAnnotCreateReset == false)
  591. {
  592. switch (annot.EventType)
  593. {
  594. case AnnotArgsType.AnnotHighlight:
  595. e.IsAnnotCreateReset = false;
  596. GetHighLight(annot as TextHighlightAnnotArgs);
  597. break;
  598. case AnnotArgsType.AnnotUnderline:
  599. GetUnderLine(annot as TextUnderlineAnnotArgs);
  600. break;
  601. case AnnotArgsType.AnnotStrikeout:
  602. GetStrikeout(annot as TextStrikeoutAnnotArgs);
  603. break;
  604. case AnnotArgsType.AnnotSquiggly:
  605. GetSquiggly(annot as TextSquigglyAnnotArgs);
  606. break;
  607. case AnnotArgsType.AnnotFreehand:
  608. GetFreehand(annot as FreehandAnnotArgs);
  609. break;
  610. case AnnotArgsType.AnnotFreeText:
  611. GetFreetext(annot as FreeTextAnnotArgs);
  612. break;
  613. case AnnotArgsType.AnnotSquare:
  614. GetRect(annot as SquareAnnotArgs);
  615. break;
  616. case AnnotArgsType.AnnotCircle:
  617. GetCircle(annot as CircleAnnotArgs);
  618. break;
  619. case AnnotArgsType.AnnotLine:
  620. bool isLine = true;
  621. if (e.Attribs.ContainsKey(AnnotAttrib.LineStart))
  622. {
  623. if ((C_LINE_TYPE)e.Attribs[AnnotAttrib.LineStart] != C_LINE_TYPE.LINETYPE_UNKNOWN && (C_LINE_TYPE)e.Attribs[AnnotAttrib.LineStart] != C_LINE_TYPE.LINETYPE_NONE)
  624. {
  625. isLine = false;
  626. }
  627. }
  628. if (e.Attribs.ContainsKey(AnnotAttrib.LineEnd))
  629. {
  630. if ((C_LINE_TYPE)e.Attribs[AnnotAttrib.LineEnd] != C_LINE_TYPE.LINETYPE_UNKNOWN && (C_LINE_TYPE)e.Attribs[AnnotAttrib.LineEnd] != C_LINE_TYPE.LINETYPE_NONE)
  631. {
  632. isLine = false;
  633. }
  634. }
  635. if (isLine)
  636. GetArrowLine("Line", annot as LineAnnotArgs);
  637. else
  638. GetArrowLine("Arrow", annot as LineAnnotArgs);
  639. break;
  640. case AnnotArgsType.AnnotLink:
  641. viewContentViewModel.IsCreateLink = false;
  642. GetLink(annot as LinkAnnotArgs, e);
  643. break;
  644. case AnnotArgsType.AnnotSticky:
  645. GetStickyNote(annot as StickyAnnotArgs);
  646. break;
  647. }
  648. ShowPropertyPanel();
  649. }
  650. else if (e.AnnotItemsList.Count == 1 && e.IsAnnotCreateReset == true)
  651. {
  652. switch (annot.EventType)
  653. {
  654. case AnnotArgsType.AnnotLink:
  655. //viewContentViewModel.IsCreateLink = false;
  656. GetLink(annot as LinkAnnotArgs, e);
  657. break;
  658. //case AnnotArgsType.AnnotStamp://图章
  659. // GetStamp();
  660. // break;
  661. //case AnnotArgsType.AnnotStamp://签名
  662. // annotArgs = GetSignature();
  663. // isTemplateAnnot = true;
  664. // break;
  665. }
  666. if (ToolExpandDict.ContainsValue(e.AnnotItemsList[0].EventType))
  667. {
  668. foreach (var item in ToolExpandDict)
  669. {
  670. if (item.Value == e.AnnotItemsList[0].EventType)
  671. {
  672. FindAnnotTypeKey(item.Key, ref annot);
  673. break;
  674. }
  675. }
  676. }
  677. ShowPropertyPanel();
  678. }
  679. }
  680. }
  681. else
  682. {
  683. // PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
  684. // viewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null);
  685. }
  686. }
  687. private void PDFViewer_AnnotCommandHandler(object sender, AnnotCommandArgs e)
  688. {
  689. if (e.AnnotEventArgsList == null || (PDFViewer != null && PDFViewer.MouseMode == MouseModes.FormEditTool))
  690. return;
  691. // var annotlist = e.AnnotEventArgsList;
  692. switch (e.CommandType)
  693. {
  694. case CommandType.Context:
  695. if (e.AnnotEventArgsList.Count > 0)
  696. {
  697. if (App.mainWindowViewModel.SelectedItem.IsInReadctonMode && e.AnnotEventArgsList[0].EventType == AnnotArgsType.AnnotRedaction)
  698. {
  699. //绑定标记密文处右键菜单
  700. events.GetEvent<RedactionCommandEvent>().Publish(new RedactionCommandEventArgs() { UniCode = App.mainWindowViewModel.SelectedItem.Unicode, Sender = sender, args = e });
  701. }
  702. else
  703. {
  704. e.PopupMenu = SelectAnnotContextMenu(sender);
  705. }
  706. if (e.PopupMenu != null)
  707. {
  708. e.Handle = true;
  709. }
  710. }
  711. else
  712. {
  713. if (e.PressOnSelectedText)
  714. {
  715. e.PopupMenu = NoneSelectAnnotContextMenu(sender, e);
  716. if (e.PopupMenu != null)
  717. {
  718. e.Handle = true;
  719. }
  720. }
  721. else
  722. {
  723. e.PopupMenu = ViewerContextMenu();
  724. if (e.PopupMenu != null)
  725. {
  726. e.Handle = true;
  727. }
  728. }
  729. }
  730. break;
  731. }
  732. }
  733. private ContextMenu ViewerContextMenu()
  734. {
  735. ContextMenu contextMenu = App.Current.FindResource("ViewerContextMenu") as ContextMenu;
  736. //contextMenu.Loaded += ContextMenu_Loaded;
  737. ContextMenu_Loaded(contextMenu, null);
  738. return contextMenu;
  739. }
  740. private bool isHiddenAnnot = true;
  741. private bool isAddBookMark = true;
  742. //private BookmarkContentViewModel bookmarkContentViewModel = null;
  743. //private BookmarkContent bookmark = null;
  744. //private BOTAContent bOTAContent = null;
  745. private void ContextMenu_Loaded(object sender, RoutedEventArgs e)
  746. {
  747. ContextMenu contextMenu = sender as ContextMenu;
  748. if (contextMenu.Items.Count > 0)
  749. {
  750. int index = PDFViewer.CurrentIndex;
  751. //检测是否已存在相同数据
  752. CPDFBookmark list = PDFViewer.Document.GetBookmarkList().FirstOrDefault(q => q.PageIndex == index);
  753. if (list != null)
  754. {
  755. isAddBookMark = false;
  756. }
  757. else
  758. {
  759. isAddBookMark = true;
  760. }
  761. foreach (var item in contextMenu.Items)
  762. {
  763. if (item is MenuItem menuItem1)
  764. {
  765. //if (menuItem1.Tag.ToString() == "DisplayAnnot" || menuItem1.Tag.ToString() == "HiddenAnnot")
  766. //{
  767. // SetMenuItemVisibility(menuItem1, "DisplayAnnot", "HiddenAnnot", isHiddenAnnot);
  768. //}
  769. switch (menuItem1.Tag.ToString())
  770. {
  771. case "Copy":
  772. //粘贴
  773. if (!ApplicationCommands.Paste.CanExecute(null, (UIElement)sender))
  774. {
  775. menuItem1.IsEnabled = false;
  776. menuItem1.Opacity = 0.5;
  777. }
  778. else
  779. {
  780. menuItem1.IsEnabled = true;
  781. menuItem1.Opacity = 1;
  782. }
  783. menuItem1.CommandTarget = (UIElement)sender;
  784. menuItem1.Command = ApplicationCommands.Copy;
  785. break;
  786. case "AddAnnotation":
  787. if (menuItem1.Items.Count > 0)
  788. {
  789. SetAddAnnotation(menuItem1.Items);
  790. }
  791. break;
  792. case "HiddenAnnot":
  793. menuItem1.Click -= HiddenAnnot_Click;
  794. menuItem1.Click += HiddenAnnot_Click;
  795. SetMenuItemVisibility(menuItem1, "DisplayAnnot", "HiddenAnnot", isHiddenAnnot);
  796. break;
  797. case "DisplayAnnot":
  798. menuItem1.Click -= DisplayAnnot_Click;
  799. menuItem1.Click += DisplayAnnot_Click;
  800. SetMenuItemVisibility(menuItem1, "DisplayAnnot", "HiddenAnnot", isHiddenAnnot);
  801. break;
  802. case "AddBookMark":
  803. //if (isAddBookMark)
  804. //{
  805. // menuItem1.Visibility = Visibility.Visible;
  806. //}
  807. menuItem1.Click -= AddBookMark_Click;
  808. menuItem1.Click += AddBookMark_Click;
  809. SetMenuItemVisibility(menuItem1, "DelBookMark", "AddBookMark", isAddBookMark);
  810. break;
  811. case "DelBookMark":
  812. //if (isAddBookMark == false)
  813. //{
  814. // menuItem1.Visibility = Visibility.Visible;
  815. //}
  816. menuItem1.Click -= DelBookMark_Click;
  817. menuItem1.Click += DelBookMark_Click;
  818. SetMenuItemVisibility(menuItem1, "DelBookMark", "AddBookMark", isAddBookMark);
  819. break;
  820. case "ToolMode":
  821. if (menuItem1.Items.Count > 0)
  822. {
  823. SetToolMode(menuItem1.Items);
  824. }
  825. break;
  826. case "ReadModel":
  827. SetMenuItemVisibility(menuItem1, "ReadModel", "UnReadModel", App.IsBookMode);
  828. menuItem1.Click -= ReadModel_Click;
  829. menuItem1.Click += ReadModel_Click;
  830. break;
  831. case "UnReadModel":
  832. SetMenuItemVisibility(menuItem1, "ReadModel", "UnReadModel", App.IsBookMode);
  833. menuItem1.Click -= UnReadModel_Click;
  834. menuItem1.Click += UnReadModel_Click;
  835. break;
  836. case "ViewZoom":
  837. if (menuItem1.Items.Count > 0)
  838. {
  839. ViewZoom(menuItem1.Items);
  840. }
  841. break;
  842. case "PageDisplay":
  843. if (menuItem1.Items.Count > 0)
  844. {
  845. PageDisplay(menuItem1.Items);
  846. }
  847. break;
  848. case "Select":
  849. menuItem1.Click -= Select_Click;
  850. menuItem1.Click += Select_Click;
  851. break;
  852. case "Print":
  853. menuItem1.Command = viewContentViewModel.PrintCommand;
  854. break;
  855. }
  856. }
  857. }
  858. }
  859. }
  860. private void SetMenuItemVisibility(MenuItem menuItem1, string v2, string v3, bool flag)
  861. {
  862. if (menuItem1.Tag.ToString() == v2 && flag)
  863. {
  864. menuItem1.Visibility = Visibility.Collapsed;
  865. }
  866. if (menuItem1.Tag.ToString() == v2 && flag == false)
  867. {
  868. menuItem1.Visibility = Visibility.Visible;
  869. }
  870. if (menuItem1.Tag.ToString() == v3 && flag == false)
  871. {
  872. menuItem1.Visibility = Visibility.Collapsed;
  873. }
  874. if (menuItem1.Tag.ToString() == v3 && flag)
  875. {
  876. menuItem1.Visibility = Visibility.Visible;
  877. }
  878. }
  879. private void Select_Click(object sender, RoutedEventArgs e)
  880. {
  881. if (viewContentViewModel.OpenBOTA == false)
  882. {
  883. viewContentViewModel.OpenBOTA = true;
  884. }
  885. bool isBook = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemSearch");
  886. if (isBook == false)
  887. {
  888. bOTAContent.TabItemSearch.IsSelected = true;
  889. }
  890. }
  891. private void PageDisplay(ItemCollection items)
  892. {
  893. foreach (var item in items)
  894. {
  895. if (item is MenuItem menuItem)
  896. {
  897. menuItem.Click -= PageDisplay_Click;
  898. menuItem.Click += PageDisplay_Click;
  899. }
  900. }
  901. }
  902. private void PageDisplay_Click(object sender, RoutedEventArgs e)
  903. {
  904. if (sender is MenuItem menuItem)
  905. {
  906. switch (menuItem.Tag.ToString())
  907. {
  908. case "SingleView":
  909. PDFViewer.ChangeViewMode(ViewMode.Single);
  910. break;
  911. case "SingleContinueView":
  912. PDFViewer.ChangeViewMode(ViewMode.SingleContinuous);
  913. break;
  914. case "DoubleView":
  915. PDFViewer.ChangeViewMode(ViewMode.Double);
  916. break;
  917. case "DoubleContinueView":
  918. PDFViewer.ChangeViewMode(ViewMode.DoubleContinuous);
  919. break;
  920. case "BookMode":
  921. PDFViewer.ChangeViewMode(ViewMode.Book);
  922. break;
  923. }
  924. }
  925. }
  926. private void ViewZoom(ItemCollection items)
  927. {
  928. foreach (var item in items)
  929. {
  930. if (item is MenuItem menuItem)
  931. {
  932. menuItem.Click -= PageDisplay_Click;
  933. menuItem.Click += ViewZoom_Click;
  934. }
  935. }
  936. }
  937. private void ViewZoom_Click(object sender, RoutedEventArgs e)
  938. {
  939. if (sender is MenuItem menuItem)
  940. {
  941. switch (menuItem.Tag.ToString())
  942. {
  943. case "FitWidth":
  944. PDFViewer.ChangeFitMode(FitMode.FitWidth);
  945. break;
  946. case "FitHeight":
  947. PDFViewer.ChangeFitMode(FitMode.FitHeight);
  948. break;
  949. case "FitSize":
  950. PDFViewer.ChangeFitMode(FitMode.FitSize);
  951. break;
  952. case "enlarge":
  953. double newZoom = viewContentViewModel.CheckZoomLevel((PDFViewer.ZoomFactor + 0.01), true);
  954. PDFViewer.Zoom(newZoom);
  955. break;
  956. case "narrow":
  957. newZoom = viewContentViewModel.CheckZoomLevel((PDFViewer.ZoomFactor + -0.01), false);
  958. PDFViewer.Zoom(newZoom);
  959. break;
  960. }
  961. }
  962. }
  963. private void UnReadModel_Click(object sender, RoutedEventArgs e)
  964. {
  965. viewContentViewModel.UnReadModel();
  966. }
  967. private void ReadModel_Click(object sender, RoutedEventArgs e)
  968. {
  969. viewContentViewModel.RbtnReadMode();
  970. }
  971. private void SetToolMode(ItemCollection items)
  972. {
  973. foreach (var item in items)
  974. {
  975. if (item is MenuItem menuItem)
  976. {
  977. menuItem.Click -= PageDisplay_Click;
  978. menuItem.Click += ToolMode_Click;
  979. }
  980. }
  981. }
  982. private void ToolMode_Click(object sender, RoutedEventArgs e)
  983. {
  984. if (sender is MenuItem menuItem)
  985. {
  986. switch (menuItem.Tag.ToString())
  987. {
  988. case "default":
  989. PDFViewer.SetMouseMode(MouseModes.None);
  990. //viewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null);
  991. BtnHandIsChecked = true;
  992. ShowPropertyPanel(false);
  993. break;
  994. case "roll":
  995. PDFViewer.SetMouseMode(MouseModes.PanTool);
  996. //viewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null);
  997. BtnHandIsChecked = true;
  998. ShowPropertyPanel(false);
  999. break;
  1000. case "content":
  1001. AnnotHandlerEventArgs annotHandler = GetSnapshotEdit();
  1002. BtnSelecttoolIsChecked = true;
  1003. if (annotHandler != null)
  1004. {
  1005. annotHandler.Author = Settings.Default.AppProperties.Description.Author;
  1006. PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
  1007. PDFViewer.SetToolParam(annotHandler);
  1008. ShowPropertyPanel(false);
  1009. }
  1010. break;
  1011. default:
  1012. break;
  1013. }
  1014. }
  1015. }
  1016. private void BookMark(MenuItem addBookMark, MenuItem delBookMark)
  1017. {
  1018. int index = PDFViewer.CurrentIndex;
  1019. //检测是否已存在相同数据
  1020. CPDFBookmark list = PDFViewer.Document.GetBookmarkList().FirstOrDefault(q => q.PageIndex == index);
  1021. if (list != null)
  1022. {
  1023. isAddBookMark = false;
  1024. }
  1025. else
  1026. {
  1027. isAddBookMark = true;
  1028. }
  1029. if (isAddBookMark)
  1030. {
  1031. addBookMark.Visibility = Visibility.Visible;
  1032. delBookMark.Visibility = Visibility.Collapsed;
  1033. addBookMark.Click += AddBookMark_Click;
  1034. }
  1035. else
  1036. {
  1037. delBookMark.Visibility = Visibility.Visible;
  1038. addBookMark.Visibility = Visibility.Collapsed;
  1039. delBookMark.Click += DelBookMark_Click;
  1040. }
  1041. }
  1042. private void DelBookMark_Click(object sender, RoutedEventArgs e)
  1043. {
  1044. if (viewContentViewModel.OpenBOTA == false)
  1045. {
  1046. viewContentViewModel.OpenBOTA = true;
  1047. }
  1048. bool isBook = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemBookMark");
  1049. if (isBook == false)
  1050. {
  1051. bOTAContent.TabItemBookMark.IsSelected = true;
  1052. }
  1053. BookmarkContentViewModel bookmarkContentViewModel = GetBookmarkContentViewModel(bOTAContentViewModel, out BookmarkContent bookmark);
  1054. int index = PDFViewer.CurrentIndex;
  1055. //检测是否已存在相同数据
  1056. CPDFBookmark list = PDFViewer.Document.GetBookmarkList().FirstOrDefault(q => q.PageIndex == index);
  1057. if (bookmarkContentViewModel != null && bookmark != null && bOTAContent != null && list != null)
  1058. {
  1059. bookmarkContentViewModel.DeleteCommand.Execute(list);
  1060. isAddBookMark = bookmarkContentViewModel.isAddBookMark;
  1061. }
  1062. // bool isBook = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemBookMark");
  1063. //if (isBook == false || viewContentViewModel.OpenBOTA == false)
  1064. //{
  1065. // viewContentViewModel.OpenBOTA = true;
  1066. // bOTAContent.TabItemBookMark.IsSelected = true;
  1067. //}
  1068. }
  1069. private void AddBookMark_Click(object sender, RoutedEventArgs e)
  1070. {
  1071. if (viewContentViewModel.OpenBOTA == false)
  1072. {
  1073. viewContentViewModel.OpenBOTA = true;
  1074. }
  1075. bool isBook = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemBookMark");
  1076. if (isBook == false)
  1077. {
  1078. bOTAContent.TabItemBookMark.IsSelected = true;
  1079. }
  1080. BookmarkContentViewModel bookmarkContentViewModel = GetBookmarkContentViewModel(bOTAContentViewModel, out BookmarkContent bookmark);
  1081. if (bookmarkContentViewModel != null && bookmark != null && bOTAContent != null)
  1082. {
  1083. bookmarkContentViewModel.AddBookmarkCommand.Execute(bookmark.BookMarkListView);
  1084. isAddBookMark = bookmarkContentViewModel.isAddBookMark;
  1085. return;
  1086. }
  1087. }
  1088. private BookmarkContentViewModel GetBookmarkContentViewModel(BOTAContentViewModel bOTAContentViewModel, out BookmarkContent bookmark)
  1089. {
  1090. BookmarkContentViewModel viewModel = null;
  1091. bookmark = null;
  1092. if (bOTAContentViewModel != null)
  1093. {
  1094. if (region.Regions.ContainsRegionWithName(bOTAContentViewModel.BOTAContentRegionName))
  1095. {
  1096. var views = region.Regions[bOTAContentViewModel.BOTAContentRegionName].Views;
  1097. foreach (var item in views)
  1098. {
  1099. if (item is BookmarkContent bookmark1)
  1100. {
  1101. bookmark = bookmark1;
  1102. viewModel = bookmark1.DataContext as BookmarkContentViewModel;
  1103. break;
  1104. }
  1105. }
  1106. }
  1107. }
  1108. return viewModel;
  1109. }
  1110. private void DisplayAnnot_Click(object sender, RoutedEventArgs e)
  1111. {
  1112. PDFViewer.SetDrawAnnot(true);
  1113. isHiddenAnnot = true;
  1114. }
  1115. private void HiddenAnnot_Click(object sender, RoutedEventArgs e)
  1116. {
  1117. PDFViewer.SetDrawAnnot(false);
  1118. isHiddenAnnot = false;
  1119. }
  1120. private void SetAddAnnotation(ItemCollection items)
  1121. {
  1122. foreach (var item in items)
  1123. {
  1124. if (item is MenuItem menuItem)
  1125. {
  1126. menuItem.CommandParameter = item;
  1127. menuItem.Command = SetAddAnnotationCommand;
  1128. }
  1129. }
  1130. }
  1131. /// <summary>
  1132. /// 右键菜单-添加注释
  1133. /// </summary>
  1134. /// <param name="sender"></param>
  1135. private void AddAnnotation_Click(object sender)
  1136. {
  1137. if (sender is MenuItem menuItem)
  1138. {
  1139. AnnotHandlerEventArgs annotHandler = null;
  1140. string str = menuItem.Tag.ToString();
  1141. if (str == AddAnnotType.AnnotFreehand.ToString())
  1142. {
  1143. annotHandler = GetFreehand();
  1144. }
  1145. if (str == AddAnnotType.AnnotFreeText.ToString())
  1146. {
  1147. annotHandler = GetFreetext();
  1148. }
  1149. if (str == AddAnnotType.AnnotSticky.ToString())
  1150. {
  1151. annotHandler = GetStickyNote();
  1152. }
  1153. if (str == AddAnnotType.AnnotSquare.ToString())
  1154. {
  1155. annotHandler = GetRect();
  1156. }
  1157. if (str == AddAnnotType.AnnotCircle.ToString())
  1158. {
  1159. annotHandler = GetCircle();
  1160. }
  1161. if (str == AddAnnotType.AnnotArrow.ToString())
  1162. {
  1163. annotHandler = GetArrowLine("Arrow");
  1164. }
  1165. if (str == AddAnnotType.AnnotLine.ToString())
  1166. {
  1167. annotHandler = GetArrowLine("Line");
  1168. }
  1169. if (str == AddAnnotType.AnnotLink.ToString())
  1170. {
  1171. annotHandler = GetLink();
  1172. }
  1173. if (str == AddAnnotType.AnnotStamp.ToString())
  1174. {
  1175. annotHandler = GetStamp();
  1176. }
  1177. if (str == AddAnnotType.AnnotAutograph.ToString())
  1178. {
  1179. annotHandler = GetSignature();
  1180. }
  1181. if (annotHandler != null)
  1182. {
  1183. annotHandler.Author = Settings.Default.AppProperties.Description.Author;
  1184. PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
  1185. PDFViewer.SetToolParam(annotHandler);
  1186. ShowPropertyPanel(true);
  1187. }
  1188. }
  1189. }
  1190. private ContextMenu SelectAnnotContextMenu(object sender)
  1191. {
  1192. var popMenu = App.Current.FindResource("SelectAnnotContextMenu") as ContextMenu;
  1193. if (popMenu != null && popMenu.Items.Count == 4)
  1194. {
  1195. //剪切
  1196. MenuItem menuItem = popMenu.Items[0] as MenuItem;
  1197. menuItem.CommandTarget = (UIElement)sender;
  1198. menuItem.Command = ApplicationCommands.Cut;
  1199. //复制
  1200. menuItem = popMenu.Items[1] as MenuItem;
  1201. menuItem.CommandTarget = (UIElement)sender;
  1202. menuItem.Command = ApplicationCommands.Copy;
  1203. //删除
  1204. menuItem = popMenu.Items[2] as MenuItem;
  1205. menuItem.CommandTarget = (UIElement)sender;
  1206. menuItem.Command = ApplicationCommands.Delete;
  1207. //笔记
  1208. //menuItem = popMenu.Items[2] as MenuItem;
  1209. //menuItem.CommandTarget = (UIElement)sender;
  1210. //menuItem.Command = ApplicationCommands.no;
  1211. }
  1212. return popMenu;
  1213. }
  1214. private ContextMenu NoneSelectAnnotContextMenu(object sender, AnnotCommandArgs annotCommand)
  1215. {
  1216. ContextMenu popMenu = new ContextMenu();
  1217. popMenu.FontSize = 14;
  1218. MenuItem menuItem = new MenuItem();
  1219. menuItem = new MenuItem();
  1220. menuItem.CommandTarget = (UIElement)sender;
  1221. menuItem.Command = ApplicationCommands.Copy;
  1222. popMenu.Items.Add(menuItem);
  1223. menuItem = new MenuItem();
  1224. menuItem.CommandTarget = (UIElement)sender;
  1225. menuItem.Command = ApplicationCommands.Paste;
  1226. popMenu.Items.Add(menuItem);
  1227. menuItem = new MenuItem();
  1228. menuItem.CommandTarget = (UIElement)sender;
  1229. menuItem.Header = "创建链接";
  1230. menuItem.CommandParameter = new object[] { this, annotCommand };
  1231. menuItem.Command = viewContentViewModel.CreateLinkCommand;
  1232. menuItem.Click += MenuItem_Click;
  1233. popMenu.Items.Add(menuItem);
  1234. return popMenu;
  1235. }
  1236. private void MenuItem_Click(object sender, RoutedEventArgs e)
  1237. {
  1238. var args = PDFViewer.ToolManager.CurrentAnnotArgs;
  1239. BtnLinkIsChecked = true;
  1240. }
  1241. /// <summary>
  1242. /// 展开显示属性面板
  1243. /// </summary>
  1244. private void ShowPropertyPanel(bool show = true)
  1245. {
  1246. viewContentViewModel.IsPropertyOpen = show;
  1247. }
  1248. }
  1249. }