Browse Source

【2025】【Markup】测量模式补充

niehaoyu 3 months ago
parent
commit
a44cda2be8

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.h

@@ -102,7 +102,7 @@ typedef NS_ENUM(NSInteger, CToolMode) {
     CFormToolMode,
     CSelfSignMode,
     CRedactToolMode,
-    CMeasureToolMode,
+    CMeasureToolMode,         //测量模式
     CRedactErasureToolMode,
     CEditPDFToolMode,         //编辑模式
 };

+ 5 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -415,6 +415,11 @@ struct KMNMWCFlags {
             } else if subToolMode == .Line {
                 listView.annotationType = .line
                 
+            } else if subToolMode == .Measure {
+                listView.toolMode = .measureToolMode
+                
+                listView.annotationType = .line
+                
             } else if subToolMode == .Stamp {
                 listView.annotationType = .stamp
                 

+ 1 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/KMPDFConfig.swift

@@ -49,6 +49,7 @@ import Cocoa
     case Circle
     case Arrow
     case Line
+    case Measure
     case Stamp
     case Sign
     

+ 12 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Toolbar/toolbar_measure.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "toolbar_measure.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Toolbar/toolbar_measure.imageset/toolbar_measure.pdf


+ 2 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/KMPDFSecToolbarController.swift

@@ -220,6 +220,8 @@ class KMPDFSecToolbarController: NSViewController {
             return .Arrow
         } else if identifier == KMPDFToolbar_line_Identifier {
             return .Line
+        } else if identifier == KMPDFToolbar_measure_Identifier {
+            return .Measure
         } else if identifier == KMPDFToolbar_stamp_Identifier {
             return .Stamp
         } else if identifier == KMPDFToolbar_sign_Identifier {

+ 1 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/Model/KMPDFToolbarConfig.swift

@@ -97,6 +97,7 @@ let KMPDFToolbar_rectangle_Identifier              = "KMPDFToolbar_rectangle_Ide
 let KMPDFToolbar_circle_Identifier                 = "KMPDFToolbar_circle_Identifier"
 let KMPDFToolbar_arrow_Identifier                  = "KMPDFToolbar_arrow_Identifier"
 let KMPDFToolbar_line_Identifier                   = "KMPDFToolbar_line_Identifier"
+let KMPDFToolbar_measure_Identifier                = "KMPDFToolbar_measure_Identifier"
 let KMPDFToolbar_stamp_Identifier                  = "KMPDFToolbar_stamp_Identifier"
 let KMPDFToolbar_sign_Identifier                   = "KMPDFToolbar_sign_Identifier"
 let KMPDFToolbar_eye_Identifier                    = "KMPDFToolbar_eye_Identifier"

+ 49 - 47
PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/Model/KMPDFToolbarManager.swift

@@ -11,15 +11,15 @@ import KMComponentLibrary
 class KMPDFToolbarManager: NSObject {
     
     var pdfViewManager: KMPDFViewManager?
-        
+    
     let dividerProperty = ComponentDividerProperty(type: .vertical, dash: false)
-
+    
     //MARK: -View
     var viewProperty: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, identifier: KMPDFToolbar_ViewDisplay_Identifier)
     
     //MARK: -页面编辑
     var pageProperty: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, identifier: KMPDFToolbar_PageEdit_Identifier)
-   
+    
     var page_pageInfo_Property: ComponentSelectProperties = ComponentSelectProperties(size: .xs, state: .normal, isDisabled: false, isError: false, leftIcon: false, placeholder: KMLocalizedString("Select Page"), errorText: nil, creatable: true, text: "")
     
     var page_page_oddPage_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, text: KMLocalizedString("Odd Pages Only"), identifier: KMPDFToolbar_PageEdit_page_oddPage_Identifier)
@@ -35,7 +35,7 @@ class KMPDFToolbarManager: NSObject {
     var page_Insert_Blank_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, text: KMLocalizedString("Insert Blank File"), identifier: KMPDFToolbar_PageEdit_InsertBlank_Identifier)
     var page_Insert_Clip_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, text: KMLocalizedString("From Clipboard"), identifier: KMPDFToolbar_PageEdit_InsertClip_Identifier)
     var page_Insert_Scanner_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, text: KMLocalizedString("From Scanner"), identifier: KMPDFToolbar_PageEdit_InsertScanner_Identifier)
