Explorar o código

页面编辑-拆分窗口处理高保真

tangchao hai 1 ano
pai
achega
f597c2534e

+ 38 - 0
PDF Office/PDF Master/Class/Appearance/Color.xcassets/KMBackgroundDisableColor.colorset/Contents.json

@@ -0,0 +1,38 @@
+{
+  "colors" : [
+    {
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0xF0",
+          "green" : "0xEE",
+          "red" : "0xED"
+        }
+      },
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0xF0",
+          "green" : "0xEE",
+          "red" : "0xED"
+        }
+      },
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 38 - 0
PDF Office/PDF Master/Class/Appearance/Color.xcassets/KMBorderDisableColor.colorset/Contents.json

@@ -0,0 +1,38 @@
+{
+  "colors" : [
+    {
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0xE5",
+          "green" : "0xE1",
+          "red" : "0xDF"
+        }
+      },
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0xE5",
+          "green" : "0xE1",
+          "red" : "0xDF"
+        }
+      },
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 26 - 3
PDF Office/PDF Master/Class/Appearance/KMAppearance.swift

@@ -21,13 +21,36 @@ import Cocoa
     }
 
     @objc class func titleColor() -> NSColor {
-        if (KMAppearance.isSupportNewColor()) {
-            return NSColor(named: "KMTitleColor")!
+        if (!KMAppearance.isSupportNewColor()) {
+            return NSColor(hex: "#252629")
+        }
+        if let _color = NSColor(named: "KMTitleColor") {
+            return _color
         }
         return NSColor(hex: "#252629")
     }
     
-    internal class func isSupportNewColor() -> Bool {
+    @objc class func view_bg_dis_color() -> NSColor {
+        if (!KMAppearance.isSupportNewColor()) {
+            return NSColor(hex: "#EDEEF0")
+        }
+        if let _color = NSColor(named: "KMBackgroundDisableColor") {
+            return _color
+        }
+        return NSColor(hex: "#EDEEF0")
+    }
+    
+    @objc class func view_border_dis_color() -> NSColor {
+        if (!KMAppearance.isSupportNewColor()) {
+            return NSColor(hex: "#DFE1E5")
+        }
+        if let _color = NSColor(named: "KMBorderDisableColor") {
+            return _color
+        }
+        return NSColor(hex: "#DFE1E5")
+    }
+    
+    class func isSupportNewColor() -> Bool {
         if #available(macOS 10.14, *) {
             return true
         }

+ 60 - 36
PDF Office/PDF Master/Class/PDFTools/PageEdit/Base/KMPageEditSettingBaseWindowController.xib

@@ -192,28 +192,38 @@
                                 </textFieldCell>
                             </textField>
                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wET-YY-DYd">
-                                <rect key="frame" x="14" y="90" width="65" height="18"/>
-                                <buttonCell key="cell" type="radio" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="qEf-UO-0QI">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                <rect key="frame" x="16" y="93" width="448" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="zWR-Qh-FmK"/>
+                                </constraints>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" state="on" inset="2" id="qEf-UO-0QI">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                     <font key="font" metaFont="system"/>
                                 </buttonCell>
                             </button>
                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Xw-bg-2TE">
-                                <rect key="frame" x="14" y="55" width="65" height="18"/>
-                                <buttonCell key="cell" type="radio" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Ytk-Wn-VEL">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                <rect key="frame" x="16" y="59" width="448" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="JtJ-ux-fYI"/>
+                                </constraints>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" state="on" inset="2" id="Ytk-Wn-VEL">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                     <font key="font" metaFont="system"/>
                                 </buttonCell>
                             </button>
                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c7L-ui-7Lb">
-                                <rect key="frame" x="14" y="19" width="65" height="18"/>
-                                <buttonCell key="cell" type="radio" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="gYc-Of-zbU">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                <rect key="frame" x="16" y="25" width="250" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="A0L-nb-gqj"/>
+                                    <constraint firstAttribute="width" constant="250" id="nXL-uH-xYb"/>
+                                </constraints>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" state="on" inset="2" id="gYc-Of-zbU">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                     <font key="font" metaFont="system"/>
                                 </buttonCell>
                             </button>
                             <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZQL-FL-f9k">
-                                <rect key="frame" x="87" y="83" width="110" height="32"/>
+                                <rect key="frame" x="128" y="91" width="110" height="32"/>
                                 <subviews>
                                     <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9cn-T9-ymK">
                                         <rect key="frame" x="14" y="8" width="68" height="16"/>
@@ -239,7 +249,7 @@
                                 </constraints>
                             </customView>
                             <customView translatesAutoresizingMaskIntoConstraints="NO" id="6Dh-GY-bzc">
-                                <rect key="frame" x="87" y="48" width="110" height="32"/>
+                                <rect key="frame" x="163" y="54" width="110" height="32"/>
                                 <subviews>
                                     <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ARp-F2-lcX">
                                         <rect key="frame" x="94" y="2" width="19" height="28"/>
@@ -265,15 +275,15 @@
                                 </constraints>
                             </customView>
                             <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hu2-bV-yft">
-                                <rect key="frame" x="203" y="91" width="37" height="16"/>
-                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="GjV-IM-Z9j">
+                                <rect key="frame" x="244" y="99" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" continuous="YES" enabled="NO" refusesFirstResponder="YES" title="Label" id="GjV-IM-Z9j">
                                     <font key="font" metaFont="system"/>
                                     <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                 </textFieldCell>
                             </textField>
                             <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="baP-W7-Evc">
-                                <rect key="frame" x="203" y="56" width="37" height="16"/>
+                                <rect key="frame" x="279" y="62" width="37" height="16"/>
                                 <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="E5I-FK-kGi">
                                     <font key="font" metaFont="system"/>
                                     <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -281,7 +291,7 @@
                                 </textFieldCell>
                             </textField>
                             <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nTX-d3-Nl3">
-                                <rect key="frame" x="89" y="15" width="123" height="25"/>
+                                <rect key="frame" x="217" y="23" width="123" height="25"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="120" id="Hk4-Ak-R8M"/>
                                 </constraints>
@@ -299,21 +309,23 @@
                         </subviews>
                         <constraints>
                             <constraint firstItem="hu2-bV-yft" firstAttribute="leading" secondItem="ZQL-FL-f9k" secondAttribute="trailing" constant="8" id="3T8-nc-gw2"/>
-                            <constraint firstItem="c7L-ui-7Lb" firstAttribute="top" secondItem="1Xw-bg-2TE" secondAttribute="bottom" constant="20" id="DZQ-4o-que"/>
+                            <constraint firstItem="c7L-ui-7Lb" firstAttribute="top" secondItem="1Xw-bg-2TE" secondAttribute="bottom" constant="12" id="DZQ-4o-que"/>
                             <constraint firstItem="aRC-Og-uMz" firstAttribute="top" secondItem="bqh-85-m52" secondAttribute="top" constant="16" id="E7Y-ca-2rD"/>
                             <constraint firstItem="baP-W7-Evc" firstAttribute="leading" secondItem="6Dh-GY-bzc" secondAttribute="trailing" constant="8" id="GZZ-8m-7ZD"/>
                             <constraint firstItem="aRC-Og-uMz" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="Jqp-1G-5Ci"/>
-                            <constraint firstItem="1Xw-bg-2TE" firstAttribute="top" secondItem="wET-YY-DYd" secondAttribute="bottom" constant="19" id="MQU-al-Jdn"/>
-                            <constraint firstItem="wET-YY-DYd" firstAttribute="top" secondItem="aRC-Og-uMz" secondAttribute="bottom" constant="20" id="MUT-wE-LKJ"/>
+                            <constraint firstItem="nTX-d3-Nl3" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="217" id="M33-pt-utq"/>
+                            <constraint firstItem="1Xw-bg-2TE" firstAttribute="top" secondItem="wET-YY-DYd" secondAttribute="bottom" constant="12" id="MQU-al-Jdn"/>
+                            <constraint firstItem="wET-YY-DYd" firstAttribute="top" secondItem="aRC-Og-uMz" secondAttribute="bottom" constant="12" id="MUT-wE-LKJ"/>
                             <constraint firstItem="baP-W7-Evc" firstAttribute="centerY" secondItem="6Dh-GY-bzc" secondAttribute="centerY" id="ZPB-AG-As1"/>
+                            <constraint firstAttribute="trailing" secondItem="1Xw-bg-2TE" secondAttribute="trailing" constant="16" id="ak7-ce-21k"/>
+                            <constraint firstItem="6Dh-GY-bzc" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="163" id="brh-BT-6cW"/>
                             <constraint firstItem="c7L-ui-7Lb" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="cCL-4Q-VbM"/>
+                            <constraint firstAttribute="trailing" secondItem="wET-YY-DYd" secondAttribute="trailing" constant="16" id="dcm-7p-Zne"/>
                             <constraint firstItem="nTX-d3-Nl3" firstAttribute="centerY" secondItem="c7L-ui-7Lb" secondAttribute="centerY" id="h6h-1a-SuX"/>
                             <constraint firstItem="wET-YY-DYd" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="hNR-nA-OC7"/>
                             <constraint firstItem="hu2-bV-yft" firstAttribute="centerY" secondItem="ZQL-FL-f9k" secondAttribute="centerY" id="ktd-N1-WNJ"/>
-                            <constraint firstItem="ZQL-FL-f9k" firstAttribute="centerY" secondItem="wET-YY-DYd" secondAttribute="centerY" id="m7Q-Yp-quA"/>
-                            <constraint firstItem="ZQL-FL-f9k" firstAttribute="leading" secondItem="wET-YY-DYd" secondAttribute="trailing" constant="8" id="rLO-5i-rfe"/>
-                            <constraint firstItem="6Dh-GY-bzc" firstAttribute="leading" secondItem="1Xw-bg-2TE" secondAttribute="trailing" constant="8" id="sSd-mF-AHo"/>
-                            <constraint firstItem="nTX-d3-Nl3" firstAttribute="leading" secondItem="c7L-ui-7Lb" secondAttribute="trailing" constant="10" id="v7O-F9-8MI"/>
+                            <constraint firstItem="ZQL-FL-f9k" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="128" id="na0-kM-oXB"/>
+                            <constraint firstItem="wET-YY-DYd" firstAttribute="top" secondItem="ZQL-FL-f9k" secondAttribute="bottom" constant="-24" id="pRu-59-b9U"/>
                             <constraint firstItem="1Xw-bg-2TE" firstAttribute="leading" secondItem="bqh-85-m52" secondAttribute="leading" constant="16" id="wrd-5V-T4W"/>
                             <constraint firstItem="6Dh-GY-bzc" firstAttribute="centerY" secondItem="1Xw-bg-2TE" secondAttribute="centerY" id="ywE-d4-JHZ"/>
                         </constraints>
@@ -357,28 +369,39 @@
                                 </constraints>
                             </customView>
                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="a0r-63-2jU">
-                                <rect key="frame" x="14" y="87" width="65" height="18"/>
-                                <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="aRB-8C-9A9">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                <rect key="frame" x="16" y="82" width="448" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="ASx-78-Hbi"/>
+                                </constraints>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" state="on" inset="2" id="aRB-8C-9A9">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                     <font key="font" metaFont="system"/>
                                 </buttonCell>
                             </button>
                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fhq-6e-30z">
-                                <rect key="frame" x="14" y="51" width="65" height="18"/>
-                                <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="snM-dt-ve4">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                <rect key="frame" x="16" y="48" width="200" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="200" id="0W9-DX-Zd7"/>
+                                    <constraint firstAttribute="height" constant="22" id="PVm-SU-4r2"/>
+                                </constraints>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" state="on" inset="2" id="snM-dt-ve4">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                     <font key="font" metaFont="system"/>
                                 </buttonCell>
                             </button>
                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tx2-2Q-utf">
-                                <rect key="frame" x="14" y="15" width="65" height="18"/>
-                                <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="UbX-QD-gHm">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                <rect key="frame" x="16" y="6" width="200" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="5e7-RB-QdJ"/>
+                                    <constraint firstAttribute="width" constant="200" id="CiJ-dD-TFE"/>
+                                </constraints>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" state="on" inset="2" id="UbX-QD-gHm">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                     <font key="font" metaFont="system"/>
                                 </buttonCell>
                             </button>
                             <customView translatesAutoresizingMaskIntoConstraints="NO" id="OLI-bg-hBY">
-                                <rect key="frame" x="98" y="44" width="110" height="32"/>
+                                <rect key="frame" x="80" y="43" width="110" height="32"/>
                                 <subviews>
                                     <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nPh-YU-WBb">
                                         <rect key="frame" x="12" y="5" width="86" height="22"/>
@@ -401,7 +424,7 @@
                                 </constraints>
                             </customView>
                             <customView translatesAutoresizingMaskIntoConstraints="NO" id="sHS-HL-beY">
-                                <rect key="frame" x="98" y="8" width="110" height="32"/>
+                                <rect key="frame" x="113" y="1" width="110" height="32"/>
                                 <subviews>
                                     <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5Q-Eu-B5p">
                                         <rect key="frame" x="12" y="6" width="86" height="21"/>
@@ -426,14 +449,15 @@
                             <constraint firstItem="OLI-bg-hBY" firstAttribute="centerY" secondItem="fhq-6e-30z" secondAttribute="centerY" id="B7N-UT-FZI"/>
                             <constraint firstItem="tx2-2Q-utf" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="DXt-Qw-2sl"/>
                             <constraint firstItem="tx2-2Q-utf" firstAttribute="top" secondItem="fhq-6e-30z" secondAttribute="bottom" constant="20" id="EOY-V5-R3r"/>
+                            <constraint firstItem="sHS-HL-beY" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="113" id="Ezg-Mv-mgF"/>
+                            <constraint firstItem="OLI-bg-hBY" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="80" id="KAG-WE-Uuf"/>
                             <constraint firstItem="jHQ-JM-bgx" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="MGK-pP-wQA"/>
                             <constraint firstItem="sHS-HL-beY" firstAttribute="centerY" secondItem="tx2-2Q-utf" secondAttribute="centerY" id="SXo-AP-yVf"/>
-                            <constraint firstItem="sHS-HL-beY" firstAttribute="leading" secondItem="tx2-2Q-utf" secondAttribute="trailing" constant="19" id="Srd-0a-Ouu"/>
                             <constraint firstItem="4Wl-y0-47A" firstAttribute="top" secondItem="jHQ-JM-bgx" secondAttribute="bottom" constant="2" id="TT9-ID-BdH"/>
                             <constraint firstItem="a0r-63-2jU" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="XFZ-nn-7YW"/>
-                            <constraint firstItem="fhq-6e-30z" firstAttribute="top" secondItem="a0r-63-2jU" secondAttribute="bottom" constant="20" id="eoX-f4-ayF"/>
+                            <constraint firstItem="fhq-6e-30z" firstAttribute="top" secondItem="a0r-63-2jU" secondAttribute="bottom" constant="12" id="eoX-f4-ayF"/>
                             <constraint firstItem="jHQ-JM-bgx" firstAttribute="top" secondItem="zKz-Wc-K7q" secondAttribute="top" constant="16" id="rzP-Pt-LEZ"/>
-                            <constraint firstItem="OLI-bg-hBY" firstAttribute="leading" secondItem="fhq-6e-30z" secondAttribute="trailing" constant="19" id="swZ-ju-PjS"/>
+                            <constraint firstAttribute="trailing" secondItem="a0r-63-2jU" secondAttribute="trailing" constant="16" id="sg3-I0-dON"/>
                             <constraint firstItem="a0r-63-2jU" firstAttribute="top" secondItem="4Wl-y0-47A" secondAttribute="bottom" constant="10" id="yCg-DJ-nU0"/>
                             <constraint firstItem="fhq-6e-30z" firstAttribute="leading" secondItem="zKz-Wc-K7q" secondAttribute="leading" constant="16" id="z0R-GL-djt"/>
                         </constraints>

+ 157 - 55
PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPageEditSplitSettingView.swift

@@ -5,10 +5,7 @@
 //  Created by tangchao on 2023/1/12.
 //
 
-import Cocoa
-
 class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
-
     @IBOutlet weak var typeLabel: NSTextField!
     
     @IBOutlet weak var oneFileForOnePageRadio: NSButton!
@@ -17,15 +14,20 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
     @IBOutlet weak var oneFileForOnePageStepper: NSStepper!
     @IBOutlet weak var oneFileForOnePageOtherLabel: NSTextField!
     
+    private var oneFileForOnePageVC: KMDesignButton?
+    
     @IBOutlet weak var splitMuitiFileRadio: NSButton!
     @IBOutlet weak var splitMuitiFileView: NSView!
     @IBOutlet weak var splitMuitiFileStepper: NSStepper!
     @IBOutlet weak var splitMuitiFileTextField: NSTextField!
     @IBOutlet weak var splitMuitiFileOtherLabel: NSTextField!
     
+    private var splitMuitiFileVC: KMDesignButton?
+    
     @IBOutlet weak var pageRangeRadio: NSButton!
     @IBOutlet weak var pageRangeComboBox: NSComboBox!
     
+    private var pageRangeVC: KMDesignButton?
     
     @IBOutlet weak var nameLabel: NSTextField!
     @IBOutlet weak var nameView: NSView!
@@ -38,17 +40,21 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
     @IBOutlet weak var sepView: NSView!
     @IBOutlet weak var sepTextView: NSTextField!
     
+    private var prefixForOrigFileNameVC: KMDesignButton?
+    private var tagVC: KMDesignButton?
+    private var sepVC: KMDesignButton?
+    
     var type: Int {
         get {
             -1
         }
         set {
             if (newValue == 0) {
-                self.selectRadio(radio: self.oneFileForOnePageRadio)
+                self.safe_selectRadio(sender: self.oneFileForOnePageVC)
             } else if (newValue == 1) {
-                self.selectRadio(radio: self.splitMuitiFileRadio)
+                self.safe_selectRadio(sender: self.splitMuitiFileVC)
             } else if (newValue == 2) {
-                self.selectRadio(radio: self.pageRangeRadio)
+                self.safe_selectRadio(sender: self.pageRangeVC)
             }
         }
     }
@@ -57,19 +63,35 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
         super.awakeFromNib()
         
         self.typeLabel.stringValue = NSLocalizedString("Splitting Method", comment: "")
-        self.oneFileForOnePageRadio.title = NSLocalizedString("Average per", comment: "")
+        
         self.oneFileForOnePageTextField.stringValue = "1"
         self.oneFileForOnePageStepper.minValue = 1
         self.oneFileForOnePageStepper.integerValue = 1
         self.oneFileForOnePageOtherLabel.stringValue = NSLocalizedString("page split into a PDF file", comment: "")
         
-        self.splitMuitiFileRadio.title = NSLocalizedString("Average split into", comment: "")
+        self.oneFileForOnePageVC = KMDesignButton(withType: .RadioButton)
+        self.oneFileForOnePageRadio.addSubview(self.oneFileForOnePageVC!.view)
+        self.oneFileForOnePageVC?.view.frame = self.oneFileForOnePageRadio.bounds
+        self.oneFileForOnePageVC?.view.autoresizingMask = [.width, .height]
+        self.oneFileForOnePageVC?.target = self
+        self.oneFileForOnePageVC?.action = #selector(oneFileForOnePageAction)
+        self.oneFileForOnePageVC?.stringValue = NSLocalizedString("Average per", comment: "")
+        self.oneFileForOnePageVC?.checkbox_radio()
+        
         self.splitMuitiFileTextField.stringValue = "1"
         self.splitMuitiFileStepper.minValue = 1
         self.splitMuitiFileStepper.integerValue = 1
         self.splitMuitiFileOtherLabel.stringValue = NSLocalizedString("PDF files", comment: "")
         
-        self.pageRangeRadio.title = NSLocalizedString("Split by page atmosphere", comment: "")
+        self.splitMuitiFileVC = KMDesignButton(withType: .RadioButton)
+        self.splitMuitiFileRadio.addSubview(self.splitMuitiFileVC!.view)
+        self.splitMuitiFileVC?.view.frame = self.splitMuitiFileRadio.bounds
+        self.splitMuitiFileVC?.view.autoresizingMask = [.width, .height]
+        self.splitMuitiFileVC?.target = self
+        self.splitMuitiFileVC?.action = #selector(splitMuitiFileAction)
+        self.splitMuitiFileVC?.stringValue = NSLocalizedString("Average split into", comment: "")
+        self.splitMuitiFileVC?.checkbox_radio()
+        
         self.pageRangeComboBox.removeAllItems()
         self.pageRangeComboBox.addItems(withObjectValues: ["Odd Pages","Even Pages","Customize"])
         self.pageRangeComboBox.placeholderString = "e.g. 1,3-5,10"
@@ -77,19 +99,57 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
         self.pageRangeComboBox.isEditable = false
         self.pageRangeComboBox.delegate = self
         
-        for radio in [self.oneFileForOnePageRadio, self.splitMuitiFileRadio, self.pageRangeRadio] {
-            radio?.target = self
-            radio?.action = #selector(radioAction)
-        }
-        self.selectRadio(radio: self.oneFileForOnePageRadio)
+        self.pageRangeVC = KMDesignButton(withType: .RadioButton)
+        self.pageRangeRadio.addSubview(self.pageRangeVC!.view)
+        self.pageRangeVC?.view.frame = self.pageRangeRadio.bounds
+        self.pageRangeVC?.view.autoresizingMask = [.width, .height]
+        self.pageRangeVC?.target = self
+        self.pageRangeVC?.action = #selector(pageRangeAction)
+        self.pageRangeVC?.stringValue = NSLocalizedString("Split by page atmosphere", comment: "")
+        self.pageRangeVC?.checkbox_radio()
+        
+        self.safe_selectRadio(sender: self.oneFileForOnePageVC)
         
         self.nameLabel.stringValue = NSLocalizedString("File Naming", comment: "")
-        self.prefixForOrigFileNameCheck.title = NSLocalizedString("Precede the original document name", comment: "")
-        self.tagCheck.title = NSLocalizedString("Tags", comment: "")
-        self.sepCheck.title = NSLocalizedString("Separator", comment: "")
         self.tagTextField.stringValue = "part"
         self.sepTextView.stringValue = "-"
         
+        self.nameView.wantsLayer = true
+        self.nameView.layer?.backgroundColor = KMAppearance.view_bg_dis_color().cgColor
+        self.nameView.layer?.borderWidth = 1
+        self.nameView.layer?.borderColor = KMAppearance.view_border_dis_color().cgColor
+        self.nameView.layer?.cornerRadius = 4
+        
+        self.prefixForOrigFileNameVC = KMDesignButton(withType: .CheckBox)
+        self.prefixForOrigFileNameCheck.addSubview(self.prefixForOrigFileNameVC!.view)
+        self.prefixForOrigFileNameVC?.view.frame = self.prefixForOrigFileNameCheck.bounds
+        self.prefixForOrigFileNameVC?.view.autoresizingMask = [.width, .height]
+        self.prefixForOrigFileNameVC?.target = self
+        self.prefixForOrigFileNameVC?.action = #selector(prefixForOrigFileNameAction)
+        self.prefixForOrigFileNameVC?.stringValue = NSLocalizedString("Precede the original document name", comment: "")
+        self.prefixForOrigFileNameVC?.checkbox_radio()
+        self.safe_selectCheck(sender: self.prefixForOrigFileNameVC)
+        
+        self.tagVC = KMDesignButton(withType: .CheckBox)
+        self.tagCheck.addSubview(self.tagVC!.view)
+        self.tagVC?.view.frame = self.tagCheck.bounds
+        self.tagVC?.view.autoresizingMask = [.width, .height]
+        self.tagVC?.target = self
+        self.tagVC?.action = #selector(tagAction)
+        self.tagVC?.stringValue = NSLocalizedString("Tags", comment: "")
+        self.tagVC?.checkbox_radio()
+        self.safe_selectCheck(sender: self.tagVC)
+        
+        self.sepVC = KMDesignButton(withType: .CheckBox)
+        self.sepCheck.addSubview(self.sepVC!.view)
+        self.sepVC?.view.frame = self.sepCheck.bounds
+        self.sepVC?.view.autoresizingMask = [.width, .height]
+        self.sepVC?.target = self
+        self.sepVC?.action = #selector(sepAction)
+        self.sepVC?.stringValue = NSLocalizedString("Separator", comment: "")
+        self.sepVC?.checkbox_radio()
+        self.safe_selectCheck(sender: self.sepVC)
+        
         for textfield in [self.oneFileForOnePageTextField, self.splitMuitiFileTextField, self.tagTextField, self.sepTextView] {
             textfield?.isEditable = true
             textfield?.focusRingType = .none
@@ -110,33 +170,42 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
             view?.layer?.cornerRadius = 2
         }
         
-        for view in [self.nameView, self.tagView, self.sepView] {
+        for view in [self.tagView, self.sepView] {
             view?.wantsLayer = true
             view?.layer?.borderWidth = 1
             view?.layer?.borderColor = NSColor.black.cgColor
             view?.layer?.cornerRadius = 2
         }
+    }
+    
+    @objc private func oneFileForOnePageAction() {
+        self.safe_selectRadio(sender: self.oneFileForOnePageVC)
         
-        for check in [self.prefixForOrigFileNameCheck, self.tagCheck, self.sepCheck] {
-            check?.target = self
-            check?.action = #selector(checkAction)
+        guard let callback = self.itemClick else {
+            return
         }
+        
+        callback(1, 0)
     }
     
-    @objc func radioAction(sender: NSButton) {
-        selectRadio(radio: sender)
+    @objc private func splitMuitiFileAction() {
+        self.safe_selectRadio(sender: self.splitMuitiFileVC)
         
         guard let callback = self.itemClick else {
             return
         }
         
-        var index: Int = 0
-        if (sender.isEqual(to: self.splitMuitiFileRadio)) {
-            index = 1
-        } else if (sender.isEqual(to: self.pageRangeRadio)) {
-            index = 2
+        callback(1, 1)
+    }
+    
+    @objc private func pageRangeAction() {
+        self.safe_selectRadio(sender: self.pageRangeVC)
+        
+        guard let callback = self.itemClick else {
+            return
         }
-        callback(1, index)
+        
+        callback(1, 2)
     }
     
     @objc func stepperAction(sender: NSStepper) {
@@ -155,32 +224,44 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
         callback(index, sender.integerValue)
     }
     
-    @objc func checkAction(sender: NSButton) {
-        if (self.tagCheck.state == .on) {
-            self.tagTextField.isEnabled = true
-        } else {
-            self.tagTextField.isEnabled = false
-        }
+    @objc private func prefixForOrigFileNameAction() {
+        self.safe_selectCheck(sender: self.prefixForOrigFileNameVC)
         
-        if (sepCheck.state == .on) {
-            self.sepTextView.isEnabled = true
-        } else {
-            self.sepTextView.isEnabled = false
+        guard let callback = self.itemClick else {
+            return
+        }
+        var value = false
+        if let sender = self.prefixForOrigFileNameVC {
+            value = sender.state == .Checked
         }
         
-        var index: Int = 6
-        if (sender.isEqual(to: self.prefixForOrigFileNameCheck)) {
-            index = 6
-        } else if (sender.isEqual(to: self.tagCheck)) {
-            index = 7
-        } else if (sender.isEqual(to: self.sepCheck)) {
-            index = 8
+        callback(6, value)
+    }
+    
+    @objc private func tagAction() {
+        self.safe_selectCheck(sender: self.tagVC)
+        
+        guard let callback = self.itemClick else {
+            return
+        }
+        var value = false
+        if let sender = self.tagVC {
+            value = sender.state == .Checked
         }
+        callback(7, value)
+    }
+    
+    @objc private func sepAction() {
+        self.safe_selectCheck(sender: self.sepVC)
         
         guard let callback = self.itemClick else {
             return
         }
-        callback(index, sender.state == .on)
+        var value = false
+        if let sender = self.sepVC {
+            value = sender.state == .Checked
+        }
+        callback(8, value)
     }
     
     public func setPageRangeString(_ string: String) {
@@ -194,18 +275,28 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
         self.nameViewLabel.stringValue = name
     }
     
+    func selectCheck(sender: KMDesignButton) {
+        sender.state = sender.state == .Checked ? .Norm : .Checked
+        
+        if (sender.isEqual(to: self.tagVC)) {
+            self.tagTextField.isEnabled = sender.state == .Checked
+        } else if (sender.isEqual(to: self.sepVC)) {
+            self.sepTextView.isEnabled = sender.state == .Checked
+        }
+    }
+    
     // MARK: Private Methods
     
-    private func selectRadio(radio: NSButton) {
-        for item in [self.oneFileForOnePageRadio, self.splitMuitiFileRadio, self.pageRangeRadio] {
-            if (radio.isEqual(to: item)) {
-                item?.state = .on
+    private func selectRadio(sender: KMDesignButton) {
+        for radioVC in [self.oneFileForOnePageVC, self.splitMuitiFileVC, self.pageRangeVC] {
+            if (sender.isEqual(to: radioVC)) {
+                radioVC?.state = .Checked
             } else {
-                item?.state = .off
+                radioVC?.state = .Norm
             }
         }
         
-        if (self.oneFileForOnePageRadio.state == .on) {
+        if let state = self.oneFileForOnePageVC?.state, state == .Checked {
             self.oneFileForOnePageTextField.isEnabled = true
             self.oneFileForOnePageStepper.isEnabled = true
         } else {
@@ -213,7 +304,7 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
             self.oneFileForOnePageStepper.isEnabled = false
         }
         
-        if (self.splitMuitiFileRadio.state == .on) {
+        if let state = self.splitMuitiFileVC?.state, state == .Checked {
             self.splitMuitiFileTextField.isEnabled = true
             self.splitMuitiFileStepper.isEnabled = true
         } else {
@@ -221,13 +312,24 @@ class KMPageEditSplitSettingView: KMPageEditSettingBaseView {
             self.splitMuitiFileStepper.isEnabled = false
         }
         
-        if (self.pageRangeRadio.state == .on) {
+        if let state = self.pageRangeVC?.state, state == .Checked {
             self.pageRangeComboBox.isEnabled = true
         } else {
             self.pageRangeComboBox.isEnabled = false
         }
     }
     
+    private func safe_selectRadio(sender: KMDesignButton?) {
+        if let _radioVC = sender {
+            self.selectRadio(sender: _radioVC)
+        }
+    }
+    
+    private func safe_selectCheck(sender: KMDesignButton?) {
+        if let _checkVC = sender {
+            self.selectCheck(sender: _checkVC)
+        }
+    }
 }
 
 extension KMPageEditSplitSettingView: NSTextFieldDelegate {

+ 37 - 48
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPageEditSplitWindowController.swift

@@ -5,37 +5,13 @@
 //  Created by tangchao on 2023/1/12.
 //
 
-import Cocoa
-
 class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
+    var hasPreView = false
     
-    var hasPreView: Bool = false
-    
-//    override var model: KMPageEditSettingBaseModel? {
-//        get {
-//            return super.model
-//        }
-//        set {
-//            super.model = newValue
-//        }
-//    }
-    
-    override func windowDidLoad() {
-        super.windowDidLoad()
-    
-        if (hasPreView) {
-            setWindowSize(NSSize(width: 583, height: 481))
-            self.titleLabel.stringValue = NSLocalizedString("Split", comment: "")
-        } else {
-            setWindowSize(NSSize(width: 480, height: 481))
-            self.titleLabel.stringValue = NSLocalizedString("Split Page", comment: "")
-        }
-        
-        funcButton.title = NSLocalizedString("Split", comment: "")
-        funcButton.layer?.backgroundColor = NSColor.black.cgColor
-        funcButton.attributedTitle = NSMutableAttributedString(string: funcButton.title, attributes: [NSAttributedString.Key.foregroundColor : NSColor.white])
+    override func initSubViews() {
+        super.initSubViews()
         
-        if (hasPreView) {
+        if (self.hasPreView) {
             let controller = KMPDFInsertPreviewViewController(nibName: "KMPDFInsertPreviewViewController", bundle: nil)
             controller.pdfDocument = CPDFDocument(url: self.model?.documentURL)
             self.contentBox.contentView?.addSubview(controller.view)
@@ -57,9 +33,7 @@ class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
             settingView.updateName(self.model!.outputFileName)
         } else {
             let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib()!
-            self.contentBox.contentView?.addSubview(settingView)
-            settingView.frame = self.contentBox.contentView!.bounds
-            settingView.autoresizingMask = [.width, .height]
+            self.contentBox.contentView = settingView
             self.settingView = settingView
             settingView.oneFileForOnePageStepper.maxValue = Double(self.model!.pageCount)
             settingView.splitMuitiFileStepper.maxValue = Double(self.model!.pageCount)
@@ -69,60 +43,75 @@ class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
             }
             settingView.updateName(self.model!.outputFileName)
         }
-
-        self.settingView!.itemClick = { [weak self] index, value in
+        
+        self.settingView?.itemClick = { [unowned self] index, value in
             if (index == 1) { /// 类型切换
-                (self?.model as! KMPageEditSplitSettingModel).type = value as! Int
+                (self.model as! KMPageEditSplitSettingModel).type = value as! Int
                 return
             }
             if (index == 2) { /// 平均每几页拆分
-                (self?.model as! KMPageEditSplitSettingModel).avgNumberForOneFile = value as! Int
+                (self.model as! KMPageEditSplitSettingModel).avgNumberForOneFile = value as! Int
                 return
             }
             if (index == 3) { /// 平均拆分几个文件
-                (self?.model as! KMPageEditSplitSettingModel).avgSplitNumberFile = value as! Int
+                (self.model as! KMPageEditSplitSettingModel).avgSplitNumberFile = value as! Int
                 return
             }
             if (index == 4) { /// 页面范围切换
-                (self?.model as! KMPageEditSplitSettingModel).pageRangeType = value as! Int
+                (self.model as! KMPageEditSplitSettingModel).pageRangeType = value as! Int
                 return
             }
             if (index == 5) { /// 页面范围输入
-                (self?.model as! KMPageEditSplitSettingModel).pageRangeString = value as! String
+                (self.model as! KMPageEditSplitSettingModel).pageRangeString = value as! String
                 return
             }
             if (index == 6) { /// 将原始文档名前置
-                (self?.model as! KMPageEditSplitSettingModel).origFileNameIsPrefix = value as! Bool
+                (self.model as! KMPageEditSplitSettingModel).origFileNameIsPrefix = value as! Bool
                 
-                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
                 return
             }
             if (index == 7) { /// 标签
-                (self?.model as! KMPageEditSplitSettingModel).hasTag = value as! Bool
+                (self.model as! KMPageEditSplitSettingModel).hasTag = value as! Bool
                 
-                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
                 return
             }
             if (index == 8) { /// 分隔符
-                (self?.model as! KMPageEditSplitSettingModel).hasSep = value as! Bool
+                (self.model as! KMPageEditSplitSettingModel).hasSep = value as! Bool
                 
-                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
                 return
             }
             
             if (index == 9) { /// 分隔符
-                (self?.model as! KMPageEditSplitSettingModel).tagString = value as! String
+                (self.model as! KMPageEditSplitSettingModel).tagString = value as! String
                 
-                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
                 return
             }
             
             if (index == 10) { /// 分隔符
-                (self?.model as! KMPageEditSplitSettingModel).sepString = value as! String
+                (self.model as! KMPageEditSplitSettingModel).sepString = value as! String
                 
-                (self?.settingView as! KMPageEditSplitSettingView).updateName((self?.model!.outputFileName)!)
+                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
                 return
             }
         }
     }
+    
+    override func initDefaultValue() {
+        super.initDefaultValue()
+        
+        if (self.hasPreView) {
+            self.setWindowSize(NSSize(width: 583, height: 481))
+            self.titleLabel.stringValue = NSLocalizedString("Split", comment: "")
+        } else {
+            self.setWindowSize(NSSize(width: 480, height: 481))
+            self.titleLabel.stringValue = NSLocalizedString("Split Page", comment: "")
+        }
+        
+        self.funcVC?.stringValue = NSLocalizedString("Split", comment: "")
+        self.funcVC?.updateUI()
+    }
 }