using ComPDFKit.Measure; using Compdfkit_Tools.Helper; using Compdfkit_Tools.PDFControl; using ComPDFKitViewer; using ComPDFKitViewer.AnnotEvent; using ComPDFKitViewer.PdfViewer; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Compdfkit_Tools.Measure { /// /// MeasureControl.xaml 的交互逻辑 /// public partial class MeasureControl : UserControl { public MeasurePropertyControl measurePropertyControl = new MeasurePropertyControl(); private CPDFDisplaySettingsControl displaySettingsControl; private PDFViewControl PdfViewControl = new PDFViewControl(); private PanelState panelState = PanelState.GetInstance(); public event EventHandler ExpandEvent; public MeasureControl() { InitializeComponent(); MeasureSetting.MeasureChanged += MeasureSetting_MeasureChanged; } private void MeasureSetting_MeasureChanged(object sender, MeasureEventArgs e) { InfoPanel.SetMeasureInfo(e); } #region Init PDFViewer public void InitWithPDFViewer(PDFViewControl pdfViewControl, CPDFViewer pdfViewer) { PdfViewControl = pdfViewControl; PdfViewControl.PDFView = pdfViewer; PDFMeasureTool.InitWithPDFViewer(pdfViewer, measurePropertyControl, this); FloatPageTool.InitWithPDFViewer(pdfViewer); PDFGrid.Child = PdfViewControl; panelState.PropertyChanged -= PanelState_PropertyChanged; panelState.PropertyChanged += PanelState_PropertyChanged; pdfViewControl.PDFView.AnnotActiveHandler -= PDFView_AnnotActiveHandler; pdfViewControl.PDFView.AnnotActiveHandler += PDFView_AnnotActiveHandler; pdfViewControl.PDFView.AnnotCommandHandler -= PDFView_AnnotCommandHandler; pdfViewControl.PDFView.AnnotCommandHandler += PDFView_AnnotCommandHandler; SetInfoPanelVisble(false, false); } private void PDFView_AnnotCommandHandler(object sender, AnnotCommandArgs e) { switch (e.CommandType) { case CommandType.Context: e.Handle = true; if (e.CommandTarget == TargetType.Annot) { e.Handle = true; e.PopupMenu = new ContextMenu(); if (e.PressOnAnnot) { e.PopupMenu.Items.Add(new MenuItem() { Header = "Delete", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender }); MenuItem menuItem = new MenuItem(); menuItem.Header = "Measure Setting"; menuItem.Click += (item, param) => { SettingPanel.UpdateArgsList = e.AnnotEventArgsList; SettingPanel.BindMeasureSetting(); SetInfoPanelVisble(false, true); }; MenuItem propertyItem = new MenuItem(); propertyItem.Header = "Property Setting"; propertyItem.Click += (item, param) => { ExpandEvent?.Invoke(this, new EventArgs()); }; e.PopupMenu.Items.Add(menuItem); e.PopupMenu.Items.Add(propertyItem); } } break; case CommandType.Delete: e.DoCommand(); break; default: break; } } private void PDFView_AnnotActiveHandler(object sender, AnnotAttribEvent e) { if (e == null || e.IsAnnotCreateReset) { return; } else { switch (e.GetAnnotTypes()) { case AnnotArgsType.LineMeasure: LineMeasureArgs LineArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.LineMeasure).First() as LineMeasureArgs; panelState.RightPanel = PanelState.RightPanelState.PropertyPanel; measurePropertyControl.SetPropertyForMeasureCreate(LineArgs, e); break; case AnnotArgsType.PolygonMeasure: PolygonMeasureArgs polygonArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.PolygonMeasure).First() as PolygonMeasureArgs; panelState.RightPanel = PanelState.RightPanelState.PropertyPanel; measurePropertyControl.SetPropertyForMeasureCreate(polygonArgs, e); break; case AnnotArgsType.PolyLineMeasure: PolyLineMeasureArgs polyLineArgs = e.GetAnnotHandlerEventArgs(AnnotArgsType.PolyLineMeasure).First() as PolyLineMeasureArgs; panelState.RightPanel = PanelState.RightPanelState.PropertyPanel; measurePropertyControl.SetPropertyForMeasureCreate(polyLineArgs, e); break; } } } public void SetSettingsControl(CPDFDisplaySettingsControl cPDFDisplaySettingsControl) { displaySettingsControl = cPDFDisplaySettingsControl; } public void ClearAllToolState() { PDFMeasureTool.ClearAllToolState(); } public void ClearViewerControl() { PDFGrid.Child = null; BotaContainer.Child = null; PropertyContainer.Child = null; displaySettingsControl = null; } private void PanelState_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(PanelState.IsLeftPanelExpand)) { ExpandLeftPanel(panelState.IsLeftPanelExpand); } else if (e.PropertyName == nameof(PanelState.RightPanel)) { if (panelState.RightPanel == PanelState.RightPanelState.PropertyPanel) { ExpandRightPropertyPanel(measurePropertyControl, Visibility.Visible); } else if (panelState.RightPanel == PanelState.RightPanelState.ViewSettings) { ExpandRightPropertyPanel(displaySettingsControl, Visibility.Visible); } else { ExpandRightPropertyPanel(null, Visibility.Collapsed); } } } #endregion #region Expand and collapse Panel public void ExpandRightPropertyPanel(Visibility visible) { ExpandRightPropertyPanel(measurePropertyControl, visible); } public void ExpandNullRightPropertyPanel(Visibility visible) { ExpandRightPropertyPanel(null, visible); } public void ExpandViewSettings(Visibility visible) { SetViewSettings(displaySettingsControl, visible); } private void ExpandRightPropertyPanel(UIElement propertytPanel, Visibility visible) { PropertyContainer.Width = 260; PropertyContainer.Child = propertytPanel; PropertyContainer.Visibility = visible; } private void SetViewSettings(CPDFDisplaySettingsControl displaySettingsControl, Visibility visibility) { PropertyContainer.Child = displaySettingsControl; PropertyContainer.Visibility = visibility; } public void ExpandLeftPanel(bool isExpand) { BotaContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed; Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed; if (isExpand) { BodyGrid.ColumnDefinitions[0].Width = new GridLength(320); BodyGrid.ColumnDefinitions[1].Width = new GridLength(15); } else { BodyGrid.ColumnDefinitions[0].Width = new GridLength(0); BodyGrid.ColumnDefinitions[1].Width = new GridLength(0); } } #endregion private void UserControl_Loaded(object sender, RoutedEventArgs e) { } private void MeasureInfoPanel_SettingClick(object sender, EventArgs e) { SettingPanel.ReturnToInfoPanel = true; SetInfoPanelVisble(false, true); SettingPanel.BindMeasureSetting(); } private void SettingPanel_CancelEvent(object sender, EventArgs e) { SetInfoPanelVisble(SettingPanel.ReturnToInfoPanel, false); } private void SettingPanel_DoneEvent(object sender, EventArgs e) { SetInfoPanelVisble(SettingPanel.ReturnToInfoPanel, false); } public void SetInfoPanelVisble(bool measureInfo, bool measureSetting) { if(measureInfo) { InfoPanel.ClearMeasureInfo(); } InfoPanel.Visibility = measureInfo ? Visibility.Visible : Visibility.Collapsed; SettingPanel.Visibility = measureSetting ? Visibility.Visible : Visibility.Collapsed; } public void SetMeasureInfoType(CPDFMeasureType measureType) { InfoPanel?.SetMeasureType(measureType); } } }