Преглед изворни кода

【2025】【Edit】编辑模块处理

niehaoyu пре 3 месеци
родитељ
комит
508cc7bbb9
29 измењених фајлова са 2129 додато и 3838 уклоњено
  1. 9 1
      PDF Office/KMComponentLibrary/KMComponentLibrary.xcodeproj/project.pbxproj
  2. 15 25
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorGroup.swift
  3. 22 10
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorGroup.xib
  4. 166 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorItem.swift
  5. 56 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorItem.xib
  6. 5 54
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSlider.swift
  7. 1 40
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSlider.xib
  8. 2 11
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSliderProperty.swift
  9. 0 2
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.h
  10. 3 3
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift
  11. 1 10
      PDF Office/PDF Master/KMClass/ComponentLibraryDemo/Demo/SliderVC.swift
  12. 56 29
      PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift
  13. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_center.imageset/Contents.json
  14. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_center.imageset/fontAlign_center.pdf
  15. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_justify.imageset/Contents.json
  16. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_justify.imageset/fontAlign_justify.pdf
  17. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_left.imageset/Contents.json
  18. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_left.imageset/fontAlign_left.pdf
  19. 12 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_right.imageset/Contents.json
  20. 89 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_right.imageset/fontAlign_right.pdf
  21. 93 127
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift
  22. 17 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditImageController.swift
  23. 319 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditImageController.xib
  24. 112 1422
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditPDFTextPropertyViewController.swift
  25. 195 1941
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditPDFTextPropertyViewController.xib
  26. 34 56
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift
  27. 87 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Toolbar/KMEditPDFToolbarItemView.swift
  28. 16 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  29. 516 107
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

+ 9 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary.xcodeproj/project.pbxproj

@@ -179,6 +179,8 @@
 		BB5A9D1C2CB64D4800F64C1F /* Component.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BB5A9C732CB64D4800F64C1F /* Component.xcassets */; };
 		BB5A9D1D2CB64D4800F64C1F /* brand-variables.json in Resources */ = {isa = PBXBuildFile; fileRef = BB5A9C742CB64D4800F64C1F /* brand-variables.json */; };
 		BB7221562CD1E3B500331DEA /* ComponentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7221552CD1E3B500331DEA /* ComponentManager.swift */; };
+		BB79E7142CE60FDE0052CAD5 /* ComponentCSelectorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79E7132CE60FDE0052CAD5 /* ComponentCSelectorItem.swift */; };
+		BB79E7162CE60FEB0052CAD5 /* ComponentCSelectorItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB79E7152CE60FEB0052CAD5 /* ComponentCSelectorItem.xib */; };
 		BBE788472CBCFCD2008086E2 /* ComponentBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE788462CBCFCD2008086E2 /* ComponentBaseView.swift */; };
 /* End PBXBuildFile section */
 
