Bläddra i källkod

Merge branch 'develop_2025' of git.kdan.cc:Mac_PDF/PDF_Office into develop_2025

tangchao 4 månader sedan
förälder
incheckning
8a54ab8429
44 ändrade filer med 2050 tillägg och 824 borttagningar
  1. 1 1
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/Color/ComponentCColorGroup.swift
  2. 32 28
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/Position/ComponentCPosition.swift
  3. 2 2
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Radio/ComponentRadio.xib
  4. 43 40
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Tabs/ComponentTabs.swift
  5. 19 33
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Tabs/ComponentTabsItem.swift
  6. 13 6
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Tabs/ComponentTabsItem.xib
  7. 1 1
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFInsert/KMNPDFInsertBlankWindowController.xib
  8. 34 16
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailManager.swift
  9. 110 78
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNPageEditViewController.swift
  10. 103 22
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailBaseViewController+Action.swift
  11. 44 22
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailBaseViewController.swift
  12. 0 1
      PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailCollectionViewItem.swift
  13. 60 25
      PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift
  14. 6 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/Contents.json
  15. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/edit_ocapity.imageset/Contents.json
  16. 91 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/edit_ocapity.imageset/edit_ocapity.pdf
  17. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/edit_rotateRight.imageset/Contents.json
  18. 83 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/edit_rotateRight.imageset/edit_rotateRight.pdf
  19. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/icon_wm_template.imageset/Contents.json
  20. 66 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/icon_wm_template.imageset/icon_wm_template.pdf
  21. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_horiz.imageset/Contents.json
  22. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_horiz.imageset/tile_spacing_horiz.pdf
  23. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_horiz_dis.imageset/Contents.json
  24. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_horiz_dis.imageset/tile_spacing_horiz_dis.pdf
  25. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_vert.imageset/Contents.json
  26. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_vert.imageset/tile_spacing_vert.pdf
  27. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_vert_dis.imageset/Contents.json
  28. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_vert_dis.imageset/tile_spacing_vert_dis.pdf
  29. 1 1
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/Base/KMWatermarkAdjectivePropertyBaseController.xib
  30. 0 269
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/Controller/KMWatermarkViewController.swift
  31. 43 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMEditDocumentController.swift
  32. 4 4
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/Controller/KMWatermarkViewController.xib
  33. 44 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMWatermarkController.swift
  34. 56 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMWatermarkController.xib
  35. 182 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMNWatermarkPropertyController.swift
  36. 476 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMNWatermarkPropertyController.xib
  37. 2 4
      PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/KMPDFToolbarController.swift
  38. 7 7
      PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/Model/KMPDFToolbarManager.swift
  39. 2 0
      PDF Office/PDF Master/KMClass/Settings/SettingsManager.swift
  40. BIN
      PDF Office/PDF Master/Third Pard Library/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate
  41. BIN
      PDF Office/PDF Master/Third Pard Library/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop
  42. 56 32
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  43. 1 1
      PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro DMG.xcscheme
  44. 28 231
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

+ 1 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/Color/ComponentCColorGroup.swift

@@ -82,7 +82,7 @@ public class ComponentCColorGroup: ComponentBaseXibView {
             self.colorContendBox.contentView?.addSubview(item)
             
             itemXValue += viewWidth
-            itemXValue += 4
+            itemXValue += 12
         }
          
     }

+ 32 - 28
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/Position/ComponentCPosition.swift