-
+    
     var page_Extract_Property: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Extract"), icon: NSImage(named: "pageEdit_extract"), keepPressState: false, identifier: KMPDFToolbar_PageEdit_Extract_Identifier)
     var page_Replace_Property: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Replace"), icon: NSImage(named: "pageEdit_replace"), keepPressState: false, identifier: KMPDFToolbar_PageEdit_Replace_Identifier)
     var page_Split_Property: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true,  buttonText: KMLocalizedString("Split"),icon: NSImage(named: "pageEdit_split"), keepPressState: false, identifier: KMPDFToolbar_PageEdit_Split_Identifier)
@@ -46,14 +46,14 @@ class KMPDFToolbarManager: NSObject {
     var page_Delete_Property: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "pageEdit_delete"), keepPressState: false,identifier: KMPDFToolbar_PageEdit_Delete_Identifier)
     var page_Reduce_Property: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "pageEdit_zoomout"), keepPressState: false,identifier: KMPDFToolbar_PageEdit_Reduce_Identifier)
     var page_Increase_Property: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "pageEdit_zoomin"),keepPressState: false, identifier: KMPDFToolbar_PageEdit_Increase_Identifier)
- 
+    
     //MARK: -ToosView
     var toolsProperty: ComponentDropdownToolProperty = ComponentDropdownToolProperty(state: .normal, leftIcon: NSImage(named: "toolbar_Tools_select"), showDropdown: true)
     var tools_selectProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_select"), keyEquivalent: KMLocalizedString("⇧1"), text: KMLocalizedString("Select"), identifier: KMPDFToolbar_View_Select_Identifier)
-     var tools_scrollProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_scroll"), keyEquivalent: KMLocalizedString("⇧2"), text: KMLocalizedString("Scroll"), identifier: KMPDFToolbar_View_Scroll_Identifier)
-     var tools_contentProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_content"), keyEquivalent: KMLocalizedString("⇧3"), text: KMLocalizedString("Content Selection"), identifier: KMPDFToolbar_View_ContentSelection_Identifier)
-     var tools_magnifyProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_magnify"), keyEquivalent: KMLocalizedString("⇧4"), text: KMLocalizedString("Magnify"), identifier: KMPDFToolbar_View_Magnify_Identifier)
-     var tools_areaProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_zoom"), keyEquivalent: KMLocalizedString("⇧5"), text: KMLocalizedString("Area Zoom"), identifier: KMPDFToolbar_View_AreaZoom_Identifier)
+    var tools_scrollProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_scroll"), keyEquivalent: KMLocalizedString("⇧2"), text: KMLocalizedString("Scroll"), identifier: KMPDFToolbar_View_Scroll_Identifier)
+    var tools_contentProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_content"), keyEquivalent: KMLocalizedString("⇧3"), text: KMLocalizedString("Content Selection"), identifier: KMPDFToolbar_View_ContentSelection_Identifier)
+    var tools_magnifyProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_magnify"), keyEquivalent: KMLocalizedString("⇧4"), text: KMLocalizedString("Magnify"), identifier: KMPDFToolbar_View_Magnify_Identifier)
+    var tools_areaProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "toolbar_Tools_zoom"), keyEquivalent: KMLocalizedString("⇧5"), text: KMLocalizedString("Area Zoom"), identifier: KMPDFToolbar_View_AreaZoom_Identifier)
     
     //MARK: -缩放比例
     var selectZoomProperty: ComponentSelectZoomProperty = ComponentSelectZoomProperty(state: .normal, isDisabled: false, text: "100%", leftIcon_nor: NSImage(named: "toolbar_minus"), leftIcon_dis: NSImage(named: "toolbar_minus_dis"), dropdownIcon: NSImage(named: "toolbar_zoom_dropdown"), rightIcon_nor: NSImage(named: "toolbar_plus"), rightIcon_dis: NSImage(named: "toolbar_plus_dis"))
