Przeglądaj źródła

【PDF工具 - 打印】1、打印尺寸数据调试 2、自定义TextField完善

lizhe 2 lat temu
rodzic
commit
b2561767c4

+ 16 - 32
PDF Office/PDF Office.xcodeproj/project.pbxproj

@@ -640,12 +640,12 @@
 		AD9527DB2952EE700039D2BC /* KMPrintPage_C.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527DA2952EE700039D2BC /* KMPrintPage_C.swift */; };
 		AD9527DC2952EE700039D2BC /* KMPrintPage_C.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527DA2952EE700039D2BC /* KMPrintPage_C.swift */; };
 		AD9527DD2952EE700039D2BC /* KMPrintPage_C.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527DA2952EE700039D2BC /* KMPrintPage_C.swift */; };
-		AD9527DF29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527DE29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift */; };
-		AD9527E029543E2D0039D2BC /* KMTextFieldStepperPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527DE29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift */; };
-		AD9527E129543E2D0039D2BC /* KMTextFieldStepperPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527DE29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift */; };
-		AD9527E529543EB00039D2BC /* KMTextFieldStepperModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527E429543EB00039D2BC /* KMTextFieldStepperModel.swift */; };
-		AD9527E629543EB00039D2BC /* KMTextFieldStepperModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527E429543EB00039D2BC /* KMTextFieldStepperModel.swift */; };
-		AD9527E729543EB00039D2BC /* KMTextFieldStepperModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527E429543EB00039D2BC /* KMTextFieldStepperModel.swift */; };
+		AD9527EA2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527E92955520C0039D2BC /* KMBaseTextFieldModel.swift */; };
+		AD9527EB2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527E92955520C0039D2BC /* KMBaseTextFieldModel.swift */; };
+		AD9527EC2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527E92955520C0039D2BC /* KMBaseTextFieldModel.swift */; };
+		AD9527EE295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */; };
+		AD9527EF295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */; };
+		AD9527F0295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */; };
 		ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
 		ADB2D6E7294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
 		ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
