Sfoglia il codice sorgente

【转档】页面补充付费限制的提示

tangchao 1 anno fa
parent
commit
9e57cf219e

+ 8 - 0
PDF Office/PDF Master.xcodeproj/project.pbxproj

@@ -2761,6 +2761,9 @@
 		BB9DCCA02A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */; };
 		BB9DCCA12A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */; };
 		BB9DEE862A14A01D00351CC4 /* PDF-Master-DMG-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ADC076122987F06A006C752F /* PDF-Master-DMG-Info.plist */; };
+		BB9E2F732A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */; };
+		BB9E2F742A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */; };
+		BB9E2F752A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */; };
 		BBA19F3229ADAC81001A285A /* signPicture_hover.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBA19F3129ADAC81001A285A /* signPicture_hover.pdf */; };
 		BBA19F3329ADAC81001A285A /* signPicture_hover.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBA19F3129ADAC81001A285A /* signPicture_hover.pdf */; };
 		BBA19F3429ADAC81001A285A /* signPicture_hover.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBA19F3129ADAC81001A285A /* signPicture_hover.pdf */; };
@@ -4651,6 +4654,7 @@
 		BB9DCC7F2A09FC750024A6F1 /* libonnxruntime.1.12.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libonnxruntime.1.12.0.dylib; sourceTree = "<group>"; };
 		BB9DCC982A0A10400024A6F1 /* ComDocumentAIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ComDocumentAIKit.framework; sourceTree = "<group>"; };
 		BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertSettingView.swift; sourceTree = "<group>"; };
+		BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMConvertSettingLimitTipView.swift; sourceTree = "<group>"; };
 		BBA19F3129ADAC81001A285A /* signPicture_hover.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = signPicture_hover.pdf; sourceTree = "<group>"; };
 		BBA19F3529ADACC5001A285A /* signPicture_nor.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = signPicture_nor.pdf; sourceTree = "<group>"; };
 		BBA19F3D29ADE40A001A285A /* KMCellEmptyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMCellEmptyView.h; sourceTree = "<group>"; };
@@ -8052,6 +8056,7 @@
 				BB49ED1C293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift */,
 				BB49ED20293F527700C82CA2 /* KMConvertExcelSettingView.swift */,
 				BB9DCC9E2A0A2B0A0024A6F1 /* KMConvertSettingView.swift */,
+				BB9E2F722A495BCD000DC68D /* KMConvertSettingLimitTipView.swift */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -11137,6 +11142,7 @@
 				ADBA0464292CB90B00BF9184 /* KMBatchProcessingTableRowView.swift in Sources */,
 				9F1FE50229406E4700E952CA /* CTTabStripModelOrderController.m in Sources */,
 				BB49ECFE293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
+				BB9E2F732A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */,
 				9F1F82E32934D5240092C4B4 /* KMHomeExtractActionViewController.swift in Sources */,
 				89D2D2C5294972B900BFF5FE /* KMFormCellView.swift in Sources */,
 				BB897224294B07960045787C /* KMWatermarkAdjectiveTopBarItemView.swift in Sources */,
@@ -11835,6 +11841,7 @@
 				AD88108429A719D400178CA1 /* KMRegisterView.swift in Sources */,
 				9F705F77291A3A84005199AD /* KMHistoryFileDeleteWindowController.swift in Sources */,
 				BBC3482F29559E12008D2CD1 /* KMBackgroundModel.swift in Sources */,
+				BB9E2F742A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */,
 				ADE3C1A029A3894900793B13 /* KMSearchTableRowView.swift in Sources */,
 				BB88E45929404752002B3655 /* KMPDFConvert.swift in Sources */,
 				9F080B15298CFDB300FC27DA /* KMTextImageButtonVC.swift in Sources */,
@@ -12228,6 +12235,7 @@
 				BB89DD802953F863007C3FFA /* KMWatermarkFileOutsideView.swift in Sources */,
 				BB6B4C0A292F53CE0071CA06 /* KMMergeFileModel.swift in Sources */,
 				9F0CB4B72977BC1000007028 /* KMPropertiesPanelPreviewSubVC.swift in Sources */,