@@ -89,28 +89,29 @@ class KMPDFToolbarManager: NSObject {
     let UnderlineProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: KMPDFToolbarManager.getMarkupUnderlineImage(), identifier: KMPDFToolbar_underline_Identifier)
     let wavelineProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: KMPDFToolbarManager.getMarkupwavylineImage(), identifier: KMPDFToolbar_waveline_Identifier)
     let strikethroughProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: KMPDFToolbarManager.getMarkupStrikethroughImage(), identifier: KMPDFToolbar_strikethrough_Identifier)
-     
+    
     let textProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_text"), identifier: KMPDFToolbar_text_Identifier)
     let noteProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: KMPDFToolbarManager.getMarkupNoteImage(), identifier: KMPDFToolbar_note_Identifier)
-     
+    
     let penProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: KMPDFToolbarManager.getMarkupPenImage(), identifier: KMPDFToolbar_pen_Identifier)
     let eraserProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_erase"), identifier: KMPDFToolbar_eraser_Identifier)
-     
+    
     let rectangleProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_rectangle"), identifier: KMPDFToolbar_rectangle_Identifier)
     let circleProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_oval"), identifier: KMPDFToolbar_circle_Identifier)
     let arrowProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_arrow"), identifier: KMPDFToolbar_arrow_Identifier)
     let lineProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_line"), identifier: KMPDFToolbar_line_Identifier)
-     
+    let measureProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "toolbar_measure"), identifier: KMPDFToolbar_measure_Identifier)
+    
     let stampProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_stamp"), identifier: KMPDFToolbar_stamp_Identifier)
     let signProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_sign"), identifier: KMPDFToolbar_sign_Identifier)
-     
+    
     let eyeProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "markup_show"), identifier: KMPDFToolbar_eye_Identifier)
     
     //MARK: -Edit
     let edit_text_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Text"), icon: NSImage(named: "markup_text"), identifier: KMPDFToolbar_edit_text_Identifier)
     let edit_image_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Image"), icon: NSImage(named: "edit_image"), identifier: KMPDFToolbar_edit_image_Identifier)
     let edit_link_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Link"), icon: NSImage(named: "edit_link"), identifier: KMPDFToolbar_edit_link_Identifier)
-     
+    
     let edit_crop_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Crop"), icon: NSImage(named: "edit_crop"), identifier: KMPDFToolbar_edit_crop_Identifier)
     
     let edit_watermark_Property = ComponentDropdownToolProperty(state: .normal, text: KMLocalizedString("Watermark"), leftIcon: NSImage(named: "edit_watermark"), showDropdown: true, arrowIcon: NSImage(named: "toolbar_arrowDown_fill"))
@@ -118,7 +119,7 @@ class KMPDFToolbarManager: NSObject {
     var edit_watermark_remove_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(text: KMLocalizedString("Remove Watermark"), identifier: KMPDFToolbar_edit_removeWatermark_Identifier)
     var edit_watermark_batchAdd_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(text: KMLocalizedString("Batch Add Watermarks"), identifier: KMPDFToolbar_edit_batch_AddWatermark_Identifier)
     var edit_watermark_batchRemove_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(text: KMLocalizedString("Batch Remove Watermarks"), identifier: KMPDFToolbar_edit_batchRemoveWatermark_Identifier)
-     
+    
     let edit_background_Property = ComponentDropdownToolProperty(state: .normal, text: KMLocalizedString("Background"), leftIcon: NSImage(named: "edit_background"), showDropdown: true, arrowIcon: NSImage(named: "toolbar_arrowDown_fill"))
     var edit_bg_add_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(text: KMLocalizedString("Add Background"), identifier: KMPDFToolbar_edit_addBG_Identifier)
     var edit_bg_remove_Property: ComponentMenuitemProperty = ComponentMenuitemProperty(text: KMLocalizedString("Remove Background"), identifier: KMPDFToolbar_edit_removeBG_Identifier)
@@ -145,7 +146,7 @@ class KMPDFToolbarManager: NSObject {
     let form_dropdown_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Dropdown"), icon: NSImage(named: "form_dropdown"), identifier: KMPDFToolbar_form_dropdown_Identifier)
     let form_OK_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Button"), icon: NSImage(named: "form_OK"), identifier: KMPDFToolbar_form_OK_Identifier)
     let form_digitalSign_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Digital Signature"), icon: NSImage(named: "form_digitalSign"), identifier: KMPDFToolbar_form_digitalSign_Identifier)
-     
+    
     let form_alignment_Property = ComponentDropdownToolProperty(state: .normal, text: nil, leftIcon: NSImage(named: "form_alignment"), showDropdown: true, arrowIcon: NSImage(named: "toolbar_arrowDown_fill"))
     let form_more_Property = ComponentDropdownToolProperty(state: .normal, text: nil, leftIcon: NSImage(named: "form_more"), showDropdown: true, arrowIcon: NSImage(named: "toolbar_arrowDown_fill"))
     
@@ -167,7 +168,7 @@ class KMPDFToolbarManager: NSObject {
     let convert_others_Property = ComponentDropdownToolProperty(state: .normal, text: KMLocalizedString("To Others"), leftIcon: NSImage(named: "form_more"), showDropdown: true, arrowIcon: NSImage(named: "toolbar_arrowDown_fill"))
     
     let convert_imageToPDF_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Image to PDF"), icon: NSImage(named: "convert_imageToPdf"), keepPressState: false,identifier: KMPDFToolbar_convert_imageToPDF_Identifier)
-     
+    
     let convert_ocr_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("OCR"), icon: NSImage(named: "convert_ocr"), identifier: KMPDFToolbar_convert_ocr_Identifier)
     
     var convert_RTF_property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "convert_rtf"), keyEquivalent: nil, text: KMLocalizedString("To RTF"), identifier: KMPDFToolbar_convert_RTF_Identifier)
