Sfoglia il codice sorgente

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

wanjun 1 anno fa
parent
commit
94482787ab

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

@@ -0,0 +1,312 @@
+//
+//  KMAnnotationChoiceWidgetOptionsViewController.swift
+//  PDF Reader Pro
+//
+//  Created by wanjun on 2024/1/16.
+//
+
+import Cocoa
+
+class KMChoiceWidgetTableViewCell: NSTableCellView {
+    
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    var mouseMoveCallback: ((Bool) -> Void)?
+    
+    deinit {
+        mouseMoveCallback = nil
+    }
+    
+    override func viewDidMoveToWindow() {
+        super.viewDidMoveToWindow()
+        if window != nil {
+            addTrackingRect(bounds, owner: self, userData: nil, assumeInside: false)
+        }
+    }
+    
+    override func setFrameSize(_ newSize: NSSize) {
+        super.setFrameSize(newSize)
+        addTrackingRect(NSMakeRect(0, 0, newSize.width, newSize.height), owner: self, userData: nil, assumeInside: false)
+    }
+    
+    override func mouseEntered(with event: NSEvent) {
+        super.mouseEntered(with: event)
+        mouseMoveCallback?(true)
+    }
+    
+    override func mouseExited(with event: NSEvent) {
+        super.mouseExited(with: event)
+        mouseMoveCallback?(false)
+    }
+}
+
+class KMAnnotationChoiceWidgetOptionsViewController: NSViewController {
+    
+    private var _annotations: [CPDFChoiceWidgetAnnotation] = []
+    private var _formMode: CAnnotationType = .radioButton
+    var pdfView: CPDFListView?
+    var annotationModel: CPDFAnnotationModel?
+    
+    @IBOutlet var dropdownProjectLabel: NSTextField!
+    @IBOutlet var dropdownProjectTextField: NSTextField!
+    @IBOutlet var dropdownNewAddBtn: NSButton!
+    @IBOutlet var dropdownDeleteBtn: NSButton!
+    @IBOutlet var dropdownMoveUpBtn: NSButton!
+    @IBOutlet var dropdownMoveDownBtn: NSButton!
+    @IBOutlet var dropdownProjectListLabel: NSTextField!
+    @IBOutlet var dropdownProjectListTableView: NSTableView!
+    
+    var annotation: CPDFChoiceWidgetAnnotation?
+    var isFromMode: Bool = false
+    var list: [String] = []
+    var selectRawArray: [Any] = []
+    
+    deinit {
+        NotificationCenter.default.removeObserver(self)
+        annotation = nil
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        dropdownProjectLabel.stringValue = NSLocalizedString("Item", comment: "")
+        dropdownProjectLabel.textColor = KMAppearance.Layout.h1Color()
+        dropdownProjectListLabel.stringValue = NSLocalizedString("Item List", comment: "")
+        dropdownProjectListLabel.textColor = KMAppearance.Layout.h1Color()
+        dropdownProjectTextField.backgroundColor = KMAppearance.Layout.l1Color()
+        dropdownProjectListTableView.backgroundColor = KMAppearance.Layout.l1Color()
+        dropdownProjectTextField.wantsLayer = true
+        dropdownProjectListTableView.wantsLayer = true
+        dropdownProjectTextField.layer?.borderWidth = 1.0
+        dropdownProjectListTableView.layer?.borderWidth = 1.0
+        dropdownProjectTextField.layer?.borderColor = KMAppearance.Interactive.s0Color().cgColor
+        dropdownProjectListTableView.layer?.borderColor = KMAppearance.Interactive.s0Color().cgColor
+        dropdownProjectTextField.layer?.cornerRadius = 1.0
+        dropdownProjectListTableView.layer?.cornerRadius = 1.0
+        dropdownNewAddBtn.isEnabled = false
+        NotificationCenter.default.addObserver(self, selector: #selector(dropdownProjectTextFieldDidChange), name: NSControl.textDidChangeNotification, object: dropdownProjectTextField)
+        NotificationCenter.default.addObserver(self, selector: #selector(dropdownProjectTextFieldDidMouseDown), name: Notification.Name("KMAnnotationChoiceWidgeOptionsTextField"), object: dropdownProjectTextField)
+        list = annotation!.choices()
+
+        reloadData()
+    }
+    
+    // MARK: Private Method
+    
+    private func reloadData() {
+        dropdownProjectListTableView.reloadData()
+        
+        dropdownNewAddBtn.isEnabled = false
+        dropdownDeleteBtn.isEnabled = false
+        dropdownMoveUpBtn.isEnabled = false
+        dropdownMoveDownBtn.isEnabled = false
+    }
+    
+    private func updateAnnotationMode() {
+        let userDefaults = UserDefaults.standard
+        if formMode == .comboBox {
+            userDefaults.set(annotation?.choices, forKey: SKAnnotationChoiceWidgetChoicesKey)
+        } else if formMode == .listMenu {
+            userDefaults.set(annotation?.choices, forKey: SKAnnotationChoiceListWidgetChoicesKey)
+        }
+    }
+    
+    // MARK: Set & Get
+    
+    var formMode: CAnnotationType {
+        get {
+            return _formMode
+        }
+        set {
+            _formMode = newValue
+            isFromMode = true
+            
+            let userDefaults = UserDefaults.standard
+            var note: CPDFChoiceWidgetAnnotation?
+            
+            if formMode == .listMenu {
+                let bounds = NSMakeRect(0, 0, 100, 80)
+                note = CPDFChoiceWidgetAnnotation(document: pdfView?.document, listChoice: true)
+                
+                let choicesArr: [Any] = userDefaults.array(forKey: SKAnnotationChoiceListWidgetChoicesKey)!
+                if let stringArray = choicesArr as? [String] {
+                    note?.setChoices(stringArray)
+                }
+            } else if formMode == .comboBox {
+                let bounds = NSMakeRect(0, 0, 100, 25)
+                note = CPDFChoiceWidgetAnnotation(document: pdfView?.document, listChoice: false)
+                
+                let choicesArr = userDefaults.array(forKey: SKAnnotationChoiceListWidgetChoicesKey)
+                if let stringArray = choicesArr as? [String] {
+                    note?.setChoices(stringArray)
+                }
+            }
+            
+            if let note1 = note {
+                self.annotations = [note1]
+            }
+            self.annotation = note
+        }
+    }
+
+    var annotations: [CPDFChoiceWidgetAnnotation] {
+        get {
+            return _annotations
+        }
+        set {
+            _annotations = newValue
+            annotation = _annotations.first
+        }
+    }
+    
+    // MARK: Button Action
+    
+    @IBAction func addAction(_ sender: Any) {
+        if dropdownProjectTextField.stringValue.count > 0 {
+            return
+        }
+        
+        list.append(dropdownProjectTextField.stringValue)
+        dropdownProjectTextField.stringValue = ""
+        
+        setChoiceWidgetChoices(list)
+        dropdownProjectListTableView.reloadData()
+        annotation?.setButtonWidgetStateString(list[0])
+        
+        dropdownNewAddBtn.isEnabled = false
+    }
+
+    @IBAction func deleteAction(_ sender: Any) {
+        guard dropdownProjectListTableView.numberOfRows > 1 && dropdownProjectListTableView.numberOfRows != selectRawArray.count else {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("The list cannot be empty.", comment: "")
+            alert.runModal()
+            return
+        }
+        
+        if dropdownProjectListTableView.selectedRow >= 0 {
+            let indexSet = dropdownProjectListTableView.selectedRowIndexes
+            let reversedIndexes = selectRawArray.reversed()
+            for x in reversedIndexes {
+                list.remove(at: x as! Int)
+            }
+            
+            dropdownProjectListTableView.selectRowIndexes(indexSet, byExtendingSelection: false)
+        }
+        
+        dropdownProjectTextField.stringValue = ""
+        setChoiceWidgetChoices(list)
+        dropdownProjectListTableView.reloadData()
+        annotation?.setButtonWidgetStateString(list[0])
+
+        dropdownProjectTextFieldDidMouseDown()
+    }
+    
+    @IBAction func moveUpAction(_ sender: Any) {
+        if dropdownProjectListTableView.selectedRow > 0 {
+            let selectedRow = dropdownProjectListTableView.selectedRow
+            if selectedRow > 0 && selectedRow < list.count {
+                list.swapAt(selectedRow, selectedRow - 1)
+            }
+        }
+
+        setChoiceWidgetChoices(list)
+        dropdownProjectListTableView.reloadData()
+        annotation?.setButtonWidgetStateString(list[0])
+
+        dropdownProjectTextFieldDidMouseDown()
+    }
+
+    @IBAction func moveDownAction(_ sender: Any) {
+        if dropdownProjectListTableView.selectedRow >= 0 && dropdownProjectListTableView.selectedRow < list.count-1 {
+            let selectedRow = dropdownProjectListTableView.selectedRow
+            if selectedRow > 0 && selectedRow < list.count {
+                list.swapAt(selectedRow, selectedRow + 1)
+            }
+        }
+
+        setChoiceWidgetChoices(list)
+        dropdownProjectListTableView.reloadData()
+        annotation?.setButtonWidgetStateString(list[0])
+
+        dropdownProjectTextFieldDidMouseDown()
+    }
+
+    func setChoiceWidgetChoices(_ choices: [String]) {
+        if let note = annotation {
+            note.setChoices(choices)
+        }
+    }
+    
+    // MARK: NSNotification Action
+
+    @objc func dropdownProjectTextFieldDidChange() {
+        if let choiceArray = annotation?.choices(),
+           (choiceArray.contains(dropdownProjectTextField.stringValue) && choiceArray != nil) || isEmpty(dropdownProjectTextField.stringValue) {
+            dropdownNewAddBtn.isEnabled = false
+        } else {
+            dropdownNewAddBtn.isEnabled = true
+        }
+    }
+
+    @objc func dropdownProjectTextFieldDidMouseDown() {
+        dropdownDeleteBtn.isEnabled = false
+        dropdownMoveUpBtn.isEnabled = false
+        dropdownMoveDownBtn.isEnabled = false
+    }
+
+    func isEmpty(_ string: String) -> Bool {
+        let set = CharacterSet.whitespacesAndNewlines
+        let trimmedString = string.trimmingCharacters(in: set)
+        return trimmedString.isEmpty
+    }
+}
+
+extension KMAnnotationChoiceWidgetOptionsViewController: NSTableViewDelegate, NSTableViewDataSource {
+    func numberOfRows(in tableView: NSTableView) -> Int {
+        return list.count
+    }
+
+    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
+        guard let identifier = tableColumn?.identifier else {
+            return nil
+        }
+
+        if identifier.rawValue == "List" {
+            if let cellView = tableView.makeView(withIdentifier: identifier, owner: self) as? KMChoiceWidgetTableViewCell {
+                cellView.titleLabel.stringValue = list[row]
+                cellView.titleLabel.textColor = KMAppearance.Layout.h0Color()
+                return cellView
+            }
+        }
+
+        return nil
+    }
+
+    func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
+        dropdownProjectTextField.stringValue = list[row]
+
+        if let myRowView = tableView.rowView(atRow: row, makeIfNecessary: false) {
+            myRowView.selectionHighlightStyle = .regular
+            myRowView.isEmphasized = true
+        }
+
+        return true
+    }
+
+    func tableViewSelectionDidChange(_ notification: Notification) {
+        dropdownDeleteBtn.isEnabled = true
+        dropdownMoveUpBtn.isEnabled = true
+        dropdownMoveDownBtn.isEnabled = true
+
+        let indexSet = dropdownProjectListTableView.selectedRowIndexes
+        selectRawArray = indexSet.map { NSNumber(value: $0) }
+    }
+
+    func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
+        let rowView = KMTableRowView()
+        return rowView
+    }
+}

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

