Quellcode durchsuchen

【注释】Form属性面板KMAnnotationButtonWidgetOptionsViewController补充

wanjun vor 1 Jahr
Ursprung
Commit
5d7a632865

+ 7 - 7
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetAppearanceViewController.swift

@@ -228,25 +228,25 @@ class KMAnnotationButtonWidgetAppearanceViewController: NSViewController {
             isFromMode = true
             
             let defaults = UserDefaults.standard
-            var annotation: CPDFButtonWidgetAnnotation?
+            var note: CPDFButtonWidgetAnnotation?
             let bounds = NSMakeRect(0, 0, 60, 25)
             var backgroundColor: NSColor?
 
             if formMode == .checkBox {
-                annotation = CPDFButtonWidgetAnnotation(PDFListViewNoteWith: pdfView!.document!)
+                note = CPDFButtonWidgetAnnotation(PDFListViewNoteWith: pdfView!.document!)
                 backgroundColor = defaults.color(forKey: SKAnnotationCheckBoxWidgetBackgroundColorKey)
             } else if formMode == .radioButton {
-                annotation = CPDFButtonWidgetAnnotation(PDFListViewNoteWith: pdfView!.document!, controlType: .radioButtonControl)
+                note = CPDFButtonWidgetAnnotation(PDFListViewNoteWith: pdfView!.document!, controlType: .radioButtonControl)
                 backgroundColor = defaults.color(forKey: SKAnnotationRadioButtonWidgetBackgroundColorKey)
             }
 
-            annotation?.backgroundColor = backgroundColor ?? NSColor.clear
+            note?.backgroundColor = backgroundColor ?? NSColor.clear
 
-            if let annotation = annotation {
-                annotations = [annotation]
+            if let note1 = note {
+                annotations = [note1]
             }
             
-            self.annotation = annotation
+            annotation = note
         }
     }
     

+ 228 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetOptionsViewController.swift