@@ -1649,8 +1649,8 @@
 		AD9527D22952D51A0039D2BC /* KMPrintPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPresenter.swift; sourceTree = "<group>"; };
 		AD9527D62952ED970039D2BC /* KMPrintPresenter_C.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPresenter_C.swift; sourceTree = "<group>"; };
 		AD9527DA2952EE700039D2BC /* KMPrintPage_C.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPage_C.swift; sourceTree = "<group>"; };
-		AD9527DE29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMTextFieldStepperPresenter.swift; sourceTree = "<group>"; };
-		AD9527E429543EB00039D2BC /* KMTextFieldStepperModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMTextFieldStepperModel.swift; sourceTree = "<group>"; };
+		AD9527E92955520C0039D2BC /* KMBaseTextFieldModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBaseTextFieldModel.swift; sourceTree = "<group>"; };
+		AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBaseTextFieldPresenter.swift; sourceTree = "<group>"; };
 		ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPaperSetWindowController.swift; sourceTree = "<group>"; };
 		ADB2D6E5294740F30029D2B3 /* KMPrintPaperSetWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPrintPaperSetWindowController.xib; sourceTree = "<group>"; };
 		ADB2D6EC2947415E0029D2B3 /* KMPrintPaperSetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPaperSetView.swift; sourceTree = "<group>"; };
@@ -2724,22 +2724,6 @@
 			path = Presenter;
 			sourceTree = "<group>";
 		};
-		AD9527E229543E890039D2BC /* Model */ = {
-			isa = PBXGroup;
-			children = (
-				AD9527E429543EB00039D2BC /* KMTextFieldStepperModel.swift */,
-			);
-			path = Model;
-			sourceTree = "<group>";
-		};
-		AD9527E329543E8E0039D2BC /* Presenter */ = {
-			isa = PBXGroup;
-			children = (
-				AD9527DE29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift */,
-			);
-			path = Presenter;
-			sourceTree = "<group>";
-		};
 		ADB2D6E229473FF00029D2B3 /* DealPaper */ = {
 			isa = PBXGroup;
 			children = (
@@ -2777,8 +2761,6 @@
 		ADB2D6F7294882390029D2B3 /* KMTextFieldStepperView */ = {
 			isa = PBXGroup;
 			children = (
-				AD9527E329543E8E0039D2BC /* Presenter */,
-				AD9527E229543E890039D2BC /* Model */,
 				ADB2D6F8294882AE0029D2B3 /* KMTextFieldStepperView.swift */,
 				ADB2D6FC294882B70029D2B3 /* KMTextFieldStepperView.xib */,
 			);
@@ -3016,8 +2998,10 @@
 		ADD1B7002946C88300C3FFF7 /* TextField */ = {
 			isa = PBXGroup;
 			children = (
+				AD9527ED295578BD0039D2BC /* KMBaseTextFieldPresenter.swift */,
 				ADD1B7012946C8AD00C3FFF7 /* KMBaseTextField.swift */,
 				ADD1B7052946CBB600C3FFF7 /* KMBaseTextFormatter.swift */,
+				AD9527E92955520C0039D2BC /* KMBaseTextFieldModel.swift */,
 			);
 			path = TextField;
 			sourceTree = "<group>";
@@ -4467,7 +4451,6 @@
 				BB86C1ED28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
 				9F8539BE2943085A00DF644E /* KMBrowser.swift in Sources */,
 				89D9896C28FD50EF003A3E87 /* KMAnnotationCollectionViewItem.swift in Sources */,
-				AD9527E529543EB00039D2BC /* KMTextFieldStepperModel.swift in Sources */,
 				BB86C1ED28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
 				BB88E454294045B4002B3655 /* KMPDFConvertManager.swift in Sources */,
 				9FAAA332290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
@@ -4478,6 +4461,7 @@
 				9F1FE50529406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				9F1FE4CF29406E4700E952CA /* CTTabController.m in Sources */,
 				9F8539DE29470A0700DF644E /* KMTabStripView.swift in Sources */,
+				AD9527EE295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */,
 				F37322F6292DF9410013862C /* CSelfSignAnnotation.m in Sources */,
 				BB49ED1D293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift in Sources */,
 				F37322ED292DF9410013862C /* CPDFMarkupAnnotation+PDFListView.m in Sources */,
@@ -4649,6 +4633,7 @@
 				BB897224294B07960045787C /* KMWatermarkAdjectiveTopBarItemView.swift in Sources */,
 				9F1F82BC292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.swift in Sources */,
 				F34BF93F29530D02002C25A2 /* NSBezierPath+PDFListView.m in Sources */,
+				AD9527EA2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */,
 				F37322DB292DF9410013862C /* CPDFPage+PDFListView.m in Sources */,
 				F3732319292DF97D0013862C /* CPDFSelection+PDFListView.m in Sources */,
 				9F705F89291E576D005199AD /* KMTableView.swift in Sources */,
@@ -4658,7 +4643,6 @@
 				BB6DD814293486FA001F0544 /* KMSecureEncryptPasswordCellView.swift in Sources */,
 				BB897269294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
 				BB8B173C2907CDD9001C5EA5 /* NibLoadable.swift in Sources */,
-				AD9527DF29543E2D0039D2BC /* KMTextFieldStepperPresenter.swift in Sources */,
 				AD9527DB2952EE700039D2BC /* KMPrintPage_C.swift in Sources */,
 				9F8539D22943121100DF644E /* KMSegmentedBox.swift in Sources */,
 				9F1FE4DB29406E4700E952CA /* NSURL+Utils.m in Sources */,
@@ -4815,6 +4799,7 @@
 				9F1FE50629406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				9F1FE4D029406E4700E952CA /* CTTabController.m in Sources */,
 				9F8539DF29470A0700DF644E /* KMTabStripView.swift in Sources */,
+				AD9527EF295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */,
 				8942F80029260EC700389627 /* KMLeftMethodMode.swift in Sources */,
 				BB49ED1E293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift in Sources */,
 				9FA607DA28F8227500B46586 /* KMBox.swift in Sources */,
@@ -4863,7 +4848,6 @@
 				BB99ACCB292DEE6E0048AFD9 /* KMMergeTitleBar.swift in Sources */,
 				ADD1B6A629416FE800C3FFF7 /* KMOCRPresenter.swift in Sources */,
 				89D9895F28FD21E6003A3E87 /* KMAnnotationCollectionView.swift in Sources */,
-				AD9527E029543E2D0039D2BC /* KMTextFieldStepperPresenter.swift in Sources */,
 				BB897257294C559F0045787C /* KMWatermarkPropertyCreateController.swift in Sources */,
 				ADC25DFA2923BA710080A3F6 /* KMImageToPDFWindowController.swift in Sources */,
 				F37322F7292DF9410013862C /* CSelfSignAnnotation.m in Sources */,
@@ -4987,6 +4971,7 @@
 				F34BF93629530708002C25A2 /* NSImage+PDFListView.m in Sources */,
 				BB49ECFF293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
 				9F1F82EB2935D02E0092C4B4 /* KMComboBox.swift in Sources */,
+				AD9527EB2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */,
 				BB89726E294DB67D0045787C /* KMWatermarkAdjectiveBaseView.swift in Sources */,
 				89D2D2C6294972B900BFF5FE /* KMFormCellView.swift in Sources */,
 				BB897225294B07960045787C /* KMWatermarkAdjectiveTopBarItemView.swift in Sources */,
@@ -5042,7 +5027,6 @@
 				BB49ECEA293F32A400C82CA2 /* KMConvertWordSettingView.swift in Sources */,
 				F373228D292CCA650013862C /* CPDFListViewAnimatedBorderlessWindow.m in Sources */,
 				F373228D292CCA650013862C /* CPDFListViewAnimatedBorderlessWindow.m in Sources */,
-				AD9527E629543EB00039D2BC /* KMTextFieldStepperModel.swift in Sources */,
 				9F8539C729430AC400DF644E /* KMToolbarRightView.swift in Sources */,
 				BB49ECEE293F3B0D00C82CA2 /* KMConvertOCRSettingItemView.swift in Sources */,
 				9F1FE49A29406E4700E952CA /* NewTabButton.m in Sources */,
@@ -5206,7 +5190,6 @@
 				ADD1B6A729416FE800C3FFF7 /* KMOCRPresenter.swift in Sources */,
 				F3732313292DF9410013862C /* CPDFSignatureWidgetAnnotation+PDFListView.m in Sources */,
 				F3732313292DF9410013862C /* CPDFSignatureWidgetAnnotation+PDFListView.m in Sources */,
-				AD9527E129543E2D0039D2BC /* KMTextFieldStepperPresenter.swift in Sources */,
 				BB897258294C559F0045787C /* KMWatermarkPropertyCreateController.swift in Sources */,
 				F3732330292F78210013862C /* CPDFListStampAnnotation.m in Sources */,
 				BB86C1F428F54535005AD968 /* CPDFListView+KeyEvent.m in Sources */,
@@ -5293,6 +5276,7 @@
 				BB897222294AF9080045787C /* KMWatermarkAdjectiveTopBarView.swift in Sources */,
 				9F8DDF362924DA6B006CDC73 /* KMPDFToolsCollectionView.swift in Sources */,
 				ADB2D6FB294882AE0029D2B3 /* KMTextFieldStepperView.swift in Sources */,
+				AD9527F0295578BD0039D2BC /* KMBaseTextFieldPresenter.swift in Sources */,
 				9FDD0F862952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
 				BB49ED08293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
@@ -5306,6 +5290,7 @@
 				BBFE6E67293097A600142C01 /* KMPageRangePickerWindowController.swift in Sources */,
 				BB88E43D294023CB002B3655 /* KMDocumentModel.swift in Sources */,
 				BB897267294C724D0045787C /* KMWatermarkAdjectiveOutsideView.swift in Sources */,
+				AD9527EC2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */,
 				BBF38A5C294F2B760086D025 /* KMWatermarkPositionView.swift in Sources */,
 				F34BF92D295304AB002C25A2 /* NSShadow+PDFListView.m in Sources */,
 				F386D15C293E152F00C44524 /* CPDFListViewColorMenuItemView.m in Sources */,
@@ -5380,7 +5365,6 @@
 				F34BF93229530559002C25A2 /* NSBitmapImageRep+PDFListView.m in Sources */,
 				BB49ECEB293F32A400C82CA2 /* KMConvertWordSettingView.swift in Sources */,
 				ADCB98E32924776F00B51A03 /* KMBatchProcessingSizeTableCell.swift in Sources */,
-				AD9527E729543EB00039D2BC /* KMTextFieldStepperModel.swift in Sources */,
 				9F8539C829430AC400DF644E /* KMToolbarRightView.swift in Sources */,
 				BB49ECEF293F3B0D00C82CA2 /* KMConvertOCRSettingItemView.swift in Sources */,
 				9F1FE49B29406E4700E952CA /* NewTabButton.m in Sources */,

+ 98 - 18
PDF Office/PDF Office.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -528,64 +528,144 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "6563723D-0B30-471E-BE18-55E79C549716"
+            uuid = "245887AE-F6C1-46E2-AB57-0DF9537D16F8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Print/View/ChooseView/Presenter/KMPrintChoosePresenter.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "61"
+            endingLineNumber = "61"
+            landmarkName = "pageNumberAction(copies:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "47E672DA-330E-4D89-851B-9DAC61AFB30F"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextField.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "54"
-            endingLineNumber = "54"
-            landmarkName = "minValue"
+            startingLineNumber = "108"
+            endingLineNumber = "108"
+            landmarkName = "control(_:textView:doCommandBy:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "5227706B-A4ED-413F-B6C8-DDE6DB5E091A"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Tools/KMTextFieldStepperView/KMTextFieldStepperView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "21"
+            endingLineNumber = "21"
+            landmarkName = "model"
             landmarkType = "24">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "245887AE-F6C1-46E2-AB57-0DF9537D16F8"
+            uuid = "ED05C88A-5878-44E3-9004-CC4D9367D697"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextField.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "22"
+            endingLineNumber = "22"
+            landmarkName = "model"
+            landmarkType = "24">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "C171C874-D536-46E8-B15B-165267F9A995"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/View/KMPrintPaperSetView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "37"
+            endingLineNumber = "37"
+            landmarkName = "data"
+            landmarkType = "24">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "F8C86DA2-7EEB-4A5C-9345-17ADBCD984BC"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "PDF Office/Class/PDFTools/Print/View/ChooseView/Presenter/KMPrintChoosePresenter.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "61"
-            endingLineNumber = "61"
-            landmarkName = "pageNumberAction(copies:)"
+            startingLineNumber = "53"
+            endingLineNumber = "53"
+            landmarkName = "pageSetAction(_:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "47E672DA-330E-4D89-851B-9DAC61AFB30F"
+            uuid = "A7B8E3F1-4F0E-46AE-8614-B7C7D22F065E"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextField.swift"
+            filePath = "PDF Office/Class/PDFTools/Tools/KMTextFieldStepperView/KMTextFieldStepperView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "104"
-            endingLineNumber = "104"
-            landmarkName = "control(_:textView:doCommandBy:)"
+            startingLineNumber = "100"
+            endingLineNumber = "100"
+            landmarkName = "stepperAction(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "99B24BCC-866C-4FB3-8A6A-9D5490E849B7"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/Tools/KMTextFieldStepperView/KMTextFieldStepperView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "107"
+            endingLineNumber = "107"
+            landmarkName = "valueDidChange(presenter:model:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "2D6E11C7-B193-4517-879C-4417C17313D6"
+            uuid = "467431A8-418F-4B11-9D6E-6CFFE860C508"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextFormatter.swift"
+            filePath = "PDF Office/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/View/KMPrintPaperSetView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "20"
-            endingLineNumber = "20"
-            landmarkName = "isPartialStringValid(_:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:)"
+            startingLineNumber = "118"
+            endingLineNumber = "118"
+            landmarkName = "doneAction(_:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 2 - 1
PDF Office/PDF Office/Class/PDFTools/Print/View/ChooseView/KMPrintChooseView.swift

@@ -93,7 +93,7 @@ class KMPrintChooseView: NSView {
         self.printContentButton.addItems(withTitles: KMPrintContentType.allValues())
         
         
-        let model: KMTextFieldStepperModel = KMTextFieldStepperModel()
+        let model: KMBaseTextFieldModel = KMBaseTextFieldModel()
         model.minValue = 1
         model.maxValue = 100
         self.textFieldStepperView.model = model
@@ -128,6 +128,7 @@ extension KMPrintChooseView: KMPrintChooseViewAction {
         let printPaperSetWindowController: KMPrintPaperSetWindowController = KMPrintPaperSetWindowController.init(windowNibName: "KMPrintPaperSetWindowController")
         NSApp.mainWindow?.beginCriticalSheet(printPaperSetWindowController.window!)
         weak var weakSelf = self
+        printPaperSetWindowController.data = self.outputData.paper.info
         printPaperSetWindowController.completion = { window, data in
             weakSelf!.presenter.pageSetAction(data)
         }

+ 5 - 5
PDF Office/PDF Office/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/KMPrintPaperSetWindowController.swift

@@ -15,12 +15,12 @@ class KMPrintPaperSetWindowController: NSWindowController {
     
     @IBOutlet weak var printPaperSetView: KMPrintPaperSetView!
     
-    
-    
-    
     var completion: KMPrintPaperSetWindowControllerCompletion?
-    
-    
+    var data: KMPrintPaperInfo = KMPrintPaperInfo() {
+        didSet {
+            self.printPaperSetView.data = data
+        }
+    }
     
     override func windowDidLoad() {
         super.windowDidLoad()

+ 31 - 18
PDF Office/PDF Office/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/View/KMPrintPaperSetView.swift

@@ -21,18 +21,22 @@ class KMPrintPaperSetView: NSView {
     @IBOutlet weak var leftLabel: NSTextField!
     @IBOutlet weak var rightLabel: NSTextField!
 
-    @IBOutlet weak var topTextfield: NSTextField!
-    @IBOutlet weak var bottomTextField: NSTextField!
-    @IBOutlet weak var leftTextField: NSTextField!
-    @IBOutlet weak var rightTextField: NSTextField!
+    @IBOutlet weak var topTextFieldStepper: KMTextFieldStepperView!
+    @IBOutlet weak var bottomTextFieldStepper: KMTextFieldStepperView!
+    @IBOutlet weak var leftTextFieldStepper: KMTextFieldStepperView!
+    @IBOutlet weak var rightTextFieldStepper: KMTextFieldStepperView!
     
     
     @IBOutlet weak var sizeContentView: NSView!
-    @IBOutlet weak var widthLabel: NSTextField!
-    @IBOutlet weak var heightLabel: NSTextField!
+    @IBOutlet weak var widthTextField: KMBaseTextField!
+    @IBOutlet weak var heightTextField: KMBaseTextField!
     @IBOutlet weak var unitLabel: NSTextField!
     
-    var data: KMPrintPaperInfo = KMPrintPaperInfo()
+    var data: KMPrintPaperInfo = KMPrintPaperInfo() {
+        didSet {
+            self.reloadData()
+        }
+    }
     var completion: KMPrintPaperSetViewCompletion?
     deinit {
 //        self.delegate = nil
@@ -70,20 +74,29 @@ class KMPrintPaperSetView: NSView {
     func setup() {
         self.sizeButton.removeAllItems()
         self.sizeButton.addItems(withTitles: KMPrintPaperInfo.KMPaperType.allValues())
-        self.widthLabel.stringValue = self.data.size.width.description
-        self.heightLabel.stringValue = self.data.size.height.description
+        self.widthTextField.minValue = 1
+        self.widthTextField.maxValue = 2000
+        self.widthTextField.stringValue = self.data.size.width.description
+        self.widthTextField.minValue = 1
+        self.widthTextField.maxValue = 2000
+        self.heightTextField.stringValue = self.data.size.height.description
         self.reloadData()
     }
     
     //刷新界面UI 和 数据
     func reloadData() {
-        self.sizeButton.selectItem(withTitle: data.type.rawValue)
-        self.topTextfield.stringValue = self.data.inset.top.description
-        self.bottomTextField.stringValue = self.data.inset.bottom.description
-        self.leftTextField.stringValue = self.data.inset.left.description
-        self.rightTextField.stringValue = self.data.inset.right.description
+        self.sizeButton.selectItem(withTitle: self.data.type.rawValue)
+        self.topTextFieldStepper.stringValue = self.data.inset.top.description
+        self.bottomTextFieldStepper.stringValue = self.data.inset.bottom.description
+        self.leftTextFieldStepper.stringValue = self.data.inset.left.description
+        self.rightTextFieldStepper.stringValue = self.data.inset.right.description
         
         self.sizeContentView.isHidden = (self.data.type != .custom)
+        
+        if self.data.type != .custom {
+            self.widthTextField.stringValue = self.data.size.width.description
+            self.heightTextField.stringValue = self.data.size.height.description
+        }
     }
 }
 
@@ -102,10 +115,10 @@ extension KMPrintPaperSetView: KMPrintPaperSetViewAction {
     }
     
     @IBAction func doneAction(_ sender: NSButton) {
-        self.data.inset = NSEdgeInsets(top: Double(self.topTextfield.stringValue)!,
-                                       left: Double(self.leftTextField.stringValue)!,
-                                       bottom: Double(self.bottomTextField.stringValue)!,
-                                       right: Double(self.rightTextField.stringValue)!)
+        self.data.inset = NSEdgeInsets(top: Double(self.topTextFieldStepper.stringValue)!,
+                                       left: Double(self.leftTextFieldStepper.stringValue)!,
+                                       bottom: Double(self.bottomTextFieldStepper.stringValue)!,
+                                       right: Double(self.rightTextFieldStepper.stringValue)!)
         if completion != nil {
             self.completion!(self, self.data)
         }

+ 69 - 123
PDF Office/PDF Office/Class/PDFTools/Print/View/ChooseView/View/View/PaperSet/View/KMPrintPaperSetView.xib

@@ -9,22 +9,22 @@
         <customObject id="-2" userLabel="File's Owner" customClass="KMPrintPaperSetView" customModule="PDF_Office" customModuleProvider="target">
             <connections>
                 <outlet property="bottomLabel" destination="Os7-yi-IlP" id="cT4-tD-suJ"/>
-                <outlet property="bottomTextField" destination="d1W-VG-jLN" id="Lqh-6Y-320"/>
+                <outlet property="bottomTextFieldStepper" destination="Gun-bz-MWr" id="nhm-Zp-ULn"/>
                 <outlet property="contentView" destination="c22-O7-iKe" id="Ode-kK-R2X"/>
-                <outlet property="heightLabel" destination="PuB-EM-iFz" id="djF-3y-Rj1"/>
+                <outlet property="heightTextField" destination="den-HK-jOw" id="bIW-lV-yJg"/>
                 <outlet property="leftLabel" destination="c6X-xr-JKM" id="asd-Mu-5zB"/>
-                <outlet property="leftTextField" destination="0g2-mD-BSH" id="qf9-HM-sK4"/>
+                <outlet property="leftTextFieldStepper" destination="yM6-Z0-Sg6" id="GXA-eN-55p"/>
                 <outlet property="pageMaginLabel" destination="T9C-gW-of8" id="ihu-t3-cXL"/>
                 <outlet property="paperLabel" destination="loV-Ay-qGt" id="osT-6R-bVh"/>
                 <outlet property="rightLabel" destination="wAh-nP-spu" id="0oT-fH-XrV"/>
-                <outlet property="rightTextField" destination="iF9-vQ-dMT" id="m4k-On-g80"/>
+                <outlet property="rightTextFieldStepper" destination="GaD-Q4-QET" id="dNH-1c-v07"/>
                 <outlet property="sizeButton" destination="cUw-ai-P5t" id="48Z-rT-PEC"/>
                 <outlet property="sizeContentView" destination="2jE-8O-3QX" id="a5r-YI-ot5"/>
                 <outlet property="sizeLabel" destination="56j-Vu-a83" id="Sih-F6-kGf"/>
                 <outlet property="topLabel" destination="6Vs-WE-DQI" id="h7R-2J-bYJ"/>
-                <outlet property="topTextfield" destination="hmf-tD-wXD" id="oSR-e9-LlD"/>
+                <outlet property="topTextFieldStepper" destination="NzS-Tb-aO4" id="Uh2-jg-oz8"/>
                 <outlet property="unitLabel" destination="VZx-cG-FIM" id="hum-Ri-gJI"/>
-                <outlet property="widthLabel" destination="t9e-dB-xut" id="YBM-i2-1hW"/>
+                <outlet property="widthTextField" destination="SKj-kK-a8z" id="sMr-2z-oyq"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@@ -48,7 +48,7 @@
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="loV-Ay-qGt">
                                                     <rect key="frame" x="14" y="12" width="31" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="纸张" id="gKO-Fk-KSV">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <font key="font" metaFont="system"/>
                                                         <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                                         <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                                     </textFieldCell>
@@ -64,15 +64,15 @@
                                             <rect key="frame" x="0.0" y="40" width="308" height="40"/>
                                             <subviews>
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="56j-Vu-a83">
-                                                    <rect key="frame" x="14" y="12" width="44" height="16"/>
+                                                    <rect key="frame" x="14" y="12" width="41" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="大小:" id="vGZ-Ze-piK">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <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>
                                                 <popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="cUw-ai-P5t">
-                                                    <rect key="frame" x="72" y="5" width="200" height="30"/>
+                                                    <rect key="frame" x="69" y="5" width="200" height="30"/>
                                                     <constraints>
                                                         <constraint firstAttribute="height" constant="30" id="CRn-Nt-8lN"/>
                                                         <constraint firstAttribute="width" constant="200" id="glT-C0-wNH"/>
@@ -104,30 +104,6 @@
                                         <customView translatesAutoresizingMaskIntoConstraints="NO" id="2jE-8O-3QX">
                                             <rect key="frame" x="0.0" y="0.0" width="308" height="40"/>
                                             <subviews>
-                                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="t9e-dB-xut">
-                                                    <rect key="frame" x="72" y="5" width="70" height="30"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="height" constant="30" id="7XE-Px-SXL"/>
-                                                        <constraint firstAttribute="width" constant="70" id="OGr-Jv-R9C"/>
-                                                    </constraints>
-                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="30B-4T-oyw">
-                                                        <font key="font" metaFont="system"/>
-                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                    </textFieldCell>
-                                                </textField>
-                                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PuB-EM-iFz">
-                                                    <rect key="frame" x="167" y="5" width="70" height="30"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="width" constant="70" id="J5U-kt-JAg"/>
-                                                        <constraint firstAttribute="height" constant="30" id="tRM-l1-YP7"/>
-                                                    </constraints>
-                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="Yx4-Vx-VQC">
-                                                        <font key="font" metaFont="system"/>
-                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                    </textFieldCell>
-                                                </textField>
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="thd-9B-LV1">
                                                     <rect key="frame" x="148" y="12" width="13" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="X" id="R0t-kw-IIK">
@@ -137,23 +113,38 @@
                                                     </textFieldCell>
                                                 </textField>
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VZx-cG-FIM">
-                                                    <rect key="frame" x="243" y="12" width="27" height="16"/>
+                                                    <rect key="frame" x="239" y="12" width="27" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="mm" id="qkU-6x-3At">
                                                         <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>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="SKj-kK-a8z" customClass="KMBaseTextField" customModule="PDF_Office" customModuleProvider="target">
+                                                    <rect key="frame" x="72" y="10" width="70" height="21"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="21" id="HDh-gN-sOe"/>
+                                                        <constraint firstAttribute="width" constant="70" id="viQ-q9-8Nz"/>
+                                                    </constraints>
+                                                </customView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="den-HK-jOw" customClass="KMBaseTextField" customModule="PDF_Office" customModuleProvider="target">
+                                                    <rect key="frame" x="167" y="10" width="70" height="21"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="70" id="Dtn-zc-NFo"/>
+                                                        <constraint firstAttribute="height" constant="21" id="dXZ-ed-y8H"/>
+                                                    </constraints>
+                                                </customView>
                                             </subviews>
                                             <constraints>
-                                                <constraint firstItem="thd-9B-LV1" firstAttribute="leading" secondItem="t9e-dB-xut" secondAttribute="trailing" constant="8" id="CTD-bA-VUS"/>
                                                 <constraint firstItem="thd-9B-LV1" firstAttribute="centerY" secondItem="2jE-8O-3QX" secondAttribute="centerY" id="EMN-y7-qcO"/>
-                                                <constraint firstItem="t9e-dB-xut" firstAttribute="centerY" secondItem="2jE-8O-3QX" secondAttribute="centerY" id="Lsx-8s-NzG"/>
+                                                <constraint firstItem="den-HK-jOw" firstAttribute="centerY" secondItem="2jE-8O-3QX" secondAttribute="centerY" id="MpU-ka-sja"/>
+                                                <constraint firstItem="VZx-cG-FIM" firstAttribute="leading" secondItem="den-HK-jOw" secondAttribute="trailing" constant="4" id="O6U-Qk-My3"/>
+                                                <constraint firstItem="den-HK-jOw" firstAttribute="leading" secondItem="thd-9B-LV1" secondAttribute="trailing" constant="8" id="R3V-fg-Pjo"/>
                                                 <constraint firstAttribute="height" constant="40" id="Ueg-ZS-Ftz"/>
                                                 <constraint firstItem="VZx-cG-FIM" firstAttribute="centerY" secondItem="2jE-8O-3QX" secondAttribute="centerY" id="X26-Tk-dPI"/>
-                                                <constraint firstItem="PuB-EM-iFz" firstAttribute="leading" secondItem="thd-9B-LV1" secondAttribute="trailing" constant="8" id="fJm-oh-sGJ"/>
-                                                <constraint firstItem="VZx-cG-FIM" firstAttribute="leading" secondItem="PuB-EM-iFz" secondAttribute="trailing" constant="8" id="kQ5-pP-Xi7"/>
-                                                <constraint firstItem="PuB-EM-iFz" firstAttribute="centerY" secondItem="2jE-8O-3QX" secondAttribute="centerY" id="xJZ-91-Ldz"/>
+                                                <constraint firstItem="thd-9B-LV1" firstAttribute="leading" secondItem="SKj-kK-a8z" secondAttribute="trailing" constant="8" id="hXl-dS-nuy"/>
+                                                <constraint firstItem="thd-9B-LV1" firstAttribute="centerX" secondItem="2jE-8O-3QX" secondAttribute="centerX" id="v27-5I-yz4"/>
+                                                <constraint firstItem="SKj-kK-a8z" firstAttribute="centerY" secondItem="2jE-8O-3QX" secondAttribute="centerY" id="xZ8-Ql-OEZ"/>
                                             </constraints>
                                         </customView>
                                     </subviews>
@@ -161,7 +152,6 @@
                                         <constraint firstAttribute="height" constant="120" id="0UU-Ue-mU0"/>
                                         <constraint firstItem="2jE-8O-3QX" firstAttribute="leading" secondItem="qWg-vA-yla" secondAttribute="leading" id="4zW-ie-Nbf"/>
                                         <constraint firstItem="WAS-zE-Zxe" firstAttribute="top" secondItem="qWg-vA-yla" secondAttribute="top" id="5yU-sR-7zN"/>
-                                        <constraint firstItem="t9e-dB-xut" firstAttribute="leading" secondItem="cUw-ai-P5t" secondAttribute="leading" id="Drf-u5-jqh"/>
                                         <constraint firstItem="WAS-zE-Zxe" firstAttribute="leading" secondItem="qWg-vA-yla" secondAttribute="leading" id="Jgs-N1-dG8"/>
                                         <constraint firstItem="Vfl-Fc-bAJ" firstAttribute="top" secondItem="WAS-zE-Zxe" secondAttribute="bottom" id="QaD-Wo-1fH"/>
                                         <constraint firstAttribute="trailing" secondItem="WAS-zE-Zxe" secondAttribute="trailing" id="ZWG-u8-bev"/>
@@ -180,7 +170,7 @@
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T9C-gW-of8">
                                                     <rect key="frame" x="14" y="12" width="44" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="页边距" id="0nb-ug-BX4">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <font key="font" metaFont="system"/>
                                                         <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                                         <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                                     </textFieldCell>
@@ -196,136 +186,92 @@
                                             <rect key="frame" x="0.0" y="40" width="308" height="40"/>
                                             <subviews>
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6Vs-WE-DQI">
-                                                    <rect key="frame" x="14" y="12" width="31" height="16"/>
+                                                    <rect key="frame" x="14" y="12" width="28" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="上:" id="hoQ-Lp-0wv">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <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="Os7-yi-IlP">
-                                                    <rect key="frame" x="152" y="12" width="31" height="16"/>
+                                                    <rect key="frame" x="152" y="12" width="28" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="下:" id="NXJ-UL-SSh">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <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 verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hmf-tD-wXD">
-                                                    <rect key="frame" x="59" y="5" width="70" height="30"/>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="NzS-Tb-aO4" customClass="KMTextFieldStepperView" customModule="PDF_Office" customModuleProvider="target">
+                                                    <rect key="frame" x="56" y="5" width="80" height="30"/>
                                                     <constraints>
-                                                        <constraint firstAttribute="height" constant="30" id="B6n-sv-fSx"/>
-                                                        <constraint firstAttribute="width" constant="70" id="awd-Tn-4ZI"/>
+                                                        <constraint firstAttribute="height" constant="30" id="DNQ-Cf-TWt"/>
+                                                        <constraint firstAttribute="width" constant="80" id="NC1-RH-ZpR"/>
                                                     </constraints>
-                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="umV-2h-7rt">
-                                                        <font key="font" metaFont="system"/>
-                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                    </textFieldCell>
-                                                </textField>
-                                                <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="58a-WC-0gQ">
-                                                    <rect key="frame" x="126" y="6" width="19" height="28"/>
-                                                    <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="66E-XI-Uhs"/>
-                                                </stepper>
-                                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="d1W-VG-jLN">
-                                                    <rect key="frame" x="197" y="5" width="70" height="30"/>
+                                                </customView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Gun-bz-MWr" customClass="KMTextFieldStepperView" customModule="PDF_Office" customModuleProvider="target">
+                                                    <rect key="frame" x="194" y="5" width="80" height="30"/>
                                                     <constraints>
-                                                        <constraint firstAttribute="height" constant="30" id="DUi-wO-nRW"/>
-                                                        <constraint firstAttribute="width" constant="70" id="jBy-Y1-CAd"/>
+                                                        <constraint firstAttribute="width" constant="80" id="c3H-QJ-ggd"/>
+                                                        <constraint firstAttribute="height" constant="30" id="xmM-4p-phw"/>
                                                     </constraints>
-                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="sq4-mz-z8U">
-                                                        <font key="font" metaFont="system"/>
-                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                    </textFieldCell>
-                                                </textField>
-                                                <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DBp-HY-GJr">
-                                                    <rect key="frame" x="264" y="6" width="19" height="28"/>
-                                                    <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="cnh-IZ-7cQ"/>
-                                                </stepper>
+                                                </customView>
                                             </subviews>
                                             <constraints>
-                                                <constraint firstItem="d1W-VG-jLN" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="0fU-ym-iuc"/>
-                                                <constraint firstItem="58a-WC-0gQ" firstAttribute="leading" secondItem="hmf-tD-wXD" secondAttribute="trailing" id="3DP-wu-nB0"/>
                                                 <constraint firstItem="6Vs-WE-DQI" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="A1u-NL-u3a"/>
-                                                <constraint firstItem="DBp-HY-GJr" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="LDC-hO-gFx"/>
-                                                <constraint firstItem="DBp-HY-GJr" firstAttribute="leading" secondItem="d1W-VG-jLN" secondAttribute="trailing" id="PEy-pU-7TV"/>
-                                                <constraint firstItem="d1W-VG-jLN" firstAttribute="leading" secondItem="Os7-yi-IlP" secondAttribute="trailing" constant="16" id="RVf-Mv-l4z"/>
+                                                <constraint firstItem="NzS-Tb-aO4" firstAttribute="leading" secondItem="6Vs-WE-DQI" secondAttribute="trailing" constant="16" id="VYH-OW-bIl"/>
+                                                <constraint firstItem="NzS-Tb-aO4" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="XjU-P9-p1h"/>
                                                 <constraint firstItem="6Vs-WE-DQI" firstAttribute="leading" secondItem="Jhn-Qr-I3H" secondAttribute="leading" constant="16" id="bl0-Hj-VeA"/>
-                                                <constraint firstItem="58a-WC-0gQ" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="fDb-de-zpU"/>
-                                                <constraint firstItem="hmf-tD-wXD" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="hbw-hI-8YC"/>
+                                                <constraint firstItem="Gun-bz-MWr" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="eGy-Gr-2da"/>
+                                                <constraint firstItem="Gun-bz-MWr" firstAttribute="leading" secondItem="Os7-yi-IlP" secondAttribute="trailing" constant="16" id="idu-gL-ZGH"/>
                                                 <constraint firstAttribute="height" constant="40" id="jNf-mf-ZJK"/>
                                                 <constraint firstItem="Os7-yi-IlP" firstAttribute="leading" secondItem="Jhn-Qr-I3H" secondAttribute="centerX" id="ocO-XX-wpx"/>
                                                 <constraint firstItem="Os7-yi-IlP" firstAttribute="centerY" secondItem="Jhn-Qr-I3H" secondAttribute="centerY" id="qbx-4N-cfD"/>
-                                                <constraint firstItem="hmf-tD-wXD" firstAttribute="leading" secondItem="6Vs-WE-DQI" secondAttribute="trailing" constant="16" id="tRC-AU-aWU"/>
                                             </constraints>
                                         </customView>
                                         <customView translatesAutoresizingMaskIntoConstraints="NO" id="HgZ-Xb-Z8O">
                                             <rect key="frame" x="0.0" y="0.0" width="308" height="40"/>
                                             <subviews>
                                                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c6X-xr-JKM">
-                                                    <rect key="frame" x="14" y="12" width="31" height="16"/>
+                                                    <rect key="frame" x="14" y="12" width="28" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="左:" id="bFd-55-WYT">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <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="wAh-nP-spu">
-                                                    <rect key="frame" x="152" y="12" width="31" height="16"/>
+                                                    <rect key="frame" x="152" y="12" width="28" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="右:" id="pDY-9v-80d">
-                                                        <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                        <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 verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iF9-vQ-dMT">
-                                                    <rect key="frame" x="197" y="5" width="70" height="30"/>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="yM6-Z0-Sg6" customClass="KMTextFieldStepperView" customModule="PDF_Office" customModuleProvider="target">
+                                                    <rect key="frame" x="56" y="5" width="80" height="30"/>
                                                     <constraints>
-                                                        <constraint firstAttribute="width" constant="70" id="HDf-V9-qdp"/>
-                                                        <constraint firstAttribute="height" constant="30" id="IkE-3q-QTM"/>
+                                                        <constraint firstAttribute="height" constant="30" id="WTn-Qh-TD4"/>
+                                                        <constraint firstAttribute="width" constant="80" id="qvP-BE-L9U"/>
                                                     </constraints>
-                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="9he-Ll-Pe2">
-                                                        <font key="font" metaFont="system"/>
-                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                    </textFieldCell>
-                                                </textField>
-                                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0g2-mD-BSH">
-                                                    <rect key="frame" x="59" y="5" width="70" height="30"/>
+                                                </customView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="GaD-Q4-QET" customClass="KMTextFieldStepperView" customModule="PDF_Office" customModuleProvider="target">
+                                                    <rect key="frame" x="194" y="5" width="80" height="30"/>
                                                     <constraints>
-                                                        <constraint firstAttribute="width" constant="70" id="hoO-SF-0XI"/>
-                                                        <constraint firstAttribute="height" constant="30" id="vrr-av-ayh"/>
+                                                        <constraint firstAttribute="height" constant="30" id="DnU-G2-n8U"/>
+                                                        <constraint firstAttribute="width" constant="80" id="aQk-vd-Jot"/>
                                                     </constraints>
-                                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="wsw-xg-SgL">
-                                                        <font key="font" metaFont="system"/>
-                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                                    </textFieldCell>
-                                                </textField>
-                                                <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ol4-sI-6AH">
-                                                    <rect key="frame" x="126" y="6" width="19" height="28"/>
-                                                    <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="004-jv-NXQ"/>
-                                                </stepper>
-                                                <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ta4-wJ-h1D">
-                                                    <rect key="frame" x="264" y="6" width="19" height="28"/>
-                                                    <stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="SeH-3E-7H9"/>
-                                                </stepper>
+                                                </customView>
                                             </subviews>
                                             <constraints>
-                                                <constraint firstItem="Ol4-sI-6AH" firstAttribute="leading" secondItem="0g2-mD-BSH" secondAttribute="trailing" id="0vV-jL-O3K"/>
                                                 <constraint firstItem="c6X-xr-JKM" firstAttribute="leading" secondItem="HgZ-Xb-Z8O" secondAttribute="leading" constant="16" id="1sw-bx-pv5"/>
-                                                <constraint firstItem="Ta4-wJ-h1D" firstAttribute="leading" secondItem="iF9-vQ-dMT" secondAttribute="trailing" id="3Ig-FD-YRT"/>
-                                                <constraint firstItem="Ol4-sI-6AH" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="4Hz-EE-1Jb"/>
-                                                <constraint firstItem="iF9-vQ-dMT" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="9rK-K0-Qnl"/>
-                                                <constraint firstItem="Ta4-wJ-h1D" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="IS2-Ih-d2G"/>
-                                                <constraint firstItem="0g2-mD-BSH" firstAttribute="leading" secondItem="c6X-xr-JKM" secondAttribute="trailing" constant="16" id="UZh-rj-g9H"/>
-                                                <constraint firstItem="0g2-mD-BSH" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="YEJ-KE-bSg"/>
+                                                <constraint firstItem="GaD-Q4-QET" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="T37-sP-JWQ"/>
                                                 <constraint firstAttribute="height" constant="40" id="b8T-jA-K2N"/>
                                                 <constraint firstItem="c6X-xr-JKM" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="bPy-ki-GRm"/>
-                                                <constraint firstItem="iF9-vQ-dMT" firstAttribute="leading" secondItem="wAh-nP-spu" secondAttribute="trailing" constant="16" id="eBx-GW-Cms"/>
+                                                <constraint firstItem="yM6-Z0-Sg6" firstAttribute="leading" secondItem="c6X-xr-JKM" secondAttribute="trailing" constant="16" id="gFB-6K-cqr"/>
+                                                <constraint firstItem="yM6-Z0-Sg6" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="jHt-sl-Uuk"/>
                                                 <constraint firstItem="wAh-nP-spu" firstAttribute="centerY" secondItem="HgZ-Xb-Z8O" secondAttribute="centerY" id="jlk-SJ-BlN"/>
                                                 <constraint firstItem="wAh-nP-spu" firstAttribute="leading" secondItem="HgZ-Xb-Z8O" secondAttribute="centerX" id="kHs-Lp-gUz"/>
+                                                <constraint firstItem="GaD-Q4-QET" firstAttribute="leading" secondItem="wAh-nP-spu" secondAttribute="trailing" constant="16" id="kXK-mL-5Ip"/>
                                             </constraints>
                                         </customView>
                                     </subviews>
@@ -367,7 +313,7 @@
                                             </constraints>
                                             <buttonCell key="cell" type="square" title="取消" bezelStyle="shadowlessSquare" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="aMO-k8-KRy">
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                <font key="font" size="13" name=".PingFangSC-Regular"/>
+                                                <font key="font" metaFont="system"/>
                                             </buttonCell>
                                             <connections>
                                                 <action selector="cancelAction:" target="-2" id="UnX-O3-Cnk"/>

+ 13 - 9
PDF Office/PDF Office/Class/PDFTools/Tools/KMTextFieldStepperView/KMTextFieldStepperView.swift

@@ -15,24 +15,28 @@ class KMTextFieldStepperView: NSView, NSTextFieldDelegate {
     @IBOutlet weak var inputTextField: KMBaseTextField!
     @IBOutlet weak var stepper: NSStepper!
     
-    var presenter: KMTextFieldStepperPresenter = KMTextFieldStepperPresenter()
-    var model: KMTextFieldStepperModel = KMTextFieldStepperModel() {
+    var presenter: KMBaseTextFieldPresenter = KMBaseTextFieldPresenter()
+    var model: KMBaseTextFieldModel = KMBaseTextFieldModel() {
         didSet {
             self.presenter.model = model
-            self.inputTextField.minValue = model.minValue
-            self.inputTextField.maxValue = model.maxValue
+            self.inputTextField.model = model
         }
     }
     var valueDidChange: KMTextFieldStepperViewValueDidChange?
 
-    var stringValue: String? {
-        didSet {
-            self.inputTextField.stringValue = stringValue!
+    var stringValue: String {
+        set {
+            self.stepper.stringValue = newValue
+            self.inputTextField.stringValue = newValue
+        }
+        get {
+            return self.inputTextField.stringValue
         }
     }
     var isEnabled: Bool = true {
         didSet {
             self.inputTextField.isEnabled = isEnabled
+            self.stepper.isEnabled = isEnabled
         }
     }
     
@@ -97,8 +101,8 @@ extension KMTextFieldStepperView: KMTextFieldStepperViewAction {
     }
 }
 
-extension KMTextFieldStepperView: KMTextFieldStepperPresenterDelegate {
-    func valueDidChange(presenter: KMTextFieldStepperPresenter, model: KMTextFieldStepperModel) {
+extension KMTextFieldStepperView: KMBaseTextFieldPresenterDelegate {
+    func valueDidChange(presenter: KMBaseTextFieldPresenter, model: KMBaseTextFieldModel) {
         self.reloadData()
         if self.valueDidChange != nil {
             self.valueDidChange!(self, self.model.stringValue)

+ 0 - 41
PDF Office/PDF Office/Class/PDFTools/Tools/KMTextFieldStepperView/Presenter/KMTextFieldStepperPresenter.swift

@@ -1,41 +0,0 @@
-//
-//  KMTextFieldStepperPresenter.swift
-//  PDF Office
-//
-//  Created by lizhe on 2022/12/22.
-//
-
-import Cocoa
-
-class KMTextFieldStepperPresenter: NSObject {
-    var model: KMTextFieldStepperModel = KMTextFieldStepperModel()
-    var delegate: KMTextFieldStepperPresenterDelegate?
-    func initPresenter(delegate: KMTextFieldStepperPresenterDelegate, model: KMTextFieldStepperModel) {
-        self.delegate = delegate
-        self.model = model
-        if self.delegate != nil {
-            self.delegate?.valueDidChange(presenter: self, model: self.model)
-        }
-    }
-}
-
-extension KMTextFieldStepperPresenter: KMTextFieldStepperPresenterProtocol {
-    func changeValue(value: String) {
-        self.model.value = Float(value) ?? 0
-
-        if self.delegate != nil {
-            self.delegate?.valueDidChange(presenter: self, model: self.model)
-        }
-    }
-}
-
-
-protocol KMTextFieldStepperPresenterDelegate: AnyObject {
-    func valueDidChange(presenter: KMTextFieldStepperPresenter, model: KMTextFieldStepperModel)
-}
-
-protocol KMTextFieldStepperPresenterProtocol: AnyObject {
-    func changeValue(value: String)
-}
-
-protocol KMTextFieldStepperPresenterPrivate {}

+ 33 - 19
PDF Office/PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextField.swift

@@ -11,69 +11,71 @@ typealias KMBaseTextFieldTextDidEndEditing = (_ textField: NSTextField) -> Void
 typealias KMBaseTextFieldTextTextDidChange = (_ textField: NSTextField) -> Void
 typealias KMBaseTextFieldTextTextDidBeginEditing = (_ textField: NSTextField) -> Void
 
-enum KMTextFieldInputType {
-    case none
-    case int //整形
-    case float //带一位小数点
-    case percent //带百分号
-}
-
 class KMBaseTextField: NSView {
     var textDidEndEditing: KMBaseTextFieldTextDidEndEditing?
     var textDidChange: KMBaseTextFieldTextTextDidChange?
     var textDidBeginEditing: KMBaseTextFieldTextTextDidBeginEditing?
-
+    
+    var presenter: KMBaseTextFieldPresenter = KMBaseTextFieldPresenter()
+    var model: KMBaseTextFieldModel = KMBaseTextFieldModel() {
+        didSet {
+            self.textFormatter.model = model
+        }
+    }
     private lazy var textField: NSTextField = NSTextField()
-    var stringValue: String? {
+    var stringValue: String = "" {
         didSet {
-            self.textField.stringValue = stringValue!
+            self.textField.stringValue = stringValue
+            self.model.value = Float(stringValue) ?? 0
         }
     }
     var placeholderString: String? {
         didSet {
             self.textField.placeholderString = placeholderString!
+            self.model.placeholderString = placeholderString!
         }
     }
     var isEnabled: Bool? {
         didSet {
             self.textField.isEnabled = isEnabled!
+            self.model.isEnabled = isEnabled!
         }
     }
     var minLen: Int? {
         didSet {
-            self.textFormatter.minLen = minLen!
+            self.model.minLen = minLen!
         }
     }
     var maxLen: Int? {
         didSet {
-            self.textFormatter.maxLen = maxLen!
+            self.model.maxLen = maxLen!
         }
     }
     var minValue: Int? {
         didSet {
-            self.textFormatter.minValue = minValue!
+            self.model.minValue = minValue!
         }
     }
     var maxValue: Int? {
         didSet {
-            self.textFormatter.maxValue = maxValue!
+            self.model.maxValue = maxValue!
         }
     }
 
     var onlyNumber: Bool? {
         didSet {
-            self.textFormatter.onlyNumber = onlyNumber!
+            self.model.onlyNumber = onlyNumber!
         }
     }
 
-    var inputType: KMTextFieldInputType? {
+    var inputType: KMBaseTextFieldInputType? {
         didSet {
             if (inputType == .int) {
-                self.textFormatter.specialChart = "-"
+                self.model.specialChart = "-"
             } else if (inputType == .float) {
-                self.textFormatter.specialChart = ".-"
+                self.model.specialChart = ".-"
             } else if (inputType == .percent) {
-                self.textFormatter.specialChart = "%"
+                self.model.specialChart = "%"
             }
         }
     }
@@ -90,6 +92,8 @@ class KMBaseTextField: NSView {
         self.textField.updateConstraintsForSubtreeIfNeeded()
         self.textField.formatter = self.textFormatter
         self.textField.delegate = self
+        self.textFormatter.model = self.model
+        self.presenter.initPresenter(delegate: self, model: self.model)
     }
 }
 
@@ -114,6 +118,8 @@ extension KMBaseTextField: NSTextFieldDelegate {
                 
     func controlTextDidChange(_ obj: Notification) {
         print("controlTextDidChange")
+        self.presenter.changeValue(value: self.textField.stringValue)
+        
         if self.textDidEndEditing != nil {
             self.textDidEndEditing!(self.textField)
         }
@@ -121,6 +127,8 @@ extension KMBaseTextField: NSTextFieldDelegate {
     
     func controlTextDidEndEditing(_ obj: Notification) {
         print("controlTextDidEndEditing")
+        self.presenter.changeValue(value: self.textField.stringValue)
+        
         if self.textDidEndEditing != nil {
             self.textDidEndEditing!(self.textField)
         }
@@ -139,3 +147,9 @@ extension KMBaseTextField: NSTextFieldDelegate {
     }
 }
 
+extension KMBaseTextField: KMBaseTextFieldPresenterDelegate {
+    func valueDidChange(presenter: KMBaseTextFieldPresenter, model: KMBaseTextFieldModel) {
+        self.textField.stringValue = model.stringValue
+    }
+}
+

+ 28 - 24
PDF Office/PDF Office/Class/PDFTools/Tools/KMTextFieldStepperView/Model/KMTextFieldStepperModel.swift

@@ -1,50 +1,52 @@
 //
-//  KMTextFieldStepperModel.swift
+//  KMBaseTextFieldModel.swift
 //  PDF Office
 //
-//  Created by lizhe on 2022/12/22.
+//  Created by lizhe on 2022/12/23.
 //
 
 import Cocoa
 
-enum TextFieldStepperValueType {
-    case int // 整形
-    case float_1 //浮点型带一位小数
-    case float_2 //浮点型带二位小数
-    case percent //百分比 整形
-}
-
-enum TextFieldStepperUnit {
+enum KMBaseTextFieldUnit {
     case mm // 毫米
     case cm // 厘米
     case inch // 英寸
 }
 
+enum KMBaseTextFieldInputType {
+    case none
+    case int //整形
+    case float //带一位小数点
+    case float_2 //带二位小数点
+    case percent //带百分号
+}
 
-class KMTextFieldStepperModel: NSObject {
+class KMBaseTextFieldModel: NSObject {
+    
     var value: Float = 1.0
     var stringValue: String {
-        return self.valueConversion(value: self.value, type: self.valueType)
+        return self.valueConversion(value: self.value, type: self.inputType)
     }
-    var valueType: TextFieldStepperValueType = .int
     
-    var placeholderString: String?
+    var placeholderString: String = ""
     var isEnabled: Bool?
-    var minLen: Int?
-    var maxLen: Int?
-    var minValue: Int?
-    var maxValue: Int?
-    var onlyNumber: Bool?
-    var inputType: KMTextFieldInputType?
+    var minLen: Int? = 0
+    var maxLen: Int = Int.max
+    var minValue: Int = Int.min
+    var maxValue: Int = Int.max
+    var onlyNumber: Bool = true
+    var inputType: KMBaseTextFieldInputType = .int
+    var specialChart: String = ""
 }
 
-extension  KMTextFieldStepperModel {
+
+extension  KMBaseTextFieldModel {
     /**
      @abstract 单位转换
      @value 转换值float  (方便转换)  像素
      @unit 转换类型
      */
-    func unitConversion(value: Float, unit: TextFieldStepperUnit) -> Float {
+    func unitConversion(value: Float, unit: KMBaseTextFieldUnit) -> Float {
         var scale: Float = 1.0
         var result = value
         
@@ -66,18 +68,20 @@ extension  KMTextFieldStepperModel {
      @value 转换值float  (方便转换)  参数
      @type 转换类型
      */
-    func valueConversion(value: Float, type: TextFieldStepperValueType) -> String {
+    func valueConversion(value: Float, type: KMBaseTextFieldInputType) -> String {
         var string: NSString
         
         switch type {
         case .int:
             string = NSString(format: "%.0f", value)
-        case .float_1:
+        case .float:
             string = NSString(format: "%.1f", value)
         case .float_2:
             string = NSString(format: "%.2f", value)
         case .percent:
             string = NSString(format: "%.0f%", value)
+        case .none:
+            string = NSString(format: "%@", value)
         }
 
         return string as String

+ 42 - 0
PDF Office/PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextFieldPresenter.swift

@@ -0,0 +1,42 @@
+//
+//  KMBaseTextFieldPresenter.swift
+//  PDF Office
+//
+//  Created by lizhe on 2022/12/23.
+//
+
+import Cocoa
+
+class KMBaseTextFieldPresenter: NSObject {
+    var model: KMBaseTextFieldModel = KMBaseTextFieldModel()
+    var delegate: KMBaseTextFieldPresenterDelegate?
+    func initPresenter(delegate: KMBaseTextFieldPresenterDelegate, model: KMBaseTextFieldModel) {
+        self.delegate = delegate
+        self.model = model
+        if self.delegate != nil {
+            self.delegate?.valueDidChange(presenter: self, model: self.model)
+        }
+    }
+}
+
+extension KMBaseTextFieldPresenter: KMBaseTextFieldPresenterProtocol {
+    func changeValue(value: String) {
+        self.model.value = Float(min(max(Int(value) ?? 0, model.minValue),model.maxValue))
+
+        if self.delegate != nil {
+            self.delegate?.valueDidChange(presenter: self, model: self.model)
+        }
+    }
+}
+
+
+protocol KMBaseTextFieldPresenterDelegate: AnyObject {
+    func valueDidChange(presenter: KMBaseTextFieldPresenter, model: KMBaseTextFieldModel)
+}
+
+protocol KMBaseTextFieldPresenterProtocol: AnyObject {
+    func changeValue(value: String)
+}
+
+protocol KMBaseTextFieldPresenterPrivate {}
+

+ 8 - 12
PDF Office/PDF Office/Class/PDFTools/Tools/TextField/KMBaseTextFormatter.swift

@@ -8,30 +8,26 @@
 import Cocoa
 
 class KMBaseTextFormatter: NumberFormatter {
-    var minLen: Int? = 0
-    var maxLen: Int = Int.max
-    var minValue: Int = Int.min
-    var maxValue: Int = Int.max
-    var onlyNumber: Bool = true
-    var specialChart: String = ""
+    var model: KMBaseTextFieldModel = KMBaseTextFieldModel()
 
     override func isPartialStringValid(_ partialStringPtr: AutoreleasingUnsafeMutablePointer<NSString>, proposedSelectedRange proposedSelRangePtr: NSRangePointer?, originalString origString: String, originalSelectedRange origSelRange: NSRange, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
+        let data = self.model
         let partialString = partialStringPtr.pointee
         if partialString.debugDescription.isEmpty {
-            return false
+            return true
         }
-        if (self.onlyNumber) {
+        if (data.onlyNumber) {
             var regex: NSString = "^[0123456789.]*$"
-            if !self.specialChart.debugDescription.isEmpty {
-                regex = NSString(format: "^[0123456789%@]*$", self.specialChart)
+            if !data.specialChart.debugDescription.isEmpty {
+                regex = NSString(format: "^[0123456789%@]*$", data.specialChart)
             }
             let predicate = NSPredicate.init(format: "SELF MATCHES %@", regex)
             if !predicate.evaluate(with: partialString) {
                 return false
             }
 
-            if (Int(partialString.debugDescription)! < self.minValue ||
-                Int(partialString.debugDescription)! > self.maxValue) {
+            if (Int(partialString.debugDescription)! < data.minValue ||
+                Int(partialString.debugDescription)! > data.maxValue) {
                 return false
             }
         }