+				BB9E2F752A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */,
 				BB5CA7D729D2AF550095A743 /* KMTools_OC.m in Sources */,
 				BB6DD80E29347F77001F0544 /* KMSecureEncryptWindowController.swift in Sources */,
 				AD53B70029AC5FCD00D61E81 /* KMLightMemberToken.swift in Sources */,

+ 4 - 4
PDF Office/PDF Master.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -174,8 +174,8 @@
             filePath = "PDF Master/Class/PDFTools/Convert/Controller/KMConvertBaseWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "299"
-            endingLineNumber = "299"
+            startingLineNumber = "305"
+            endingLineNumber = "305"
             landmarkName = "convertButtonAction()"
             landmarkType = "7">
          </BreakpointContent>
@@ -190,8 +190,8 @@
             filePath = "PDF Master/Class/PDFTools/Convert/Controller/KMConvertBaseWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "517"
-            endingLineNumber = "517"
+            startingLineNumber = "523"
+            endingLineNumber = "523"
             landmarkName = "updatePreView(pageRange:pageString:)"
             landmarkType = "7">
          </BreakpointContent>

+ 22 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/KMImageNameTipNormal.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "Error=false.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "Error=false 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 131 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/KMImageNameTipNormal.imageset/Error=false 1.pdf

@@ -0,0 +1,131 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.807843 0.815686 0.831373 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 7.100098 4.419998 cm
+0.580392 0.596078 0.611765 scn
+0.370000 2.670001 m
+1.400000 2.670001 l
+1.660000 6.090002 l
+1.710000 7.580002 l
+0.060000 7.580002 l
+0.110000 6.090002 l
+0.370000 2.670001 l
+h
+0.890000 0.000001 m
+1.390000 0.000001 1.770000 0.370001 1.770000 0.890001 c
+1.770000 1.410001 1.390000 1.770001 0.890000 1.770001 c
+0.380000 1.770001 0.000000 1.410001 0.000000 0.890001 c
+0.000000 0.370001 0.370000 0.000001 0.890000 0.000001 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1960
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.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
+0000002050 00000 n
+0000002073 00000 n
+0000002246 00000 n
+0000002320 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2379
+%%EOF

+ 131 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/KMImageNameTipNormal.imageset/Error=false.pdf

@@ -0,0 +1,131 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+1.000000 1.000000 1.000000 scn
+14.000000 7.000000 m
+14.000000 3.134007 10.865993 0.000000 7.000000 0.000000 c
+3.134007 0.000000 0.000000 3.134007 0.000000 7.000000 c
+0.000000 10.865993 3.134007 14.000000 7.000000 14.000000 c
+10.865993 14.000000 14.000000 10.865993 14.000000 7.000000 c
+h
+f
+n
+Q
+15.000000 8.000000 m
+15.000000 4.134007 11.865993 1.000000 8.000000 1.000000 c
+4.134007 1.000000 1.000000 4.134007 1.000000 8.000000 c
+1.000000 11.865993 4.134007 15.000000 8.000000 15.000000 c
+11.865993 15.000000 15.000000 11.865993 15.000000 8.000000 c
+h
+W*
+n
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.000000 cm
+0.807843 0.815686 0.831373 scn
+13.000000 7.000000 m
+13.000000 3.686292 10.313708 1.000000 7.000000 1.000000 c
+7.000000 -1.000000 l
+11.418278 -1.000000 15.000000 2.581722 15.000000 7.000000 c
+13.000000 7.000000 l
+h
+7.000000 1.000000 m
+3.686291 1.000000 1.000000 3.686292 1.000000 7.000000 c
+-1.000000 7.000000 l
+-1.000000 2.581722 2.581722 -1.000000 7.000000 -1.000000 c
+7.000000 1.000000 l
+h
+1.000000 7.000000 m
+1.000000 10.313708 3.686291 13.000000 7.000000 13.000000 c
+7.000000 15.000000 l
+2.581722 15.000000 -1.000000 11.418278 -1.000000 7.000000 c
+1.000000 7.000000 l
+h
+7.000000 13.000000 m
+10.313708 13.000000 13.000000 10.313708 13.000000 7.000000 c
+15.000000 7.000000 l
+15.000000 11.418278 11.418278 15.000000 7.000000 15.000000 c
+7.000000 13.000000 l
+h
+f
+n
+Q
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 7.100098 4.419998 cm
+0.580392 0.596078 0.611765 scn
+0.370000 2.670001 m
+1.400000 2.670001 l
+1.660000 6.090002 l
+1.710000 7.580002 l
+0.060000 7.580002 l
+0.110000 6.090002 l
+0.370000 2.670001 l
+h
+0.890000 0.000001 m
+1.390000 0.000001 1.770000 0.370001 1.770000 0.890001 c
+1.770000 1.410001 1.390000 1.770001 0.890000 1.770001 c
+0.380000 1.770001 0.000000 1.410001 0.000000 0.890001 c
+0.000000 0.370001 0.370000 0.000001 0.890000 0.000001 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1960
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.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
+0000002050 00000 n
+0000002073 00000 n
+0000002246 00000 n
+0000002320 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2379
+%%EOF