@@ -0,0 +1,228 @@
+//
+//  KMAnnotationButtonWidgetOptionsViewController.swift
+//  PDF Reader Pro
+//
+//  Created by wanjun on 2024/1/16.
+//
+
+import Cocoa
+
+class KMAnnotationButtonWidgetOptionsViewController: NSViewController {
+
+    private var _annotations: [CPDFButtonWidgetAnnotation] = []
+    private var _formMode: CAnnotationType = .radioButton
+    var pdfView: CPDFListView?
+    var annotationModel: CPDFAnnotationModel?
+    
+    @IBOutlet private var selectedByDefaultButton: NSButton!
+    @IBOutlet private var warningView: NSView!
+    @IBOutlet private var warningLabel: NSTextField!
+    @IBOutlet private var singleButtonOptionLabel: NSTextField!
+    @IBOutlet private var singleButtonOptionTextField: NSTextField!
+    @IBOutlet private var radioTopView: NSView!
+    @IBOutlet private var radioTopViewConstraint: NSLayoutConstraint!
+    @IBOutlet private var warningViewConstraint: NSLayoutConstraint!
+    private var annotation: CPDFButtonWidgetAnnotation?
+    private var isFromMode: Bool = false
+    
+    deinit {
+        annotation = nil
+        NotificationCenter.default.removeObserver(self)
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        selectedByDefaultButton.title = NSLocalizedString("Button is checked by default", comment: "")
+
+        if let annotation = self.annotation {
+            if annotation.controlType() == .radioButtonControl || annotation.controlType() == .checkBoxControl {
+                let buttonWidgetState: Int = annotation.state()
+                if buttonWidgetState == 0 {
+                    selectedByDefaultButton.state = NSControl.StateValue.off
+                } else if buttonWidgetState == 1 {
+                    selectedByDefaultButton.state = NSControl.StateValue.on
+                }
+
+                if annotation.controlType() == .radioButtonControl {
+                    radioTopView.isHidden = false
+
+                    warningView.wantsLayer = true
+                    warningView.layer?.backgroundColor = KMAppearance.Status.errBG1Color().cgColor
+                    warningView.layer?.cornerRadius = 1.0
+                    warningLabel.stringValue = "     " + NSLocalizedString("1 button in group. At least 2 buttons needed.", comment: "")
+                    warningLabel.textColor = KMAppearance.Layout.h0Color()
+                    singleButtonOptionLabel.stringValue = NSLocalizedString("Radio Button Choice", comment: "") + ":"
+                    singleButtonOptionLabel.textColor = KMAppearance.Layout.h0Color()
+
+                    NotificationCenter.default.addObserver(self, selector: #selector(singleButtonOptionTextFieldDidChange(_:)), name: NSControl.textDidChangeNotification, object: singleButtonOptionTextField)
+
+                    if annotations.count > 1 {
+                        singleButtonOptionTextField.isEnabled = false
+                    }
+
+                    if let fieldName = annotation.fieldName(), annotations.count == 1 {
+                        if #available(macOS 10.13, *) {
+                            singleButtonOptionTextField.stringValue = annotation.buttonWidgetStateString().removingPercentEncoding ?? ""
+                        } else {
+                            singleButtonOptionTextField.stringValue = fieldName
+                        }
+                    } else {
+                        var annotationString = ""
+                        for (index, note) in annotations.enumerated() {
+                            if let annotation = note as? PDFAnnotation, let stateString = annotation.fieldName {
+                                if #available(macOS 10.13, *) {
+                                    annotationString += annotation.buttonWidgetStateString ?? ""
+                                } else {
+                                    annotationString += stateString
+                                }
+
+                                if index != annotations.count - 1 {
+                                    annotationString += ", "
+                                }
+                            }
+                        }
+                        singleButtonOptionTextField.stringValue = annotationString
+                    }
+                    
+                    let currentPage: CPDFPage = pdfView!.currentPage()
+                    let noteFieldName: String = annotation.fieldName()
+                    let noteStateString: String = singleButtonOptionTextField.stringValue
+                    var sameCount = 1
+                    if #available(macOS 10.13, *) {
+                        for case let note as CPDFButtonWidgetAnnotation in currentPage.annotations {
+                            var isSame = false
+                            if note.isKind(of: CPDFButtonWidgetAnnotation.self) {
+                                if (note.fieldName() == noteFieldName) && note.buttonWidgetStateString() != noteStateString {
+                                    isSame = true
+                                }
+                            }
+                            if isSame {
+                                sameCount += 1
+                            }
+                        }
+                        if sameCount > 1 {
+                            warningView.isHidden = true
+                            warningViewConstraint.constant = -warningView.frame.height - 16
+                        }
+                    }
+                } else {
+                    radioTopView.isHidden = true
+                }
+
+                singleButtonOptionTextField.backgroundColor = KMAppearance.Layout.l_1Color()
+                singleButtonOptionTextField.wantsLayer = true
+                singleButtonOptionTextField.layer?.borderWidth = 1.0
+                singleButtonOptionTextField.layer?.borderColor = KMAppearance.Interactive.s0Color().cgColor
+                singleButtonOptionTextField.layer?.cornerRadius = 1.0
+
+                radioTopViewConstraint.constant = radioTopView.isHidden ? -radioTopView.frame.size.height : 0.0
+            }
+        }
+    }
+    
+    // MARK: Set & Get
+    
+    var formMode: CAnnotationType {
+        get {
+            return _formMode
+        }
+        set {
+            _formMode = newValue
+            isFromMode = true
+            
+            let userDefaults = UserDefaults.standard
+            var note: CPDFButtonWidgetAnnotation? = nil
+            let bounds = NSMakeRect(0, 0, 60, 25)
+            
+            if formMode == .radioButton {
+                note = CPDFButtonWidgetAnnotation(document: pdfView?.document)
+                note?.setState(userDefaults.integer(forKey: SKAnnotationRadioButtonWidgetSelectedKey))
+            } else if formMode == .checkBox {
+                note = CPDFButtonWidgetAnnotation(document: pdfView?.document)
+                note?.setState(userDefaults.integer(forKey: SKAnnotationCheckBoxWidgetSelectedKey))
+            }
+            
+            if let note1 = note {
+                annotations = [note1]
+            }
+            annotation = note
+        }
+    }
+    
+    var annotations: [CPDFButtonWidgetAnnotation] {
+        get {
+            return _annotations
+        }
+        set {
+            _annotations = newValue
+            annotation = _annotations.first
+        }
+    }
+
+    // MARK: Private Method
+
+    private func updateAnnotationMode() {
+        let userDefaults = UserDefaults.standard
+        let annotation = self.annotation
+        let annotationMode = self.formMode
+        
+        if annotationMode == .radioButton {
+            userDefaults.set(annotation?.state(), forKey: SKAnnotationRadioButtonWidgetSelectedKey)
+        } else if annotationMode == .checkBox {
+            userDefaults.set(annotation?.state(), forKey: SKAnnotationCheckBoxWidgetSelectedKey)
+        }
+    }
+    
+    private func updateAnnotation() {
+        if annotationModel?.annotation != nil {
+            for tAnnotation in annotations {
+                pdfView?.setNeedsDisplayAnnotationViewFor(tAnnotation.page)
+            }
+        }
+    }
+    
+    // MARK: NSButton Action
+    
+    @IBAction func selectedByDefaultAction(_ sender: NSButton) {
+        for tAnnotation in annotations {
+//            tAnnotation.removeAllAppearanceStreams()
+            
+            if sender.state == .on {
+                tAnnotation.setState(CPDFWidgetCellState.onState.rawValue)
+            } else {
+                tAnnotation.setState(CPDFWidgetCellState.offState.rawValue)
+            }
+        }
+        
+        updateAnnotation()
+    }
+    
+    // MARK: NSNotification
+    
+    @objc func generalNameTextFieldDidChange(_ notification: Notification) {
+        for tAnnotation in annotations {
+//            tAnnotation.removeAllAppearanceStreams()
+            
+            tAnnotation.setOnStateValue(singleButtonOptionTextField.stringValue)
+        }
+        updateAnnotation()
+    }
+
+    @objc func singleButtonOptionTextFieldDidChange(_ notification: Notification) {
+        for tAnnotation in annotations {
+//            tAnnotation.removeAllAppearanceStreams()
+            
+            let singleString = singleButtonOptionTextField.stringValue
+            let encodingString = singleString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
+
+            if #available(macOS 10.13, *) {
+                tAnnotation.setButtonWidgetStateString(encodingString)
+            } else {
+                tAnnotation.setFieldName(singleButtonOptionTextField.stringValue)
+            }
+        }
+        updateAnnotation()
+    }
+}

