MeasureControl.xaml.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. using ComPDFKit.Measure;
  2. using Compdfkit_Tools.Helper;
  3. using Compdfkit_Tools.PDFControl;
  4. using ComPDFKitViewer;
  5. using ComPDFKitViewer.AnnotEvent;
  6. using ComPDFKitViewer.PdfViewer;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.ComponentModel;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Controls;
  15. using System.Windows.Data;
  16. using System.Windows.Documents;
  17. using System.Windows.Input;
  18. using System.Windows.Media;
  19. using System.Windows.Media.Imaging;
  20. using System.Windows.Navigation;
  21. using System.Windows.Shapes;
  22. namespace Compdfkit_Tools.Measure
  23. {
  24. /// <summary>
  25. /// MeasureControl.xaml 的交互逻辑
  26. /// </summary>
  27. public partial class MeasureControl : UserControl
  28. {
  29. public MeasurePropertyControl measurePropertyControl = new MeasurePropertyControl();
  30. private CPDFDisplaySettingsControl displaySettingsControl;
  31. private PDFViewControl PdfViewControl = new PDFViewControl();
  32. private PanelState panelState = PanelState.GetInstance();
  33. public event EventHandler ExpandEvent;
  34. public MeasureControl()
  35. {
  36. InitializeComponent();
  37. MeasureSetting.MeasureChanged += MeasureSetting_MeasureChanged;
  38. }
  39. private void MeasureSetting_MeasureChanged(object sender, MeasureEventArgs e)
  40. {
  41. InfoPanel.SetMeasureInfo(e);
  42. }
  43. #region Init PDFViewer
  44. public void InitWithPDFViewer(PDFViewControl pdfViewControl, CPDFViewer pdfViewer)
  45. {
  46. PdfViewControl = pdfViewControl;
  47. PdfViewControl.PDFView = pdfViewer;
  48. PDFMeasureTool.InitWithPDFViewer(pdfViewer, measurePropertyControl, this);
  49. FloatPageTool.InitWithPDFViewer(pdfViewer);
  50. PDFGrid.Child = PdfViewControl;
  51. panelState.PropertyChanged -= PanelState_PropertyChanged;
  52. panelState.PropertyChanged += PanelState_PropertyChanged;
  53. pdfViewControl.PDFView.AnnotActiveHandler -= PDFView_AnnotActiveHandler;
  54. pdfViewControl.PDFView.AnnotActiveHandler += PDFView_AnnotActiveHandler;
  55. pdfViewControl.PDFView.AnnotCommandHandler -= PDFView_AnnotCommandHandler;
  56. pdfViewControl.PDFView.AnnotCommandHandler += PDFView_AnnotCommandHandler;
  57. }
  58. private void PDFView_AnnotCommandHandler(object sender, AnnotCommandArgs e)
  59. {
  60. switch (e.CommandType)
  61. {
  62. case CommandType.Context:
  63. e.Handle = true;
  64. if (e.CommandTarget == TargetType.Annot)
  65. {
  66. e.Handle = true;
  67. e.PopupMenu = new ContextMenu();
  68. if (e.PressOnAnnot)
  69. {
  70. e.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
  71. MenuItem menuItem = new MenuItem();
  72. menuItem.Header = "Measure Setting";
  73. menuItem.Click += (item, param) =>
  74. {
  75. SettingPanel.BindMeasureSetting();
  76. SetInfoPanelVisble(false, true);
  77. };
  78. MenuItem propertyItem = new MenuItem();
  79. propertyItem.Header = "Property Setting";
  80. propertyItem.Click += (item, param) =>
  81. {
  82. ExpandEvent?.Invoke(this, new EventArgs());
  83. };
  84. e.PopupMenu.Items.Add(menuItem);
  85. e.PopupMenu.Items.Add(propertyItem);
  86. }
  87. }
  88. break;
  89. case CommandType.Delete:
  90. e.DoCommand();
  91. break;
  92. default:
  93. break;
  94. }
  95. }
  96. private void PDFView_AnnotActiveHandler(object sender, AnnotAttribEvent e)
  97. {
  98. if (e == null || e.IsAnnotCreateReset)
  99. {
  100. return;
  101. }
  102. else
  103. {
  104. switch (e.GetAnnotTypes())
  105. {
  106. case AnnotArgsType.LineMeasure:
  107. LineMeasureArgs LineArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.LineMeasure).First() as LineMeasureArgs;
  108. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  109. measurePropertyControl.SetPropertyForMeasureCreate(LineArgs);
  110. break;
  111. case AnnotArgsType.PolygonMeasure:
  112. PolygonMeasureArgs polygonArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.PolygonMeasure).First() as PolygonMeasureArgs;
  113. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  114. measurePropertyControl.SetPropertyForMeasureCreate(polygonArgs);
  115. break;
  116. case AnnotArgsType.PolyLineMeasure:
  117. PolyLineMeasureArgs polyLineArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.PolyLineMeasure).First() as PolyLineMeasureArgs;
  118. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  119. measurePropertyControl.SetPropertyForMeasureCreate(polyLineArgs);
  120. break;
  121. }
  122. }
  123. }
  124. public void SetSettingsControl(CPDFDisplaySettingsControl cPDFDisplaySettingsControl)
  125. {
  126. displaySettingsControl = cPDFDisplaySettingsControl;
  127. }
  128. public void ClearAllToolState()
  129. {
  130. PDFMeasureTool.ClearAllToolState();
  131. }
  132. public void ClearViewerControl()
  133. {
  134. PDFGrid.Child = null;
  135. BotaContainer.Child = null;
  136. PropertyContainer.Child = null;
  137. displaySettingsControl = null;
  138. }
  139. private void PanelState_PropertyChanged(object sender, PropertyChangedEventArgs e)
  140. {
  141. if (e.PropertyName == nameof(PanelState.IsLeftPanelExpand))
  142. {
  143. ExpandLeftPanel(panelState.IsLeftPanelExpand);
  144. }
  145. else if (e.PropertyName == nameof(PanelState.RightPanel))
  146. {
  147. if (panelState.RightPanel == PanelState.RightPanelState.PropertyPanel)
  148. {
  149. ExpandRightPropertyPanel(measurePropertyControl, Visibility.Visible);
  150. }
  151. else if (panelState.RightPanel == PanelState.RightPanelState.ViewSettings)
  152. {
  153. ExpandRightPropertyPanel(displaySettingsControl, Visibility.Visible);
  154. }
  155. else
  156. {
  157. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  158. }
  159. }
  160. }
  161. #endregion
  162. #region Expand and collapse Panel
  163. public void ExpandRightPropertyPanel(Visibility visible)
  164. {
  165. ExpandRightPropertyPanel(measurePropertyControl, visible);
  166. }
  167. public void ExpandNullRightPropertyPanel(Visibility visible)
  168. {
  169. ExpandRightPropertyPanel(null, visible);
  170. }
  171. public void ExpandViewSettings(Visibility visible)
  172. {
  173. SetViewSettings(displaySettingsControl, visible);
  174. }
  175. private void ExpandRightPropertyPanel(UIElement propertytPanel, Visibility visible)
  176. {
  177. PropertyContainer.Width = 260;
  178. PropertyContainer.Child = propertytPanel;
  179. PropertyContainer.Visibility = visible;
  180. }
  181. private void SetViewSettings(CPDFDisplaySettingsControl displaySettingsControl, Visibility visibility)
  182. {
  183. PropertyContainer.Child = displaySettingsControl;
  184. PropertyContainer.Visibility = visibility;
  185. }
  186. public void ExpandLeftPanel(bool isExpand)
  187. {
  188. BotaContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  189. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  190. if (isExpand)
  191. {
  192. BodyGrid.ColumnDefinitions[0].Width = new GridLength(320);
  193. BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
  194. }
  195. else
  196. {
  197. BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
  198. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  199. }
  200. }
  201. #endregion
  202. private void UserControl_Loaded(object sender, RoutedEventArgs e)
  203. {
  204. }
  205. private void MeasureInfoPanel_SettingClick(object sender, EventArgs e)
  206. {
  207. SettingPanel.ReturnToInfoPanel = true;
  208. SetInfoPanelVisble(false, true);
  209. SettingPanel.BindMeasureSetting();
  210. }
  211. private void SettingPanel_CancelEvent(object sender, EventArgs e)
  212. {
  213. SetInfoPanelVisble(SettingPanel.ReturnToInfoPanel, false);
  214. }
  215. private void SettingPanel_DoneEvent(object sender, EventArgs e)
  216. {
  217. SetInfoPanelVisble(SettingPanel.ReturnToInfoPanel, false);
  218. }
  219. public void SetInfoPanelVisble(bool measureInfo, bool measureSetting)
  220. {
  221. if(measureInfo)
  222. {
  223. InfoPanel.ClearMeasureInfo();
  224. }
  225. InfoPanel.Visibility = measureInfo ? Visibility.Visible : Visibility.Collapsed;
  226. SettingPanel.Visibility = measureSetting ? Visibility.Visible : Visibility.Collapsed;
  227. }
  228. public void SetMeasureInfoType(CPDFMeasureType measureType)
  229. {
  230. InfoPanel?.SetMeasureType(measureType);
  231. }
  232. }
  233. }