Преглед на файлове

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

tangchao преди 1 година
родител
ревизия
19f2bb6503
променени са 22 файла, в които са добавени 548 реда и са изтрити 117 реда
  1. 2 2
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/Contents.json
  2. 87 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/KMImageNameElseVIP2 1.pdf
  3. 87 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/KMImageNameElseVIP2.pdf
  4. BIN
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/ic_else_vip_2.pdf
  5. BIN
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/light_ic_else_vip_2.pdf
  6. 9 1
      PDF Office/PDF Master/Class/Batch/View/KMConvertCollectionViewHeader.swift
  7. 17 21
      PDF Office/PDF Master/Class/Batch/View/KMConvertCollectionViewHeader.xib
  8. 7 7
      PDF Office/PDF Master/Class/Batch/WindowController/KMBatchOperateLeftViewController.xib
  9. 41 26
      PDF Office/PDF Master/Class/Batch/WindowController/VC/KMBatchOperateConvertViewController.swift
  10. 2 2
      PDF Office/PDF Master/Class/Batch/WindowController/VC/KMBatchOperateConvertViewController.xib
  11. 1 1
      PDF Office/PDF Master/Class/KMFileManager/KMFile/KMFile.swift
  12. 18 11
      PDF Office/PDF Master/Class/PDFTools/Convert/NewController/KMConvertWindowController.swift
  13. 14 9
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.swift
  14. 11 4
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/Model/KMBookmark.swift
  15. 51 29
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/KMBookmarkOutlineView.swift
  16. 56 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineRowView.swift
  17. 37 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineRowView.xib
  18. 50 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineSeparatorCellView.swift
  19. 22 0
      PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineSeparatorCellView.xib
  20. 3 3
      PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPDFEditToolbar.swift
  21. 1 1
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift
  22. 32 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

+ 2 - 2
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/Contents.json

@@ -1,7 +1,7 @@
 {
   "images" : [
     {
-      "filename" : "light_ic_else_vip_2.pdf",
+      "filename" : "KMImageNameElseVIP2.pdf",
       "idiom" : "mac"
     },
     {
@@ -11,7 +11,7 @@
           "value" : "dark"
         }
       ],
-      "filename" : "ic_else_vip_2.pdf",
+      "filename" : "KMImageNameElseVIP2 1.pdf",
       "idiom" : "mac"
     }
   ],

+ 87 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/KMImageNameElseVIP2 1.pdf

@@ -0,0 +1,87 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 1.000000 1.000000 scn
+2.000000 10.000000 m
+7.000000 10.000000 l
+7.000000 7.000000 l
+9.000000 7.000000 l
+9.000000 0.000000 l
+0.000000 0.000000 l
+0.000000 7.000000 l
+2.000000 7.000000 l
+2.000000 10.000000 l
+h
+5.750000 8.750000 m
+5.750000 7.000000 l
+3.250000 7.000000 l
+3.250000 8.750000 l
+5.750000 8.750000 l
+h
+5.000000 2.500000 m
+5.000000 4.500000 l
+4.000000 4.500000 l
+4.000000 2.500000 l
+5.000000 2.500000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  515
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 9.000000 10.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000605 00000 n
+0000000627 00000 n
+0000000799 00000 n
+0000000873 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+932
+%%EOF

+ 87 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/KMImageNameElseVIP2.pdf

@@ -0,0 +1,87 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 1.000000 1.000000 scn
+2.000000 10.000000 m
+7.000000 10.000000 l
+7.000000 7.000000 l
+9.000000 7.000000 l
+9.000000 0.000000 l
+0.000000 0.000000 l
+0.000000 7.000000 l
+2.000000 7.000000 l
+2.000000 10.000000 l
+h
+5.750000 8.750000 m
+5.750000 7.000000 l
+3.250000 7.000000 l
+3.250000 8.750000 l
+5.750000 8.750000 l
+h
+5.000000 2.500000 m
+5.000000 4.500000 l
+4.000000 4.500000 l
+4.000000 2.500000 l
+5.000000 2.500000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  515
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 9.000000 10.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000605 00000 n
+0000000627 00000 n
+0000000799 00000 n
+0000000873 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+932
+%%EOF

BIN
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/ic_else_vip_2.pdf


BIN
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/UXNewImage/ic_Vip/KMImageNameElseVIP2.imageset/light_ic_else_vip_2.pdf


+ 9 - 1
PDF Office/PDF Master/Class/Batch/View/KMConvertCollectionViewHeader.swift