@@ -0,0 +1,252 @@
+<?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="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationChoiceWidgetOptionsViewController">
+            <connections>
+                <outlet property="dropdownDeleteBtn" destination="V1U-zZ-24v" id="VIV-ma-7Il"/>
+                <outlet property="dropdownMoveDownBtn" destination="JAW-BY-YfG" id="6q6-w9-u8y"/>
+                <outlet property="dropdownMoveUpBtn" destination="7H2-bR-KEa" id="ret-Ti-yDm"/>
+                <outlet property="dropdownNewAddBtn" destination="ay6-6V-aCY" id="SZV-Px-3eE"/>
+                <outlet property="dropdownProjectLabel" destination="aWW-UP-plu" id="JV8-Z3-Q1s"/>
+                <outlet property="dropdownProjectListLabel" destination="25V-pe-fRU" id="gBm-i5-C5D"/>
+                <outlet property="dropdownProjectListTableView" destination="Qb0-eB-HGc" id="fC4-8Y-0Ma"/>
+                <outlet property="dropdownProjectTextField" destination="KOu-JO-ZmC" id="ORy-6W-twv"/>
+                <outlet property="view" destination="Ijf-zl-Tbw" id="8E7-fR-Mgw"/>
+            </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="Ijf-zl-Tbw">
+            <rect key="frame" x="0.0" y="0.0" width="466" height="316"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Vpm-gd-bMj" customClass="KMClipView">
+                <rect key="frame" x="0.0" y="0.0" width="466" height="316"/>
+                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                <subviews>
+                    <view translatesAutoresizingMaskIntoConstraints="NO" id="WiF-4s-kIq">
+                        <rect key="frame" x="0.0" y="87" width="466" height="229"/>
+                        <subviews>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="f1Q-vX-ENq">
+                                <rect key="frame" x="16" y="10" width="434" height="199"/>
+                                <subviews>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aWW-UP-plu">
+                                        <rect key="frame" x="-2" y="181" width="31" height="18"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="18" id="4sa-hp-TVv"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Item" id="pSa-DS-ga6">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KOu-JO-ZmC" customClass="KMAnnotationChoiceWidgeOptionsTextField">
+                                        <rect key="frame" x="0.0" y="150" width="405" height="24"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="24" id="BSu-eg-pXL"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="border" drawsBackground="YES" id="zcn-Uq-af9">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="KM_FFFFFF_ColorDarkChanged05"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ay6-6V-aCY">
+                                        <rect key="frame" x="413" y="152" width="21" height="21"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="21" id="9VY-mr-xKh"/>
+                                            <constraint firstAttribute="width" constant="21" id="Wfi-oA-D2j"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXIWidgetZoominNor" imagePosition="only" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" inset="2" id="nWx-ZC-Jy9">
+                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="addAction:" target="-2" id="met-5R-Ykn"/>
+                                        </connections>
+                                    </button>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="25V-pe-fRU">
+                                        <rect key="frame" x="-2" y="97" width="69" height="33"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Project list" id="J9h-bh-1z5">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <scrollView autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Nm4-rt-SbW">
+                                        <rect key="frame" x="0.0" y="10" width="405" height="80"/>
+                                        <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="uLy-rA-FGT">
+                                            <rect key="frame" x="1" y="1" width="403" height="78"/>
+                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                            <subviews>
+                                                <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="fullWidth" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="systemDefault" viewBased="YES" id="Qb0-eB-HGc">
+                                                    <rect key="frame" x="0.0" y="0.0" width="403" height="78"/>
+                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                    <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
+                                                    <tableColumns>
+                                                        <tableColumn identifier="List" width="391" minWidth="10" maxWidth="3.4028234663852886e+38" id="wRR-4u-e8Y">
+                                                            <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="key">
+                                                                <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                            </tableHeaderCell>
+                                                            <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell1111111111111111111111312312321321312312312" id="xfM-qp-c12">
+                                                                <font key="font" metaFont="system"/>
+                                                                <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                            </textFieldCell>
+                                                            <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                                            <prototypeCellViews>
+                                                                <tableCellView id="ca8-QR-1Vg" customClass="KMChoiceWidgetTableViewCell">
+                                                                    <rect key="frame" x="0.0" y="0.0" width="403" height="42"/>
+                                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                                    <subviews>
+                                                                        <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="rlG-bI-Qfj">
+                                                                            <rect key="frame" x="-2" y="13" width="407" height="17"/>
+                                                                            <constraints>
+                                                                                <constraint firstAttribute="height" constant="17" id="GbE-td-HOg"/>
+                                                                            </constraints>
+                                                                            <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="yoN-tp-HgB">
+                                                                                <font key="font" metaFont="system"/>
+                                                                                <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                                            </textFieldCell>
+                                                                        </textField>
+                                                                    </subviews>
+                                                                    <constraints>
+                                                                        <constraint firstItem="rlG-bI-Qfj" firstAttribute="centerY" secondItem="ca8-QR-1Vg" secondAttribute="centerY" id="9ED-Tp-YyI"/>
+                                                                        <constraint firstItem="rlG-bI-Qfj" firstAttribute="leading" secondItem="ca8-QR-1Vg" secondAttribute="leading" id="O2a-Ry-GXP"/>
+                                                                        <constraint firstAttribute="trailing" secondItem="rlG-bI-Qfj" secondAttribute="trailing" id="w8A-3u-SUk"/>
+                                                                    </constraints>
+                                                                    <connections>
+                                                                        <outlet property="titleLabel" destination="rlG-bI-Qfj" id="gZu-c8-tHu"/>
+                                                                    </connections>
+                                                                </tableCellView>
+                                                            </prototypeCellViews>
+                                                        </tableColumn>
+                                                    </tableColumns>
+                                                    <connections>
+                                                        <outlet property="dataSource" destination="-2" id="T4r-01-ZZ6"/>
+                                                        <outlet property="delegate" destination="-2" id="SlN-Og-sRa"/>
+                                                    </connections>
+                                                </tableView>
+                                            </subviews>
+                                            <nil key="backgroundColor"/>
+                                        </clipView>
+                                        <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="i8s-hf-K5v">
+                                            <rect key="frame" x="1" y="67" width="228" height="15"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                        </scroller>
+                                        <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="kX0-Kb-ikh">
+                                            <rect key="frame" x="224" y="17" width="15" height="102"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                        </scroller>
+                                    </scrollView>
+                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7H2-bR-KEa">
+                                        <rect key="frame" x="413" y="40" width="21" height="21"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="21" id="Q4j-y4-zli"/>
+                                            <constraint firstAttribute="width" constant="21" id="dLa-gX-els"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameWidgetMoveupOptional" imagePosition="only" lineBreakMode="truncatingTail" state="on" borderStyle="border" inset="2" id="dWY-AB-ng2">
+                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="moveUpAction:" target="-2" id="tLL-3Y-gnr"/>
+                                        </connections>
+                                    </button>
+                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAW-BY-YfG">
+                                        <rect key="frame" x="413" y="10" width="21" height="21"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="21" id="MrX-DJ-kzf"/>
+                                            <constraint firstAttribute="width" constant="21" id="wce-9p-hZd"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameWidgetMoveDownOptional" imagePosition="only" lineBreakMode="truncatingTail" state="on" borderStyle="border" inset="2" id="ipF-kd-LxU">
+                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="moveDownAction:" target="-2" id="cov-cE-4xS"/>
+                                        </connections>
+                                    </button>
+                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="V1U-zZ-24v">
+                                        <rect key="frame" x="413" y="69" width="21" height="21"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="21" id="9VS-UT-oBX"/>
+                                            <constraint firstAttribute="width" constant="21" id="VlW-OR-3rD"/>
+                                        </constraints>
+                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXWidgetZoomoutNor" imagePosition="only" lineBreakMode="truncatingTail" state="on" borderStyle="border" inset="2" id="UE2-Bv-oFj">
+                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                        <connections>
+                                            <action selector="deleteAction:" target="-2" id="htf-3H-O2f"/>
+                                        </connections>
+                                    </button>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="aWW-UP-plu" firstAttribute="leading" secondItem="f1Q-vX-ENq" secondAttribute="leading" id="0mD-OU-rQF"/>
+                                    <constraint firstAttribute="bottom" secondItem="Nm4-rt-SbW" secondAttribute="bottom" constant="10" id="8PG-55-tcy"/>
+                                    <constraint firstItem="25V-pe-fRU" firstAttribute="top" secondItem="KOu-JO-ZmC" secondAttribute="bottom" constant="20" id="Cuu-S7-V2z"/>
+                                    <constraint firstAttribute="trailing" secondItem="V1U-zZ-24v" secondAttribute="trailing" id="FMX-IN-NyQ"/>
+                                    <constraint firstItem="Nm4-rt-SbW" firstAttribute="trailing" secondItem="KOu-JO-ZmC" secondAttribute="trailing" id="JrV-4E-DEH"/>
+                                    <constraint firstItem="KOu-JO-ZmC" firstAttribute="leading" secondItem="f1Q-vX-ENq" secondAttribute="leading" id="Kdk-dX-1Ab"/>
+                                    <constraint firstItem="7H2-bR-KEa" firstAttribute="centerY" secondItem="Nm4-rt-SbW" secondAttribute="centerY" id="Lmj-BE-xLy"/>
+                                    <constraint firstAttribute="trailing" secondItem="7H2-bR-KEa" secondAttribute="trailing" id="M14-ss-p6A"/>
+                                    <constraint firstAttribute="trailing" secondItem="ay6-6V-aCY" secondAttribute="trailing" id="Nou-dF-BSP"/>
+                                    <constraint firstItem="V1U-zZ-24v" firstAttribute="top" secondItem="Nm4-rt-SbW" secondAttribute="top" id="QCa-uO-DC4"/>
+                                    <constraint firstAttribute="bottom" secondItem="KOu-JO-ZmC" secondAttribute="bottom" constant="150" id="RVQ-dE-sFz"/>
+                                    <constraint firstItem="Nm4-rt-SbW" firstAttribute="top" secondItem="25V-pe-fRU" secondAttribute="bottom" constant="7" id="TCM-KW-ZEs"/>
+                                    <constraint firstItem="aWW-UP-plu" firstAttribute="top" secondItem="f1Q-vX-ENq" secondAttribute="top" id="Ti4-NV-Mtf"/>
+                                    <constraint firstItem="KOu-JO-ZmC" firstAttribute="top" secondItem="aWW-UP-plu" secondAttribute="bottom" constant="7" id="TxB-9d-lSh"/>
+                                    <constraint firstItem="JAW-BY-YfG" firstAttribute="bottom" secondItem="Nm4-rt-SbW" secondAttribute="bottom" id="aJP-l2-xIw"/>
+                                    <constraint firstItem="ay6-6V-aCY" firstAttribute="centerY" secondItem="KOu-JO-ZmC" secondAttribute="centerY" id="fFa-wT-Dvh"/>
+                                    <constraint firstItem="ay6-6V-aCY" firstAttribute="leading" secondItem="KOu-JO-ZmC" secondAttribute="trailing" constant="8" id="g8H-KT-GIK"/>
+                                    <constraint firstItem="25V-pe-fRU" firstAttribute="leading" secondItem="f1Q-vX-ENq" secondAttribute="leading" id="gEe-6I-0ck"/>
+                                    <constraint firstItem="Nm4-rt-SbW" firstAttribute="leading" secondItem="KOu-JO-ZmC" secondAttribute="leading" id="vGR-Z1-04j"/>
+                                    <constraint firstAttribute="trailing" secondItem="JAW-BY-YfG" secondAttribute="trailing" id="zu3-AB-WLU"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="f1Q-vX-ENq" secondAttribute="trailing" constant="16" id="KPl-SL-m3T"/>
+                            <constraint firstAttribute="bottom" secondItem="f1Q-vX-ENq" secondAttribute="bottom" constant="10" id="NPD-DD-Dnd"/>
+                            <constraint firstItem="f1Q-vX-ENq" firstAttribute="leading" secondItem="WiF-4s-kIq" secondAttribute="leading" constant="16" id="aKa-gx-BSq"/>
+                            <constraint firstItem="f1Q-vX-ENq" firstAttribute="top" secondItem="WiF-4s-kIq" secondAttribute="top" constant="20" id="pna-ce-srO"/>
+                        </constraints>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="WiF-4s-kIq" firstAttribute="top" secondItem="Vpm-gd-bMj" secondAttribute="top" id="EZH-xF-Fqz"/>
+                    <constraint firstAttribute="trailing" secondItem="WiF-4s-kIq" secondAttribute="trailing" id="IsG-oh-Qbh"/>
+                    <constraint firstItem="WiF-4s-kIq" firstAttribute="leading" secondItem="Vpm-gd-bMj" secondAttribute="leading" id="bjC-hZ-Ibn"/>
+                </constraints>
+            </clipView>
+            <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="7Vf-9E-G1e">
+                <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="cZH-9f-4q2">
+                <rect key="frame" x="454" y="0.0" width="15" height="176"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </scroller>
+            <point key="canvasLocation" x="-117" y="74"/>
+        </scrollView>
+    </objects>
+    <resources>
+        <image name="KMImageNameUXIWidgetZoominNor" width="20" height="20"/>
+        <image name="KMImageNameUXWidgetZoomoutNor" width="20" height="20"/>
+        <image name="KMImageNameWidgetMoveDownOptional" width="19" height="20"/>
+        <image name="KMImageNameWidgetMoveupOptional" width="19" height="20"/>
+        <namedColor name="KM_FFFFFF_ColorDarkChanged05">
+            <color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

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