+ 159 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/FormProperties/KMAnnotationButtonWidgetOptionsViewController.xib

@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationButtonWidgetOptionsViewController">
+            <connections>
+                <outlet property="radioTopView" destination="X1N-fG-yos" id="uMP-38-B0z"/>
+                <outlet property="radioTopViewConstraint" destination="gh6-8P-Esz" id="Bce-14-u9T"/>
+                <outlet property="selectedByDefaultButton" destination="W8W-EU-9oY" id="W5j-Nv-CHg"/>
+                <outlet property="singleButtonOptionLabel" destination="72u-lv-eA9" id="r97-lB-5Qr"/>
+                <outlet property="singleButtonOptionTextField" destination="VWM-PH-qu5" id="jCK-xd-zf4"/>
+                <outlet property="view" destination="GEs-I4-pca" id="r55-Nm-2q2"/>
+                <outlet property="warningLabel" destination="dHW-rV-3Y0" id="kFs-9D-YLc"/>
+                <outlet property="warningView" destination="8Kq-JE-4Sz" id="MvD-dS-F8f"/>
+                <outlet property="warningViewConstraint" destination="2NK-C0-fY1" id="NtL-Tn-adC"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="GEs-I4-pca">
+            <rect key="frame" x="0.0" y="0.0" width="462" height="202"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="SN1-bc-OBX" customClass="KMClipView">
+                <rect key="frame" x="0.0" y="0.0" width="462" height="202"/>
+                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                <subviews>
+                    <view translatesAutoresizingMaskIntoConstraints="NO" id="9Rl-WT-Vo5">
+                        <rect key="frame" x="0.0" y="18" width="462" height="164"/>
+                        <subviews>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="Hbn-Bl-czQ">
+                                <rect key="frame" x="16" y="10" width="430" height="27"/>
+                                <subviews>
+                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="W8W-EU-9oY">
+                                        <rect key="frame" x="-2" y="9" width="137" height="19"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="17" id="7ji-Pr-URV"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="check" title="Preset to selected" bezelStyle="regularSquare" imagePosition="left" inset="2" id="8IY-Ml-VUE">
+                                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="selectedByDefaultAction:" target="-2" id="dkB-eh-fUH"/>
+                                        </connections>
+                                    </button>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="W8W-EU-9oY" firstAttribute="leading" secondItem="Hbn-Bl-czQ" secondAttribute="leading" id="AJI-PB-9fG"/>
+                                    <constraint firstItem="W8W-EU-9oY" firstAttribute="top" secondItem="Hbn-Bl-czQ" secondAttribute="top" id="Afu-TZ-4OL"/>
+                                    <constraint firstAttribute="bottom" secondItem="W8W-EU-9oY" secondAttribute="bottom" constant="10" id="o4H-e8-xg6"/>
+                                </constraints>
+                            </customView>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="X1N-fG-yos">
+                                <rect key="frame" x="0.0" y="51" width="462" height="113"/>
+                                <subviews>
+                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VWM-PH-qu5">
+                                        <rect key="frame" x="16" y="18" width="430" height="24"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="24" id="sm4-QW-pDv"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="hTp-Ua-Pmk">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="TJL-PT-Khy">
+                                        <rect key="frame" x="16" y="-1" width="430" height="5"/>
+                                    </box>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="8Kq-JE-4Sz">
+                                        <rect key="frame" x="0.0" y="81" width="462" height="32"/>
+                                        <subviews>
+                                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="DmH-Up-Mnm">
+                                                <rect key="frame" x="8" y="6" width="16" height="16"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="height" constant="16" id="Wsn-6q-O2N"/>
+                                                    <constraint firstAttribute="width" constant="16" id="sEM-8K-VkR"/>
+                                                </constraints>
+                                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameElseAlert" id="AbH-fd-PDF"/>
+                                            </imageView>
+                                            <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="dHW-rV-3Y0">
+                                                <rect key="frame" x="6" y="8" width="450" height="16"/>
+                                                <textFieldCell key="cell" selectable="YES" title="Multiline Label" id="4sC-qR-S5n">
+                                                    <font key="font" usesAppearanceFont="YES"/>
+                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                </textFieldCell>
+                                            </textField>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstAttribute="trailing" secondItem="dHW-rV-3Y0" secondAttribute="trailing" constant="8" id="61o-Re-lqf"/>
+                                            <constraint firstItem="DmH-Up-Mnm" firstAttribute="leading" secondItem="8Kq-JE-4Sz" secondAttribute="leading" constant="8" id="8yV-1w-yv8"/>
+                                            <constraint firstItem="dHW-rV-3Y0" firstAttribute="top" secondItem="8Kq-JE-4Sz" secondAttribute="top" constant="8" id="GGx-Es-9N3"/>
+                                            <constraint firstItem="dHW-rV-3Y0" firstAttribute="top" secondItem="DmH-Up-Mnm" secondAttribute="top" constant="-2" id="HoK-vB-2jL"/>
+                                            <constraint firstAttribute="bottom" secondItem="dHW-rV-3Y0" secondAttribute="bottom" constant="8" id="jss-WK-AXn"/>
+                                            <constraint firstItem="dHW-rV-3Y0" firstAttribute="leading" secondItem="8Kq-JE-4Sz" secondAttribute="leading" constant="8" id="s3y-OU-Lna"/>
+                                        </constraints>
+                                    </customView>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="72u-lv-eA9">
+                                        <rect key="frame" x="14" y="49" width="37" height="16"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Pws-hq-VA0">
+                                            <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="8Kq-JE-4Sz" firstAttribute="top" secondItem="X1N-fG-yos" secondAttribute="top" id="2NK-C0-fY1"/>
+                                    <constraint firstAttribute="trailing" secondItem="VWM-PH-qu5" secondAttribute="trailing" constant="16" id="79I-yU-DBq"/>
+                                    <constraint firstItem="TJL-PT-Khy" firstAttribute="top" secondItem="VWM-PH-qu5" secondAttribute="bottom" constant="16" id="GAZ-w2-C7d"/>
+                                    <constraint firstAttribute="trailing" secondItem="8Kq-JE-4Sz" secondAttribute="trailing" id="GXw-Wb-GPS"/>
+                                    <constraint firstAttribute="trailing" secondItem="TJL-PT-Khy" secondAttribute="trailing" constant="16" id="KH6-JW-skr"/>
+                                    <constraint firstItem="72u-lv-eA9" firstAttribute="leading" secondItem="X1N-fG-yos" secondAttribute="leading" constant="16" id="Py8-u9-Daj"/>
+                                    <constraint firstItem="VWM-PH-qu5" firstAttribute="leading" secondItem="72u-lv-eA9" secondAttribute="leading" id="WAd-X2-Qmm"/>
+                                    <constraint firstItem="8Kq-JE-4Sz" firstAttribute="leading" secondItem="X1N-fG-yos" secondAttribute="leading" id="cEy-Mv-HdS"/>
+                                    <constraint firstAttribute="bottom" secondItem="TJL-PT-Khy" secondAttribute="bottom" constant="1" id="d7Q-ZR-jgw"/>
+                                    <constraint firstItem="TJL-PT-Khy" firstAttribute="leading" secondItem="X1N-fG-yos" secondAttribute="leading" constant="16" id="h9A-zb-HCm"/>
+                                    <constraint firstItem="72u-lv-eA9" firstAttribute="top" secondItem="8Kq-JE-4Sz" secondAttribute="bottom" constant="16" id="ovv-T8-Zol"/>
+                                    <constraint firstItem="VWM-PH-qu5" firstAttribute="top" secondItem="72u-lv-eA9" secondAttribute="bottom" constant="7" id="yQ8-ig-p2f"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="Hbn-Bl-czQ" firstAttribute="top" secondItem="X1N-fG-yos" secondAttribute="bottom" constant="14" id="Qta-m8-gRQ"/>
+                            <constraint firstItem="Hbn-Bl-czQ" firstAttribute="leading" secondItem="9Rl-WT-Vo5" secondAttribute="leading" constant="16" id="Uoh-Jb-G2w"/>
+                            <constraint firstAttribute="trailing" secondItem="X1N-fG-yos" secondAttribute="trailing" id="WbM-h4-FKL"/>
+                            <constraint firstAttribute="bottom" secondItem="Hbn-Bl-czQ" secondAttribute="bottom" constant="10" id="YBU-xx-0BF"/>
+                            <constraint firstItem="X1N-fG-yos" firstAttribute="top" secondItem="9Rl-WT-Vo5" secondAttribute="top" id="gh6-8P-Esz"/>
+                            <constraint firstAttribute="trailing" secondItem="Hbn-Bl-czQ" secondAttribute="trailing" constant="16" id="ni0-0v-8l0"/>
+                            <constraint firstItem="X1N-fG-yos" firstAttribute="leading" secondItem="9Rl-WT-Vo5" secondAttribute="leading" id="ydN-Lu-HH3"/>
+                        </constraints>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="9Rl-WT-Vo5" firstAttribute="leading" secondItem="SN1-bc-OBX" secondAttribute="leading" id="CnF-sq-oh6"/>
+                    <constraint firstItem="9Rl-WT-Vo5" firstAttribute="top" secondItem="SN1-bc-OBX" secondAttribute="top" constant="20" id="JNw-ab-S8V"/>
+                    <constraint firstAttribute="trailing" secondItem="9Rl-WT-Vo5" secondAttribute="trailing" id="rZY-bP-Sqi"/>
+                </constraints>
+            </clipView>
+            <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="E0i-o7-9uI">
+                <rect key="frame" x="-100" y="-100" width="303" height="15"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </scroller>
+            <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="ac6-Y8-t7V">
+                <rect key="frame" x="447" y="0.0" width="15" height="164"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </scroller>
+            <point key="canvasLocation" x="-120" y="17"/>
+        </scrollView>
+    </objects>
+    <resources>
+        <image name="KMImageNameElseAlert" width="14" height="14"/>
+    </resources>
+</document>

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

