Browse Source

【UI替换】编辑工具 - 安全 添加密码,删除密码 UI

lizhe 1 year ago
parent
commit
37361466b0

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

@@ -1828,6 +1828,30 @@
 		ADE787AE2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */; };
 		ADE787AF2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */; };
 		ADE787B02AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */; };
+		ADE86A782B0221E100414DFA /* KMSecurityWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A762B0221E100414DFA /* KMSecurityWindowController.swift */; };
+		ADE86A792B0221E100414DFA /* KMSecurityWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A762B0221E100414DFA /* KMSecurityWindowController.swift */; };
+		ADE86A7A2B0221E100414DFA /* KMSecurityWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A762B0221E100414DFA /* KMSecurityWindowController.swift */; };
+		ADE86A7B2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A772B0221E100414DFA /* KMSecurityWindowController.xib */; };
+		ADE86A7C2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A772B0221E100414DFA /* KMSecurityWindowController.xib */; };
+		ADE86A7D2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A772B0221E100414DFA /* KMSecurityWindowController.xib */; };
+		ADE86A802B02220700414DFA /* KMSecurityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A7F2B02220700414DFA /* KMSecurityView.swift */; };
+		ADE86A812B02220700414DFA /* KMSecurityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A7F2B02220700414DFA /* KMSecurityView.swift */; };
+		ADE86A822B02220700414DFA /* KMSecurityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A7F2B02220700414DFA /* KMSecurityView.swift */; };
+		ADE86A842B0222B300414DFA /* KMSecurityView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A832B0222B300414DFA /* KMSecurityView.xib */; };
+		ADE86A852B0222B300414DFA /* KMSecurityView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A832B0222B300414DFA /* KMSecurityView.xib */; };
+		ADE86A862B0222B300414DFA /* KMSecurityView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A832B0222B300414DFA /* KMSecurityView.xib */; };
+		ADE86A8A2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A882B02269400414DFA /* KMRemovePasswordWindowController.swift */; };
+		ADE86A8B2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A882B02269400414DFA /* KMRemovePasswordWindowController.swift */; };
+		ADE86A8C2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A882B02269400414DFA /* KMRemovePasswordWindowController.swift */; };
+		ADE86A8D2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A892B02269400414DFA /* KMRemovePasswordWindowController.xib */; };
+		ADE86A8E2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A892B02269400414DFA /* KMRemovePasswordWindowController.xib */; };
+		ADE86A8F2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A892B02269400414DFA /* KMRemovePasswordWindowController.xib */; };
+		ADE86A922B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A912B0226AD00414DFA /* KMRemovePasswordView.swift */; };
+		ADE86A932B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A912B0226AD00414DFA /* KMRemovePasswordView.swift */; };
+		ADE86A942B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE86A912B0226AD00414DFA /* KMRemovePasswordView.swift */; };
+		ADE86A962B0226BB00414DFA /* KMRemovePasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A952B0226BB00414DFA /* KMRemovePasswordView.xib */; };
+		ADE86A972B0226BB00414DFA /* KMRemovePasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A952B0226BB00414DFA /* KMRemovePasswordView.xib */; };
+		ADE86A982B0226BB00414DFA /* KMRemovePasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE86A952B0226BB00414DFA /* KMRemovePasswordView.xib */; };
 		ADE8BC2529F7CCA600570F89 /* KMPageNumberDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */; };
 		ADE8BC2629F7CCA600570F89 /* KMPageNumberDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */; };
 		ADE8BC2729F7CCA600570F89 /* KMPageNumberDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */; };
