Browse Source

【BOTA】注释 - 筛选逻辑梳理,UI优化,性能提升

lizhe 1 year ago
parent
commit
6a6859f68a
19 changed files with 1305 additions and 53 deletions
  1. 120 0
      PDF Office/PDF Master.xcodeproj/project.pbxproj
  2. 148 23
      PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  3. 7 8
      PDF Office/PDF Master/Class/Home/ViewController/customViewController/KMDesignPropertySelector.xib
  4. 12 13
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMAnnotationViewController.swift
  5. 17 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/KMAnnotationScreenViewController.swift
  6. 21 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/KMAnnotationScreenViewController.xib
  7. 429 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift
  8. 96 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.xib
  9. 96 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenAuthorViewItem.swift
  10. 52 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenAuthorViewItem.xib
  11. 63 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenColorViewItem.swift
  12. 37 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenColorViewItem.xib
  13. 42 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenHeadView.swift
  14. 34 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenHeadView.xib
  15. 88 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenTypeViewItem.swift
  16. 37 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenTypeViewItem.xib
  17. 2 3
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteColorCollectionViewItem.xib
  18. 2 3
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteFilterCollevtionViewItem.xib
  19. 2 3
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteTypeCollectionViewItem.xib

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

@@ -1109,6 +1109,42 @@
 		AD0FA51629A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD0FA51529A9FA8F00EDEB50 /* KMResetPasswordView.xib */; };
 		AD0FA51729A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD0FA51529A9FA8F00EDEB50 /* KMResetPasswordView.xib */; };
 		AD0FA51829A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD0FA51529A9FA8F00EDEB50 /* KMResetPasswordView.xib */; };
+		AD1CA3F72A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA3F52A05FCB60070541F /* KMAnnotationScreenViewController.swift */; };
+		AD1CA3F82A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA3F52A05FCB60070541F /* KMAnnotationScreenViewController.swift */; };
+		AD1CA3F92A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA3F52A05FCB60070541F /* KMAnnotationScreenViewController.swift */; };
+		AD1CA3FA2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA3F62A05FCB60070541F /* KMAnnotationScreenViewController.xib */; };
+		AD1CA3FB2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA3F62A05FCB60070541F /* KMAnnotationScreenViewController.xib */; };
+		AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA3F62A05FCB60070541F /* KMAnnotationScreenViewController.xib */; };
+		AD1CA3FF2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA3FE2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift */; };
+		AD1CA4002A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA3FE2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift */; };
+		AD1CA4012A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA3FE2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift */; };
+		AD1CA4032A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4022A06040B0070541F /* KMAnnotationScreenCollectionView.xib */; };
+		AD1CA4042A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4022A06040B0070541F /* KMAnnotationScreenCollectionView.xib */; };
+		AD1CA4052A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4022A06040B0070541F /* KMAnnotationScreenCollectionView.xib */; };
+		AD1CA4112A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA40F2A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift */; };
+		AD1CA4122A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA40F2A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift */; };
+		AD1CA4132A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA40F2A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift */; };
+		AD1CA4142A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4102A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib */; };
+		AD1CA4152A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4102A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib */; };
+		AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4102A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib */; };
+		AD1CA4192A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA4172A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift */; };
+		AD1CA41A2A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA4172A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift */; };
+		AD1CA41B2A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA4172A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift */; };
+		AD1CA41C2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4182A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib */; };
+		AD1CA41D2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4182A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib */; };
+		AD1CA41E2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4182A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib */; };
+		AD1CA4212A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA41F2A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift */; };
+		AD1CA4222A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA41F2A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift */; };
+		AD1CA4232A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA41F2A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift */; };
+		AD1CA4242A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4202A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib */; };
+		AD1CA4252A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4202A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib */; };
+		AD1CA4262A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4202A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib */; };
+		AD1CA4302A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA42F2A0640F20070541F /* KMAnnotationScreenHeadView.swift */; };
+		AD1CA4312A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA42F2A0640F20070541F /* KMAnnotationScreenHeadView.swift */; };
+		AD1CA4322A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1CA42F2A0640F20070541F /* KMAnnotationScreenHeadView.swift */; };
+		AD1CA4342A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4332A0640FC0070541F /* KMAnnotationScreenHeadView.xib */; };
+		AD1CA4352A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4332A0640FC0070541F /* KMAnnotationScreenHeadView.xib */; };
+		AD1CA4362A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1CA4332A0640FC0070541F /* KMAnnotationScreenHeadView.xib */; };
 		AD2D74AD29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */; };
 		AD2D74AE29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */; };
 		AD2D74AF29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */; };