@@ -823,6 +823,12 @@
 		9F853A082947137500DF644E /* newtab.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 9F8539F52947137400DF644E /* newtab.pdf */; };
 		9F853A092947137500DF644E /* newtab.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 9F8539F52947137400DF644E /* newtab.pdf */; };
 		9F853A0A2947137500DF644E /* newtab.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 9F8539F52947137400DF644E /* newtab.pdf */; };
+		9F8810852B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8810832B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift */; };
+		9F8810862B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8810832B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift */; };
+		9F8810872B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8810832B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift */; };
+		9F8810882B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */; };
+		9F8810892B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */; };
+		9F88108A2B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */; };
 		9F8DDF2629237910006CDC73 /* Array+KMExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8DDF2529237910006CDC73 /* Array+KMExtensions.swift */; };
 		9F8DDF2729237910006CDC73 /* Array+KMExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8DDF2529237910006CDC73 /* Array+KMExtensions.swift */; };
 		9F8DDF2829237910006CDC73 /* Array+KMExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8DDF2529237910006CDC73 /* Array+KMExtensions.swift */; };
@@ -5172,6 +5178,8 @@
 		9F8539F32947137400DF644E /* default-icon.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "default-icon.pdf"; sourceTree = "<group>"; };
 		9F8539F42947137400DF644E /* newtab_h.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = newtab_h.pdf; sourceTree = "<group>"; };
 		9F8539F52947137400DF644E /* newtab.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = newtab.pdf; sourceTree = "<group>"; };
+		9F8810832B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationButtonWidgetOptionsViewController.swift; sourceTree = "<group>"; };
+		9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationButtonWidgetOptionsViewController.xib; sourceTree = "<group>"; };
 		9F8DDF2529237910006CDC73 /* Array+KMExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+KMExtensions.swift"; sourceTree = "<group>"; };
 		9F8DDF2B2924B855006CDC73 /* KMPDFToolsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFToolsViewController.swift; sourceTree = "<group>"; };
 		9F8DDF2C2924B855006CDC73 /* KMPDFToolsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPDFToolsViewController.xib; sourceTree = "<group>"; };
@@ -7738,6 +7746,8 @@
 				9F69DBB12B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.xib */,
 				9F69DBB82B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift */,
 				9F69DBB92B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib */,