@@ -4357,6 +4381,14 @@
 		ADE787A12AA5A833002EC85A /* KMAccountExceptionWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAccountExceptionWindowController.xib; sourceTree = "<group>"; };
 		ADE787A92AA5A8D3002EC85A /* KMAccountExceptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAccountExceptionView.swift; sourceTree = "<group>"; };
 		ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAccountExceptionView.xib; sourceTree = "<group>"; };
+		ADE86A762B0221E100414DFA /* KMSecurityWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSecurityWindowController.swift; sourceTree = "<group>"; };
+		ADE86A772B0221E100414DFA /* KMSecurityWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMSecurityWindowController.xib; sourceTree = "<group>"; };
+		ADE86A7F2B02220700414DFA /* KMSecurityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSecurityView.swift; sourceTree = "<group>"; };
+		ADE86A832B0222B300414DFA /* KMSecurityView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMSecurityView.xib; sourceTree = "<group>"; };
+		ADE86A882B02269400414DFA /* KMRemovePasswordWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRemovePasswordWindowController.swift; sourceTree = "<group>"; };
+		ADE86A892B02269400414DFA /* KMRemovePasswordWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMRemovePasswordWindowController.xib; sourceTree = "<group>"; };
+		ADE86A912B0226AD00414DFA /* KMRemovePasswordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRemovePasswordView.swift; sourceTree = "<group>"; };
+		ADE86A952B0226BB00414DFA /* KMRemovePasswordView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMRemovePasswordView.xib; sourceTree = "<group>"; };
 		ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageNumberDisplayView.swift; sourceTree = "<group>"; };
 		ADE8BC2929F7CDB000570F89 /* KMPageNumberDisplayView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPageNumberDisplayView.xib; sourceTree = "<group>"; };
 		ADE8BC2E29F8CD7200570F89 /* KMPDFThumbnailModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPDFThumbnailModel.swift; sourceTree = "<group>"; };
@@ -7272,6 +7304,44 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		ADE86A752B0221BB00414DFA /* New */ = {
+			isa = PBXGroup;
+			children = (
+				ADE86A7E2B0221F100414DFA /* View */,
+				ADE86A762B0221E100414DFA /* KMSecurityWindowController.swift */,
+				ADE86A772B0221E100414DFA /* KMSecurityWindowController.xib */,
+			);
+			path = New;
+			sourceTree = "<group>";
+		};
+		ADE86A7E2B0221F100414DFA /* View */ = {
+			isa = PBXGroup;
+			children = (
+				ADE86A7F2B02220700414DFA /* KMSecurityView.swift */,
+				ADE86A832B0222B300414DFA /* KMSecurityView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		ADE86A872B02267D00414DFA /* New */ = {
+			isa = PBXGroup;
+			children = (
+				ADE86A902B02269700414DFA /* View */,
+				ADE86A882B02269400414DFA /* KMRemovePasswordWindowController.swift */,
+				ADE86A892B02269400414DFA /* KMRemovePasswordWindowController.xib */,
+			);
+			path = New;
+			sourceTree = "<group>";
+		};
+		ADE86A902B02269700414DFA /* View */ = {
+			isa = PBXGroup;
+			children = (
+				ADE86A912B0226AD00414DFA /* KMRemovePasswordView.swift */,
+				ADE86A952B0226BB00414DFA /* KMRemovePasswordView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		ADE8BC2329F7CA5900570F89 /* Views */ = {
 			isa = PBXGroup;
 			children = (
@@ -8345,6 +8415,7 @@
 		BB853C722AF8B4F6009C20C1 /* AddPassword */ = {
 			isa = PBXGroup;
 			children = (
+				ADE86A752B0221BB00414DFA /* New */,
 				BB853C802AF8BAD8009C20C1 /* Model */,
 				BB853C732AF8B56B009C20C1 /* VC */,
 			);
@@ -8373,6 +8444,7 @@
 		BB853C8D2AF8DC34009C20C1 /* RemovePassword */ = {
 			isa = PBXGroup;
 			children = (
+				ADE86A872B02267D00414DFA /* New */,
 				BB853C8F2AF8DC5E009C20C1 /* Model */,
 				BB853C8E2AF8DC4B009C20C1 /* VC */,
 			);
@@ -9767,6 +9839,7 @@
 				BB8F455A295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.xib in Resources */,
 				BB853C952AF8DCC7009C20C1 /* KMBatchOperateRemovePasswordViewController.xib in Resources */,
 				BB52372A29C313CA00663BD7 /* KMAnnotationPropertyBaseController.xib in Resources */,
+				ADE86A962B0226BB00414DFA /* KMRemovePasswordView.xib in Resources */,
 				AD8810AC29A8463600178CA1 /* KMAccountInfoWindowController.xib in Resources */,
 				ADC63E432A49817400854E02 /* KMSubscribeSuccessView.xib in Resources */,
 				BB65A0822AF8FEA1003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.xib in Resources */,
@@ -9792,6 +9865,7 @@
 				BBAFC83F2985194800D0648E /* KMPDFEditAppendWindow.xib in Resources */,
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
+				ADE86A842B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				9FDD0F9C2952FF4D000C4DAD /* comp-light.json in Resources */,
 				F3B7DFA42949C8E300333201 /* CPDFListView.xcassets in Resources */,
 				9F221ED229A85D3700978A59 /* KMDesignBase.xib in Resources */,
@@ -9806,6 +9880,7 @@
 				BBC348462956A638008D2CD1 /* KMEditBackgroundController.xib in Resources */,
 				BBA2109429ACC10F00E6B346 /* signlist_add.pdf in Resources */,
 				BBFDFAAA2AF389B700E08AA2 /* PasswordWindowController.xib in Resources */,
+				ADE86A7B2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				BB65A0742AF8DE4F003A27A0 /* SyncPreferences.xib in Resources */,
 				9F0201992A1F352100C9B673 /* KMAITranslationConfirmWindowController.xib in Resources */,
 				BB89721B294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.xib in Resources */,
@@ -9848,6 +9923,7 @@
 				BB853C672AF87502009C20C1 /* KMBatchOperateRemoveWatermarkViewController.xib in Resources */,
 				8931684C296E436B0073EA59 /* KMSignatureWindowController.xib in Resources */,
 				BB1BFF6D2AEA030F003EB179 /* KMBatchOperateSplitViewController.xib in Resources */,
+				ADE86A8D2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */,
 				8942F7FB2926089200389627 /* KMSignatureViewController.xib in Resources */,
 				AD1D48522AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */,
 				ADBC374C29CAD65D00D93208 /* KMComparativeOutlineCell.xib in Resources */,
@@ -10053,6 +10129,7 @@
 				9FF94F1529A7476000B1EF69 /* KMDesignPropertySelector.xib in Resources */,
 				AD8810AD29A8463600178CA1 /* KMAccountInfoWindowController.xib in Resources */,
 				BBB29BCF2AEA190E005F1B6B /* KMToolbarCustomViewController.xib in Resources */,
+				ADE86A972B0226BB00414DFA /* KMRemovePasswordView.xib in Resources */,
 				BBEFD0212AF9E5BC003FABD8 /* KMBatchOperateAddHeaderFooterViewController.xib in Resources */,
 				ADF1569829A62D31001D1018 /* KMLoginLeftImageView.xib in Resources */,
 				89316856296E45CA0073EA59 /* KMImageAccessoryController.xib in Resources */,
@@ -10181,6 +10258,7 @@
 				894A00F62976314C0070ED83 /* KMPDFViewPanelSetViewController.xib in Resources */,
 				9F02016E2A1B088700C9B673 /* KMAIOpenPDFFilesVC.xib in Resources */,
 				BBC4F9EF2AEB58470098A1A8 /* KMAlertWindowController.xib in Resources */,
+				ADE86A852B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				9F0CB48B29683DC400007028 /* KMPropertiesPanelPresetColorSubVC.xib in Resources */,
 				89D2D2FF294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				89E4E70C2963D62B002DBA6F /* KMAnnotationFontWindowController.xib in Resources */,
@@ -10259,6 +10337,7 @@
 				896DD4592985FB3200ADE514 /* KMPageDisplayThemeCollectionViewItem.xib in Resources */,
 				9F853A062947137500DF644E /* newtab_h.pdf in Resources */,
 				ADAFD9F82AE68A8500F084BC /* KMCreatPDFView.xib in Resources */,
+				ADE86A7C2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				BB51074329A61B4100978662 /* ProgressSheet.xib in Resources */,
 				BB1AEF3629F937A50048D179 /* PDF Master User Guide.pdf in Resources */,
 				ADE3C1C529A4C13700793B13 /* KMPrintAccessoryController_OC.xib in Resources */,
@@ -10285,6 +10364,7 @@
 				8942F7FC2926089200389627 /* KMSignatureViewController.xib in Resources */,
 				9F080B18298CFDB300FC27DA /* KMTextImageButtonVC.xib in Resources */,
 				9F02019A2A1F352100C9B673 /* KMAITranslationConfirmWindowController.xib in Resources */,
+				ADE86A8E2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */,
 				BBFE6E832930EBD400142C01 /* KMCompressWindowController.xib in Resources */,
 				9F0CB46B2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
 				ADAFDA522AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */,
@@ -10574,6 +10654,7 @@
 				BBFE6E842930EBD400142C01 /* KMCompressWindowController.xib in Resources */,
 				BB5F8A1E29BB15AD00365ADB /* KMEmailSubWindowController.xib in Resources */,
 				AD867FB929DFBB3200F00440 /* KMAnnotationOutlineCellView.xib in Resources */,
+				ADE86A982B0226BB00414DFA /* KMRemovePasswordView.xib in Resources */,
 				ADF1569E29A63CBF001D1018 /* KMLightMember.xcassets in Resources */,
 				BB1BFF772AEA0B38003EB179 /* KMBatchOperateLeftViewController.xib in Resources */,
 				9F8539DC294318D600DF644E /* TabsImage.xcassets in Resources */,
@@ -10614,6 +10695,7 @@
 				89752DEF293875FC003FF08E /* KMMainToolbarController.xib in Resources */,
 				9FBC48BD299B44C600CA39D7 /* KMSecondaryViewController.xib in Resources */,
 				89752E092939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
+				ADE86A862B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				BBA8B7A82935CD740097D183 /* KMRemovePasswordAlertWindowController.xib in Resources */,
 				AD1CA4362A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
 				BBE9D09D2AF0CEEB002E83CE /* KMBatchOperateCompressViewController.xib in Resources */,
@@ -10632,6 +10714,7 @@
 				9F0CB4A429683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
 				9F8539FE2947137500DF644E /* throbber_waiting.png in Resources */,
 				BB2F61552966A91D001CB369 /* KMBackgroundPropertyHomeController.xib in Resources */,
+				ADE86A8F2B02269400414DFA /* KMRemovePasswordWindowController.xib in Resources */,
 				9FDD0FBC295D5230000C4DAD /* KMToolbarController.xib in Resources */,
 				AD8810A529A8459000178CA1 /* KMComparativeTableViewController.xib in Resources */,
 				ADBC376829CD86A000D93208 /* KMReadModelView.xcassets in Resources */,
@@ -10686,6 +10769,7 @@
 				ADAFDA4E2AEA7F2700F084BC /* KMAdvertisementShowView.xib in Resources */,
 				BB65A0842AF8FEA1003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.xib in Resources */,
 				BB49ED13293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
+				ADE86A7D2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				896DD45A2985FB3200ADE514 /* KMPageDisplayThemeCollectionViewItem.xib in Resources */,
 				9F00CCBB2A2F1E0F00AC462E /* dsa_priv.pem in Resources */,
 				9F0CB46C2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
@@ -11030,6 +11114,7 @@
 				ADAFDA482AEA7F1300F084BC /* KMAdvertisementShowView.swift in Sources */,
 				BB03D6942B021124008C9976 /* NSSegmentedControl+KMExtension.swift in Sources */,
 				BBB9B319299A5D6D004F3235 /* KMCloudServer.m in Sources */,
+				ADE86A782B0221E100414DFA /* KMSecurityWindowController.swift in Sources */,
 				9F1FE4A829406E4700E952CA /* CTBrowserWindowController.m in Sources */,
 				ADBC374129CAB1C300D93208 /* KMComparativeOutlineCell.swift in Sources */,
 				9FDD0F802952FC36000C4DAD /* KMDesignToken.swift in Sources */,
@@ -11205,6 +11290,7 @@
 				ADAFD9F32AE68A7400F084BC /* KMCreatPDFView.swift in Sources */,
 				BBB9B32E299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */,
 				BB3198162AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
+				ADE86A802B02220700414DFA /* KMSecurityView.swift in Sources */,
 				BBEFD0242AFA065F003FABD8 /* KMBatchAddHeaderFooterOperation.swift in Sources */,
 				894A00F22976314C0070ED83 /* KMPDFViewPanelSetViewController.swift in Sources */,
 				BB135C2A29B6CD9A00FD5965 /* KMTools.swift in Sources */,
@@ -11284,6 +11370,7 @@
 				BB897220294AF9080045787C /* KMWatermarkAdjectiveTopBarView.swift in Sources */,
 				AD9527D32952D51A0039D2BC /* KMPrintPresenter.swift in Sources */,
 				ADEC7A7E299397F8009A8256 /* NSFont+SFProText.swift in Sources */,
+				ADE86A922B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */,
 				9F221ECF29A85D3700978A59 /* KMDesignBase.swift in Sources */,
 				ADB2D6F9294882AE0029D2B3 /* KMTextFieldStepperView.swift in Sources */,
 				9F72D2082994BDAF00DCACF1 /* KMNotificationVC.swift in Sources */,
@@ -11319,6 +11406,7 @@
 				BB00300F298CA383002DD1A0 /* KMPreferenceSegementControl.swift in Sources */,
 				ADD1B7062946CBB600C3FFF7 /* KMBaseTextFormatter.swift in Sources */,
 				BB853C822AF8BAF0009C20C1 /* KMSetPasswordObject.swift in Sources */,
+				ADE86A8A2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */,
 				89D2D2C129495D2100BFF5FE /* KMFormModel.swift in Sources */,
 				BBA19F3F29ADE40A001A285A /* KMCellEmptyView.m in Sources */,
 				89316822296D73CC0073EA59 /* KMSignatureAnnotationViewController.m in Sources */,
@@ -11594,6 +11682,7 @@
 				BB853C642AF87428009C20C1 /* KMBatchOperateRemoveWatermarkViewController.swift in Sources */,
 				ADAFDA3F2AE8F32400F084BC /* KMAdvertisementManager.swift in Sources */,
 				BBA19F4829AE27DA001A285A /* KMAnnotationTableRowView.swift in Sources */,
+				ADE86A812B02220700414DFA /* KMSecurityView.swift in Sources */,
 				BBE9D0982AF0CECB002E83CE /* KMBatchOperateCompressViewController.swift in Sources */,
 				BB8F4566295AA3ED0037EA22 /* KMHeaderFooterManager.swift in Sources */,
 				BB99ACC3292DE22E0048AFD9 /* KMMergeViewController.swift in Sources */,
@@ -11705,6 +11794,7 @@
 				AD867FC629DFFBC400F00440 /* KMAnnotationOutlineRowView.swift in Sources */,
 				BB4EEF2E29763EE7003A3537 /* KMRedactBaseWindowController.swift in Sources */,
 				ADC31FA72A0E0C1A00ED44A2 /* KMEditPropertyAlignmentView.swift in Sources */,
+				ADE86A8B2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */,
 				BB2CC5652AF123A300D7A796 /* KMBatchHeader.swift in Sources */,
 				9FAAA333290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
 				BB7648ED29ECEEF400931039 /* KMAppearance.swift in Sources */,
@@ -11763,6 +11853,7 @@
 				9FCFECA92AD243C900EAD2CB /* KMBlankView.swift in Sources */,
 				BB3AAB9A2987BEA900992A5A /* KMWatermarkPDFView_OC.m in Sources */,
 				F3F0B27429B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
+				ADE86A792B0221E100414DFA /* KMSecurityWindowController.swift in Sources */,
 				BB88E455294045B4002B3655 /* KMPDFConvertManager.swift in Sources */,
 				BBCE57152A72713A00508EFC /* NSViewController+KMExtension.swift in Sources */,
 				ADD1B6AC2941E97F00C3FFF7 /* KMPrintWindowController.swift in Sources */,
@@ -11917,6 +12008,7 @@
 				AD1D481A2AFB6B96007AC1F0 /* KMMergeWindowController.swift in Sources */,
 				BB897276294DC04F0045787C /* KMWatermartAdjectivePageRangeView.swift in Sources */,
 				ADBC373329CA95AA00D93208 /* KMComparativeModel.swift in Sources */,
+				ADE86A932B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */,
 				9FAAA326290A69920046FFCE /* KMToolSetScroller.swift in Sources */,
 				BB89724E294C1DCE0045787C /* KMWatermarkAdjectiveListTableCellView.swift in Sources */,
 				BB14700F299DC0D100784A6A /* OIDScopes.m in Sources */,
@@ -12503,6 +12595,7 @@
 				BB1BFF942AEA6352003EB179 /* KMImageToPDFMethod.swift in Sources */,
 				899700E128F3A9F2009AF911 /* KMHomeWindowController.swift in Sources */,
 				BB9DCCA12A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */,
+				ADE86A822B02220700414DFA /* KMSecurityView.swift in Sources */,
 				BB671A032AD2D2A0003D44D5 /* CPDFStampAnnotation+PDFListView.swift in Sources */,
 				BB8F4578295AFA2D0037EA22 /* KMHeaderFooterAdjectiveInfoBaseView.swift in Sources */,
 				F3F0B27529B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
@@ -12589,6 +12682,7 @@
 				BBC745F4295F0DD00072C2ED /* KMCropSettingPageSizeView.swift in Sources */,
 				BBEFD01E2AF9E5AA003FABD8 /* KMBatchOperateAddHeaderFooterViewController.swift in Sources */,
 				9F1FE50729406E4700E952CA /* CTTabStripDragController.m in Sources */,
+				ADE86A942B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */,
 				BB65A0562AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB146FEC299DC0D100784A6A /* GTLRDuration.m in Sources */,
 				9FCFEC762AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
@@ -12824,6 +12918,7 @@
 				89E4E6E52963CD82002DBA6F /* KMGeneralAnnotationViewController.m in Sources */,
 				BB147010299DC0D100784A6A /* OIDScopes.m in Sources */,
 				BB147022299DC0D100784A6A /* OIDServiceDiscovery.m in Sources */,
+				ADE86A8C2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */,
 				9FAAA327290A69920046FFCE /* KMToolSetScroller.swift in Sources */,
 				BB0A823429C00400002C5C1B /* KMCommonEnum.swift in Sources */,
 				BB6013922AD3AFF000A76FB2 /* NSPopover+KMExtension.swift in Sources */,
@@ -12947,6 +13042,7 @@
 				9FBA0EF028FFC716001117AF /* KMHomeFastToolViewController.swift in Sources */,
 				9F1FE4E329406E4700E952CA /* GTMNSAnimation+Duration.m in Sources */,
 				BB8F456B295ABDC10037EA22 /* KMWatermarkAdjectiveBaseModel.swift in Sources */,
+				ADE86A7A2B0221E100414DFA /* KMSecurityWindowController.swift in Sources */,
 				9F0CB4FB298655E500007028 /* KMDesignToken+Border.swift in Sources */,
 				BBBF68822A3BF17F0058E14E /* KMFilePromiseProvider.swift in Sources */,
 				9F0CB4D32986550B00007028 /* KMDesignToken+Width.swift in Sources */,

+ 413 - 3
PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -5547,8 +5547,8 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "478"
             endingLineNumber = "478"
-            landmarkName = "cropItemAction(sender:)"
-            landmarkType = "7">
+            landmarkName = "KMToolbarController"
+            landmarkType = "3">
             <Locations>
                <Location
                   uuid = "5B80F998-3B3F-4A3F-842D-1EDB32380522 - 96ead7ba0cb9e24b"
@@ -6279,7 +6279,7 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "1960"
             endingLineNumber = "1960"
-            landmarkName = "displaySinglePageScreen(isSinglePage:doublePageScreen:)"
+            landmarkName = "showConvertWindow(convertT:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
@@ -11956,6 +11956,21 @@
                   endingLineNumber = "937"
                   offsetFromSymbolStart = "1496">
                </Location>
+               <Location
+                  uuid = "D90BE850-75C0-4F2E-9249-D1327B0B0904 - 7f1d2b0d26d3c364"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMPDFEditViewController.km_comboBoxSelectionDidChange(PDF_Master.KMPageRange) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "938"
+                  endingLineNumber = "938"
+                  offsetFromSymbolStart = "1916">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -13685,6 +13700,21 @@
                   endingLineNumber = "955"
                   offsetFromSymbolStart = "160">
                </Location>
+               <Location
+                  uuid = "088F4F4A-37AB-42EE-9BE0-72297B7DBFEA - 31d2eee4ab2dc235"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 (Swift.Optional&lt;Foundation.URL&gt;, Swift.Optional&lt;PDF_Master.KMPasswordInputWindowResult&gt;, Swift.Optional&lt;Swift.String&gt;) -&gt; () in closure #1 @Swift.MainActor () -&gt; () in PDF_Master.KMHomeViewController.km_secure_openPanel_compress() -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/Home/ViewController/KMHomeViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "955"
+                  endingLineNumber = "955"
+                  offsetFromSymbolStart = "732">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -14065,6 +14095,21 @@
                   endingLineNumber = "909"
                   offsetFromSymbolStart = "68">
                </Location>
+               <Location
+                  uuid = "12A9C6BB-589C-4690-8719-B24311CDBA7D - 6771a99573c3c806"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "(1) suspend resume partial function for closure #1 @Swift.MainActor @Sendable () async -&gt; () in PDF_Master.KMHomeViewController.fastTool_MergePDF() -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/Home/ViewController/KMHomeViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "909"
+                  endingLineNumber = "909"
+                  offsetFromSymbolStart = "76">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -14223,6 +14268,36 @@
                   endingLineNumber = "60"
                   offsetFromSymbolStart = "12">
                </Location>
+               <Location
+                  uuid = "C32644F6-7A00-45EE-898F-037A0EE35E44 - 891265a2da1a8ec3"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMMergeWindowController.windowDidLoad() -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFTools/Merge/MergeNew/KMMergeWindowController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "58"
+                  endingLineNumber = "58"
+                  offsetFromSymbolStart = "632">
+               </Location>
+               <Location
+                  uuid = "C32644F6-7A00-45EE-898F-037A0EE35E44 - 16074dabadbb2275"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 (PDF_Master.KMMergeView) -&gt; () in PDF_Master.KMMergeWindowController.windowDidLoad() -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFTools/Merge/MergeNew/KMMergeWindowController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "58"
+                  endingLineNumber = "58"
+                  offsetFromSymbolStart = "28">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -14274,5 +14349,340 @@
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "EC868E34-3125-4BF1-917C-B699A0192869"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2945"
+            endingLineNumber = "2945"
+            landmarkName = "clickChildTool(type:index:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "EC868E34-3125-4BF1-917C-B699A0192869 - 642a8aa40dfbca1a"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "(1) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2952"
+                  endingLineNumber = "2952"
+                  offsetFromSymbolStart = "28028">
+               </Location>
+               <Location
+                  uuid = "EC868E34-3125-4BF1-917C-B699A0192869 - 642a8aa40dfbca1a"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "(1) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2952"
+                  endingLineNumber = "2952"
+                  offsetFromSymbolStart = "28052">
+               </Location>
+               <Location
+                  uuid = "EC868E34-3125-4BF1-917C-B699A0192869 - 642a8aa40dfbca1a"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "(1) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2952"
+                  endingLineNumber = "2952"
+                  offsetFromSymbolStart = "28084">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "7CBC451E-614F-4586-8420-0B9C8E23AB48"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/Batch/WindowController/Base/KMBatchOperateBaseViewController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "18"
+            endingLineNumber = "18"
+            landmarkName = "queue"
+            landmarkType = "24">
+            <Locations>
+               <Location
+                  uuid = "7CBC451E-614F-4586-8420-0B9C8E23AB48 - 3fc4c862ebd1f666"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 () -&gt; Swift.Optional&lt;PDF_Master.KMOperationQueue&gt; in PDF_Master.KMBatchOperateBaseViewController.queue.getter : Swift.Optional&lt;PDF_Master.KMOperationQueue&gt;"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/Batch/WindowController/Base/KMBatchOperateBaseViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "18"
+                  endingLineNumber = "18"
+                  offsetFromSymbolStart = "60">
+               </Location>
+               <Location
+                  uuid = "7CBC451E-614F-4586-8420-0B9C8E23AB48 - 3fc4c862ebd1f649"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 () -&gt; Swift.Optional&lt;PDF_Master.KMOperationQueue&gt; in PDF_Master.KMBatchOperateBaseViewController.queue.getter : Swift.Optional&lt;PDF_Master.KMOperationQueue&gt;"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/Batch/WindowController/Base/KMBatchOperateBaseViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "19"
+                  endingLineNumber = "19"
+                  offsetFromSymbolStart = "32">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "7F14AB45-ACF4-4F59-BAB6-37C63251859E"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2523"
+            endingLineNumber = "2523"
+            landmarkName = "clickChildTool(type:index:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "F8950463-7D93-4517-AA4B-6DCC5481F71B"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "3001"
+            endingLineNumber = "3001"
+            landmarkName = "clickChildTool(type:index:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "2963F752-8EF7-4690-8495-575A1A640A78"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFTools/RemovePassword/New/View/KMRemovePasswordView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "54"
+            endingLineNumber = "54"
+            landmarkName = "batchButtonAction(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "64B27BD6-6BFD-402B-AB71-BDC116A54CE2"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFTools/RemovePassword/New/KMRemovePasswordWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "35"
+            endingLineNumber = "35"
+            landmarkName = "windowDidLoad()"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "64B27BD6-6BFD-402B-AB71-BDC116A54CE2 - 5aafdcfbedda9b7c"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMRemovePasswordWindowController.windowDidLoad() -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFTools/RemovePassword/New/KMRemovePasswordWindowController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "35"
+                  endingLineNumber = "35"
+                  offsetFromSymbolStart = "1416">
+               </Location>
+               <Location
+                  uuid = "64B27BD6-6BFD-402B-AB71-BDC116A54CE2 - e040ea3acfa6b3cd"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #3 (PDF_Master.KMRemovePasswordView, Swift.Array&lt;PDF_Master.KMFileAttribute&gt;) -&gt; () in PDF_Master.KMRemovePasswordWindowController.windowDidLoad() -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFTools/RemovePassword/New/KMRemovePasswordWindowController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "35"
+                  endingLineNumber = "35"
+                  offsetFromSymbolStart = "56">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "BA3FC15D-F3EE-4123-A621-8D579957E5B8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2996"
+            endingLineNumber = "2996"
+            landmarkName = "clickChildTool(type:index:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "BA3FC15D-F3EE-4123-A621-8D579957E5B8 - 6ec5cfb3fccee2db"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "(7) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2977"
+                  endingLineNumber = "2977"
+                  offsetFromSymbolStart = "212">
+               </Location>
+               <Location
+                  uuid = "BA3FC15D-F3EE-4123-A621-8D579957E5B8 - 4bd28b935c0f14e7"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #12 (__C.NSWindowController, Swift.Array&lt;PDF_Master.KMFileAttribute&gt;) -&gt; () in closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2977"
+                  endingLineNumber = "2977"
+                  offsetFromSymbolStart = "108">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "093EDAD7-A40B-4A91-8063-6AB952F3CFC7"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "3009"
+            endingLineNumber = "3009"
+            landmarkName = "clickChildTool(type:index:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "093EDAD7-A40B-4A91-8063-6AB952F3CFC7 - 6ec5cfb3fccee30e"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "(7) suspend resume partial function for closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2990"
+                  endingLineNumber = "2990"
+                  offsetFromSymbolStart = "328">
+               </Location>
+               <Location
+                  uuid = "093EDAD7-A40B-4A91-8063-6AB952F3CFC7 - be0c7587106b31d2"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #13 (__C.NSWindowController) -&gt; () in closure #1 @Sendable () async -&gt; () in PDF_Master.KMMainViewController.clickChildTool(type: PDF_Master.KMToolbarType, index: Swift.Int) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "2990"
+                  endingLineNumber = "2990"
+                  offsetFromSymbolStart = "76">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "243CF690-2567-4007-A615-5BE15EAFDE07"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFTools/RemovePassword/New/KMRemovePasswordWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "31"
+            endingLineNumber = "31"
+            landmarkName = "windowDidLoad()"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "38F3A867-5964-4802-BBEC-B6872F943BFC"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2992"
+            endingLineNumber = "2992"
+            landmarkName = "clickChildTool(type:index:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

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

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>

+ 33 - 0
PDF Office/PDF Master/Class/PDFTools/AddPassword/New/KMSecurityWindowController.swift

@@ -0,0 +1,33 @@
+//
+//  KMSecurityWindowController.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/11/13.
+//
+
+import Cocoa
+
+typealias KMSecurityWindowControllerBatchAction = (_ controller: NSWindowController, _ files: [KMFileAttribute]) -> Void
+typealias KMSecurityWindowControllerCancelAction = (_ controller: NSWindowController) -> Void
+
+class KMSecurityWindowController: NSWindowController {
+    @IBOutlet weak var securityView: KMSecurityView!
+    
+    var batchAction: KMSecurityWindowControllerBatchAction?
+    var cancelAction: KMSecurityWindowControllerCancelAction?
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        securityView.cancelAction = { [unowned self] view in
+            self.cancelAction?(self)
+        }
+        
+        securityView.batchAction = { [unowned self] view, files in
+            self.batchAction?(self, files)
+        }
+    }
+    
+}

+ 43 - 0
PDF Office/PDF Master/Class/PDFTools/AddPassword/New/KMSecurityWindowController.xib

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMSecurityWindowController" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="securityView" destination="zui-su-xYD" id="xMa-J3-DxA"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <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="572" height="544"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="572" height="544"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="zui-su-xYD" customClass="KMSecurityView" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="0.0" y="0.0" width="572" height="544"/>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="zui-su-xYD" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="JYl-OE-oNl"/>
+                    <constraint firstAttribute="bottom" secondItem="zui-su-xYD" secondAttribute="bottom" id="TGj-eP-cw7"/>
+                    <constraint firstItem="zui-su-xYD" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="jEN-VU-0Xz"/>
+                    <constraint firstAttribute="trailing" secondItem="zui-su-xYD" secondAttribute="trailing" id="v6O-tl-GSk"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="86" y="136"/>
+        </window>
+    </objects>
+</document>

+ 45 - 0
PDF Office/PDF Master/Class/PDFTools/AddPassword/New/View/KMSecurityView.swift

@@ -0,0 +1,45 @@
+//
+//  KMSecurityView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/11/13.
+//
+
+import Cocoa
+
+typealias KMSecurityViewBatchAction = (_ view: KMSecurityView, _ files: [KMFileAttribute]) -> Void
+typealias KMSecurityViewCancelAction = (_ view: KMSecurityView) -> Void
+
+class KMSecurityView: KMBaseXibView {
+    @IBOutlet weak var batchButton: NSButton!
+    @IBOutlet weak var cancelButton: NSButton!
+    @IBOutlet weak var doneButton: NSButton!
+    
+    var batchAction: KMSecurityViewBatchAction?
+    var cancelAction: KMSecurityViewCancelAction?
+    
+    var files: [KMFileAttribute] = []
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    
+    @IBAction func batchButtonAction(_ sender: Any) {
+        guard let callBack = batchAction else { return }
+        
+        callBack(self, files)
+    }
+    
+    @IBAction func cancelButtonAction(_ sender: Any) {
+        guard let callBack = cancelAction else { return }
+        
+        callBack(self)
+    }
+    
+    @IBAction func doneButtonAction(_ sender: Any) {
+        
+    }
+    
+}

+ 328 - 0
PDF Office/PDF Master/Class/PDFTools/AddPassword/New/View/KMSecurityView.xib

@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMSecurityView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="batchButton" destination="uXk-aN-bU2" id="wuM-he-LvR"/>
+                <outlet property="cancelButton" destination="J4j-YE-zds" id="SI8-j0-Zvg"/>
+                <outlet property="doneButton" destination="zu9-tu-Eu4" id="4N6-12-ny5"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe">
+            <rect key="frame" x="0.0" y="0.0" width="572" height="544"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <view translatesAutoresizingMaskIntoConstraints="NO" id="NUM-Vn-wUf">
+                    <rect key="frame" x="0.0" y="0.0" width="572" height="544"/>
+                    <subviews>
+                        <box autoresizesSubviews="NO" title="Password Security Settings" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="ST2-wX-xoy">
+                            <rect key="frame" x="37" y="274" width="498" height="236"/>
+                            <view key="contentView" id="6hv-cP-65h">
+                                <rect key="frame" x="4" y="5" width="490" height="228"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="twD-kg-pju">
+                                        <rect key="frame" x="14" y="196" width="471" height="18"/>
+                                        <buttonCell key="cell" type="check" title="Require a password to open the document." bezelStyle="regularSquare" imagePosition="left" inset="2" id="v2x-SU-J9M">
+                                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                    </button>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4FR-2o-FxP">
+                                        <rect key="frame" x="34" y="164" width="169" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Document Open Password:" id="tkx-7J-BVQ">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <secureTextField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6g4-S8-Wrw" userLabel="Open Password">
+                                        <rect key="frame" x="206" y="161" width="248" height="21"/>
+                                        <secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="o4k-uv-YuM">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            <allowedInputSourceLocales>
+                                                <string>NSAllRomanInputSourcesLocaleIdentifier</string>
+                                            </allowedInputSourceLocales>
+                                        </secureTextFieldCell>
+                                    </secureTextField>
+                                    <button tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="MN5-MX-XNZ">
+                                        <rect key="frame" x="14" y="129" width="308" height="18"/>
+                                        <buttonCell key="cell" type="check" title="Restrict printing and copying of the document." bezelStyle="regularSquare" imagePosition="left" inset="2" id="Sto-JN-CH6">
+                                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                    </button>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HTv-gT-hdG">
+                                        <rect key="frame" x="34" y="97" width="169" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Permissions Password:" id="4Wl-oL-1en">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="Df0-VK-282">
+                                        <rect key="frame" x="63" y="57" width="188" height="18"/>
+                                        <buttonCell key="cell" type="check" title="Restrict document printing" bezelStyle="regularSquare" imagePosition="left" enabled="NO" inset="2" id="Y7o-CX-bmh">
+                                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                    </button>
+                                    <button translatesAutoresizingMaskIntoConstraints="NO" id="Q12-nq-8Ww">
+                                        <rect key="frame" x="63" y="31" width="175" height="18"/>
+                                        <buttonCell key="cell" type="check" title="Restrict content copying" bezelStyle="regularSquare" imagePosition="left" enabled="NO" inset="2" id="hyr-CH-Xfe">
+                                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                            <font key="font" metaFont="system"/>
+                                        </buttonCell>
+                                    </button>
+                                    <secureTextField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KlB-P6-WnC" userLabel="Owner Password">
+                                        <rect key="frame" x="206" y="94" width="248" height="21"/>
+                                        <secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="slP-Wn-4zY">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            <allowedInputSourceLocales>
+                                                <string>NSAllRomanInputSourcesLocaleIdentifier</string>
+                                            </allowedInputSourceLocales>
+                                        </secureTextFieldCell>
+                                    </secureTextField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="KlB-P6-WnC" firstAttribute="leading" secondItem="HTv-gT-hdG" secondAttribute="trailing" constant="5" id="1Bv-cH-DSY"/>
+                                    <constraint firstItem="KlB-P6-WnC" firstAttribute="trailing" secondItem="6g4-S8-Wrw" secondAttribute="trailing" id="9c9-IW-7vi"/>
+                                    <constraint firstItem="Df0-VK-282" firstAttribute="top" secondItem="KlB-P6-WnC" secondAttribute="bottom" constant="20" id="AWC-Ge-a4W"/>
+                                    <constraint firstItem="Df0-VK-282" firstAttribute="leading" secondItem="6hv-cP-65h" secondAttribute="leading" constant="65" id="CEp-cM-Ybd"/>
+                                    <constraint firstItem="6g4-S8-Wrw" firstAttribute="centerY" secondItem="4FR-2o-FxP" secondAttribute="centerY" id="DTe-Mu-GvY"/>
+                                    <constraint firstItem="KlB-P6-WnC" firstAttribute="top" secondItem="MN5-MX-XNZ" secondAttribute="bottom" constant="15" id="EuI-O7-7ls"/>
+                                    <constraint firstItem="KlB-P6-WnC" firstAttribute="centerY" secondItem="HTv-gT-hdG" secondAttribute="centerY" id="HUF-Qn-BUY"/>
+                                    <constraint firstItem="Q12-nq-8Ww" firstAttribute="leading" secondItem="Df0-VK-282" secondAttribute="leading" id="IGx-Ma-W86"/>
+                                    <constraint firstAttribute="trailing" secondItem="6g4-S8-Wrw" secondAttribute="trailing" constant="36" id="Kce-1V-ExW"/>
+                                    <constraint firstAttribute="trailing" secondItem="twD-kg-pju" secondAttribute="trailing" constant="5" id="Kjr-Iy-HZh"/>
+                                    <constraint firstItem="6g4-S8-Wrw" firstAttribute="top" secondItem="twD-kg-pju" secondAttribute="bottom" constant="15" id="O9F-NV-U10"/>
+                                    <constraint firstItem="MN5-MX-XNZ" firstAttribute="leading" secondItem="twD-kg-pju" secondAttribute="leading" id="WYQ-56-k6P"/>
+                                    <constraint firstItem="MN5-MX-XNZ" firstAttribute="top" secondItem="6g4-S8-Wrw" secondAttribute="bottom" constant="15" id="XKr-2N-AdQ"/>
+                                    <constraint firstItem="twD-kg-pju" firstAttribute="top" secondItem="6hv-cP-65h" secondAttribute="top" constant="15" id="cIJ-te-jm5"/>
+                                    <constraint firstItem="4FR-2o-FxP" firstAttribute="leading" secondItem="6hv-cP-65h" secondAttribute="leading" constant="36" id="eKI-H1-pI3"/>
+                                    <constraint firstItem="twD-kg-pju" firstAttribute="leading" secondItem="6hv-cP-65h" secondAttribute="leading" constant="16" id="gzE-nc-Tps"/>
+                                    <constraint firstItem="HTv-gT-hdG" firstAttribute="leading" secondItem="4FR-2o-FxP" secondAttribute="leading" id="hM2-ka-vcD"/>
+                                    <constraint firstItem="6g4-S8-Wrw" firstAttribute="leading" secondItem="4FR-2o-FxP" secondAttribute="trailing" constant="5" id="qdb-Xf-kFz"/>
+                                    <constraint firstItem="KlB-P6-WnC" firstAttribute="leading" secondItem="6g4-S8-Wrw" secondAttribute="leading" id="tve-0h-krS"/>
+                                    <constraint firstItem="Q12-nq-8Ww" firstAttribute="top" secondItem="Df0-VK-282" secondAttribute="bottom" constant="10" id="yjj-D9-WLi"/>
+                                </constraints>
+                            </view>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="492" id="GFN-aB-50Z"/>
+                                <constraint firstAttribute="height" constant="230" id="TNB-oZ-hWb"/>
+                            </constraints>
+                        </box>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uXk-aN-bU2">
+                            <rect key="frame" x="8" y="13" width="69" height="32"/>
+                            <buttonCell key="cell" type="push" title="Batch" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="BeV-Ko-4dE">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                            <connections>
+                                <action selector="batchButtonAction:" target="-2" id="hMt-rI-UNp"/>
+                            </connections>
+                        </button>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J4j-YE-zds">
+                            <rect key="frame" x="409" y="13" width="76" height="32"/>
+                            <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Yqp-kX-5kF">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                                <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                            </buttonCell>
+                            <connections>
+                                <action selector="cancelButtonAction:" target="-2" id="VDL-pe-5oZ"/>
+                            </connections>
+                        </button>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zu9-tu-Eu4">
+                            <rect key="frame" x="478" y="13" width="81" height="32"/>
+                            <buttonCell key="cell" type="push" title="Encrypt" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="t4I-3Z-AJg">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                                <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                            </buttonCell>
+                            <connections>
+                                <action selector="doneButtonAction:" target="-2" id="Nwn-uO-qCZ"/>
+                            </connections>
+                        </button>
+                        <box autoresizesSubviews="NO" title="Document Description" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="AuG-7F-1zd">
+                            <rect key="frame" x="37" y="66" width="498" height="176"/>
+                            <view key="contentView" id="dsj-4C-14o">
+                                <rect key="frame" x="4" y="5" width="490" height="168"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G69-bY-klh">
+                                        <rect key="frame" x="14" y="135" width="67" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Title:" id="ChV-F8-rdz">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1qu-Ea-pYg" customClass="KMSecurityTextField">
+                                        <rect key="frame" x="85" y="132" width="395" height="21"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="fDe-4Q-Pyw">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                        <connections>
+                                            <outlet property="nextKeyView" destination="FbH-uh-vhX" id="YWQ-a7-d32"/>
+                                        </connections>
+                                    </textField>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="feB-OM-BTK">
+                                        <rect key="frame" x="14" y="99" width="67" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Author:" id="Le5-rl-XYu">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FbH-uh-vhX" customClass="KMSecurityTextField">
+                                        <rect key="frame" x="85" y="96" width="395" height="21"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="dHR-ed-Cv8">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                        <connections>
+                                            <outlet property="nextKeyView" destination="wJ2-bm-ZhO" id="b5g-99-KkW"/>
+                                        </connections>
+                                    </textField>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Pye-Uj-4I0">
+                                        <rect key="frame" x="14" y="27" width="67" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Keywords:" id="Wfk-WB-BEW">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wJ2-bm-ZhO" customClass="KMSecurityTextField">
+                                        <rect key="frame" x="85" y="60" width="395" height="21"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="nPj-Eh-Hsz">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                        <connections>
+                                            <outlet property="nextKeyView" destination="SX3-7U-7ea" id="5nH-Xr-4LJ"/>
+                                        </connections>
+                                    </textField>
+                                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SX3-7U-7ea" customClass="KMSecurityTextField">
+                                        <rect key="frame" x="85" y="24" width="395" height="21"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="HXf-ig-qVm">
+                                            <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 focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="621-mt-orF">
+                                        <rect key="frame" x="14" y="63" width="67" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Subject:" id="oZ4-Yu-aS5">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="621-mt-orF" firstAttribute="leading" secondItem="G69-bY-klh" secondAttribute="leading" id="04r-8r-hob"/>
+                                    <constraint firstItem="wJ2-bm-ZhO" firstAttribute="centerY" secondItem="621-mt-orF" secondAttribute="centerY" id="0Va-dK-TO0"/>
+                                    <constraint firstItem="FbH-uh-vhX" firstAttribute="top" secondItem="1qu-Ea-pYg" secondAttribute="bottom" constant="15" id="103-NO-J4b"/>
+                                    <constraint firstItem="FbH-uh-vhX" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="feB-OM-BTK" secondAttribute="trailing" constant="6" id="1mJ-yD-m1m"/>
+                                    <constraint firstItem="1qu-Ea-pYg" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="G69-bY-klh" secondAttribute="trailing" constant="6" id="3Z7-5b-Xix"/>
+                                    <constraint firstItem="SX3-7U-7ea" firstAttribute="centerY" secondItem="Pye-Uj-4I0" secondAttribute="centerY" id="5Tg-EE-hKi"/>
+                                    <constraint firstItem="wJ2-bm-ZhO" firstAttribute="trailing" secondItem="1qu-Ea-pYg" secondAttribute="trailing" id="Qdv-l4-X1Y"/>
+                                    <constraint firstItem="feB-OM-BTK" firstAttribute="leading" secondItem="G69-bY-klh" secondAttribute="leading" id="RQS-Gb-g25"/>
+                                    <constraint firstItem="feB-OM-BTK" firstAttribute="trailing" secondItem="G69-bY-klh" secondAttribute="trailing" id="Tdj-Iu-7eL"/>
+                                    <constraint firstItem="wJ2-bm-ZhO" firstAttribute="top" secondItem="FbH-uh-vhX" secondAttribute="bottom" constant="15" id="VRD-gi-0hF"/>
+                                    <constraint firstItem="FbH-uh-vhX" firstAttribute="leading" secondItem="1qu-Ea-pYg" secondAttribute="leading" id="XCv-cf-iX1"/>
+                                    <constraint firstItem="621-mt-orF" firstAttribute="trailing" secondItem="G69-bY-klh" secondAttribute="trailing" id="Xuh-EX-GTw"/>
+                                    <constraint firstItem="SX3-7U-7ea" firstAttribute="trailing" secondItem="1qu-Ea-pYg" secondAttribute="trailing" id="YG3-Kl-2xS"/>
+                                    <constraint firstItem="G69-bY-klh" firstAttribute="leading" secondItem="dsj-4C-14o" secondAttribute="leading" constant="16" id="awE-xq-5Pf"/>
+                                    <constraint firstItem="1qu-Ea-pYg" firstAttribute="top" secondItem="dsj-4C-14o" secondAttribute="top" constant="15" id="bKB-BI-pTw"/>
+                                    <constraint firstItem="SX3-7U-7ea" firstAttribute="leading" secondItem="Pye-Uj-4I0" secondAttribute="trailing" constant="6" id="bct-6H-a67"/>
+                                    <constraint firstAttribute="trailing" secondItem="1qu-Ea-pYg" secondAttribute="trailing" constant="10" id="eI6-b6-kJW"/>
+                                    <constraint firstItem="wJ2-bm-ZhO" firstAttribute="leading" secondItem="1qu-Ea-pYg" secondAttribute="leading" id="gqP-vC-Tgh"/>
+                                    <constraint firstItem="SX3-7U-7ea" firstAttribute="leading" secondItem="1qu-Ea-pYg" secondAttribute="leading" id="icb-jY-jeH"/>
+                                    <constraint firstItem="wJ2-bm-ZhO" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="621-mt-orF" secondAttribute="trailing" constant="6" id="lUn-qh-zLz"/>
+                                    <constraint firstItem="1qu-Ea-pYg" firstAttribute="centerY" secondItem="G69-bY-klh" secondAttribute="centerY" id="qb2-DU-WBL"/>
+                                    <constraint firstItem="Pye-Uj-4I0" firstAttribute="trailing" secondItem="G69-bY-klh" secondAttribute="trailing" id="rba-3V-1pZ"/>
+                                    <constraint firstItem="SX3-7U-7ea" firstAttribute="top" secondItem="wJ2-bm-ZhO" secondAttribute="bottom" constant="15" id="rlP-tK-DkG"/>
+                                    <constraint firstItem="FbH-uh-vhX" firstAttribute="centerY" secondItem="feB-OM-BTK" secondAttribute="centerY" id="tfg-yx-HVK"/>
+                                    <constraint firstItem="Pye-Uj-4I0" firstAttribute="leading" secondItem="G69-bY-klh" secondAttribute="leading" id="vem-Yk-TMk"/>
+                                    <constraint firstItem="FbH-uh-vhX" firstAttribute="trailing" secondItem="1qu-Ea-pYg" secondAttribute="trailing" id="xqk-cW-TuF"/>
+                                </constraints>
+                            </view>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="170" id="jfE-Tm-3ew"/>
+                                <constraint firstAttribute="width" constant="492" id="kta-Mj-cgQ"/>
+                            </constraints>
+                        </box>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aXy-qa-30P">
+                            <rect key="frame" x="54" y="508" width="170" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="18" id="FeS-5P-ueR"/>
+                            </constraints>
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Password Security Settings" id="416-1G-mAh">
+                                <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 focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bDa-JE-YYY">
+                            <rect key="frame" x="54" y="240" width="140" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="18" id="Exf-QJ-ne2"/>
+                            </constraints>
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Document Description" id="t8a-nn-oig">
+                                <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>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="aXy-qa-30P" firstAttribute="top" secondItem="NUM-Vn-wUf" secondAttribute="top" constant="18" id="2mI-FV-BXv"/>
+                        <constraint firstItem="AuG-7F-1zd" firstAttribute="top" secondItem="bDa-JE-YYY" secondAttribute="bottom" id="34V-O0-9bV"/>
+                        <constraint firstItem="ST2-wX-xoy" firstAttribute="top" secondItem="aXy-qa-30P" secondAttribute="bottom" id="8of-mz-w1C"/>
+                        <constraint firstItem="bDa-JE-YYY" firstAttribute="leading" secondItem="NUM-Vn-wUf" secondAttribute="leading" constant="56" id="Atk-Lb-F40"/>
+                        <constraint firstItem="aXy-qa-30P" firstAttribute="leading" secondItem="NUM-Vn-wUf" secondAttribute="leading" constant="56" id="BT3-O2-jf6"/>
+                        <constraint firstItem="zu9-tu-Eu4" firstAttribute="leading" secondItem="J4j-YE-zds" secondAttribute="trailing" constant="7" id="CPB-xB-qTX"/>
+                        <constraint firstItem="bDa-JE-YYY" firstAttribute="top" secondItem="ST2-wX-xoy" secondAttribute="bottom" constant="20" id="ETv-4a-FLN"/>
+                        <constraint firstAttribute="bottom" secondItem="uXk-aN-bU2" secondAttribute="bottom" constant="20" id="FAE-Ee-xvR"/>
+                        <constraint firstItem="ST2-wX-xoy" firstAttribute="centerX" secondItem="NUM-Vn-wUf" secondAttribute="centerX" id="U9e-z3-nfl"/>
+                        <constraint firstItem="zu9-tu-Eu4" firstAttribute="centerY" secondItem="uXk-aN-bU2" secondAttribute="centerY" id="XT7-oe-yLC"/>
+                        <constraint firstAttribute="trailing" secondItem="ST2-wX-xoy" secondAttribute="trailing" constant="40" id="Xtj-EA-E5b"/>
+                        <constraint firstItem="zu9-tu-Eu4" firstAttribute="top" secondItem="AuG-7F-1zd" secondAttribute="bottom" constant="30" id="frF-lS-4u4"/>
+                        <constraint firstAttribute="trailing" secondItem="zu9-tu-Eu4" secondAttribute="trailing" constant="20" id="jwN-kH-sgb"/>
+                        <constraint firstItem="J4j-YE-zds" firstAttribute="centerY" secondItem="uXk-aN-bU2" secondAttribute="centerY" id="nLe-SK-5bJ"/>
+                        <constraint firstItem="AuG-7F-1zd" firstAttribute="leading" secondItem="ST2-wX-xoy" secondAttribute="leading" id="pr5-4L-E6z"/>
+                        <constraint firstItem="uXk-aN-bU2" firstAttribute="leading" secondItem="NUM-Vn-wUf" secondAttribute="leading" constant="15" id="ygR-VP-pdj"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <constraints>
+                <constraint firstItem="NUM-Vn-wUf" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="4Rx-D0-fW7"/>
+                <constraint firstAttribute="bottom" secondItem="NUM-Vn-wUf" secondAttribute="bottom" id="5e6-Jn-tom"/>
+                <constraint firstAttribute="trailing" secondItem="NUM-Vn-wUf" secondAttribute="trailing" id="Awj-Tg-tsj"/>
+                <constraint firstItem="NUM-Vn-wUf" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="L5a-dl-Cal"/>
+            </constraints>
+            <point key="canvasLocation" x="159.5" y="220"/>
+        </customView>
+    </objects>
+</document>

+ 44 - 0
PDF Office/PDF Master/Class/PDFTools/RemovePassword/New/KMRemovePasswordWindowController.swift

@@ -0,0 +1,44 @@
+//
+//  KMRemovePasswordWindowController.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/11/13.
+//
+
+import Cocoa
+
+typealias KMRemovePasswordWindowControllerBatchAction = (_ controller: NSWindowController, _ files: [KMFileAttribute]) -> Void
+typealias KMRemovePasswordWindowControllerCancelAction = (_ controller: NSWindowController) -> Void
+class KMRemovePasswordWindowController: NSWindowController {
+
+    @IBOutlet weak var removePasswordView: KMRemovePasswordView!
+
+    var batchAction: KMRemovePasswordWindowControllerBatchAction?
+    var cancelAction: KMRemovePasswordWindowControllerCancelAction?
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        self.window!.title = NSLocalizedString("PDF Password Remover", comment: "")
+        
+        self.removePasswordView.removeAction = { [unowned self] view, files in
+            self.removeFilesPassword(files: files)
+        }
+        
+        self.removePasswordView.cancelAction = { [unowned self] view in
+            self.cancelAction?(self)
+        }
+        
+        self.removePasswordView.batchAction = { [unowned self] view, files in
+            self.batchAction?(self, files)
+        }
+    }
+}
+
+extension KMRemovePasswordWindowController {
+    func removeFilesPassword(files: [KMFileAttribute]) {
+        
+    }
+}

+ 43 - 0
PDF Office/PDF Master/Class/PDFTools/RemovePassword/New/KMRemovePasswordWindowController.xib

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMRemovePasswordWindowController" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="removePasswordView" destination="cbP-vh-xt9" id="SIX-9h-Efd"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <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="480" height="270"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="cbP-vh-xt9" customClass="KMRemovePasswordView" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="cbP-vh-xt9" secondAttribute="bottom" id="5Hz-ja-zYN"/>
+                    <constraint firstAttribute="trailing" secondItem="cbP-vh-xt9" secondAttribute="trailing" id="erd-3O-8oY"/>
+                    <constraint firstItem="cbP-vh-xt9" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="kcH-tN-JBu"/>
+                    <constraint firstItem="cbP-vh-xt9" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="qSS-aj-3x9"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="-28" y="136"/>
+        </window>
+    </objects>
+</document>

+ 71 - 0
PDF Office/PDF Master/Class/PDFTools/RemovePassword/New/View/KMRemovePasswordView.swift

@@ -0,0 +1,71 @@
+//
+//  KMRemovePasswordView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/11/13.
+//
+
+import Cocoa
+
+typealias KMRemovePasswordViewCancelAction = (_ view: KMRemovePasswordView) -> Void
+typealias KMRemovePasswordViewBatchAction = (_ view: KMRemovePasswordView, _ files: [KMFileAttribute]) -> Void
+typealias KMRemovePasswordViewRemoveAction = (_ view: KMRemovePasswordView, _ files: [KMFileAttribute]) -> Void
+
+class KMRemovePasswordView: KMBaseXibView {
+
+    @IBOutlet weak var batchButton: NSButton!
+    @IBOutlet weak var decryButton: NSButton!
+    @IBOutlet weak var cancelButton: NSButton!
+    @IBOutlet weak var progressIndicator: NSProgressIndicator!
+    @IBOutlet weak var label1: NSTextField!
+    @IBOutlet weak var label2: NSTextField!
+    
+    var batchAction: KMRemovePasswordViewBatchAction?
+    var cancelAction: KMRemovePasswordViewCancelAction?
+    var removeAction: KMRemovePasswordViewRemoveAction?
+    
+    var files: [KMFileAttribute] = []
+    var lockFilePathArray: [KMFileAttribute] = []
+    var lockFileIndex: Int = 0
+    var savePath: String = ""
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    override func setup() {
+        self.progressIndicator.isHidden = true
+    }
+    
+    override func updateLanguage() {
+        self.batchButton.title = NSLocalizedString("Batch", comment: "")
+        self.decryButton.title = NSLocalizedString("Remove Password", comment: "")
+        self.cancelButton.title = NSLocalizedString("Cancel", comment: "")
+        label1.stringValue = NSLocalizedString("PDF Password Remover is an easy-to-use PDF security remover, which helps users decrypt PDF protections and remove restrictions on printing, editing and copying.",comment: "")
+        label2.stringValue = NSLocalizedString("If open password is required, you need to enter the right password first and then remove protections from PDF files.",comment: "")
+    }
+}
+
+
+extension KMRemovePasswordView {
+    @IBAction func batchButtonAction(_ sender: Any) {
+        guard let callBack = batchAction else { return }
+        
+        callBack(self, files)
+    }
+    
+    @IBAction func cancelButtonAction(_ sender: Any) {
+        guard let callBack = cancelAction else { return }
+        
+        callBack(self)
+    }
+    
+    
+    @IBAction func removeButtonAction(_ sender: Any) {
+        guard let callBack = removeAction else { return }
+        
+        callBack(self, files)
+    }
+}

+ 129 - 0
PDF Office/PDF Master/Class/PDFTools/RemovePassword/New/View/KMRemovePasswordView.xib

@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMRemovePasswordView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="batchButton" destination="ICS-FO-MJ6" id="fJd-SR-Rpy"/>
+                <outlet property="cancelButton" destination="VMK-65-rig" id="4ok-JO-85q"/>
+                <outlet property="decryButton" destination="U6y-dr-eGp" id="uBE-4X-EE3"/>
+                <outlet property="label1" destination="bi6-W8-Kp0" id="NwB-9b-fpg"/>
+                <outlet property="label2" destination="14s-mh-LNU" id="uc9-Qj-acm"/>
+                <outlet property="progressIndicator" destination="s8v-hp-p3O" id="YbA-gq-ILz"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="176"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <view wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="svP-Bi-lkQ">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="176"/>
+                    <subviews>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="U6y-dr-eGp">
+                            <rect key="frame" x="384" y="13" width="83" height="32"/>
+                            <buttonCell key="cell" type="push" title="Decrypt" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Ke7-OI-8Lb">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                                <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                            </buttonCell>
+                            <connections>
+                                <action selector="removeButtonAction:" target="-2" id="zti-Ji-Png"/>
+                            </connections>
+                        </button>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ICS-FO-MJ6">
+                            <rect key="frame" x="13" y="13" width="83" height="32"/>
+                            <buttonCell key="cell" type="push" title="Remove" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="RXV-bA-i3J">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                            <connections>
+                                <action selector="batchButtonAction:" target="-2" id="7Dj-w1-ABM"/>
+                            </connections>
+                        </button>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VMK-65-rig">
+                            <rect key="frame" x="315" y="13" width="76" height="32"/>
+                            <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="wwk-nI-ik7">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                                <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                            </buttonCell>
+                            <connections>
+                                <action selector="cancelButtonAction:" target="-2" id="i55-2v-f6L"/>
+                            </connections>
+                        </button>
+                        <textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="bi6-W8-Kp0">
+                            <rect key="frame" x="56" y="126" width="386" height="32"/>
+                            <textFieldCell key="cell" title="sdfsdfjslkdfjlskdjfalskdfjalskdfjasldkfjasdlkfajsdflkajsdflaksdfjalkdsf" id="m87-UQ-mbq">
+                                <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 focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="14s-mh-LNU">
+                            <rect key="frame" x="56" y="70" width="386" height="48"/>
+                            <textFieldCell key="cell" id="eVx-uv-YAh">
+                                <font key="font" metaFont="system"/>
+                                <string key="title">asdfasdflajdsflkadsfjalkdsfjalkdsfjasdlfkajdsflkajsdflakdjflasdfasdflajdsflkadsfjalkdsfjalkdsfjasdlfkajdsflkajsdflakdjflakdfasdfasdflajdsflkadsfjalkdsfjalkdsfjasdlfkajdsflkajsdflakdjflakdfakdf</string>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="s8v-hp-p3O">
+                            <rect key="frame" x="224" y="72" width="32" height="32"/>
+                        </progressIndicator>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="uPk-z4-YaG">
+                            <rect key="frame" x="40" y="142" width="14" height="14"/>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameElse1" id="rZx-K1-cxb"/>
+                        </imageView>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="zhW-4H-Ahi">
+                            <rect key="frame" x="40" y="102" width="14" height="14"/>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameElse2" id="ioN-bm-fLE"/>
+                        </imageView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="VMK-65-rig" firstAttribute="centerY" secondItem="ICS-FO-MJ6" secondAttribute="centerY" id="AYM-NI-qNd"/>
+                        <constraint firstItem="ICS-FO-MJ6" firstAttribute="leading" secondItem="svP-Bi-lkQ" secondAttribute="leading" constant="20" id="FeI-JN-zrr"/>
+                        <constraint firstItem="ICS-FO-MJ6" firstAttribute="top" secondItem="14s-mh-LNU" secondAttribute="bottom" constant="30" id="GXG-XT-Vt0"/>
+                        <constraint firstAttribute="bottom" secondItem="U6y-dr-eGp" secondAttribute="bottom" constant="20" id="NYV-4Q-X8K"/>
+                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bi6-W8-Kp0" secondAttribute="trailing" constant="40" id="O9P-iG-aeM"/>
+                        <constraint firstItem="zhW-4H-Ahi" firstAttribute="leading" secondItem="uPk-z4-YaG" secondAttribute="leading" id="PM2-Xd-5Gd"/>
+                        <constraint firstItem="bi6-W8-Kp0" firstAttribute="leading" secondItem="uPk-z4-YaG" secondAttribute="trailing" constant="4" id="QuG-3K-T2a"/>
+                        <constraint firstItem="14s-mh-LNU" firstAttribute="top" secondItem="bi6-W8-Kp0" secondAttribute="bottom" constant="8" id="YnC-9p-kPV"/>
+                        <constraint firstItem="14s-mh-LNU" firstAttribute="leading" secondItem="bi6-W8-Kp0" secondAttribute="leading" id="ZXI-3y-gTM"/>
+                        <constraint firstAttribute="trailing" secondItem="U6y-dr-eGp" secondAttribute="trailing" constant="20" id="ceO-3b-ujM"/>
+                        <constraint firstItem="uPk-z4-YaG" firstAttribute="top" secondItem="svP-Bi-lkQ" secondAttribute="top" constant="20" id="fHI-UX-B7e"/>
+                        <constraint firstItem="U6y-dr-eGp" firstAttribute="centerY" secondItem="ICS-FO-MJ6" secondAttribute="centerY" id="fay-UU-af1"/>
+                        <constraint firstItem="s8v-hp-p3O" firstAttribute="centerY" secondItem="svP-Bi-lkQ" secondAttribute="centerY" id="lJr-is-JaB"/>
+                        <constraint firstItem="14s-mh-LNU" firstAttribute="top" secondItem="zhW-4H-Ahi" secondAttribute="top" constant="-2" id="pOL-6a-4Fd"/>
+                        <constraint firstItem="uPk-z4-YaG" firstAttribute="leading" secondItem="svP-Bi-lkQ" secondAttribute="leading" constant="40" id="qGr-0R-mdj"/>
+                        <constraint firstItem="bi6-W8-Kp0" firstAttribute="top" secondItem="uPk-z4-YaG" secondAttribute="top" constant="-2" id="qj6-Oo-1Kw"/>
+                        <constraint firstItem="U6y-dr-eGp" firstAttribute="leading" secondItem="VMK-65-rig" secondAttribute="trailing" constant="7" id="tLr-v1-kvd"/>
+                        <constraint firstItem="s8v-hp-p3O" firstAttribute="centerX" secondItem="svP-Bi-lkQ" secondAttribute="centerX" id="y6q-Xk-P1x"/>
+                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="14s-mh-LNU" secondAttribute="trailing" constant="40" id="zch-xp-rAF"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="svP-Bi-lkQ" secondAttribute="trailing" id="BWk-LQ-c86"/>
+                <constraint firstAttribute="bottom" secondItem="svP-Bi-lkQ" secondAttribute="bottom" id="Fh7-RG-QoD"/>
+                <constraint firstItem="svP-Bi-lkQ" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="QKO-Ps-VDa"/>
+                <constraint firstItem="svP-Bi-lkQ" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="lko-Lz-y8Q"/>
+            </constraints>
+            <point key="canvasLocation" x="-28" y="146"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameElse1" width="14" height="14"/>
+        <image name="KMImageNameElse2" width="14" height="14"/>
+    </resources>
+</document>

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/RemovePassword/VC/KMBatchOperateRemovePasswordViewController.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>

+ 12 - 12
PDF Office/PDF Master/Class/PDFTools/Secure/Controller/KMRemovePasswordAlertWindowController.xib

@@ -1,12 +1,12 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMRemovePasswordAlertWindowController" customModule="PDF_Office" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMRemovePasswordAlertWindowController" customModule="PDF_Master" customModuleProvider="target">
             <connections>
                 <outlet property="cancelButton" destination="QRG-T6-oeQ" id="u2h-Nx-fq8"/>
                 <outlet property="confirmButton" destination="tSV-Qz-dkQ" id="iHE-vw-yyX"/>
@@ -27,7 +27,7 @@
                 <rect key="frame" x="0.0" y="0.0" width="260" height="141"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="YOX-X4-aDm">
+                    <textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="YOX-X4-aDm">
                         <rect key="frame" x="38" y="91" width="184" height="16"/>
                         <constraints>
                             <constraint firstAttribute="width" constant="180" id="Cqc-4h-EIJ"/>
@@ -46,25 +46,25 @@
                             <subviews>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QRG-T6-oeQ">
                                     <rect key="frame" x="62" y="25" width="60" height="30"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="30" id="ZcI-4a-3mW"/>
-                                        <constraint firstAttribute="width" constant="60" id="cfC-Re-iaY"/>
-                                    </constraints>
                                     <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="T2I-An-iOa">
                                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                         <font key="font" metaFont="system"/>
                                     </buttonCell>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="30" id="ZcI-4a-3mW"/>
+                                        <constraint firstAttribute="width" constant="60" id="cfC-Re-iaY"/>
+                                    </constraints>
                                 </button>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tSV-Qz-dkQ">
                                     <rect key="frame" x="138" y="25" width="60" height="30"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="60" id="Amd-Go-ThU"/>
-                                        <constraint firstAttribute="height" constant="30" id="Brz-ZU-ukI"/>
-                                    </constraints>
                                     <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="mwI-g8-Olc">
                                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                         <font key="font" metaFont="system"/>
                                     </buttonCell>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="60" id="Amd-Go-ThU"/>
+                                        <constraint firstAttribute="height" constant="30" id="Brz-ZU-ukI"/>
+                                    </constraints>
                                 </button>
                             </subviews>
                             <constraints>

+ 8 - 7
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarViewController.xib

@@ -1,7 +1,8 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -44,10 +45,6 @@
                 </textField>
                 <popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="sfH-r9-sge">
                     <rect key="frame" x="35" y="-2" width="20" height="20"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="20" id="Yeh-3r-jhb"/>
-                        <constraint firstAttribute="width" constant="15" id="eUO-B8-dXv"/>
-                    </constraints>
                     <popUpButtonCell key="cell" type="bevel" title="Item" bezelStyle="regularSquare" alignment="left" lineBreakMode="truncatingTail" tag="10000" imageScaling="proportionallyDown" inset="2" pullsDown="YES" arrowPosition="noArrow" autoenablesItems="NO" altersStateOfSelectedItem="NO" selectedItem="PCC-ea-jbI" id="0io-Bv-6t5" userLabel="Fit ">
                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                         <font key="font" metaFont="menu"/>
@@ -90,6 +87,10 @@
                             </items>
                         </menu>
                     </popUpButtonCell>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="Yeh-3r-jhb"/>
+                        <constraint firstAttribute="width" constant="15" id="eUO-B8-dXv"/>
+                    </constraints>
                     <connections>
                         <action selector="zoomModelSelectButtonAction:" target="-2" id="ch8-xQ-hzo"/>
                     </connections>
@@ -107,6 +108,6 @@
         </view>
     </objects>
     <resources>
-        <image name="KMImageNameUXIconBtnArrowDown" width="16" height="16"/>
+        <image name="KMImageNameUXIconBtnArrowDown" width="17" height="16"/>
     </resources>
 </document>

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

@@ -2950,21 +2950,67 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
                 #endif
                 
                 if (index == 1) { /// 设置密码
-                    if (!self.listView.document!.allowsCopying || !self.listView.document!.allowsPrinting) {
-                        KMPasswordInputWindow.openWindow(window: self.view.window!, type: .owner, url: self.listView.document.documentURL) { [weak self]  result, password in
-                            if (result == .cancel) {
-                                return
-                            }
-                            
-                            self?.isSaveKeyChain = false
-                            self?.listView.document.unlock(withPassword: password)
-                            self?.hiddenSecureLimitTip()
-                            
-                            self?.showSecureWindow((self?.listView.document.documentURL)!)
-                        }
-                        return
+//                    if (!self.listView.document!.allowsCopying || !self.listView.document!.allowsPrinting) {
+//                        KMPasswordInputWindow.openWindow(window: self.view.window!, type: .owner, url: self.listView.document.documentURL) { [weak self]  result, password in
+//                            if (result == .cancel) {
+//                                return
+//                            }
+//                            
+//                            self?.isSaveKeyChain = false
+//                            self?.listView.document.unlock(withPassword: password)
+//                            self?.hiddenSecureLimitTip()
+//                            
+//                            self?.showSecureWindow((self?.listView.document.documentURL)!)
+//                        }
+//                        return
+//                    }
+//                    self.showSecureWindow(self.listView.document.documentURL)
+                    let controller = KMSecurityWindowController(windowNibName: "KMSecurityWindowController")
+                    self.currentWindowController = controller
+                    
+                    controller.batchAction = { [unowned self] controller, files in
+                        self.view.window?.endSheet((self.currentWindowController.window)!)
+                        self.currentWindowController = nil
+                        
+                        self.toolbarController.cancelSelected(KMToolbarToolCompressItemIdentifier)
+                        
+                        let batchWindowController = KMBatchOperateWindowController.sharedWindowController
+                                batchWindowController.window?.makeKeyAndOrderFront("")
+                        let batchOperateFile = KMBatchOperateFile(filePath: files.first?.filePath ?? "")
+                        batchWindowController.switchToOperateType(.AddPassword, files: [batchOperateFile])
+                        batchWindowController.window?.makeKeyAndOrderFront("")
+                    }
+                    
+                    controller.cancelAction = { [unowned self] controller in
+                        self.view.window?.endSheet((self.currentWindowController.window)!)
+                        self.currentWindowController = nil
+                    }
+                    await NSWindow.currentWindow().beginSheet(controller.window!)
+                    
+                    return
+                } else if index == 2 {
+                    let controller = KMRemovePasswordWindowController(windowNibName: "KMRemovePasswordWindowController")
+                    self.currentWindowController = controller
+                    
+                    controller.batchAction = { [unowned self] controller, files in
+                        self.view.window?.endSheet((self.currentWindowController.window)!)
+                        self.currentWindowController = nil
+                        
+                        self.toolbarController.cancelSelected(KMToolbarToolCompressItemIdentifier)
+                        
+                        let batchWindowController = KMBatchOperateWindowController.sharedWindowController
+                                batchWindowController.window?.makeKeyAndOrderFront("")
+                        let batchOperateFile = KMBatchOperateFile(filePath: files.first?.filePath ?? "")
+                        batchWindowController.switchToOperateType(.RemovePassword, files: [batchOperateFile])
+                        batchWindowController.window?.makeKeyAndOrderFront("")
                     }
-                    self.showSecureWindow(self.listView.document.documentURL)
+                    
+                    controller.cancelAction = { [unowned self] controller in
+                        self.view.window?.endSheet((self.currentWindowController.window)!)
+                        self.currentWindowController = nil
+                    }
+                    await NSWindow.currentWindow().beginSheet(controller.window!)
+//
                     return
                 }
                 
@@ -3087,6 +3133,7 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
             KMPrint("KMToolbarCropIdentifier \(index)")
         } else if (toolbarItem.itemIdentifier == KMToolbarToolSecureItemIdentifier) {
             KMPrint("KMToolbarToolSecureItemIdentifier \(index)")
+            self.clickChildTool(type: .secure, index: index)
         }
     }