@@ -356,6 +358,8 @@
 		BB5A9C732CB64D4800F64C1F /* Component.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Component.xcassets; sourceTree = "<group>"; };
 		BB5A9C742CB64D4800F64C1F /* brand-variables.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "brand-variables.json"; sourceTree = "<group>"; };
 		BB7221552CD1E3B500331DEA /* ComponentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentManager.swift; sourceTree = "<group>"; };
+		BB79E7132CE60FDE0052CAD5 /* ComponentCSelectorItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentCSelectorItem.swift; sourceTree = "<group>"; };
+		BB79E7152CE60FEB0052CAD5 /* ComponentCSelectorItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ComponentCSelectorItem.xib; sourceTree = "<group>"; };
 		BBE788462CBCFCD2008086E2 /* ComponentBaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentBaseView.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -762,9 +766,9 @@
 		BB5A9C152CB64D4700F64C1F /* Slider */ = {
 			isa = PBXGroup;
 			children = (
+				BB5A9C172CB64D4700F64C1F /* ComponentSliderProperty.swift */,
 				BB5A9C1B2CB64D4700F64C1F /* ComponentSlider.swift */,
 				BB5A9C162CB64D4700F64C1F /* ComponentSlider.xib */,
-				BB5A9C172CB64D4700F64C1F /* ComponentSliderProperty.swift */,
 				BB5A9C182CB64D4700F64C1F /* ComponentSliderPoint */,
 			);
 			path = Slider;
@@ -825,6 +829,8 @@
 				BB5A9C2C2CB64D4700F64C1F /* ComponentCSelectorProperty.swift */,
 				BB5A9C3B2CB64D4700F64C1F /* ComponentCSelector.swift */,
 				BB5A9C3A2CB64D4700F64C1F /* ComponentCSelector.xib */,
+				BB79E7132CE60FDE0052CAD5 /* ComponentCSelectorItem.swift */,
+				BB79E7152CE60FEB0052CAD5 /* ComponentCSelectorItem.xib */,
 				BB5A9C3C2CB64D4700F64C1F /* ComponentCSelectorGroup.swift */,
 				BB5A9C2D2CB64D4700F64C1F /* ComponentCSelectorGroup.xib */,
 				BB5A9C2E2CB64D4700F64C1F /* Position */,
@@ -1068,6 +1074,7 @@
 				BB5A9CC22CB64D4800F64C1F /* ComponentAlert.xib in Resources */,
 				BB5A9D062CB64D4800F64C1F /* ComponentGroup.xib in Resources */,
 				BB5A9CD22CB64D4800F64C1F /* ComponentSlider.xib in Resources */,
+				BB79E7162CE60FEB0052CAD5 /* ComponentCSelectorItem.xib in Resources */,
 				BB5A9D0A2CB64D4800F64C1F /* ComponentToolTip.xib in Resources */,
 				BB5A9D052CB64D4800F64C1F /* ComponentSelect.xib in Resources */,
 				BB5A9CE62CB64D4800F64C1F /* ComponentCPosition.xib in Resources */,
@@ -1187,6 +1194,7 @@
 				BB5A9C7A2CB64D4800F64C1F /* ComponentTabsProperty.swift in Sources */,
 				BB5A9CBF2CB64D4800F64C1F /* ComponentNotification.swift in Sources */,
 				BB5A9C932CB64D4800F64C1F /* ComponentRadio.swift in Sources */,
+				BB79E7142CE60FDE0052CAD5 /* ComponentCSelectorItem.swift in Sources */,
 				BB5A9C802CB64D4800F64C1F /* ComponentSidebarPageTurnerProperty.swift in Sources */,
 				BB5A9CDF2CB64D4800F64C1F /* ComponentStepper.swift in Sources */,
 				BB5A9CF22CB64D4800F64C1F /* ComponentButton.swift in Sources */,

+ 15 - 25
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorGroup.swift

@@ -9,6 +9,7 @@ import Cocoa
 
 public class ComponentCSelectorGroup: ComponentBaseXibView {
 
+    @IBOutlet var contendView: NSView!
     @IBOutlet var contendBox: NSBox!
 
     var csPropertyArr: [ComponentCSelectorProperty] = []
@@ -36,6 +37,8 @@ public class ComponentCSelectorGroup: ComponentBaseXibView {
     public override func awakeFromNib() {
         super.awakeFromNib()
        
+        contendView.wantsLayer = true
+        contendView.layer?.masksToBounds = true
     }
     
     public func updateItemProperty(_ propertys: [ComponentCSelectorProperty]) {
@@ -48,43 +51,30 @@ public class ComponentCSelectorGroup: ComponentBaseXibView {
         if csPropertyArr.count == 0 {
             return
         }
-        contendBox.borderWidth = 1
-        
-        if let value = ComponentLibrary.shared.getComponentValueFromKey("comp-field/colorFill-nor") {
-            let currentValue = value as! [String : Any]
-            contendBox.fillColor = ComponentLibrary.shared.getColor(rgbaDict: currentValue)
-        } else {
-            contendBox.fillColor = NSColor.clear
-        }
-        
-        if let value = ComponentLibrary.shared.getComponentValueFromKey("comp-field/colorBorder-nor") {
-            let currentValue = value as! [String : Any]
-            contendBox.borderColor = ComponentLibrary.shared.getColor(rgbaDict: currentValue)
-        } else {
-            contendBox.borderColor = NSColor.clear
-        }
-        
+        contendView.layer?.borderWidth = 1
+        contendView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("comp-field/colorFill-nor").cgColor
+        contendView.layer?.borderColor = ComponentLibrary.shared.getComponentColorFromKey("comp-field/colorBorder-nor").cgColor
         if let value = ComponentLibrary.shared.getComponentValueFromKey("radius/xs") {
             let currentValue = value as! CGFloat
-            contendBox.cornerRadius = currentValue
+            contendView.layer?.cornerRadius = currentValue
         }
         
         if let subviews = contendBox.contentView?.subviews {
             for view in subviews {
-                if view is ComponentCSelector {
+                if view is ComponentCSelectorItem {
                     view.removeFromSuperview()
                 }
             }
         }
         
         var itemXValue: CGFloat = 0
+        let viewWidth: CGFloat = CGRectGetWidth(bounds)/CGFloat(csPropertyArr.count)
         for i in 0...csPropertyArr.count - 1 {
             let itemProperty = csPropertyArr[i]
-            let item = ComponentCSelector.init()
+            let item = ComponentCSelectorItem.init()
+            item.frame = CGRectMake(itemXValue, 0, viewWidth, CGRectGetHeight(contendBox.contentView!.bounds))
             item.properties = itemProperty
-            let viewWidth = itemProperty.propertyInfo.viewWidth
-            item.frame = CGRectMake(itemXValue, 0, viewWidth, viewWidth)
-            item.autoresizingMask = [.maxXMargin,.maxYMargin]
+            item.autoresizingMask = [.maxXMargin, .height]
             item.setTarget(self, action: #selector(cSelectorItemClicked(_:)))
             contendBox.contentView?.addSubview(item)
             
@@ -93,13 +83,13 @@ public class ComponentCSelectorGroup: ComponentBaseXibView {
         
     }
     
-    @objc func cSelectorItemClicked(_ item: ComponentCSelector) {
+    @objc func cSelectorItemClicked(_ item: ComponentCSelectorItem) {
         let property = item.properties
         
         if let subviews = contendBox.contentView?.subviews {
             for view in subviews {
-                if view is ComponentCSelector {
-                    let itemView = view as! ComponentCSelector
+                if view is ComponentCSelectorItem {
+                    let itemView = view as! ComponentCSelectorItem
                     if itemView.properties != property {
                         itemView.properties.state = .normal
                         itemView.refreshUI()

+ 22 - 10
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorGroup.xib

@@ -9,6 +9,7 @@
         <customObject id="-2" userLabel="File's Owner" customClass="ComponentCSelectorGroup" customModule="KMComponentLibrary" customModuleProvider="target">
             <connections>
                 <outlet property="contendBox" destination="I5v-gf-gRb" id="8bV-6K-Baj"/>
+                <outlet property="contendView" destination="tA7-3x-bbE" id="NMh-p9-aRs"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@@ -17,19 +18,30 @@
             <rect key="frame" x="0.0" y="0.0" width="191" height="38"/>
             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
             <subviews>
-                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="I5v-gf-gRb">
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="tA7-3x-bbE">
                     <rect key="frame" x="0.0" y="0.0" width="191" height="38"/>
-                    <view key="contentView" id="lAk-SY-Xh7">
-                        <rect key="frame" x="1" y="1" width="189" height="36"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                    </view>
-                </box>
+                    <subviews>
+                        <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="I5v-gf-gRb">
+                            <rect key="frame" x="1" y="1" width="189" height="36"/>
+                            <view key="contentView" id="lAk-SY-Xh7">
+                                <rect key="frame" x="0.0" y="0.0" width="189" height="36"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            </view>
+                        </box>
+                    </subviews>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="I5v-gf-gRb" secondAttribute="bottom" constant="1" id="0D6-Du-5IG"/>
+                        <constraint firstItem="I5v-gf-gRb" firstAttribute="top" secondItem="tA7-3x-bbE" secondAttribute="top" constant="1" id="P95-Oh-3ez"/>
+                        <constraint firstAttribute="trailing" secondItem="I5v-gf-gRb" secondAttribute="trailing" constant="1" id="nFe-vh-lrg"/>
+                        <constraint firstItem="I5v-gf-gRb" firstAttribute="leading" secondItem="tA7-3x-bbE" secondAttribute="leading" constant="1" id="w9c-6f-SVU"/>
+                    </constraints>
+                </customView>
             </subviews>
             <constraints>
-                <constraint firstAttribute="bottom" secondItem="I5v-gf-gRb" secondAttribute="bottom" id="lP6-SS-qbM"/>
-                <constraint firstItem="I5v-gf-gRb" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="qAL-gf-mEH"/>
-                <constraint firstAttribute="trailing" secondItem="I5v-gf-gRb" secondAttribute="trailing" id="tNg-1s-m5a"/>
-                <constraint firstItem="I5v-gf-gRb" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="z7g-tq-12H"/>
+                <constraint firstItem="tA7-3x-bbE" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="O53-FJ-Ua8"/>
+                <constraint firstAttribute="trailing" secondItem="tA7-3x-bbE" secondAttribute="trailing" id="T0C-y7-FZc"/>
+                <constraint firstAttribute="bottom" secondItem="tA7-3x-bbE" secondAttribute="bottom" id="d4g-NU-FW7"/>
+                <constraint firstItem="tA7-3x-bbE" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="qxO-7L-MEh"/>
             </constraints>
             <point key="canvasLocation" x="99.5" y="68"/>
         </customView>

+ 166 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorItem.swift

@@ -0,0 +1,166 @@
+//
+//  ComponentCSelectorItem.swift
+//  KMComponentLibrary
+//
+//  Created by Niehaoyu on 2024/11/14.
+//
+
+import Cocoa
+
+class ComponentCSelectorItem: ComponentBaseXibView {
+    
+    @IBOutlet var iconBox: NSBox!
+    @IBOutlet var iconImage: NSImageView!
+    
+    @IBOutlet var iconImgWidthConst: NSLayoutConstraint!
+    
+    // MARK: Private Property
+    private var _properties : ComponentCSelectorProperty = ComponentCSelectorProperty()
+    
+    private var action: Selector?   // 点击事件
+    private weak var target: AnyObject? // 对象目标
+    
+    public var customData: Any? //提供给外部关联自定义数据
+    
+    public override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    // MARK: 初始化
+    deinit {
+        NotificationCenter.default.removeObserver(self)
+        
+    }
+    public required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+    }
+    
+    public override func awakeFromNib() {
+        super.awakeFromNib()
+        
+    }
+    
+    // MARK: - Set & Get
+    public var properties : ComponentCSelectorProperty {
+        get {
+           return _properties
+        }
+        set {
+            _properties = newValue
+            
+            ComponentLibrary.shared.configCSelectorComponent(properties: _properties)
+            
+            reloadData()
+        }
+    }
+    
+    //MARK: - SetupUI
+    func setupUI() {
+        
+        if properties.size == .s {
+            iconImgWidthConst.constant = 16
+        } else {
+            iconImgWidthConst.constant = 20
+        }
+    }
+    
+    func refreshUI() {
+        
+        var fillColor: NSColor?
+        var borderWidth: CGFloat = 0
+        var borderColor: NSColor?
+        
+        var iconImage = properties.iconImage
+        
+        if properties.state == .normal {
+            fillColor = properties.propertyInfo.color_nor
+            borderWidth = 0
+            borderColor = properties.propertyInfo.borderColor_nor
+        } else if properties.state == .hover {
+            fillColor = properties.propertyInfo.color_hov
+            borderWidth = properties.propertyInfo.borderWidth
+            borderColor = properties.propertyInfo.borderColor_hov
+            if let image = properties.icon_hov_Image {
+                iconImage = image
+            }
+        } else if properties.state == .pressed {
+            fillColor = properties.propertyInfo.color_active
+            borderWidth = properties.propertyInfo.borderWidth
+            borderColor = properties.propertyInfo.borderColor_active
+        }
+        
+        self.iconImage.image = iconImage
+        
+        if let color = fillColor {
+            iconBox.fillColor = color
+        }
+        iconBox.borderWidth = borderWidth
+        
+        if let color = borderColor {
+            iconBox.borderColor = color
+        }
+        
+    }
+    
+    public func setTarget(_ target: AnyObject?, action: Selector?) {
+        self.target = target!
+        self.action = action!
+    }
+    
+    public func reloadData() {
+        
+        setupUI()
+        
+        refreshUI()
+    }
+    
+    //MARK: - MouseEvent
+    public override func mouseEntered(with event: NSEvent) {
+        super.mouseEntered(with: event)
+         
+        if properties.state != .pressed {
+            properties.state = .hover
+        }
+        refreshUI()
+        
+    }
+    
+    public override func mouseMoved(with event: NSEvent) {
+        super.mouseMoved(with: event)
+        
+    }
+     
+    public override func mouseExited(with event: NSEvent) {
+        super.mouseExited(with: event)
+        
+        if properties.state != .pressed {
+            properties.state = .normal
+        }
+        
+        refreshUI()
+        
+    }
+    
+    public override func mouseDown(with event: NSEvent) {
+        super.mouseDown(with: event)
+        
+        properties.state = .pressed
+        
+        refreshUI()
+    }
+    
+    public override func mouseUp(with event: NSEvent) {
+        super.mouseUp(with: event)
+        
+        if let target = target, let action = action {
+            _ = target.perform(action, with: self)
+        }
+    }
+}

+ 56 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Controller/ComponentCSelectorItem.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="ComponentCSelectorItem" customModule="KMComponentLibrary" customModuleProvider="target">
+            <connections>
+                <outlet property="iconBox" destination="Zq7-b9-BWd" id="Gx7-Ws-ZEl"/>
+                <outlet property="iconImage" destination="Q5Z-rT-97U" id="9K8-E3-NPU"/>
+                <outlet property="iconImgWidthConst" destination="kaG-FD-9Bf" id="xde-RP-7Ue"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe">
+            <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Zq7-b9-BWd">
+                    <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+                    <view key="contentView" id="INB-uN-M6r">
+                        <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Q5Z-rT-97U">
+                                <rect key="frame" x="6" y="6" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="Q5Z-rT-97U" secondAttribute="height" multiplier="1:1" id="X3w-wX-l7Y"/>
+                                    <constraint firstAttribute="width" constant="20" id="kaG-FD-9Bf"/>
+                                </constraints>
+                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="test" id="CkP-mY-4Ow"/>
+                            </imageView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="Q5Z-rT-97U" firstAttribute="centerY" secondItem="INB-uN-M6r" secondAttribute="centerY" id="0z8-Kx-e8t"/>
+                            <constraint firstItem="Q5Z-rT-97U" firstAttribute="centerX" secondItem="INB-uN-M6r" secondAttribute="centerX" id="ZCB-2W-M7q"/>
+                        </constraints>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="Zq7-b9-BWd" secondAttribute="trailing" id="Blf-BF-Dvk"/>
+                <constraint firstAttribute="bottom" secondItem="Zq7-b9-BWd" secondAttribute="bottom" id="bv3-ej-tLh"/>
+                <constraint firstItem="Zq7-b9-BWd" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="cDs-cj-zKo"/>
+                <constraint firstItem="Zq7-b9-BWd" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="iNc-9M-STr"/>
+            </constraints>
+            <point key="canvasLocation" x="-64" y="77.5"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="test" width="200" height="200"/>
+    </resources>
+</document>

+ 5 - 54
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSlider.swift

@@ -19,16 +19,10 @@ public class ComponentSlider: ComponentBaseXibView {
     @IBOutlet var contendBox: NSBox!
     @IBOutlet var bottomBox: NSBox!
     @IBOutlet var upBox: NSBox!
-    @IBOutlet var leftIconImageView: NSImageView!
-    @IBOutlet var rightIconImageView: NSImageView!
-    @IBOutlet var sliderBGView: NSView!
+     @IBOutlet var sliderBGView: NSView!
 
     @IBOutlet var sliderPoint: ComponentSliderPoint!
-    @IBOutlet var selectItem: ComponentSelect!
-     
-    @IBOutlet var rightIconRightConst: NSLayoutConstraint!
-    @IBOutlet var selectItemHeightConst: NSLayoutConstraint!
-    
+ 
     // MARK: Private Property
     private var _properties : ComponentSliderProperty = ComponentSliderProperty()
     
@@ -69,8 +63,7 @@ public class ComponentSlider: ComponentBaseXibView {
         bottomBox.borderWidth = 0
         bottomBox.fillColor = .clear
         bottomBox.autoresizingMask = [.minXMargin, .width, .maxXMargin, .minYMargin, .maxYMargin]
-        
-        
+         
         sliderPoint.autoresizingMask = [.minXMargin, .maxXMargin, .minYMargin, .maxYMargin]
         
         upBox.fillColor = .clear
@@ -116,47 +109,8 @@ public class ComponentSlider: ComponentBaseXibView {
         
         bottomBox.fillColor = properties.propertyInfo.color_nor
         
-        var bottomBorRightValue: CGFloat = 0
-        
-        if properties.showInput == true {
-            bottomBorRightValue += 96
-            selectItem.isHidden = false
-        } else {
-            selectItem.isHidden = true
-        }
-        
-        rightIconImageView.isHidden = true
-        if properties.rightIcon != nil {
-            rightIconRightConst.constant = bottomBorRightValue
-            bottomBorRightValue += 24
-            rightIconImageView.isHidden = false
-            rightIconImageView.image = properties.rightIcon
-        }
-
-        var sliderViewXValue: CGFloat = 0
-        leftIconImageView.isHidden = true
-        if properties.leftIcon != nil {
-            leftIconImageView.isHidden = false
-            leftIconImageView.image = properties.leftIcon
-            sliderViewXValue += 24
-        }
-        
-        sliderBGView.frame = CGRectMake(sliderViewXValue, 0, CGRectGetWidth(frame)-sliderViewXValue-bottomBorRightValue, CGRectGetHeight(frame))
         sliderBGView.autoresizingMask = [.minXMargin, .width, .maxXMargin, .minYMargin, .maxYMargin, .height]
-        
-        let size = properties.size
-        let isDisabled = properties.isDisabled
-        let selectItemProperty: ComponentSelectProperties = ComponentSelectProperties.init(size: size,
-                                                                                           state: .normal,
-                                                                                           isDisabled: isDisabled,
-                                                                                           isError: false,
-                                                                                           leftIcon: false,
-                                                                                           placeholder: "placeholder",
-                                                                                           errorText: "errorText")
-        selectItem.properties = selectItemProperty
-        
-        selectItemHeightConst.constant = selectItem.properties.propertyInfo.viewHeight
-        
+ 
     }
     
     func refreshUI() {
@@ -200,10 +154,7 @@ public class ComponentSlider: ComponentBaseXibView {
         refreshUI()
         
         updatePercentValue()
-        
-        DispatchQueue.main.asyncAfter(deadline: .now()+0.01) {
-            self.setupUI()
-        }
+ 
     }
     
     //MARK: - MouseEvent

+ 1 - 40
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSlider.xib

@@ -10,11 +10,6 @@
             <connections>
                 <outlet property="bottomBox" destination="axx-9V-fmT" id="Fiw-9b-DYi"/>
                 <outlet property="contendBox" destination="r9G-JW-6fU" id="NWX-X7-Q4P"/>
-                <outlet property="leftIconImageView" destination="I3x-xa-xQi" id="Jv1-1F-EEO"/>
-                <outlet property="rightIconImageView" destination="Yg9-JU-qLQ" id="G9H-Qb-oVY"/>
-                <outlet property="rightIconRightConst" destination="bI6-kl-mH2" id="mca-7S-rXl"/>
-                <outlet property="selectItem" destination="oYl-7x-Jya" id="2jb-s3-Nhs"/>
-                <outlet property="selectItemHeightConst" destination="UYp-eE-5TL" id="qhD-2x-By3"/>
                 <outlet property="sliderBGView" destination="9AB-vP-I5h" id="YUa-h5-DQy"/>
                 <outlet property="sliderPoint" destination="lZ8-WZ-fWl" id="fxW-BZ-Xga"/>
                 <outlet property="upBox" destination="uyy-IZ-qtK" id="Apy-ED-5q9"/>
@@ -32,17 +27,9 @@
                         <rect key="frame" x="0.0" y="0.0" width="360" height="40"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="I3x-xa-xQi">
-                                <rect key="frame" x="2" y="12" width="16" height="16"/>
-                                <constraints>
-                                    <constraint firstAttribute="height" constant="16" id="EeM-PH-UXj"/>
-                                    <constraint firstAttribute="width" constant="16" id="fT7-xG-gnk"/>
-                                </constraints>
-                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="test" id="xPM-nu-Q26"/>
-                            </imageView>
                             <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9AB-vP-I5h">
                                 <rect key="frame" x="0.0" y="0.0" width="360" height="40"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 <subviews>
                                     <box fixedFrame="YES" boxType="custom" cornerRadius="2" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="axx-9V-fmT">
                                         <rect key="frame" x="0.0" y="18" width="360" height="4"/>
@@ -66,30 +53,7 @@
                                     </customView>
                                 </subviews>
                             </customView>
-                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Yg9-JU-qLQ">
-                                <rect key="frame" x="342" y="12" width="16" height="16"/>
-                                <constraints>
-                                    <constraint firstAttribute="width" constant="16" id="VlE-Nk-XP4"/>
-                                    <constraint firstAttribute="height" constant="16" id="W5c-ys-sAf"/>
-                                </constraints>
-                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="test" id="Jlm-gC-xKn"/>
-                            </imageView>
-                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="oYl-7x-Jya" customClass="ComponentSelect" customModule="KMComponentLibrary" customModuleProvider="target">
-                                <rect key="frame" x="280" y="0.0" width="80" height="40"/>
-                                <constraints>
-                                    <constraint firstAttribute="width" constant="80" id="RDF-ds-yyJ"/>
-                                    <constraint firstAttribute="height" constant="40" id="UYp-eE-5TL"/>
-                                </constraints>
-                            </customView>
                         </subviews>
-                        <constraints>
-                            <constraint firstItem="Yg9-JU-qLQ" firstAttribute="centerY" secondItem="wNM-LL-DmW" secondAttribute="centerY" id="0sx-nF-ZBW"/>
-                            <constraint firstItem="I3x-xa-xQi" firstAttribute="centerY" secondItem="wNM-LL-DmW" secondAttribute="centerY" id="PGe-jq-db9"/>
-                            <constraint firstAttribute="trailing" secondItem="Yg9-JU-qLQ" secondAttribute="trailing" constant="2" id="bI6-kl-mH2"/>
-                            <constraint firstItem="I3x-xa-xQi" firstAttribute="leading" secondItem="wNM-LL-DmW" secondAttribute="leading" constant="2" id="d8O-Eq-o4G"/>
-                            <constraint firstItem="oYl-7x-Jya" firstAttribute="centerY" secondItem="wNM-LL-DmW" secondAttribute="centerY" id="qLi-mC-Ids"/>
-                            <constraint firstAttribute="trailing" secondItem="oYl-7x-Jya" secondAttribute="trailing" id="sr3-89-Ij0"/>
-                        </constraints>
                     </view>
                 </box>
             </subviews>
@@ -102,7 +66,4 @@
             <point key="canvasLocation" x="151" y="129"/>
         </customView>
     </objects>
-    <resources>
-        <image name="test" width="200" height="200"/>
-    </resources>
 </document>

+ 2 - 11
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSliderProperty.swift

@@ -12,29 +12,20 @@ import AppKit
 public class ComponentSliderProperty: NSObject {
     
     public var size: ComponentSize = .m
-    public var state: ComponentState = .normal 
-    public var leftIcon: NSImage?       //左侧icon
-    public var rightIcon: NSImage?      //右侧icon
+    public var state: ComponentState = .normal
     public var isDisabled: Bool = false //禁用状态
-    public var showInput: Bool = false //显示右侧输入框
     public var percent: CGFloat = 0.5 // 0-1,当前进度
-     
+    
     public var propertyInfo = SliderPropertyInfo()
     
     public init(size: ComponentSize = .m,
                 state: ComponentState = .normal,
-                leftIcon: NSImage? = nil,
-                rightIcon: NSImage? = nil,
                 isDisabled: Bool = false,
-                showInput: Bool = false,
                 percent: CGFloat = 0.5) {
         
         self.size = size
         self.state = state
-        self.leftIcon = leftIcon
-        self.rightIcon = rightIcon
         self.isDisabled = isDisabled
-        self.showInput = showInput
         self.percent = percent
         
     }

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

@@ -105,8 +105,6 @@ typedef NS_ENUM(NSInteger, CToolMode) {
     CMeasureToolMode,
     CRedactErasureToolMode,
     CEditPDFToolMode,         //编辑模式
-    CEditPDFToolMode_Text,    //编辑模式_文字
-    CEditPDFToolMode_Image    //编辑模式_图片
 };
 
 typedef NS_ENUM(NSUInteger, KMPDFActiveFormsAlignType) {

+ 3 - 3
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -763,7 +763,7 @@ extension KMMainViewController {
     
     @objc func menuItemEditingClick_CutImage(sender: NSMenuItem) {
         
-        self.editPDFHanddler.cropAction()
+        self.editPDFHanddler?.cropAction()
     }
     
     @objc func menuItemEditingClick_ReplaceImage(sender: NSMenuItem) {
@@ -3100,7 +3100,7 @@ extension KMMainViewController : KMToolbarViewControllerDelegate {
     
     func mainToolDidClicked(_ toolController: KMToolbarController, _ beforeType: KMToolbarViewType, _ type: KMToolbarViewType, _ item: KMToolbarItemView , _ pages: [Int]) {
         if beforeType == .editPDF {
-            self.editPDFHanddler.enterEditPDF()
+            self.editPDFHanddler?.enterEditPDF()
         }
         
         if(type != .Page) {
@@ -3909,7 +3909,7 @@ extension KMMainViewController : KMToolbarViewControllerDelegate {
                     self.toggleRightPane()
                     
                     if self.listView.toolMode == .editPDFToolMode {
-                        self.editPDFHanddler.rightSideLastState = toolbarItem.isSelected ? .open : .close
+                        self.editPDFHanddler?.rightSideLastState = toolbarItem.isSelected ? .open : .close
                     }
                 } else if itemID == KMDocumentRedactToolbarItemIdentifier {
                     self.listView.toolMode = .redactToolMode

+ 1 - 10
PDF Office/PDF Master/KMClass/ComponentLibraryDemo/Demo/SliderVC.swift

@@ -41,16 +41,7 @@ class SliderVC: NSViewController {
         }
         
         let showInput = self.inputButton.state == .on
-        
-        let properties: ComponentSliderProperty = ComponentSliderProperty.init(size: size, 
-                                                                               state: .normal,
-                                                                               leftIcon: self.leftIconBtn.state == .on ? ComponentLibrary.shared.image(forResource: "test") : nil,
-                                                                               rightIcon: self.rightIconBtn.state == .on ? ComponentLibrary.shared.image(forResource: "test") : nil,
-                                                                               isDisabled: isDisable,
-                                                                               showInput: showInput)
-        
-        slider.properties = properties
-        self.sliderHeightConst.constant = properties.propertyInfo.viewHeight
+         
         
         
     }

+ 56 - 29
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -77,6 +77,8 @@ import KMComponentLibrary
     //右边
     var rightSideController: KMRightSideController?
     
+    var editPDFHanddler: KMEditPDfHanddler?
+    
     //MARK: - 旧代码,有需要用到的拿出来,写好备注
     
     @IBOutlet weak var leftView: NSView!
@@ -252,7 +254,6 @@ import KMComponentLibrary
         }
     }
     
-    let editPDFHanddler = KMEditPDfHanddler()
     
     var distanceMeasureInfoWindowController: CDistanceMeasureInfoWindowController?
     var perimeterMeasureInfoWindowController: CPerimeterMeasureInfoWindowController?
@@ -267,7 +268,7 @@ import KMComponentLibrary
         self.listView.delegate = nil
         self.listView.document?.delegate = nil
         
-        self.editPDFHanddler.clearData()
+        self.editPDFHanddler?.clearData()
         self.removeEventMonitor()
         self.removeKeyEventMonitor()
     }
@@ -349,17 +350,41 @@ import KMComponentLibrary
     func updatePDFViewAnnotationMode() {
         let toolbarMode = viewManager.toolMode
         
+        listView.toolMode = .noteToolMode
+        
         let subToolMode = viewManager.subToolMode
         
-        if subToolMode == .None {
+        if toolbarMode == .None {
             listView.annotationType = .unkown
             
-        } else if subToolMode == .Edit_Link {
+        } else if toolbarMode == .Markup {
             
-            listView.toolMode = .noteToolMode
-            listView.annotationType = .link
+        } else if toolbarMode == .Edit {
+            listView.toolMode = .editPDFToolMode
+            if editPDFHanddler == nil {
+                editPDFHanddler = KMEditPDfHanddler()
+            }
+            editPDFHanddler?.listView = self.listView
+            editPDFHanddler?.enterEditPDF()
+            
+            if subToolMode == .None {
+                
+            } else if subToolMode == .Edit_text {
+                
+            } else if subToolMode == .Edit_Image {
+
+            } else if subToolMode == .Edit_Link {
+                listView.toolMode = .noteToolMode
+                
+                listView.annotationType = .link
+                
+            }
+        } else if toolbarMode == .Form {
+            
+        } else if toolbarMode == .Fill {
             
         }
+        
     }
     
     //MARK: - SplitView
@@ -496,7 +521,7 @@ import KMComponentLibrary
         
         infoSplitViewRightConst.constant = 264
         
-        rightSideController?.subToolMode = viewManager.subToolMode
+        rightSideController?.viewManager = self.viewManager
         
     }
     
@@ -1951,44 +1976,46 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
     }
     
     func pdfViewEditingSelectionDidChanged(_ pdfView: CPDFView!) {
-        self.editPDFHanddler.pdfViewEditingSelectionDidChanged(pdfView)
+        // 文本区块 选中文本已经变化
+        self.editPDFHanddler?.pdfViewEditingSelectionDidChanged(pdfView)
     }
     
     func pdfViewEditingAreaDidChanged(_ pdfView: CPDFView!) {
-        self.editPDFHanddler.pdfViewEditingAreaDidChanged(pdfView)
+        //编辑模块变化
+        rightSideController?.reloadDataWithPDFView(pdfView: (pdfView as! CPDFListView))
     }
     
     func pdfViewEditingCropBoundsDidChanged(_ pdfView: CPDFView!, editing editArea: CPDFEditArea!) {
-        self.editPDFHanddler.pdfViewEditingCropBoundsDidChanged(pdfView, editing: editArea)
+        self.editPDFHanddler?.pdfViewEditingCropBoundsDidChanged(pdfView, editing: editArea)
     }
     
     //编辑PDF 创建图片区域回调
     func pdfViewEditingAddImageArea(_ pdfView: CPDFView!, add page: CPDFPage!, add rect: CGRect) {
-        self.editPDFHanddler.pdfViewEditingAddImageArea(pdfView, add: page, add: rect)
+        self.editPDFHanddler?.pdfViewEditingAddImageArea(pdfView, add: page, add: rect)
     }
     
     func pdfViewEditingAddTextArea(_ pdfView: CPDFView!, add page: CPDFPage!, add rect: CGRect) {
-        self.editPDFHanddler.pdfViewEditingAddTextArea(pdfView, add: page, add: rect)
+        self.editPDFHanddler?.pdfViewEditingAddTextArea(pdfView, add: page, add: rect)
     }
     
     func pdfViewMobileEditingBegan(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
-        self.editPDFHanddler.pdfViewMobileEditingBegan(point, for: pdfView, forEditing: editingAreas)
+        self.editPDFHanddler?.pdfViewMobileEditingBegan(point, for: pdfView, forEditing: editingAreas)
     }
     
     func pdfViewMobileEditingMove(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
-        self.editPDFHanddler.pdfViewMobileEditingMove(point, for: pdfView, forEditing: editingAreas)
+        self.editPDFHanddler?.pdfViewMobileEditingMove(point, for: pdfView, forEditing: editingAreas)
     }
     
     func pdfViewMobileEditingEnd(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
-        self.editPDFHanddler.pdfViewMobileEditingEnd(point, for: pdfView, forEditing: editingAreas)
+        self.editPDFHanddler?.pdfViewMobileEditingEnd(point, for: pdfView, forEditing: editingAreas)
     }
     
     func pdfViewEditingSelectCharDidChanged(_ pdfView: CPDFView!) {
-        self.editPDFHanddler.pdfViewEditingSelectCharDidChanged(pdfView)
+        self.editPDFHanddler?.pdfViewEditingSelectCharDidChanged(pdfView)
     }
     
     func pdfViewEditingExitCropMode(_ pdfView: CPDFView!, forEditing editingArea: CPDFEditImageArea!) {
-        self.editPDFHanddler.pdfViewEditingExitCropMode(pdfView, forEditing: editingArea)
+        self.editPDFHanddler?.pdfViewEditingExitCropMode(pdfView, forEditing: editingArea)
     }
     
     func pdfListViewKeyDownIsContinue(_ pdfListView: CPDFListView!, theEvent: NSEvent!) -> Bool {
@@ -1998,14 +2025,14 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
         KMPrint(theEvent.keyCode)
         if self.listView.isEditing() == true {
             if control && theEvent.keyCode == 11 { // ctr + b
-                self.editPDFHanddler.fontBoldAction()
+                self.editPDFHanddler?.fontBoldAction()
                 return false
             } else if control && theEvent.keyCode == 34 { // ctr +i
-                self.editPDFHanddler.fontItalicAction()
+                self.editPDFHanddler?.fontItalicAction()
                 return false
             } else if theEvent.keyCode == 36 { // enter
                 if self.listView.isCropMode {
-                    self.editPDFHanddler.cropComfirmAction()
+                    self.editPDFHanddler?.cropComfirmAction()
                     return false
                 }
             }
@@ -2107,11 +2134,11 @@ extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
     }
     
     func pdfViewEditingOperationDidChanged(_ pdfView: CPDFView!) {
-        self.editPDFHanddler.pdfViewEditingOperationDidChanged(pdfView)
+        self.editPDFHanddler?.pdfViewEditingOperationDidChanged(pdfView)
     }
     
     func pdfViewEditingDoubleClick(_ pdfView: CPDFView!, imageArea editArea: CPDFEditArea!) {
-        self.editPDFHanddler.pdfViewEditingDoubleClick(pdfView, imageArea: editArea)
+        self.editPDFHanddler?.pdfViewEditingDoubleClick(pdfView, imageArea: editArea)
     }
     
     //MARK: - CPDFListViewDelegate
@@ -2901,7 +2928,7 @@ extension KMMainViewController {
             self.removeEventMonitor()
         }
         
-        self.editPDFHanddler.hiddenWindows()
+        self.editPDFHanddler?.hiddenWindows()
     }
     
     func viewWillLayoutFunction() {
@@ -2922,7 +2949,7 @@ extension KMMainViewController {
     
     func viewDidLoadOld() {
         mwcFlags.settingUpWindow = 1
-        self.editPDFHanddler.viewC = self
+       
         self.srHanddler.pdfView = self.listView
         
         self.initToolbar()
@@ -3514,7 +3541,7 @@ extension KMMainViewController {
         
         
         
-        self.editPDFHanddler.clearData()
+        self.editPDFHanddler?.clearData()
         
         let controller = KMPDFEditViewController(self.listView.document)
         
@@ -3588,7 +3615,7 @@ extension KMMainViewController {
     // MARK: - Edit PDF
     
     func enterEditPDF() {
-        self.editPDFHanddler.enterEditPDF()
+        self.editPDFHanddler?.enterEditPDF()
     }
     
     // MARK: - 数字签名
@@ -4308,9 +4335,9 @@ extension KMMainViewController {
                     let cmd = event.modifierFlags.contains(.command)
                     let shift = event.modifierFlags.contains(.shift)
                     if event.keyCode == 6 { // z
-                        let editPDFIng = self?.editPDFHanddler.isEditing ?? false
+                        let editPDFIng = self?.editPDFHanddler?.isEditing ?? false
                         if cmd && shift { // 恢复
-                            let can = self?.editPDFHanddler.listView?.canEditTextRedo() ?? false
+                            let can = self?.editPDFHanddler?.listView?.canEditTextRedo() ?? false
                             if can == false {
                                 return event
                             }
@@ -4319,7 +4346,7 @@ extension KMMainViewController {
                                 
                             }
                         } else if cmd { // 撤回
-                            let can = self?.editPDFHanddler.listView?.canEditTextUndo() ?? false
+                            let can = self?.editPDFHanddler?.listView?.canEditTextUndo() ?? false
                             if can == false {
                                 return event
                             }

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_center.imageset/fontAlign_center.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 1.250000 2.500000 cm
+0.062745 0.094118 0.156863 scn
+17.500000 15.000000 m
+0.000000 15.000000 l
+0.000000 13.125000 l
+17.500000 13.125000 l
+17.500000 15.000000 l
+h
+13.750000 10.625000 m
+3.750000 10.625000 l
+3.750000 8.750000 l
+13.750000 8.750000 l
+13.750000 10.625000 l
+h
+0.000000 6.250000 m
+17.500000 6.250000 l
+17.500000 4.375000 l
+0.000000 4.375000 l
+0.000000 6.250000 l
+h
+13.750000 1.875000 m
+3.750000 1.875000 l
+3.750000 0.000000 l
+13.750000 0.000000 l
+13.750000 1.875000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  553
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.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
+0000000643 00000 n
+0000000665 00000 n
+0000000838 00000 n
+0000000912 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+971
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_justify.imageset/fontAlign_justify.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 1.250000 2.500000 cm
+0.062745 0.094118 0.156863 scn
+17.500000 15.000000 m
+0.000000 15.000000 l
+0.000000 13.125000 l
+17.500000 13.125000 l
+17.500000 15.000000 l
+h
+17.500000 10.625000 m
+0.000000 10.625000 l
+0.000000 8.750000 l
+17.500000 8.750000 l
+17.500000 10.625000 l
+h
+0.000000 6.250000 m
+17.500000 6.250000 l
+17.500000 4.375000 l
+0.000000 4.375000 l
+0.000000 6.250000 l
+h
+17.500000 1.875000 m
+0.000000 1.875000 l
+0.000000 0.000000 l
+17.500000 0.000000 l
+17.500000 1.875000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  553
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.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
+0000000643 00000 n
+0000000665 00000 n
+0000000838 00000 n
+0000000912 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+971
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_left.imageset/fontAlign_left.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 1.250000 2.500000 cm
+0.062745 0.094118 0.156863 scn
+17.500000 15.000000 m
+0.000000 15.000000 l
+0.000000 13.125000 l
+17.500000 13.125000 l
+17.500000 15.000000 l
+h
+10.000000 10.625000 m
+0.000000 10.625000 l
+0.000000 8.750000 l
+10.000000 8.750000 l
+10.000000 10.625000 l
+h
+0.000000 6.250000 m
+17.500000 6.250000 l
+17.500000 4.375000 l
+0.000000 4.375000 l
+0.000000 6.250000 l
+h
+10.000000 1.875000 m
+0.000000 1.875000 l
+0.000000 0.000000 l
+10.000000 0.000000 l
+10.000000 1.875000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  553
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.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
+0000000643 00000 n
+0000000665 00000 n
+0000000838 00000 n
+0000000912 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+971
+%%EOF

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

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

+ 89 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/PDFImages.xcassets/PDF_Edit/fontAlign_right.imageset/fontAlign_right.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 1.250000 2.500000 cm
+0.062745 0.094118 0.156863 scn
+17.500000 15.000000 m
+0.000000 15.000000 l
+0.000000 13.125000 l
+17.500000 13.125000 l
+17.500000 15.000000 l
+h
+17.500000 10.625000 m
+7.500000 10.625000 l
+7.500000 8.750000 l
+17.500000 8.750000 l
+17.500000 10.625000 l
+h
+0.000000 6.250000 m
+17.500000 6.250000 l
+17.500000 4.375000 l
+0.000000 4.375000 l
+0.000000 6.250000 l
+h
+17.500000 1.875000 m
+7.500000 1.875000 l
+7.500000 0.000000 l
+17.500000 0.000000 l
+17.500000 1.875000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  553
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.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
+0000000643 00000 n
+0000000665 00000 n
+0000000838 00000 n
+0000000912 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+971
+%%EOF

+ 93 - 127
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift

@@ -17,23 +17,53 @@ class KMRightSideController: NSViewController {
     
     @IBOutlet var infoContendView: NSView!
     
-    var annotations: [CPDFAnnotation] = [] {
-        didSet {
-            reloadData()
+    var annotations: [CPDFAnnotation] {
+        get {
+            return self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
         }
     }
     
-    var pdfView: CPDFListView?
+    var editingAreas: [CPDFEditArea] {
+        get {
+            return self.pdfView?.editingAreas() as? [CPDFEditArea] ?? []
+        }
+    }
+    
+    var editingImageAreas: [CPDFEditImageArea] {
+        get {
+            var areas: [CPDFEditImageArea] = []
+            for area in self.editingAreas {
+                if let data = area as? CPDFEditImageArea {
+                    areas.append(data)
+                }
+            }
+            return areas
+        }
+    }
     
-    var subToolMode: KMPDFSubToolMode = .None {
-        //二级工具栏
+    var editingTextAreas: [CPDFEditTextArea] {
+        get {
+            var areas: [CPDFEditTextArea] = []
+            for area in self.editingAreas {
+                if let data = area as? CPDFEditTextArea {
+                    areas.append(data)
+                }
+            }
+            return areas
+        }
+    }
+    
+    var pdfView: CPDFListView?
+     
+    var viewManager: KMPDFViewManager? {
         didSet {
             updateUI()
         }
-    }
+    } 
     
     var contentViewController: NSViewController?
 
+    //MARK: - func
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
@@ -55,13 +85,13 @@ class KMRightSideController: NSViewController {
     }
     
     func updateTitleLabel() {
-        if subToolMode == .Edit_text {
+        if viewManager?.subToolMode == .Edit_text {
             titleLabel.stringValue = KMLocalizedString("Text")
-        } else if subToolMode == .Edit_Image {
+        } else if viewManager?.subToolMode == .Edit_Image {
             titleLabel.stringValue = KMLocalizedString("Image")
-        } else if subToolMode == .Edit_Link {
+        } else if viewManager?.subToolMode == .Edit_Link {
             titleLabel.stringValue = KMLocalizedString("Link")
-        } else if subToolMode == .Edit_Crop {
+        } else if viewManager?.subToolMode == .Edit_Crop {
             titleLabel.stringValue = KMLocalizedString("Crop")
         }
     }
@@ -72,138 +102,74 @@ class KMRightSideController: NSViewController {
         contentViewController?.view.removeFromSuperview()
         contentViewController = nil
         
-        if subToolMode == .Edit_Link {
-            let controller = KMLinkViewController.init()
-            controller.view.frame = infoContendView.bounds
-            controller.view.autoresizingMask = [.width, .height]
-            infoContendView.addSubview(controller.view)
-            contentViewController = controller
+        if viewManager?.toolMode == .Edit {
+            if editingAreas.isEmpty == true {
+                
+            } else if editingImageAreas.count == 0 && editingTextAreas.count > 0 {
+                //编辑文字
+                let controller = KMEditPDFTextPropertyViewController.init()
+                contentViewController = controller
+                
+            } else if editingImageAreas.count > 0 && editingTextAreas.count == 0 {
+                //编辑图片
+                let controller = KMEditImagePropertyViewController.init()
+                contentViewController = controller
+                
+            } else {
+                //多选
+            }
             
-            controller.pdfView = self.pdfView
+            if viewManager?.subToolMode == .Edit_Link {
+                //链接
+                let controller = KMLinkViewController.init()
+                controller.pdfView = self.pdfView
+                contentViewController = controller
+                
+            }
+        }
+        
+        if let contendVC = contentViewController {
+            contendVC.view.frame = infoContendView.bounds
+            contendVC.view.autoresizingMask = [.width, .height]
+            infoContendView.addSubview(contendVC.view)
         }
+        
     }
     
     func reloadData() {
-        if subToolMode == .Edit_Link && contentViewController is KMLinkViewController {
-            if (contentViewController as! KMLinkViewController).pdfView != self.pdfView {
-                (contentViewController as! KMLinkViewController).pdfView = self.pdfView
+        if viewManager?.toolMode == .Edit {
+            
+            if contentViewController == nil {
+                updateUI()
             }
             
-            var linkAnnotations: [CPDFLinkAnnotation] = []
-            for annotation in self.annotations {
-                if annotation is CPDFLinkAnnotation {
-                    linkAnnotations.append(annotation as! CPDFLinkAnnotation)
+            //Link
+            if viewManager?.subToolMode == .Edit_Link && contentViewController is KMLinkViewController {
+                if (contentViewController as! KMLinkViewController).pdfView != self.pdfView {
+                    (contentViewController as! KMLinkViewController).pdfView = self.pdfView
+                }
+                
+                var linkAnnotations: [CPDFLinkAnnotation] = []
+                for annotation in self.annotations {
+                    if annotation is CPDFLinkAnnotation {
+                        linkAnnotations.append(annotation as! CPDFLinkAnnotation)
+                    }
                 }
+                (contentViewController as! KMLinkViewController).annotations = linkAnnotations
+                (contentViewController as! KMLinkViewController).reloadData()
             }
-            (contentViewController as! KMLinkViewController).annotations = linkAnnotations
-            (contentViewController as! KMLinkViewController).reloadData()
+            
         }
         
+        
+        
     }
     
     public func reloadDataWithPDFView(pdfView: CPDFListView) {
         self.pdfView = pdfView
         
-        var selectedAnnotation : CPDFAnnotation? = nil
-        var activeAnnotations : [CPDFAnnotation] = []
-        if pdfView.activeAnnotations != nil && pdfView.activeAnnotations.count > 0 {
-            selectedAnnotation = pdfView.activeAnnotations.firstObject as? CPDFAnnotation
-            for annotation in pdfView.activeAnnotations {
-                activeAnnotations.append(annotation as! CPDFAnnotation)
-            }
-        }
-        var isSameAnnotation: Bool = true
-        for tAnnotation in activeAnnotations {
-            if tAnnotation.className != selectedAnnotation?.className {
-                isSameAnnotation = false
-                break
-            }
-        }
-        
-        self.annotations = activeAnnotations
-        
-//        if !isSameAnnotation {
-//            self.annotationProperties.annotations = []
-//            self.annotationProperties.isEmptyAnnotation = true
-//            return
-//        } else if selectedAnnotation is CPDFTextWidgetAnnotation || selectedAnnotation is CPDFChoiceWidgetAnnotation || selectedAnnotation is CPDFButtonWidgetAnnotation {
-//            if pdfView.toolMode != .formToolMode {
-//                self.annotationProperties.annotations = []
-//                self.annotationProperties.isEmptyAnnotation = true
-//                return
-//            }
-//        } else if (selectedAnnotation is KMAnnotationFromSignature) && (activeAnnotations.count > 1) {
-//            self.annotationProperties.annotations = []
-//            self.annotationProperties.isEmptyAnnotation = true
-//            return
-//        }
-//       
-//        let annotationType = pdfView.annotationType
-//        if KMAnnotationPropertiesViewController.height(with: selectedAnnotation) > 0 {
-//            if activeAnnotations.count > 0{
-//                if self.subViewType != .AnnotationProperts {
-//                    self.subViewType = .AnnotationProperts
-//                }
-//            }
-//            self.annotationProperties.annotations = activeAnnotations
-//            self.isHidden = !(activeAnnotations.count > 0)
-//        } else if self.listView.toolMode == .noteToolMode && KMAnnotationPropertiesViewController.height(withAnnotationMode: pdfView.annotationType) > 0 {
-//            self.isHidden = false
-//            if pdfView.activeAnnotation is CPDFLinkAnnotation {
-//                if activeAnnotations.count > 0 {
-//                    self.annotationProperties.annotations = activeAnnotations
-//                } else {
-//                    self.annotationProperties.annotations = []
-//                    self.annotationProperties.annotationMode = annotationType
-//                }
-//            } else {
-//                self.annotationProperties.annotations = []
-//                self.annotationProperties.annotationMode = annotationType
-//            }
-//        } else if listView.toolMode == .formToolMode && KMAnnotationPropertiesViewController.height(withAnnotationMode: pdfView.annotationType) > 0 {
-//            self.isHidden = false
-//            self.annotationProperties.annotations = []
-//            self.annotationProperties.annotationMode = annotationType
-//        }  else if listView.toolMode == .selfSignMode && KMAnnotationPropertiesViewController.height(withAnnotationMode: pdfView.annotationType) > 0 {
-//            self.isHidden = false
-//            self.annotationProperties.annotations = []
-//            self.annotationProperties.kEventTag = self.kEventTag
-//            self.kEventTag = 0
-//            self.annotationProperties.annotationMode = annotationType
-//        } else if (annotationType == .line || annotationType == .polyLine || annotationType == .polyGon || (annotationType == .square && self.listView.toolMode != .noteToolMode)) && KMAnnotationPropertiesViewController.height(withAnnotationMode: pdfView.annotationType) > 0 {
-//            self.isHidden = false
-//            self.annotationProperties.annotations = []
-//            self.annotationProperties.measureMode = annotationType
-//        } else {
-//            self.isHidden = true
-//        }
-//        
-//        if (self.isHidden) {
-//            self.annotationProperties.isEmptyAnnotation = self.isHidden
-//        } else {
-//            var isShowEmpty = self.isHidden;
-//            if annotationType == .link && activeAnnotations.count == 0 {
-//                self.isHidden = true
-//            } else if (annotationType == .stamp || annotationType == .signSignature) && isShowEmpty {
-//                let continuousAddStamp = UserDefaults.standard.bool(forKey: "KMContinuousAdditionStamp")
-//                if continuousAddStamp {
-//                    isShowEmpty = false
-//                    self.annotationProperties.isContinuousAddStamp = true
-//                    
-//                    UserDefaults.standard.setValue(false, forKey: "KMContinuousAdditionStamp")
-//                    UserDefaults.standard.synchronize()
-//                }
-//            } else {
-//                if isShowEmpty {
-//                    
-//                } else {
-//                    if _subViewType == RightSubViewType.AnnotationProperts {
-//                        self.contextBox.contentView = self.annotationProperties.view
-//                    }
-//                }
-//            }
-//            self.annotationProperties.isEmptyAnnotation = isShowEmpty
-//        }
+        reloadData()
+         
     }
     
 }

+ 17 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditImageController.swift

@@ -0,0 +1,17 @@
+//
+//  KMEditImageController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/14.
+//
+
+import Cocoa
+
+class KMEditImageController: NSViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+}

+ 319 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditImageController.xib

@@ -0,0 +1,319 @@
+<?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="KMEditImageController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <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="255" height="557"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" id="Tk5-ad-SSW">
+                    <rect key="frame" x="0.0" y="0.0" width="255" height="557"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <clipView key="contentView" id="ULX-jS-BxX">
+                        <rect key="frame" x="0.0" y="0.0" width="255" height="557"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <view id="dAm-DP-gRn">
+                                <rect key="frame" x="0.0" y="-91" width="260" height="648"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                <subviews>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Xo4-CD-UHR">
+                                        <rect key="frame" x="14" y="576" width="232" height="72"/>
+                                        <subviews>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="wbI-Vb-vMB">
+                                                <rect key="frame" x="0.0" y="32" width="232" height="40"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hn5-1I-Oh6">
+                                                        <rect key="frame" x="-2" y="12" width="30" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Size" id="idY-ef-mfZ">
+                                                            <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="hn5-1I-Oh6" firstAttribute="leading" secondItem="wbI-Vb-vMB" secondAttribute="leading" id="0Zh-5i-IHt"/>
+                                                    <constraint firstAttribute="height" constant="40" id="75Y-Qs-7LB"/>
+                                                    <constraint firstItem="hn5-1I-Oh6" firstAttribute="centerY" secondItem="wbI-Vb-vMB" secondAttribute="centerY" id="ydA-o6-CSK"/>
+                                                </constraints>
+                                            </customView>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="4d5-Dq-Thn">
+                                                <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                                <subviews>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="fBC-Xt-M9E" customClass="ComponentInputNumber" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="0.0" y="0.0" width="96" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="96" id="Qlw-WW-gyQ"/>
+                                                            <constraint firstAttribute="height" constant="32" id="hWv-7C-YgK"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="uaN-8C-Aox" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="104" y="4" width="24" height="24"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="24" id="eGX-Q6-5iX"/>
+                                                            <constraint firstAttribute="width" constant="24" id="maY-6B-jNS"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Gq1-5q-xfm" customClass="ComponentInputNumber" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="136" y="0.0" width="96" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="96" id="B5o-OB-MfI"/>
+                                                            <constraint firstAttribute="height" constant="32" id="dL2-2D-J83"/>
+                                                        </constraints>
+                                                    </customView>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="Gq1-5q-xfm" firstAttribute="leading" secondItem="uaN-8C-Aox" secondAttribute="trailing" constant="8" id="CLl-NN-iu7"/>
+                                                    <constraint firstItem="uaN-8C-Aox" firstAttribute="centerY" secondItem="4d5-Dq-Thn" secondAttribute="centerY" id="P96-HM-FLe"/>
+                                                    <constraint firstItem="fBC-Xt-M9E" firstAttribute="leading" secondItem="4d5-Dq-Thn" secondAttribute="leading" id="W3i-38-y9x"/>
+                                                    <constraint firstItem="Gq1-5q-xfm" firstAttribute="top" secondItem="4d5-Dq-Thn" secondAttribute="top" id="c2q-sH-CUT"/>
+                                                    <constraint firstItem="fBC-Xt-M9E" firstAttribute="top" secondItem="4d5-Dq-Thn" secondAttribute="top" id="dUi-kW-IIw"/>
+                                                    <constraint firstAttribute="height" constant="32" id="tPa-RL-Ko2"/>
+                                                    <constraint firstItem="uaN-8C-Aox" firstAttribute="leading" secondItem="fBC-Xt-M9E" secondAttribute="trailing" constant="8" id="tne-Ba-H5G"/>
+                                                </constraints>
+                                            </customView>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstAttribute="trailing" secondItem="4d5-Dq-Thn" secondAttribute="trailing" id="Ggw-9G-20b"/>
+                                            <constraint firstItem="wbI-Vb-vMB" firstAttribute="leading" secondItem="Xo4-CD-UHR" secondAttribute="leading" id="KKJ-eX-nZ9"/>
+                                            <constraint firstAttribute="height" constant="72" id="OtA-n6-XkG"/>
+                                            <constraint firstItem="4d5-Dq-Thn" firstAttribute="leading" secondItem="Xo4-CD-UHR" secondAttribute="leading" id="QXl-aG-1sR"/>
+                                            <constraint firstItem="4d5-Dq-Thn" firstAttribute="top" secondItem="wbI-Vb-vMB" secondAttribute="bottom" id="QxR-oe-wRm"/>
+                                            <constraint firstAttribute="width" constant="232" id="WZB-qW-paD"/>
+                                            <constraint firstAttribute="trailing" secondItem="wbI-Vb-vMB" secondAttribute="trailing" id="gN5-YO-NdY"/>
+                                            <constraint firstItem="wbI-Vb-vMB" firstAttribute="top" secondItem="Xo4-CD-UHR" secondAttribute="top" id="rAy-p2-BSv"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="sZo-gS-dLx">
+                                        <rect key="frame" x="14" y="488" width="232" height="72"/>
+                                        <subviews>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="x0g-dN-uuu">
+                                                <rect key="frame" x="0.0" y="32" width="232" height="40"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Cc2-mT-2aP">
+                                                        <rect key="frame" x="-2" y="12" width="82" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Rotate &amp; Flip" id="k2Y-3r-pCf">
+                                                            <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="Cc2-mT-2aP" firstAttribute="centerY" secondItem="x0g-dN-uuu" secondAttribute="centerY" id="4yB-eo-s8L"/>
+                                                    <constraint firstItem="Cc2-mT-2aP" firstAttribute="leading" secondItem="x0g-dN-uuu" secondAttribute="leading" id="Rem-NB-Tc4"/>
+                                                    <constraint firstAttribute="height" constant="40" id="mB5-kX-UlG"/>
+                                                </constraints>
+                                            </customView>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="WjZ-0w-jfu">
+                                                <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                                <subviews>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="VBe-B3-1HW" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="0.0" y="0.0" width="72" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="32" id="LMP-g2-rok"/>
+                                                            <constraint firstAttribute="width" constant="72" id="lZO-Dc-XMk"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Bbs-Yy-ALm" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="80" y="0.0" width="32" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="32" id="ImI-zT-3NX"/>
+                                                            <constraint firstAttribute="width" constant="32" id="Llv-Ha-jIi"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="thV-3i-iQq" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="120" y="0.0" width="32" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="32" id="OPX-W5-xql"/>
+                                                            <constraint firstAttribute="height" constant="32" id="edK-vq-zEi"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Bki-R4-OQe" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="160" y="0.0" width="32" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="32" id="Eat-BN-jT2"/>
+                                                            <constraint firstAttribute="height" constant="32" id="fqk-ou-l1e"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="YO3-Qw-bz2" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="200" y="0.0" width="32" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="32" id="24A-rk-c84"/>
+                                                            <constraint firstAttribute="height" constant="32" id="aPQ-Ng-gGZ"/>
+                                                        </constraints>
+                                                    </customView>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="Bbs-Yy-ALm" firstAttribute="centerY" secondItem="WjZ-0w-jfu" secondAttribute="centerY" id="2sy-dL-Hox"/>
+                                                    <constraint firstItem="VBe-B3-1HW" firstAttribute="leading" secondItem="WjZ-0w-jfu" secondAttribute="leading" id="3NG-Gt-E9o"/>
+                                                    <constraint firstItem="YO3-Qw-bz2" firstAttribute="leading" secondItem="Bki-R4-OQe" secondAttribute="trailing" constant="8" id="4FD-Rx-tZk"/>
+                                                    <constraint firstAttribute="height" constant="32" id="5mU-GO-0Ij"/>
+                                                    <constraint firstItem="Bki-R4-OQe" firstAttribute="centerY" secondItem="WjZ-0w-jfu" secondAttribute="centerY" id="AB8-yl-fzE"/>
+                                                    <constraint firstItem="VBe-B3-1HW" firstAttribute="top" secondItem="WjZ-0w-jfu" secondAttribute="top" id="Bf3-hP-HWw"/>
+                                                    <constraint firstItem="YO3-Qw-bz2" firstAttribute="centerY" secondItem="WjZ-0w-jfu" secondAttribute="centerY" id="ERP-OR-pNs"/>
+                                                    <constraint firstItem="Bbs-Yy-ALm" firstAttribute="leading" secondItem="VBe-B3-1HW" secondAttribute="trailing" constant="8" id="Kxa-2p-hCw"/>
+                                                    <constraint firstItem="thV-3i-iQq" firstAttribute="leading" secondItem="Bbs-Yy-ALm" secondAttribute="trailing" constant="8" id="MnQ-QI-XPc"/>
+                                                    <constraint firstItem="Bki-R4-OQe" firstAttribute="leading" secondItem="thV-3i-iQq" secondAttribute="trailing" constant="8" id="WfE-JJ-dc2"/>
+                                                    <constraint firstItem="thV-3i-iQq" firstAttribute="centerY" secondItem="WjZ-0w-jfu" secondAttribute="centerY" id="jca-t5-Xkf"/>
+                                                </constraints>
+                                            </customView>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="72" id="7s5-XV-XqQ"/>
+                                            <constraint firstItem="x0g-dN-uuu" firstAttribute="top" secondItem="sZo-gS-dLx" secondAttribute="top" id="8ur-8x-5CU"/>
+                                            <constraint firstAttribute="trailing" secondItem="x0g-dN-uuu" secondAttribute="trailing" id="Az3-Qx-VtL"/>
+                                            <constraint firstAttribute="trailing" secondItem="WjZ-0w-jfu" secondAttribute="trailing" id="N1v-Oi-INw"/>
+                                            <constraint firstItem="WjZ-0w-jfu" firstAttribute="top" secondItem="x0g-dN-uuu" secondAttribute="bottom" id="XtZ-UF-Wcc"/>
+                                            <constraint firstAttribute="width" constant="232" id="ofs-f5-DE6"/>
+                                            <constraint firstItem="x0g-dN-uuu" firstAttribute="leading" secondItem="sZo-gS-dLx" secondAttribute="leading" id="p1v-bz-Yxh"/>
+                                            <constraint firstItem="WjZ-0w-jfu" firstAttribute="leading" secondItem="sZo-gS-dLx" secondAttribute="leading" id="qcY-ZC-D9B"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="fd2-Bv-3ys">
+                                        <rect key="frame" x="14" y="400" width="232" height="72"/>
+                                        <subviews>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="Dd9-BD-oME">
+                                                <rect key="frame" x="0.0" y="32" width="232" height="40"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Y9M-Xn-FY5">
+                                                        <rect key="frame" x="-2" y="12" width="51" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Opacity" id="2lT-pB-hsZ">
+                                                            <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="Y9M-Xn-FY5" firstAttribute="centerY" secondItem="Dd9-BD-oME" secondAttribute="centerY" id="0c2-eF-ryJ"/>
+                                                    <constraint firstItem="Y9M-Xn-FY5" firstAttribute="leading" secondItem="Dd9-BD-oME" secondAttribute="leading" id="HNE-6U-o1E"/>
+                                                    <constraint firstAttribute="height" constant="40" id="bkq-J9-meR"/>
+                                                </constraints>
+                                            </customView>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="0eL-Le-EPr">
+                                                <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="aMm-VI-fa3">
+                                                        <rect key="frame" x="0.0" y="6" width="20" height="20"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="20" id="H3x-OT-aXi"/>
+                                                            <constraint firstAttribute="width" constant="20" id="O47-qu-OMM"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="edit_ocapity" id="cgG-ic-0Uc"/>
+                                                    </imageView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="XjV-sp-l2P" customClass="ComponentSlider" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="28" y="10" width="116" height="12"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="12" id="e2B-WD-Frs"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="owm-4g-Kn8" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                                        <rect key="frame" x="152" y="0.0" width="80" height="32"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="80" id="YHP-kG-7Cp"/>
+                                                            <constraint firstAttribute="height" constant="32" id="ZCK-hk-dSa"/>
+                                                        </constraints>
+                                                    </customView>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="XjV-sp-l2P" firstAttribute="leading" secondItem="0eL-Le-EPr" secondAttribute="leading" constant="28" id="0aN-cp-I2X"/>
+                                                    <constraint firstAttribute="height" constant="32" id="RCI-pp-609"/>
+                                                    <constraint firstItem="owm-4g-Kn8" firstAttribute="leading" secondItem="XjV-sp-l2P" secondAttribute="trailing" constant="8" id="UTZ-8p-HEy"/>
+                                                    <constraint firstAttribute="trailing" secondItem="owm-4g-Kn8" secondAttribute="trailing" id="bT1-Rz-Rux"/>
+                                                    <constraint firstItem="aMm-VI-fa3" firstAttribute="centerY" secondItem="0eL-Le-EPr" secondAttribute="centerY" id="gDz-db-GOs"/>
+                                                    <constraint firstItem="aMm-VI-fa3" firstAttribute="leading" secondItem="0eL-Le-EPr" secondAttribute="leading" id="m9K-kr-CZB"/>
+                                                    <constraint firstItem="XjV-sp-l2P" firstAttribute="centerY" secondItem="0eL-Le-EPr" secondAttribute="centerY" id="oGs-h4-DJ3"/>
+                                                    <constraint firstItem="owm-4g-Kn8" firstAttribute="centerY" secondItem="0eL-Le-EPr" secondAttribute="centerY" id="v2t-bY-lVD"/>
+                                                </constraints>
+                                            </customView>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="72" id="AS1-sk-oEm"/>
+                                            <constraint firstItem="Dd9-BD-oME" firstAttribute="top" secondItem="fd2-Bv-3ys" secondAttribute="top" id="Ir8-6A-L6X"/>
+                                            <constraint firstItem="0eL-Le-EPr" firstAttribute="leading" secondItem="fd2-Bv-3ys" secondAttribute="leading" id="Pzi-31-QeV"/>
+                                            <constraint firstAttribute="trailing" secondItem="Dd9-BD-oME" secondAttribute="trailing" id="RWq-Kf-eg3"/>
+                                            <constraint firstItem="Dd9-BD-oME" firstAttribute="leading" secondItem="fd2-Bv-3ys" secondAttribute="leading" id="Tbf-FJ-vTS"/>
+                                            <constraint firstAttribute="width" constant="232" id="hLJ-ai-62C"/>
+                                            <constraint firstAttribute="trailing" secondItem="0eL-Le-EPr" secondAttribute="trailing" id="oli-Nk-EVF"/>
+                                            <constraint firstItem="0eL-Le-EPr" firstAttribute="top" secondItem="Dd9-BD-oME" secondAttribute="bottom" id="qf9-bh-lfq"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="PRE-4X-siB">
+                                        <rect key="frame" x="14" y="383" width="232" height="1"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="232" id="Ru2-Sy-YlA"/>
+                                            <constraint firstAttribute="height" constant="1" id="aJM-Bk-PuB"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Nf8-0J-0xG" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                        <rect key="frame" x="14" y="335" width="232" height="32"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="32" id="0cg-zG-UtH"/>
+                                            <constraint firstAttribute="width" constant="232" id="krT-tk-xQM"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="YiM-7W-0QJ" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                        <rect key="frame" x="14" y="239" width="232" height="32"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="32" id="Qno-cI-38Y"/>
+                                            <constraint firstAttribute="width" constant="232" id="asP-HV-Q2k"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="nk4-Bb-jIJ" customClass="ComponentButton" customModule="KMComponentLibrary">
+                                        <rect key="frame" x="14" y="287" width="232" height="32"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="32" id="nqE-ox-IP1"/>
+                                            <constraint firstAttribute="width" constant="232" id="sx1-Uj-0EL"/>
+                                        </constraints>
+                                    </customView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="Nf8-0J-0xG" firstAttribute="top" secondItem="PRE-4X-siB" secondAttribute="bottom" constant="16" id="0Ns-oe-ZM2"/>
+                                    <constraint firstItem="PRE-4X-siB" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="32c-1A-Jcn"/>
+                                    <constraint firstItem="fd2-Bv-3ys" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="6BY-XK-TLl"/>
+                                    <constraint firstItem="Nf8-0J-0xG" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="FgV-dc-gf2"/>
+                                    <constraint firstItem="nk4-Bb-jIJ" firstAttribute="top" secondItem="Nf8-0J-0xG" secondAttribute="bottom" constant="16" id="HvX-ef-Qij"/>
+                                    <constraint firstItem="sZo-gS-dLx" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="J0f-0Z-DeH"/>
+                                    <constraint firstItem="fd2-Bv-3ys" firstAttribute="top" secondItem="sZo-gS-dLx" secondAttribute="bottom" constant="16" id="Oi9-f6-7tG"/>
+                                    <constraint firstItem="YiM-7W-0QJ" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="V5r-vh-19Y"/>
+                                    <constraint firstItem="YiM-7W-0QJ" firstAttribute="top" secondItem="nk4-Bb-jIJ" secondAttribute="bottom" constant="16" id="eTk-Qa-nyF"/>
+                                    <constraint firstItem="Xo4-CD-UHR" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="iOa-VT-FtJ"/>
+                                    <constraint firstItem="Xo4-CD-UHR" firstAttribute="top" secondItem="dAm-DP-gRn" secondAttribute="top" id="lSw-af-D3l"/>
+                                    <constraint firstItem="PRE-4X-siB" firstAttribute="top" secondItem="fd2-Bv-3ys" secondAttribute="bottom" constant="16" id="qf0-tv-QIQ"/>
+                                    <constraint firstItem="nk4-Bb-jIJ" firstAttribute="centerX" secondItem="dAm-DP-gRn" secondAttribute="centerX" id="r2c-IE-Syi"/>
+                                    <constraint firstItem="sZo-gS-dLx" firstAttribute="top" secondItem="Xo4-CD-UHR" secondAttribute="bottom" constant="16" id="xg5-ym-8eW"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" red="0.96862745100000003" green="0.97254901959999995" blue="0.98039215690000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    </clipView>
+                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="P0R-jA-Fig">
+                        <rect key="frame" x="-100" y="-100" width="308" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="StG-qN-Tew">
+                        <rect key="frame" x="-100" y="-100" width="15" height="559"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                </scrollView>
+            </subviews>
+            <point key="canvasLocation" x="94.5" y="107.5"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="edit_ocapity" width="16" height="16"/>
+    </resources>
+</document>

Разлика између датотеке није приказан због своје велике величине
+ 112 - 1422
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditPDFTextPropertyViewController.swift


Разлика између датотеке није приказан због своје велике величине
+ 195 - 1941
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditPDFTextPropertyViewController.xib


+ 34 - 56
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift

@@ -12,12 +12,10 @@ import Cocoa
     case open = 1
     case close = 2
 }
-
-
+ 
 // EditPDF处理对象
 class KMEditPDfHanddler: NSObject {
-    weak var viewC: KMMainViewController?
-    
+ 
     static let kRightSideLastStateKey = "KMRightSideLastStateKey"
     
     // 正在新增文本块
@@ -25,11 +23,7 @@ class KMEditPDfHanddler: NSObject {
     var fontSizeChanging = false
     var textAlignChanging = false
     
-    weak var listView: CPDFListView? {
-        get {
-            return self.viewC?.listView
-        }
-    }
+    weak var listView: CPDFListView?
     
     var annotationType: CAnnotationType {
         get {
@@ -105,27 +99,21 @@ class KMEditPDfHanddler: NSObject {
     
     //MARK: - func
     func enterEditPDF() {
-        let cnt = self.viewC?.leftSideViewController.leftView.segmentedControl.selectedSegment ?? UInt8.max
-        if cnt == 0 {
-            self.viewC?.search(searchString: "", isCase: false, display: true, needShowAll: false)
-            self.viewC?.leftSideViewController.showSearchMode("")
-        }
-        
         let toolMode = self.listView?.toolMode ?? .none
-        if toolMode != .editPDFToolMode { // 退出
-            self.listView?.updateActiveAnnotations([])
-            self.listView?.setNeedsDisplayForVisiblePages()
-            self.listView?.commitEditFormText()
-            self.listView?.commitEditing()
-            self.listView?.layoutDocumentView()
-            KMThumbnailCache.shared.clearCache()
-            NotificationCenter.default.post(name: NSNotification.Name.init(rawValue: "CPDFDocumentPageCountChangedNotification"), object: self.listView?.document)
-            
-            self.closeRightPane()
-            
-            self.clearData()
-            return
-        }
+//        if toolMode != .editPDFToolMode { // 退出
+//            self.listView?.updateActiveAnnotations([])
+//            self.listView?.setNeedsDisplayForVisiblePages()
+//            self.listView?.commitEditFormText()
+//            self.listView?.commitEditing()
+//            self.listView?.layoutDocumentView()
+//            KMThumbnailCache.shared.clearCache()
+//            NotificationCenter.default.post(name: NSNotification.Name.init(rawValue: "CPDFDocumentPageCountChangedNotification"), object: self.listView?.document)
+//            
+//            self.closeRightPane()
+//            
+//            self.clearData()
+//            return
+//        }
         
         self._addNotification()
         
@@ -164,9 +152,7 @@ class KMEditPDfHanddler: NSObject {
     
     func commitEditing() {
         let isEdited = self.listView?.isEdited() ?? false
-        let isPDFTextImageEdited = self.viewC?.model.isPDFTextImageEdited ?? false
-        if isEdited || isPDFTextImageEdited {
-            self.viewC?.model.isPDFTextImageEdited = false
+        if isEdited {
             self.listView?.commitEditing()
             self.listView?.layoutDocumentView()
         }
@@ -175,14 +161,11 @@ class KMEditPDfHanddler: NSObject {
     }
     
     func openRightPane() {
-        let state = self.rightSideLastState
-        if state == .none || state == .open {
-            self.viewC?.openRightPane()
-        }
+        
     }
     
     func closeRightPane() {
-        self.viewC?.closeRightPane()
+        
     }
     
     func showPopWindow(positionRect: NSRect, showGuide: Bool) {
@@ -249,7 +232,7 @@ class KMEditPDfHanddler: NSObject {
         }
         
         self.startPoint_ = self.listView?.documentView().documentVisibleRect.origin ?? .zero
-        win.show(relativeTo: areaBounds, of: self.viewC!.listView, preferredEdge: .maxY)
+        win.show(relativeTo: areaBounds, of: self.listView!, preferredEdge: .maxY)
         
         win.animator().alphaValue = 1
         self._kAddchildwindow(win)
@@ -383,16 +366,16 @@ extension KMEditPDfHanddler {
         guard let win = childW else {
             return
         }
-        self.viewC?.view.window?.addChildWindow(win, ordered: .above)
+        self.listView?.window?.addChildWindow(win, ordered: .above)
     }
     
     private func _kRemoveChildWindow(_ childW: NSWindow?) {
         guard let win = childW else {
             return
         }
-        let contains = self.viewC?.view.window?.childWindows?.contains(win) ?? false
+        let contains = self.listView?.window?.childWindows?.contains(win) ?? false
         if contains {
-            self.viewC?.view.window?.removeChildWindow(win)
+            self.listView?.window?.removeChildWindow(win)
         }
     }
     
@@ -907,7 +890,7 @@ extension KMEditPDfHanddler {
             }
         }
         if needTip {
-            if let data = self.viewC?.view {
+            if let data = listView {
                 _ = CustomAlertView.alertView(message: NSLocalizedString("Please reset the font weight via the drop-down box", comment: ""), fromView: data, withStyle: .black)
             }
         }
@@ -926,7 +909,7 @@ extension KMEditPDfHanddler {
             }
         }
         if needTip {
-            if let data = self.viewC?.view {
+            if let data = listView {
                 _ = CustomAlertView.alertView(message: NSLocalizedString("Please reset the font weight via the drop-down box", comment: ""), fromView: data, withStyle: .black)
             }
         }
@@ -986,7 +969,7 @@ extension KMEditPDfHanddler {
             self.showCropComfirmWindow()
         }
        
-        self.viewC?.view.window?.makeFirstResponder(self.listView)
+        self.listView?.window?.makeFirstResponder(self.listView)
     }
     
     func cropCancelAction() {
@@ -1083,7 +1066,7 @@ extension KMEditPDfHanddler {
                 pdfdocument?.km_insert(image: image, at: 0)
                 let savePanel = NSSavePanel()
                 savePanel.allowedFileTypes = ["pdf"]
-                savePanel.beginSheetModal(for: self.viewC!.view.window!) { response in
+                savePanel.beginSheetModal(for: self.listView!.window!) { response in
                     if (response != .OK) {
                         return
                     }
@@ -1352,8 +1335,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
     func pdfViewEditingAreaDidChanged(_ pdfView: CPDFView!) {
         let isEdited = self.listView?.isEdited() ?? false
         if isEdited {
-            // 记录编辑状态
-            self.viewC?.recordIsPDFDocumentEdited(type: .editText)
+
         }
         if annotationType != .addText {
             NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kPDFViewEditingAreaDidChanged"), object: self.listView?.document)
@@ -1369,7 +1351,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
             if toolMode == .editPDFToolMode {
                 if annotationType == .addImage || annotationType == .addText {
                     if self.isEditImage {
-                        self.viewC?.menuItemEditingClick_CropImage(sender: NSMenuItem())
+
                     } else {
                         if annotationType == .addImage {
                            
@@ -1380,8 +1362,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
                 }
                 self.listView?.isEditImage = false
             } else {
-               
-                self.viewC?.closeRightPane()
+                
                 if self.subViewType == .EditPDFAddText && annotationType == .addText {
                   
                 }
@@ -1390,8 +1371,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
         }
         
         self.hiddenCropComfirmWindow()
-        self.viewC?.model.isPDFTextImageEdited = true
-         if self.annotationType == .addImage {
+          if self.annotationType == .addImage {
             var isImageArea = false
             for i in 0 ..< areas.count {
                 if areas[i] is CPDFEditImageArea {
@@ -1462,7 +1442,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
     
     func pdfViewEditingAddImageArea(_ pdfView: CPDFView!, add page: CPDFPage!, add rect: CGRect) {
         if self.isEditImage {
-            self.viewC?.menuItemEditingClick_CropImage(sender: NSMenuItem())
+
         } else {
             let window = KMEditPDFPopToolBarWindow.shared
             if (window.isVisible) {
@@ -1552,9 +1532,7 @@ extension KMEditPDfHanddler: CPDFViewDelegate {
                         
                         DispatchQueue.main.async {
                             self.listView?.createImagePath(filePath, rect: imageRect, page: pdfView.currentPage())
-                            self.viewC?.model.isPDFTextImageEdited = true
-                            self.viewC?.recordIsPDFDocumentEdited(type: .editImage)
-                            
+ 
                             self.showPopWindow(positionRect: imageRect, showGuide: true)
                         }
                     }

+ 87 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Toolbar/KMEditPDFToolbarItemView.swift

@@ -7,6 +7,93 @@
 
 import Cocoa
 
+class KMSliderItemView: NSView {
+    var titleLabel: NSTextField {
+        get {
+            return self.titleLabel_
+        }
+    }
+    private lazy var titleLabel_: NSTextField = {
+        let view = NSTextField(labelWithString: "")
+        return view
+    }()
+    
+    var slider: NSSlider {
+        get {
+            return self.slider_
+        }
+    }
+    private lazy var slider_: NSSlider = {
+        let view = NSSlider()
+        view.minValue = 0
+        view.maxValue = 1
+        view.target = self
+        view.action = #selector(sliderValueDidChange)
+        return view
+    }()
+    
+    var box: NSBox {
+        get {
+            return self.box_
+        }
+    }
+    
+    private lazy var box_: NSBox = {
+        let view = NSBox()
+        view.boxType = .custom
+        view.titlePosition = .noTitle
+        view.contentViewMargins = .zero
+        view.borderWidth = 0
+        return view
+    }()
+    
+    var minValue: Double = 0 {
+        didSet {
+            self.slider.minValue = self.minValue
+        }
+    }
+    
+    var maxValue: Double = 1 {
+        didSet {
+            self.slider.maxValue = self.maxValue
+        }
+    }
+    
+    var doubleValue: Double = 1 {
+        didSet {
+            self.slider.doubleValue = self.doubleValue
+        }
+    }
+    
+    var valueChange: ((Double)->Void)?
+    
+    convenience init() {
+        self.init(frame: .zero)
+        self.initSubViews()
+    }
+    
+    func initSubViews() {
+        self.addSubview(self.titleLabel_)
+        self.addSubview(self.slider_)
+        self.addSubview(self.box_)
+        
+        self.titleLabel_.km_add_top_constraint(constant: 0)
+        self.titleLabel_.km_add_left_constraint(constant: 4)
+        
+        self.slider_.km_add_left_constraint(constant: 4)
+        self.slider_.km_add_top_constraint(equalTo: self.titleLabel_, attribute: .bottom, constant: 4)
+        self.slider_.km_add_height_constraint(constant: 26)
+        self.slider_.km_add_right_constraint(equalTo: self.box_, attribute: .left, constant: -8)
+        
+        self.box_.km_add_right_constraint(constant: 0)
+        self.box_.km_add_bottom_constraint(constant: -4)
+    }
+    
+    @objc func sliderValueDidChange(_ sender: NSSlider) {
+        self.valueChange?(sender.doubleValue)
+    }
+}
+
 class KMEditPDFToolbarItemView: NSView {
     private lazy var contentBox_: NSBox = {
         let view = NSBox()

+ 16 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -3941,6 +3941,12 @@
 		BB78EAAA2B561F9700121691 /* KMFullScreenWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB78EAA92B561F9700121691 /* KMFullScreenWindow.swift */; };
 		BB78EAAB2B561F9700121691 /* KMFullScreenWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB78EAA92B561F9700121691 /* KMFullScreenWindow.swift */; };
 		BB78EAAC2B561F9700121691 /* KMFullScreenWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB78EAA92B561F9700121691 /* KMFullScreenWindow.swift */; };
+		BB79E7192CE617CB0052CAD5 /* KMEditImageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79E7172CE617CB0052CAD5 /* KMEditImageController.swift */; };
+		BB79E71A2CE617CB0052CAD5 /* KMEditImageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79E7172CE617CB0052CAD5 /* KMEditImageController.swift */; };
+		BB79E71B2CE617CB0052CAD5 /* KMEditImageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79E7172CE617CB0052CAD5 /* KMEditImageController.swift */; };
+		BB79E71C2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB79E7182CE617CB0052CAD5 /* KMEditImageController.xib */; };
+		BB79E71D2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB79E7182CE617CB0052CAD5 /* KMEditImageController.xib */; };
+		BB79E71E2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB79E7182CE617CB0052CAD5 /* KMEditImageController.xib */; };
 		BB79FAB22CDC65BA00BF7B39 /* KMBGTemplateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79FAB02CDC65BA00BF7B39 /* KMBGTemplateController.swift */; };
 		BB79FAB32CDC65BA00BF7B39 /* KMBGTemplateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79FAB02CDC65BA00BF7B39 /* KMBGTemplateController.swift */; };
 		BB79FAB42CDC65BA00BF7B39 /* KMBGTemplateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB79FAB02CDC65BA00BF7B39 /* KMBGTemplateController.swift */; };
@@ -7319,6 +7325,8 @@
 		BB7648EB29ECEEF400931039 /* KMAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAppearance.swift; sourceTree = "<group>"; };
 		BB77C85E2BD506BE0065AFF2 /* CPDFAnnotation+KMExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFAnnotation+KMExtension.swift"; sourceTree = "<group>"; };
 		BB78EAA92B561F9700121691 /* KMFullScreenWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMFullScreenWindow.swift; sourceTree = "<group>"; };
+		BB79E7172CE617CB0052CAD5 /* KMEditImageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMEditImageController.swift; sourceTree = "<group>"; };
+		BB79E7182CE617CB0052CAD5 /* KMEditImageController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMEditImageController.xib; sourceTree = "<group>"; };
 		BB79FAB02CDC65BA00BF7B39 /* KMBGTemplateController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBGTemplateController.swift; sourceTree = "<group>"; };
 		BB79FAB12CDC65BA00BF7B39 /* KMBGTemplateController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBGTemplateController.xib; sourceTree = "<group>"; };
 		BB7BC4D72AD3D6B700D6BEE6 /* PDFListView+KMExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PDFListView+KMExtensions.swift"; sourceTree = "<group>"; };
@@ -8650,6 +8658,8 @@
 				ADC31FA92A0E0C1E00ED44A2 /* View */,
 				89D2D306295A83B500BFF5FE /* KMEditPDFTextPropertyViewController.swift */,
 				89E9B3F8295BE2EC00AEFA61 /* KMEditPDFTextPropertyViewController.xib */,
+				BB79E7172CE617CB0052CAD5 /* KMEditImageController.swift */,
+				BB79E7182CE617CB0052CAD5 /* KMEditImageController.xib */,
 				89E9B404295D268E00AEFA61 /* KMEditImagePropertyViewController.swift */,
 				89E9B405295D268E00AEFA61 /* KMEditImagePropertyViewController.xib */,
 			);
@@ -15480,6 +15490,7 @@
 				BB716D6B2CDDB727009787ED /* KMHeaderPropertyController.xib in Resources */,
 				AD055E902B88304E0035F824 /* BookmarksWindow.xib in Resources */,
 				BB99ACC5292DE22E0048AFD9 /* KMMergeViewController.xib in Resources */,
+				BB79E71C2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */,
 				BB6347B82AF224E200F5438E /* KMConvertCollectionViewHeader.xib in Resources */,
 				8942F7F32926087200389627 /* KMSearchViewController.xib in Resources */,
 				BB072D612C05AC8F00779B45 /* KMToolbarConfigViewItem.xib in Resources */,
@@ -16274,6 +16285,7 @@
 				F337CC402CC78B9400D46AF4 /* KMNThumbnailImage.xcassets in Resources */,
 				9F0CB46B2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
 				ADAFDA522AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */,
+				BB79E71D2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */,
 				9FF371DC2C69B937005F9CC5 /* CDistanceSettingWindowController.xib in Resources */,
 				9FF371D02C69B8B6005F9CC5 /* KMMeasureSideVC.xib in Resources */,
 				BBB789972BE8BF2400F7E09C /* AIInfoInputView.xib in Resources */,
@@ -16731,6 +16743,7 @@
 				AD5374972C65A426002DE248 /* default.metallib in Resources */,
 				F35BC6CB2CA3AD710022CDE9 /* Texture.bundle in Resources */,
 				AD7D5C972B8F20FE006562CD /* synctex_parser_version.txt in Resources */,
+				BB79E71E2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */,
 				BB19A7482CB7B7A0008204DC /* KMHomeFilesHeaderView.xib in Resources */,
 				BBD922352B50D61200DB9585 /* KMRateWindowController.xib in Resources */,
 				BBE789012CBD2464008086E2 /* MessageVC.xib in Resources */,
@@ -17229,6 +17242,7 @@
 				9FDD0F6F294AD13C000C4DAD /* KMMainViewController+Action.swift in Sources */,
 				BB67EE1D2B54FFEF00573BF0 /* ASIFormDataRequest.m in Sources */,
 				9F69DBB22B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.swift in Sources */,
+				BB79E7192CE617CB0052CAD5 /* KMEditImageController.swift in Sources */,
 				ADDF839B2B391A5D00A81A4E /* PDFCertExportAccessoryView.swift in Sources */,
 				9F0CB4E52986557F00007028 /* KMDesignToken+PaddingRight.swift in Sources */,
 				BB86C1ED28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
@@ -19404,6 +19418,7 @@
 				BB65A0792AF8E2F2003A27A0 /* KMSyncPreferences.swift in Sources */,
 				BBE788F42CBD2464008086E2 /* TreeVC.swift in Sources */,
 				ADE3C1EE29A5AFB100793B13 /* KMRequestServerManager.swift in Sources */,
+				BB79E71A2CE617CB0052CAD5 /* KMEditImageController.swift in Sources */,
 				9F9461882BD644BF0076574B /* KMTableCellData.m in Sources */,
 				ADDF837E2B391A5D00A81A4E /* DSignatureDetailsViewController.swift in Sources */,
 				9F1FE50029406E4700E952CA /* CTTabStripModel.m in Sources */,
@@ -19965,6 +19980,7 @@
 				9F1FE4B929406E4700E952CA /* CTBrowserFrameView.m in Sources */,
 				BB3A42982B4BC72C006D0642 /* KMNotesPanelController.swift in Sources */,
 				9F0CB4E72986557F00007028 /* KMDesignToken+PaddingRight.swift in Sources */,
+				BB79E71B2CE617CB0052CAD5 /* KMEditImageController.swift in Sources */,
 				BB853C842AF8BAF0009C20C1 /* KMSetPasswordObject.swift in Sources */,
 				BBD1F789296FAC7C00343885 /* KMPageEditSettingBaseView.swift in Sources */,
 				BB2C6ACF28F41BA000478A33 /* CPDFListView.m in Sources */,

+ 516 - 107
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -14,13 +14,13 @@
             filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2948"
-            endingLineNumber = "2948"
+            startingLineNumber = "2914"
+            endingLineNumber = "2914"
             landmarkName = "toolbarViewController(_:zoomModel:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "CBD5F2A0-D33B-4635-AABA-000A5C35975E - 89ff5705237bd58c"
+                  uuid = "CBD5F2A0-D33B-4635-AABA-000A5C35975E - 89ff5705237bd04f"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -30,12 +30,12 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2948"
-                  endingLineNumber = "2948"
+                  startingLineNumber = "2915"
+                  endingLineNumber = "2915"
                   offsetFromSymbolStart = "52">
                </Location>
                <Location
-                  uuid = "CBD5F2A0-D33B-4635-AABA-000A5C35975E - b2a76df927114c5e"
+                  uuid = "CBD5F2A0-D33B-4635-AABA-000A5C35975E - b2a76df9271149fc"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -45,8 +45,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2948"
-                  endingLineNumber = "2948"
+                  startingLineNumber = "2914"
+                  endingLineNumber = "2914"
                   offsetFromSymbolStart = "192">
                </Location>
             </Locations>
@@ -830,22 +830,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "A08D6542-3468-45BA-A764-52C1A1E1D1F6"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSlider.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "287"
-            endingLineNumber = "287"
-            landmarkName = "mouseUp(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -984,10 +968,42 @@
             filePath = "PDF Master/KMClass/ComponentLibraryDemo/Demo/SliderVC.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "64"
-            endingLineNumber = "64"
-            landmarkName = "mouseDown(with:)"
+            startingLineNumber = "55"
+            endingLineNumber = "55"
+            landmarkName = "reloadData()"
             landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "01E14FC3-2AF8-467D-9740-30AF856BCEC1 - 10466fa7eb6e3544"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.SliderVC.mouseDown(with: __C.NSEvent) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/ComponentLibraryDemo/Demo/SliderVC.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "64"
+                  endingLineNumber = "64"
+                  offsetFromSymbolStart = "56">
+               </Location>
+               <Location
+                  uuid = "01E14FC3-2AF8-467D-9740-30AF856BCEC1 - 10466fa7eb6e342b"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.SliderVC.mouseDown(with: __C.NSEvent) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/ComponentLibraryDemo/Demo/SliderVC.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "55"
+                  endingLineNumber = "55"
+                  offsetFromSymbolStart = "56">
+               </Location>
+            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -1836,22 +1852,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "F980362C-09A5-4CBA-A0C3-0390D50B8805"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMComponentLibrary/KMComponentLibrary/View/Slider/ComponentSlider.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "234"
-            endingLineNumber = "234"
-            landmarkName = "mouseDown(with:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -2146,13 +2146,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "221"
-            endingLineNumber = "221"
+            startingLineNumber = "225"
+            endingLineNumber = "225"
             landmarkName = "setDocument"
             landmarkType = "24">
             <Locations>
                <Location
-                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - c44283d1f17e1b9c"
+                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - d80aac5b2f97b27d"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.setDocument.getter : 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 = "223"
+                  endingLineNumber = "223"
+                  offsetFromSymbolStart = "28">
+               </Location>
+               <Location
+                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - c44283d1f17e1a62"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -2162,8 +2177,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "221"
-                  endingLineNumber = "221"
+                  startingLineNumber = "223"
+                  endingLineNumber = "223"
                   offsetFromSymbolStart = "0">
                </Location>
                <Location
@@ -2181,6 +2196,21 @@
                   endingLineNumber = "0"
                   offsetFromSymbolStart = "20">
                </Location>
+               <Location
+                  uuid = "E3962D60-30EF-4185-BF07-EA1A34784887 - c44283d1f17e1a20"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.setDocument.modify : 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 = "225"
+                  endingLineNumber = "225"
+                  offsetFromSymbolStart = "0">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -2338,57 +2368,10 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "835"
-            endingLineNumber = "835"
+            startingLineNumber = "922"
+            endingLineNumber = "922"
             landmarkName = "removePDFWatermark()"
             landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "14EF9D11-330E-4DB1-A4D2-AA533CF55782 - 6f5bea311ccf51e"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.batchAddWatermark() -&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 = "836"
-                  endingLineNumber = "836"
-                  offsetFromSymbolStart = "16">
-               </Location>
-               <Location
-                  uuid = "14EF9D11-330E-4DB1-A4D2-AA533CF55782 - ae5dbea256bdda5d"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.removePDFWatermark() -&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 = "835"
-                  endingLineNumber = "835"
-                  offsetFromSymbolStart = "1740">
-               </Location>
-               <Location
-                  uuid = "14EF9D11-330E-4DB1-A4D2-AA533CF55782 - ae5dbea256bdda5d"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.removePDFWatermark() -&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 = "835"
-                  endingLineNumber = "835"
-                  offsetFromSymbolStart = "1496">
-               </Location>
-            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -2561,13 +2544,13 @@
             filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "303"
-            endingLineNumber = "303"
+            startingLineNumber = "301"
+            endingLineNumber = "301"
             landmarkName = "changeAnnotationModeAction(item:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "8E901A1F-2E46-45A2-8AAA-ABB5D9E11491 - da5f8849423c2d0b"
+                  uuid = "8E901A1F-2E46-45A2-8AAA-ABB5D9E11491 - da5f8849423c2d45"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -2577,12 +2560,12 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "303"
-                  endingLineNumber = "303"
-                  offsetFromSymbolStart = "9048">
+                  startingLineNumber = "301"
+                  endingLineNumber = "301"
+                  offsetFromSymbolStart = "9792">
                </Location>
                <Location
-                  uuid = "8E901A1F-2E46-45A2-8AAA-ABB5D9E11491 - da5f8849423c2d0b"
+                  uuid = "8E901A1F-2E46-45A2-8AAA-ABB5D9E11491 - da5f8849423c2d45"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -2592,9 +2575,9 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "303"
-                  endingLineNumber = "303"
-                  offsetFromSymbolStart = "9928">
+                  startingLineNumber = "301"
+                  endingLineNumber = "301"
+                  offsetFromSymbolStart = "9132">
                </Location>
             </Locations>
          </BreakpointContent>
@@ -2758,5 +2741,431 @@
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "9747EB20-6548-4349-9F49-A51F152A3948"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "847"
+            endingLineNumber = "847"
+            landmarkName = "fontStyleAction(fontName:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "9747EB20-6548-4349-9F49-A51F152A3948 - d116fb9b70d5c55a"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontColorAction(color: Swift.Optional&lt;__C.NSColor&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "865"
+                  endingLineNumber = "865"
+                  offsetFromSymbolStart = "140">
+               </Location>
+               <Location
+                  uuid = "9747EB20-6548-4349-9F49-A51F152A3948 - 1dc108dd3fe58c4b"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontStyleAction(fontName: Swift.Optional&lt;Swift.String&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "864"
+                  endingLineNumber = "864"
+                  offsetFromSymbolStart = "104">
+               </Location>
+               <Location
+                  uuid = "9747EB20-6548-4349-9F49-A51F152A3948 - 1dc108dd3fe58f9a"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontStyleAction(fontName: Swift.Optional&lt;Swift.String&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "847"
+                  endingLineNumber = "847"
+                  offsetFromSymbolStart = "104">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "86F561DC-543F-4374-86F1-2B340E19C220"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "836"
+            endingLineNumber = "836"
+            landmarkName = "fontColorAction(color:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "86F561DC-543F-4374-86F1-2B340E19C220 - 620f0da30502b77"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler._editAreasOpacitys() -&gt; Swift.Array&lt;CoreGraphics.CGFloat&gt;"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "853"
+                  endingLineNumber = "853"
+                  offsetFromSymbolStart = "544">
+               </Location>
+               <Location
+                  uuid = "86F561DC-543F-4374-86F1-2B340E19C220 - d116fb9b70d5c7a6"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontColorAction(color: Swift.Optional&lt;__C.NSColor&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "853"
+                  endingLineNumber = "853"
+                  offsetFromSymbolStart = "88">
+               </Location>
+               <Location
+                  uuid = "86F561DC-543F-4374-86F1-2B340E19C220 - d116fb9b70d5c195"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontColorAction(color: Swift.Optional&lt;__C.NSColor&gt;) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "836"
+                  endingLineNumber = "836"
+                  offsetFromSymbolStart = "88">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "065BE60D-F083-4EED-A226-E1582D4A0973"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "883"
+            endingLineNumber = "883"
+            landmarkName = "fontBoldAction()"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "065BE60D-F083-4EED-A226-E1582D4A0973 - 45672c937b7e95c0"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontReduceAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "900"
+                  endingLineNumber = "900"
+                  offsetFromSymbolStart = "524">
+               </Location>
+               <Location
+                  uuid = "065BE60D-F083-4EED-A226-E1582D4A0973 - a42f8f2f051a81a9"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontBoldAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "900"
+                  endingLineNumber = "900"
+                  offsetFromSymbolStart = "144">
+               </Location>
+               <Location
+                  uuid = "065BE60D-F083-4EED-A226-E1582D4A0973 - a42f8f2f051a83f8"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontBoldAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "883"
+                  endingLineNumber = "883"
+                  offsetFromSymbolStart = "144">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "D61BEEC2-5105-49D7-94AE-19C41A90F069"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "902"
+            endingLineNumber = "902"
+            landmarkName = "fontItalicAction()"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "D61BEEC2-5105-49D7-94AE-19C41A90F069 - a42f8f2f051a845c"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontBoldAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "919"
+                  endingLineNumber = "919"
+                  offsetFromSymbolStart = "1304">
+               </Location>
+               <Location
+                  uuid = "D61BEEC2-5105-49D7-94AE-19C41A90F069 - a42f8f2f051a845c"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontBoldAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "919"
+                  endingLineNumber = "919"
+                  offsetFromSymbolStart = "1540">
+               </Location>
+               <Location
+                  uuid = "D61BEEC2-5105-49D7-94AE-19C41A90F069 - c55cef9c5f637e33"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontItalicAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "919"
+                  endingLineNumber = "919"
+                  offsetFromSymbolStart = "144">
+               </Location>
+               <Location
+                  uuid = "D61BEEC2-5105-49D7-94AE-19C41A90F069 - c55cef9c5f637c04"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontItalicAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "902"
+                  endingLineNumber = "902"
+                  offsetFromSymbolStart = "144">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "D69F6364-3AF1-43FF-A44B-A7E27841FEA0"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "920"
+            endingLineNumber = "920"
+            landmarkName = "textAlignmentAction(align:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "D69F6364-3AF1-43FF-A44B-A7E27841FEA0 - c55cef9c5f636081"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.fontItalicAction() -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "937"
+                  endingLineNumber = "937"
+                  offsetFromSymbolStart = "1292">
+               </Location>
+               <Location
+                  uuid = "D69F6364-3AF1-43FF-A44B-A7E27841FEA0 - 1a21d580b3fa74b2"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.textAlignmentAction(align: __C.NSTextAlignment) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "937"
+                  endingLineNumber = "937"
+                  offsetFromSymbolStart = "108">
+               </Location>
+               <Location
+                  uuid = "D69F6364-3AF1-43FF-A44B-A7E27841FEA0 - 1a21d580b3fa6a61"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Reader_Pro.KMEditPDfHanddler.textAlignmentAction(align: __C.NSTextAlignment) -&gt; ()"
+                  moduleName = "PDF Reader Pro"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "920"
+                  endingLineNumber = "920"
+                  offsetFromSymbolStart = "108">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "E378A308-C290-4212-B943-EEEBCA0494B1"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1438"
+            endingLineNumber = "1438"
+            landmarkName = "pdfViewEditingCropBoundsDidChanged(_:editing:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "80647B90-A0DE-42AE-91B7-367037BDCED6"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1444"
+            endingLineNumber = "1444"
+            landmarkName = "pdfViewEditingAddImageArea(_:add:add:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "4BB8D06C-7F05-4DE7-BB46-68B3C14F4050"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1545"
+            endingLineNumber = "1545"
+            landmarkName = "pdfViewEditingAddTextArea(_:add:add:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "E3A209A5-D1EA-44E7-AEB7-0145B2D71654"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1603"
+            endingLineNumber = "1603"
+            landmarkName = "pdfViewEditingOperationDidChanged(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "8516B689-DE97-4681-8B1F-48328CDD5975"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1989"
+            endingLineNumber = "1989"
+            landmarkName = "pdfViewEditingCropBoundsDidChanged(_:editing:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "BD533CE4-36D9-445C-9ABF-895A3F401155"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/Manager/KMEditPDfHanddler.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1596"
+            endingLineNumber = "1596"
+            landmarkName = "pdfViewEditingSelectionDidChanged(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>