@@ -835,6 +835,12 @@
 		9F8810902B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F88108C2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib */; };
 		9F8810912B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F88108C2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib */; };
 		9F8810922B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F88108C2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib */; };
+		9F8810952B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8810932B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift */; };
+		9F8810962B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8810932B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift */; };
+		9F8810972B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8810932B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift */; };
+		9F8810982B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F8810942B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib */; };
+		9F8810992B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F8810942B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib */; };
+		9F88109A2B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F8810942B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.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 */; };
@@ -5215,6 +5221,8 @@
 		9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationButtonWidgetOptionsViewController.xib; sourceTree = "<group>"; };
 		9F88108B2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationChoiceWidgetAppearanceViewController.swift; sourceTree = "<group>"; };
 		9F88108C2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationChoiceWidgetAppearanceViewController.xib; sourceTree = "<group>"; };
+		9F8810932B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationChoiceWidgetOptionsViewController.swift; sourceTree = "<group>"; };
+		9F8810942B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationChoiceWidgetOptionsViewController.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>"; };
@@ -7799,6 +7807,8 @@
 				9F8810842B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib */,
 				9F88108B2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.swift */,
 				9F88108C2B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib */,
+				9F8810932B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift */,
+				9F8810942B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib */,
 			);
 			path = FormProperties;
 			sourceTree = "<group>";