+				9F8810832B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift */,
+				9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */,
 			);
 			path = FormProperties;
 			sourceTree = "<group>";
@@ -12547,6 +12557,7 @@
 				ADAFDA852AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
 				ADED71D929B57C01005EEC0A /* Localizable.strings in Resources */,
 				AD3AAD702B0DCC6800DE5FE7 /* KMCompareSaveWindow.xib in Resources */,
+				9F8810882B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */,
 				AD3AAD4D2B0B7B9300DE5FE7 /* KMCompareTextView.xib in Resources */,
 				9FB220FA2B186C9800A5B208 /* KMAnnotationGeneralViewController.xib in Resources */,
 				BB49ED11293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
@@ -13225,6 +13236,7 @@
 				9F78EFBF28F7C1CC001E66F4 /* KMHomeViewController.xib in Resources */,
 				BBB376A52B10A7FD009539CC /* a_4b.png in Resources */,
 				BB0B2CD92B04AE560088FFD8 /* LeftSideView.xib in Resources */,
+				9F8810892B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */,
 				9F8539FA2947137500DF644E /* newtab_p.pdf in Resources */,
 				BB853C962AF8DCC7009C20C1 /* KMBatchOperateRemovePasswordViewController.xib in Resources */,
 				BB1B0AE42B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