@@ -175,20 +176,20 @@ class KMPDFToolbarManager: NSObject {
     var convert_HTML_property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "convert_html"), keyEquivalent: nil, text: KMLocalizedString("To HTML"), identifier: KMPDFToolbar_convert_HTML_Identifier)
     var convert_Text_property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "convert_text"), keyEquivalent: nil, text: KMLocalizedString("To Text"), identifier: KMPDFToolbar_convert_Text_Identifier)
     var convert_Json_property: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, lefticon: NSImage(named: "convert_json"), keyEquivalent: nil, text: KMLocalizedString("To Json"), identifier: KMPDFToolbar_convert_Json_Identifier)
-
+    
     //MARK: -Protect
     let protect_redact_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Redact"), icon: NSImage(named: "protect_redact"), identifier: KMPDFToolbar_protect_redact_Identifier)
     let protect_security_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Security"), icon: NSImage(named: "protect_security"), identifier: KMPDFToolbar_protect_security_Identifier)
     let protect_removeSecurity_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Remove Security"), icon: NSImage(named: "protect_security"), identifier: KMPDFToolbar_protect_removeSecurity_Identifier)
     let protect_digitalSign_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Digital Signature"), icon: NSImage(named: "form_digitalSign"), identifier: KMPDFToolbar_protect_digitalSign_Identifier)
-     
+    
     //MARK: -Tools
     let tools_OCR_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("OCR"), icon: NSImage(named: "tools_OCR"), identifier: KMPDFToolbar_tools_OCR_Identifier)
     let tools_merge_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Merge"), icon: NSImage(named: "tools_merge"), identifier: KMPDFToolbar_tools_merge_Identifier)
     let tools_compress_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Compress"), icon: NSImage(named: "tools_compress"), identifier: KMPDFToolbar_tools_compress_Identifier)
     
     let tools_compare_Property = ComponentDropdownToolProperty(state: .normal, text: KMLocalizedString("compare"), leftIcon: NSImage(named: "tools_compare"), showDropdown: true, arrowIcon: NSImage(named: "toolbar_arrowDown_fill"))
-
+    
     let tools_extractImage_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Extract Image"), icon: NSImage(named: "tools_extractImg"), identifier: KMPDFToolbar_tools_extractImage_Identifier)
     let tools_TTS_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("TTS"), icon: NSImage(named: "tools_TTS"), identifier: KMPDFToolbar_tools_TTS_Identifier)
     let tools_batch_Property = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, showLeftIcon: true, buttonText: KMLocalizedString("Batch"), icon: NSImage(named: "tools_batch"), identifier: KMPDFToolbar_tools_batch_Identifier)