@@ -12944,6 +12954,7 @@
 				89E9B3F9295BE2EC00AEFA61 /* KMEditPDFTextPropertyViewController.xib in Resources */,
 				9F8539CE29430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
 				BB1B0AE92B4FC6E900889528 /* KMFunctionGuideMultiController.xib in Resources */,
+				9F8810982B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */,
 				ADDF83472B391A5C00A81A4E /* DSignatureCreateInfoViewController.xib in Resources */,
 				AD0FA4FE29A8DD8700EDEB50 /* KMRegisterSuccessView.xib in Resources */,
 				9F0CB49229683DEE00007028 /* KMPropertiesPanelLineSubVC.xib in Resources */,
@@ -13358,6 +13369,7 @@
 				BB1BFF622AE9FA6C003EB179 /* KMBatchOperateBaseWindowController.xib in Resources */,
 				9FE0BBE82B0EFBA300CD1CAC /* KMAnnotationFontWindowController.xib in Resources */,
 				ADAFDA1D2AE8DD6600F084BC /* KMAdvertisementTableView.xib in Resources */,
+				9F8810992B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */,
 				9F0CB4B92977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				BBF62C752B0347D1007B7E86 /* SplitWindowController.xib in Resources */,
 				BB1B0B022B4FC6E900889528 /* KMConvertGuideView.xib in Resources */,