@@ -13511,6 +13523,7 @@
 				9F1F82D7292F6D510092C4B4 /* KMPDFInsertPreviewViewController.xib in Resources */,
 				ADE86AB32B03438400414DFA /* KMWatermarkWindowController.xib in Resources */,
 				9FAAA337290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.xib in Resources */,
+				9F88108A2B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */,
 				AD58F4072B14954B00299EE0 /* KMCompareTextHeaderView.xib in Resources */,
 				8997012428F41AB8009AF911 /* KMLeftSideViewController.xib in Resources */,
 				ADAFDA872AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
@@ -14595,6 +14608,7 @@
 				AD1CA3FF2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */,
 				ADD1B6DF2946BFD500C3FFF7 /* KMPrintChoosePageSizeSizeView.swift in Sources */,
 				BB147032299DC0D200784A6A /* OIDTokenResponse.m in Sources */,
+				9F8810852B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift in Sources */,
 				BB146FF3299DC0D100784A6A /* OIDLoopbackHTTPServer.m in Sources */,
 				ADE86AE62B0AF50B00414DFA /* KMCompareCoveringSettingWindowController.swift in Sources */,
 				9F78EFBB28F7C1CC001E66F4 /* KMHomeViewController.swift in Sources */,
@@ -15813,6 +15827,7 @@
 				ADDF83422B391A5C00A81A4E /* DSignatureConfigWindowController.swift in Sources */,
 				BB88E43C294023CB002B3655 /* KMDocumentModel.swift in Sources */,
 				BBB14A6429792D6900936EDB /* KMRedactPageRangeContentView.swift in Sources */,
+				9F8810862B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift in Sources */,
 				AD88109729A78ADC00178CA1 /* KMVerificationCodeView.swift in Sources */,
 				BBC347FE295448DE008D2CD1 /* KMWatermarkTemplateModel.swift in Sources */,
 				9FB220F82B186C9800A5B208 /* KMAnnotationGeneralViewController.swift in Sources */,
@@ -16597,6 +16612,7 @@
 				BB146FF5299DC0D100784A6A /* OIDLoopbackHTTPServer.m in Sources */,
 				9FCFEC6E2AC3D96800EAD2CB /* CPDFListViewAnimatedBorderlessWindow.swift in Sources */,
 				BBD1F79E296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */,
+				9F8810872B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.swift in Sources */,
 				9F0CB527298656BA00007028 /* KMDesignToken+BorderWidth.swift in Sources */,
 				ADDF835B2B391A5C00A81A4E /* CDSignatureCertificateStateViewController.swift in Sources */,
 				ADE86AB82B0343E600414DFA /* KMWatermarkView.swift in Sources */,