@@ -11,6 +11,8 @@ typealias convertCollectionViewHeaderClickedCallBack = () -> ()
 
 class KMConvertCollectionViewHeader: KMBaseXibView{
     
+    @IBOutlet var layerColorView: NSView!
+    
     @IBOutlet var indicateLabel: NSTextField!
     
     @IBOutlet var imageView: NSImageView!
@@ -39,6 +41,12 @@ class KMConvertCollectionViewHeader: KMBaseXibView{
 //                    containerView.isHidden = true
 //                }
 //        购买状态变化通知
+        self.layerColorView.wantsLayer = true
+        self.layerColorView.layer?.masksToBounds = true
+        self.layerColorView.layer?.cornerRadius = 12
+        self.layerColorView.layer?.backgroundColor = NSColor(red: 1.0, green: 94/255.0, blue: 44/255.0, alpha: 1.0).cgColor
+        
+        
         NotificationCenter.default.addObserver(self, selector: #selector(IAPProductRestoreFinishedNotification(notification:)), name: NSNotification.Name(rawValue: "KMIAPProductPurchasedNotification"), object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(IAPProductRestoreFinishedNotification(notification:)), name: NSNotification.Name(rawValue: "KMIAPProductRestoreFinishedNotification"), object: nil)
     }
@@ -48,7 +56,7 @@ class KMConvertCollectionViewHeader: KMBaseXibView{
         indicateLabel.textColor = KMAppearance.Layout.h0Color()
         indicateLabel.stringValue = NSLocalizedString("Convert", comment: "")
         infoLabel.font = NSFont.boldSystemFont(ofSize: 11)
-        infoLabel.textColor = KMAppearance.Interactive.m0Color()
+        infoLabel.textColor = NSColor.white
         infoLabel.stringValue = NSLocalizedString("Upgrade to Pro", comment: "")
         infoLabel.toolTip = NSLocalizedString("Upgrade to Pro", comment: "")
     }

+ 17 - 21
PDF Office/PDF Master/Class/Batch/View/KMConvertCollectionViewHeader.xib

@@ -12,6 +12,7 @@
                 <outlet property="imageView" destination="JZM-NO-k0s" id="hEv-AK-w8s"/>
                 <outlet property="indicateLabel" destination="adF-Xf-x0M" id="KPt-Mj-Snn"/>
                 <outlet property="infoLabel" destination="Sft-Vr-raz" id="goo-JB-Rex"/>
+                <outlet property="layerColorView" destination="kE0-nK-XOe" id="upv-Fd-mWo"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@@ -20,7 +21,7 @@
             <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="adF-Xf-x0M">
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="adF-Xf-x0M">
                     <rect key="frame" x="8" y="241" width="37" height="16"/>
                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="ovW-WC-9XR">
                         <font key="font" usesAppearanceFont="YES"/>
@@ -29,25 +30,21 @@
                     </textFieldCell>
                 </textField>
                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="65M-xr-NTJ">
-                    <rect key="frame" x="53" y="237" width="118" height="24"/>
+                    <rect key="frame" x="53" y="237" width="77" height="24"/>
                     <subviews>
-                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="0aS-gO-4wt">
-                            <rect key="frame" x="0.0" y="0.0" width="118" height="24"/>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="kE0-nK-XOe">
+                            <rect key="frame" x="0.0" y="0.0" width="77" height="24"/>
                             <constraints>
-                                <constraint firstAttribute="height" constant="24" id="Bhq-1K-h7Y"/>
+                                <constraint firstAttribute="height" constant="24" id="reR-Nn-XQz"/>
                             </constraints>
-                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="KMImageNameElseVIPBackgroud" id="cXq-Dl-O9N"/>
-                        </imageView>
+                        </customView>
                         <imageView horizontalHuggingPriority="252" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="JZM-NO-k0s">
-                            <rect key="frame" x="12" y="6" width="12" height="13"/>
+                            <rect key="frame" x="12" y="7" width="9" height="10"/>
                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameElseVIP2" id="E3c-ED-XE8"/>
                         </imageView>
-                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Sft-Vr-raz">
-                            <rect key="frame" x="26" y="4" width="82" height="16"/>
-                            <constraints>
-                                <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="eDk-mu-WPU"/>
-                            </constraints>
-                            <textFieldCell key="cell" lineBreakMode="truncatingTail" title="Label" id="SXE-93-vrI">
+                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Sft-Vr-raz">
+                            <rect key="frame" x="23" y="4" width="41" height="16"/>
+                            <textFieldCell key="cell" lineBreakMode="truncatingTail" alignment="center" title="Label" id="SXE-93-vrI">
                                 <font key="font" metaFont="system"/>
                                 <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                 <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -55,15 +52,15 @@
                         </textField>
                     </subviews>
                     <constraints>
-                        <constraint firstItem="0aS-gO-4wt" firstAttribute="leading" secondItem="65M-xr-NTJ" secondAttribute="leading" id="1OU-MT-YXj"/>
-                        <constraint firstItem="0aS-gO-4wt" firstAttribute="top" secondItem="65M-xr-NTJ" secondAttribute="top" id="8bG-tC-aUJ"/>
+                        <constraint firstItem="kE0-nK-XOe" firstAttribute="top" secondItem="65M-xr-NTJ" secondAttribute="top" id="7OJ-cj-vi1"/>
+                        <constraint firstItem="kE0-nK-XOe" firstAttribute="leading" secondItem="65M-xr-NTJ" secondAttribute="leading" id="BsW-k2-MlS"/>
                         <constraint firstAttribute="height" constant="24" id="DgP-kl-kaC"/>
+                        <constraint firstItem="Sft-Vr-raz" firstAttribute="centerX" secondItem="65M-xr-NTJ" secondAttribute="centerX" constant="5" id="NZ2-Za-Uj7"/>
                         <constraint firstItem="Sft-Vr-raz" firstAttribute="leading" secondItem="JZM-NO-k0s" secondAttribute="trailing" constant="4" id="OfJ-gA-7hU"/>
-                        <constraint firstItem="JZM-NO-k0s" firstAttribute="leading" secondItem="65M-xr-NTJ" secondAttribute="leading" constant="12" id="Zi0-5T-Xvl"/>
                         <constraint firstItem="JZM-NO-k0s" firstAttribute="centerY" secondItem="65M-xr-NTJ" secondAttribute="centerY" id="bVw-DB-Qaj"/>
                         <constraint firstItem="Sft-Vr-raz" firstAttribute="centerY" secondItem="65M-xr-NTJ" secondAttribute="centerY" id="d0D-sM-aEA"/>
-                        <constraint firstAttribute="trailing" secondItem="Sft-Vr-raz" secondAttribute="trailing" constant="12" id="dYb-NQ-e4g"/>
-                        <constraint firstAttribute="trailing" secondItem="0aS-gO-4wt" secondAttribute="trailing" id="nNR-0h-yMJ"/>
+                        <constraint firstItem="JZM-NO-k0s" firstAttribute="leading" secondItem="65M-xr-NTJ" secondAttribute="leading" constant="12" id="ewS-dT-5wS"/>
+                        <constraint firstAttribute="trailing" secondItem="kE0-nK-XOe" secondAttribute="trailing" id="mdr-XH-kNT"/>
                     </constraints>
                 </customView>
             </subviews>
@@ -77,7 +74,6 @@
         </customView>
     </objects>
     <resources>
-        <image name="KMImageNameElseVIP2" width="12" height="13"/>
-        <image name="KMImageNameElseVIPBackgroud" width="118" height="24"/>
+        <image name="KMImageNameElseVIP2" width="9" height="10"/>
     </resources>
 </document>

+ 7 - 7
PDF Office/PDF Master/Class/Batch/WindowController/KMBatchOperateLeftViewController.xib

@@ -6,7 +6,7 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchOperateLeftViewController" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchOperateLeftViewController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="DPIColumn" destination="AKG-QZ-eeC" id="Glj-ry-TZJ"/>
                 <outlet property="blankView" destination="G6v-if-4fr" id="0kN-km-HnU"/>
@@ -34,7 +34,7 @@
                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="yD5-qe-EWK">
                     <rect key="frame" x="0.0" y="419" width="673" height="40"/>
                     <subviews>
-                        <button imageHugsTitle="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9ff-Qn-trv" customClass="KMLongerButton" customModule="PDF_Master" customModuleProvider="target">
+                        <button imageHugsTitle="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9ff-Qn-trv" customClass="KMLongerButton" customModule="PDF_Reader_Pro" customModuleProvider="target">
                             <rect key="frame" x="16" y="12" width="81" height="16"/>
                             <buttonCell key="cell" type="square" title="Add File..." bezelStyle="shadowlessSquare" image="KMImageNameUXIconBtnAddHov" imagePosition="left" alignment="center" lineBreakMode="truncatingTail" inset="2" id="GI3-CE-S91" customClass="KMButtomCell">
                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -120,7 +120,7 @@
                                             <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
                                         </textFieldCell>
                                         <prototypeCellViews>
-                                            <tableCellView id="nlT-SK-XE6" customClass="KMBatchTableCellView" customModule="PDF_Master" customModuleProvider="target">
+                                            <tableCellView id="nlT-SK-XE6" customClass="KMBatchTableCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                                                 <rect key="frame" x="184" y="1" width="140" height="17"/>
                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                             </tableCellView>
@@ -185,7 +185,7 @@
                                         </textFieldCell>
                                         <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
                                         <prototypeCellViews>
-                                            <tableCellView id="tdZ-lu-oAc" customClass="KMBatchTableCellView" customModule="PDF_Master" customModuleProvider="target">
+                                            <tableCellView id="tdZ-lu-oAc" customClass="KMBatchTableCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                                                 <rect key="frame" x="491" y="1" width="140" height="17"/>
                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                             </tableCellView>
@@ -203,7 +203,7 @@
                                         </textFieldCell>
                                         <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
                                         <prototypeCellViews>
-                                            <tableCellView id="nvT-ce-HBH" customClass="KMBatchTableCellView" customModule="PDF_Master" customModuleProvider="target">
+                                            <tableCellView id="nvT-ce-HBH" customClass="KMBatchTableCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                                                 <rect key="frame" x="634" y="1" width="104" height="17"/>
                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                             </tableCellView>
@@ -230,12 +230,12 @@
                         <rect key="frame" x="224" y="17" width="15" height="102"/>
                         <autoresizingMask key="autoresizingMask"/>
                     </scroller>
-                    <tableHeaderView key="headerView" wantsLayer="YES" id="Mlr-rw-6rm" customClass="KMTableHeaderView" customModule="PDF_Master" customModuleProvider="target">
+                    <tableHeaderView key="headerView" wantsLayer="YES" id="Mlr-rw-6rm" customClass="KMTableHeaderView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                         <rect key="frame" x="0.0" y="0.0" width="740" height="25"/>
                         <autoresizingMask key="autoresizingMask"/>
                     </tableHeaderView>
                 </scrollView>
-                <customView translatesAutoresizingMaskIntoConstraints="NO" id="G6v-if-4fr" customClass="KMBlankView" customModule="PDF_Master" customModuleProvider="target">
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="G6v-if-4fr" customClass="KMBlankView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                     <rect key="frame" x="0.0" y="0.0" width="673" height="419"/>
                     <subviews>
                         <customView translatesAutoresizingMaskIntoConstraints="NO" id="9GJ-Lf-bRA">

+ 41 - 26
PDF Office/PDF Master/Class/Batch/WindowController/VC/KMBatchOperateConvertViewController.swift

@@ -159,41 +159,56 @@ class KMBatchOperateConvertViewController: KMBatchOperateBaseViewController,NSCo
         self.tableMenu.isHidden = true
         self.allContentMenu.isHidden = true
 #if VERSION_FREE
-        if .WordStandard == self.convertType {
-            moreLabelString = NSLocalizedString("Export PDF to Word and other Microsoft Office formats", comment: "")
-        } else if .WordAdvance == self.convertType ||
-            .Excel == self.convertType ||
-            .PowerPoint == self.convertType ||
-            .CSV == self.convertType ||
-            .RTF == self.convertType ||
-            .GIF == self.convertType ||
-            .TIFF == self.convertType ||
-            .JPEG2000 == self.convertType ||
-            .BMP == self.convertType ||
-            .TGA == self.convertType {
-            moreLabelString = NSLocalizedString("The first 10 pages for free. More precise one.", comment: "")
+        if !IAPProductsManager.default().isAvailableAllFunction() {
+            moreLabelString = String(format: "%@ %@", KMLocalizedString("The first 10 pages for free"), KMLocalizedString("Unlimited Convert"))
+        }else {
+            if !IAPProductsManager.default().isAvailableAdvancedPDFToOffice() {
+                if .WordAdvance == self.convertType ||
+                    .WordStandard == self.convertType ||
+                    .Excel == self.convertType ||
+                    .PowerPoint == self.convertType ||
+                    .CSV == self.convertType ||
+                    .RTF == self.convertType ||
+                    .GIF == self.convertType ||
+                    .TIFF == self.convertType ||
+                    .JPEG2000 == self.convertType ||
+                    .BMP == self.convertType ||
+                    .TGA == self.convertType {
+                    moreLabelString = String(format: "%@ %@", KMLocalizedString("The first 10 pages for free"), KMLocalizedString("Unlimited Convert"))
+                }
+            }
         }
 #else
         // 付费版
-        if .WordStandard == self.convertType {
-            moreLabelString = NSLocalizedString("Export PDF to Word and other Microsoft Office formats", comment: "")
-        } else if .WordAdvance == self.convertType ||
-            .Excel == self.convertType ||
-            .PowerPoint == self.convertType ||
-            .CSV == self.convertType ||
-            .RTF == self.convertType ||
-            .GIF == self.convertType ||
-            .TIFF == self.convertType ||
-            .JPEG2000 == self.convertType ||
-            .BMP == self.convertType ||
-            .TGA == self.convertType {
-            moreLabelString = NSLocalizedString("The first 10 pages for free. More precise one.", comment: "")
+        if !IAPProductsManager.default().isAvailableAdvancedPDFToOffice() {
+            if .WordAdvance == self.convertType ||
+                .WordStandard == self.convertType ||
+                .Excel == self.convertType ||
+                .PowerPoint == self.convertType ||
+                .CSV == self.convertType ||
+                .RTF == self.convertType ||
+                .GIF == self.convertType ||
+                .TIFF == self.convertType ||
+                .JPEG2000 == self.convertType ||
+                .BMP == self.convertType ||
+                .TGA == self.convertType {
+                moreLabelString = String(format: "%@ %@", KMLocalizedString("The first 10 pages for free"), KMLocalizedString("Unlimited Convert"))
+            }
         }
 #endif
         
         var hasInfo = false
         var isExcel = false
         self.detailInfoLabel.stringValue = moreLabelString
+        if let range = moreLabelString.range(of: NSLocalizedString("Unlimited Convert", comment: "")) {
+            let newR: NSRange = moreLabelString.nsRange(from: range)!
+            let attributedStr = NSMutableAttributedString(string: moreLabelString)
+            attributedStr.addAttribute(.foregroundColor, value: NSColor.labelColor, range: NSRange(location: 0, length: newR.location - 1))
+            attributedStr.addAttribute(.foregroundColor, value: NSColor(red: 8/255, green: 124/255, blue: 1, alpha: 1), range: newR)
+            attributedStr.addAttribute(.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: newR)
+            detailInfoLabel.attributedStringValue = attributedStr
+        }
+        
         if moreLabelString.count > 0 {
             self.detailInfoView.isHidden = false
             self.containerViewTopConstraint.constant = 16

+ 2 - 2
PDF Office/PDF Master/Class/Batch/WindowController/VC/KMBatchOperateConvertViewController.xib

@@ -6,7 +6,7 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchOperateConvertViewController" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMBatchOperateConvertViewController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="allContentBtn" destination="6m4-cW-y3p" id="dFa-4U-LNf"/>
                 <outlet property="allContentMenu" destination="oiy-ho-hv0" id="T0R-RY-Z4Z"/>
@@ -93,7 +93,7 @@
                                 <action selector="buttonClicked_Convert:" target="-2" id="Lwc-MC-9me"/>
                             </connections>
                         </button>
-                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="0aW-6P-3ho" customClass="KMDetailInfoView" customModule="PDF_Master" customModuleProvider="target">
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="0aW-6P-3ho" customClass="KMDetailInfoView" customModule="PDF_Reader_Pro" customModuleProvider="target">
                             <rect key="frame" x="16" y="128" width="477" height="16"/>
                             <subviews>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="71Q-Bc-2Mg">

+ 1 - 1
PDF Office/PDF Master/Class/KMFileManager/KMFile/KMFile.swift

@@ -89,7 +89,7 @@ class KMFile: NSObject {
                 self.image = image
                 self.info = info
                 self.pdfDocument = document
-                self.isLocked = document!.isLocked
+                self.isLocked = ((document?.isLocked) != nil)
                 self.showPath = string.description
             }
         }

+ 18 - 11
PDF Office/PDF Master/Class/PDFTools/Convert/NewController/KMConvertWindowController.swift

@@ -384,13 +384,12 @@ let kConvertFileSavePath = (kTempSavePath?.stringByAppendingPathComponent("conve
         excelStyleBox.isHidden = true
 #if VERSION_FREE
         // 座机版
-        if !(IAPProductsManager.default().isAvailableAllFunction()) {
-            moreLabelString = KMLocalizedString("The first 10 pages for free. More precise one.", nil)
+        if !IAPProductsManager.default().isAvailableAllFunction() {
+            moreLabelString = String(format: "%@ %@", KMLocalizedString("The first 10 pages for free"), KMLocalizedString("Unlimited Convert"))
         } else {
-            if !(IAPProductsManager.default().isAvailableAdvancedPDFToOffice()) {
-                if .Word == self.convertType {
-                    moreLabelString = KMLocalizedString("Export PDF to Word and other Microsoft Office formats", nil)
-                } else if self.convertType == .AdvancedWord ||
+            if !IAPProductsManager.default().isAvailableAdvancedPDFToOffice() {
+                if .Word == self.convertType ||
+                    self.convertType == .AdvancedWord ||
                     .Excel == self.convertType ||
                     .PPT == self.convertType ||
                     .CSV == self.convertType ||
@@ -400,7 +399,7 @@ let kConvertFileSavePath = (kTempSavePath?.stringByAppendingPathComponent("conve
                     .JP2 == self.convertType ||
                     .BMP == self.convertType ||
                     .TGA == self.convertType {
-                    moreLabelString = KMLocalizedString("The first 10 pages for free. More precise one.", nil)
+                    moreLabelString = String(format: "%@ %@", KMLocalizedString("The first 10 pages for free"), KMLocalizedString("Unlimited Convert"))
                 }
             }
         }
@@ -408,9 +407,8 @@ let kConvertFileSavePath = (kTempSavePath?.stringByAppendingPathComponent("conve
 #else
         // 付费版
         if !(IAPProductsManager.default().isAvailableAdvancedPDFToOffice()) {
-            if .Word == self.convertType {
-                moreLabelString = KMLocalizedString("Export PDF to Word and other Microsoft Office formats", nil)
-            } else if self.convertType == .AdvancedWord ||
+            if .Word == self.convertType ||
+                self.convertType == .AdvancedWord ||
                 .Excel == self.convertType ||
                 .PPT == self.convertType ||
                 .CSV == self.convertType ||
@@ -420,7 +418,7 @@ let kConvertFileSavePath = (kTempSavePath?.stringByAppendingPathComponent("conve
                 .JP2 == self.convertType ||
                 .BMP == self.convertType ||
                 .TGA == self.convertType {
-                moreLabelString = KMLocalizedString("The first 10 pages for free. More precise one.", nil)
+                moreLabelString = String(format: "%@ %@", KMLocalizedString("The first 10 pages for free"), KMLocalizedString("Unlimited Convert"))
             }
         }
 #endif
@@ -443,6 +441,15 @@ let kConvertFileSavePath = (kTempSavePath?.stringByAppendingPathComponent("conve
             moreConvertBox.isHidden = false
             moreButton.isHidden = false
             moreConvertLabel.stringValue = moreLabelString
+            
+            if let range = moreLabelString.range(of: NSLocalizedString("Unlimited Convert", comment: "")) {
+                let newR: NSRange = moreLabelString.nsRange(from: range)!
+                let attributedStr = NSMutableAttributedString(string: moreLabelString)
+                attributedStr.addAttribute(.foregroundColor, value: NSColor.labelColor, range: NSRange(location: 0, length: newR.location - 1))
+                attributedStr.addAttribute(.foregroundColor, value: NSColor(red: 8/255, green: 124/255, blue: 1, alpha: 1), range: newR)
+                attributedStr.addAttribute(.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: newR)
+                moreConvertLabel.attributedStringValue = attributedStr
+            }
         }
         
         if .Excel == convertType {

+ 14 - 9
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.swift

@@ -50,13 +50,16 @@ class KMBookmarkController: NSWindowController {
         super.windowDidLoad()
         setupToolbar()
         
-        outlineView.delegate = self
-        outlineView.dataSource = self
-        outlineView.registerForDraggedTypes([kPasteboardTypeBookmarkRows, .fileURL, .string])
-        outlineView.doubleAction = #selector(doubleClickBookmark(_:))
+//        outlineView.delegate = self
+//        outlineView.dataSource = self
+//        outlineView.registerForDraggedTypes([kPasteboardTypeBookmarkRows, .fileURL, .string])
+//        bookmarkOutlineView.outlineView.doubleAction = #selector(doubleClickBookmark(_:))
         
         
         bookmarkOutlineView.data = self.bookmarkRoot
+        bookmarkOutlineView.doubleClickAction = { [unowned self] view in
+            self.doubleClickBookmark(nil)
+        }
     }
 
     func updateStatus() {
@@ -177,9 +180,9 @@ class KMBookmarkController: NSWindowController {
         }
     }
 
-    @IBAction func doubleClickBookmark(_ sender: Any) {
-        let row = outlineView.clickedRow
-        if let bm = (row != -1 ? outlineView.item(atRow: row) : nil) as? KMBookmark,
+    @IBAction func doubleClickBookmark(_ sender: Any?) {
+        let row = bookmarkOutlineView.outlineView.clickedRow
+        if let bm = (row != -1 ? bookmarkOutlineView.outlineView.item(atRow: row) : nil) as? KMBookmark,
            [KMBookmarkType.bookmark, .session].contains(bm.bookmarkType) {
             bm.open()
         }
@@ -219,8 +222,10 @@ class KMBookmarkController: NSWindowController {
         getInsertionFolder(&item, childIndex: &idx)
         item?.insert(child: separator, atIndex: idx)
         
-        let row = outlineView.row(forItem: separator)
-        outlineView.selectRowIndexes(IndexSet(integer: row), byExtendingSelection: false)
+        bookmarkOutlineView.outlineView.reloadData()
+        
+//        let row = outlineView.row(forItem: separator)
+//        outlineView.selectRowIndexes(IndexSet(integer: row), byExtendingSelection: false)
     }
 
     @IBAction func addBookmark(_ sender: Any) {

+ 11 - 4
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Model/KMBookmark.swift

@@ -241,13 +241,20 @@ class KMBookmark: NSObject {
         var error: Error?
         if documentSetup != nil {
             document = try? NSDocumentController.shared.openDocument(nil)
-//            document = try? NSDocumentController.shared.openDocument(withSetup: properties)
+            if document == nil {
+                NSApp.presentError(NSError(domain: "File not found", code: -1, userInfo: nil))
+            }
+//            document = [[NSDocumentController sharedDocumentController] openDocumentWithSetup:[self properties] error:&error];
         } else {
             guard let fileURL = fileURL else { return }
             NSDocumentController.shared.openDocument(withContentsOf: fileURL, display: true, completionHandler: { document, result, error in
-//                pageIndex != NSNotFound {
-//                    document.page(at: pageIndex)?.show(in: document.windowForSheet, at: pageIndex + 1)
-//                }
+                if (error != nil) {
+                    NSApp.presentError(error!)
+                } else {
+                    if self.pageIndex > 1 {
+                        (document as! KMMainDocument).mainViewController?.setPageNumber = self.pageIndex + 1
+                    }
+                }
             })
         }
     }

+ 51 - 29
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/KMBookmarkOutlineView.swift

@@ -10,10 +10,14 @@ import Cocoa
 private let kLabelIdentifier = NSUserInterfaceItemIdentifier("Label")
 private let kFileIdentifier  = NSUserInterfaceItemIdentifier("File")
 private let kPageIdentifier  = NSUserInterfaceItemIdentifier("Page")
+private let kSeparatorIdentifier  = NSUserInterfaceItemIdentifier("Separator")
 
+typealias KMBookmarkOutlineViewDoubleClickAction = (_ view: KMBookmarkOutlineView) -> Void
 class KMBookmarkOutlineView: KMBaseXibView {
     @IBOutlet weak var outlineView: NSOutlineView!
     
+    var doubleClickAction: KMBookmarkOutlineViewDoubleClickAction?
+    
     var data: KMRootBookmark? {
         didSet {
             self.reloadData()
@@ -44,7 +48,8 @@ class KMBookmarkOutlineView: KMBaseXibView {
 //MARK: Action
 extension KMBookmarkOutlineView {
     @objc func doubleClickBookmark() {
-        
+        print("doubleClickBookmark")
+        self.doubleClickAction?(self)
     }
 }
 
@@ -76,37 +81,54 @@ extension KMBookmarkOutlineView: NSOutlineViewDelegate {
         let identifier = column.identifier
         
         var cell: NSTableCellView = NSTableCellView()
-        switch identifier {
-        case kLabelIdentifier: do {
-            cell = KMBookmarkOutlineTitleCellView()
-            let cell = cell as! KMBookmarkOutlineTitleCellView
-            cell.titleLabel.stringValue = item.label
-            cell.iconImageView.image = item.icon
-        }
-        case kPageIdentifier: do {
-            cell = KMBookmarkOutlinePageCellView()
-            let cell = cell as! KMBookmarkOutlinePageCellView
-            cell.titleLabel.stringValue = item.pageIndex.description
-        }
-        case kFileIdentifier: do {
-            cell = KMBookmarkOutlineFileCellView()
-            let cell = cell as! KMBookmarkOutlineFileCellView
-            var stringValue = ""
-            if item.bookmarkType == .folder ||
-                item.bookmarkType == .session {
-                let count = item.children.count
-                stringValue = count == 1 ? NSLocalizedString("1 item", comment: "Bookmark folder description") : String.localizedStringWithFormat(NSLocalizedString("%ld items", comment: "Bookmark folder description"), count)
-            } else {
-                stringValue = item.fileURL?.path ?? ""
+        if item.bookmarkType == .separator {
+            cell = KMBookmarkOutlineSeparatorCellView()
+        } else {
+            switch identifier {
+            case kLabelIdentifier: do {
+                cell = KMBookmarkOutlineTitleCellView()
+                let cell = cell as! KMBookmarkOutlineTitleCellView
+                cell.titleLabel.stringValue = item.label
+                cell.iconImageView.image = item.icon
+            }
+            case kPageIdentifier: do {
+                cell = KMBookmarkOutlinePageCellView()
+                let cell = cell as! KMBookmarkOutlinePageCellView
+                cell.titleLabel.stringValue = item.pageIndex.description
+            }
+            case kFileIdentifier: do {
+                cell = KMBookmarkOutlineFileCellView()
+                let cell = cell as! KMBookmarkOutlineFileCellView
+                var stringValue = ""
+                if item.bookmarkType == .folder ||
+                    item.bookmarkType == .session {
+                    let count = item.children.count
+                    stringValue = count == 1 ? NSLocalizedString("1 item", comment: "Bookmark folder description") : String.localizedStringWithFormat(NSLocalizedString("%ld items", comment: "Bookmark folder description"), count)
+                } else {
+                    stringValue = item.fileURL?.path ?? ""
+                }
+                cell.titleLabel.stringValue = stringValue
+                
+            }
+            default:
+                break
             }
-            cell.titleLabel.stringValue = stringValue
-            
-        }
-            
-        default:
-            break
         }
         
         return cell
     }
+    
+    func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
+        // 创建一个自定义的行视图
+        let rowView = KMBookmarkOutlineRowView()
+        guard let item = item as? KMBookmark else { return rowView }
+        // 根据需要设置行视图的背景颜色
+        if  item.bookmarkType == .separator{
+            rowView.hiddenLineView(isHidden: false)
+        } else {
+            rowView.hiddenLineView()
+        }
+        return rowView
+    }
+
 }

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

@@ -0,0 +1,56 @@
+//
+//  KMBookmarkOutlineRowView.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/5.
+//
+
+import Cocoa
+
+class KMBookmarkOutlineRowView: NSTableRowView {
+
+    @IBOutlet var contentView: NSView!
+    @IBOutlet weak var lineView: NSView!
+    
+    // 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() {
+        self.lineView.wantsLayer = true
+        self.lineView.layer?.backgroundColor = NSColor.black.cgColor
+    }
+    
+    func reloadData() {
+
+    }
+    
+    func hiddenLineView(isHidden: Bool = true) {
+        self.lineView.isHidden = isHidden
+    }
+}

+ 37 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineRowView.xib

@@ -0,0 +1,37 @@
+<?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="KMBookmarkOutlineRowView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contentView" destination="c22-O7-iKe" id="tqp-va-S6J"/>
+                <outlet property="lineView" destination="JWX-UY-2t7" id="utR-Cn-Nit"/>
+            </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="94"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="JWX-UY-2t7">
+                    <rect key="frame" x="0.0" y="47" width="480" height="1"/>
+                    <constraints>
+                        <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="1" id="bGf-d1-XM4"/>
+                        <constraint firstAttribute="height" constant="1" id="jpe-2x-Aur"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="JWX-UY-2t7" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="9Zm-Dr-yYy"/>
+                <constraint firstAttribute="trailing" secondItem="JWX-UY-2t7" secondAttribute="trailing" id="AGB-Wn-xVA"/>
+                <constraint firstItem="JWX-UY-2t7" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="diz-Bg-TZx"/>
+            </constraints>
+            <point key="canvasLocation" x="17" y="48"/>
+        </customView>
+    </objects>
+</document>

+ 50 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/View/OutlineView/View/KMBookmarkOutlineSeparatorCellView.swift

@@ -0,0 +1,50 @@
+//
+//  KMBookmarkOutlineSeparatorCellView.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/3/5.
+//
+
+import Cocoa
+
+class KMBookmarkOutlineSeparatorCellView: NSTableCellView {
+
+    @IBOutlet var contentView: NSView!
+    // 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/KMBookmarkOutlineSeparatorCellView.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="KMBookmarkOutlineSeparatorCellView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contentView" destination="c22-O7-iKe" id="URC-ZA-Whg"/>
+            </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="52"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <point key="canvasLocation" x="-23" y="148"/>
+        </customView>
+    </objects>
+</document>

+ 3 - 3
PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPDFEditToolbar.swift

@@ -97,9 +97,9 @@ class KMPDFEditToolbar: NSView {
     var pageRangeValueDidChange: KMValueDidChangeBlock?
     
     lazy var insertItemStrings: [String] = {
-       return [NSLocalizedString("Insert a Blank Page", comment: ""),
-               NSLocalizedString("Insert Custom Page", comment: ""),
-               NSLocalizedString("Insert File", comment: "")]
+       return [NSLocalizedString("Blank Page", comment: ""),
+               NSLocalizedString("Blank Page - Custom...", comment: ""),
+               NSLocalizedString("From PDF", comment: "")]
     }()
     
     private weak var popover: NSPopover?

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

@@ -262,7 +262,7 @@ extension KMMainViewController {
         let stypItem = NSMenuItem(title: NSLocalizedString("Tool Mode", comment: ""), action: nil, target: self)
         let stypeMenu = NSMenu()
         
-        let item1 = stypeMenu.addItem(withTitle: NSLocalizedString("Text", comment: ""), action: #selector(menuItemAnnotationClick_toolModel), target: self, tag: CToolMode.noteToolMode.rawValue)
+        let item1 = stypeMenu.addItem(withTitle: NSLocalizedString("Text", comment: ""), action: #selector(menuItemAnnotationClick_toolModel), target: self, tag: CToolMode.textToolMode.rawValue)
         let item2 = stypeMenu.addItem(withTitle: NSLocalizedString("Scroll", comment: ""), action: #selector(menuItemAnnotationClick_toolModel), target: self, tag: CToolMode.moveToolMode.rawValue)
         let item3 = stypeMenu.addItem(withTitle: NSLocalizedString("Magnify", comment: ""), action: #selector(menuItemAnnotationClick_toolModel), target: self, tag: CToolMode.magnifyToolMode.rawValue)
         let item4 = stypeMenu.addItem(withTitle: NSLocalizedString("Select", comment: ""), action: #selector(menuItemAnnotationClick_toolModel), target: self, tag: CToolMode.selectToolMode.rawValue)

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

@@ -1656,6 +1656,18 @@
 		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 */; };
+		AD7D5CE42B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CE32B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift */; };
+		AD7D5CE52B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CE32B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift */; };
+		AD7D5CE62B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CE32B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift */; };
+		AD7D5CE82B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CE72B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib */; };
+		AD7D5CE92B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CE72B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib */; };
+		AD7D5CEA2B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CE72B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib */; };
+		AD7D5CEC2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CEB2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift */; };
+		AD7D5CED2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CEB2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift */; };
+		AD7D5CEE2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D5CEB2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift */; };
+		AD7D5CF02B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CEF2B96B9E1006562CD /* KMBookmarkOutlineRowView.xib */; };
+		AD7D5CF12B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CEF2B96B9E1006562CD /* KMBookmarkOutlineRowView.xib */; };
+		AD7D5CF22B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD7D5CEF2B96B9E1006562CD /* KMBookmarkOutlineRowView.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 */; };
@@ -5835,6 +5847,10 @@
 		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>"; };
+		AD7D5CE32B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlineSeparatorCellView.swift; sourceTree = "<group>"; };
+		AD7D5CE72B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkOutlineSeparatorCellView.xib; sourceTree = "<group>"; };
+		AD7D5CEB2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkOutlineRowView.swift; sourceTree = "<group>"; };
+		AD7D5CEF2B96B9E1006562CD /* KMBookmarkOutlineRowView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkOutlineRowView.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>"; };
@@ -9143,6 +9159,10 @@
 				AD7D5CDA2B957687006562CD /* KMBookmarkOutlinePageCellView.xib */,
 				AD7D5CD22B957442006562CD /* KMBookmarkOutlineFileCellView.swift */,
 				AD7D5CDE2B957693006562CD /* KMBookmarkOutlineFileCellView.xib */,
+				AD7D5CE32B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift */,
+				AD7D5CE72B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib */,
+				AD7D5CEB2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift */,
+				AD7D5CEF2B96B9E1006562CD /* KMBookmarkOutlineRowView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -13733,6 +13753,7 @@
 				9F0CB4622966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
 				BB5F8A1929BB15AD00365ADB /* pic_mail.pdf in Resources */,
 				9FDD0F962952FF4D000C4DAD /* $metadata.json in Resources */,
+				AD7D5CE82B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */,
 				BB0FE05B2B734DD1001E0F88 /* AIImage.xcassets in Resources */,
 				AD0FA4F529A8582C00EDEB50 /* KMComparativeTableView.xib in Resources */,
 				BB7648E829ECECBF00931039 /* Color.xcassets in Resources */,
@@ -13791,6 +13812,7 @@
 				9F8539F62947137500DF644E /* sadfavicon.png in Resources */,
 				AD055E302B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */,
 				BB1B0AEF2B4FC6E900889528 /* KMFunctionGuideNameItemView.xib in Resources */,
+				AD7D5CF02B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */,
 				ADBC372429CA923E00D93208 /* KMComparative.plist in Resources */,
 				ADAFDA5E2AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				ADE787AE2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
@@ -14185,6 +14207,7 @@
 				BB6347B12AF1F0BB00F5438E /* KMBatchOperateConvertViewController.xib in Resources */,
 				ADFA8F0E2B579957002595A4 /* KMSearchFindView.xib in Resources */,
 				9F0201762A1B488C00C9B673 /* KMAITranslationVC.xib in Resources */,
+				AD7D5CE92B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */,
 				9F72D20C2994BDAF00DCACF1 /* KMNotificationVC.xib in Resources */,
 				9F512CCB2B4640AB00EC0BC3 /* KMPageDisplayCustomThemesCollectionViewItem.xib in Resources */,
 				ADFCEB492B4FBA440001EBAF /* RemoteConfigDefaults.plist in Resources */,
@@ -14437,6 +14460,7 @@
 				ADBC374D29CAD65D00D93208 /* KMComparativeOutlineCell.xib in Resources */,
 				BBC2BCCA295DA8F30036B983 /* KMCropPreviewController.xib in Resources */,
 				AD2BF2332B5620150029F03F /* SF-Pro-Text-Semibold.otf in Resources */,
+				AD7D5CF12B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */,
 				AD3AAD1F2B0B5B4400DE5FE7 /* KMCompareCoveringWindowController.xib in Resources */,
 				BB24D4AB2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				ADFA8F162B60E02B002595A4 /* KMSecureAlertView.xib in Resources */,
@@ -14771,6 +14795,7 @@
 				AD6260702A9D968B006C6413 /* KMEditPDFAssets.xcassets in Resources */,
 				899700E428F3A9F2009AF911 /* KMHomeWindowController.xib in Resources */,
 				BBC348402955A60B008D2CD1 /* KMBackgroundPropertyInfoController.xib in Resources */,
+				AD7D5CEA2B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */,
 				BB0FE05D2B734DD1001E0F88 /* AIImage.xcassets in Resources */,
 				9F0201832A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
 				BB96A0B62AFCD56B00559E24 /* KMToolCompareWindowController.xib in Resources */,
@@ -14829,6 +14854,7 @@
 				BB1B0AF12B4FC6E900889528 /* KMFunctionGuideNameItemView.xib in Resources */,
 				AD055E322B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */,
 				9F853A012947137500DF644E /* throbber.png in Resources */,
+				AD7D5CF22B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */,
 				AD1CA41E2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				ADAFDA602AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				BBA8B7B5293635D80097D183 /* KMPasswordInputWindow.xib in Resources */,
@@ -15611,6 +15637,7 @@
 				BB65A07C2AF8E5A4003A27A0 /* KMLineWell.swift in Sources */,
 				BBD1F793296FE92500343885 /* KMPageEditSplitSettingView.swift in Sources */,
 				ADDF839E2B391A5D00A81A4E /* CDSignatureDrawViewController.swift in Sources */,
+				AD7D5CEC2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */,
 				BB897241294C028A0045787C /* KMWatermarkAdjectiveSegementControl.swift in Sources */,
 				BBF811F12B0763930074874F /* PDFConvertObject.swift in Sources */,
 				BB5BE4ED2B060E2100D51BF2 /* KMLanguageViewController.swift in Sources */,
@@ -15946,6 +15973,7 @@
 				BB49ED15293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
 				ADBC375D29CC61E100D93208 /* KMReadModelView.swift in Sources */,
 				BB0FE0372B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */,
+				AD7D5CE42B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift in Sources */,
 				BB6013902AD3AFF000A76FB2 /* NSPopover+KMExtension.swift in Sources */,
 				BB2EDF79296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				899700E828F3E4D3009AF911 /* MainWindowController.swift in Sources */,
@@ -16761,6 +16789,7 @@
 				BB99ACCB292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
 				BBCE57112A72712200508EFC /* NSWindowController+KMExtension.swift in Sources */,
 				89D9895F28FD21E6003A3E87 /* KMAnnotationCollectionView.swift in Sources */,
+				AD7D5CED2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */,
 				9F0201662A176AF200C9B673 /* KMDottedLineView.swift in Sources */,
 				AD7D5CB42B9070AF006562CD /* KMSyncDot.swift in Sources */,
 				BB897257294C559F0045787C /* KMWatermarkPropertyCreateController.swift in Sources */,
@@ -17055,6 +17084,7 @@
 				BB897252294C3F660045787C /* KMMenuTableView.swift in Sources */,
 				9FCFEC912AD11E5F00EAD2CB /* KMSplitView.swift in Sources */,
 				9F1FE4CD29406E4700E952CA /* CTTabContentsController.m in Sources */,
+				AD7D5CE52B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift in Sources */,
 				ADDF83332B391A5C00A81A4E /* CPDFAnnotation+PDFListView.m in Sources */,
 				8942F7BC29222C7E00389627 /* KMBookCellView.swift in Sources */,
 				9F0201872A1DA28B00C9B673 /* KMAILanguagePopVC.swift in Sources */,
@@ -17504,6 +17534,7 @@
 				9F1F82DC292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
 				ADB5E5142A371131007110A8 /* KMSubscribeWaterMarkWindowController.swift in Sources */,
 				ADE86ACA2B034CB200414DFA /* KMAddBackgroundView.swift in Sources */,
+				AD7D5CEE2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */,
 				BBC8A7732B06408600FA9377 /* KMBotaSearchViewController.swift in Sources */,
 				BB8810662B4F74DD00AFA63E /* KMRepeatTrialAlertController.m in Sources */,
 				9F1FE51329407B4000E952CA /* KMFileSearchView.swift in Sources */,
@@ -18551,6 +18582,7 @@
 				BBB9B31B299A5D6D004F3235 /* KMCloudServer.m in Sources */,
 				BB4EEF4229764FCC003A3537 /* KMWatermarkColorView.swift in Sources */,
 				AD85D1842AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */,
+				AD7D5CE62B96B394006562CD /* KMBookmarkOutlineSeparatorCellView.swift in Sources */,
 				BB24D4A92977BE6700041659 /* KMRedactConfirmWindowController.swift in Sources */,
 				BBB14A61297929BD00936EDB /* KMRedactPageRangeWindowController.swift in Sources */,
 				ADE86AA62B031FF000414DFA /* KMCompareView.swift in Sources */,