@@ -13916,6 +13928,7 @@
 				9F00CCBF2A2F20E600AC462E /* pdfmasterprocast.xml in Resources */,
 				ADBC375A29CAE95700D93208 /* KMComparativeOutlineSectionCell.xib in Resources */,
 				BB1B0AEB2B4FC6E900889528 /* KMFunctionGuideMultiController.xib in Resources */,
+				9F88109A2B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */,
 				BB99ACD4292E2AEF0048AFD9 /* KMMergeCollectionViewItem.xib in Resources */,
 				ADDF83492B391A5C00A81A4E /* DSignatureCreateInfoViewController.xib in Resources */,
 				BB4F7E872B0C4E820077EC8C /* KMNoteFilterCollevtionViewItem.xib in Resources */,
@@ -14268,6 +14281,7 @@
 				9FB221072B19BD8B00A5B208 /* KMGeneralAnnotationViewController.swift in Sources */,
 				F3F0B27329B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
 				ADAC0DE52AC2B04900FD4F52 /* KMNoteTypeImageView.swift in Sources */,
+				9F8810952B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */,
 				9F8539BE2943085A00DF644E /* KMBrowser.swift in Sources */,
 				89D9896C28FD50EF003A3E87 /* KMAnnotationCollectionViewItem.swift in Sources */,
 				9FCFEC742AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
@@ -15184,6 +15198,7 @@
 				BB8810C52B4F95A900AFA63E /* NSObject+DeviceInfo.m in Sources */,
 				ADE86A9E2B031FDB00414DFA /* KMCompareWindowController.swift in Sources */,
 				BB99ACC3292DE22E0048AFD9 /* KMMergeViewController.swift in Sources */,
+				9F8810962B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */,
 				9F78EFC728F7E965001E66F4 /* KMHomeViewController+UI.swift in Sources */,
 				9FBA0EFA2900188F001117AF /* KMFastToolCollectionView.swift in Sources */,
 				9FBA0EFF29015A82001117AF /* KMFastToolCollectionViewItem.swift in Sources */,
@@ -17006,6 +17021,7 @@
 				899700EA28F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				BBD1F79A296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				BB8F4574295ACE380037EA22 /* KMHeaderFooterAdjectiveListCell.swift in Sources */,
+				9F8810972B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */,
 				ADD1B7082946CBB600C3FFF7 /* KMBaseTextFormatter.swift in Sources */,
 				89D2D2C329495D2100BFF5FE /* KMFormModel.swift in Sources */,
 				BBFE6E67293097A600142C01 /* KMPageRangePickerWindowController.swift in Sources */,