@@ -3722,6 +3758,18 @@
 		AD0FA50D29A9E75000EDEB50 /* KMLoginInputPasswordView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLoginInputPasswordView.xib; sourceTree = "<group>"; };
 		AD0FA51129A9FA8600EDEB50 /* KMResetPasswordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMResetPasswordView.swift; sourceTree = "<group>"; };
 		AD0FA51529A9FA8F00EDEB50 /* KMResetPasswordView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMResetPasswordView.xib; sourceTree = "<group>"; };
+		AD1CA3F52A05FCB60070541F /* KMAnnotationScreenViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationScreenViewController.swift; sourceTree = "<group>"; };
+		AD1CA3F62A05FCB60070541F /* KMAnnotationScreenViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationScreenViewController.xib; sourceTree = "<group>"; };
+		AD1CA3FE2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationScreenCollectionView.swift; sourceTree = "<group>"; };
+		AD1CA4022A06040B0070541F /* KMAnnotationScreenCollectionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationScreenCollectionView.xib; sourceTree = "<group>"; };
+		AD1CA40F2A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationScreenColorViewItem.swift; sourceTree = "<group>"; };
+		AD1CA4102A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationScreenColorViewItem.xib; sourceTree = "<group>"; };
+		AD1CA4172A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationScreenTypeViewItem.swift; sourceTree = "<group>"; };
+		AD1CA4182A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationScreenTypeViewItem.xib; sourceTree = "<group>"; };
+		AD1CA41F2A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationScreenAuthorViewItem.swift; sourceTree = "<group>"; };
+		AD1CA4202A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationScreenAuthorViewItem.xib; sourceTree = "<group>"; };
+		AD1CA42F2A0640F20070541F /* KMAnnotationScreenHeadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationScreenHeadView.swift; sourceTree = "<group>"; };
+		AD1CA4332A0640FC0070541F /* KMAnnotationScreenHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAnnotationScreenHeadView.xib; sourceTree = "<group>"; };
 		AD2D74AB29F0CEB300EDC5E4 /* KMCancellationWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCancellationWindowController.swift; sourceTree = "<group>"; };
 		AD2D74AC29F0CEB300EDC5E4 /* KMCancellationWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCancellationWindowController.xib; sourceTree = "<group>"; };
 		AD2D74B429F0D39500EDC5E4 /* KMCancellationSuccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCancellationSuccessView.swift; sourceTree = "<group>"; };
@@ -4925,6 +4973,7 @@
 		899700F128F40308009AF911 /* Annotation */ = {
 			isa = PBXGroup;
 			children = (
+				AD1CA3F42A05FC6A0070541F /* KMScreenViewController */,
 				AD867FA429DFB27C00F00440 /* KMAnnotationView */,
 				AD867F9F29DEB48A00F00440 /* KMAnnotationTool */,
 				899700F428F4051B009AF911 /* KMAnnotationViewController.swift */,
@@ -5654,6 +5703,41 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		AD1CA3F42A05FC6A0070541F /* KMScreenViewController */ = {
+			isa = PBXGroup;
+			children = (
+				AD1CA3FD2A05FCD50070541F /* ScreenCollectionView */,
+				AD1CA3F52A05FCB60070541F /* KMAnnotationScreenViewController.swift */,
+				AD1CA3F62A05FCB60070541F /* KMAnnotationScreenViewController.xib */,
+			);
+			path = KMScreenViewController;
+			sourceTree = "<group>";
+		};
+		AD1CA3FD2A05FCD50070541F /* ScreenCollectionView */ = {
+			isa = PBXGroup;
+			children = (
+				AD1CA40A2A061C780070541F /* View */,
+				AD1CA3FE2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift */,
+				AD1CA4022A06040B0070541F /* KMAnnotationScreenCollectionView.xib */,
+			);
+			path = ScreenCollectionView;
+			sourceTree = "<group>";
+		};
+		AD1CA40A2A061C780070541F /* View */ = {
+			isa = PBXGroup;
+			children = (
+				AD1CA40F2A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift */,
+				AD1CA4102A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib */,
+				AD1CA4172A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift */,
+				AD1CA4182A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib */,
+				AD1CA41F2A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift */,
+				AD1CA4202A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib */,
+				AD1CA42F2A0640F20070541F /* KMAnnotationScreenHeadView.swift */,
+				AD1CA4332A0640FC0070541F /* KMAnnotationScreenHeadView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		AD2D74AA29F0CE8500EDC5E4 /* Cancellation */ = {
 			isa = PBXGroup;
 			children = (
@@ -8932,6 +9016,7 @@
 				ADE3C1AE29A4779E00793B13 /* KMPrintAccessoryController.xib in Resources */,
 				8942F7B22921D28200389627 /* Quick Start Guide.pdf in Resources */,
 				BBEC00BA295C2C1600A26C98 /* KMBatesPropertyHomeController.xib in Resources */,
+				AD1CA3FA2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
 				BBC2BCC9295DA8F30036B983 /* KMCropPreviewController.xib in Resources */,
 				9FDD0F67294AB645000C4DAD /* KMMainViewController.xib in Resources */,
 				ADB2D6E9294740F30029D2B3 /* KMPrintPaperSetWindowController.xib in Resources */,
@@ -9012,14 +9097,17 @@
 				ADCFFC0629C04617007D3657 /* BOTA.xcassets in Resources */,
 				89E4E7852967BF5A002DBA6F /* KMCustomizeStampViewController.xib in Resources */,
 				F359917B292B7B8A000D25DE /* InitialUserDefaults.plist in Resources */,
+				AD1CA4032A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */,
 				BB8F455A295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.xib in Resources */,
 				BB52372A29C313CA00663BD7 /* KMAnnotationPropertyBaseController.xib in Resources */,
 				AD8810AC29A8463600178CA1 /* KMAccountInfoWindowController.xib in Resources */,
 				ADEC7A84299397F8009A8256 /* SF-Pro-Text-Semibold.otf in Resources */,
+				AD1CA4342A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
 				ADB1FE8229752F3200ED072D /* KMBatchSecurityView.xib in Resources */,
 				ADEC7A81299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */,
 				BB4EEF3029763EE7003A3537 /* KMRedactBaseWindowController.xib in Resources */,
 				BB3EAEB0293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */,
+				AD1CA4242A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */,
 				9F705F79291A3A84005199AD /* KMHistoryFileDeleteWindowController.xib in Resources */,
 				9F0CB4622966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
 				BB5F8A1929BB15AD00365ADB /* pic_mail.pdf in Resources */,
@@ -9053,6 +9141,7 @@
 				BB89721B294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.xib in Resources */,
 				89E4E72F2963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				9F8539E32947126000DF644E /* KMChromiumToolbar.xib in Resources */,
+				AD1CA41C2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				89E93EDB2999DA6D00F10F66 /* KMNoteFilterCollevtionViewItem.xib in Resources */,
 				ADC075D329875F6A006C752F /* KMBatchConverPDFExcelView.xib in Resources */,
 				89E93EE72999DB4200F10F66 /* KMNoteColorCollectionViewItem.xib in Resources */,
@@ -9152,6 +9241,7 @@
 				ADC075EE2987A47E006C752F /* KMBatchConverPDFCSVView.xib in Resources */,
 				ADB1FE9229752F7D00ED072D /* KMBatchBackgroundView.xib in Resources */,
 				9F1F82B7292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
+				AD1CA4142A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				AD68783829A60FC0005B5210 /* KMLoginView.xib in Resources */,
 				9F853A022947137500DF644E /* default-icon.pdf in Resources */,
 				BBC348052955403D008D2CD1 /* KMWatermarkFilePropertyInfoController.xib in Resources */,
@@ -9274,6 +9364,7 @@
 				BB8F4543295A98960037EA22 /* KMHeaderFooterPropertyController.xib in Resources */,
 				ADBC375929CAE95700D93208 /* KMComparativeOutlineSectionCell.xib in Resources */,
 				BBEC00D5295C33D600A26C98 /* KMCreateBatesController.xib in Resources */,
+				AD1CA3FB2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
 				ADC075E6298766E6006C752F /* KMBatchConverPDFImageView.xib in Resources */,
 				ADD1B6C02942DD3D00C3FFF7 /* KMPrintChooseView.xib in Resources */,
 				8997012328F41AB8009AF911 /* KMLeftSideViewController.xib in Resources */,
@@ -9325,6 +9416,7 @@
 				89E93ED12999CEF100F10F66 /* KMNoteOutlineFilterViewController.xib in Resources */,
 				BB99ACD3292E2AEF0048AFD9 /* KMMergeCollectionViewItem.xib in Resources */,
 				9F94748029FA24200042F949 /* Credits.rtf in Resources */,
+				AD1CA4352A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
 				BB00302A298CF7EC002DD1A0 /* KMPreferenceDisplayController.xib in Resources */,
 				8997011A28F40898009AF911 /* KMThumbnailViewController.xib in Resources */,
 				8997010228F40710009AF911 /* KMBookMarkViewController.xib in Resources */,
@@ -9342,6 +9434,7 @@
 				ADBC2D16299CCD10006280C8 /* KMTextfieldButton.xib in Resources */,
 				ADB1FEA32975303F00ED072D /* KMBatchBatesNumberView.xib in Resources */,
 				9FF94F0D29A62B5000B1EF69 /* KMDesignSelect.xib in Resources */,
+				AD1CA41D2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				89E4E7302963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				ADE614B229779C6D00F62ED7 /* KMImageTitleButton.xib in Resources */,
 				9F221EDB29A9EC0900978A59 /* KMFillSignTextPanel.xib in Resources */,
@@ -9354,6 +9447,7 @@
 				AD4B456D294092160076FA14 /* KMOCRChooseView.xib in Resources */,
 				AD867FB829DFBB3200F00440 /* KMAnnotationOutlineCellView.xib in Resources */,
 				ADB1FE9329752F7D00ED072D /* KMBatchBackgroundView.xib in Resources */,
+				AD1CA4252A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */,
 				AD44D657292C9E8C00A94554 /* KMImageToPDFChooseView.xib in Resources */,
 				9F853A092947137500DF644E /* newtab.pdf in Resources */,
 				ADB1FE7329752ED500ED072D /* KMBatchConvertPDFView.xib in Resources */,
@@ -9392,6 +9486,7 @@
 				9FBA0EF228FFC716001117AF /* KMHomeFastToolViewController.xib in Resources */,
 				ADB1FE2C297006DF00ED072D /* KMBatchWindowController.xib in Resources */,
 				ADCFFC0729C04617007D3657 /* BOTA.xcassets in Resources */,
+				AD1CA4152A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				ADC075D429875F6A006C752F /* KMBatchConverPDFExcelView.xib in Resources */,
 				AD4B4551294072B90076FA14 /* KMOCRWindowController.xib in Resources */,
 				ADBC2D3B299F0A5A006280C8 /* KMPrintHelpViewController.xib in Resources */,
@@ -9493,6 +9588,7 @@
 				BB49ED0A293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */,
 				BBEC00B3295C2AF300A26C98 /* KMBatesPreviewController.xib in Resources */,
 				BB49ED12293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
+				AD1CA4042A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */,
 				AD867FBC29DFBB3B00F00440 /* KMAnnotationOutlineSectionView.xib in Resources */,
 				9FAAA32E290BD01D0046FFCE /* KMHomeHistoryFileViewController.xib in Resources */,
 				BB2E666329C885550000FEBC /* KMSignatureHelpViewController.xib in Resources */,
@@ -9594,6 +9690,8 @@
 				ADB2D6FF294882B70029D2B3 /* KMTextFieldStepperView.xib in Resources */,
 				BB7648EA29ECECBF00931039 /* Color.xcassets in Resources */,
 				ADD1B6F22946C06C00C3FFF7 /* KMPrintChoosePageSizeSizeView.xib in Resources */,
+				AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
+				AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
 				ADD1B6F62946C07800C3FFF7 /* KMPrintChoosePageSizePosterView.xib in Resources */,
 				89E4E6F12963D1B7002DBA6F /* KMColorPickerViewController.xib in Resources */,
 				ADB1FE37297008F400ED072D /* KMBatchCollectionView.xib in Resources */,
@@ -9666,6 +9764,7 @@
 				BB7F7C0229AA586900A3E4E7 /* signAdd.png in Resources */,
 				ADD1B6CD2942E85300C3FFF7 /* KMPrintBottomView.xib in Resources */,
 				9F853A012947137500DF644E /* throbber.png in Resources */,
+				AD1CA41E2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				BBA8B7B5293635D80097D183 /* KMPasswordInputWindow.xib in Resources */,
 				F359917D292B7B8A000D25DE /* InitialUserDefaults.plist in Resources */,
 				89752DB22936F505003FF08E /* KMCustomButtonPopMenuViewController.xib in Resources */,
@@ -9762,6 +9861,7 @@
 				89752E092939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
 				BBA8B7A82935CD740097D183 /* KMRemovePasswordAlertWindowController.xib in Resources */,
 				AD4B456E294092160076FA14 /* KMOCRChooseView.xib in Resources */,
+				AD1CA4362A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
 				BBA19F3429ADAC81001A285A /* signPicture_hover.pdf in Resources */,
 				89E4E77E2967B370002DBA6F /* KMDynamicStampViewController.xib in Resources */,
 				ADC25DFE2923BA710080A3F6 /* KMImageToPDFWindowController.xib in Resources */,
@@ -9770,6 +9870,7 @@
 				BB2EDF51296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
 				ADBC375A29CAE95700D93208 /* KMComparativeOutlineSectionCell.xib in Resources */,
 				BB99ACD4292E2AEF0048AFD9 /* KMMergeCollectionViewItem.xib in Resources */,
+				AD1CA4052A06040B0070541F /* KMAnnotationScreenCollectionView.xib in Resources */,
 				BB7F7BFC29AA469F00A3E4E7 /* KMSigntureViewItem.xib in Resources */,
 				9F0CB4A429683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
 				9F8539FE2947137500DF644E /* throbber_waiting.png in Resources */,
@@ -9779,6 +9880,7 @@
 				89E93EF22999DB6600F10F66 /* KMNoteTypeCollectionViewItem.xib in Resources */,
 				ADBC376829CD86A000D93208 /* KMReadModelView.xcassets in Resources */,
 				8942F7FD2926089200389627 /* KMSignatureViewController.xib in Resources */,
+				AD1CA4262A061D190070541F /* KMAnnotationScreenAuthorViewItem.xib in Resources */,
 				BBC3481129558DC1008D2CD1 /* KMBackgroundController.xib in Resources */,
 				89316827296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib in Resources */,
 				BB24D4AC2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
@@ -9883,6 +9985,7 @@
 				BB003021298CEBED002DD1A0 /* KMPreferenceStepper.swift in Sources */,
 				9FDD0FA629533494000C4DAD /* KMJSONParser.swift in Sources */,
 				BBFE6E7F2930EBD400142C01 /* KMCompressWindowController.swift in Sources */,
+				AD1CA4302A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */,
 				BB14700B299DC0D100784A6A /* OIDAuthorizationRequest.m in Sources */,
 				ADE3C1DE29A5AA0B00793B13 /* KMRequestServer.swift in Sources */,
 				BBC3484A2958222C008D2CD1 /* KMBackgroundOutsideView.swift in Sources */,
@@ -10020,6 +10123,7 @@
 				BB88E454294045B4002B3655 /* KMPDFConvertManager.swift in Sources */,
 				ADC075EA2987A38C006C752F /* KMBatchConverPDFCSVView.swift in Sources */,
 				9FAAA332290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
+				AD1CA4112A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */,
 				AD867FC129DFC39400F00440 /* KMBOTAAnnotationItem.swift in Sources */,
 				ADD1B6AB2941E97F00C3FFF7 /* KMPrintWindowController.swift in Sources */,
 				BB8F454F295A9FA50037EA22 /* KMCreateHeaderFooterController.swift in Sources */,
@@ -10219,6 +10323,7 @@
 				BB86C21428F560D1005AD968 /* NSGraphics_SKExtensions.m in Sources */,
 				9F1FE4AE29406E4700E952CA /* CTPresentationModeController.m in Sources */,
 				BB146FC0299DC0D100784A6A /* GTMSessionFetcherLogging.m in Sources */,
+				AD1CA4212A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */,
 				89E4E746296418ED002DBA6F /* TextFieldFormatter.m in Sources */,
 				89E93EED2999DB6600F10F66 /* KMNoteTypeCollectionViewItem.m in Sources */,
 				BB7507E929861C37002DBDB1 /* PasswordWindowController.m in Sources */,
@@ -10295,6 +10400,7 @@
 				BBA8B7AF293600D70097D183 /* KMPasswordInputWindow.swift in Sources */,
 				BBEC00A4295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift in Sources */,
 				BBD1F787296FAC7C00343885 /* KMPageEditSettingBaseView.swift in Sources */,
+				AD1CA3FF2A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */,
 				ADD1B6DF2946BFD500C3FFF7 /* KMPrintChoosePageSizeSizeView.swift in Sources */,
 				BB147032299DC0D200784A6A /* OIDTokenResponse.m in Sources */,
 				BB146FF3299DC0D100784A6A /* OIDLoopbackHTTPServer.m in Sources */,
@@ -10362,6 +10468,7 @@
 				BBC3483B2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.swift in Sources */,
 				AD88109229A7612000178CA1 /* KMRegisterModel.swift in Sources */,
 				ADBC2D1F299CDA29006280C8 /* NSView+Layer.swift in Sources */,
+				AD1CA3F72A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				BB897271294DB6BE0045787C /* KMWatermarkAdjectivePlainView.swift in Sources */,
 				ADBC2D37299F0A5A006280C8 /* KMPrintHelpViewController.swift in Sources */,
@@ -10503,6 +10610,7 @@
 				9F1FE50D29407B2B00E952CA /* KMUploadFilePanel.swift in Sources */,
 				89E4E6E32963CD82002DBA6F /* KMGeneralAnnotationViewController.m in Sources */,
 				9F0CB4BD2977C06300007028 /* KMPropertiesPanelColorSubVC.swift in Sources */,
+				AD1CA4192A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */,
 				BBB9B328299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization+Keychain.m in Sources */,
 				ADC25DF92923BA710080A3F6 /* KMImageToPDFWindowController.swift in Sources */,
 				9F1FE4F029406E4700E952CA /* BackgroundGradientView.m in Sources */,
@@ -10650,6 +10758,7 @@
 				BB003022298CEBED002DD1A0 /* KMPreferenceStepper.swift in Sources */,
 				BB89725F294C5DDA0045787C /* KMWatermarkPropertyInfoController.swift in Sources */,
 				F37322EB292DF9410013862C /* CPDFStampAnnotation+PDFListView.m in Sources */,
+				AD1CA4312A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */,
 				BB14700C299DC0D100784A6A /* OIDAuthorizationRequest.m in Sources */,
 				ADE3C1DF29A5AA0B00793B13 /* KMRequestServer.swift in Sources */,
 				BBC3484B2958222C008D2CD1 /* KMBackgroundOutsideView.swift in Sources */,
@@ -10787,6 +10896,7 @@
 				ADD1B6AC2941E97F00C3FFF7 /* KMPrintWindowController.swift in Sources */,
 				ADC075EB2987A38C006C752F /* KMBatchConverPDFCSVView.swift in Sources */,
 				9FDD0FAF29534FDC000C4DAD /* KMCompLight.swift in Sources */,
+				AD1CA4122A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */,
 				AD867FC229DFC39400F00440 /* KMBOTAAnnotationItem.swift in Sources */,
 				89D9897528FE743E003A3E87 /* KMOutlineView.swift in Sources */,
 				BB8F4550295A9FA50037EA22 /* KMCreateHeaderFooterController.swift in Sources */,
@@ -10986,6 +11096,7 @@
 				89752E052939DB42003FF08E /* KMToolbarViewController.swift in Sources */,
 				9FAAA33A290F72CC0046FFCE /* KMHistoryFileCollectionView.swift in Sources */,
 				BB146FC1299DC0D100784A6A /* GTMSessionFetcherLogging.m in Sources */,
+				AD1CA4222A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */,
 				89E4E747296418ED002DBA6F /* TextFieldFormatter.m in Sources */,
 				89E93EEE2999DB6600F10F66 /* KMNoteTypeCollectionViewItem.m in Sources */,
 				BB7507EA29861C37002DBDB1 /* PasswordWindowController.m in Sources */,
@@ -11062,6 +11173,7 @@
 				9F8DDF352924DA6B006CDC73 /* KMPDFToolsCollectionView.swift in Sources */,
 				BBEC00A5295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift in Sources */,
 				BBD1F788296FAC7C00343885 /* KMPageEditSettingBaseView.swift in Sources */,
+				AD1CA4002A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */,
 				89D2D2BE29486D2400BFF5FE /* KMSignatureCellView.swift in Sources */,
 				BB147033299DC0D200784A6A /* OIDTokenResponse.m in Sources */,
 				BB146FF4299DC0D100784A6A /* OIDLoopbackHTTPServer.m in Sources */,
@@ -11129,6 +11241,7 @@
 				BBC3483C2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.swift in Sources */,
 				AD88109329A7612000178CA1 /* KMRegisterModel.swift in Sources */,
 				ADBC2D20299CDA29006280C8 /* NSView+Layer.swift in Sources */,
+				AD1CA3F82A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				BB49ED07293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				9FDD0F852952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
 				ADBC2D38299F0A5A006280C8 /* KMPrintHelpViewController.swift in Sources */,
@@ -11270,6 +11383,7 @@
 				9F1FE4F129406E4700E952CA /* BackgroundGradientView.m in Sources */,
 				89E4E6E42963CD82002DBA6F /* KMGeneralAnnotationViewController.m in Sources */,
 				9F0CB4BE2977C06300007028 /* KMPropertiesPanelColorSubVC.swift in Sources */,
+				AD1CA41A2A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */,
 				BBB9B329299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization+Keychain.m in Sources */,
 				89752DBE2936FAD0003FF08E /* NSWindow+PopOver.m in Sources */,
 				9F1FE4A329406E4700E952CA /* CTToolbarController.m in Sources */,
@@ -11433,6 +11547,7 @@
 				9F1FE4C529406E4700E952CA /* CTPageTransition.c in Sources */,
 				BBFE6E5F2930809A00142C01 /* KMMergeCollectionPageViewItem.swift in Sources */,
 				ADBA0466292CB90B00BF9184 /* KMBatchProcessingTableRowView.swift in Sources */,
+				AD1CA4232A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */,
 				BB897243294C028A0045787C /* KMWatermarkAdjectiveSegementControl.swift in Sources */,
 				ADE3C1EF29A5AFB100793B13 /* KMRequestServerManager.swift in Sources */,
 				BBAFC84C298519F700D0648E /* KMSavePanelAccessoryController.m in Sources */,
@@ -11444,6 +11559,7 @@
 				899700F828F4051B009AF911 /* KMAnnotationViewController.swift in Sources */,
 				ADB1FE4A2970264500ED072D /* KMBatchCollectionViewPrensenter.swift in Sources */,
 				BBAFC83E2985194800D0648E /* KMPDFEditAppendWindow.m in Sources */,
+				AD1CA4012A0603EE0070541F /* KMAnnotationScreenCollectionView.swift in Sources */,
 				F36AD77929642FE80015AD53 /* CPDFListView+UndoManager.m in Sources */,
 				BBB14A5D2978EBBE00936EDB /* KMRedactMutilPageFlagContentView.swift in Sources */,
 				8942F7C12923670F00389627 /* KMBOTAManagerClass.swift in Sources */,
@@ -11583,6 +11699,7 @@
 				BB146FBF299DC0D100784A6A /* GTMGatherInputStream.m in Sources */,
 				BB8116012992682F0008F536 /* KMSecureLimitAlertView.swift in Sources */,
 				AD3A3589294C11ED00D72802 /* KMPrintPreviewPresenter.swift in Sources */,
+				AD1CA4322A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */,
 				BB49ED1B293F4D4E00C82CA2 /* KMConvertCSVSettingView.swift in Sources */,
 				89752E1B2941FD48003FF08E /* KMSearchCellView.swift in Sources */,
 				BB52373229C3427600663BD7 /* KMCoverButton.m in Sources */,
@@ -11787,6 +11904,7 @@
 				ADBC2D41299F70A8006280C8 /* KMBatchManager.swift in Sources */,
 				BB49ECF8293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				9FBC48BA299B44C600CA39D7 /* KMSecondaryViewController.m in Sources */,
+				AD1CA3F92A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				9F1FE4EC29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
 				8942F80B29275CBC00389627 /* KMOCToolClass.m in Sources */,
 				9F5664892988B16F00020985 /* KMTextfieldVC.swift in Sources */,
@@ -11934,6 +12052,7 @@
 				AD88108F29A760D100178CA1 /* KMRegisterPresenter.swift in Sources */,
 				BB3AAB9229878CE000992A5A /* KMWatermarkAdjectivePropertyMainController.swift in Sources */,
 				ADE3C1A129A3894900793B13 /* KMSearchTableRowView.swift in Sources */,
+				AD1CA41B2A061CE10070541F /* KMAnnotationScreenTypeViewItem.swift in Sources */,
 				AD8810A229A8459000178CA1 /* KMComparativeTableViewController.swift in Sources */,
 				9F0CB4A129683E2600007028 /* KMPropertiesPanelSizeSubVC.swift in Sources */,
 				BBEC00E7295C4D3C00A26C98 /* KMBatesPageInfoView.swift in Sources */,
@@ -11991,6 +12110,7 @@
 				BB49ED00293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
 				BB0542172965705D00F2665C /* KMCropTipView.swift in Sources */,
 				BB89726F294DB67D0045787C /* KMWatermarkAdjectiveBaseView.swift in Sources */,
+				AD1CA4132A061CCD0070541F /* KMAnnotationScreenColorViewItem.swift in Sources */,
 				BB2EDF4E296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */,
 				BBB7B48B2A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				9FBA0EF728FFC8A0001117AF /* KMCollectionView.swift in Sources */,

+ 148 - 23
PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -3367,7 +3367,7 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "312"
             endingLineNumber = "312"
-            landmarkName = "updateNetworkingState(complete:codeIsTure:)"
+            landmarkName = "cleanVerificationCode()"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
@@ -3399,7 +3399,7 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "898"
             endingLineNumber = "898"
-            landmarkName = "addPageItems(pageItems:)"
+            landmarkName = "deletePageItemWithIndexs(indexs:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
@@ -3415,7 +3415,7 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "876"
             endingLineNumber = "876"
-            landmarkName = "deletePageItems(pageItems:)"
+            landmarkName = "rotatePageItems(pageItems:indexPaths:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
@@ -3431,7 +3431,7 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "854"
             endingLineNumber = "854"
-            landmarkName = "deletePageItemWithIndexs(indexs:)"
+            landmarkName = "addRightMenuItem(view:event:)"
             landmarkType = "7">
             <Locations>
                <Location
@@ -3494,6 +3494,21 @@
                   endingLineNumber = "855"
                   offsetFromSymbolStart = "204">
                </Location>
+               <Location
+                  uuid = "A9ECAAB1-38BB-4918-83CA-5C22F5C9553C - d114bd2e5ac387c5"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 @Swift.MainActor () -&gt; () in PDF_Master.KMThumbnailViewController.addRightMenuItem(view: PDF_Master.KMPDFThumbnailItem, event: __C.NSEvent) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMThumbnailViewController.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "856"
+                  endingLineNumber = "856"
+                  offsetFromSymbolStart = "5164">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -3829,6 +3844,21 @@
                   endingLineNumber = "175"
                   offsetFromSymbolStart = "300">
                </Location>
+               <Location
+                  uuid = "888D606D-7723-49E0-BB36-E4A79A34BE4B - 301d95e8689b6d55"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMPageNumberDisplayView.controlTextDidEndEditing(Foundation.Notification) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/ViewController/Views/KMPageNumberDisplayView/KMPageNumberDisplayView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "175"
+                  endingLineNumber = "175"
+                  offsetFromSymbolStart = "316">
+               </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
@@ -3851,65 +3881,160 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "CC6AD11B-07CC-495C-9E67-DAF6DFBA1EF1"
+            uuid = "E7F4D56E-1C39-4024-BBA5-68C70086BBFF"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMAnnotationViewController.swift"
+            filePath = "PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "137"
-            endingLineNumber = "137"
-            landmarkName = "reloadData()"
+            startingLineNumber = "1663"
+            endingLineNumber = "1663"
+            landmarkName = "pdfListViewAddAnnotations(_:forAdd:in:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "9CE3D2D3-00FC-4779-A3AF-EF8E47B7C822"
+            uuid = "DDFDAD4D-1FAD-449D-AF91-B4F18190D84A"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMAnnotationView/KMAnnotationOutlineView.swift"
+            filePath = "PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "81"
-            endingLineNumber = "81"
-            landmarkName = "outlineView(_:numberOfChildrenOfItem:)"
+            startingLineNumber = "798"
+            endingLineNumber = "798"
+            landmarkName = "-addAnnotation:toPage:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "8040E93A-F440-454A-BB85-36008321B2F0"
+            uuid = "F8F24101-9DC5-434C-B667-C4DB164E2A5A"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMAnnotationView/KMAnnotationOutlineView.swift"
+            filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "55"
-            endingLineNumber = "55"
-            landmarkName = "reloadData(expandItemType:)"
+            startingLineNumber = "296"
+            endingLineNumber = "296"
+            landmarkName = "collectionView(_:itemForRepresentedObjectAt:)"
             landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "F8F24101-9DC5-434C-B667-C4DB164E2A5A - 5ae6169ffe1241ff"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMAnnotationScreenCollectionView.collectionView(_: __C.NSCollectionView, itemForRepresentedObjectAt: Foundation.IndexPath) -&gt; __C.NSCollectionViewItem"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "297"
+                  endingLineNumber = "297"
+                  offsetFromSymbolStart = "2644">
+               </Location>
+               <Location
+                  uuid = "F8F24101-9DC5-434C-B667-C4DB164E2A5A - 30a5a179ae88a58e"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 (PDF_Master.KMAnnotationScreenAuthorViewItem, Swift.String) -&gt; () in PDF_Master.KMAnnotationScreenCollectionView.collectionView(_: __C.NSCollectionView, itemForRepresentedObjectAt: Foundation.IndexPath) -&gt; __C.NSCollectionViewItem"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "297"
+                  endingLineNumber = "297"
+                  offsetFromSymbolStart = "132">
+               </Location>
+               <Location
+                  uuid = "F8F24101-9DC5-434C-B667-C4DB164E2A5A - cbca4fa2931e71af"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #3 (PDF_Master.KMAnnotationScreenAuthorViewItem, Swift.String) -&gt; () in PDF_Master.KMAnnotationScreenCollectionView.collectionView(_: __C.NSCollectionView, itemForRepresentedObjectAt: Foundation.IndexPath) -&gt; __C.NSCollectionViewItem"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "296"
+                  endingLineNumber = "296"
+                  offsetFromSymbolStart = "148">
+               </Location>
+            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "45AF52D1-DC90-426A-AE78-E51593214CC5"
+            uuid = "4550EA72-BE4B-48F0-94E2-EBEC17368549"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMAnnotationViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "256"
-            endingLineNumber = "256"
-            landmarkName = "updateExtempViewState()"
+            startingLineNumber = "383"
+            endingLineNumber = "383"
+            landmarkName = "filtrateButtonAction(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "47588C8D-596C-4B68-AD2C-1E0054C9E8EF"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "401"
+            endingLineNumber = "401"
+            landmarkName = "applyButtonAction(sender:)"
             landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "47588C8D-596C-4B68-AD2C-1E0054C9E8EF - 175a23781408860"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMAnnotationScreenCollectionView.applyButtonAction(sender: __C.NSButton) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "401"
+                  endingLineNumber = "401"
+                  offsetFromSymbolStart = "228">
+               </Location>
+               <Location
+                  uuid = "47588C8D-596C-4B68-AD2C-1E0054C9E8EF - 175a23781408860"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Master.KMAnnotationScreenCollectionView.applyButtonAction(sender: __C.NSButton) -&gt; ()"
+                  moduleName = "PDF Master"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "401"
+                  endingLineNumber = "401"
+                  offsetFromSymbolStart = "260">
+               </Location>
+            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
    </Breakpoints>

+ 7 - 8
PDF Office/PDF Master/Class/Home/ViewController/customViewController/KMDesignPropertySelector.xib

@@ -1,12 +1,11 @@
 <?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="21701" 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="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMDesignPropertySelector" customModule="PDF_Office" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMDesignPropertySelector" customModule="PDF_Master" customModuleProvider="target">
             <connections>
                 <outlet property="button" destination="ZAl-Jh-jR1" id="DVf-zL-W93"/>
                 <outlet property="colorIconView" destination="mKX-w2-jip" id="hWC-0E-wa2"/>
@@ -21,11 +20,11 @@
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <customView id="Hz6-mo-xeY">
-            <rect key="frame" x="0.0" y="0.0" width="354" height="0.0"/>
+        <customView misplaced="YES" id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="354" height="32"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="cpP-NK-mOr" customClass="KMMoveBox" customModule="PDF_Office" customModuleProvider="target">
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="cpP-NK-mOr" customClass="KMMoveBox" customModule="PDF_Master" customModuleProvider="target">
                     <rect key="frame" x="0.0" y="0.0" width="354" height="0.0"/>
                     <view key="contentView" id="9us-Cb-BvJ">
                         <rect key="frame" x="0.0" y="0.0" width="354" height="0.0"/>
@@ -73,7 +72,7 @@
             <rect key="frame" x="0.0" y="0.0" width="133" height="63"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="XQU-q6-xNe" customClass="KMDesignPropertyColorBox" customModule="PDF_Office" customModuleProvider="target">
+                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="XQU-q6-xNe" customClass="KMDesignPropertyColorBox" customModule="PDF_Master" customModuleProvider="target">
                     <rect key="frame" x="57" y="22" width="20" height="20"/>
                     <view key="contentView" id="RyW-cP-Cr1">
                         <rect key="frame" x="1" y="1" width="18" height="18"/>

+ 12 - 13
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMAnnotationViewController.swift

@@ -375,26 +375,25 @@ extension KMAnnotationViewController {
 
     @IBAction func filtrateButtonAction(_ sender: NSButton) {
         let menu = NSMenu()
-        let filterVC = KMNoteOutlineFilterViewController()
-        filterVC.path = self.listView.document.documentURL.path
-        filterVC.notesArray = self.allAnnotations
-        filterVC.applyFilterCallback = { [unowned self] (typeArr, colorArr,authArr,isEmpty) in
+        let annotationScreenView = KMAnnotationScreenCollectionView(frame: CGRect(x: 0, y: 0, width: 304, height: 296))
+        annotationScreenView.path = self.listView.document.documentURL.path
+        annotationScreenView.annotations = self.allAnnotations
+        annotationScreenView.applyAction = { [unowned self] (view, typeArray, colorArray, authArray) in
             menu.cancelTracking()
-            self.annotationSort(sortArray: [typeArr!,colorArr!,authArr!])
+            self.annotationSort(sortArray: [typeArray, colorArray, authArray])
         }
-        filterVC.cancelCallback = { isCancel in
-            if isCancel {
-                menu.cancelTracking()
-            }
+        
+        annotationScreenView.cancelAction = { [unowned self] view in
+            menu.cancelTracking()
         }
+            
         let item = menu.addItem(withTitle: "", action: nil, keyEquivalent: "")
         item.target = self
-        item.representedObject = filterVC
-        item.view = filterVC.view
+//        item.representedObject = filterVC
+        item.view = annotationScreenView
         menu.popUp(positioning: nil, at: CGPoint(x: -130, y: 30), in: sender)
     }
-//
-//
+
     @IBAction func deleteButtonAction(_ sender: Any) {
         let alert = NSAlert()
         alert.alertStyle = .critical

+ 17 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/KMAnnotationScreenViewController.swift

@@ -0,0 +1,17 @@
+//
+//  KMAnnotationScreenViewController.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/5/6.
+//
+
+import Cocoa
+
+class KMAnnotationScreenViewController: NSViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+}

+ 21 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/KMAnnotationScreenViewController.xib

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationScreenViewController" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <point key="canvasLocation" x="132" y="-72"/>
+        </customView>
+    </objects>
+</document>

+ 429 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.swift

@@ -0,0 +1,429 @@
+//
+//  KMAnnotationScreenCollectionView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/5/6.
+//
+
+import Cocoa
+
+enum KMAnnotationScreenSectionType: String, CaseIterable {
+    case color = "Color"
+    case type = "Type"
+    case author = "Author"
+    
+    static func allValues() -> [String] {
+        var array: [String] = []
+        for key in KMAnnotationScreenSectionType.allCases {
+            array.append(key.rawValue)
+        }
+        return array
+    }
+}
+
+struct KMAnnotationScreenSection {
+    var title: KMAnnotationScreenSectionType = .type
+    var items: [KMAnnotationScreenItem] = []
+}
+
+class KMAnnotationScreenItem: NSObject {
+    var value: Any?
+    var select: Bool = false
+    var width: CGFloat = 32.0
+}
+
+typealias KMAnnotationScreenCollectionViewCancel = (_ view: KMAnnotationScreenCollectionView) -> ()
+typealias KMAnnotationScreenCollectionViewApply = (_ view: KMAnnotationScreenCollectionView, _ typeArray: Array<Any>, _ colorArray: Array<Any>, _ authorArray: Array<Any>) -> ()
+
+class KMAnnotationScreenCollectionView: KMBaseXibView {
+    @IBOutlet weak var collectionView: NSCollectionView!
+    @IBOutlet weak var clearView: NSView!
+    @IBOutlet weak var doneView: NSView!
+    @IBOutlet weak var cancelView: NSView!
+    
+    var cancelAction: KMAnnotationScreenCollectionViewCancel?
+    var applyAction: KMAnnotationScreenCollectionViewApply?
+    
+    var path: String = ""
+    var annotations: [CPDFAnnotation] = [] {
+        didSet {
+            self.reloadData()
+        }
+    }
+    
+    var clearButton: KMDesignButton?
+    var cancelButton: KMDesignButton?
+    var doneButton: KMDesignButton?
+    
+    var screenArray: [KMAnnotationScreenSection] = []
+    
+    override func setup() {
+        self.backgroundColor(NSColor(hex: "#FFFFFF"))
+        //设置代理
+        self.collectionView.delegate = self
+        self.collectionView.dataSource = self
+        //是否可选中
+        self.collectionView.isSelectable = true
+        //注册cell
+        self.collectionView.register(KMAnnotationScreenColorViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAnnotationScreenColorViewItem"))
+        self.collectionView.register(KMAnnotationScreenTypeViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAnnotationScreenTypeViewItem"))
+        self.collectionView.register(KMAnnotationScreenAuthorViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAnnotationScreenAuthorViewItem"))
+        
+        
+        self.clearButton = KMDesignButton.init(withType: .Text)
+        self.clearView.addSubview(self.clearButton!.view)
+        self.clearButton!.view.frame = self.clearView.bounds
+        self.clearButton!.target = self
+        self.clearButton!.action = #selector(clearButtonAction)
+        self.clearButton!.button(type: .Text, size: .m)
+        
+        
+        self.cancelButton = KMDesignButton.init(withType: .Text)
+        self.cancelView.addSubview(self.cancelButton!.view)
+        self.cancelButton!.view.frame = self.cancelView.bounds
+        self.cancelButton!.target = self
+        self.cancelButton!.action = #selector(cancelButtonAction)
+        self.cancelButton!.button(type: .Sec, size: .m)
+
+        self.doneButton = KMDesignButton.init(withType: .Text)
+        self.doneView.addSubview(self.doneButton!.view)
+        self.doneButton!.view.frame = self.doneView.bounds;
+        self.doneButton!.target = self
+        self.doneButton!.action = #selector(applyButtonAction)
+        self.doneButton!.button(type: .Brand, size: .m)
+    }
+    
+    override func reloadData() {
+        if annotations.count > 0 {
+            var typeSaveArray: [String] = []
+            var colorSaveArray: [NSColor] = []
+            var authorSaveArray: [String] = []
+            
+            let sud = UserDefaults.standard
+            let typeData = sud.object(forKey: "KMNoteOutlineFilterSelectArray_Type" + path) as? Data
+            if typeData != nil {
+                typeSaveArray = NSKeyedUnarchiver.unarchiveObject(with: typeData!) as! [String]
+            }
+            
+            let colorData = sud.object(forKey: "KMNoteOutlineFilterSelectArray_Color" + path) as? Data
+            if colorData != nil {
+                colorSaveArray = NSKeyedUnarchiver.unarchiveObject(with: colorData!) as! [NSColor]
+            }
+            
+            let authorData = sud.object(forKey: "KMNoteOutlineFilterSelectArray_Author" + path) as? Data
+            if authorData != nil {
+                authorSaveArray = NSKeyedUnarchiver.unarchiveObject(with: authorData!) as! [String]
+            }
+            
+            var colorArray: [KMAnnotationScreenItem] = []
+            var typeArray: [KMAnnotationScreenItem] = []
+            var authorArray: [KMAnnotationScreenItem] = []
+            
+            for annotation in annotations {
+                if !(annotation is CPDFLineAnnotation) {
+                    let color: NSColor = annotation.color ?? NSColor.clear
+                    var type: String = annotation.type ?? ""
+                    let author: String = annotation.userName() ?? ""
+                    
+                    if annotation is CPDFRedactAnnotation {
+                        type = "Redact"
+                    } else if annotation is CPDFSignatureAnnotation {
+                        type = "Sign"
+                    }
+                    
+                    //获取基本数据
+                    let typeItem = KMAnnotationScreenItem()
+                    typeItem.value = type
+                    typeItem.select = typeSaveArray.contains(type)
+                    
+                    let colorItem = KMAnnotationScreenItem()
+                    colorItem.value = color
+                    colorItem.select = colorSaveArray.contains(color)
+                    
+                    let authorItem = KMAnnotationScreenItem()
+                    authorItem.value = author
+                    authorItem.select = authorSaveArray.contains(author)
+                    
+                    let paragraphStyle = NSMutableParagraphStyle()
+                    paragraphStyle.alignment = .center;
+                    let size: CGSize = NSString(string: author).boundingRect(with: CGSize(width: 200, height: 32), attributes:
+                                                                                [NSAttributedString.Key.font: NSFont.SFProTextRegular(12.0),
+                                                                                 NSAttributedString.Key.foregroundColor: NSColor(hex: "#252629"),
+                                                                                 NSAttributedString.Key.paragraphStyle: paragraphStyle]).size
+                    authorItem.width = max(size.width + 16, 32)
+                                       
+                    //类型筛选
+                    if typeArray.count == 0 {
+                        typeArray.append(typeItem)
+                    } else {
+                        var isExist = false
+                        for item in typeArray {
+                            if item.value.debugDescription == typeItem.value.debugDescription {
+                                isExist = true
+                            }
+                        }
+                        if !isExist {
+                            typeArray.append(typeItem)
+                        }
+                    }
+                    
+                    //颜色筛选
+                    if colorArray.count == 0 {
+                        colorArray.append(colorItem)
+                    } else {
+                        var isExist = false
+                        for item in colorArray {
+                            var tempColor: NSColor = item.value as! NSColor // 你的NSColor对象
+                            if let rgbColor = tempColor.usingColorSpace(NSColorSpace.genericRGB) {
+                                var red: CGFloat = 0.0
+                                var green: CGFloat = 0.0
+                                var blue: CGFloat = 0.0
+                                var alpha: CGFloat = 0.0
+                                
+                                rgbColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
+                                tempColor = rgbColor
+                                // 现在你可以使用获取到的红、绿、蓝和透明度值进行处理
+                            }
+                            
+                            var tempColor2: NSColor = colorItem.value as! NSColor
+                            if let rgbColor2 = tempColor2.usingColorSpace(NSColorSpace.genericRGB) {
+                                var red: CGFloat = 0.0
+                                var green: CGFloat = 0.0
+                                var blue: CGFloat = 0.0
+                                var alpha: CGFloat = 0.0
+                                
+                                rgbColor2.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
+                                tempColor2 = rgbColor2
+                                // 现在你可以使用获取到的红、绿、蓝和透明度值进行处理
+                            } else {
+                                // 无法转换为通用RGB颜色空间
+                            }
+                            if tempColor.redComponent == tempColor2.redComponent &&
+                                tempColor.greenComponent == tempColor2.greenComponent &&
+                                tempColor.blueComponent == tempColor2.blueComponent &&
+                                tempColor.alphaComponent == tempColor2.alphaComponent {
+                                isExist = true
+                            }
+                        }
+                        if !isExist {
+                            colorArray.append(colorItem)
+                        }
+                    }
+                    
+                    //作者筛选
+                    if authorArray.count == 0 {
+                        authorArray.append(authorItem)
+                    } else {
+                        var isExist = false
+                        for item in authorArray {
+                            if item.value.debugDescription == authorItem.value.debugDescription {
+                                isExist = true
+                            }
+                        }
+                        if !isExist {
+                            authorArray.append(authorItem)
+                        }
+                    }
+                }
+            }
+            
+            self.screenArray.removeAll()
+            let typeSection: KMAnnotationScreenSection = KMAnnotationScreenSection(title: .type, items: typeArray)
+            self.screenArray.append(typeSection)
+            
+            let colorSection: KMAnnotationScreenSection = KMAnnotationScreenSection(title: .color, items: colorArray)
+            self.screenArray.append(colorSection)
+            
+            let authorSection: KMAnnotationScreenSection = KMAnnotationScreenSection(title: .author, items: authorArray)
+            self.screenArray.append(authorSection)
+        }
+        self.collectionView.reloadData()
+    }
+    
+    override func updateUI() {
+        
+    }
+    
+    override func updateLanguage() {
+        self.clearButton!.stringValue = NSLocalizedString("Clear", comment: "");
+        self.cancelButton!.stringValue = NSLocalizedString("Cancel", comment: "");
+        self.doneButton!.stringValue = NSLocalizedString("Apply", comment: "");
+        self.clearButton!.updateUI()
+        self.cancelButton!.updateUI()
+        self.doneButton!.updateUI()
+    }
+}
+
+extension KMAnnotationScreenCollectionView: NSCollectionViewDataSource {
+    public func numberOfSections(in collectionView: NSCollectionView) -> Int {
+        return self.screenArray.count
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+        let section: KMAnnotationScreenSection = (self.screenArray[section])
+        return section.items.count
+    }
+    
+    //返回对应的item自定义个体
+    public func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+        let section = self.screenArray[indexPath.section]
+        if section.items.count > indexPath.item {
+            if section.title == .type {
+                let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAnnotationScreenTypeViewItem"), for: indexPath) as! KMAnnotationScreenTypeViewItem
+                view.item = section.items[indexPath.item] as KMAnnotationScreenItem?
+                
+                view.didSelect = { [unowned self] item, typeString in
+                    item.item?.select = !view.item!.select
+                    self.collectionView.reloadItems(at: [indexPath])
+                }
+                return view
+            } else if section.title == .color {
+                let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAnnotationScreenColorViewItem"), for: indexPath) as! KMAnnotationScreenColorViewItem
+                
+                view.item = section.items[indexPath.item] as KMAnnotationScreenItem?
+                
+                view.didSelect = { [unowned self] item, color in
+                    item.item?.select = !view.item!.select
+                    self.collectionView.reloadItems(at: [indexPath])
+                }
+                return view
+            } else if section.title == .author {
+                let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAnnotationScreenAuthorViewItem"), for: indexPath) as! KMAnnotationScreenAuthorViewItem
+                
+                view.item = section.items[indexPath.item] as KMAnnotationScreenItem?
+                
+                view.didSelect = { [unowned self] item, authorString in
+                    item.item?.select = !view.item!.select
+                    self.collectionView.reloadItems(at: [indexPath])
+                }
+                return view
+            }
+        }
+        return NSCollectionViewItem.init()
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: NSCollectionView.SupplementaryElementKind, at indexPath: IndexPath) -> NSView {
+        var nibName: String?
+        if kind == NSCollectionView.elementKindSectionHeader {
+            nibName = "KMAnnotationScreenHeadView"
+        }
+        
+        let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: nibName!), for: indexPath)
+        if let view = view as? KMAnnotationScreenHeadView {
+            if indexPath.section < self.screenArray.count {
+                let section = self.screenArray[indexPath.section]
+                view.section = section
+            }
+        }
+        return view
+    }
+}
+
+extension KMAnnotationScreenCollectionView: NSCollectionViewDelegate {
+    //当item被选中
+    public func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+//        print("点击")
+//        let view = collectionView.item(at: indexPaths.first!)
+//        if view is KMAnnotationScreenColorViewItem {
+//            let item: KMAnnotationScreenColorViewItem = view as! KMAnnotationScreenColorViewItem
+//            item.item?.select = !item.item!.select
+//        } else if view is KMAnnotationScreenTypeViewItem {
+//            let item: KMAnnotationScreenTypeViewItem = view as! KMAnnotationScreenTypeViewItem
+//            item.item?.select = !item.item!.select
+//        } else if view is KMAnnotationScreenAuthorViewItem {
+//            let item: KMAnnotationScreenAuthorViewItem = view as! KMAnnotationScreenAuthorViewItem
+//            item.item?.select = !item.item!.select
+//        }
+//
+//        if indexPaths.first != nil {
+//            let section: KMAnnotationScreenSection = self.screenArray[indexPaths.first!.section]
+//            let item = section.items[indexPaths.first!.item]
+//            item.select = !item.select
+//        }
+//
+//        self.collectionView.reloadItems(at: indexPaths)
+    }
+    
+   //当item取消选中
+    public func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
+//        let view = collectionView.item(at: indexPaths.first!) as! KMAdvertisementCollectionViewItem
+    }
+}
+
+extension KMAnnotationScreenCollectionView: NSCollectionViewDelegateFlowLayout {
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
+        if indexPath.section < self.screenArray.count {
+            let section = self.screenArray[indexPath.section]
+            if section.title == .author {
+                let item = section.items[indexPath.item]
+                return NSSize(width: item.width, height: 32)
+            }
+        }
+        return NSSize(width: 32, height: 32)
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> NSSize {
+        return NSSize(width: 0, height: 20)
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
+        return 16
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets {
+        return NSEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
+    }
+
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
+        return 16
+    }
+}
+
+extension KMAnnotationScreenCollectionView {
+    @objc func clearButtonAction(sender: NSButton) {
+        for section in self.screenArray {
+            for item in section.items {
+                item.select = false
+            }
+        }
+        self.collectionView.reloadData()
+    }
+    
+    @objc func cancelButtonAction(sender: NSButton) {
+        self.cancelAction?(self)
+    }
+    
+    @objc func applyButtonAction(sender: NSButton) {
+        var typeArray: [Any] = []
+        var colorArray: [Any] = []
+        var authorArray: [Any] = []
+        for section in self.screenArray {
+            for item in section.items {
+                if item.select {
+                    if section.title == .type {
+                        typeArray.append(item.value as Any)
+                    } else if section.title == .color {
+                        colorArray.append(item.value as Any)
+                    } else if section.title == .author {
+                        authorArray.append(item.value as Any)
+                    }
+                }
+            }
+        }
+        
+        let sud = UserDefaults.standard
+        let typeData = try?NSKeyedArchiver.archivedData(withRootObject: typeArray, requiringSecureCoding: false)
+        sud.setValue(typeData, forKey: "KMNoteOutlineFilterSelectArray_Type" + self.path)
+        
+        let colorData = try?NSKeyedArchiver.archivedData(withRootObject: colorArray, requiringSecureCoding: false)
+        sud.setValue(colorData, forKey: "KMNoteOutlineFilterSelectArray_Color" + self.path)
+        
+        let authorData = try?NSKeyedArchiver.archivedData(withRootObject: authorArray, requiringSecureCoding: false)
+        sud.setValue(authorData, forKey: "KMNoteOutlineFilterSelectArray_Author" + self.path)
+        
+        sud.synchronize()
+        
+        self.applyAction?(self, typeArray, colorArray, authorArray)
+    }
+}

+ 96 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/KMAnnotationScreenCollectionView.xib

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationScreenCollectionView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="cancelView" destination="tPD-b0-jH3" id="ujS-qF-bsc"/>
+                <outlet property="clearView" destination="MX4-s9-Em5" id="Bco-Jc-Ntq"/>
+                <outlet property="collectionView" destination="BGA-Sy-LuG" id="tkR-8b-4MG"/>
+                <outlet property="doneView" destination="y8l-Aj-NsA" id="6ay-V4-8iB"/>
+            </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="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y7d-0A-JZ8">
+                    <rect key="frame" x="0.0" y="56" width="480" height="216"/>
+                    <clipView key="contentView" drawsBackground="NO" id="jse-io-ghY">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="216"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <collectionView id="BGA-Sy-LuG">
+                                <rect key="frame" x="0.0" y="0.0" width="465" height="201"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
+                                <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="Br1-lf-mgw">
+                                    <size key="itemSize" width="50" height="50"/>
+                                </collectionViewFlowLayout>
+                                <color key="primaryBackgroundColor" red="1" green="0.99843658089999998" blue="0.99619259260000004" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                            </collectionView>
+                        </subviews>
+                        <color key="backgroundColor" red="1" green="0.99843658089999998" blue="0.99619259260000004" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </clipView>
+                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="GFp-YH-Uj9">
+                        <rect key="frame" x="-100" y="-100" width="233" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="LeJ-8M-Fya">
+                        <rect key="frame" x="234" y="1" width="15" height="143"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                </scrollView>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Yhf-xg-G0e">
+                    <rect key="frame" x="0.0" y="16" width="480" height="32"/>
+                    <subviews>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="MX4-s9-Em5">
+                            <rect key="frame" x="16" y="5" width="35" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="35" id="3xd-hJ-6yM"/>
+                                <constraint firstAttribute="height" constant="22" id="knc-7W-mXO"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="y8l-Aj-NsA">
+                            <rect key="frame" x="384" y="0.0" width="80" height="32"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="80" id="8fu-Ao-oAd"/>
+                                <constraint firstAttribute="height" constant="32" id="s9M-Ec-sjr"/>
+                            </constraints>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="tPD-b0-jH3">
+                            <rect key="frame" x="288" y="0.0" width="80" height="32"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="32" id="LJr-fG-r16"/>
+                                <constraint firstAttribute="width" constant="80" id="LLv-KA-Zn8"/>
+                            </constraints>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="32" id="Gyi-Ju-5WA"/>
+                        <constraint firstItem="y8l-Aj-NsA" firstAttribute="leading" secondItem="tPD-b0-jH3" secondAttribute="trailing" constant="16" id="P2M-Yo-WTv"/>
+                        <constraint firstItem="MX4-s9-Em5" firstAttribute="centerY" secondItem="Yhf-xg-G0e" secondAttribute="centerY" id="ZYd-Ef-gcE"/>
+                        <constraint firstAttribute="trailing" secondItem="y8l-Aj-NsA" secondAttribute="trailing" constant="16" id="atF-xw-8X7"/>
+                        <constraint firstItem="y8l-Aj-NsA" firstAttribute="centerY" secondItem="Yhf-xg-G0e" secondAttribute="centerY" id="cIa-dd-U7N"/>
+                        <constraint firstItem="tPD-b0-jH3" firstAttribute="centerY" secondItem="Yhf-xg-G0e" secondAttribute="centerY" id="dVg-UR-Vne"/>
+                        <constraint firstItem="MX4-s9-Em5" firstAttribute="leading" secondItem="Yhf-xg-G0e" secondAttribute="leading" constant="16" id="rdL-0K-SOx"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="Yhf-xg-G0e" secondAttribute="bottom" constant="16" id="H9h-s0-32M"/>
+                <constraint firstItem="y7d-0A-JZ8" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="HRM-g4-1fC"/>
+                <constraint firstItem="y7d-0A-JZ8" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="VYl-gm-bf4"/>
+                <constraint firstItem="Yhf-xg-G0e" firstAttribute="top" secondItem="y7d-0A-JZ8" secondAttribute="bottom" constant="8" id="mHa-TS-rjP"/>
+                <constraint firstAttribute="trailing" secondItem="Yhf-xg-G0e" secondAttribute="trailing" id="mVd-Sn-2av"/>
+                <constraint firstItem="Yhf-xg-G0e" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="nGW-QW-wrY"/>
+                <constraint firstAttribute="trailing" secondItem="y7d-0A-JZ8" secondAttribute="trailing" id="q02-W8-1YZ"/>
+            </constraints>
+            <point key="canvasLocation" x="129" y="154"/>
+        </customView>
+    </objects>
+</document>

+ 96 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenAuthorViewItem.swift

@@ -0,0 +1,96 @@
+//
+//  KMAnnotationScreenAuthorViewItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/5/6.
+//
+
+import Cocoa
+
+typealias KMAnnotationScreenAuthorViewItemDidSelect = (_ item: KMAnnotationScreenAuthorViewItem, _ authorString: String) -> ()
+
+class KMAnnotationScreenAuthorViewItem: NSCollectionViewItem {
+    @IBOutlet weak var box: KMBox!
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    var didSelect: KMAnnotationScreenAuthorViewItemDidSelect?
+    
+    var item: KMAnnotationScreenItem? {
+        didSet {
+            self.reloadData()
+        }
+    }
+//    var authorButton: KMDesignPropertySelector?
+    
+    var authorString: String = ""
+    var select: Bool = false
+    
+    var hover: Bool = false
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+//        authorButton = KMDesignButton(withType: .Text)
+//        box.contentView = authorButton?.view
+//        authorButton?.view.frame = box.contentView!.bounds
+//        authorButton?.target = self
+//        authorButton?.action = #selector(authorButtonAction)
+//        authorButton?.button(type: .Cta, size: .m)
+//        authorButton?.updateUI()
+//        authorButton?.button.keyEquivalent = KMKeyEquivalent.enter
+        
+//        authorButton = KMDesignPropertySelector.init(withType: .Icon_Btn)
+//        box.contentView = authorButton?.view
+//        authorButton?.target = self
+//        authorButton?.action = #selector(authorButtonAction)
+//        authorButton?.fillColor = NSColor.clear
+//        authorButton?.updateUI()
+        self.titleLabel?.font = NSFont.SFProTextRegular(12.0)
+        self.titleLabel?.textColor = NSColor(hex: "#252629")
+        
+        self.box.moveCallback = { [unowned self] (mouseEntered, mouseBox) in
+            if mouseEntered {
+                self.hover = true
+            } else {
+                self.hover = false
+            }
+            self.reloadData()
+        }
+        
+        self.box.downCallback = { [unowned self] (mouseEntered, mouseBox, event) in
+            select = !select
+            self.updateButtonState(authorString: authorString, select: select)
+            
+            self.didSelect?(self, self.authorString)
+        }
+        
+        self.view.border(NSColor.clear, 0, 4)
+    }
+    
+    func reloadData() {
+        if item != nil {
+            self.updateButtonState(authorString: item!.value as! String, select: item!.select)
+        }
+    }
+}
+
+extension KMAnnotationScreenAuthorViewItem {
+//    @objc func authorButtonAction(sender: NSButton) {
+//        select = !select
+//        self.updateButtonState(authorString: authorString, select: select)
+//
+//        self.didSelect?(self, self.authorString)
+//    }
+    
+    func updateButtonState(authorString: String, select: Bool) {
+        self.authorString = authorString
+        self.titleLabel.stringValue = authorString
+        if (select) {
+            self.view.backgroundColor(NSColor(hex: "#CED0D4", alpha: 0.6))
+        } else if hover {
+            self.view.backgroundColor(NSColor(hex: "#EDEEF0"))
+        } else {
+            self.view.backgroundColor(NSColor(hex: "#CED0D4", alpha: 0))
+        }
+    }
+}

+ 52 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenAuthorViewItem.xib

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationScreenAuthorViewItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="box" destination="hWq-UD-kGk" id="S7r-g2-YNX"/>
+                <outlet property="titleLabel" destination="cEH-5m-Mqw" id="h06-vK-3bW"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="152" height="32"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" cornerRadius="4" translatesAutoresizingMaskIntoConstraints="NO" id="hWq-UD-kGk" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                    <rect key="frame" x="8" y="8" width="136" height="16"/>
+                    <view key="contentView" id="Yci-Ww-9eM">
+                        <rect key="frame" x="0.0" y="0.0" width="136" height="16"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cEH-5m-Mqw">
+                                <rect key="frame" x="50" y="0.0" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="1FX-Fe-lp1">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="cEH-5m-Mqw" firstAttribute="centerX" secondItem="Yci-Ww-9eM" secondAttribute="centerX" id="SYa-1j-96N"/>
+                            <constraint firstItem="cEH-5m-Mqw" firstAttribute="centerY" secondItem="Yci-Ww-9eM" secondAttribute="centerY" id="oYD-9f-xmB"/>
+                        </constraints>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="hWq-UD-kGk" secondAttribute="trailing" constant="8" id="DNf-sE-8Ns"/>
+                <constraint firstItem="hWq-UD-kGk" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="8" id="H1r-Jh-8Rl"/>
+                <constraint firstAttribute="bottom" secondItem="hWq-UD-kGk" secondAttribute="bottom" constant="8" id="PpV-Rw-XMw"/>
+                <constraint firstItem="hWq-UD-kGk" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="8" id="e3O-Yb-umf"/>
+            </constraints>
+            <point key="canvasLocation" x="84" y="107"/>
+        </customView>
+    </objects>
+</document>

+ 63 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenColorViewItem.swift

@@ -0,0 +1,63 @@
+//
+//  KMAnnotationScreenColorViewItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/5/6.
+//
+
+import Cocoa
+
+typealias KMAnnotationScreenColorViewItemDidSelect = (_ item: KMAnnotationScreenColorViewItem, _ color: NSColor) -> ()
+class KMAnnotationScreenColorViewItem: NSCollectionViewItem {
+
+    @IBOutlet weak var box: KMBox!
+    var item: KMAnnotationScreenItem? {
+        didSet {
+            self.reloadData()
+        }
+    }
+    
+    var colorButton: KMDesignPropertySelector?
+    
+    var buttonColor: NSColor = NSColor.clear
+    var select: Bool = false
+    
+    var didSelect: KMAnnotationScreenColorViewItemDidSelect?
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        colorButton = KMDesignPropertySelector.init(withType: .Color_Icon_Btn)
+        box.contentView = colorButton!.view
+        colorButton?.target = self
+        colorButton?.action = #selector(colorButtonAction)
+        colorButton?.fillColor = NSColor.clear
+        colorButton?.updateUI()
+    }
+    
+    func reloadData() {
+        if item != nil {
+            self.updateButtonState(color: item!.value as! NSColor, select: item!.select)
+        }
+    }
+}
+
+extension KMAnnotationScreenColorViewItem {
+    @objc func colorButtonAction(sender: NSButton) {
+        select = !select
+        self.updateButtonState(color: buttonColor, select: select)
+        
+        self.didSelect?(self, self.buttonColor)
+    }
+    
+    func updateButtonState(color: NSColor, select: Bool) {
+        buttonColor = color
+        
+        colorButton?.fillColor = buttonColor;
+        if (select) {
+            colorButton?.state = .Sel;
+        } else {
+            colorButton?.state = .None;
+        }
+    }
+}

+ 37 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenColorViewItem.xib

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationScreenColorViewItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="box" destination="Vd2-Yb-aPM" id="qkB-3X-927"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" cornerRadius="4" translatesAutoresizingMaskIntoConstraints="NO" id="Vd2-Yb-aPM" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                    <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+                    <view key="contentView" id="kPC-6M-xsy">
+                        <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstItem="Vd2-Yb-aPM" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="Uey-45-hZA"/>
+                <constraint firstAttribute="trailing" secondItem="Vd2-Yb-aPM" secondAttribute="trailing" id="ela-y4-b2X"/>
+                <constraint firstItem="Vd2-Yb-aPM" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="iLp-tf-Jss"/>
+                <constraint firstAttribute="bottom" secondItem="Vd2-Yb-aPM" secondAttribute="bottom" id="z2t-7U-GZe"/>
+            </constraints>
+            <point key="canvasLocation" x="-4.5" y="19"/>
+        </customView>
+    </objects>
+</document>

+ 42 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenHeadView.swift

@@ -0,0 +1,42 @@
+//
+//  KMAnnotationScreenHeadView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/5/6.
+//
+
+import Cocoa
+
+class KMAnnotationScreenHeadView: NSView {
+    var section: KMAnnotationScreenSection? {
+        didSet {
+            self.reloadData()
+        }
+    }
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    override func awakeFromNib() {
+        self.updateUI()
+    }
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    func setup() {
+        
+    }
+    
+    func updateUI() {
+        titleLabel.font = NSFont.SFProTextSemibold(12.0)
+        titleLabel.textColor = NSColor(hex: "#616469")
+    }
+    
+    func reloadData() {
+        if section != nil {
+            self.titleLabel.stringValue = section!.title.rawValue
+        }
+    }
+}

+ 34 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenHeadView.xib

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="KMAnnotationScreenHeadView" customModule="PDF_Master" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="423" height="29"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="F0I-PY-4d9">
+                    <rect key="frame" x="14" y="7" width="37" height="16"/>
+                    <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Gap-WB-IgX">
+                        <font key="font" usesAppearanceFont="YES"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+            </subviews>
+            <constraints>
+                <constraint firstItem="F0I-PY-4d9" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="16" id="xm5-DK-cAt"/>
+                <constraint firstItem="F0I-PY-4d9" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="yP5-wh-lgh"/>
+            </constraints>
+            <connections>
+                <outlet property="titleLabel" destination="F0I-PY-4d9" id="BVW-YY-ZC3"/>
+            </connections>
+            <point key="canvasLocation" x="257" y="302"/>
+        </customView>
+    </objects>
+</document>

+ 88 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenTypeViewItem.swift

@@ -0,0 +1,88 @@
+//
+//  KMAnnotationScreenTypeViewItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/5/6.
+//
+
+import Cocoa
+typealias KMAnnotationScreenTypeViewItemDidSelect = (_ item: KMAnnotationScreenTypeViewItem, _ typeString: String) -> ()
+
+class KMAnnotationScreenTypeViewItem: NSCollectionViewItem {
+    
+    @IBOutlet weak var box: KMBox!
+    var item: KMAnnotationScreenItem? {
+        didSet {
+            self.reloadData()
+        }
+    }
+    var typeButton: KMDesignPropertySelector?
+    
+    var typeString: String = ""
+    var select: Bool = false
+    
+    var didSelect: KMAnnotationScreenTypeViewItemDidSelect?
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        typeButton = KMDesignPropertySelector.init(withType: .Icon_Btn)
+        box.contentView = typeButton?.view
+        typeButton?.target = self
+        typeButton?.action = #selector(typeButtonAction)
+        typeButton?.updateUI()
+    }
+    
+    func reloadData() {
+        if item != nil {
+            self.updateButtonState(typeString: item!.value as! String, select: item!.select)
+        }
+    }
+}
+
+extension KMAnnotationScreenTypeViewItem {
+    @objc func typeButtonAction(sender: NSButton) {
+        select = !select
+        self.updateButtonState(typeString: self.typeString, select: select)
+        
+        self.didSelect?(self, self.typeString)
+    }
+    
+    func updateButtonState(typeString: String, select: Bool) {
+        self.typeString = typeString
+        switch typeString {
+        case "FreeText":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolFreeText")!
+        case "Note":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolAnchored")!
+        case "Circle":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolSquareSelect")!
+        case "Square":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolFreeText")!
+        case "Highlight":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolHighlight")!
+        case "Underline":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolUnderline")!
+        case "Strikeout":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolStrikeththrough")!
+        case "Line":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolStraightLineSelect")!
+        case "Freehand":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolPen")!
+        case "Stamp":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolStamp")!
+        case "Sign":
+            typeButton?.image = NSImage(named: "KMImageNameMainToolSignSignature")!
+        case "Redact":
+            typeButton?.image = NSImage(named: "KMImageNameAnnotationListRedact")!
+        default:
+            typeButton?.image = NSImage()
+        }
+        
+        if (select) {
+            typeButton!.state = .Sel
+        } else {
+            typeButton!.state = .Norm
+        }
+    }
+}

+ 37 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/KMScreenViewController/ScreenCollectionView/View/KMAnnotationScreenTypeViewItem.xib

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAnnotationScreenTypeViewItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="box" destination="KPu-9c-2Yk" id="5dv-Ca-0dk"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" cornerRadius="4" translatesAutoresizingMaskIntoConstraints="NO" id="KPu-9c-2Yk" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                    <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+                    <view key="contentView" id="LIh-1f-khJ">
+                        <rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="KPu-9c-2Yk" secondAttribute="trailing" id="OX3-AG-2A6"/>
+                <constraint firstItem="KPu-9c-2Yk" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="XNR-sK-TNM"/>
+                <constraint firstAttribute="bottom" secondItem="KPu-9c-2Yk" secondAttribute="bottom" id="eJt-jo-OaZ"/>
+                <constraint firstItem="KPu-9c-2Yk" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="qEb-6d-9MR"/>
+            </constraints>
+            <point key="canvasLocation" x="-102" y="51"/>
+        </customView>
+    </objects>
+</document>

+ 2 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteColorCollectionViewItem.xib

@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" 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="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>

+ 2 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteFilterCollevtionViewItem.xib

@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" 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="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>

+ 2 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteTypeCollectionViewItem.xib

@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" 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="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>