@@ -39,41 +39,45 @@ public class ComponentCPosition: ComponentBaseXibView {
         let rowHeight: CGFloat = self.itemHeight
         let columnWidth: CGFloat = self.itemWidth
         
-        let lineWidth: CGFloat = self.properties.propertyInfo.borderWidth ?? 0
+        let lineWidth: CGFloat = properties.propertyInfo.borderWidth
         
         var lineYValue: CGFloat = 0
         var lineXValue: CGFloat = 0
-        for row in 1...rows-1 {
-            lineYValue += lineWidth
-            lineYValue += rowHeight
-            
-            let path = NSBezierPath()
-            if self.properties.dash == true {
-                let dashPattern: [CGFloat] = [3,3]
-                path.setLineDash(dashPattern, count: dashPattern.count, phase: 0)
+        if rows > 1 {
+            for row in 1...rows-1 {
+                lineYValue += lineWidth
+                lineYValue += rowHeight
+                
+                let path = NSBezierPath()
+                if self.properties.dash == true {
+                    let dashPattern: [CGFloat] = [3,3]
+                    path.setLineDash(dashPattern, count: dashPattern.count, phase: 0)
+                }
+                path.move(to: CGPoint(x: 0, y: lineYValue))
+                path.line(to: CGPoint(x: bounds.width, y: lineYValue))
+                path.lineWidth = lineWidth
+                self.properties.propertyInfo.borderColor_nor.setStroke()
+                path.stroke()
+                
             }
-            path.move(to: CGPoint(x: 0, y: lineYValue))
-            path.line(to: CGPoint(x: bounds.width, y: lineYValue))
-            path.lineWidth = lineWidth
-            self.properties.propertyInfo.borderColor_nor.setStroke()
-            path.stroke()
-            
         }
         
-        for column in 1...columns-1 {
-            lineXValue += lineWidth
-            lineXValue += columnWidth
-            
-            let path = NSBezierPath()
-            if self.properties.dash == true {
-                let dashPattern: [CGFloat] = [3,3]
-                path.setLineDash(dashPattern, count: dashPattern.count, phase: 0)
+        if columns > 1 {
+            for column in 1...columns-1 {
+                lineXValue += lineWidth
+                lineXValue += columnWidth
+                
+                let path = NSBezierPath()
+                if self.properties.dash == true {
+                    let dashPattern: [CGFloat] = [3,3]
+                    path.setLineDash(dashPattern, count: dashPattern.count, phase: 0)
+                }
+                path.move(to: CGPoint(x: lineXValue, y: 0))
+                path.line(to: CGPoint(x: lineXValue, y: bounds.height))
+                path.lineWidth = lineWidth
+                self.properties.propertyInfo.borderColor_nor.setStroke()
+                path.stroke()
             }
-            path.move(to: CGPoint(x: lineXValue, y: 0))
-            path.line(to: CGPoint(x: lineXValue, y: bounds.height))
-            path.lineWidth = lineWidth
-            self.properties.propertyInfo.borderColor_nor.setStroke()
-            path.stroke()
         }
         
     }

+ 2 - 2
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Radio/ComponentRadio.xib

@@ -6,7 +6,7 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="ComponentRadio" customModule="WComponentLibrary" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="ComponentRadio" customModule="KMComponentLibrary" customModuleProvider="target">
             <connections>
                 <outlet property="checkboxImage" destination="bT8-Fl-NQD" id="2dE-3e-Bb8"/>
                 <outlet property="contendBox" destination="DsQ-gt-CGA" id="ayW-bd-SkT"/>
@@ -42,7 +42,7 @@
                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                 </textFieldCell>
                             </textField>
-                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="9h9-vv-aK4" customClass="ComponentToolTipsHelp" customModule="WComponentLibrary" customModuleProvider="target">
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="9h9-vv-aK4" customClass="ComponentToolTipsHelp" customModule="KMComponentLibrary" customModuleProvider="target">
                                 <rect key="frame" x="69" y="3" width="16" height="16"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="16" id="HSF-w0-wQN"/>

+ 43 - 40
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Tabs/ComponentTabs.swift

@@ -10,11 +10,11 @@ import Cocoa
 @objc public protocol ComponentTabsDelegate: AnyObject {
     
     @objc optional func componentTabsDidSelected(_ view: ComponentTabs, _ property: ComponentTabsProperty)
- 
+    
 }
 
 public class ComponentTabs: ComponentBaseXibView {
-
+    
     @IBOutlet var contendBox: NSBox!
     @IBOutlet var lineBox: NSBox!
     
@@ -42,7 +42,7 @@ public class ComponentTabs: ComponentBaseXibView {
     
     public override func awakeFromNib() {
         super.awakeFromNib()
-       
+        
         contendBox.borderWidth = 0
         contendBox.fillColor = NSColor.clear
         
@@ -92,55 +92,58 @@ public class ComponentTabs: ComponentBaseXibView {
                 lineBox.borderColor = NSColor.clear
             }
         }
-         
+        
         var itemTotalWidth: CGFloat = 0
         for property in propertyArr {
             ComponentLibrary.shared.configTabsComponent(properties: property)
             itemTotalWidth += property.propertyInfo.viewWidth
         }
-        contendWidthConst.constant = itemTotalWidth
         viewWidth = itemTotalWidth
         
-        DispatchQueue.main.async { [self] in
-            var itemXValue: CGFloat = 0
-            var itemGap: CGFloat = 0
-            if property?.tabsType == .underline_Center {
-                itemXValue = 0
-            } else if property?.tabsType == .underline_Fill {
-                itemXValue = 0
+        var itemXValue: CGFloat = 0
+        var itemGap: CGFloat = 0
+        if property?.tabsType == .underline_Center {
+            itemXValue = 0
+        } else if property?.tabsType == .underline_Fill {
+            itemXValue = 0
+        } else if property?.tabsType == .onlyText {
+            itemXValue = 0
+            itemGap = (CGRectGetWidth(bounds) - itemTotalWidth)/(CGFloat(propertyArr.count) - 1)
+        }
+        for i in 0...propertyArr.count - 1 {
+            let itemProperty = propertyArr[i]
+            let item = ComponentTabsItem.init()
+            ComponentLibrary.shared.configTabsComponent(properties: itemProperty)
+            
+            if property?.tabsType == .underline_Fill {
+                item.frame = CGRectMake(itemXValue, 0, CGRectGetWidth(frame)/CGFloat(propertyArr.count), frame.size.height)
             } else if property?.tabsType == .onlyText {
-                itemXValue = 0
-                itemGap = (CGRectGetWidth(bounds) - itemTotalWidth)/(CGFloat(propertyArr.count) - 1)
-            }
-            for i in 0...propertyArr.count - 1 {
-                let itemProperty = propertyArr[i]
-                let item = ComponentTabsItem.init()
-                item.properties = itemProperty
                 item.frame = CGRectMake(itemXValue, 0, itemProperty.propertyInfo.viewWidth, frame.size.height)
-                if property?.tabsType == .underline_Fill {
-                    item.frame = CGRectMake(itemXValue, 0, CGRectGetWidth(frame)/CGFloat(propertyArr.count), frame.size.height)
-                } else if property?.tabsType == .onlyText {
-                    item.frame = CGRectMake(itemXValue, 0, itemProperty.propertyInfo.viewWidth, frame.size.height)
-                }
-                item.tagIndex = i
-                print(item.frame)
-                
-                item.autoresizingMask = [.maxXMargin, .minYMargin, .maxYMargin, .height]
-                item.setTarget(self, action: #selector(cSelectorItemClicked(_:)))
-                contendBox.contentView?.addSubview(item)
+            } else if property?.tabsType == .fill {
+                item.frame = CGRectMake(itemXValue, 0, itemProperty.propertyInfo.viewWidth, frame.size.height)
+            } else if property?.tabsType == .underline_Center {
+                item.frame = CGRectMake(itemXValue, 0, itemProperty.propertyInfo.viewWidth, frame.size.height)
+            }
+            item.properties = itemProperty
+            item.tagIndex = i
+            
+            item.autoresizingMask = [.maxXMargin, .minYMargin, .maxYMargin, .height]
+            item.setTarget(self, action: #selector(cSelectorItemClicked(_:)))
+            contendBox.contentView?.addSubview(item)
+            
+            itemXValue += CGRectGetWidth(item.frame)
+            if property?.tabsType == .onlyText {
+                let divider: ComponentDivider = ComponentDivider(frame: CGRectMake(itemXValue+itemGap/2, CGRectGetHeight(frame)/2-8, 1, 16))
+                let dividerProperty: ComponentDividerProperty = ComponentDividerProperty.init(type: .vertical, dash: false)
+                divider.properties = dividerProperty
+                divider.autoresizingMask = [.minXMargin, .maxXMargin, .minYMargin, .maxYMargin]
+                contendBox.contentView?.addSubview(divider)
                 
-                itemXValue += CGRectGetWidth(item.frame)
-                if property?.tabsType == .onlyText {
-                    let divider: ComponentDivider = ComponentDivider(frame: CGRectMake(itemXValue+itemGap/2, CGRectGetHeight(frame)/2-8, 1, 16))
-                    let dividerProperty: ComponentDividerProperty = ComponentDividerProperty.init(type: .vertical, dash: false)
-                    divider.properties = dividerProperty
-                    divider.autoresizingMask = [.minXMargin, .maxXMargin, .minYMargin, .maxYMargin]
-                    contendBox.contentView?.addSubview(divider)
-                    
-                    itemXValue += itemGap
-                }
+                itemXValue += itemGap
             }
         }
+        contendWidthConst.constant = itemXValue
+        
     }
     
     @objc func cSelectorItemClicked(_ item: ComponentTabsItem) {

+ 19 - 33
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Tabs/ComponentTabsItem.swift

@@ -19,6 +19,9 @@ public class ComponentTabsItem: ComponentBaseXibView {
     @IBOutlet var lineBoxLeftConst: NSLayoutConstraint!
     @IBOutlet var lineBoxRightConst: NSLayoutConstraint!
     
+    @IBOutlet var imagewidthConst: NSLayoutConstraint!
+    
+    
     // MARK: Private Property
     private var _properties : ComponentTabsProperty = ComponentTabsProperty()
     
@@ -108,44 +111,27 @@ public class ComponentTabsItem: ComponentBaseXibView {
             
             viewWidthValue += 16
             viewWidthValue += properties.propertyInfo.layout_gap
-            
-        } else {
-            
         }
+        imagewidthConst.constant = properties.propertyInfo.layout_gap
         
         properties.propertyInfo.viewWidth = viewWidthValue
         properties.propertyInfo.viewHeight = 40
-        
-        DispatchQueue.main.async {
-            var labelRect = self.titleLabel.frame
-            if self.properties.showIcon == true {
-                let gapWidth = self.properties.propertyInfo.layout_gap
-                let totalWidth = 16 + labelRect.size.width + gapWidth
-                self.iconImage.frame = CGRectMake(CGRectGetWidth(self.frame)/2 - totalWidth/2, CGRectGetHeight(self.frame)/2 - 8, 16, 16)
-                labelRect.origin.x = CGRectGetMaxX(self.iconImage.frame) + gapWidth
-            } else {
-                labelRect.origin.x = CGRectGetWidth(self.frame)/2 - labelRect.size.width/2
-            }
-            labelRect.origin.y = CGRectGetHeight(self.frame)/2 - labelRect.size.height/2
-            self.titleLabel.frame = labelRect
+         
+        if properties.tabsType == .fill {
+
+        } else if properties.tabsType == .underline_Center {
+            lineBoxLeftConst.constant = max((CGRectGetWidth(frame) - 32)/2, 0)
+            lineBoxRightConst.constant = max((CGRectGetWidth(frame) - 32)/2, 0)
+            lineBoxHeightConst.constant = 3
+            lineBox.cornerRadius = 1.5
+            
+        } else if properties.tabsType == .underline_Fill {
+            lineBoxLeftConst.constant = 0
+            lineBoxRightConst.constant = 0
+            lineBoxHeightConst.constant = 2
+            
+        } else if properties.tabsType == .onlyText {
             
-            if self.properties.tabsType == .fill {
-                
-            } else if self.properties.tabsType == .underline_Center {
-                
-                self.lineBoxLeftConst.constant = max((CGRectGetWidth(self.frame) - 32)/2, 0)
-                self.lineBoxRightConst.constant = max((CGRectGetWidth(self.frame) - 32)/2, 0)
-                self.lineBoxHeightConst.constant = 3
-                self.lineBox.cornerRadius = 1.5
-                
-            } else if self.properties.tabsType == .underline_Fill {
-                self.lineBoxLeftConst.constant = 0
-                self.lineBoxRightConst.constant = 0
-                self.lineBoxHeightConst.constant = 2
-                
-            } else if self.properties.tabsType == .onlyText {
-                
-            }
         }
         
     }

+ 13 - 6
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Tabs/ComponentTabsItem.xib

@@ -10,6 +10,7 @@
             <connections>
                 <outlet property="contendBox" destination="CtO-CW-nGf" id="nQu-iZ-v2R"/>
                 <outlet property="iconImage" destination="O1i-7D-OT9" id="IXC-KT-2a2"/>
+                <outlet property="imagewidthConst" destination="Tl2-Qa-k4c" id="4Ku-2K-AXW"/>
                 <outlet property="lineBox" destination="QCe-dR-x7e" id="2c7-Qw-pil"/>
                 <outlet property="lineBoxHeightConst" destination="6a9-HC-Dru" id="Bjl-RN-zmx"/>
                 <outlet property="lineBoxLeftConst" destination="AQy-dC-A4g" id="MYl-d9-VmL"/>
@@ -29,18 +30,20 @@
                         <rect key="frame" x="0.0" y="0.0" width="87" height="32"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Amh-dO-tdg">
-                                <rect key="frame" x="34" y="9" width="37" height="16"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Amh-dO-tdg">
+                                <rect key="frame" x="25" y="8" width="37" height="16"/>
                                 <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="39d-xc-W1E">
                                     <font key="font" usesAppearanceFont="YES"/>
                                     <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                 </textFieldCell>
                             </textField>
-                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="O1i-7D-OT9">
-                                <rect key="frame" x="16" y="8" width="16" height="16"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="O1i-7D-OT9">
+                                <rect key="frame" x="7" y="8" width="16" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="16" id="Ik3-qD-C0d"/>
+                                    <constraint firstAttribute="height" constant="16" id="SWK-Fy-sz6"/>
+                                </constraints>
                                 <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="segmented_active" id="R39-H4-k5a"/>
                             </imageView>
                             <box boxType="custom" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="QCe-dR-x7e">
@@ -58,6 +61,10 @@
                             <constraint firstAttribute="trailing" secondItem="QCe-dR-x7e" secondAttribute="trailing" id="1DF-Zw-OUr"/>
                             <constraint firstItem="QCe-dR-x7e" firstAttribute="leading" secondItem="0rP-N9-KAg" secondAttribute="leading" id="AQy-dC-A4g"/>
                             <constraint firstAttribute="bottom" secondItem="QCe-dR-x7e" secondAttribute="bottom" id="LaO-Yk-WLP"/>
+                            <constraint firstItem="Amh-dO-tdg" firstAttribute="centerX" secondItem="0rP-N9-KAg" secondAttribute="centerX" id="Rpe-JS-urA"/>
+                            <constraint firstItem="Amh-dO-tdg" firstAttribute="leading" secondItem="O1i-7D-OT9" secondAttribute="trailing" constant="4" id="Tl2-Qa-k4c"/>
+                            <constraint firstItem="Amh-dO-tdg" firstAttribute="centerY" secondItem="0rP-N9-KAg" secondAttribute="centerY" id="mj3-FT-t2a"/>
+                            <constraint firstItem="O1i-7D-OT9" firstAttribute="centerY" secondItem="0rP-N9-KAg" secondAttribute="centerY" id="qfe-8Y-MVm"/>
                         </constraints>
                     </view>
                 </box>

+ 1 - 1
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNPDFInsert/KMNPDFInsertBlankWindowController.xib

@@ -44,7 +44,7 @@
             <windowStyleMask key="styleMask" titled="YES" fullSizeContentView="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="495" height="553"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1512" height="944"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
             <view key="contentView" id="se5-gp-TjO">
                 <rect key="frame" x="0.0" y="0.0" width="480" height="504"/>
                 <autoresizingMask key="autoresizingMask"/>

+ 34 - 16
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailManager.swift

@@ -49,7 +49,7 @@ public class KMNThumbnail: NSObject {
     }
     
     func generateThumImage(completion: KMNThumbnailCompletion?) {
-        let filePathID = fileId(for: thumbnailDocument)
+        let filePathID = KMNThumbnailManager.filePathId(for: thumbnailDocument.documentURL.path)
         let docsFilePath = kmnThumbnailFolder + "/" + filePathID
         let fileManager = FileManager.default
 
@@ -65,9 +65,9 @@ public class KMNThumbnail: NSObject {
         } else {
             imageFilePath =  docsFilePath + "/" + String(pageObjNum) + ".png"
         }
+        var thumSize = pageSize
         
         if(imageFilePath.isEmpty == true) {
-            var thumSize = pageSize
             
             let maxOrg = max(thumSize.width, thumSize.height)
             let minOrg = min(thumSize.width, thumSize.height)
@@ -76,11 +76,16 @@ public class KMNThumbnail: NSObject {
             let maxHeight = 500.0
             
             let scanW = maxWidth / minOrg
-            let scanH = maxHeight / minOrg
+            let scanH = maxHeight / maxOrg
             let minScanl = min(scanW, scanH)
             
-            thumSize.width = pageSize.width * minScanl
-            thumSize.height = pageSize.height * minScanl
+            if (thumbnaiPage?.rotation ?? 0) % 180 != 0 {
+                thumSize.width = pageSize.height * minScanl
+                thumSize.height = pageSize.width * minScanl
+            } else {
+                thumSize.width = pageSize.width * minScanl
+                thumSize.height = pageSize.height * minScanl
+            }
             
             thumbnaiPage?.thumbnail(of: thumSize, needReset: true,completion: { pageImage in
                 if completion != nil {
@@ -106,8 +111,6 @@ public class KMNThumbnail: NSObject {
                     completion!(image)
                 }
             } else {
-                var thumSize = pageSize
-                
                 let maxOrg = max(thumSize.width, thumSize.height)
                 let minOrg = min(thumSize.width, thumSize.height)
 
@@ -115,11 +118,16 @@ public class KMNThumbnail: NSObject {
                 let maxHeight = 500.0
                 
                 let scanW = maxWidth / minOrg
-                let scanH = maxHeight / minOrg
+                let scanH = maxHeight / maxOrg
                 let minScanl = min(scanW, scanH)
                 
-                thumSize.width = pageSize.width * minScanl
-                thumSize.height = pageSize.height * minScanl
+                if (thumbnaiPage?.rotation ?? 0) % 180 != 0 {
+                    thumSize.width = pageSize.height * minScanl
+                    thumSize.height = pageSize.width * minScanl
+                } else {
+                    thumSize.width = pageSize.width * minScanl
+                    thumSize.height = pageSize.height * minScanl
+                }
                 
                 thumbnaiPage?.thumbnail(of: thumSize, needReset: true,completion: { pageImage in
                     if completion != nil {
@@ -142,12 +150,8 @@ public class KMNThumbnail: NSObject {
         }
     }
     
-    fileprivate func fileId(for document: CPDFDocument) -> String {
-        return "\(document.documentURL.path.hash)"
-    }
-    
     func removeCacheImage() {
-        let filePathID = fileId(for: thumbnailDocument)
+        let filePathID = KMNThumbnailManager.filePathId(for: thumbnailDocument.documentURL.path)
         let docsFilePath = kmnThumbnailFolder + "/" + filePathID
         let fileManager = FileManager.default
 
@@ -164,6 +168,7 @@ public class KMNThumbnail: NSObject {
            try? fileManager.removeItem(atPath: imageFilePath)
         }
     }
+
 }
 
 class KMNThumbnailManager: NSObject {
@@ -173,6 +178,20 @@ class KMNThumbnailManager: NSObject {
     var copyPages: [CPDFPage] = []
     
     var copyDocument: [CPDFDocument] = []
+    
+    class func filePathId(for filePath: String) -> String {
+        return "\(filePath.hash)"
+    }
+    
+    class func clearCacheFilePath(filePath:String) {
+        let filePathID = KMNThumbnailManager.filePathId(for: filePath)
+        let docsFilePath = kmnThumbnailFolder + "/" + filePathID
+        let fileManager = FileManager.default
+        
+        if fileManager.fileExists(atPath: docsFilePath) {
+           try? fileManager.removeItem(atPath: docsFilePath)
+        }
+    }
 
     class func clearCacheThumImage() {
         if FileManager.default.fileExists(atPath: kmnThumbnailFolder) {
@@ -180,5 +199,4 @@ class KMNThumbnailManager: NSObject {
         }
     }
     
-    
 }

+ 110 - 78
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNPageEditViewController.swift

@@ -19,13 +19,14 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
      override func viewDidLoad() {
         super.viewDidLoad()
          
-         self.backViewBox.fillColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-pdfView")
+         backViewBox.fillColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-pdfView")
          
          collectionView.menuClickedAction = { point in
              return self.clickMenu(point: point)
          }
     }
     
+    // MARK: - private
     private func clickMenu(point:NSPoint)->NSMenu {
         let copyPages: [CPDFPage] = KMNThumbnailManager.manager.copyPages
 
@@ -35,6 +36,7 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         copyMenuItem.keyEquivalent = "c"
                 
         let pastMenuItem = NSMenuItem(title: KMLocalizedString("Paste"), action: #selector(pastMenuItemAciton), target: self)
+        pastMenuItem.representedObject = point
         pastMenuItem.keyEquivalent = "v"
         
         let pastNullMenuItem = NSMenuItem(title: KMLocalizedString("Paste"), action: nil, target: self)
@@ -105,6 +107,58 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         return menu
     }
     
+    private func insertFilePath(filePath:String,pdfPassword:String?) {
+        let selectedIndexPaths = collectionView.selectionIndexPaths
+        
+        let insertPDF = KMNPDFInsertPDFWindowController(showDocument, filePath: filePath, password: pdfPassword, selectionIndexPaths: selectedIndexPaths)
+        insertPDF.pdfCallback = { [weak self] fileAttribute, insertIdx in
+            let doc = fileAttribute.pdfDocument
+            
+            var insertPages: [CPDFPage] = []
+            
+            for number in fileAttribute.fetchSelectPages() {
+                if let page = doc?.page(at: UInt(number-1)) {
+                    insertPages.append(page)
+                }
+            }
+            self?.thumbnailBaseViewDelegate?.insertPDFThumbnailViewControlle?(pageEditVC: self, pdfDocment: doc)
+            
+            self?.insertFormPages(insertPages: insertPages, pageDex: insertIdx)
+        }
+        insertPDF.fileCallback = { [weak self] filePath, insertIdx in
+            self?.insertFromFilePath(fileNames: [filePath], formDex: 0, indexDex: UInt(insertIdx), selectIndexs: [], completionBlock: { newSelectIndexs in
+            })
+        }
+        
+        insertPDF.own_beginSheetModal(for: self.view.window, completionHandler: nil)
+    }
+    
+    // MARK: - public
+    func updateThumnailItem(updateIndexPaths: Set<IndexPath>,isSelect:Bool) {
+        
+        for targetIndexPath in updateIndexPaths {
+            let cellView = collectionView.item(at: targetIndexPath) as? KMNThumbnailCollectionViewItem
+            if(cellView != nil) {
+                cellView?.thumbnailMode.removeCacheImage()
+            }
+        }
+        
+        collectionView.reloadItems(at: updateIndexPaths)
+        if(isSelect) {
+            if updateIndexPaths.isEmpty { return }
+            let firstIndexPath = updateIndexPaths.first
+            collectionView.scrollToItems(at: [firstIndexPath ?? IndexPath(item: 0, section: 0)], scrollPosition: .top)
+
+            collectionView.selectionIndexPaths = updateIndexPaths
+        }
+    }
+    
+    func updateAllThumnailItems() {
+        KMNThumbnailManager.clearCacheFilePath(filePath: showDocument?.documentURL.path ?? "")
+        
+        collectionView.reloadData()
+    }
+    
     @objc public func insertFromPDFAction() {
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             KMPurchaseCompareWindowController.sharedInstance()?.showWindow(nil)
@@ -116,7 +170,6 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         openPanel.allowsMultipleSelection = false
         openPanel.beginSheetModal(for: NSWindow.currentWindow()) {[weak self] result in
             if result == NSApplication.ModalResponse.OK {
-                guard let weakSelf = self else { return }
                 let fileURL = openPanel.url
                 if(fileURL?.pathExtension == "pdf") {
                     let pdfDoc = CPDFDocument(url: fileURL)
@@ -134,44 +187,10 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
                 } else {
                     self?.insertFilePath(filePath: fileURL?.path ?? "", pdfPassword: nil)
                 }
-
             }
         }
     }
     
-    private func insertFilePath(filePath:String,pdfPassword:String?) {
-        let selectedIndexPaths = collectionView.selectionIndexPaths
-        
-        let insertPDF = KMNPDFInsertPDFWindowController(showDocument, filePath: filePath, password: pdfPassword, selectionIndexPaths: selectedIndexPaths)
-        insertPDF.pdfCallback = { [weak self] fileAttribute, insertIdx in
-            let doc = fileAttribute.pdfDocument
-            
-            var insertPages: [CPDFPage] = []
-            
-            for number in fileAttribute.fetchSelectPages() {
-                if let page = doc?.page(at: UInt(number-1)) {
-                    insertPages.append(page)
-                }
-            }
-            self?.thumbnailBaseViewDelegate?.insertPDFThumbnailViewControlle?(pageEditVC: self, pdfDocment: doc)
-            
-            self?.insertFormPages(insertPages: insertPages, pageDex: insertIdx)
-        }
-        insertPDF.fileCallback = { [weak self] filePath, insertIdx in
-            self?.insertFromFilePath(fileNames: [filePath], formDex: 0, indexDex: UInt(insertIdx), selectIndexs: [], completionBlock: { newSelectIndexs in
-                self?.refreshDatas()
-                self?.collectionView.selectionIndexPaths = newSelectIndexs
-                
-                if newSelectIndexs.isEmpty { return }
-                
-                let firstIndexPath = newSelectIndexs.first
-                self?.collectionView.scrollToItems(at: [firstIndexPath ?? IndexPath(item: 0, section: 0)], scrollPosition: .top)
-            })
-        }
-        
-        insertPDF.own_beginSheetModal(for: self.view.window, completionHandler: nil)
-    }
-    
     @objc public func insertFromBlankAction() {
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             KMPurchaseCompareWindowController.sharedInstance()?.showWindow(nil)
@@ -265,14 +284,14 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         currentUndoManager?.undo()
     }
     
-    public func redoPDFAction() {
-        currentUndoManager?.redo()
-    }
-    
     public func canRodo()->Bool {
         return true
     }
     
+    public func redoPDFAction() {
+        currentUndoManager?.redo()
+    }
+        
     @objc public func extractPDFAction() {
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             KMPurchaseCompareWindowController.sharedInstance()?.showWindow(nil)
@@ -351,7 +370,6 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         
         let splitPDF = KMNSplitPDFWindowController(self.showDocument,selectionIndexPaths: selectedIndexPaths)
         splitPDF.own_beginSheetModal(for: self.view.window, completionHandler: nil)
-
     }
     
     public func reversePDFAction() {
@@ -446,6 +464,7 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         collectionView.selectionIndexPaths = indexpaths
     }
     
+    // MARK: - MenuItem
     @objc public func copyMenuItemAciton() {
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             let winC = KMPurchaseCompareWindowController.sharedInstance()
@@ -465,45 +484,65 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         }
     }
     
-    @objc public func pastMenuItemAciton() {
+    @objc public func pastMenuItemAciton(menuItem:NSMenuItem) {
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             winC?.showWindow(nil)
             return
         }
         
-        let selectedIndexPaths = collectionView.selectionIndexPaths
-
         var pastIndex = 1
-        if(selectedIndexPaths.count > 0) {
-            let maxmumIndexPath = selectedIndexPaths.max(by: { $0 < $1 })
-            pastIndex = maxmumIndexPath?.item ?? 1
-        }
+        let point = menuItem.representedObject as? NSPoint
         
-        var indexpaths: Set<IndexPath> = []
-        let copyPages = KMNThumbnailManager.manager.copyPages
-        let page = copyPages.first
-        if page?.document == showDocument {
-            for (i, page) in copyPages.enumerated() {
-                let zCopyPage = page.copy() as? CPDFPage
-                if(zCopyPage != nil) {
-                    showDocument?.insertPageObject(zCopyPage, at: UInt(pastIndex+i))
-                    indexpaths.insert(IndexPath(item: pastIndex+i, section: 0))
+        if(point != nil) {
+            let pointInCollectionView = collectionView.convert(point!, from: nil)
+            
+            let visibleItems = collectionView.visibleItems()
+            let mouseX = pointInCollectionView.x
+            let mouseY = pointInCollectionView.y
+            
+            // 获取当前行的所有 cell
+            let currentRowItems = visibleItems.filter { item in
+                if let indexPath = collectionView.indexPath(for: item),
+                   let cellAttributes = collectionView.layoutAttributesForItem(at: indexPath) {
+                    return cellAttributes.frame.minY <= mouseY && cellAttributes.frame.maxY >= mouseY
                 }
+                return false
+            }
+            if(mouseX < 24) { //点击区域在最左边
+                // 找到最近右边的 cell
+                let rightMostCell = currentRowItems.compactMap { collectionView.indexPath(for: $0) }
+                    .filter { indexPath in
+                        let cellRect = collectionView.layoutAttributesForItem(at: indexPath)?.frame
+                        return cellRect?.minX ?? 0 > mouseX // 只选择右侧的 cell
+                    }
+                    .sorted { ($0.item < $1.item) } // 按 item 的顺序排列
+                    .first // 选择第一个,即最右边的 cell
+                pastIndex = (rightMostCell?.item ?? (Int(showDocument?.pageCount ?? 1)))
+            } else {
+                // 找到最近右边的 cell
+                let leftMostCell = currentRowItems.compactMap { collectionView.indexPath(for: $0) }
+                    .filter { indexPath in
+                        let cellRect = collectionView.layoutAttributesForItem(at: indexPath)?.frame
+                        return cellRect?.maxX ?? 0 < mouseX // 只选择左侧的 cell
+                    }
+                    .sorted { $0.item > $1.item } // 按 item 的逆序排列,以选择最近的左侧 cell
+                    .first // 选择第一个,即最近的左边的 cell
+                
+                pastIndex = (leftMostCell?.item ?? (Int(showDocument?.pageCount ?? 1)) - 1) + 1
             }
         } else {
-            if let pasteDocument = page?.document {
-                var indexs: IndexSet = IndexSet()
-                for (i, _) in copyPages.enumerated() {
-                    indexs.insert(i)
-                    indexpaths.insert(IndexPath(item: pastIndex+i, section: 0))
-                }
-                showDocument?.importPages(indexs, from: pasteDocument, at: UInt(pastIndex))
+            let selectedIndexPaths = collectionView.selectionIndexPaths
+            if(selectedIndexPaths.count > 0) {
+                let maxmumIndexPath = selectedIndexPaths.max(by: { $0 < $1 })
+                pastIndex = ((maxmumIndexPath?.item ?? 0) + 1)
+            } else {
+                pastIndex = Int(showDocument?.pageCount ?? 0)
             }
         }
-        refreshDatas()
-        collectionView.reloadData()
-        collectionView.selectionIndexPaths = indexpaths
+        let copyPages = KMNThumbnailManager.manager.copyPages
+
+        insertFormPages(insertPages: copyPages, pageDex: pastIndex)
     }
 
     @objc public func cutMenuItemAciton() {
@@ -521,11 +560,9 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
             
             KMNThumbnailManager.manager.copyDocument.append(showDocument ?? CPDFDocument())
             KMNThumbnailManager.manager.copyPages.append(page)
-            
-            showDocument?.removePage(at: UInt(indexpath.item))
-            refreshDatas()
-            collectionView.reloadData()
         }
+
+        deletePages(indexpaths: indexpaths)
     }
     
     @objc public func deleteMenuItemAciton() {
@@ -535,12 +572,7 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
             return
         }
         let indexpaths = collectionView.selectionIndexPaths
-        for indexpath in indexpaths.sorted() {
-          
-            showDocument?.removePage(at: UInt(indexpath.item))
-            refreshDatas()
-            collectionView.reloadData()
-        }
+        deletePages(indexpaths: indexpaths)
     }
     
     @objc func sharePageItemAction(menuItem:NSMenuItem) {
@@ -551,7 +583,7 @@ class KMNPageEditViewController: KMNThumbnailBaseViewController {
         }
         let indexpaths = collectionView.selectionIndexPaths
 
-        let doucument = self.showDocument
+        let doucument = showDocument
         let filename : String = doucument?.documentURL.lastPathComponent ?? ""
         let folderPath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(filename)) ?? ""
         

+ 103 - 22
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailBaseViewController+Action.swift

@@ -9,16 +9,100 @@ import Foundation
 
 extension KMNThumbnailBaseViewController {
     
+    private func undoDeleteIndexPaths(deleteIndexPath: Set<IndexPath>) {
+        var changeIndex:IndexSet = []
+        for targetIndexPath in deleteIndexPath {
+            changeIndex.insert(targetIndexPath.item)
+        }
+        showDocument?.removePage(at: changeIndex)
+        refreshDatas()
+        collectionView.reloadData()
+    }
+    
+    private func undoInsertPages(insertPages:[CPDFPage],deleteIndexs: [Int]) {
+        var indexpaths = Set<IndexPath>()
+        for (i, page) in insertPages.enumerated() {
+            let index = deleteIndexs[i]
+            showDocument?.insertPageObject(page, at: UInt(index))
+            indexpaths.insert(IndexPath(item: index, section: 0))
+        }
+        refreshDatas()
+        collectionView.reloadData()
+        collectionView.scrollToItems(at: indexpaths, scrollPosition: .centeredVertically)
+        collectionView.selectionIndexPaths = indexpaths
+    }
+    
+    private func undoRotatePages(indexPaths: Set<IndexPath>, rotateAngle: Int) {
+        var tIndexPaths: Set<IndexPath> = []
+        tIndexPaths = indexPaths
+        for targetIndexPath in indexPaths {
+            if let page = showDocument?.page(at: UInt(targetIndexPath.item)) {
+                var pageRotate = page.rotation + rotateAngle
+                if(pageRotate  == -90) {
+                    pageRotate = 270
+                } else if (pageRotate == 450) {
+                    pageRotate = 90
+                    
+                }
+                page.rotation = pageRotate
+            }
+        }
+        
+        collectionView.reloadItems(at: tIndexPaths) // Ensure correct type conversion
+        collectionView.selectionIndexPaths = tIndexPaths
+    }
+    
+    private func undoReplacePages(replacePages:[CPDFPage],orgPages:[CPDFPage]) {
+        
+    }
+    
+    private func undomovePages(movePages:[CPDFPage],orgIndexs:[Int]) {
+        
+    }
+    
+    private func undoReversePages(indexs: IndexSet) {
+        
+    }
+    
+    func insertFileComplete(newSelectIndexs: Set<IndexPath>){
+        refreshDatas()
+        collectionView.reloadData()
+        
+        collectionView.selectionIndexPaths = newSelectIndexs
+        
+        if newSelectIndexs.isEmpty { return }
+        
+        let firstIndexPath = newSelectIndexs.first
+       collectionView.scrollToItems(at: [firstIndexPath ?? IndexPath(item: 0, section: 0)], scrollPosition: .top)
+    }
+    
     public func insertFormPages(insertPages: [CPDFPage],pageDex:Int) {
         var pageIndexDex: Int = pageDex
         var indexpaths = Set<IndexPath>()
-        for page in insertPages {
-            let isSuccessFul = showDocument?.insertPageObject(page, at: UInt(pageIndexDex))
-            if(isSuccessFul == true) {
-                indexpaths.insert(IndexPath(item: pageIndexDex, section: 0))
-                pageIndexDex += 1
+        
+        let page = insertPages.first
+        if page?.document == showDocument {
+            for (i, page) in insertPages.enumerated() {
+                let isSuccessFul:Bool = showDocument?.insertPageObject(page, at: UInt(pageIndexDex+i)) == true
+                if(isSuccessFul == true) {
+                    indexpaths.insert(IndexPath(item: pageIndexDex+i, section: 0))
+                }
+            }
+        } else {
+            if let pasteDocument = page?.document {
+                var indexs: IndexSet = IndexSet()
+                for (i, page) in insertPages.enumerated() {
+                    indexs.insert(Int(pasteDocument.index(for: page)))
+                    indexpaths.insert(IndexPath(item: pageIndexDex+i, section: 0))
+                }
+                
+                let isSuccessFul:Bool = showDocument?.importPages(indexs, from: pasteDocument, at: UInt(pageIndexDex)) == true
+                if(isSuccessFul == false){
+                    return
+                }
             }
         }
+        
         refreshDatas()
         collectionView.reloadData()
         collectionView.scrollToItems(at: indexpaths, scrollPosition: .centeredVertically)
@@ -47,7 +131,7 @@ extension KMNThumbnailBaseViewController {
         }
         return isSuccessFul
     }
-    
+
     public func rotatePages(indexPaths: Set<IndexPath>, rotateAngle: Int) {
         var tIndexPaths: Set<IndexPath> = []
         tIndexPaths = indexPaths
@@ -120,7 +204,7 @@ extension KMNThumbnailBaseViewController {
         for document in documents {
             for i in 0 ..< document.pageCount {
                 let page = document.page(at: i)
-                self.showDocument?.insertPageObject(page, at: UInt(index))
+                showDocument?.insertPageObject(page, at: UInt(index))
                 tIndexPaths.insert(IndexPath(item: index, section: 0))
                 index += 1
             }
@@ -134,23 +218,18 @@ extension KMNThumbnailBaseViewController {
     
     public func deletePages(indexpaths:Set<IndexPath>) {
         var changeIndex:IndexSet = []
-        var tIndexPaths: Set<IndexPath> = []
-        tIndexPaths = indexpaths
+        var deletePages:[CPDFPage] = []
         
-        for targetIndexPath in tIndexPaths {
+        for targetIndexPath in indexpaths {
+            let dex = targetIndexPath.item
+            deletePages.append(showDocument?.page(at: UInt(targetIndexPath.item)) ?? CPDFPage())
             changeIndex.insert(targetIndexPath.item)
-            
-            let cellView = collectionView.item(at: targetIndexPath) as? KMNThumbnailCollectionViewItem
-            if(cellView != nil) {
-                cellView?.thumbnailMode.removeCacheImage()
-            }
-            
         }
         showDocument?.removePage(at: changeIndex)
         refreshDatas()
         collectionView.reloadData()
     }
-    
+        
     public func movePages(pages:[CPDFPage],destinationDex:Int) {
         var destinationIndex = destinationDex
         
@@ -205,6 +284,7 @@ extension KMNThumbnailBaseViewController {
                         if(tFormDex < fileNames.count) {
                             return self.insertFromFilePath(fileNames: fileNames, formDex: tFormDex, indexDex: indexDex, selectIndexs: tSelectIndex,completionBlock: completionBlock)
                         } else {
+                            self.insertFileComplete(newSelectIndexs: tSelectIndex)
                             return completionBlock(tSelectIndex)
                         }
                     }
@@ -218,10 +298,11 @@ extension KMNThumbnailBaseViewController {
                 }
                 var tFormDex = formDex
                 tFormDex += 1
-                self.thumbnailBaseViewDelegate?.insertPDFThumbnailViewControlle?(pageEditVC: self, pdfDocment: pdf)
+                thumbnailBaseViewDelegate?.insertPDFThumbnailViewControlle?(pageEditVC: self, pdfDocment: pdf)
                 if(tFormDex < fileNames.count) {
-                    return self.insertFromFilePath(fileNames: fileNames, formDex: tFormDex, indexDex: indexDex, selectIndexs: tSelectIndex,completionBlock: completionBlock)
+                    return insertFromFilePath(fileNames: fileNames, formDex: tFormDex, indexDex: indexDex, selectIndexs: tSelectIndex,completionBlock: completionBlock)
                 } else {
+                    insertFileComplete(newSelectIndexs: tSelectIndex)
                     return completionBlock(tSelectIndex)
                 }
                 
@@ -237,8 +318,9 @@ extension KMNThumbnailBaseViewController {
                 var tFormDex = formDex
                 tFormDex += 1
                 if(tFormDex < fileNames.count) {
-                    return self.insertFromFilePath(fileNames: fileNames, formDex: tFormDex, indexDex: indexDex, selectIndexs: tSelectIndex,completionBlock: completionBlock)
+                    return insertFromFilePath(fileNames: fileNames, formDex: tFormDex, indexDex: indexDex, selectIndexs: tSelectIndex,completionBlock: completionBlock)
                 } else {
+                    insertFileComplete(newSelectIndexs: tSelectIndex)
                     return completionBlock(tSelectIndex)
                 }
                 
@@ -260,6 +342,7 @@ extension KMNThumbnailBaseViewController {
                             if(tFormDex < fileNames.count) {
                                 return self.insertFromFilePath(fileNames: fileNames, formDex: tFormDex, indexDex: indexDex, selectIndexs: tSelectIndex,completionBlock: completionBlock)
                             } else {
+                                self.insertFileComplete(newSelectIndexs: tSelectIndex)
                                 return completionBlock(tSelectIndex)
                             }
                             
@@ -356,7 +439,5 @@ extension KMNThumbnailBaseViewController {
                 }
             }
         }
-        
     }
-    
 }

+ 44 - 22
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailBaseViewController.swift

@@ -36,9 +36,10 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
     @IBOutlet var collectionView: KMNThumbnailCollectionView!
         
     private var currentDocument:CPDFDocument?
-    private var thumbnails:[KMNThumbnail] = []
     private var isChangeIndexPaths = false
     
+    public var thumbnails:[KMNThumbnail] = []
+
     public var dragLocalityPages: [CPDFPage] = []
 
     public var currentUndoManager:UndoManager?
@@ -165,7 +166,7 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
         }
         
         if document?.allowsCopying == false || document?.allowsPrinting == false {
-            self.exitCurrentView()
+           exitCurrentView()
         } else {
             currentDocument = document
         }
@@ -185,9 +186,10 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
         
         collectionView.register(KMNThumbnailCollectionViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "thumbnailCollectionViewItem"))
         
-        collectionView.registerForDraggedTypes([.fileURL])
+        collectionView.registerForDraggedTypes([.fileURL,.string,.pdf])
         collectionView.setDraggingSourceOperationMask(.every, forLocal: false)
         collectionView.setDraggingSourceOperationMask(.every, forLocal: true)
+
         
         refreshDatas()
     }
@@ -230,7 +232,7 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
     
     func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
         if isChangeIndexPaths == false {
-            let indexpathsz = self.collectionView.selectionIndexPaths
+            let indexpathsz = collectionView.selectionIndexPaths
             let dex:IndexSet = KMNTools.indexpathsToIndexs(indexpaths: indexpathsz)
             let selectedIndexPathsString = KMNTools.parseIndexSet(indexSet: dex)
             
@@ -353,16 +355,28 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
                 proposedDropOperation.pointee = .before
             }
             return .move
-        } else if let availableType = pboard.availableType(from: [.fileURL]), availableType == .fileURL {
-            if let fileNames = pboard.propertyList(forType: .fileURL) as? [String], fileNames.count >= 1 {
-                let path = fileNames.first!
-                let pathExtension = URL(fileURLWithPath: path).pathExtension.lowercased()
-                if pathExtension == "pdf" || supportDragFileTypes().contains(pathExtension) {
-                    return .copy
+        } else if ((pboard.availableType(from: [.fileURL])) != nil) {
+            guard let pbItems = pboard.pasteboardItems else {
+                return NSDragOperation(rawValue: 0)
+            }
+            
+            var hasValidFile = false
+            for item in pbItems {
+                guard let data = item.string(forType: .fileURL), let url = URL(string: data) else {
+                    continue
+                }
+                let type = url.pathExtension.lowercased()
+                if (supportDragFileTypes().contains(type)) {
+                    hasValidFile = true
+                    break
                 }
             }
+            
+            if (!hasValidFile) {
+                return NSDragOperation(rawValue: 0)
+            }
         }
-        return []
+        return .copy
     }
     
     func collectionView(_ collectionView: NSCollectionView,
@@ -373,20 +387,28 @@ class KMNThumbnailBaseViewController: KMNBaseViewController,NSCollectionViewDele
         if dragLocalityPages.count != 0 {
             movePages(pages: dragLocalityPages, destinationDex: indexPath.item)
             return true
-        } else if let availableType = pboard.availableType(from: [.fileURL]), availableType == .fileURL {
+        } else if ((pboard.availableType(from: [.fileURL])) != nil) {
             let index = indexPath.item
             
-            if let fileNames = pboard.propertyList(forType: .fileURL) as? [String] {
+            guard let pbItems = pboard.pasteboardItems else {
+                return false
+            }
+            
+            //获取url
+            var fileNames: [String] = []
+            for item in pbItems {
+                guard let data = item.string(forType: .fileURL), let url = URL(string: data) else {
+                    continue
+                }
+                let type = url.pathExtension.lowercased()
+                if (supportDragFileTypes().contains(type)) {
+                    if(FileManager.default.fileExists(atPath: url.path)) {
+                        fileNames.append(url.path)
+                    }
+                }
+            }
+            if(fileNames.count > 0) {
                 insertFromFilePath(fileNames: fileNames, formDex: 0, indexDex: UInt(index), selectIndexs: []) { newSelectIndexs in
-                    self.refreshDatas()
-                    self.collectionView.reloadData()
-                    
-                    self.collectionView.selectionIndexPaths = newSelectIndexs
-                    
-                    if newSelectIndexs.isEmpty { return }
-                    
-                    let firstIndexPath = newSelectIndexs.first
-                    self.collectionView.scrollToItems(at: [firstIndexPath ?? IndexPath(item: 0, section: 0)], scrollPosition: .top)
                 }
                 
                 return true

+ 0 - 1
PDF Office/PDF Master/KMClass/KMNPDFPageEdit/KMNThumbnailView/KMNThumbnailCollectionViewItem.swift

@@ -60,7 +60,6 @@ class KMNThumbnailCollectionViewItem: NSCollectionViewItem {
                 }
                 self.cardFileView.reloadData()
             }
-            
         }
     }
     

+ 60 - 25
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -8,7 +8,7 @@
 import Cocoa
 
 @objcMembers class KMMainViewController: KMBaseViewController, NSTextFieldDelegate {
-     
+    
     @IBOutlet var contendBox: NSBox!
     
     @IBOutlet var toolbarBox: NSBox! //工具栏Box
@@ -57,8 +57,9 @@ import Cocoa
     
     //PPT操作界面
     var presentationTopViewController: KMPresentationTopViewController?
-
     
+    //水印
+    var watermarkViewController: KMWatermarkController?
     
     
     
@@ -74,16 +75,16 @@ import Cocoa
     @IBOutlet weak var mianSplitView: KMSplitView!
     @IBOutlet weak var newPDFSplitView: KMSplitView!
     @IBOutlet weak var pdfContentView: NSView!
-     
+    
     @IBOutlet var childToolbarController: KMToolbarViewController!
     @IBOutlet var toolbarController: KMToolbarController!
     @IBOutlet weak var heightOffset: NSLayoutConstraint!
     
     //页码显示器
     @IBOutlet weak var pageNumberDisplayView: KMPageNumberDisplayView!
-  
+    
     var model = KMMainModel()
-     
+    
     //自动滚动
     var autoFlowOptionsSheetController: KMAutoFlowOptionsSheetController?
     
@@ -105,6 +106,8 @@ import Cocoa
     var mergeWindowController: KMMergeWindowController?
     //水印
     var watermarkWindowController: KMWatermarkWindowController?
+    
+    
     //密码弹窗
     var passwordWindow: KMPasswordInputWindow?
     //对比
@@ -486,7 +489,7 @@ import Cocoa
             NotificationCenter.default.addObserver(self, selector: #selector(didEnterInteractionModeNotification), name: NSWindow.didEnterInteractionModeNotification, object: nil)
             NotificationCenter.default.addObserver(self, selector: #selector(willShowFullScreenNotification), name: NSWindow.willShowFullScreenNotification, object: nil)
             NotificationCenter.default.addObserver(self, selector: #selector(didShowFullScreenNotification), name: NSWindow.didShowFullScreenNotification, object: nil)
-           
+            
             view.window?.enterPresentation(provider: self)
         }
     }
@@ -515,7 +518,7 @@ import Cocoa
         NotificationCenter.default.removeObserver(self, name: NSWindow.didEnterInteractionModeNotification, object: nil)
         NotificationCenter.default.removeObserver(self, name: NSWindow.willShowFullScreenNotification, object: nil)
         NotificationCenter.default.removeObserver(self, name: NSWindow.willShowFullScreenNotification, object: nil)
-         
+        
     }
     
     func exitFullScreen() {
@@ -630,7 +633,7 @@ import Cocoa
         mainWindow?.display()
         mainWindow?.makeFirstResponder(self.listView)
         mainWindow?.recalculateKeyViewLoop()
-//        mainWindow?.delegate = self
+        //        mainWindow?.delegate = self
         mainWindow?.makeKey()
         
         if let data = mainWindow?.responds(to: NSSelectorFromString("setAnimationBehavior:")), data {
@@ -690,7 +693,35 @@ import Cocoa
         }
     }
     
+    //MARK: - Watermark水印
+    func showWatermarkController() {
+        if watermarkViewController == nil {
+            watermarkViewController = KMWatermarkController.init()
+        }
+        watermarkViewController?.view.frame = CGRectMake(44, 0, CGRectGetWidth(bottomContendBox.frame)-44, CGRectGetHeight(bottomContendBox.frame))
+        watermarkViewController?.view.autoresizingMask = [.maxXMargin, .width, .height]
+        bottomContendBox.addSubview(watermarkViewController!.view)
+        
+        updateWatermarkDocument()
+    }
     
+    func updateWatermarkDocument() {
+        
+        guard let controller = watermarkViewController else { return }
+        
+        let document = CPDFDocument.init()
+        let page = listView.document.page(at: UInt(listView.currentPageIndex))
+        document?.insertPageObject(page, at: 0)
+        
+        watermarkViewController?.pdfDocument = document
+        watermarkViewController?.reloadData()
+    }
+    
+    func exitWatermarkController() {
+        watermarkViewController?.view.removeFromSuperview()
+        watermarkViewController = nil
+        
+    }
     
 }
 
@@ -911,6 +942,10 @@ extension KMMainViewController: KMPDFToolbarControllerDelegate {
                 toolbarManager.page_pageInfo_Property.creatable = true
             }
             controller.refreshSecondToolbarItemsState()
+        } else if itemIdentifier == KMPDFToolbar_edit_addWatermark_Identifier {
+            showWatermarkController()
+        } else {
+            print("click else")
         }
         
         refreshToolbarView()
@@ -961,7 +996,7 @@ extension KMMainViewController: KMNDisplayViewControllerDelegate {
 //MARK: - PPT
 extension KMMainViewController: KMInteractionProviderProtocol {
     func providerContentView(fullScreenWindow: NSWindow, inset: CGFloat) -> NSView? {
-         if(interactionMode == .presentation) {
+        if(interactionMode == .presentation) {
             if listView.presentationDrawView == nil {
                 listView.createPresentationDraw()
             }
@@ -987,7 +1022,7 @@ extension KMMainViewController: KMInteractionProviderProtocol {
         }
         return view
     }
-     
+    
     @objc func willEnterInteractionModeNotification(_ sender: Notification) {
         guard let win = sender.object as? NSWindow, win.isEqual(to: self.view.window) else {
             return
@@ -1010,19 +1045,19 @@ extension KMMainViewController: KMInteractionProviderProtocol {
                 self.listView.frame = (self.view.window?.contentView?.bounds)!
                 self.view.window?.contentView?.addSubview(listView)
                 
-//                self.view.window?.backgroundColor = backgroundColor
+                //                self.view.window?.backgroundColor = backgroundColor
                 self.view.window?.level = level
                 self.listView.layoutDocumentView()
                 self.listView.requiresDisplay()
                 
                 self.forceSubwindowsOnTop(false)
-                 
+                
             }
         } else {
             KMPrint("2")
         }
     }
-     
+    
     @objc func didEnterInteractionModeNotification(_ sender: Notification) {
         guard let win = sender.object as? NSWindow, win.isEqual(to: self.view.window) else {
             return
@@ -1118,11 +1153,11 @@ extension KMMainViewController: KMSplitPDFViewControllerDelegate {
 extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
     func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) {
         sideBarController?.reloadPageTurnerData()
-         
+        
     }
     
     func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
-  
+        
         sideBarController?.reloadPageTurnerData()
         
         reloadPDFBottomToolbar()
@@ -1351,14 +1386,14 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         
         if theEvent.keyCode == 53 {
             //ESC
-//            self.exitFullScreen()
+            //            self.exitFullScreen()
             
             if viewManager.isPDFReadMode {
                 self.exitPDFReadMode()
             }
             
             self.leftSideViewCancelSelect()
-             
+            
         }
         return true
     }
@@ -1507,7 +1542,7 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
     
     ///开始定位链接注释
     func pdfListViewLinkDestinationStart(_ pdfListView: CPDFListView!, withActiveAnnotation annotation: CPDFAnnotation!) {
-          
+        
     }
     
     ///刷新链接注释
@@ -1806,7 +1841,7 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         if (self.listView.toolMode != .selectToolMode) {
             return
         }
-           
+        
     }
     
     func pdfListViewKeyDowClosePanel(_ speedy: CPDFViewSidebarSpeedMode, event theEvent: NSEvent!) {
@@ -2115,7 +2150,7 @@ extension KMMainViewController {
                 }
             }
         }
- 
+        
         self.addEventMonitor()
         
         self.view.window?.makeFirstResponder(self.listView)
@@ -2179,9 +2214,9 @@ extension KMMainViewController {
     
     func viewWillLayoutFunction() {
         if (KMTools.isFullScreen(self.view.window ?? NSWindow())) { // 全屏
-             self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundFullScreenColor
+            self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundFullScreenColor
         } else {
-             self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundNormalColor
+            self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundNormalColor
         }
         if let guideWC = self.guideInfoWindowController{
             var rect = self.view.window!.frame
@@ -2214,7 +2249,7 @@ extension KMMainViewController {
         mianSplitView.setPosition(mianSplitView.minPossiblePositionOfDivider(at: 0), ofDividerAt: 0)
         
         pdfSplitView.setPosition(mianSplitView.maxPossiblePositionOfDivider(at: 1), ofDividerAt: 0)
-         
+        
         if (KMPreferenceManager.shared.openLastUnlockedDocumentWhenAppStart) {
             if (self.listView.document != nil) {
                 let pageNumber = KMPreferenceManager.shared.getPageNumber(forKey: self.listView.document?.documentURL.path ?? "")
@@ -2259,7 +2294,7 @@ extension KMMainViewController {
         
         NotificationCenter.default.addObserver(self, selector: #selector(handlePageChangedNotification), name: NSNotification.Name.CPDFViewPageChanged, object: self.listView)
         NotificationCenter.default.addObserver(self, selector: #selector(handleDisplayBoxChangedNotification), name: NSNotification.Name.CPDFViewDisplayBoxChanged, object: self.listView)
-       
+        
         
         NotificationCenter.default.addObserver(self, selector: #selector(didAddContentViewNotification), name: NSWindow.didAddContentViewNotification, object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(addAutoSaveEvent), name: AutoSaveManager.kTimeValueChangedNotificationName, object: nil)
@@ -3783,7 +3818,7 @@ extension KMMainViewController {
             NSSpellChecker.shared.closeSpellDocument(withTag: self.listView.spellingTag())
         }
         self.removeAutoSaveInfo()
-
+        
         self.myDocument = nil
         
     }

+ 6 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

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

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

+ 91 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/edit_ocapity.imageset/edit_ocapity.pdf

@@ -0,0 +1,91 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.250980 0.274510 0.325490 scn
+1.500000 1.499939 m
+1.500000 12.499939 l
+12.500000 12.499939 l
+12.500000 1.499939 l
+1.500000 1.499939 l
+h
+0.000000 12.999939 m
+0.000000 13.552223 0.447715 13.999939 1.000000 13.999939 c
+13.000000 13.999939 l
+13.552284 13.999939 14.000000 13.552223 14.000000 12.999939 c
+14.000000 0.999939 l
+14.000000 0.447655 13.552284 -0.000061 13.000000 -0.000061 c
+1.000000 -0.000061 l
+0.447716 -0.000061 0.000000 0.447655 0.000000 0.999939 c
+0.000000 12.999939 l
+h
+11.000000 10.999939 m
+7.000000 10.999939 l
+7.000000 6.999939 l
+3.000000 6.999939 l
+3.000000 2.999939 l
+7.000000 2.999939 l
+7.000000 6.999939 l
+11.000000 6.999939 l
+11.000000 10.999939 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  767
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 15.999939 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000857 00000 n
+0000000879 00000 n
+0000001052 00000 n
+0000001126 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1185
+%%EOF

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

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

+ 83 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/edit_rotateRight.imageset/edit_rotateRight.pdf

@@ -0,0 +1,83 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.849854 1.649902 cm
+0.250980 0.274510 0.325490 scn
+11.142200 7.101053 m
+10.781237 9.422997 8.773140 11.200012 6.350000 11.200012 c
+3.671418 11.200012 1.500000 9.028593 1.500000 6.350012 c
+1.500000 3.671431 3.671418 1.500012 6.350000 1.500012 c
+7.234642 1.500012 8.061850 1.736176 8.774456 2.148396 c
+9.525544 0.849988 l
+8.590780 0.309257 7.505365 0.000012 6.350000 0.000012 c
+2.842992 0.000012 0.000000 2.843004 0.000000 6.350012 c
+0.000000 9.857020 2.842992 12.700012 6.350000 12.700012 c
+9.314274 12.700012 11.804151 10.668878 12.503809 7.922430 c
+12.965594 9.645836 l
+14.414483 9.257607 l
+13.462029 5.703000 l
+13.354823 5.302900 12.943570 5.065464 12.543470 5.172670 c
+8.988863 6.125124 l
+9.377091 7.574013 l
+11.142200 7.101053 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  810
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 15.999939 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000900 00000 n
+0000000922 00000 n
+0000001095 00000 n
+0000001169 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1228
+%%EOF

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

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

+ 66 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/icon_wm_template.imageset/icon_wm_template.pdf

@@ -0,0 +1,66 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Filter /FlateDecode
+     /Length 3 0 R
+  >>
+stream
+x½“ÍNÃ0„ï~
+Ÿ‘’f�?ç
+Hœ�G°Š@r*¡J<?ãÄÞ]HPE‘ØK¦Ÿ½³§9Ü?ÞÂñéáÖÞ=›ƒü
+gón¨n–²M+^£Úõx¦MY„Ù,zò»ž’h]ßM�=‡–±e©­Çµ)õà‰²ÔÕ#
Ý4¢iômß�¥¾^¶a±4
+†vh4äV¯(•§`UžB„%Ã|4geŠàFðÛ°ˆÈÙ„™ß—Ø  O”:p4¯2Ùð@áZ©ˆ&7)H%Ú½÷͈V(›¤#/
+°0Ü€°â+‚—òv&ðÚB˜Ñv¾“S_…²üò‰a¨i±–!rì$ž[˜®õåÆœÌ㯿˜duùƒ˜ÊäŠÃ̆¥À¨ K–(@iß…Üó—4øC®êržW
Eé4|ÍÑôÉõäv�[ÁëÓ\õnxòlX
+rýv!÷ü{¼QìD}‰#TçñEé£ïBÝÏ�>Gb<
+endstream
+endobj
+
+3 0 obj
+  372
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000490 00000 n
+0000000512 00000 n
+0000000685 00000 n
+0000000759 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+818
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_horiz.imageset/tile_spacing_horiz.pdf

@@ -0,0 +1,89 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.250000 2.000000 cm
+0.000000 0.000000 0.000000 scn
+1.500000 12.000000 m
+1.500000 -0.000001 l
+0.000000 -0.000001 l
+0.000000 12.000000 l
+1.500000 12.000000 l
+h
+10.921574 5.249999 m
+4.578427 5.249999 l
+4.578427 3.171515 l
+1.750000 5.999941 l
+4.578427 8.828368 l
+4.578427 6.749999 l
+10.921574 6.749999 l
+10.921574 8.828486 l
+13.750000 6.000059 l
+10.921574 3.171632 l
+10.921574 5.249999 l
+h
+15.500001 0.000000 m
+15.500000 12.000000 l
+14.000000 12.000000 l
+14.000001 0.000000 l
+15.500001 0.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  570
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000660 00000 n
+0000000682 00000 n
+0000000855 00000 n
+0000000929 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+988
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_horiz_dis.imageset/tile_spacing_horiz_dis.pdf

@@ -0,0 +1,89 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.250000 2.000000 cm
+0.717647 0.729412 0.749020 scn
+1.500000 12.000000 m
+1.500000 -0.000001 l
+0.000000 -0.000001 l
+0.000000 12.000000 l
+1.500000 12.000000 l
+h
+10.921574 5.249999 m
+4.578427 5.249999 l
+4.578427 3.171515 l
+1.750000 5.999941 l
+4.578427 8.828368 l
+4.578427 6.749999 l
+10.921574 6.749999 l
+10.921574 8.828486 l
+13.750000 6.000059 l
+10.921574 3.171632 l
+10.921574 5.249999 l
+h
+15.500001 0.000000 m
+15.500000 12.000000 l
+14.000000 12.000000 l
+14.000001 0.000000 l
+15.500001 0.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  570
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000660 00000 n
+0000000682 00000 n
+0000000855 00000 n
+0000000929 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+988
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_vert.imageset/tile_spacing_vert.pdf

@@ -0,0 +1,89 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 0.250000 cm
+0.000000 0.000000 0.000000 scn
+12.000000 14.000000 m
+0.000000 14.000000 l
+0.000000 15.500000 l
+12.000000 15.500000 l
+12.000000 14.000000 l
+h
+5.250000 4.578426 m
+5.250000 10.921574 l
+3.171515 10.921574 l
+5.999942 13.750000 l
+8.828369 10.921574 l
+6.750000 10.921574 l
+6.750000 4.578426 l
+8.828486 4.578426 l
+6.000058 1.750000 l
+3.171632 4.578426 l
+5.250000 4.578426 l
+h
+0.000000 0.000000 m
+12.000001 0.000000 l
+12.000001 1.500000 l
+0.000000 1.500000 l
+0.000000 0.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  567
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000657 00000 n
+0000000679 00000 n
+0000000852 00000 n
+0000000926 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+985
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/Watermark/tile_spacing_vert_dis.imageset/tile_spacing_vert_dis.pdf

@@ -0,0 +1,89 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 0.250000 cm
+0.717647 0.729412 0.749020 scn
+12.000000 14.000000 m
+0.000000 14.000000 l
+0.000000 15.500000 l
+12.000000 15.500000 l
+12.000000 14.000000 l
+h
+5.250000 4.578426 m
+5.250000 10.921574 l
+3.171515 10.921574 l
+5.999942 13.750000 l
+8.828369 10.921574 l
+6.750000 10.921574 l
+6.750000 4.578426 l
+8.828486 4.578426 l
+6.000058 1.750000 l
+3.171632 4.578426 l
+5.250000 4.578426 l
+h
+0.000000 0.000000 m
+12.000001 0.000000 l
+12.000001 1.500000 l
+0.000000 1.500000 l
+0.000000 0.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  567
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000657 00000 n
+0000000679 00000 n
+0000000852 00000 n
+0000000926 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+985
+%%EOF

+ 1 - 1
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/Base/KMWatermarkAdjectivePropertyBaseController.xib

@@ -381,7 +381,7 @@
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
                             <textView importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="HaX-3g-Efp">
-                                <rect key="frame" x="0.0" y="0.0" width="213" height="90"/>
+                                <rect key="frame" x="0.0" y="0.0" width="214" height="90"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
                                 <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>

+ 0 - 269
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/Controller/KMWatermarkViewController.swift

@@ -1,269 +0,0 @@
-//
-//  KMWatermarkViewController.swift
-//  PDF Reader Pro
-//
-//  Created by tangchao on 2022/12/15.
-//
-
-import Cocoa
-/// 水印 预览控制器
-class KMWatermarkViewController: KMWatermarkAdjectivePreViewBaseController {
-    
-    var createController: KMWatermarkPropertyCreateController!
-    var propertyController: KMWatermarkPropertyController!
-    var editController: KMWatermarkPropertyCreateController!
-
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        
-        let itemTitles = [[NSLocalizedString("Add Watermark", comment: ""), NSLocalizedString("Delete Watermark", comment: "")], [NSLocalizedString("Batch", comment: "")]]
-        var itemModels: Array<Array<KMWatermarkAdjectiveTopBarItemModel>> = []
-        for items in itemTitles {
-            var array: Array<KMWatermarkAdjectiveTopBarItemModel> = []
-            for title in items {
-                let model = KMWatermarkAdjectiveTopBarItemModel()
-                model.iconName = ""
-                model.itemTitle = title
-                array.append(model)
-            }
-            itemModels.append(array)
-        }
-        
-        self.topBarView.initItemData(itemArrays: itemModels)
-        self.topBarView.selectTopItem(index: 0)
-        
-        let preView: KMWatermarkPDFView_OC = KMWatermarkPDFView_OC()
-        self.preView = preView
-        self.preView.frame = self.preViewBox.contentView!.bounds
-        self.preView.autoresizingMask = [.width, .height]
-        self.preViewBox.contentView?.addSubview(self.preView)
-        self.preView.setDisplay(.singlePage)
-        
-        let controller = KMWatermarkPropertyHomeController()
-        controller.preView = self.preView
-        controller.view.frame = self.rightBox.contentView!.bounds
-        controller.view.autoresizingMask = [.width, .height]
-        self.right_gotoViewController(viewController: controller)
-        controller.modelDidChange = { [weak self] model in
-            if (model == nil) {
-                self!.topBarView.isCanApply(can: false)
-            } else {
-                self!.topBarView.isCanApply(can: true)
-            }
-            
-            self!.model = model
-            (self?.preView as! KMWatermarkPDFView_OC).model = model as Any
-        }
-    }
-    
-    override func viewDidAppear() {
-        super.viewDidAppear()
-        
-        (self.rightViewController as! KMWatermarkPropertyHomeController).pageCount = Int(self.preView.document.pageCount)
-    }
-    
-    override func applyAction() {
-        super.applyAction()
-        self.beginLoading()
-        
-        let preView: KMWatermarkPDFView_OC = self.preView as! KMWatermarkPDFView_OC
-        self.addWatermark(model: preView.model as! KMWatermarkModel, toPath: self.preView.document.documentURL.path) {
-            result  in
-            self.endLoading()
-            DispatchQueue.main.async {
-                self.preView.layoutDocumentView()
-                self.preView.setNeedsDisplayForVisiblePages()
-                
-                if (result) {
-                    guard let callback = self.itemClick else {
-                        return
-                    }
-                    callback(1, nil)
-                } else {
-                    let alert = NSAlert()
-                    alert.alertStyle = .critical
-                    alert.messageText = NSLocalizedString("Failure", comment: "")
-                    alert.runModal()
-                }
-            }
-        }
-    }
-    
-    override func topItemClick(index: Int) {
-        super.topItemClick(index: index)
-        if (index == 0) { /// 添加
-            return
-        }
-        if (index == 2) { /// 批量
-//            KMBatchWindowController.openFile(nil, .Watermark)
-            return
-        }
-        /// 移除水印
-        let watermarks = self.preView.document.watermarks()
-        if (watermarks == nil || watermarks!.count <= 0) {
-            let alert = NSAlert()
-            alert.alertStyle = .warning
-            alert.messageText = NSLocalizedString("PDF Reader Pro cannot find a watermark in this file to remove.If you see a watermark,it was not added in PDF Reader Pro,and cannot be detected as such?", comment: "")
-            alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
-            alert.runModal()
-            return
-        }
-        
-        let alert = NSAlert()
-        alert.alertStyle = .warning
-        alert.messageText = NSLocalizedString("Are you sure you want to remove the Watermark for”” documents?", comment: "")
-        alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
-        alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
-        let result = alert.runModal()
-        if (result != .alertFirstButtonReturn) {
-            return
-        }
-        
-        self.beginLoading()
-        self.deleteWatermarks(toPath: self.preView.document.documentURL.path) {
-            result  in
-            DispatchQueue.main.async {
-                self.preView.layoutDocumentView()
-                self.preView.setNeedsDisplayForVisiblePages()
-            }
-            self.endLoading()
-        }
-    }
-    
-    func gotoPropertyController() {
-        let propertyController = KMWatermarkPropertyController()
-        propertyController.view.frame = self.rightBox.contentView!.bounds
-        propertyController.view.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
-        self.right_gotoViewController(viewController: propertyController)
-        propertyController.preView = self.preView
-        
-        self.propertyController = propertyController
-        
-        self.propertyController.rightButtonClick = {
-            [self] (index: Int)->() in
-            /// 创建水印
-            
-            self.gotoPropertyCreateController()
-        }
-        self.propertyController.templateModelDidSelected = {
-            (model: KMWatermarkModel) in
-            
-            let preView: KMWatermarkPDFView = self.preView as! KMWatermarkPDFView
-            let templateModel: KMWatermarkTemplateModel = model as! KMWatermarkTemplateModel
-            if (templateModel.isSelected) {
-                preView.watermark = model
-                self.topBarView.isCanApply(can: true)
-            } else {
-                preView.watermark = KMWatermarkModel()
-                self.topBarView.isCanApply(can: false)
-            }
-            
-            preView.setNeedsDisplay(preView.bounds)
-        }
-        
-        self.propertyController.templateMenuItemClick = {
-            (itemIndex: Int, model: KMWatermarkModel) in
-            if (itemIndex == 1) {
-                self.gotoPropertyEditController()
-                let index: Int = self.propertyController.tabView.indexOfTabViewItem(self.propertyController.tabView.selectedTabViewItem!)
-                self.editController.updateModel(model: model, type: index)
-            }
-        }
-    }
-    
-    func gotoPropertyCreateController() {
-        let watermarks = self.preView.document.watermarks()
-        if (watermarks != nil && watermarks!.count > 0) { /// /// 替换水印
-            let alert = NSAlert()
-            alert.alertStyle = .warning
-            alert.messageText = NSLocalizedString("文件中已添加水印,您要替换现有的水印吗?", comment: "")
-            alert.addButton(withTitle: NSLocalizedString("替换", comment: ""))
-            alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
-            let result = alert.runModal()
-            if (result != .alertFirstButtonReturn) {
-                return
-            }
-
-            /// 替换
-            for i in 0 ..< watermarks!.count {
-                let model = watermarks![i]
-                self.preView.document.removeWatermark(model)
-            }
-
-            self.preView.setNeedsDisplayForVisiblePages()
-        }
-         
-        self.topBarView.isCanApply(can: true)
-        
-        let preView: KMWatermarkPDFView = self.preView as! KMWatermarkPDFView
-        preView.watermark = self.createWatermarkTemplate()
-        preView.setNeedsDisplay(preView.bounds)
-        
-        let createController = KMWatermarkPropertyCreateController()
-        createController.preView = preView
-        createController.model = self.createWatermarkTemplate()
-        createController.view.frame = self.rightBox.contentView!.bounds
-        createController.view.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
-        self.right_gotoViewController(viewController: createController)
-        self.createController = createController
-        
-        self.createController.tabView.selectTabViewItem(at: 0)
-        
-        self.createController.backClick = {
-            ()->() in
-            self.gotoPropertyController()
-        }
-        self.createController.rightButtonClick = {
-            (index: Int)->() in
-            /// 保存模块
-            let result = KMWatermarkManager.defaultManager.addWatermark(watermark: self.createController.model as! KMWatermarkModel)
-            
-            if (result) {
-                self.gotoPropertyController()
-            }
-        }
-    }
-    
-    func gotoPropertyEditController() {
-        let editController = KMWatermarkPropertyCreateController()
-        editController.isEdit = true
-        editController.preView = self.preView
-        editController.model = self.model
-        editController.view.frame = self.rightBox.contentView!.bounds
-        editController.view.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
-        self.right_gotoViewController(viewController: editController)
-        self.editController = editController
-        
-        self.editController.backClick = {
-            self.gotoPropertyController()
-            
-            let result = KMWatermarkManager.defaultManager.updateWatermark(watermark: self.editController.model as! KMWatermarkModel)
-            if (result) {
-                self.propertyController.updateDatas()
-            }
-        }
-    }
-    
-    func createWatermarkTemplate() -> KMWatermarkModel {
-        let model = KMWatermarkModel()
-        
-        model.textFont = .font(name: "Helvetica", size: 48)
-        model.textColor = .color(red: 0, green: 0, blue: 0, alpha: 1.0)
-        model.opacity = 1
-        model.pageRangeType = .all
-        model.scale = 0.5
-        model.verticalMode = 1
-        model.horizontalMode = 1
-        model.isFront = true
-        model.tileVerticalSpace = 6
-        model.tileHorizontalSpace = 6
-        model.isTilePage = false
-        model.pagesString = ""
-        model.isFront = true
-        model.text = NSLocalizedString("Watermark", comment: "")
-        model.watermarkID = KMWatermarkManager.defaultManager.fetchAvailableName()
-        
-        return model
-    }
-    
-}

+ 43 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMEditDocumentController.swift

@@ -0,0 +1,43 @@
+//
+//  KMEditDocumentController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/1.
+//
+
+import Cocoa
+
+class KMEditDocumentController: NSViewController {
+
+    var pdfDocument: CPDFDocument?
+    
+    private var pdfView: CPDFListView = CPDFListView.init()
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        view.wantsLayer = true
+        view.layer?.backgroundColor = NSColor.red.cgColor
+        
+        pdfView.frame = view.bounds
+        pdfView.autoresizingMask = [.width, .height]
+        pdfView.setDisplay(.singlePage)
+        pdfView.autoScales = true
+        view.addSubview(pdfView)
+        
+        
+    }
+    
+    func reloadData() {
+        guard let pdfDocument = self.pdfDocument else { return }
+        
+        pdfView.document = pdfDocument
+        
+    }
+    
+    func updateData() {
+        
+    }
+    
+}

+ 4 - 4
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/Controller/KMWatermarkViewController.xib

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMWatermarkViewController" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMEditDocumentController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
             </connections>
@@ -16,7 +16,7 @@
         <customView id="Hz6-mo-xeY">
             <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-            <point key="canvasLocation" x="26" y="-36"/>
+            <point key="canvasLocation" x="132" y="-72"/>
         </customView>
     </objects>
 </document>

+ 44 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMWatermarkController.swift

@@ -0,0 +1,44 @@
+//
+//  KMWatermarkController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/1.
+//
+
+import Cocoa
+
+class KMWatermarkController: NSViewController {
+
+    @IBOutlet var contendView: NSView!
+    
+    @IBOutlet var preInfoView: NSView!
+    @IBOutlet var propertyInfoView: NSView!
+    
+    var documentPreview: KMEditDocumentController = KMEditDocumentController.init()
+    var propertyController: KMNWatermarkPropertyController = KMNWatermarkPropertyController.init()
+    
+    var pdfDocument: CPDFDocument?
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        documentPreview.view.frame = preInfoView.bounds
+        documentPreview.view.autoresizingMask = [.width, .height]
+        preInfoView.addSubview(documentPreview.view)
+        
+        propertyController.view.frame = propertyInfoView.bounds
+        propertyController.view.autoresizingMask = [.width, .height]
+        propertyInfoView.addSubview(propertyController.view)
+        
+    }
+ 
+    
+    func reloadData() {
+        
+        documentPreview.pdfDocument = self.pdfDocument
+        documentPreview.reloadData()
+        
+    }
+    
+}

+ 56 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/KMWatermarkController.xib

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMWatermarkController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contendView" destination="pqo-Uo-RMP" id="7dN-Fo-Rsa"/>
+                <outlet property="preInfoView" destination="Qef-DT-Md5" id="bn8-r1-pwW"/>
+                <outlet property="propertyInfoView" destination="3R2-09-1IR" id="Ukf-Ih-Xc6"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="666" height="395"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="pqo-Uo-RMP">
+                    <rect key="frame" x="0.0" y="0.0" width="666" height="395"/>
+                    <subviews>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="Qef-DT-Md5">
+                            <rect key="frame" x="0.0" y="0.0" width="402" height="395"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="3R2-09-1IR">
+                            <rect key="frame" x="402" y="0.0" width="264" height="395"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="264" id="ouK-X6-2mx"/>
+                            </constraints>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="Qef-DT-Md5" firstAttribute="leading" secondItem="pqo-Uo-RMP" secondAttribute="leading" id="KKR-VJ-ghm"/>
+                        <constraint firstItem="3R2-09-1IR" firstAttribute="top" secondItem="pqo-Uo-RMP" secondAttribute="top" id="Qox-m4-ghL"/>
+                        <constraint firstItem="3R2-09-1IR" firstAttribute="leading" secondItem="Qef-DT-Md5" secondAttribute="trailing" id="ULj-yb-WFU"/>
+                        <constraint firstAttribute="bottom" secondItem="Qef-DT-Md5" secondAttribute="bottom" id="auT-uP-7Hj"/>
+                        <constraint firstAttribute="trailing" secondItem="3R2-09-1IR" secondAttribute="trailing" id="t5N-2o-2HV"/>
+                        <constraint firstItem="Qef-DT-Md5" firstAttribute="top" secondItem="pqo-Uo-RMP" secondAttribute="top" id="tjb-3s-4F9"/>
+                        <constraint firstAttribute="bottom" secondItem="3R2-09-1IR" secondAttribute="bottom" id="ttv-9I-wKV"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="pqo-Uo-RMP" secondAttribute="trailing" id="4Zo-0O-1rv"/>
+                <constraint firstItem="pqo-Uo-RMP" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="Nkj-j7-E1Z"/>
+                <constraint firstAttribute="bottom" secondItem="pqo-Uo-RMP" secondAttribute="bottom" id="i8N-3H-ETa"/>
+                <constraint firstItem="pqo-Uo-RMP" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="vEE-JO-gzi"/>
+            </constraints>
+            <point key="canvasLocation" x="232" y="175.5"/>
+        </customView>
+    </objects>
+</document>

+ 182 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMNWatermarkPropertyController.swift

@@ -0,0 +1,182 @@
+//
+//  KMNWatermarkPropertyController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/1.
+//
+
+import Cocoa
+import KMComponentLibrary
+
+class KMNWatermarkPropertyController: NSViewController {
+
+    @IBOutlet var contendView: NSView!
+    @IBOutlet var titleLabel: NSTextField!
+    @IBOutlet var templateButton: ComponentButton!
+    
+    @IBOutlet var typeTabs: ComponentTabs!
+    
+    //Text
+    @IBOutlet var fontNameSelect: ComponentSelect!
+    @IBOutlet var fontStyleSelect: ComponentSelect!
+    @IBOutlet var fontSizeSelect: ComponentSelect!
+    @IBOutlet var fontColorGroup: ComponentCColorGroup!
+    
+    
+    //File
+    
+    
+    
+    //Appearance
+    @IBOutlet var appearanceBGView: NSView!
+    @IBOutlet var appearanceLabel: NSTextField!
+    @IBOutlet var appearanceScaleCheckbox: ComponentCheckBox!
+    @IBOutlet var appearanceScaleSelect: ComponentSelect!
+    @IBOutlet var appearanceTopPageRadio: ComponentRadio!
+    @IBOutlet var appearanceBottomPageRadio: ComponentRadio!
+    
+    //Position
+    @IBOutlet var positionBGView: NSView!
+    @IBOutlet var positionLabel: NSTextField!
+    @IBOutlet var positionItemView: ComponentCPosition!
+    @IBOutlet var positionXInput: ComponentInputNumber!
+    @IBOutlet var positionYInput: ComponentInputNumber!
+    
+    @IBOutlet var positionTileCheckbox: ComponentCheckBox!
+    @IBOutlet var positionTileHorImage: NSImageView!
+    @IBOutlet var positionTileVertImage: NSImageView!
+    @IBOutlet var positionTileHoriInput: ComponentInputNumber!
+    @IBOutlet var positionTileVertInput: ComponentInputNumber!
+     
+    private var textTabProperty = ComponentTabsProperty(tabsType: .underline_Fill, state: .normal, showIcon: false, title: KMLocalizedString("Text"))
+    private var fileTabProperty = ComponentTabsProperty(tabsType: .underline_Fill, state: .normal, showIcon: false, title: KMLocalizedString("File"))
+    
+    var watermarkModel: KMWatermarkModel = KMWatermarkModel()
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        setupProperty()
+     
+        reloadData()
+    }
+    
+    func setupProperty() {
+        contendView.wantsLayer = true
+        contendView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor
+        
+        titleLabel.stringValue = KMLocalizedString("Add Watermark")
+        titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
+        titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-bold")
+
+        templateButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "icon_wm_template"))
+        
+        typeTabs.updateItemProperty([textTabProperty, fileTabProperty])
+        
+        
+        //Text
+        let familyNames = CPDFFont.familyNames
+        
+        fontNameSelect.properties = ComponentSelectProperties(size: .s,
+                                                              state: .normal,
+                                                              text: "")
+        
+        var menuItemArr: [ComponentMenuitemProperty] = []
+        for string in familyNames {
+            let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string)
+            menuItemArr.append(item)
+        }
+        fontNameSelect.updateMenuItemsArr(menuItemArr)
+        
+        
+        //File
+        
+
+        //Appearance
+        appearanceLabel.stringValue = KMLocalizedString("Appearance")
+        appearanceLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
+        appearanceLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
+
+        appearanceScaleCheckbox.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Scale relative to target page"), checkboxType: .normal)
+        
+        appearanceTopPageRadio.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("At the top of the page"), checkboxType: .normal)
+        appearanceBottomPageRadio.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("At the bottom of the page"), checkboxType: .normal)
+
+        let colorAProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 205/255, green: 205/255, blue: 205/255, alpha: 1))
+        let colorBProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 255/255, green: 173/255, blue: 173/255, alpha: 1))
+        let colorCProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 146/255, green: 222/255, blue: 255/255, alpha: 1))
+        let colorDProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: NSColor(red: 171/255, green: 247/255, blue: 220/255, alpha: 1))
+        let colorEProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: true, color: NSColor(red: 255/255, green: 221/255, blue: 99/255, alpha: 1))
+        
+        fontColorGroup.setUpWithColorPropertys([colorAProperty, colorBProperty, colorCProperty, colorDProperty], customItemProperty: colorEProperty)
+        
+        
+        //Position
+        positionLabel.stringValue = KMLocalizedString("Position (mm)")
+        positionLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
+        positionLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
+
+        positionItemView.properties = ComponentCPositionProperty(rowCount: 3, columnCount: 3, dash: false, selRow: 1, selColumn: 1)
+        
+        positionXInput.properties = ComponentInputNumberProperty(alignment: .left,
+                                                                        size: .s,
+                                                                        minSize: -1000,
+                                                                        maxSize: 1000,
+                                                                        text: "0")
+        
+        positionYInput.properties = ComponentInputNumberProperty(alignment: .left,
+                                                                        size: .s,
+                                                                        minSize: -1000,
+                                                                        maxSize: 1000,
+                                                                        text: "0")
+        
+        positionTileCheckbox.properties = ComponentCheckBoxProperty(size: .s, text: KMLocalizedString("Tile"), checkboxType: .normal)
+        positionTileCheckbox.setTarget(self, action: #selector(checkBoxClicked(_:)))
+        
+        positionTileHoriInput.properties = ComponentInputNumberProperty(alignment: .left,
+                                                                        size: .s,
+                                                                        minSize: 0,
+                                                                        maxSize: 1000,
+                                                                        text: "0")
+        positionTileVertInput.properties = ComponentInputNumberProperty(alignment: .left,
+                                                                        size: .s,
+                                                                        minSize: 0,
+                                                                        maxSize: 1000,
+                                                                        text: "0")
+        
+        
+    }
+    
+    func reloadData() {
+        
+        
+        
+        //Position
+        if positionTileCheckbox.properties.checkboxType == .selected {
+            positionTileHorImage.image = NSImage(named: "tile_spacing_horiz")
+            positionTileVertImage.image = NSImage(named: "tile_spacing_vert")
+            
+            positionTileHoriInput.properties.isDisabled = false
+            positionTileVertInput.properties.isDisabled = false
+            
+        } else if positionTileCheckbox.properties.checkboxType == .normal {
+            positionTileHorImage.image = NSImage(named: "tile_spacing_horiz_dis")
+            positionTileVertImage.image = NSImage(named: "tile_spacing_vert_dis")
+            
+            positionTileHoriInput.properties.isDisabled = true
+            positionTileVertInput.properties.isDisabled = true
+        }
+        positionTileHoriInput.reloadData()
+        positionTileVertInput.reloadData()
+        
+    }
+    
+    
+    //MARK: - Action
+    @objc func checkBoxClicked(_ sender: ComponentCheckBox) {
+        
+        reloadData()
+    }
+    
+}

+ 476 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideViews/Watermark/New/Views/KMNWatermarkPropertyController.xib

@@ -0,0 +1,476 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMNWatermarkPropertyController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="appearanceBGView" destination="N3S-NU-dUK" id="55y-rO-URC"/>
+                <outlet property="appearanceBottomPageRadio" destination="gcz-v6-Is9" id="t8W-Rr-Ii2"/>
+                <outlet property="appearanceLabel" destination="Zph-wi-6i3" id="9qx-Kt-bif"/>
+                <outlet property="appearanceScaleCheckbox" destination="Gff-0V-jaD" id="yed-lH-ruw"/>
+                <outlet property="appearanceScaleSelect" destination="i03-pW-pQc" id="tYp-YD-zfS"/>
+                <outlet property="appearanceTopPageRadio" destination="wOL-XJ-9hB" id="pEx-Gt-18s"/>
+                <outlet property="contendView" destination="WSD-S7-Nbi" id="j01-hS-70A"/>
+                <outlet property="fontColorGroup" destination="vsn-3z-gA0" id="FxX-9V-Tqn"/>
+                <outlet property="fontNameSelect" destination="YYQ-vV-Qfw" id="Q27-LU-02w"/>
+                <outlet property="fontSizeSelect" destination="dlH-9Z-5E0" id="Mhe-CQ-JDO"/>
+                <outlet property="fontStyleSelect" destination="Wdl-DJ-XxU" id="hU6-0J-tKs"/>
+                <outlet property="positionBGView" destination="nTM-xd-HIx" id="QrI-tv-xuG"/>
+                <outlet property="positionItemView" destination="vd3-5J-Jcb" id="8pT-KI-aHC"/>
+                <outlet property="positionLabel" destination="gTg-8Q-bmp" id="6hw-dc-Sru"/>
+                <outlet property="positionTileCheckbox" destination="vZz-9f-hir" id="JrV-X9-B7V"/>
+                <outlet property="positionTileHorImage" destination="Aso-xq-AAE" id="8ae-qD-YTW"/>
+                <outlet property="positionTileHoriInput" destination="X4q-ri-vLx" id="eJR-gi-FZW"/>
+                <outlet property="positionTileVertImage" destination="OJr-GJ-lkr" id="8sT-5Z-EM1"/>
+                <outlet property="positionTileVertInput" destination="HhP-72-8ZC" id="ry1-P4-PaB"/>
+                <outlet property="positionXInput" destination="wjG-88-KWP" id="leY-Nf-1LY"/>
+                <outlet property="positionYInput" destination="58l-A1-2Kk" id="BHh-mu-b9b"/>
+                <outlet property="templateButton" destination="WMO-rB-mGc" id="XBD-O9-HlP"/>
+                <outlet property="titleLabel" destination="jkG-Uv-4gv" id="0Ao-BB-7UZ"/>
+                <outlet property="typeTabs" destination="3ld-PC-yBt" id="3ZC-KK-o1W"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="273" height="840"/>
+            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" heightSizable="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="WSD-S7-Nbi">
+                    <rect key="frame" x="0.0" y="0.0" width="273" height="840"/>
+                    <subviews>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="4VY-fx-x7j">
+                            <rect key="frame" x="0.0" y="800" width="273" height="40"/>
+                            <subviews>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jkG-Uv-4gv">
+                                    <rect key="frame" x="88" y="12" width="98" height="16"/>
+                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Add Watermark" id="7Za-QS-Sai">
+                                        <font key="font" usesAppearanceFont="YES"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="WMO-rB-mGc" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                    <rect key="frame" x="241" y="8" width="24" height="24"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="24" id="3P7-j0-Bdf"/>
+                                        <constraint firstAttribute="width" constant="24" id="DDB-CZ-8uP"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="1Nd-L1-fnG" customClass="ComponentDivider" customModule="KMComponentLibrary">
+                                    <rect key="frame" x="0.0" y="0.0" width="273" height="1"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="RWN-Rv-wpY"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="trailing" secondItem="WMO-rB-mGc" secondAttribute="trailing" constant="8" id="4iN-4C-zVr"/>
+                                <constraint firstAttribute="bottom" secondItem="1Nd-L1-fnG" secondAttribute="bottom" id="GVa-Rv-z1N"/>
+                                <constraint firstAttribute="height" constant="40" id="Pg1-vg-fcM"/>
+                                <constraint firstItem="jkG-Uv-4gv" firstAttribute="centerY" secondItem="4VY-fx-x7j" secondAttribute="centerY" id="e4D-Sp-h82"/>
+                                <constraint firstAttribute="trailing" secondItem="1Nd-L1-fnG" secondAttribute="trailing" id="iPw-nZ-XRV"/>
+                                <constraint firstItem="jkG-Uv-4gv" firstAttribute="centerX" secondItem="4VY-fx-x7j" secondAttribute="centerX" id="iv8-ZQ-8SY"/>
+                                <constraint firstItem="1Nd-L1-fnG" firstAttribute="leading" secondItem="4VY-fx-x7j" secondAttribute="leading" id="jfX-L5-TTx"/>
+                                <constraint firstItem="WMO-rB-mGc" firstAttribute="centerY" secondItem="4VY-fx-x7j" secondAttribute="centerY" id="w2A-CZ-aDx"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="Gk1-Vc-pA7">
+                            <rect key="frame" x="0.0" y="744" width="273" height="56"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="3ld-PC-yBt" customClass="ComponentTabs" customModule="KMComponentLibrary">
+                                    <rect key="frame" x="21" y="16" width="232" height="32"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="232" id="6VD-OM-ddO"/>
+                                        <constraint firstAttribute="height" constant="32" id="Igq-lj-Wx7"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="3ld-PC-yBt" firstAttribute="centerX" secondItem="Gk1-Vc-pA7" secondAttribute="centerX" id="SGC-N0-wQG"/>
+                                <constraint firstAttribute="height" constant="56" id="a19-3b-7QC"/>
+                                <constraint firstItem="3ld-PC-yBt" firstAttribute="top" secondItem="Gk1-Vc-pA7" secondAttribute="top" constant="8" id="lXb-bN-aTg"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="0BT-YI-uuZ">
+                            <rect key="frame" x="0.0" y="78" width="273" height="666"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="l8C-Vk-idO">
+                                    <rect key="frame" x="21" y="482" width="232" height="184"/>
+                                    <subviews>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="wJd-KI-caZ">
+                                            <rect key="frame" x="0.0" y="120" width="232" height="64"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="64" id="WDx-tX-R5I"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="YYQ-vV-Qfw" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="80" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="I6V-Cq-opN"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="Wdl-DJ-XxU" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="40" width="112" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="112" id="gUW-GN-dYM"/>
+                                                <constraint firstAttribute="height" constant="32" id="oA6-a7-sNa"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="dlH-9Z-5E0" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="120" y="40" width="112" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="112" id="HON-tr-cRI"/>
+                                                <constraint firstAttribute="height" constant="32" id="Umj-J9-ELx"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="vsn-3z-gA0" customClass="ComponentCColorGroup" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="FTo-ag-Opw"/>
+                                                <constraint firstAttribute="width" constant="232" id="twJ-dg-8nb"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="wJd-KI-caZ" firstAttribute="top" secondItem="l8C-Vk-idO" secondAttribute="top" id="2Gv-Wv-xSD"/>
+                                        <constraint firstItem="vsn-3z-gA0" firstAttribute="centerX" secondItem="l8C-Vk-idO" secondAttribute="centerX" id="AQu-tc-8ek"/>
+                                        <constraint firstItem="Wdl-DJ-XxU" firstAttribute="leading" secondItem="l8C-Vk-idO" secondAttribute="leading" id="BnU-xA-xYU"/>
+                                        <constraint firstItem="YYQ-vV-Qfw" firstAttribute="top" secondItem="wJd-KI-caZ" secondAttribute="bottom" constant="8" id="CHb-A2-vhi"/>
+                                        <constraint firstAttribute="width" constant="232" id="NXo-r0-JPZ"/>
+                                        <constraint firstItem="dlH-9Z-5E0" firstAttribute="centerY" secondItem="Wdl-DJ-XxU" secondAttribute="centerY" id="UW7-pX-GrQ"/>
+                                        <constraint firstAttribute="height" constant="184" id="XKl-iC-jdT"/>
+                                        <constraint firstItem="Wdl-DJ-XxU" firstAttribute="top" secondItem="YYQ-vV-Qfw" secondAttribute="bottom" constant="8" id="euz-yf-ng9"/>
+                                        <constraint firstItem="wJd-KI-caZ" firstAttribute="leading" secondItem="l8C-Vk-idO" secondAttribute="leading" id="f67-dG-lMb"/>
+                                        <constraint firstAttribute="trailing" secondItem="wJd-KI-caZ" secondAttribute="trailing" id="nqU-ba-NrR"/>
+                                        <constraint firstItem="YYQ-vV-Qfw" firstAttribute="leading" secondItem="l8C-Vk-idO" secondAttribute="leading" id="nv5-7e-QrO"/>
+                                        <constraint firstItem="vsn-3z-gA0" firstAttribute="top" secondItem="Wdl-DJ-XxU" secondAttribute="bottom" constant="8" id="uig-9L-bOI"/>
+                                        <constraint firstAttribute="trailing" secondItem="dlH-9Z-5E0" secondAttribute="trailing" id="w1h-lX-MPH"/>
+                                        <constraint firstAttribute="trailing" secondItem="YYQ-vV-Qfw" secondAttribute="trailing" id="w6Y-2h-wG1"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="N3S-NU-dUK">
+                                    <rect key="frame" x="21" y="242" width="232" height="224"/>
+                                    <subviews>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="5EC-ec-yKw">
+                                            <rect key="frame" x="0.0" y="184" width="232" height="40"/>
+                                            <subviews>
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Zph-wi-6i3">
+                                                    <rect key="frame" x="-2" y="12" width="77" height="16"/>
+                                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Appearance" id="34Z-Ne-M34">
+                                                        <font key="font" usesAppearanceFont="YES"/>
+                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                </textField>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="Zph-wi-6i3" firstAttribute="centerY" secondItem="5EC-ec-yKw" secondAttribute="centerY" id="7Ae-ri-ywg"/>
+                                                <constraint firstAttribute="height" constant="40" id="JaF-H4-K1L"/>
+                                                <constraint firstItem="Zph-wi-6i3" firstAttribute="leading" secondItem="5EC-ec-yKw" secondAttribute="leading" id="VNk-9I-2rA"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="8Kw-R6-WKn">
+                                            <rect key="frame" x="0.0" y="152" width="232" height="32"/>
+                                            <subviews>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="zd3-AF-v6Y">
+                                                    <rect key="frame" x="0.0" y="8" width="16" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="gc7-Uk-uhb"/>
+                                                        <constraint firstAttribute="width" constant="16" id="hSK-15-hKf"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="edit_rotateRight" id="uNi-b3-wGw"/>
+                                                </imageView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="uWb-rG-ugv" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                                    <rect key="frame" x="20" y="0.0" width="92" height="32"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="92" id="hCV-us-Rru"/>
+                                                        <constraint firstAttribute="height" constant="32" id="pX0-fG-PVs"/>
+                                                    </constraints>
+                                                </customView>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ler-kW-KZg">
+                                                    <rect key="frame" x="120" y="8" width="16" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="16" id="PfS-ma-oBZ"/>
+                                                        <constraint firstAttribute="height" constant="16" id="p1d-zj-sbx"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="edit_ocapity" id="j7x-Ee-g05"/>
+                                                </imageView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="76y-LT-L3w" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                                    <rect key="frame" x="140" y="0.0" width="92" height="32"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="32" id="1rN-in-MmY"/>
+                                                        <constraint firstAttribute="width" constant="92" id="Tc1-QW-mEg"/>
+                                                    </constraints>
+                                                </customView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="uWb-rG-ugv" firstAttribute="leading" secondItem="zd3-AF-v6Y" secondAttribute="trailing" constant="4" id="BNL-If-0AX"/>
+                                                <constraint firstAttribute="height" constant="32" id="BQe-OW-IxT"/>
+                                                <constraint firstItem="ler-kW-KZg" firstAttribute="centerY" secondItem="8Kw-R6-WKn" secondAttribute="centerY" id="BkV-2V-Ruh"/>
+                                                <constraint firstItem="ler-kW-KZg" firstAttribute="leading" secondItem="uWb-rG-ugv" secondAttribute="trailing" constant="8" id="DHd-F1-IHL"/>
+                                                <constraint firstItem="zd3-AF-v6Y" firstAttribute="leading" secondItem="8Kw-R6-WKn" secondAttribute="leading" id="KlW-Ea-P2H"/>
+                                                <constraint firstItem="76y-LT-L3w" firstAttribute="leading" secondItem="ler-kW-KZg" secondAttribute="trailing" constant="4" id="Ni4-WA-tfL"/>
+                                                <constraint firstItem="76y-LT-L3w" firstAttribute="centerY" secondItem="8Kw-R6-WKn" secondAttribute="centerY" id="Ygu-Qz-5Dd"/>
+                                                <constraint firstItem="zd3-AF-v6Y" firstAttribute="centerY" secondItem="8Kw-R6-WKn" secondAttribute="centerY" id="dQN-9q-JfU"/>
+                                                <constraint firstItem="uWb-rG-ugv" firstAttribute="centerY" secondItem="8Kw-R6-WKn" secondAttribute="centerY" id="u5e-M5-WZP"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="Gff-0V-jaD" customClass="ComponentCheckBox" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="112" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="UZp-kV-We6"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="i03-pW-pQc" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="72" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="Ibi-lN-wtu"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="wOL-XJ-9hB" customClass="ComponentRadio" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="32" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="iAr-kK-mEi"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="gcz-v6-Is9" customClass="ComponentRadio" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="5BB-C8-p38"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="wOL-XJ-9hB" firstAttribute="leading" secondItem="N3S-NU-dUK" secondAttribute="leading" id="2ab-cR-EnY"/>
+                                        <constraint firstAttribute="trailing" secondItem="i03-pW-pQc" secondAttribute="trailing" id="71U-xs-wpj"/>
+                                        <constraint firstAttribute="bottom" secondItem="gcz-v6-Is9" secondAttribute="bottom" id="CqO-4Q-HLT"/>
+                                        <constraint firstAttribute="width" constant="232" id="EpG-D8-AAV"/>
+                                        <constraint firstAttribute="trailing" secondItem="5EC-ec-yKw" secondAttribute="trailing" id="Gig-Vb-voj"/>
+                                        <constraint firstItem="i03-pW-pQc" firstAttribute="top" secondItem="Gff-0V-jaD" secondAttribute="bottom" constant="8" id="OeY-K2-ls4"/>
+                                        <constraint firstAttribute="trailing" secondItem="Gff-0V-jaD" secondAttribute="trailing" id="R9X-vv-agX"/>
+                                        <constraint firstItem="8Kw-R6-WKn" firstAttribute="leading" secondItem="N3S-NU-dUK" secondAttribute="leading" id="Wje-Xu-o7K"/>
+                                        <constraint firstAttribute="trailing" secondItem="gcz-v6-Is9" secondAttribute="trailing" id="Zxh-b1-6k7"/>
+                                        <constraint firstAttribute="trailing" secondItem="wOL-XJ-9hB" secondAttribute="trailing" id="aqn-O6-MUw"/>
+                                        <constraint firstItem="i03-pW-pQc" firstAttribute="leading" secondItem="N3S-NU-dUK" secondAttribute="leading" id="eMN-PX-WtY"/>
+                                        <constraint firstItem="5EC-ec-yKw" firstAttribute="top" secondItem="N3S-NU-dUK" secondAttribute="top" id="gTn-8S-9v1"/>
+                                        <constraint firstItem="8Kw-R6-WKn" firstAttribute="top" secondItem="5EC-ec-yKw" secondAttribute="bottom" id="kiV-Z4-Owm"/>
+                                        <constraint firstAttribute="height" constant="224" id="llA-R8-DEK"/>
+                                        <constraint firstItem="gcz-v6-Is9" firstAttribute="leading" secondItem="N3S-NU-dUK" secondAttribute="leading" id="ntO-Vw-cuO"/>
+                                        <constraint firstItem="Gff-0V-jaD" firstAttribute="leading" secondItem="N3S-NU-dUK" secondAttribute="leading" id="uBV-vF-1t5"/>
+                                        <constraint firstItem="Gff-0V-jaD" firstAttribute="top" secondItem="8Kw-R6-WKn" secondAttribute="bottom" constant="8" id="vkT-ET-ADy"/>
+                                        <constraint firstItem="wOL-XJ-9hB" firstAttribute="top" secondItem="i03-pW-pQc" secondAttribute="bottom" constant="8" id="xk9-PA-2nc"/>
+                                        <constraint firstAttribute="trailing" secondItem="8Kw-R6-WKn" secondAttribute="trailing" id="ySB-g4-SE5"/>
+                                        <constraint firstItem="5EC-ec-yKw" firstAttribute="leading" secondItem="N3S-NU-dUK" secondAttribute="leading" id="yrF-lF-2hQ"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="nTM-xd-HIx">
+                                    <rect key="frame" x="21" y="34" width="232" height="192"/>
+                                    <subviews>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="wp3-Sk-MRP">
+                                            <rect key="frame" x="0.0" y="152" width="232" height="40"/>
+                                            <subviews>
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gTg-8Q-bmp">
+                                                    <rect key="frame" x="-2" y="12" width="85" height="16"/>
+                                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Position(mm)" id="oaL-Vx-zTi">
+                                                        <font key="font" usesAppearanceFont="YES"/>
+                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                </textField>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="40" id="IVw-kG-w3F"/>
+                                                <constraint firstItem="gTg-8Q-bmp" firstAttribute="centerY" secondItem="wp3-Sk-MRP" secondAttribute="centerY" id="Utw-3m-SDd"/>
+                                                <constraint firstItem="gTg-8Q-bmp" firstAttribute="leading" secondItem="wp3-Sk-MRP" secondAttribute="leading" id="gQl-ND-qJy"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="vd3-5J-Jcb" customClass="ComponentCPosition" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="80" width="72" height="72"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="72" id="7CU-Y0-4BT"/>
+                                                <constraint firstAttribute="height" constant="72" id="pLe-tX-JlT"/>
+                                            </constraints>
+                                        </customView>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qVQ-To-3Au">
+                                            <rect key="frame" x="119" y="128" width="17" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="X:" id="zUo-XG-CKN">
+                                                <font key="font" usesAppearanceFont="YES"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="wjG-88-KWP" customClass="ComponentInputNumber" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="136" y="120" width="96" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="IGS-fb-ErJ"/>
+                                                <constraint firstAttribute="width" constant="96" id="mzL-IX-KEf"/>
+                                            </constraints>
+                                        </customView>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yrr-gh-114">
+                                            <rect key="frame" x="120" y="88" width="16" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Y:" id="kZA-Cu-HgA">
+                                                <font key="font" usesAppearanceFont="YES"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="58l-A1-2Kk" customClass="ComponentInputNumber" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="136" y="80" width="96" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="96" id="nvv-EW-mmr"/>
+                                                <constraint firstAttribute="height" constant="32" id="u6I-Zg-ZSP"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="vZz-9f-hir" customClass="ComponentCheckBox" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="0.0" y="40" width="232" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="Rbt-Oc-Dd3"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="xL5-Rq-Wus">
+                                            <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                            <subviews>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Aso-xq-AAE">
+                                                    <rect key="frame" x="0.0" y="8" width="16" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="izy-vW-2JK"/>
+                                                        <constraint firstAttribute="width" constant="16" id="oxF-hf-zCo"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="tile_spacing_horiz" id="zb1-ji-KzW"/>
+                                                </imageView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="X4q-ri-vLx" customClass="ComponentInputNumber" customModule="KMComponentLibrary">
+                                                    <rect key="frame" x="20" y="0.0" width="92" height="32"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="32" id="Khl-jl-0Lh"/>
+                                                        <constraint firstAttribute="width" constant="92" id="rn8-SG-wLD"/>
+                                                    </constraints>
+                                                </customView>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="OJr-GJ-lkr">
+                                                    <rect key="frame" x="120" y="8" width="16" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="16" id="66s-tT-ubK"/>
+                                                        <constraint firstAttribute="height" constant="16" id="Q1h-u8-syY"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="tile_spacing_vert" id="8S9-4T-Pul"/>
+                                                </imageView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="HhP-72-8ZC" customClass="ComponentInputNumber" customModule="KMComponentLibrary">
+                                                    <rect key="frame" x="140" y="0.0" width="92" height="32"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="32" id="RpS-tg-F1p"/>
+                                                        <constraint firstAttribute="width" constant="92" id="Yst-0x-Mch"/>
+                                                    </constraints>
+                                                </customView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="HhP-72-8ZC" firstAttribute="centerY" secondItem="xL5-Rq-Wus" secondAttribute="centerY" id="0Jv-5K-3hB"/>
+                                                <constraint firstItem="HhP-72-8ZC" firstAttribute="leading" secondItem="OJr-GJ-lkr" secondAttribute="trailing" constant="4" id="267-7d-nAP"/>
+                                                <constraint firstItem="OJr-GJ-lkr" firstAttribute="centerY" secondItem="xL5-Rq-Wus" secondAttribute="centerY" id="4iY-0T-rsL"/>
+                                                <constraint firstAttribute="height" constant="32" id="9nd-Js-avU"/>
+                                                <constraint firstItem="X4q-ri-vLx" firstAttribute="leading" secondItem="Aso-xq-AAE" secondAttribute="trailing" constant="4" id="DZ6-rO-H0U"/>
+                                                <constraint firstItem="Aso-xq-AAE" firstAttribute="leading" secondItem="xL5-Rq-Wus" secondAttribute="leading" id="RHE-vz-afr"/>
+                                                <constraint firstAttribute="trailing" secondItem="HhP-72-8ZC" secondAttribute="trailing" id="ZKI-BO-Kc7"/>
+                                                <constraint firstItem="Aso-xq-AAE" firstAttribute="centerY" secondItem="xL5-Rq-Wus" secondAttribute="centerY" id="ska-na-WsL"/>
+                                                <constraint firstItem="X4q-ri-vLx" firstAttribute="centerY" secondItem="xL5-Rq-Wus" secondAttribute="centerY" id="vfp-xN-dix"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="vd3-5J-Jcb" firstAttribute="top" secondItem="wp3-Sk-MRP" secondAttribute="bottom" id="1kr-IP-oBN"/>
+                                        <constraint firstItem="wjG-88-KWP" firstAttribute="centerY" secondItem="qVQ-To-3Au" secondAttribute="centerY" id="3lk-08-SmB"/>
+                                        <constraint firstItem="wjG-88-KWP" firstAttribute="top" secondItem="wp3-Sk-MRP" secondAttribute="bottom" id="6bA-cX-R6b"/>
+                                        <constraint firstAttribute="trailing" secondItem="wjG-88-KWP" secondAttribute="trailing" id="DYk-x1-j3q"/>
+                                        <constraint firstItem="wp3-Sk-MRP" firstAttribute="leading" secondItem="nTM-xd-HIx" secondAttribute="leading" id="FML-ci-kI9"/>
+                                        <constraint firstItem="wjG-88-KWP" firstAttribute="leading" secondItem="qVQ-To-3Au" secondAttribute="trailing" constant="2" id="ISD-bJ-qpa"/>
+                                        <constraint firstItem="xL5-Rq-Wus" firstAttribute="top" secondItem="vZz-9f-hir" secondAttribute="bottom" constant="8" id="KNp-IB-nHY"/>
+                                        <constraint firstItem="wp3-Sk-MRP" firstAttribute="top" secondItem="nTM-xd-HIx" secondAttribute="top" id="KwZ-bf-NId"/>
+                                        <constraint firstAttribute="trailing" secondItem="vZz-9f-hir" secondAttribute="trailing" id="Qhd-Eo-GfB"/>
+                                        <constraint firstItem="xL5-Rq-Wus" firstAttribute="leading" secondItem="nTM-xd-HIx" secondAttribute="leading" id="Ra6-b9-Ftw"/>
+                                        <constraint firstAttribute="width" constant="232" id="RzM-lo-xHF"/>
+                                        <constraint firstAttribute="trailing" secondItem="xL5-Rq-Wus" secondAttribute="trailing" id="Vj2-ZJ-3Zx"/>
+                                        <constraint firstItem="vZz-9f-hir" firstAttribute="top" secondItem="vd3-5J-Jcb" secondAttribute="bottom" constant="8" id="ZH9-cK-lgD"/>
+                                        <constraint firstItem="vd3-5J-Jcb" firstAttribute="leading" secondItem="nTM-xd-HIx" secondAttribute="leading" id="fCK-fV-Saf"/>
+                                        <constraint firstItem="58l-A1-2Kk" firstAttribute="top" secondItem="wjG-88-KWP" secondAttribute="bottom" constant="8" id="fjK-0F-dfk"/>
+                                        <constraint firstAttribute="trailing" secondItem="58l-A1-2Kk" secondAttribute="trailing" id="g8x-g3-953"/>
+                                        <constraint firstAttribute="height" constant="192" id="ozY-8I-IPu"/>
+                                        <constraint firstAttribute="trailing" secondItem="wp3-Sk-MRP" secondAttribute="trailing" id="sDF-gG-ccp"/>
+                                        <constraint firstItem="58l-A1-2Kk" firstAttribute="centerY" secondItem="yrr-gh-114" secondAttribute="centerY" id="uK6-XT-G21"/>
+                                        <constraint firstItem="58l-A1-2Kk" firstAttribute="leading" secondItem="yrr-gh-114" secondAttribute="trailing" constant="2" id="vsu-Ql-D8j"/>
+                                        <constraint firstItem="vZz-9f-hir" firstAttribute="leading" secondItem="nTM-xd-HIx" secondAttribute="leading" id="xXz-av-PeW"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="l8C-Vk-idO" firstAttribute="centerX" secondItem="0BT-YI-uuZ" secondAttribute="centerX" id="F7K-z5-caA"/>
+                                <constraint firstItem="nTM-xd-HIx" firstAttribute="centerX" secondItem="0BT-YI-uuZ" secondAttribute="centerX" id="bvC-pX-cza"/>
+                                <constraint firstItem="N3S-NU-dUK" firstAttribute="top" secondItem="0BT-YI-uuZ" secondAttribute="top" constant="200" id="bvk-BP-OWQ"/>
+                                <constraint firstItem="l8C-Vk-idO" firstAttribute="top" secondItem="0BT-YI-uuZ" secondAttribute="top" id="cl5-ia-LSH"/>
+                                <constraint firstItem="N3S-NU-dUK" firstAttribute="centerX" secondItem="0BT-YI-uuZ" secondAttribute="centerX" id="e6U-iS-g2w"/>
+                                <constraint firstItem="nTM-xd-HIx" firstAttribute="top" secondItem="N3S-NU-dUK" secondAttribute="bottom" constant="16" id="gCW-v1-Bqm"/>
+                                <constraint firstAttribute="height" constant="666" id="hYg-29-sBG"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="dTL-It-CfQ">
+                            <rect key="frame" x="0.0" y="0.0" width="273" height="72"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="sMo-If-TH4" customClass="ComponentDivider" customModule="KMComponentLibrary">
+                                    <rect key="frame" x="0.0" y="71" width="273" height="1"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="Yyi-uG-bae"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="lPB-Zu-EtY" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                    <rect key="frame" x="21" y="16" width="232" height="40"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="40" id="5JF-QD-8KZ"/>
+                                        <constraint firstAttribute="width" constant="232" id="Ry4-F2-dYU"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="sMo-If-TH4" firstAttribute="top" secondItem="dTL-It-CfQ" secondAttribute="top" id="7rl-Im-VwV"/>
+                                <constraint firstAttribute="trailing" secondItem="sMo-If-TH4" secondAttribute="trailing" id="CW9-fV-XXm"/>
+                                <constraint firstItem="sMo-If-TH4" firstAttribute="leading" secondItem="dTL-It-CfQ" secondAttribute="leading" id="DNg-y4-Se1"/>
+                                <constraint firstItem="lPB-Zu-EtY" firstAttribute="centerX" secondItem="dTL-It-CfQ" secondAttribute="centerX" id="cUN-tP-qQh"/>
+                                <constraint firstAttribute="height" constant="72" id="g6h-UL-gDV"/>
+                                <constraint firstItem="lPB-Zu-EtY" firstAttribute="centerY" secondItem="dTL-It-CfQ" secondAttribute="centerY" id="hOb-tg-Ogp"/>
+                            </constraints>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="0BT-YI-uuZ" firstAttribute="leading" secondItem="WSD-S7-Nbi" secondAttribute="leading" id="2tK-qX-6Zl"/>
+                        <constraint firstAttribute="trailing" secondItem="dTL-It-CfQ" secondAttribute="trailing" id="7Oe-Kp-uxr"/>
+                        <constraint firstItem="dTL-It-CfQ" firstAttribute="leading" secondItem="WSD-S7-Nbi" secondAttribute="leading" id="9fL-0b-278"/>
+                        <constraint firstAttribute="trailing" secondItem="Gk1-Vc-pA7" secondAttribute="trailing" id="CGj-fJ-S98"/>
+                        <constraint firstAttribute="trailing" secondItem="4VY-fx-x7j" secondAttribute="trailing" id="Gdb-bT-aG8"/>
+                        <constraint firstItem="4VY-fx-x7j" firstAttribute="top" secondItem="WSD-S7-Nbi" secondAttribute="top" id="I9S-qG-bSb"/>
+                        <constraint firstAttribute="bottom" secondItem="dTL-It-CfQ" secondAttribute="bottom" id="IXc-2b-Pra"/>
+                        <constraint firstItem="Gk1-Vc-pA7" firstAttribute="leading" secondItem="WSD-S7-Nbi" secondAttribute="leading" id="Jie-Dp-sYt"/>
+                        <constraint firstItem="4VY-fx-x7j" firstAttribute="leading" secondItem="WSD-S7-Nbi" secondAttribute="leading" id="N1m-JB-XTh"/>
+                        <constraint firstItem="Gk1-Vc-pA7" firstAttribute="top" secondItem="4VY-fx-x7j" secondAttribute="bottom" id="YCg-Wb-ayK"/>
+                        <constraint firstAttribute="trailing" secondItem="0BT-YI-uuZ" secondAttribute="trailing" id="gqU-2g-Dva"/>
+                        <constraint firstItem="0BT-YI-uuZ" firstAttribute="top" secondItem="Gk1-Vc-pA7" secondAttribute="bottom" id="tqe-Yf-WMm"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="WSD-S7-Nbi" secondAttribute="bottom" id="1YN-yz-N0b"/>
+                <constraint firstItem="WSD-S7-Nbi" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="RMc-CQ-F0E"/>
+                <constraint firstAttribute="trailing" secondItem="WSD-S7-Nbi" secondAttribute="trailing" id="uOn-3o-d54"/>
+                <constraint firstItem="WSD-S7-Nbi" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="ykz-Ec-Ygj"/>
+            </constraints>
+            <point key="canvasLocation" x="21.5" y="336"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="edit_ocapity" width="16" height="16"/>
+        <image name="edit_rotateRight" width="16" height="16"/>
+        <image name="tile_spacing_horiz" width="16" height="16"/>
+        <image name="tile_spacing_vert" width="16" height="16"/>
+    </resources>
+</document>

+ 2 - 4
PDF Office/PDF Master/KMClass/KMPDFViewController/Toolbar/KMPDFToolbarController.swift

@@ -117,11 +117,11 @@ class KMPDFToolbarController: NSViewController {
         tabsMoreButton.superview?.layer?.backgroundColor = contendBox.fillColor.cgColor
         
         tabsView = ComponentTabs.init()
+        tabsView.frame = CGRectMake(0, 0, 446, 40)
         
         scrollDocumentView.wantsLayer = true
-        scrollDocumentView.layer?.backgroundColor = NSColor.clear.cgColor
         tabsScrollView.documentView = scrollDocumentView
-        
+      
         setUpData()
     }
     
@@ -160,7 +160,6 @@ class KMPDFToolbarController: NSViewController {
                                      toolbarManager.convertMode_Property,
                                      toolbarManager.protectMode_Property,
                                      toolbarManager.toolsMode_Property])
-        tabsView.frame = CGRectMake(0, 0, tabsView.viewWidth, CGRectGetHeight(tabsContendView.frame))
         tabsView.delegate = self
         
         scrollDocumentView.frame = CGRectMake(0, 0, tabsView.viewWidth, 28)
@@ -258,7 +257,6 @@ class KMPDFToolbarController: NSViewController {
         if pointX-12-264 > 10 {
             xValue = pointX - 12 - 264
             tabsLeftConst.constant = xValue
-            tabsRightConst.constant = CGRectGetWidth(view.frame) - tabsView.viewWidth - 12 - 264 - rightViewWidthConst.constant - 12 - xValue
             
             tabsMoreButton.superview?.isHidden = true
         } else {

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

@@ -59,13 +59,13 @@ class KMPDFToolbarManager: NSObject {
     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"))
     
     //MARK: -工具栏
-    let markupMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Markup", comment: ""), identifier: KMPDFToolbar_Markup_Identifier)
-    let editMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Edit", comment: ""), identifier: KMPDFToolbar_Edit_Identifier)
-    let formMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Form", comment: ""), identifier: KMPDFToolbar_Form_Identifier)
-    let fillMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Fill", comment: ""), identifier: KMPDFToolbar_Fill_Identifier)
-    let convertMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Convert", comment: ""), identifier: KMPDFToolbar_Convert_Identifier)
-    let protectMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Protect", comment: ""), identifier: KMPDFToolbar_Protect_Identifier)
-    let toolsMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: NSLocalizedString("Tools", comment: ""), identifier: KMPDFToolbar_Tools_Identifier)
+    let markupMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Markup"), identifier: KMPDFToolbar_Markup_Identifier)
+    let editMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Edit"), identifier: KMPDFToolbar_Edit_Identifier)
+    let formMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Form"), identifier: KMPDFToolbar_Form_Identifier)
+    let fillMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Fill"), identifier: KMPDFToolbar_Fill_Identifier)
+    let convertMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Convert"), identifier: KMPDFToolbar_Convert_Identifier)
+    let protectMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Protect"), identifier: KMPDFToolbar_Protect_Identifier)
+    let toolsMode_Property = ComponentTabsProperty(tabsType: .underline_Center, state: .normal, showIcon: false, title: KMLocalizedString("Tools"), identifier: KMPDFToolbar_Tools_Identifier)
     
     //MARK: -右侧模块
     var undoProperty: ComponentButtonProperty = ComponentButtonProperty(type: .text_gray_opacity, size: .xs, onlyIcon: true, icon: NSImage(named: "toolbar_undo"), keepPressState: false, identifier: KMPDFToolbar_undo_Identifier)

+ 2 - 0
PDF Office/PDF Master/KMClass/Settings/SettingsManager.swift

@@ -77,6 +77,8 @@ import Cocoa
      
 }
 
+let APPAppearanceChangedNotificationName       = "APPAppearanceChangedNotificationName"
+
 //General
 let settingsAppearanceKey       = "settingsAppearanceKey"
 let settingsAuthorKey           = "settingsAuthorKey"

BIN
PDF Office/PDF Master/Third Pard Library/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate


BIN
PDF Office/PDF Master/Third Pard Library/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop


+ 56 - 32
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -3719,12 +3719,6 @@
 		BB52F5602CC1FC03007418DB /* KMLinkPageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB52F55F2CC1FC03007418DB /* KMLinkPageView.xib */; };
 		BB52F5612CC1FC03007418DB /* KMLinkPageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB52F55F2CC1FC03007418DB /* KMLinkPageView.xib */; };
 		BB52F5622CC1FC03007418DB /* KMLinkPageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB52F55F2CC1FC03007418DB /* KMLinkPageView.xib */; };
-		BB52F5652CC22FE8007418DB /* KMPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52F5632CC22FE8007418DB /* KMPDFViewController.swift */; };
-		BB52F5662CC22FE8007418DB /* KMPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52F5632CC22FE8007418DB /* KMPDFViewController.swift */; };
-		BB52F5672CC22FE8007418DB /* KMPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52F5632CC22FE8007418DB /* KMPDFViewController.swift */; };
-		BB52F5682CC22FE8007418DB /* KMPDFViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB52F5642CC22FE8007418DB /* KMPDFViewController.xib */; };
-		BB52F5692CC22FE8007418DB /* KMPDFViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB52F5642CC22FE8007418DB /* KMPDFViewController.xib */; };
-		BB52F56A2CC22FE8007418DB /* KMPDFViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB52F5642CC22FE8007418DB /* KMPDFViewController.xib */; };
 		BB52F56C2CC2369C007418DB /* KMLinkEmailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52F56B2CC2369C007418DB /* KMLinkEmailView.swift */; };
 		BB52F56D2CC2369C007418DB /* KMLinkEmailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52F56B2CC2369C007418DB /* KMLinkEmailView.swift */; };
 		BB52F56E2CC2369C007418DB /* KMLinkEmailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52F56B2CC2369C007418DB /* KMLinkEmailView.swift */; };
@@ -4281,12 +4275,6 @@
 		BB897229294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB897228294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift */; };
 		BB89722A294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB897228294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift */; };
 		BB89722B294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB897228294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift */; };
-		BB89722E294B08DE0045787C /* KMWatermarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89722C294B08DE0045787C /* KMWatermarkViewController.swift */; };
-		BB89722F294B08DE0045787C /* KMWatermarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89722C294B08DE0045787C /* KMWatermarkViewController.swift */; };
-		BB897230294B08DE0045787C /* KMWatermarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89722C294B08DE0045787C /* KMWatermarkViewController.swift */; };
-		BB897231294B08DE0045787C /* KMWatermarkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB89722D294B08DE0045787C /* KMWatermarkViewController.xib */; };
-		BB897232294B08DE0045787C /* KMWatermarkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB89722D294B08DE0045787C /* KMWatermarkViewController.xib */; };
-		BB897233294B08DE0045787C /* KMWatermarkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB89722D294B08DE0045787C /* KMWatermarkViewController.xib */; };
 		BB897236294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB897234294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.swift */; };
 		BB897237294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB897235294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.xib */; };
 		BB89723A294B3C840045787C /* KMWatermarkPropertyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB897238294B3C840045787C /* KMWatermarkPropertyController.swift */; };
@@ -5107,6 +5095,24 @@
 		BBDE52BB2BF3676C000545B2 /* KMPresentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDE52BA2BF3676C000545B2 /* KMPresentTableViewCell.swift */; };
 		BBDE52BC2BF3676C000545B2 /* KMPresentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDE52BA2BF3676C000545B2 /* KMPresentTableViewCell.swift */; };
 		BBDE52BD2BF3676C000545B2 /* KMPresentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDE52BA2BF3676C000545B2 /* KMPresentTableViewCell.swift */; };
+		BBDF17FC2CD47F8500ACDB15 /* KMEditDocumentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF17FA2CD47F8500ACDB15 /* KMEditDocumentController.swift */; };
+		BBDF17FD2CD47F8500ACDB15 /* KMEditDocumentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF17FA2CD47F8500ACDB15 /* KMEditDocumentController.swift */; };
+		BBDF17FE2CD47F8500ACDB15 /* KMEditDocumentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF17FA2CD47F8500ACDB15 /* KMEditDocumentController.swift */; };
+		BBDF17FF2CD47F8500ACDB15 /* KMEditDocumentController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF17FB2CD47F8500ACDB15 /* KMEditDocumentController.xib */; };
+		BBDF18002CD47F8500ACDB15 /* KMEditDocumentController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF17FB2CD47F8500ACDB15 /* KMEditDocumentController.xib */; };
+		BBDF18012CD47F8500ACDB15 /* KMEditDocumentController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF17FB2CD47F8500ACDB15 /* KMEditDocumentController.xib */; };
+		BBDF18042CD482D100ACDB15 /* KMWatermarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF18022CD482D100ACDB15 /* KMWatermarkController.swift */; };
+		BBDF18052CD482D100ACDB15 /* KMWatermarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF18022CD482D100ACDB15 /* KMWatermarkController.swift */; };
+		BBDF18062CD482D100ACDB15 /* KMWatermarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF18022CD482D100ACDB15 /* KMWatermarkController.swift */; };
+		BBDF18072CD482D100ACDB15 /* KMWatermarkController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF18032CD482D100ACDB15 /* KMWatermarkController.xib */; };
+		BBDF18082CD482D100ACDB15 /* KMWatermarkController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF18032CD482D100ACDB15 /* KMWatermarkController.xib */; };
+		BBDF18092CD482D100ACDB15 /* KMWatermarkController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF18032CD482D100ACDB15 /* KMWatermarkController.xib */; };
+		BBDF18152CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF18132CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift */; };
+		BBDF18162CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF18132CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift */; };
+		BBDF18172CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF18132CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift */; };
+		BBDF18182CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF18142CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib */; };
+		BBDF18192CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF18142CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib */; };
+		BBDF181A2CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBDF18142CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib */; };
 		BBE01DC12BF60D9200304FA4 /* KMTabStripController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE01DC02BF60D9200304FA4 /* KMTabStripController.swift */; };
 		BBE01DC22BF60D9200304FA4 /* KMTabStripController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE01DC02BF60D9200304FA4 /* KMTabStripController.swift */; };
 		BBE01DC32BF60D9200304FA4 /* KMTabStripController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE01DC02BF60D9200304FA4 /* KMTabStripController.swift */; };
@@ -7357,8 +7363,6 @@
 		BB52F5502CC1FAB2007418DB /* KMLinkViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLinkViewController.xib; sourceTree = "<group>"; };
 		BB52F55B2CC1FBF6007418DB /* KMLinkPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLinkPageView.swift; sourceTree = "<group>"; };
 		BB52F55F2CC1FC03007418DB /* KMLinkPageView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLinkPageView.xib; sourceTree = "<group>"; };
-		BB52F5632CC22FE8007418DB /* KMPDFViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFViewController.swift; sourceTree = "<group>"; };
-		BB52F5642CC22FE8007418DB /* KMPDFViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPDFViewController.xib; sourceTree = "<group>"; };
 		BB52F56B2CC2369C007418DB /* KMLinkEmailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLinkEmailView.swift; sourceTree = "<group>"; };
 		BB52F56F2CC236A2007418DB /* KMLinkEmailView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLinkEmailView.xib; sourceTree = "<group>"; };
 		BB52F5732CC236B1007418DB /* KMLinkWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLinkWebView.swift; sourceTree = "<group>"; };
@@ -7607,8 +7611,6 @@
 		BB89721F294AF9080045787C /* KMWatermarkAdjectiveTopBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkAdjectiveTopBarView.swift; sourceTree = "<group>"; };
 		BB897223294B07960045787C /* KMWatermarkAdjectiveTopBarItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkAdjectiveTopBarItemView.swift; sourceTree = "<group>"; };
 		BB897228294B08720045787C /* KMWatermarkAdjectiveTopBarItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkAdjectiveTopBarItemModel.swift; sourceTree = "<group>"; };
-		BB89722C294B08DE0045787C /* KMWatermarkViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkViewController.swift; sourceTree = "<group>"; };
-		BB89722D294B08DE0045787C /* KMWatermarkViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMWatermarkViewController.xib; sourceTree = "<group>"; };
 		BB897234294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkAdjectivePropertyBaseController.swift; sourceTree = "<group>"; };
 		BB897235294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMWatermarkAdjectivePropertyBaseController.xib; sourceTree = "<group>"; };
 		BB897238294B3C840045787C /* KMWatermarkPropertyController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkPropertyController.swift; sourceTree = "<group>"; };
@@ -7950,6 +7952,12 @@
 		BBDA8A682A31B50C006A2C4E /* KMCustomStepperView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCustomStepperView.swift; sourceTree = "<group>"; };
 		BBDA8A6C2A31F9A6006A2C4E /* KMDesignStepperView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMDesignStepperView.swift; sourceTree = "<group>"; };
 		BBDE52BA2BF3676C000545B2 /* KMPresentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPresentTableViewCell.swift; sourceTree = "<group>"; };
+		BBDF17FA2CD47F8500ACDB15 /* KMEditDocumentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMEditDocumentController.swift; sourceTree = "<group>"; };
+		BBDF17FB2CD47F8500ACDB15 /* KMEditDocumentController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMEditDocumentController.xib; sourceTree = "<group>"; };
+		BBDF18022CD482D100ACDB15 /* KMWatermarkController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkController.swift; sourceTree = "<group>"; };
+		BBDF18032CD482D100ACDB15 /* KMWatermarkController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMWatermarkController.xib; sourceTree = "<group>"; };
+		BBDF18132CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNWatermarkPropertyController.swift; sourceTree = "<group>"; };
+		BBDF18142CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNWatermarkPropertyController.xib; sourceTree = "<group>"; };
 		BBE01DC02BF60D9200304FA4 /* KMTabStripController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMTabStripController.swift; sourceTree = "<group>"; };
 		BBE0BDF229A22EF300440583 /* KMMainViewController+MenuAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KMMainViewController+MenuAction.swift"; sourceTree = "<group>"; };
 		BBE3709C2CB8BD3700390884 /* HistoryFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryFile.swift; sourceTree = "<group>"; };
@@ -11383,6 +11391,11 @@
 		ADE86AAB2B0342D400414DFA /* New */ = {
 			isa = PBXGroup;
 			children = (
+				BBDF18022CD482D100ACDB15 /* KMWatermarkController.swift */,
+				BBDF18032CD482D100ACDB15 /* KMWatermarkController.xib */,
+				BBDF180A2CD482D900ACDB15 /* Views */,
+				BBDF17FA2CD47F8500ACDB15 /* KMEditDocumentController.swift */,
+				BBDF17FB2CD47F8500ACDB15 /* KMEditDocumentController.xib */,
 			);
 			path = New;
 			sourceTree = "<group>";
@@ -12998,8 +13011,6 @@
 		BB52F54C2CC1FA69007418DB /* KMPDFViewController */ = {
 			isa = PBXGroup;
 			children = (
-				BB52F5632CC22FE8007418DB /* KMPDFViewController.swift */,
-				BB52F5642CC22FE8007418DB /* KMPDFViewController.xib */,
 				BB8AA53E2CC66E490084F183 /* PDFImages.xcassets */,
 				BB8AA5422CC6711B0084F183 /* KMPDFConfig.swift */,
 				BBBE68132CC7C02800358B31 /* KMPDFViewManager.swift */,
@@ -13772,8 +13783,6 @@
 				BBADCF602AF3CB92004ECE0C /* KMWatermarkCollectionViewItem.xib */,
 				BBB612B02AF4C388000F3724 /* KMBatchOperateAddWatermarkViewController.swift */,
 				BBADCF552AF3C7B2004ECE0C /* KMBatchOperateAddWatermarkViewController.xib */,
-				BB89722C294B08DE0045787C /* KMWatermarkViewController.swift */,
-				BB89722D294B08DE0045787C /* KMWatermarkViewController.xib */,
 				BB2F61562966B69D001CB369 /* KMWatermarkPropertyHomeController.swift */,
 				BB2F61572966B69D001CB369 /* KMWatermarkPropertyHomeController.xib */,
 				BB897238294B3C840045787C /* KMWatermarkPropertyController.swift */,
@@ -14565,6 +14574,15 @@
 			path = RightSideViews;
 			sourceTree = "<group>";
 		};
+		BBDF180A2CD482D900ACDB15 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				BBDF18132CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift */,
+				BBDF18142CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
 		BBE0CC642CC0E09800559868 /* KMDeviceBrowserWindowController */ = {
 			isa = PBXGroup;
 			children = (
@@ -15787,7 +15805,6 @@
 				AD1CA4342A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
 				AD62606E2A9D968A006C6413 /* KMEditPDFAssets.xcassets in Resources */,
 				BBFA1CDE2B60DC0C0053AD4A /* KMScreenShotMaskViewController.xib in Resources */,
-				BB52F5682CC22FE8007418DB /* KMPDFViewController.xib in Resources */,
 				ADEC7A81299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */,
 				BB4EEF3029763EE7003A3537 /* KMRedactBaseWindowController.xib in Resources */,
 				BB254D5A2B2A985A00C37B3B /* KMTTSWindowController.xib in Resources */,
@@ -15932,6 +15949,7 @@
 				BBE7888A2CBD2463008086E2 /* SidebarDemoVC.xib in Resources */,
 				AD3AAD272B0B6FB100DE5FE7 /* KMCompareContentView.xib in Resources */,
 				BBD9223D2B50D6D600DB9585 /* rate_pic_star.pdf in Resources */,
+				BBDF18182CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */,
 				BB1B0B042B4FC6E900889528 /* KMCustomColorGuideView.xib in Resources */,
 				65341C772C63CCFE00FE30F9 /* KMSearchReplaceWindowController.xib in Resources */,
 				BB853C672AF87502009C20C1 /* KMBatchOperateRemoveWatermarkViewController.xib in Resources */,
@@ -15978,6 +15996,7 @@
 				BBE66D092B55467C009343FA /* repeatTrialAlert_icon.png in Resources */,
 				BB19A7462CB7B7A0008204DC /* KMHomeFilesHeaderView.xib in Resources */,
 				BBD922332B50D61200DB9585 /* KMRateWindowController.xib in Resources */,
+				BBDF17FF2CD47F8500ACDB15 /* KMEditDocumentController.xib in Resources */,
 				BBE788FF2CBD2464008086E2 /* MessageVC.xib in Resources */,
 				BBB789932BE8BF2400F7E09C /* AITypeItemChooseView.xib in Resources */,
 				BB1E7F2C2B4FE2C6002D9785 /* GuideInfoImages.xcassets in Resources */,
@@ -15985,6 +16004,7 @@
 				BBF62C742B0347D1007B7E86 /* SplitWindowController.xib in Resources */,
 				ADD1B6BF2942DD3D00C3FFF7 /* KMPrintChooseView.xib in Resources */,
 				BB19A76B2CB7D107008204DC /* KMHomeFilesEmptyHeaderView.xib in Resources */,
+				BBDF18072CD482D100ACDB15 /* KMWatermarkController.xib in Resources */,
 				ADDF83A42B391A5D00A81A4E /* DSignatureConfigWindowController.xib in Resources */,
 				9F8539EB2947131F00DF644E /* KMChromiumTabView.xib in Resources */,
 				BB8F454A295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
@@ -16101,7 +16121,6 @@
 				8997010128F40710009AF911 /* KMBookMarkViewController.xib in Resources */,
 				BBE788A52CBD2463008086E2 /* SliderVC.xib in Resources */,
 				89E4E7382964148E002DBA6F /* KMAnnotationPropertiesViewController.xib in Resources */,
-				BB897231294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				9F56648A2988B16F00020985 /* KMTextfieldVC.xib in Resources */,
 				AD3AAD452B0B7B7B00DE5FE7 /* KMCompareThumbView.xib in Resources */,
 				BBB789812BE8BF2300F7E09C /* AINewConfigWindowController.xib in Resources */,
@@ -16446,6 +16465,7 @@
 				AD1D483F2AFB81F4007AC1F0 /* KMMergeBlankView.xib in Resources */,
 				AD3AAD712B0DCC6800DE5FE7 /* KMCompareSaveWindow.xib in Resources */,
 				9F853A092947137500DF644E /* newtab.pdf in Resources */,
+				BBDF18082CD482D100ACDB15 /* KMWatermarkController.xib in Resources */,
 				BBF62C6D2B033B5B007B7E86 /* KMPDFEditExtractWindow.xib in Resources */,
 				9F0CB4A329683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
 				BB853C682AF87502009C20C1 /* KMBatchOperateRemoveWatermarkViewController.xib in Resources */,
@@ -16535,7 +16555,6 @@
 				AD8810B629A846B100178CA1 /* KMVerficationCodeWindowController.xib in Resources */,
 				BB0FE03B2B734DD1001E0F88 /* AITipIconView.xib in Resources */,
 				BB2EDF74296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
-				BB897232294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				BB19A7472CB7B7A0008204DC /* KMHomeFilesHeaderView.xib in Resources */,
 				BB52F59B2CC245C8007418DB /* KMLinkPopupWebView.xib in Resources */,
 				ADFA8F012B5649AE002595A4 /* KMAutoFlowOptionsSheetController.xib in Resources */,
@@ -16651,8 +16670,8 @@
 				BB0782FD2CD0BDD400101C81 /* KMSplitToolbar.xib in Resources */,
 				ADDF83722B391A5D00A81A4E /* DSignatureCreateViewController.xib in Resources */,
 				ADE86A7C2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
-				BB52F5692CC22FE8007418DB /* KMPDFViewController.xib in Resources */,
 				BBBE20982B21B1DF00509C4E /* KMPDFInsertWindowController.xib in Resources */,
+				BBDF18002CD47F8500ACDB15 /* KMEditDocumentController.xib in Resources */,
 				BBE7890C2CBD2464008086E2 /* TooltipVC.xib in Resources */,
 				BB031B822C47BB090099F7AD /* KMUserFbListHeaderItemView.xib in Resources */,
 				BB51074329A61B4100978662 /* ProgressSheet.xib in Resources */,
@@ -16786,6 +16805,7 @@
 				ADF9ED3429A850D200C4A943 /* KMAccountInfoView.xib in Resources */,
 				ADE787AF2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				ADE86AE12B0AF4B600414DFA /* KMCompareContentSettingWindowController.xib in Resources */,
+				BBDF18192CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */,
 				BB3A429B2B4BC75D006D0642 /* NotesPanel.xib in Resources */,
 				BBB789B82BE8BF2400F7E09C /* AIChatDefaultTIpItem.xib in Resources */,
 				89316826296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib in Resources */,
@@ -16999,7 +17019,6 @@
 				BBE788EC2CBD2464008086E2 /* EmptyVC.xib in Resources */,
 				BB3BA9082A13684A00623C08 /* Assets.xcassets in Resources */,
 				AD0FA51829A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */,
-				BB52F56A2CC22FE8007418DB /* KMPDFViewController.xib in Resources */,
 				BBFA1CE02B60DC0C0053AD4A /* KMScreenShotMaskViewController.xib in Resources */,
 				ADE3C1E929A5ABC200793B13 /* KMLoginWindowController.xib in Resources */,
 				ADF6B8722A480CCE0090CB78 /* KMComparativeView.xib in Resources */,
@@ -17143,7 +17162,6 @@
 				BB6AAF582C2175A3009C4CB1 /* KMEditPDFPopToolBarController.xib in Resources */,
 				BB9695B829BDB03E00FD68D3 /* InfoWindow.xib in Resources */,
 				9F1FE4E029406E4700E952CA /* .gclient in Resources */,
-				BB897233294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				9F0CB4BA2977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				BB9599D12B3184440062D346 /* KMRedactSelectPagesWindowController.xib in Resources */,
 				BBE788832CBD2463008086E2 /* WCCompWindowController.xib in Resources */,
@@ -17254,6 +17272,7 @@
 				ADE86A862B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				BB0FE03C2B734DD1001E0F88 /* AITipIconView.xib in Resources */,
 				BBB789B32BE8BF2400F7E09C /* AIChatTranslateResultItem.xib in Resources */,
+				BBDF18092CD482D100ACDB15 /* KMWatermarkController.xib in Resources */,
 				9FE0BBE92B0EFBA300CD1CAC /* KMAnnotationFontWindowController.xib in Resources */,
 				BBA8B7A82935CD740097D183 /* KMRemovePasswordAlertWindowController.xib in Resources */,
 				AD1CA4362A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
@@ -17279,6 +17298,7 @@
 				BB5BE4F32B060EB500D51BF2 /* KMLanguageViewController.xib in Resources */,
 				9FF371F62C69E1B3005F9CC5 /* Localizable.strings in Resources */,
 				BB8810902B4F7C4100AFA63E /* KMVerificationExpiredViewController.xib in Resources */,
+				BBDF181A2CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */,
 				BBB7898F2BE8BF2300F7E09C /* AIHeaderView.xib in Resources */,
 				9F5752EE2B58FF73005DC303 /* KMAnnotationFromViewController.xib in Resources */,
 				AD1CA4052A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */,
@@ -17385,6 +17405,7 @@
 				BBFA1CE82B60DDC50053AD4A /* KMScreenShotEditViewController.xib in Resources */,
 				BB328B6F2B565BEC00B382C6 /* iVersion.bundle in Resources */,
 				ADBC2D3C299F0A5A006280C8 /* KMPrintHelpViewController.xib in Resources */,
+				BBDF18012CD47F8500ACDB15 /* KMEditDocumentController.xib in Resources */,
 				AD1D481E2AFB6B96007AC1F0 /* KMMergeWindowController.xib in Resources */,
 				ADB2D6F4294741720029D2B3 /* KMPrintPaperSetView.xib in Resources */,
 				BB031B892C47BB090099F7AD /* KMUserFbTypeItemView.xib in Resources */,
@@ -17581,7 +17602,6 @@
 				BB2A984A2B26A99A00647AF3 /* KMBatchAddWatermarkOperation.swift in Sources */,
 				BBB9B30D299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */,
 				BB146FC6299DC0D100784A6A /* GTMSessionFetcherService.m in Sources */,
-				BB89722E294B08DE0045787C /* KMWatermarkViewController.swift in Sources */,
 				89E9B406295D268E00AEFA61 /* KMEditImagePropertyViewController.swift in Sources */,
 				899700F628F4051B009AF911 /* KMAnnotationViewController.swift in Sources */,
 				F359916929261F0D000D25DE /* CPDFListView+Tool.m in Sources */,
@@ -17831,6 +17851,7 @@
 				BB276A582B038D1100AB5578 /* KMOCRPDFWindowController.swift in Sources */,
 				BB46CF4C2AFBB34900281EDF /* AutoSaveManager.swift in Sources */,
 				65341C742C63CCFE00FE30F9 /* KMSearchReplaceWindowController.swift in Sources */,
+				BBDF18152CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift in Sources */,
 				89E4E7352964148E002DBA6F /* KMAnnotationPropertiesViewController.m in Sources */,
 				9F221ED729A9EC0900978A59 /* KMFillSignTextPanel.swift in Sources */,
 				BBF8A4032AE8E10100788BAC /* KMBatchConvertParameter.swift in Sources */,
@@ -18087,6 +18108,7 @@
 				BB146FC0299DC0D100784A6A /* GTMSessionFetcherLogging.m in Sources */,
 				AD1CA4212A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */,
 				BB2F9AB82AFCC3AD00F9DD93 /* KMProfileInfo.swift in Sources */,
+				BBDF18042CD482D100ACDB15 /* KMWatermarkController.swift in Sources */,
 				9FDCD8162B6CC88000E22166 /* KMFormActionButtonPopWindowController.swift in Sources */,
 				ADFCEB752B4FC1660001EBAF /* KMAdsWebView.swift in Sources */,
 				9F5664872988B16F00020985 /* KMTextfieldVC.swift in Sources */,
@@ -18165,6 +18187,7 @@
 				BBB7899C2BE8BF2400F7E09C /* CustomCornerView.swift in Sources */,
 				BB162E92294FFE020088E9D1 /* KMWatermarkModel.swift in Sources */,
 				9FDD0F842952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
+				BBDF17FC2CD47F8500ACDB15 /* KMEditDocumentController.swift in Sources */,
 				AD6218D42A7D29F40088475C /* KMComparativeGradientView.swift in Sources */,
 				BBFE6E5D2930809A00142C01 /* KMMergeCollectionPageViewItem.swift in Sources */,
 				BB0A55212A30968900B6E84B /* KMDesignBaseView.swift in Sources */,
@@ -18318,7 +18341,6 @@
 				BB4D02A92C22D17B0001474A /* KMEditPDFPopGuideView.swift in Sources */,
 				AD1FE8442BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */,
 				BBC8A76D2B05EDDF00FA9377 /* KMThumbnail.swift in Sources */,
-				BB52F5652CC22FE8007418DB /* KMPDFViewController.swift in Sources */,
 				BBBE68142CC7C02800358B31 /* KMPDFViewManager.swift in Sources */,
 				BB6AAF532C2175A3009C4CB1 /* KMEditPDFPopToolBarController.swift in Sources */,
 				BBE788842CBD2463008086E2 /* WCCompWindowController.swift in Sources */,
@@ -18925,9 +18947,7 @@
 				BB146FC7299DC0D100784A6A /* GTMSessionFetcherService.m in Sources */,
 				BB52F5972CC245BF007418DB /* KMLinkPopupWebView.swift in Sources */,
 				BB8B17332907B63D001C5EA5 /* CipherTextView.swift in Sources */,
-				BB52F5662CC22FE8007418DB /* KMPDFViewController.swift in Sources */,
 				89E9B407295D268E00AEFA61 /* KMEditImagePropertyViewController.swift in Sources */,
-				BB89722F294B08DE0045787C /* KMWatermarkViewController.swift in Sources */,
 				ADDF83812B391A5D00A81A4E /* DSignatureSaveFolderViewController.swift in Sources */,
 				F3A0F85A2CC940DD00E7373F /* KMNPDFInsertBlankWindowController.swift in Sources */,
 				BB9599C42B31647B0062D346 /* KMRedactPropertiesWindowController.swift in Sources */,
@@ -19620,6 +19640,7 @@
 				BB8810AA2B4F7D7500AFA63E /* KMVerificationViewController.m in Sources */,
 				BB897221294AF9080045787C /* KMWatermarkAdjectiveTopBarView.swift in Sources */,
 				9F72D2092994BDAF00DCACF1 /* KMNotificationVC.swift in Sources */,
+				BBDF17FD2CD47F8500ACDB15 /* KMEditDocumentController.swift in Sources */,
 				BB1B0ACF2B4FC6E900889528 /* KMFunctionGuideMultiController.swift in Sources */,
 				BBB789852BE8BF2300F7E09C /* AIChatInfoManager.swift in Sources */,
 				BB5EC3632C2BDC9D0090EF27 /* KMTextAlignmentController.swift in Sources */,
@@ -19723,6 +19744,7 @@
 				BB4F7E7A2B0C45BB0077EC8C /* KMNoteOutlineFilterViewController.swift in Sources */,
 				BBC28F4F2B0F58DD00D73206 /* KMImageToolTipWindow.swift in Sources */,
 				ADDF83962B391A5D00A81A4E /* DSignDetailTypeACellView.swift in Sources */,
+				BBDF18052CD482D100ACDB15 /* KMWatermarkController.swift in Sources */,
 				BB146FB8299DC0D100784A6A /* GTLRRuntimeCommon.m in Sources */,
 				658FDBAA2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */,
 				BB2C84892BAE753F00AF6142 /* KMBotaTools.swift in Sources */,
@@ -19754,6 +19776,7 @@
 				BBA8B7A42935CD740097D183 /* KMRemovePasswordAlertWindowController.swift in Sources */,
 				BBF98C352C0EE46200436CC7 /* KMToolbarCustomItemView.swift in Sources */,
 				AD7D5C932B8F20FE006562CD /* synctex_parser_utils.m in Sources */,
+				BBDF18162CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift in Sources */,
 				BB4EEF4D2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
 				BBF811F22B0763930074874F /* PDFConvertObject.swift in Sources */,
 				9F1FE4FA29406E4700E952CA /* CTTabStripView.m in Sources */,
@@ -20214,7 +20237,6 @@
 				F3F0B27529B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
 				BB853CAC2AF8FA46009C20C1 /* KMHeaderFooterManagerWindowController.swift in Sources */,
 				BBF811F32B0763930074874F /* PDFConvertObject.swift in Sources */,
-				BB897230294B08DE0045787C /* KMWatermarkViewController.swift in Sources */,
 				BBD8EE952B8EC86A00EB05FE /* AutoSaveFileItem.m in Sources */,
 				ADE86AE82B0AF50B00414DFA /* KMCompareCoveringSettingWindowController.swift in Sources */,
 				BB8B17342907B63D001C5EA5 /* CipherTextView.swift in Sources */,
@@ -20632,7 +20654,6 @@
 				9F1FE4DA29406E4700E952CA /* NSString+Utils.m in Sources */,
 				BBA00AC62B157C880043D903 /* KMToolbarZoomItemView.swift in Sources */,
 				BB4EEF4E2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
-				BB52F5672CC22FE8007418DB /* KMPDFViewController.swift in Sources */,
 				F37322E9292DF9410013862C /* CPDFAnnotationModel.m in Sources */,
 				BB99ACCC292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
 				BB146FF5299DC0D100784A6A /* OIDLoopbackHTTPServer.m in Sources */,
@@ -20969,6 +20990,7 @@
 				BBDE52BD2BF3676C000545B2 /* KMPresentTableViewCell.swift in Sources */,
 				ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				AD867FC329DFC39400F00440 /* KMBOTAAnnotationItem.swift in Sources */,
+				BBDF18062CD482D100ACDB15 /* KMWatermarkController.swift in Sources */,
 				ADDF83432B391A5C00A81A4E /* DSignatureConfigWindowController.swift in Sources */,
 				9F53D5592AD6908600CCF9D8 /* KMAnnotationLinkViewController.swift in Sources */,
 				89E4E7372964148E002DBA6F /* KMAnnotationPropertiesViewController.m in Sources */,
@@ -21032,6 +21054,7 @@
 				BBCE57122A72712200508EFC /* NSWindowController+KMExtension.swift in Sources */,
 				BB10FAF02AFE233C00F18D65 /* KMLineInspector.swift in Sources */,
 				BB04FD0E2B206F3600D80F7B /* KMPlanViewController.swift in Sources */,
+				BBDF18172CD4853C00ACDB15 /* KMNWatermarkPropertyController.swift in Sources */,
 				ADE3C1A129A3894900793B13 /* KMSearchTableRowView.swift in Sources */,
 				BB2C845C2BAE6DC100AF6142 /* KMLeftMethodMode.swift in Sources */,
 				AD1CA41B2A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */,
@@ -21182,6 +21205,7 @@
 				BBFA1CDC2B60DBF90053AD4A /* KMScreenShotMaskViewController.swift in Sources */,
 				BBFDFAA02AF3814000E08AA2 /* KMTextHintWindowController.swift in Sources */,
 				9F0CB50F2986564500007028 /* KMDesignToken+BorderLeft.swift in Sources */,
+				BBDF17FE2CD47F8500ACDB15 /* KMEditDocumentController.swift in Sources */,
 				BB2CC5662AF123A400D7A796 /* KMBatchHeader.swift in Sources */,
 				BBE788F82CBD2464008086E2 /* SliderVC.swift in Sources */,
 				656C1E3C2CD0745200295F82 /* KMConvertWordSettingView.swift in Sources */,

+ 1 - 1
PDF Office/PDF Reader Pro.xcodeproj/xcshareddata/xcschemes/PDF Reader Pro DMG.xcscheme

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
    LastUpgradeVersion = "1520"
-   version = "1.8">
+   version = "1.7">
    <BuildAction
       parallelizeBuildables = "YES"
       buildImplicitDependencies = "YES">

+ 28 - 231
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -814,86 +814,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "39B43F76-F785-40FE-A4D8-BE0BF8E9F31E"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "301"
-            endingLineNumber = "301"
-            landmarkName = "mouseUp(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "EB05A20B-8F4A-480D-BE92-2B5433EDD3F9"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentStepper/ComponentStepper.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "163"
-            endingLineNumber = "163"
-            landmarkName = "mouseUp(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "7C6B781C-2DF9-438F-B739-5285D9CD3ACB"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Controller/Position/ComponentCPosition.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "187"
-            endingLineNumber = "187"
-            landmarkName = "mouseUp(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "F47598C1-A224-4B5A-81CD-422AE6DB6035"
-            shouldBeEnabled = "No"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Controller/Color/ComponentCColorCustom.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "153"
-            endingLineNumber = "153"
-            landmarkName = "mouseUp(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "5A81DEC8-8876-49C5-9B3D-272EE86F0146"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Controller/Color/ComponentCColorGroup.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "127"
-            endingLineNumber = "127"
-            landmarkName = "mouseUp(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -2012,70 +1932,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "D43E679A-04EA-4C6B-AA3E-267AC739A688"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentInputNumber.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "296"
-            endingLineNumber = "296"
-            landmarkName = "mouseDown(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "266BA9D9-30A6-4902-A385-0D45B7E383F0"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/InputNumber/ComponentStepper/ComponentStepper.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "144"
-            endingLineNumber = "144"
-            landmarkName = "mouseDown(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "8933E4D0-1396-4D4E-8750-BF17F414FB1B"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Controller/Color/ComponentCColorCustom.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "148"
-            endingLineNumber = "148"
-            landmarkName = "mouseDown(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "DD45AB3C-D073-430C-AAEE-8F07AEB6F662"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Controller/Color/ComponentCColorGroup.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "122"
-            endingLineNumber = "122"
-            landmarkName = "mouseDown(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -2324,54 +2180,9 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "652"
             endingLineNumber = "652"
-            landmarkName = "pdfUpdatedFinish()"
+            landmarkName = "pdfViewScaleDidChanged(_:)"
             landmarkType = "7">
             <Locations>
-               <Location
-                  uuid = "97C9BA92-03E3-4CE4-96E9-9F3E7B344C8D - a52fdbc99b785c66"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMPDFViewController.presentationTopViewType(_: PDF_Reader_Pro.KMPresentationTopViewController, withButton: __C.NSButton, isSeletion: Swift.Bool) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMPDFViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "652"
-                  endingLineNumber = "652"
-                  offsetFromSymbolStart = "96">
-               </Location>
-               <Location
-                  uuid = "97C9BA92-03E3-4CE4-96E9-9F3E7B344C8D - f3e7fdae63f899c0"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMPDFViewController.presentationTopViewClear(_: PDF_Reader_Pro.KMPresentationTopViewController, withButton: __C.NSButton) -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMPDFViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "652"
-                  endingLineNumber = "652"
-                  offsetFromSymbolStart = "56">
-               </Location>
-               <Location
-                  uuid = "97C9BA92-03E3-4CE4-96E9-9F3E7B344C8D - 5aeb18d2f0ccd9ce"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMPDFViewController.pdfUpdatedFinish() -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMPDFViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "652"
-                  endingLineNumber = "652"
-                  offsetFromSymbolStart = "268">
-               </Location>
                <Location
                   uuid = "97C9BA92-03E3-4CE4-96E9-9F3E7B344C8D - 59842cff062adcf0"
                   shouldBeEnabled = "Yes"
@@ -2385,22 +2196,7 @@
                   endingColumnNumber = "9223372036854775807"
                   startingLineNumber = "652"
                   endingLineNumber = "652"
-                  offsetFromSymbolStart = "2636">
-               </Location>
-               <Location
-                  uuid = "97C9BA92-03E3-4CE4-96E9-9F3E7B344C8D - 59842cff062adcf0"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMPDFViewController.pdfViewScaleDidChanged(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/KMPDFViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "652"
-                  endingLineNumber = "652"
-                  offsetFromSymbolStart = "2872">
+                  offsetFromSymbolStart = "1424">
                </Location>
                <Location
                   uuid = "97C9BA92-03E3-4CE4-96E9-9F3E7B344C8D - 59842cff062adcf0"
@@ -2430,43 +2226,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "231"
-            endingLineNumber = "231"
+            startingLineNumber = "234"
+            endingLineNumber = "234"
             landmarkName = "setDocument"
             landmarkType = "24">
             <Locations>
                <Location
-                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - c44283d1f17e196a"
+                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - 615b7ea7d301d1da"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.setDocument.modify : Swift.Optional&lt;__C.CPDFDocument&gt;"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.setDocument.setter : Swift.Optional&lt;__C.CPDFDocument&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 = "231"
-                  endingLineNumber = "231"
-                  offsetFromSymbolStart = "0">
-               </Location>
-               <Location
-                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - 7a215de82f00776e"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.setDocument.modify : Swift.Optional&lt;__C.CPDFDocument&gt; with unmangled suffix &quot;.resume.0&quot;"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/%3Ccompiler-generated%3E"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "0"
-                  endingLineNumber = "0"
-                  offsetFromSymbolStart = "20">
+                  startingLineNumber = "234"
+                  endingLineNumber = "234"
+                  offsetFromSymbolStart = "72">
                </Location>
                <Location
-                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - d80aac5b2f97b175"
+                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - d80aac5b2f97b1d6"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -2476,12 +2257,28 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "231"
-                  endingLineNumber = "231"
+                  startingLineNumber = "234"
+                  endingLineNumber = "234"
                   offsetFromSymbolStart = "28">
                </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "FF103FB7-1915-407E-98E3-B3EBF46CC7D4"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ToolsLibrary/NSView/NibLoadable.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "25"
+            endingLineNumber = "25"
+            landmarkName = "createFromNib(in:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>