@@ -200,7 +201,7 @@ class KMPDFToolbarManager: NSObject {
     //MARK: - func
     override init() {
         super.init()
-         
+        
         self.initData()
         
     }
@@ -220,7 +221,7 @@ class KMPDFToolbarManager: NSObject {
             menuItemArr.append(tools_areaProperty)
             toolsProperty.menuItemArr = menuItemArr
         }
-         
+        
         if true {
             selectZoomProperty.menuItemArr = KMPDFToolbarConfig.scaleZoomItems()
         }
@@ -281,6 +282,7 @@ class KMPDFToolbarManager: NSObject {
                                     penProperty.identifier, eraserProperty.identifier,
                                     rectangleProperty.identifier, circleProperty.identifier,
                                     arrowProperty.identifier, lineProperty.identifier,
+                                    measureProperty.identifier,
                                     stampProperty.identifier, signProperty.identifier,
                                     eyeProperty.identifier])
         } else if mainIdentify == KMPDFToolbar_Edit_Identifier {
@@ -321,9 +323,9 @@ class KMPDFToolbarManager: NSObject {
             ids.append(contentsOf: [protect_redact_Property.identifier, protect_security_Property.identifier, protect_removeSecurity_Property.identifier, protect_digitalSign_Property.identifier])
             
         } else if mainIdentify == KMPDFToolbar_Tools_Identifier {
-            ids.append(contentsOf: [tools_OCR_Property.identifier, tools_merge_Property.identifier, 
+            ids.append(contentsOf: [tools_OCR_Property.identifier, tools_merge_Property.identifier,
                                     tools_compress_Property.identifier, tools_compare_Property.identifier,
-                                    tools_extractImage_Property.identifier, tools_TTS_Property.identifier, 
+                                    tools_extractImage_Property.identifier, tools_TTS_Property.identifier,
                                     tools_batch_Property.identifier, tools_AITools_Property.identifier])
         }
         
@@ -333,16 +335,16 @@ class KMPDFToolbarManager: NSObject {
     func getSubToolbarItems(_ modeType: KMPDFToolsMode = .None, isPageEditMode: Bool = false) -> [NSObject] {
         if isPageEditMode {
             
-            page_pageInfo_Property.menuItemArr = [page_page_oddPage_Property, page_page_EvenPage_Property, 
+            page_pageInfo_Property.menuItemArr = [page_page_oddPage_Property, page_page_EvenPage_Property,
                                                   page_page_PortraitPage_Property, page_page_LandscapePage_Property,
                                                   page_page_AllPage_Property, ComponentMenuitemProperty.divider(),
                                                   page_page_CustomPage_Property]
-             
-            page_Insert_Property.menuItemArr = [page_Insert_File_Property, page_Insert_Blank_Property, 
+            
+            page_Insert_Property.menuItemArr = [page_Insert_File_Property, page_Insert_Blank_Property,
                                                 ComponentMenuitemProperty.divider(), page_Insert_Clip_Property,
                                                 page_Insert_Scanner_Property]
             
-            return [page_pageInfo_Property, dividerProperty, 
+            return [page_pageInfo_Property, dividerProperty,
                     page_Insert_Property, page_Extract_Property,
                     page_Replace_Property, page_Split_Property,
                     page_Reverse_Property, dividerProperty,
@@ -351,12 +353,12 @@ class KMPDFToolbarManager: NSObject {
         }
         
         if modeType == .Markup {
-              return [highlightProperty, UnderlineProperty, wavelineProperty, strikethroughProperty,
-                     dividerProperty, textProperty, noteProperty, dividerProperty,
-                     penProperty, eraserProperty, dividerProperty, rectangleProperty,
-                     circleProperty, arrowProperty, lineProperty, dividerProperty,
-                     stampProperty, signProperty, dividerProperty, eyeProperty]
-             
+            return [highlightProperty, UnderlineProperty, wavelineProperty, strikethroughProperty,
+                    dividerProperty, textProperty, noteProperty, dividerProperty,
+                    penProperty, eraserProperty, dividerProperty, rectangleProperty,
+                    circleProperty, arrowProperty, lineProperty, measureProperty,
+                    dividerProperty,stampProperty, signProperty, dividerProperty, eyeProperty]
+            
         } else if modeType == .Edit {
             edit_watermark_Property.menuItemArr = [edit_watermark_add_Property, edit_watermark_remove_Property,
                                                    ComponentMenuitemProperty.divider(),
@@ -375,19 +377,19 @@ class KMPDFToolbarManager: NSObject {
                                                edit_bates_batchAdd_Property, edit_bates_batchRemove_Property]
             
             return [edit_text_Property, edit_image_Property, edit_link_Property, dividerProperty, edit_watermark_Property, edit_background_Property, edit_headerfooter_Property,
-                     edit_bates_Property, edit_crop_Property]
+                    edit_bates_Property, edit_crop_Property]
             
         } else if modeType == .Form {
             return [form_text_Property, form_checkbox_Property, form_radio_Property, form_list_Property,
-                     form_dropdown_Property, form_OK_Property, form_digitalSign_Property, dividerProperty,
-                     form_alignment_Property, form_more_Property]
+                    form_dropdown_Property, form_OK_Property, form_digitalSign_Property, dividerProperty,
+                    form_alignment_Property, form_more_Property]
             
         } else if modeType == .Fill {
             return [fill_tick_Property, fill_fork_Property, fill_rectangle_Property, fill_line_Property,
-                     fill_dot_Property, fill_date_Property, fill_sign_Property]
+                    fill_dot_Property, fill_date_Property, fill_sign_Property]
             
         } else if modeType == .Convert {
-             
+            
             var menuItemArr: [ComponentMenuitemProperty] = []
             if true {
                 menuItemArr.append(convert_RTF_property)
@@ -398,15 +400,15 @@ class KMPDFToolbarManager: NSObject {
                 convert_others_Property.menuItemArr = menuItemArr
             }
             return [convert_word_Property, convert_excel_Property, convert_ppt_Property, convert_image_Property,
-                     convert_others_Property, dividerProperty, convert_imageToPDF_Property, dividerProperty,
-                     convert_ocr_Property]
+                    convert_others_Property, dividerProperty, convert_imageToPDF_Property, dividerProperty,
+                    convert_ocr_Property]
             
         } else if modeType == .Protect {
             return [protect_redact_Property, protect_security_Property, protect_removeSecurity_Property, protect_digitalSign_Property]
             
         } else if modeType == .Tools {
             return[tools_OCR_Property, tools_merge_Property, tools_compress_Property, tools_compare_Property,
-                     tools_extractImage_Property, tools_TTS_Property, tools_batch_Property, tools_AITools_Property]
+                   tools_extractImage_Property, tools_TTS_Property, tools_batch_Property, tools_AITools_Property]
         }
         
         return []
@@ -462,7 +464,7 @@ class KMPDFToolbarManager: NSObject {
         
         return image
     }
-
+    
     static func getMarkupPenImage() -> NSImage? {
         let image = NSImage(named: "markup_pen_Cover")
         let upImage = NSImage(named: "markup_pen_base")
@@ -473,7 +475,7 @@ class KMPDFToolbarManager: NSObject {
         
         return image
     }
-
+    
     static func getMarkupStrikethroughImage() -> NSImage? {
         let image = NSImage(named: "markup_strikethrough_Cover")
         let upImage = NSImage(named: "markup_strikethrough_base")
@@ -484,7 +486,7 @@ class KMPDFToolbarManager: NSObject {
         
         return image
     }
-
+    
     static func getMarkupUnderlineImage() -> NSImage? {
         let image = NSImage(named: "markup_underline_Cover")
         let upImage = NSImage(named: "markup_underline_base")
@@ -495,7 +497,7 @@ class KMPDFToolbarManager: NSObject {
         
         return image
     }
-
+    
     static func getMarkupwavylineImage() -> NSImage? {
         let image = NSImage(named: "markup_wavyline_Cover")
         let upImage = NSImage(named: "markup_wavyline_base")

+ 12 - 187
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -2992,42 +2992,10 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2507"
-            endingLineNumber = "2507"
+            startingLineNumber = "2515"
+            endingLineNumber = "2515"
             landmarkName = "pdfViewCurrentPageDidChanged(_:)"
             landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "18021D19-EAF7-4279-A121-953E8941B3AE - 9dfcffc52ba51ca6"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewCurrentPageDidChanged(Swift.Optional&lt;__C.CPDFView&gt;) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2507"
-                  endingLineNumber = "2507"
-                  offsetFromSymbolStart = "5480">
-               </Location>
-               <Location
-                  uuid = "18021D19-EAF7-4279-A121-953E8941B3AE - 9dfcffc52ba51ca6"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewCurrentPageDidChanged(Swift.Optional&lt;__C.CPDFView&gt;) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2507"
-                  endingLineNumber = "2507"
-                  offsetFromSymbolStart = "3512">
-               </Location>
-            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -3120,42 +3088,10 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2807"
-            endingLineNumber = "2807"
+            startingLineNumber = "2815"
+            endingLineNumber = "2815"
             landmarkName = "pdfListViewKeyDownIsContinue(_:theEvent:)"
             landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "E36E1A66-A8B1-4248-9550-68D820499376 - 680781a588395c61"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewKeyDownIsContinue(_: Swift.Optional&lt;__C.CPDFListView&gt;, theEvent: Swift.Optional&lt;__C.NSEvent&gt;) -&gt; Swift.Bool"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2807"
-                  endingLineNumber = "2807"
-                  offsetFromSymbolStart = "1900">
-               </Location>
-               <Location
-                  uuid = "E36E1A66-A8B1-4248-9550-68D820499376 - 680781a588395c61"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewKeyDownIsContinue(_: Swift.Optional&lt;__C.CPDFListView&gt;, theEvent: Swift.Optional&lt;__C.NSEvent&gt;) -&gt; Swift.Bool"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2807"
-                  endingLineNumber = "2807"
-                  offsetFromSymbolStart = "436">
-               </Location>
-            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -3246,42 +3182,10 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "3959"
-            endingLineNumber = "3959"
+            startingLineNumber = "3967"
+            endingLineNumber = "3967"
             landmarkName = "enterRedact()"
             landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 1c7307af3eb16b3c"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.enterRedact() -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "3960"
-                  endingLineNumber = "3960"
-                  offsetFromSymbolStart = "2608">
-               </Location>
-               <Location
-                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 1c7307af3eb16b5d"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.enterRedact() -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "3959"
-                  endingLineNumber = "3959"
-                  offsetFromSymbolStart = "1448">
-               </Location>
-            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -3294,42 +3198,10 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "4250"
-            endingLineNumber = "4250"
+            startingLineNumber = "4258"
+            endingLineNumber = "4258"
             landmarkName = "loadOpenFileFunctionGuide(_:)"
             landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 8503d1629d6cbf53"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "closure #1 (PDF_Reader_Pro.KMGuideInfoWindowController) -&gt; () in closure #7 @Swift.MainActor () -&gt; () in PDF_Reader_Pro.KMMainViewController.loadOpenFileFunctionGuide(PDF_Reader_Pro.KMGuideInfoType) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4258"
-                  endingLineNumber = "4258"
-                  offsetFromSymbolStart = "1884">
-               </Location>
-               <Location
-                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 8503d1629d6cbe2b"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "closure #1 (PDF_Reader_Pro.KMGuideInfoWindowController) -&gt; () in closure #7 @Swift.MainActor () -&gt; () in PDF_Reader_Pro.KMMainViewController.loadOpenFileFunctionGuide(PDF_Reader_Pro.KMGuideInfoType) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4250"
-                  endingLineNumber = "4250"
-                  offsetFromSymbolStart = "1348">
-               </Location>
-            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -3342,57 +3214,10 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "4291"
-            endingLineNumber = "4291"
-            landmarkName = "checkFirstTrialController()"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 52fc15055dd34559"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "default argument 0 of PDF_Reader_Pro.KMMainViewController.enterPageEdit(Swift.Array&lt;Swift.Int&gt;) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4291"
-                  endingLineNumber = "4291"
-                  offsetFromSymbolStart = "20">
-               </Location>
-               <Location
-                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 4236ac58eccf7e03"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.enterPageEdit(Swift.Array&lt;Swift.Int&gt;) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4291"
-                  endingLineNumber = "4291"
-                  offsetFromSymbolStart = "344">
-               </Location>
-               <Location
-                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - cdeb46f11008aba4"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.checkFirstTrialController() -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4291"
-                  endingLineNumber = "4291"
-                  offsetFromSymbolStart = "2528">
-               </Location>
-            </Locations>
+            startingLineNumber = "4299"
+            endingLineNumber = "4299"
+            landmarkName = "KMMainViewController"
+            landmarkType = "21">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy