Browse Source

【书签】书签列表UI搭建

lizhe 1 year ago
parent
commit
ee7b16c9b6
16 changed files with 580 additions and 31 deletions
  1. 1 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.swift
  2. 3 2
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.xib
  3. 0 12
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/KMBookmarkOutlineTitleCell.swift
  4. 1 7
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/KMTextWithIconCell.swift
  5. 78 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/KMBookmarkOutlineView.swift
  6. 159 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/KMBookmarkOutlineView.xib
  7. 56 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineFileCellView.swift
  8. 22 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineFileCellView.xib
  9. 56 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlinePageCellView.swift
  10. 22 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlinePageCellView.xib
  11. 55 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineTitleCellView.swift
  12. 22 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineTitleCellView.xib
  13. 0 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/SheetView/KMBookmarkSheetView.swift
  14. 0 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/SheetView/KMBookmarkSheetView.xib
  15. 15 0
      PDF Office/PDF Master/Class/PDFTools/Tools/KMBaseXibView/KMBaseXibView.swift
  16. 90 10
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

+ 1 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.swift

@@ -22,6 +22,7 @@ let kBookmarksDeleteToolbarItemIdentifier       = "BookmarksDeleteToolbarItemIde
 let kPasteboardTypeBookmarkRows = NSPasteboard.PasteboardType(rawValue: "pasteboard.bookmarkrows")
 class KMBookmarkController: NSWindowController {
     
+    @IBOutlet weak var bookmarkOutlineView: KMBookmarkOutlineView!
     @IBOutlet weak var outlineView: KMCustomOutlineView!
     
     var draggedBookmarks: [KMBookmark] = []

+ 3 - 2
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.xib

@@ -8,6 +8,7 @@
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="KMBookmarkController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
+                <outlet property="bookmarkOutlineView" destination="8va-Ju-ebM" id="i6S-4Q-M4F"/>
                 <outlet property="outlineView" destination="O1w-IL-33b" id="OX0-Jb-ho8"/>
                 <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
             </connections>
@@ -23,10 +24,10 @@
                 <rect key="frame" x="0.0" y="0.0" width="663" height="307"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <view translatesAutoresizingMaskIntoConstraints="NO" id="8va-Ju-ebM">
+                    <view translatesAutoresizingMaskIntoConstraints="NO" id="8va-Ju-ebM" customClass="KMBookmarkOutlineView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                         <rect key="frame" x="0.0" y="0.0" width="663" height="307"/>
                         <subviews>
-                            <scrollView fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3xo-BF-qal">
+                            <scrollView hidden="YES" fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3xo-BF-qal">
                                 <rect key="frame" x="0.0" y="22" width="663" height="286"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 <clipView key="contentView" id="one-Qw-MTE">

+ 0 - 12
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/KMBookmarkOutlineTitleCell.swift

@@ -1,12 +0,0 @@
-//
-//  KMBookmarkOutlineTitleCell.swift
-//  PDF Reader Pro
-//
-//  Created by lizhe on 2024/3/1.
-//
-
-import Cocoa
-
-class KMBookmarkOutlineTitleCell: NSTextFieldCell {
-
-}

+ 1 - 7
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/KMTextWithIconCell.swift

@@ -33,12 +33,6 @@ class KMTextWithIconCell: NSTextFieldCell {
 //        }
     }
     
-    override func copy(with zone: NSZone? = nil) -> Any {
-        let copy = super.copy(with: zone) as! KMTextWithIconCell
-        copy.imageCell = imageCell.copy() as! NSImageCell
-        return copy
-    }
-    
     override func cellSize(forBounds rect: NSRect) -> NSSize {
         var cellSize = super.cellSize(forBounds: rect)
         cellSize.width += cellSize.height - 1 + BORDER_BETWEEN_EDGE_AND_IMAGE + BORDER_BETWEEN_IMAGE_AND_TEXT
@@ -88,7 +82,7 @@ class KMTextWithIconCell: NSTextFieldCell {
     override var objectValue: Any? {
         didSet {
             if let obj = objectValue as? NSDictionary {
-                imageCell.image = obj[SKTextWithIconImageKey] as? NSImage
+//                imageCell.image = obj[SKTextWithIconImageKey] as? NSImage
                 self.stringValue = obj[SKTextWithIconStringKey] as! String
             }
         }

+ 78 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/KMBookmarkOutlineView.swift

@@ -0,0 +1,78 @@
+//
+//  KMBookemarkOutlineView.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/4.
+//
+
+import Cocoa
+
+class KMBookmarkOutlineView: KMBaseXibView {
+    @IBOutlet weak var outlineView: NSOutlineView!
+    
+    
+    
+    var data: [[String: Any]] = [] {
+        didSet {
+            self.reloadData()
+        }
+    }
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    override func reloadData() {
+        
+    }
+    
+}
+
+// MARK: - NSOutlineViewDataSource
+extension KMBookmarkOutlineView: NSOutlineViewDataSource {
+    func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
+        if item == nil {
+            return data.count
+        }
+//        if let key = item as? String, let children = data[key] {
+//            return children.count
+//        }
+        return 0
+    }
+    
+    func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
+//        if let key = item as? String {
+//            return data[key] != nil
+//        }
+        return false
+    }
+    
+    func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
+//        if item == nil {
+//            return Array(data.keys)[index]
+//        }
+//        if let key = item as? String, let children = data[key] {
+//            return children[index]
+//        }
+        return ""
+    }
+}
+
+extension KMBookmarkOutlineView: NSOutlineViewDelegate {
+    // MARK: - NSOutlineViewDelegate
+    
+    func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
+        if let key = item as? String {
+            let view = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "HeaderCell"), owner: self) as? NSTableCellView
+            view?.textField?.stringValue = key
+            return view
+        } else if let value = item as? String {
+            let view = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "DataCell"), owner: self) as? NSTableCellView
+            view?.textField?.stringValue = value
+            return view
+        }
+        return nil
+    }
+}

+ 159 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/KMBookmarkOutlineView.xib

@@ -0,0 +1,159 @@
+<?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="KMBookmarkOutlineView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="outlineView" destination="YRR-CB-BJA" id="4YD-CA-3KD"/>
+            </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="648" height="447"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <scrollView autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nl1-Ft-nb3">
+                    <rect key="frame" x="0.0" y="0.0" width="648" height="447"/>
+                    <clipView key="contentView" id="eVh-Ok-3oP">
+                        <rect key="frame" x="1" y="1" width="646" height="445"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="automatic" headerView="bgX-Na-NhK" viewBased="YES" indentationPerLevel="13" outlineTableColumn="sMA-Yh-GT9" id="YRR-CB-BJA">
+                                <rect key="frame" x="0.0" y="0.0" width="646" height="417"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <size key="intercellSpacing" width="17" height="0.0"/>
+                                <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
+                                <tableColumns>
+                                    <tableColumn identifier="AutomaticTableColumnIdentifier.0" width="116" minWidth="40" maxWidth="1000" id="sMA-Yh-GT9">
+                                        <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Label">
+                                            <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
+                                        </tableHeaderCell>
+                                        <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="x4y-jQ-RJz">
+                                            <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="bDf-h7-qSe">
+                                                <rect key="frame" x="8" y="0.0" width="114" height="24"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="414-7Y-Qfp">
+                                                        <rect key="frame" x="0.0" y="4" width="114" height="16"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="glX-m7-z4v">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <connections>
+                                                    <outlet property="textField" destination="414-7Y-Qfp" id="xFU-81-qYz"/>
+                                                </connections>
+                                            </tableCellView>
+                                        </prototypeCellViews>
+                                    </tableColumn>
+                                    <tableColumn identifier="AutomaticTableColumnIdentifier.1" width="182" minWidth="40" maxWidth="1000" id="GPb-Sb-7Xi">
+                                        <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="File">
+                                            <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
+                                        </tableHeaderCell>
+                                        <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="ShJ-4d-tbL">
+                                            <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="7Gq-KM-Svn">
+                                                <rect key="frame" x="139" y="0.0" width="182" height="24"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fdi-Kk-vBV">
+                                                        <rect key="frame" x="0.0" y="4" width="182" height="16"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="Cio-VA-njM">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <connections>
+                                                    <outlet property="textField" destination="Fdi-Kk-vBV" id="bRM-kg-ghr"/>
+                                                </connections>
+                                            </tableCellView>
+                                        </prototypeCellViews>
+                                    </tableColumn>
+                                    <tableColumn width="302" minWidth="10" maxWidth="3.4028234663852886e+38" id="Kie-Fu-Yhs">
+                                        <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Page">
+                                            <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 Cell" id="hgb-4y-6FE">
+                                            <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="h3c-CX-xuA">
+                                                <rect key="frame" x="338" y="0.0" width="299" height="17"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DlK-f1-jel">
+                                                        <rect key="frame" x="0.0" y="1" width="299" height="16"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="qZE-uY-s3I">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <connections>
+                                                    <outlet property="textField" destination="DlK-f1-jel" id="B7G-Uq-Hh5"/>
+                                                </connections>
+                                            </tableCellView>
+                                        </prototypeCellViews>
+                                    </tableColumn>
+                                </tableColumns>
+                                <connections>
+                                    <action selector="outlineView:" target="-1" id="S4Y-yF-vO0"/>
+                                </connections>
+                            </outlineView>
+                        </subviews>
+                    </clipView>
+                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="h7F-KU-YTb">
+                        <rect key="frame" x="1" y="431" width="646" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="miz-NA-XBl">
+                        <rect key="frame" x="224" y="17" width="15" height="102"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <tableHeaderView key="headerView" wantsLayer="YES" id="bgX-Na-NhK">
+                        <rect key="frame" x="0.0" y="0.0" width="646" height="28"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </tableHeaderView>
+                </scrollView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="nl1-Ft-nb3" secondAttribute="trailing" id="Fxx-9h-CiO"/>
+                <constraint firstItem="nl1-Ft-nb3" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="MMV-tc-x5R"/>
+                <constraint firstAttribute="bottom" secondItem="nl1-Ft-nb3" secondAttribute="bottom" id="ceD-qd-A40"/>
+                <constraint firstItem="nl1-Ft-nb3" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="kqC-Lx-gFM"/>
+            </constraints>
+            <point key="canvasLocation" x="187" y="220.5"/>
+        </customView>
+    </objects>
+</document>

+ 56 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineFileCellView.swift

@@ -0,0 +1,56 @@
+//
+//  KMBookmarkOutlineFileCellView.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/4.
+//
+
+import Cocoa
+
+class KMBookmarkOutlineFileCellView: NSTableCellView {
+    @IBOutlet var contentView: NSView!
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    // MARK: 初始化
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        initContentView()
+        setup()
+    }
+    
+    required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        initContentView()
+        setup()
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    private func initContentView() {
+        //绑定xib
+        let resource = NSNib(nibNamed: String(describing: self.classForCoder.self),
+                             bundle: Bundle(for: self.classForCoder.self))!
+        resource.instantiate(withOwner: self, topLevelObjects: nil)
+        addSubview(contentView)
+        contentView.translatesAutoresizingMaskIntoConstraints = false
+        NSLayoutConstraint.activate([
+            contentView.topAnchor.constraint(equalTo: topAnchor),
+            contentView.leftAnchor.constraint(equalTo: leftAnchor),
+            contentView.rightAnchor.constraint(equalTo: rightAnchor),
+            contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
+        contentView.updateConstraintsForSubtreeIfNeeded()
+    }
+    
+    func setup() {
+        
+    }
+    
+    func reloadData() {
+
+    }
+    
+}

+ 22 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineFileCellView.xib

@@ -0,0 +1,22 @@
+<?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="KMBookmarkOutlineFileCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contentView" destination="c22-O7-iKe" id="ZWl-7Y-Rof"/>
+            </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="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <point key="canvasLocation" x="98" y="133"/>
+        </customView>
+    </objects>
+</document>

+ 56 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlinePageCellView.swift

@@ -0,0 +1,56 @@
+//
+//  KMBookmarkOutlinePageCellView.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/4.
+//
+
+import Cocoa
+
+class KMBookmarkOutlinePageCellView: NSTableCellView {
+
+    @IBOutlet var contentView: NSView!
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    // MARK: 初始化
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        initContentView()
+        setup()
+    }
+    
+    required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        initContentView()
+        setup()
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    private func initContentView() {
+        //绑定xib
+        let resource = NSNib(nibNamed: String(describing: self.classForCoder.self),
+                             bundle: Bundle(for: self.classForCoder.self))!
+        resource.instantiate(withOwner: self, topLevelObjects: nil)
+        addSubview(contentView)
+        contentView.translatesAutoresizingMaskIntoConstraints = false
+        NSLayoutConstraint.activate([
+            contentView.topAnchor.constraint(equalTo: topAnchor),
+            contentView.leftAnchor.constraint(equalTo: leftAnchor),
+            contentView.rightAnchor.constraint(equalTo: rightAnchor),
+            contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
+        contentView.updateConstraintsForSubtreeIfNeeded()
+    }
+    
+    func setup() {
+        
+    }
+    
+    func reloadData() {
+
+    }
+    
+}

+ 22 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlinePageCellView.xib

@@ -0,0 +1,22 @@
+<?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="KMBookmarkOutlinePageCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contentView" destination="c22-O7-iKe" id="CDE-qQ-uz0"/>
+            </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="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <point key="canvasLocation" x="34" y="-72"/>
+        </customView>
+    </objects>
+</document>

+ 55 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineTitleCellView.swift

@@ -0,0 +1,55 @@
+//
+//  KMBookmarkOutlineTitleCellView.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/4.
+//
+
+import Cocoa
+
+class KMBookmarkOutlineTitleCellView: NSTableCellView {
+
+    @IBOutlet var contentView: KMBookmarkOutlineTitleCellView!
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    // MARK: 初始化
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        initContentView()
+        setup()
+    }
+    
+    required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        initContentView()
+        setup()
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    private func initContentView() {
+        //绑定xib
+        let resource = NSNib(nibNamed: String(describing: self.classForCoder.self),
+                             bundle: Bundle(for: self.classForCoder.self))!
+        resource.instantiate(withOwner: self, topLevelObjects: nil)
+        addSubview(contentView)
+        contentView.translatesAutoresizingMaskIntoConstraints = false
+        NSLayoutConstraint.activate([
+            contentView.topAnchor.constraint(equalTo: topAnchor),
+            contentView.leftAnchor.constraint(equalTo: leftAnchor),
+            contentView.rightAnchor.constraint(equalTo: rightAnchor),
+            contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
+        contentView.updateConstraintsForSubtreeIfNeeded()
+    }
+    
+    func setup() {
+        
+    }
+    
+    func reloadData() {
+
+    }
+}

+ 22 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineTitleCellView.xib

@@ -0,0 +1,22 @@
+<?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="KMBookmarkOutlineTitleCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contentView" destination="c22-O7-iKe" id="kgI-sL-XI6"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="KMBookmarkOutlineTitleCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <point key="canvasLocation" x="34" y="-72"/>
+        </customView>
+    </objects>
+</document>

PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/KMBookmarkSheetView.swift → PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/SheetView/KMBookmarkSheetView.swift


PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/KMBookmarkSheetView.xib → PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/SheetView/KMBookmarkSheetView.xib


+ 15 - 0
PDF Office/PDF Master/Class/PDFTools/Tools/KMBaseXibView/KMBaseXibView.swift

@@ -69,6 +69,21 @@ class KMBaseXibView: NSView {
         }
     }
     
+//    private func initContentView() {
+//        //绑定xib
+//        let resource = NSNib(nibNamed: String(describing: self.classForCoder.self),
+//                             bundle: Bundle(for: self.classForCoder.self))!
+//        resource.instantiate(withOwner: self, topLevelObjects: nil)
+//        addSubview(contentView)
+//        contentView.translatesAutoresizingMaskIntoConstraints = false
+//        NSLayoutConstraint.activate([
+//            contentView.topAnchor.constraint(equalTo: topAnchor),
+//            contentView.leftAnchor.constraint(equalTo: leftAnchor),
+//            contentView.rightAnchor.constraint(equalTo: rightAnchor),
+//            contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
+//        contentView.updateConstraintsForSubtreeIfNeeded()
+//    }
+    
     func setup() {
         
     }

+ 90 - 10
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -1632,9 +1632,30 @@
 		AD7D5CB32B9070AF006562CD /* KMSyncDot.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CB22B9070AF006562CD /* KMSyncDot.swift */; };
 		AD7D5CB42B9070AF006562CD /* KMSyncDot.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CB22B9070AF006562CD /* KMSyncDot.swift */; };
 		AD7D5CB52B9070AF006562CD /* KMSyncDot.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CB22B9070AF006562CD /* KMSyncDot.swift */; };
-		AD7D5CBC2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CBB2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift */; };
-		AD7D5CBD2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CBB2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift */; };
-		AD7D5CBE2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CBB2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift */; };
+		AD7D5CC22B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CC12B9566D0006562CD /* KMBookmarkOutlineView.swift */; };
+		AD7D5CC32B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CC12B9566D0006562CD /* KMBookmarkOutlineView.swift */; };
+		AD7D5CC42B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CC12B9566D0006562CD /* KMBookmarkOutlineView.swift */; };
+		AD7D5CC62B9566E9006562CD /* KMBookmarkOutlineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CC52B9566E9006562CD /* KMBookmarkOutlineView.xib */; };
+		AD7D5CC72B9566E9006562CD /* KMBookmarkOutlineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CC52B9566E9006562CD /* KMBookmarkOutlineView.xib */; };
+		AD7D5CC82B9566E9006562CD /* KMBookmarkOutlineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CC52B9566E9006562CD /* KMBookmarkOutlineView.xib */; };
+		AD7D5CCB2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CCA2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift */; };
+		AD7D5CCC2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CCA2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift */; };
+		AD7D5CCD2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CCA2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift */; };
+		AD7D5CCF2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CCE2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift */; };
+		AD7D5CD02B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CCE2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift */; };
+		AD7D5CD12B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CCE2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift */; };
+		AD7D5CD32B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CD22B957442006562CD /* KMBookmarkOutlineFileCellView.swift */; };
+		AD7D5CD42B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CD22B957442006562CD /* KMBookmarkOutlineFileCellView.swift */; };
+		AD7D5CD52B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CD22B957442006562CD /* KMBookmarkOutlineFileCellView.swift */; };
+		AD7D5CD72B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CD62B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib */; };
+		AD7D5CD82B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CD62B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib */; };
+		AD7D5CD92B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CD62B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib */; };
+		AD7D5CDB2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CDA2B957687006562CD /* KMBookmarkOutlinePageCellView.xib */; };
+		AD7D5CDC2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CDA2B957687006562CD /* KMBookmarkOutlinePageCellView.xib */; };
+		AD7D5CDD2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CDA2B957687006562CD /* KMBookmarkOutlinePageCellView.xib */; };
+		AD7D5CDF2B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CDE2B957693006562CD /* KMBookmarkOutlineFileCellView.xib */; };
+		AD7D5CE02B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CDE2B957693006562CD /* KMBookmarkOutlineFileCellView.xib */; };
+		AD7D5CE12B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CDE2B957693006562CD /* KMBookmarkOutlineFileCellView.xib */; };
 		AD85D1822AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */; };
 		AD85D1832AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */; };
 		AD85D1842AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */; };
@@ -5812,7 +5833,14 @@
 		AD7D5CA42B8F35D1006562CD /* SKPDFSyncRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKPDFSyncRecord.h; sourceTree = "<group>"; };
 		AD7D5CA82B906E36006562CD /* CPDFListView+Sync.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFListView+Sync.swift"; sourceTree = "<group>"; };
 		AD7D5CB22B9070AF006562CD /* KMSyncDot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSyncDot.swift; sourceTree = "<group>"; };
-		AD7D5CBB2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlineTitleCell.swift; sourceTree = "<group>"; };
+		AD7D5CC12B9566D0006562CD /* KMBookmarkOutlineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlineView.swift; sourceTree = "<group>"; };
+		AD7D5CC52B9566E9006562CD /* KMBookmarkOutlineView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkOutlineView.xib; sourceTree = "<group>"; };
+		AD7D5CCA2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlineTitleCellView.swift; sourceTree = "<group>"; };
+		AD7D5CCE2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlinePageCellView.swift; sourceTree = "<group>"; };
+		AD7D5CD22B957442006562CD /* KMBookmarkOutlineFileCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlineFileCellView.swift; sourceTree = "<group>"; };
+		AD7D5CD62B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkOutlineTitleCellView.xib; sourceTree = "<group>"; };
+		AD7D5CDA2B957687006562CD /* KMBookmarkOutlinePageCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkOutlinePageCellView.xib; sourceTree = "<group>"; };
+		AD7D5CDE2B957693006562CD /* KMBookmarkOutlineFileCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkOutlineFileCellView.xib; sourceTree = "<group>"; };
 		AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeNOFileView.swift; sourceTree = "<group>"; };
 		AD85D1862AEF46DF000F4D28 /* KMHomeNOFileView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeNOFileView.xib; sourceTree = "<group>"; };
 		AD85D19D2AEF927D000F4D28 /* KMQucikToolsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMQucikToolsModel.swift; sourceTree = "<group>"; };
@@ -8502,11 +8530,10 @@
 		AD055E482B7234530035F824 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				AD055E492B72346E0035F824 /* KMBookmarkSheetView.swift */,
-				AD055E4D2B7234810035F824 /* KMBookmarkSheetView.xib */,
+				AD7D5CC02B956696006562CD /* OutlineView */,
+				AD7D5CBF2B956689006562CD /* SheetView */,
 				AD055E5B2B85C9A70035F824 /* KMSeparatorCell.swift */,
 				AD055E5F2B85E04C0035F824 /* KMTextWithIconCell.swift */,
-				AD7D5CBB2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -9096,6 +9123,38 @@
 			path = Data;
 			sourceTree = "<group>";
 		};
+		AD7D5CBF2B956689006562CD /* SheetView */ = {
+			isa = PBXGroup;
+			children = (
+				AD055E492B72346E0035F824 /* KMBookmarkSheetView.swift */,
+				AD055E4D2B7234810035F824 /* KMBookmarkSheetView.xib */,
+			);
+			path = SheetView;
+			sourceTree = "<group>";
+		};
+		AD7D5CC02B956696006562CD /* OutlineView */ = {
+			isa = PBXGroup;
+			children = (
+				AD7D5CC92B957258006562CD /* View */,
+				AD7D5CC12B9566D0006562CD /* KMBookmarkOutlineView.swift */,
+				AD7D5CC52B9566E9006562CD /* KMBookmarkOutlineView.xib */,
+			);
+			path = OutlineView;
+			sourceTree = "<group>";
+		};
+		AD7D5CC92B957258006562CD /* View */ = {
+			isa = PBXGroup;
+			children = (
+				AD7D5CCA2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift */,
+				AD7D5CD62B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib */,
+				AD7D5CCE2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift */,
+				AD7D5CDA2B957687006562CD /* KMBookmarkOutlinePageCellView.xib */,
+				AD7D5CD22B957442006562CD /* KMBookmarkOutlineFileCellView.swift */,
+				AD7D5CDE2B957693006562CD /* KMBookmarkOutlineFileCellView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		AD85D1852AEF46C9000F4D28 /* NoFileView */ = {
 			isa = PBXGroup;
 			children = (
@@ -13616,6 +13675,7 @@
 				9F221EDA29A9EC0900978A59 /* KMFillSignTextPanel.xib in Resources */,
 				BBB2ACE02B5943F800098854 /* Quick Start Guide.pdf in Resources */,
 				9F1FE4E729406E4700E952CA /* COPYING in Resources */,
+				AD7D5CDF2B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
 				BB897237294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.xib in Resources */,
 				BB2EDF4F296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
 				89E4E7412964160F002DBA6F /* KMAnnotationLinkViewController.xib in Resources */,
@@ -13700,6 +13760,7 @@
 				ADDF83502B391A5C00A81A4E /* CDSignatureCertificateCustomViewController.xib in Resources */,
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
+				AD7D5CDB2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */,
 				ADE86A842B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				BB8810732B4F785200AFA63E /* KMUnlockAlertViewController.xib in Resources */,
 				9FDD0F9C2952FF4D000C4DAD /* comp-light.json in Resources */,
@@ -13708,6 +13769,7 @@
 				9F221ED229A85D3700978A59 /* KMDesignBase.xib in Resources */,
 				ADE86ABA2B0343F100414DFA /* KMWatermarkView.xib in Resources */,
 				9F853A052947137500DF644E /* newtab_h.pdf in Resources */,
+				AD7D5CC62B9566E9006562CD /* KMBookmarkOutlineView.xib in Resources */,
 				AD3AAD8B2B10349600DE5FE7 /* KMHeaderFooterWindowController.xib in Resources */,
 				9F8539FC2947137500DF644E /* throbber_waiting.png in Resources */,
 				ADBC2CFE299CA6C7006280C8 /* KMPrintDuplexPrintingSetView.xib in Resources */,
@@ -13842,6 +13904,7 @@
 				9F8539EB2947131F00DF644E /* KMChromiumTabView.xib in Resources */,
 				BB8F454A295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
 				9F853A082947137500DF644E /* newtab.pdf in Resources */,
+				AD7D5CD72B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */,
 				BB0FE04F2B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
 				8997011128F40842009AF911 /* KMOutlineViewController.xib in Resources */,
 				BBAC26AC2AFE31F400563A08 /* KMBatchOperateAddPasswordViewController.xib in Resources */,
@@ -14080,6 +14143,7 @@
 				BB2F9AA72AFC8D5A00F9DD93 /* KMProfileInfoWindowController.xib in Resources */,
 				ADD1B6CC2942E85300C3FFF7 /* KMPrintBottomView.xib in Resources */,
 				9F0CB4732967E63100007028 /* KMPropertiesPanelNameSubVC.xib in Resources */,
+				AD7D5CDC2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */,
 				9FB220DB2B0F4ED400A5B208 /* KMAnnotationSelectLinkViewController.xib in Resources */,
 				ADDF83902B391A5D00A81A4E /* DSignDetailTypeACellView.xib in Resources */,
 				9FF94F1529A7476000B1EF69 /* KMDesignPropertySelector.xib in Resources */,
@@ -14266,6 +14330,7 @@
 				AD0FA4FF29A8DD8700EDEB50 /* KMRegisterSuccessView.xib in Resources */,
 				BBFBE74D28DD7DE8008B2335 /* Assets.xcassets in Resources */,
 				8997010A28F4082C009AF911 /* KMFromViewController.xib in Resources */,
+				AD7D5CE02B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
 				894A00F62976314C0070ED83 /* KMPDFViewPanelSetViewController.xib in Resources */,
 				BBD9223B2B50D6D600DB9585 /* rate_pic_pro.pdf in Resources */,
 				9F02016E2A1B088700C9B673 /* KMAIOpenPDFFilesVC.xib in Resources */,
@@ -14418,6 +14483,7 @@
 				ADDF83692B391A5C00A81A4E /* DSignatureSaveFolderViewController.xib in Resources */,
 				AD3AAD7A2B0DCEB600DE5FE7 /* KMCompareSaveView.xib in Resources */,
 				BB8810802B4F7A1F00AFA63E /* KMActivityALertViewController.xib in Resources */,
+				AD7D5CD82B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */,
 				ADDF83542B391A5C00A81A4E /* DSignatureFileListViewController.xib in Resources */,
 				BBC348372955A118008D2CD1 /* KMCreateBackgroundController.xib in Resources */,
 				ADC31FAD2A0E0C3900ED44A2 /* KMEditPropertyAlignmentView.xib in Resources */,
@@ -14447,6 +14513,7 @@
 				9F02019A2A1F352100C9B673 /* KMAITranslationConfirmWindowController.xib in Resources */,
 				ADE86A8E2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */,
 				BBFE6E832930EBD400142C01 /* KMCompressWindowController.xib in Resources */,
+				AD7D5CC72B9566E9006562CD /* KMBookmarkOutlineView.xib in Resources */,
 				9F0CB46B2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
 				ADAFDA522AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */,
 				AD68783929A60FC0005B5210 /* KMLoginView.xib in Resources */,
@@ -14648,6 +14715,7 @@
 				BB7648EA29ECECBF00931039 /* Color.xcassets in Resources */,
 				BBB2ACE22B5943F800098854 /* Quick Start Guide.pdf in Resources */,
 				ADD1B6F22946C06C00C3FFF7 /* KMPrintChoosePageSizeSizeView.xib in Resources */,
+				AD7D5CE12B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
 				AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				ADE787B02AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
@@ -14732,6 +14800,7 @@
 				ADDF83522B391A5C00A81A4E /* CDSignatureCertificateCustomViewController.xib in Resources */,
 				9F0CB5472986953A00007028 /* KMURLToPDFWindowController.xib in Resources */,
 				BB4F7E7F2B0C45DE0077EC8C /* KMNoteOutlineFilterViewController.xib in Resources */,
+				AD7D5CDD2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */,
 				BB8810752B4F785200AFA63E /* KMUnlockAlertViewController.xib in Resources */,
 				AD0FA50829A8E61B00EDEB50 /* KMLightMemberAlertView.xib in Resources */,
 				9F8810A22B5762BD00F69815 /* KMAnnotationButtonOptionsViewController.xib in Resources */,
@@ -14740,6 +14809,7 @@
 				8997011B28F40898009AF911 /* KMThumbnailViewController.xib in Resources */,
 				BB89721D294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.xib in Resources */,
 				BB0B2CDA2B04AE560088FFD8 /* LeftSideView.xib in Resources */,
+				AD7D5CC82B9566E9006562CD /* KMBookmarkOutlineView.xib in Resources */,
 				BB9EA1552B1ECD0F00EAFD9B /* KMBatchOperateImageToPDFViewController.xib in Resources */,
 				9FA693AD2987C0590055488A /* KMStepperView.xib in Resources */,
 				BB89721D294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.xib in Resources */,
@@ -14874,6 +14944,7 @@
 				9F8539D029430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
 				ADE8BC2C29F7CDB000570F89 /* KMPageNumberDisplayView.xib in Resources */,
 				BBFD2B182AEFAC9C0016C456 /* KMBatchOperateBaseViewController.xib in Resources */,
+				AD7D5CD92B95767C006562CD /* KMBookmarkOutlineTitleCellView.xib in Resources */,
 				BB0FE0512B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
 				BBFE6E622930809A00142C01 /* KMMergeCollectionPageViewItem.xib in Resources */,
 				ADE86AE22B0AF4B600414DFA /* KMCompareContentSettingWindowController.xib in Resources */,
@@ -15289,6 +15360,7 @@
 				BBC745EA295F067B0072C2ED /* KMCropSettingWindowController.swift in Sources */,
 				9FCFEC6C2AC3D96800EAD2CB /* CPDFListViewAnimatedBorderlessWindow.swift in Sources */,
 				89752DF62938A236003FF08E /* PublicKey.swift in Sources */,
+				AD7D5CCB2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */,
 				BBC3480C29558DC1008D2CD1 /* KMBackgroundController.swift in Sources */,
 				9FBC48B8299B44C600CA39D7 /* KMSecondaryViewController.m in Sources */,
 				BBC348142955920B008D2CD1 /* KMBackgroundPropertyController.swift in Sources */,
@@ -15305,7 +15377,6 @@
 				BB3AAB992987BEA900992A5A /* KMWatermarkPDFView_OC.m in Sources */,
 				9FB220F12B1863C800A5B208 /* KMAnnotationFromSignature.swift in Sources */,
 				BB7FF5072A60E84400901C2D /* KMEnumExtensions.swift in Sources */,
-				AD7D5CBC2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift in Sources */,
 				9FB221072B19BD8B00A5B208 /* KMGeneralAnnotationViewController.swift in Sources */,
 				F3F0B27329B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
 				BB0FE0462B734DD1001E0F88 /* AIInfoConfig.swift in Sources */,
@@ -15359,6 +15430,7 @@
 				9FF816DD2AFA5B8E0087EFC5 /* KMAnnotationTableViewController.swift in Sources */,
 				AD9527EE295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */,
 				F37322F6292DF9410013862C /* CSelfSignAnnotation.m in Sources */,
+				AD7D5CC22B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */,
 				BB49ED1D293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift in Sources */,
 				BB146FD2299DC0D100784A6A /* GTLRDateTime.m in Sources */,
 				9FF816EA2AFA5D760087EFC5 /* KMTableCellData.swift in Sources */,
@@ -15369,6 +15441,7 @@
 				BBB5C80729F4CEE40054F261 /* KMLinkAnnotationPropertyEmptyController.swift in Sources */,
 				8997010628F4082C009AF911 /* KMFromViewController.swift in Sources */,
 				BBD1F78B296FACA300343885 /* KMPageEditExtractSettingView.swift in Sources */,
+				AD7D5CD32B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */,
 				BB8810762B4F785200AFA63E /* KMUnlockAlertViewController.m in Sources */,
 				ADBC375029CAE27900D93208 /* KMComparativeOutlineRowView.swift in Sources */,
 				BBC8A7602B05C87600FA9377 /* KMBotaTableView.swift in Sources */,
@@ -15833,6 +15906,7 @@
 				9F080B14298CFDB300FC27DA /* KMTextImageButtonVC.swift in Sources */,
 				BBB14A5F297929BD00936EDB /* KMRedactPageRangeWindowController.swift in Sources */,
 				ADA08A8A29F21A53009B2A7B /* KMPDFViewAnnotationOnceModeStore.swift in Sources */,
+				AD7D5CCF2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */,
 				BBBE209B2B21E5F100509C4E /* KMAlertTool.swift in Sources */,
 				9FF0D05C2B6A4C210018A732 /* KMPDFAnnotationChoiceWidgetSub.swift in Sources */,
 				BB78EAAA2B561F9700121691 /* KMFullScreenWindow.swift in Sources */,
@@ -16306,6 +16380,7 @@
 				BB14702A299DC0D100784A6A /* OIDAuthorizationService.m in Sources */,
 				BBFA1CD72B60A0670053AD4A /* KMScreenShotMaskView.swift in Sources */,
 				ADDF83B12B391A5D00A81A4E /* KMDSignatureManager.m in Sources */,
+				AD7D5CD02B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */,
 				9FF94F1229A7476000B1EF69 /* KMDesignPropertySelector.swift in Sources */,
 				ADBC2D0D299CAA65006280C8 /* KMBaseXibView.swift in Sources */,
 				BB003022298CEBED002DD1A0 /* KMPreferenceStepper.swift in Sources */,
@@ -16797,6 +16872,7 @@
 				AD1CA4222A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */,
 				BB3A81B62AC2C0F4006FC66C /* NSObject+KMExtension.swift in Sources */,
 				BBC3481D295593F0008D2CD1 /* KMBackgroundListController.swift in Sources */,
+				AD7D5CC32B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */,
 				BBFA1CCE2B609E890053AD4A /* KMScreenShotMaskWindowController.swift in Sources */,
 				9F5664882988B16F00020985 /* KMTextfieldVC.swift in Sources */,
 				89D2D2FC294C806000BFF5FE /* KMPDFThumbnailItem.swift in Sources */,
@@ -16933,7 +17009,6 @@
 				BB0FE0442B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				BBC8DC712B57854800270C98 /* KMSecondaryPDFView.swift in Sources */,
 				9F0CB5162986566D00007028 /* KMDesignToken+BorderRadiusTopLeft.swift in Sources */,
-				AD7D5CBD2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift in Sources */,
 				AD867F8729D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */,
 				ADAFDA292AE8DE1B00F084BC /* KMAdvertisementModelTransition.swift in Sources */,
 				BBD8EE942B8EC86A00EB05FE /* AutoSaveFileItem.m in Sources */,
@@ -17030,6 +17105,7 @@
 				BB1969CE2B2833DA00922736 /* KMProgressWindowController.swift in Sources */,
 				BBC3483C2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.swift in Sources */,
 				ADDF832A2B391A5C00A81A4E /* CPDFSelection+PDFListView.m in Sources */,
+				AD7D5CCC2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */,
 				BB570AE02B513A66005E7E4A /* KMLeftSideViewController+Snapshot.swift in Sources */,
 				BB2F9AB02AFCAE1F00F9DD93 /* KMProfileTitleCellView.swift in Sources */,
 				AD88109329A7612000178CA1 /* KMRegisterModel.swift in Sources */,
@@ -17121,6 +17197,7 @@
 				9FDD0FB8295D5230000C4DAD /* KMToolbarController.swift in Sources */,
 				BB162E98295062CD0088E9D1 /* KMPageRangeTools.swift in Sources */,
 				AD8810B329A846B100178CA1 /* KMVerficationCodeWindowController.swift in Sources */,
+				AD7D5CD42B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */,
 				ADE86AF82B0AF59A00414DFA /* KMCompareContentSettingView.swift in Sources */,
 				BBFA1CDB2B60DBF90053AD4A /* KMScreenShotMaskViewController.swift in Sources */,
 				BB981E532AD4F638001988CA /* KMCoverButton.swift in Sources */,
@@ -17641,6 +17718,7 @@
 				BB8810932B4F7C4100AFA63E /* KMVerificationExpiredViewController.m in Sources */,
 				AD3AAD7F2B0DFFB100DE5FE7 /* KMAngleIndicateView.swift in Sources */,
 				BBB9B324299A5D6D004F3235 /* KMServicesCloudFile.m in Sources */,
+				AD7D5CD52B957442006562CD /* KMBookmarkOutlineFileCellView.swift in Sources */,
 				AD0257412A8601CD00EAD5D5 /* KMAppleLoginManager.swift in Sources */,
 				BB003037298D356E002DD1A0 /* KMPreferenceMarkupColorView.swift in Sources */,
 				BB1969CF2B2833DA00922736 /* KMProgressWindowController.swift in Sources */,
@@ -17653,6 +17731,7 @@
 				9F1FE50729406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				AD3AAD912B1034B400DE5FE7 /* KMHeaderFooterView.swift in Sources */,
 				BB0FE04E2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */,
+				AD7D5CC42B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */,
 				ADE86A942B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */,
 				BB65A0562AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB146FEC299DC0D100784A6A /* GTLRDuration.m in Sources */,
@@ -17812,7 +17891,6 @@
 				AD3AAD5E2B0DA3D400DE5FE7 /* KMCompareTextViewItem.swift in Sources */,
 				BBB9B30F299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */,
 				BB14700D299DC0D100784A6A /* OIDAuthorizationRequest.m in Sources */,
-				AD7D5CBE2B917BD8006562CD /* KMBookmarkOutlineTitleCell.swift in Sources */,
 				9F1FE4B329406E4700E952CA /* CTTabWindowController.m in Sources */,
 				ADE86AC22B034C7100414DFA /* KMBackgroundWindowController.swift in Sources */,
 				BBFE6E812930EBD400142C01 /* KMCompressWindowController.swift in Sources */,
@@ -17861,6 +17939,7 @@
 				AD199DE92B230A9300D56FEE /* KMPrintMultipageView.swift in Sources */,
 				BB8F4541295A98960037EA22 /* KMHeaderFooterPropertyController.swift in Sources */,
 				BBFE6E6F2930D9C600142C01 /* KMMergeSettingWindowController.swift in Sources */,
+				AD7D5CCD2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */,
 				BBA5B64A2A823E0200748A83 /* KMPDFEditViewController_dmg.swift in Sources */,
 				ADAFD9F52AE68A7400F084BC /* KMCreatPDFView.swift in Sources */,
 				BB74DA792AC41182006EDFE7 /* NSFont+KMExtension.swift in Sources */,
@@ -17927,6 +18006,7 @@
 				ADE86AB82B0343E600414DFA /* KMWatermarkView.swift in Sources */,
 				BB897277294DC04F0045787C /* KMWatermartAdjectivePageRangeView.swift in Sources */,
 				BB3A66A02B0752A800575343 /* KMTocOutlineView.swift in Sources */,
+				AD7D5CD12B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */,
 				BBEC00D3295C33D600A26C98 /* KMCreateBatesController.swift in Sources */,
 				BB6719FB2AD2CC05003D44D5 /* CPDFSignatureWidgetAnnotation+PDFListView.swift in Sources */,
 				BB2F9AAD2AFCADA900F9DD93 /* KMProfileCellView.swift in Sources */,