MeasureControl.xaml.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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.UpdateArgsList = e.AnnotEventArgsList;
  76. SettingPanel.BindMeasureSetting();
  77. SetInfoPanelVisble(false, true);
  78. };
  79. MenuItem propertyItem = new MenuItem();
  80. propertyItem.Header = "Property Setting";
  81. propertyItem.Click += (item, param) =>
  82. {
  83. ExpandEvent?.Invoke(this, new EventArgs());
  84. };
  85. e.PopupMenu.Items.Add(menuItem);
  86. e.PopupMenu.Items.Add(propertyItem);
  87. }
  88. }
  89. break;
  90. case CommandType.Delete:
  91. e.DoCommand();
  92. break;
  93. default:
  94. break;
  95. }
  96. }
  97. private void PDFView_AnnotActiveHandler(object sender, AnnotAttribEvent e)
  98. {
  99. if (e == null || e.IsAnnotCreateReset)
  100. {
  101. return;
  102. }
  103. else
  104. {
  105. switch (e.GetAnnotTypes())
  106. {
  107. case AnnotArgsType.LineMeasure:
  108. LineMeasureArgs LineArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.LineMeasure).First() as LineMeasureArgs;
  109. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  110. measurePropertyControl.SetPropertyForMeasureCreate(LineArgs, e);
  111. break;
  112. case AnnotArgsType.PolygonMeasure:
  113. PolygonMeasureArgs polygonArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.PolygonMeasure).First() as PolygonMeasureArgs;
  114. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  115. measurePropertyControl.SetPropertyForMeasureCreate(polygonArgs, e);
  116. break;
  117. case AnnotArgsType.PolyLineMeasure:
  118. PolyLineMeasureArgs polyLineArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.PolyLineMeasure).First() as PolyLineMeasureArgs;
  119. panelState.RightPanel = PanelState.RightPanelState.PropertyPanel;
  120. measurePropertyControl.SetPropertyForMeasureCreate(polyLineArgs, e);
  121. break;
  122. }
  123. }
  124. }
  125. public void SetSettingsControl(CPDFDisplaySettingsControl cPDFDisplaySettingsControl)
  126. {
  127. displaySettingsControl = cPDFDisplaySettingsControl;
  128. }
  129. public void ClearAllToolState()
  130. {
  131. PDFMeasureTool.ClearAllToolState();
  132. }
  133. public void ClearViewerControl()
  134. {
  135. PDFGrid.Child = null;
  136. BotaContainer.Child = null;
  137. PropertyContainer.Child = null;
  138. displaySettingsControl = null;
  139. }
  140. private void PanelState_PropertyChanged(object sender, PropertyChangedEventArgs e)
  141. {
  142. if (e.PropertyName == nameof(PanelState.IsLeftPanelExpand))
  143. {
  144. ExpandLeftPanel(panelState.IsLeftPanelExpand);
  145. }
  146. else if (e.PropertyName == nameof(PanelState.RightPanel))
  147. {
  148. if (panelState.RightPanel == PanelState.RightPanelState.PropertyPanel)
  149. {
  150. ExpandRightPropertyPanel(measurePropertyControl, Visibility.Visible);
  151. }
  152. else if (panelState.RightPanel == PanelState.RightPanelState.ViewSettings)
  153. {
  154. ExpandRightPropertyPanel(displaySettingsControl, Visibility.Visible);
  155. }
  156. else
  157. {
  158. ExpandRightPropertyPanel(null, Visibility.Collapsed);
  159. }
  160. }
  161. }
  162. #endregion
  163. #region Expand and collapse Panel
  164. public void ExpandRightPropertyPanel(Visibility visible)
  165. {
  166. ExpandRightPropertyPanel(measurePropertyControl, visible);
  167. }
  168. public void ExpandNullRightPropertyPanel(Visibility visible)
  169. {
  170. ExpandRightPropertyPanel(null, visible);
  171. }
  172. public void ExpandViewSettings(Visibility visible)
  173. {
  174. SetViewSettings(displaySettingsControl, visible);
  175. }
  176. private void ExpandRightPropertyPanel(UIElement propertytPanel, Visibility visible)
  177. {
  178. PropertyContainer.Width = 260;
  179. PropertyContainer.Child = propertytPanel;
  180. PropertyContainer.Visibility = visible;
  181. }
  182. private void SetViewSettings(CPDFDisplaySettingsControl displaySettingsControl, Visibility visibility)
  183. {
  184. PropertyContainer.Child = displaySettingsControl;
  185. PropertyContainer.Visibility = visibility;
  186. }
  187. public void ExpandLeftPanel(bool isExpand)
  188. {
  189. BotaContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  190. Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
  191. if (isExpand)
  192. {
  193. BodyGrid.ColumnDefinitions[0].Width = new GridLength(320);
  194. BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
  195. }
  196. else
  197. {
  198. BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
  199. BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
  200. }
  201. }
  202. #endregion
  203. private void UserControl_Loaded(object sender, RoutedEventArgs e)
  204. {
  205. }
  206. private void MeasureInfoPanel_SettingClick(object sender, EventArgs e)
  207. {
  208. SettingPanel.ReturnToInfoPanel = true;
  209. SetInfoPanelVisble(false, true);
  210. SettingPanel.BindMeasureSetting();
  211. }
  212. private void SettingPanel_CancelEvent(object sender, EventArgs e)
  213. {
  214. SetInfoPanelVisble(SettingPanel.ReturnToInfoPanel, false);
  215. }
  216. private void SettingPanel_DoneEvent(object sender, EventArgs e)
  217. {
  218. SetInfoPanelVisble(SettingPanel.ReturnToInfoPanel, false);
  219. }
  220. public void SetInfoPanelVisble(bool measureInfo, bool measureSetting)
  221. {
  222. if(measureInfo)
  223. {
  224. InfoPanel.ClearMeasureInfo();
  225. }
  226. InfoPanel.Visibility = measureInfo ? Visibility.Visible : Visibility.Collapsed;
  227. SettingPanel.Visibility = measureSetting ? Visibility.Visible : Visibility.Collapsed;
  228. }
  229. public void SetMeasureInfoType(CPDFMeasureType measureType)
  230. {
  231. InfoPanel?.SetMeasureType(measureType);
  232. }
  233. }
  234. }