+ 7 - 1
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertBaseWindowController.swift

@@ -27,6 +27,8 @@ class KMConvertBaseWindowController: KMBaseWindowController {
     @IBOutlet weak var canelBox: NSBox!
     @IBOutlet weak var convertBox: NSBox!
     
+    @IBOutlet weak var rightBoxHeightConst: NSLayoutConstraint!
+    
     var canelButtonVC: KMDesignButton?
     var convertButtonVC: KMDesignButton?
     var backButtonVC: KMDesignButton?
@@ -113,7 +115,7 @@ class KMConvertBaseWindowController: KMBaseWindowController {
         
         let view = self.initSettingView()
         view?.frame = self.rightScrollView.bounds
-//        view?.autoresizingMask = [.width, .height]
+        view?.autoresizingMask = [.width, .height]
         self.settingView = view
         self.rightScrollView.documentView = view
         
@@ -238,6 +240,10 @@ class KMConvertBaseWindowController: KMBaseWindowController {
         return KMPDFConvert()
     }
     
+    func setupContentHeight(height: CGFloat) {
+        self.rightBoxHeightConst.constant = height
+    }
+    
     @objc func backButtonAction() {
         if let _ = self.prePDFView?.canGoToPreviousPage() {
             self.currentPageIndex -= 1

+ 7 - 2
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertBaseWindowController.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
         <capability name="System colors introduced in macOS 10.13" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -18,6 +19,7 @@
                 <outlet property="numberTextField" destination="0fT-PL-boX" id="hzh-TQ-lIK"/>
                 <outlet property="perLabel" destination="OjN-CY-T87" id="DJD-nk-fRU"/>
                 <outlet property="prePDFView" destination="mvl-fd-L7y" id="1aK-Un-d8M"/>
+                <outlet property="rightBoxHeightConst" destination="oAt-Yd-pzO" id="VV4-4N-nr7"/>
                 <outlet property="rightScrollView" destination="jkb-2v-6fa" id="FO8-ID-Kc6"/>
                 <outlet property="titleLabel" destination="FhR-40-9KK" id="2T3-rd-gRE"/>
                 <outlet property="totalNumberLabel" destination="b9V-3O-PC8" id="8yy-qK-qOI"/>
@@ -30,7 +32,7 @@
             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="586" height="483"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1800" height="1125"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
             <value key="minSize" type="size" width="586" height="483"/>
             <value key="maxSize" type="size" width="586" height="483"/>
             <view key="contentView" id="se5-gp-TjO">
@@ -192,6 +194,9 @@
                                 <constraint firstItem="jkb-2v-6fa" firstAttribute="top" secondItem="6L0-Kf-CPw" secondAttribute="top" id="x5n-jP-whm"/>
                             </constraints>
                         </view>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="391" id="oAt-Yd-pzO"/>
+                        </constraints>
                     </box>
                     <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="0Zk-pO-7aZ" userLabel="bottomBarBox">
                         <rect key="frame" x="0.0" y="0.0" width="586" height="48"/>
@@ -581,7 +586,7 @@
                                 </buttonCell>
                             </button>
                             <comboBox hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uah-L1-IyT">
-                                <rect key="frame" x="31" y="-22" width="215" height="23"/>
+                                <rect key="frame" x="32" y="-23" width="214" height="25"/>
                                 <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="X1R-ss-GZO">
                                     <font key="font" metaFont="system"/>
                                     <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>

+ 1 - 0
PDF Office/PDF Master/Class/PDFTools/Convert/Controller/KMConvertExcelWindowController.swift

@@ -18,6 +18,7 @@ class KMConvertExcelWindowController: KMConvertBaseWindowController {
         super.initDefaultValue()
         
         self.titleLabel.stringValue = NSLocalizedString("PDF to Excel", comment: "")
+        self.setupContentHeight(height: 391+16+20)
     }
     
     override func initSettingView() -> KMConvertSettingView? {

+ 506 - 0
PDF Office/PDF Master/Class/PDFTools/Convert/View/KMConvertSettingLimitTipView.swift

@@ -0,0 +1,506 @@
+//
+//  KMConvertSettingLimitTipView.swift
+//  PDF Master
+//
+//  Created by tangchao on 2023/6/26.
+//
+
+import Cocoa
+
+class KMConvertSettingLimitTipView: NSView {
+    private var _contentView = NSView()
+    private var _iconIv = NSImageView()
+    private var _textField = NSTextField(labelWithString: "")
+    private var _funcBox = NSBox()
+    
+    private var _funcButtonVC: KMDesignButton?
+    
+    var contentView: NSView {
+        get {
+            return self._contentView
+        }
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        
+        self.initSubViews()
+        self.initDefaultValue()
+    }
+    
+    required init?(coder: NSCoder) {
+        super.init(coder: coder)
+        
+        self.initSubViews()
+        self.initDefaultValue()
+    }
+    
+    func initSubViews() {
+        self.addSubview(self.contentView)
+        
+        self.contentView.addSubview(self._iconIv)
+        self.contentView.addSubview(self._textField)
+        self.contentView.addSubview(self._funcBox)
+        
+        self._funcButtonVC = KMDesignButton(withType: .Text)
+        self._funcBox.contentView = self._funcButtonVC!.view
+        self._funcButtonVC?.stringValue = NSLocalizedString("Unlock", comment: "")
+        self._funcButtonVC?.button(type: .Text, size: .m)
+        
+        let _ = self.contentView.km_add_leading_constraint(attribute: .leading, constant: 0)
+        let _ = self.contentView.km_add_trailing_constraint(attribute: .trailing, constant: 0)
+        let _ = self.contentView.km_add_top_constraint(attribute: .top, constant: 0)
+        let _ = self.contentView.km_add_bottom_constraint(attribute: .bottom, constant: 0)
+        
+        let _ = self._iconIv.km_add_leading_constraint(attribute: .leading, constant: 5)
+        let _ = self._iconIv.km_add_centerY_constraint(attribute: .centerY, constant: 0)
+        
+        let _ = self._textField.km_add_leading_constraint(equalTo: self._iconIv, attribute: .trailing, constant: 5)
+        let _ = self._textField.km_add_centerY_constraint(equalTo: self._iconIv, attribute: .centerY, constant: 0)
+        
+        let _ = self._funcBox.km_add_leading_constraint(equalTo: self._textField, attribute: .trailing, constant: 5)
+        let _ = self._funcBox.km_add_centerY_constraint(equalTo: self._iconIv, attribute: .centerY, constant: 0)
+        let _ = self._funcBox.km_add_width_constraint(attribute: .width, constant: 60)
+        let _ = self._funcBox.km_add_height_constraint(attribute: .height, constant: 40)
+    }
+    
+    func initDefaultValue() {
+        self._iconIv.image = NSImage(named: "KMImageNameTipNormal")
+        
+        self._textField.stringValue = NSLocalizedString("Convert the first 10 pages for free", comment: "")
+        
+        self._funcBox.boxType = .custom
+        self._funcBox.titlePosition = .noTitle
+        self._funcBox.borderWidth = 0.0
+    }
+    
+}
+extension NSView {
+    public func km_add_leading_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_leading_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_trailing_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_trailing_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_left_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_left_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_right_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_right_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_top_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_top_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_bottom_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_bottom_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_width_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_width_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _ = targetV {
+            self.superview?.addConstraint(constraint)
+        } else {
+            self.addConstraint(constraint)
+        }
+        return constraint
+    }
+    
+    public func km_add_height_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_height_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _ = targetV {
+            self.superview?.addConstraint(constraint)
+        } else {
+            self.addConstraint(constraint)
+        }
+        return constraint
+    }
+    
+    public func km_add_centerX_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_centerX_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    public func km_add_centerY_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        let constraint = self.km_centerY_constraint(equalTo: targetV, attribute: a, constant: c)
+        self.superview?.addConstraint(constraint)
+        return constraint
+    }
+    
+    // MARK: - NSLayoutXAxisAnchor
+    
+    public func km_leading_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+//            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_trailing_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+//            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_left_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+//            constraint = self.leftAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.leftAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.leftAnchor.constraint(equalTo: _targetV!.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.leftAnchor.constraint(equalTo: _targetV!.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.leftAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_right_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+//            constraint = self.rightAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.rightAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.rightAnchor.constraint(equalTo: _targetV!.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.rightAnchor.constraint(equalTo: _targetV!.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.rightAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_top_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+            constraint = self.topAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+            constraint = self.topAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+//            constraint = self.topAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+            constraint = self.topAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_bottom_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+//            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_width_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+            if let _targetV = targetV {
+                constraint = self.widthAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
+            } else {
+                constraint = self.widthAnchor.constraint(equalToConstant: c)
+            }
+        } else if (a == .height) {
+            if let _targetV = targetV {
+                constraint = self.widthAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
+            } else {
+                constraint = self.widthAnchor.constraint(equalToConstant: c)
+            }
+        } else if (a == .centerX) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_height_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+            if let _targetV = targetV {
+                constraint = self.heightAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
+            } else {
+                constraint = self.heightAnchor.constraint(equalToConstant: c)
+            }
+        } else if (a == .height) {
+            if let _targetV = targetV {
+                constraint = self.heightAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
+            } else {
+                constraint = self.heightAnchor.constraint(equalToConstant: c)
+            }
+        } else if (a == .centerX) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_centerX_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        if (a == .top) {
+//            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+//            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.centerXAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.centerXAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+//            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_centerY_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        if (a == .top) {
+            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .leading) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .width) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
+        } else if (a == .height) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
+        } else if (a == .centerX) {
+//            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        } else if (a == .centerY) {
+            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    // MARK: - Private Methods
+    
+    private func _km_layout_setup() {
+        self.translatesAutoresizingMaskIntoConstraints = false
+    }
+}

+ 17 - 0
PDF Office/PDF Master/Class/PDFTools/Convert/View/KMConvertSettingView.swift

@@ -101,6 +101,23 @@ class KMConvertSettingView: KMConvertBaseView {
             }
         }
     }
+    var tipView: KMConvertSettingLimitTipView?
+    
+    override func initSubViews() {
+        super.initSubViews()
+        
+        let tipView = KMConvertSettingLimitTipView()
+        self.addSubview(tipView)
+        self.tipView = tipView
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        let width = NSWidth(self.bounds)
+        let height = NSHeight(self.bounds)
+        self.tipView?.frame = NSMakeRect(0, 16, width, 16+20+16)
+    }
     
     var pageCount = 0 {
         didSet {