Browse Source

Merge branch 'develop_PDFReaderProNew' of git.kdan.cc:Mac_PDF/PDF_Office into develop_PDFReaderProNew

# Conflicts:
#	PDF Office/PDF Master.xcodeproj/project.pbxproj
jiajie 1 year ago
parent
commit
ab6c44c7b3
70 changed files with 6138 additions and 712 deletions
  1. 280 0
      PDF Office/PDF Master.xcodeproj/project.pbxproj
  2. 82 33
      PDF Office/PDF Master.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  3. 350 212
      PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 83 20
      PDF Office/PDF Master/AppDelegate.swift
  5. 1540 210
      PDF Office/PDF Master/Base.lproj/Main.storyboard
  6. 44 44
      PDF Office/PDF Master/Class/Batch/Catogary/NSWindow+PopOver.swift
  7. 2 2
      PDF Office/PDF Master/Class/Batch/WindowController/KMBatchOperateLeftViewController.swift
  8. 526 0
      PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift
  9. 49 0
      PDF Office/PDF Master/Class/Common/Category/NSWindow+KMExtension.swift
  10. 25 19
      PDF Office/PDF Master/Class/Common/Category/View/NSMenu+KMExtension.swift
  11. 1 1
      PDF Office/PDF Master/Class/Common/Tools/KMTools.swift
  12. 30 0
      PDF Office/PDF Master/Class/Document/KMMainDocument.swift
  13. 285 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/History/Cell/KMHomeHistoryCollectionItem.swift
  14. 196 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/History/Cell/KMHomeHistoryCollectionItem.xib
  15. 129 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/History/KMHomeHistoryListView.swift
  16. 56 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/History/KMHomeHistoryListView.xib
  17. 12 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/History/Model/KMHomeHistoryListViewModel.swift
  18. 82 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/KMHomeContentView.swift
  19. 252 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/KMHomeContentView.xib
  20. 18 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/NoFileView/KMHomeNOFileView.swift
  21. 71 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/NoFileView/KMHomeNOFileView.xib
  22. 98 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/KMQucikToolsView.swift
  23. 56 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/KMQucikToolsView.xib
  24. 172 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/Model/KMQucikToolsModel.swift
  25. 123 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/View/KMQucikToolCollectionViewItem.swift
  26. 204 0
      PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/View/KMQucikToolCollectionViewItem.xib
  27. 1 1
      PDF Office/PDF Master/Class/Home/ViewController/KMFastToolCollectionViewItem.swift
  28. 5 5
      PDF Office/PDF Master/Class/Home/ViewController/KMFastToolCollectionViewItem.xib
  29. 9 8
      PDF Office/PDF Master/Class/Home/ViewController/KMHistoryFileCollectionViewItem.xib
  30. 6 6
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeFastToolViewController.xib
  31. 13 13
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeHistoryFileViewController.xib
  32. 6 0
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift
  33. 9 1
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.xib
  34. 38 0
      PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/KMHomeQuickToolsWindowController.swift
  35. 43 0
      PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/KMHomeQuickToolsWindowController.xib
  36. 411 0
      PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsCollectionView.swift
  37. 301 0
      PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsCollectionView.xib
  38. 49 0
      PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsWindowCollectionViewItem.swift
  39. 72 0
      PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsWindowCollectionViewItem.xib
  40. 11 10
      PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.xib
  41. 29 28
      PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationWindowController.xib
  42. 4 3
      PDF Office/PDF Master/Class/Home/WindowController/KMHistoryFileDeleteWindowController.xib
  43. 1 1
      PDF Office/PDF Master/Class/Home/WindowController/KMURLToPDFWindowController/KMURLToPDFWindowController.xib
  44. 1 1
      PDF Office/PDF Master/Class/KMAdvertisement/Manager/KMAdvertisementManager.swift
  45. 6 0
      PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/Contents.json
  46. 23 0
      PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/Contents.json
  47. BIN
      PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/ad_cancel_button00.png
  48. BIN
      PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/ad_cancel_button00@2x.png
  49. BIN
      PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/ad_cancel_button00@3x.png
  50. 1 1
      PDF Office/PDF Master/Class/KMAdvertisement/View/Tableview/KMAdvertisementTableView.swift
  51. 2 2
      PDF Office/PDF Master/Class/KMAdvertisement/View/View/KMAdvertisementShowView.swift
  52. 1 4
      PDF Office/PDF Master/Class/KMAdvertisement/View/View/KMAdvertisementShowView.xib
  53. 4 4
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/KMComparativeOutlineView.xib
  54. 6 6
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/View/KMComparativeOutlineCell.xib
  55. 7 7
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.xib
  56. 2 2
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItem.xib
  57. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItemItem.xib
  58. 2 0
      PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPDFEditToolbar.swift
  59. 2 2
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMThumbnailViewController.xib
  60. 36 36
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMCustomButtonPopMenuViewController.swift
  61. 3 3
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMCustomButtonPopMenuViewController.xib
  62. 4 6
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarController.swift
  63. 80 2
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarItemView.swift
  64. 14 5
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarView.swift
  65. 133 3
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarViewController.swift
  66. 7 2
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/PublicKey.swift
  67. 10 0
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift
  68. 17 0
      PDF Office/PDF Master/KMSystemMenu.swift
  69. 0 4
      PDF Office/PDF Master/PDF_Master DMG-Bridging-Header.h
  70. 0 2
      PDF Office/PDF Master/PDF_Master Pro-Bridging-Header.h

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

@@ -1200,6 +1200,36 @@
 		AD68783829A60FC0005B5210 /* KMLoginView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD68783729A60FC0005B5210 /* KMLoginView.xib */; };
 		AD68783929A60FC0005B5210 /* KMLoginView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD68783729A60FC0005B5210 /* KMLoginView.xib */; };
 		AD68783A29A60FC0005B5210 /* KMLoginView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD68783729A60FC0005B5210 /* KMLoginView.xib */; };
+		AD85D1822AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */; };
+		AD85D1832AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */; };
+		AD85D1842AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */; };
+		AD85D1872AEF46DF000F4D28 /* KMHomeNOFileView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1862AEF46DF000F4D28 /* KMHomeNOFileView.xib */; };
+		AD85D1882AEF46DF000F4D28 /* KMHomeNOFileView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1862AEF46DF000F4D28 /* KMHomeNOFileView.xib */; };
+		AD85D1892AEF46DF000F4D28 /* KMHomeNOFileView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1862AEF46DF000F4D28 /* KMHomeNOFileView.xib */; };
+		AD85D19E2AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D19D2AEF927D000F4D28 /* KMQucikToolsModel.swift */; };
+		AD85D19F2AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D19D2AEF927D000F4D28 /* KMQucikToolsModel.swift */; };
+		AD85D1A02AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D19D2AEF927D000F4D28 /* KMQucikToolsModel.swift */; };
+		AD85D1A42AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1A22AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift */; };
+		AD85D1A52AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1A22AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift */; };
+		AD85D1A62AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1A22AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift */; };
+		AD85D1A72AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1A32AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib */; };
+		AD85D1A82AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1A32AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib */; };
+		AD85D1A92AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1A32AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib */; };
+		AD85D1AD2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1AB2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift */; };
+		AD85D1AE2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1AB2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift */; };
+		AD85D1AF2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1AB2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift */; };
+		AD85D1B02AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1AC2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib */; };
+		AD85D1B12AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1AC2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib */; };
+		AD85D1B22AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1AC2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib */; };
+		AD85D1B52AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1B42AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift */; };
+		AD85D1B62AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1B42AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift */; };
+		AD85D1B72AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1B42AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift */; };
+		AD85D1B92AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1B82AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift */; };
+		AD85D1BA2AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1B82AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift */; };
+		AD85D1BB2AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD85D1B82AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift */; };
+		AD85D1BD2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1BC2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib */; };
+		AD85D1BE2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1BC2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib */; };
+		AD85D1BF2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD85D1BC2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib */; };
 		AD867F8629D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD867F8529D94F5100F00440 /* KMBOTAOutlineView.swift */; };
 		AD867F8729D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD867F8529D94F5100F00440 /* KMBOTAOutlineView.swift */; };
 		AD867F8829D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD867F8529D94F5100F00440 /* KMBOTAOutlineView.swift */; };
@@ -1410,6 +1440,39 @@
 		ADAFDA4C2AEA7F2700F084BC /* KMAdvertisementShowView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA4B2AEA7F2700F084BC /* KMAdvertisementShowView.xib */; };
 		ADAFDA4D2AEA7F2700F084BC /* KMAdvertisementShowView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA4B2AEA7F2700F084BC /* KMAdvertisementShowView.xib */; };
 		ADAFDA4E2AEA7F2700F084BC /* KMAdvertisementShowView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA4B2AEA7F2700F084BC /* KMAdvertisementShowView.xib */; };
+		ADAFDA512AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA502AEB43BF00F084BC /* KMAdvertisement.xcassets */; };
+		ADAFDA522AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA502AEB43BF00F084BC /* KMAdvertisement.xcassets */; };
+		ADAFDA532AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA502AEB43BF00F084BC /* KMAdvertisement.xcassets */; };
+		ADAFDA562AEB451600F084BC /* KMHomeContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA552AEB451600F084BC /* KMHomeContentView.swift */; };
+		ADAFDA572AEB451600F084BC /* KMHomeContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA552AEB451600F084BC /* KMHomeContentView.swift */; };
+		ADAFDA582AEB451600F084BC /* KMHomeContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA552AEB451600F084BC /* KMHomeContentView.swift */; };
+		ADAFDA5E2AEB455500F084BC /* KMHomeContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA5D2AEB455500F084BC /* KMHomeContentView.xib */; };
+		ADAFDA5F2AEB455500F084BC /* KMHomeContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA5D2AEB455500F084BC /* KMHomeContentView.xib */; };
+		ADAFDA602AEB455500F084BC /* KMHomeContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA5D2AEB455500F084BC /* KMHomeContentView.xib */; };
+		ADAFDA642AEB46D600F084BC /* KMQucikToolsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA632AEB46D600F084BC /* KMQucikToolsView.swift */; };
+		ADAFDA652AEB46D600F084BC /* KMQucikToolsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA632AEB46D600F084BC /* KMQucikToolsView.swift */; };
+		ADAFDA662AEB46D600F084BC /* KMQucikToolsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA632AEB46D600F084BC /* KMQucikToolsView.swift */; };
+		ADAFDA682AEB46F500F084BC /* KMHomeHistoryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA672AEB46F500F084BC /* KMHomeHistoryListView.swift */; };
+		ADAFDA692AEB46F500F084BC /* KMHomeHistoryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA672AEB46F500F084BC /* KMHomeHistoryListView.swift */; };
+		ADAFDA6A2AEB46F500F084BC /* KMHomeHistoryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA672AEB46F500F084BC /* KMHomeHistoryListView.swift */; };
+		ADAFDA6C2AEB470200F084BC /* KMQucikToolsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA6B2AEB470200F084BC /* KMQucikToolsView.xib */; };
+		ADAFDA6D2AEB470200F084BC /* KMQucikToolsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA6B2AEB470200F084BC /* KMQucikToolsView.xib */; };
+		ADAFDA6E2AEB470200F084BC /* KMQucikToolsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA6B2AEB470200F084BC /* KMQucikToolsView.xib */; };
+		ADAFDA702AEB470E00F084BC /* KMHomeHistoryListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA6F2AEB470E00F084BC /* KMHomeHistoryListView.xib */; };
+		ADAFDA712AEB470E00F084BC /* KMHomeHistoryListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA6F2AEB470E00F084BC /* KMHomeHistoryListView.xib */; };
+		ADAFDA722AEB470E00F084BC /* KMHomeHistoryListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA6F2AEB470E00F084BC /* KMHomeHistoryListView.xib */; };
+		ADAFDA762AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA742AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift */; };
+		ADAFDA772AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA742AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift */; };
+		ADAFDA782AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA742AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift */; };
+		ADAFDA792AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA752AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib */; };
+		ADAFDA7A2AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA752AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib */; };
+		ADAFDA7B2AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA752AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib */; };
+		ADAFDA822AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA802AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift */; };
+		ADAFDA832AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA802AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift */; };
+		ADAFDA842AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAFDA802AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift */; };
+		ADAFDA852AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA812AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib */; };
+		ADAFDA862AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA812AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib */; };
+		ADAFDA872AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADAFDA812AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib */; };
 		ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
 		ADB2D6E7294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
 		ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */; };
@@ -2098,6 +2161,10 @@
 		BB2C6AC928F4085200478A33 /* CPDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = BB2C6AC828F4085200478A33 /* CPDFListView.m */; };
 		BB2C6ACE28F41B9F00478A33 /* CPDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = BB2C6AC828F4085200478A33 /* CPDFListView.m */; };
 		BB2C6ACF28F41BA000478A33 /* CPDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = BB2C6AC828F4085200478A33 /* CPDFListView.m */; };
+		BB2CC5632AF1239800D7A796 /* KMBatchBaseParameter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF8A4002AE8B4E200788BAC /* KMBatchBaseParameter.swift */; };
+		BB2CC5642AF1239900D7A796 /* KMBatchBaseParameter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF8A4002AE8B4E200788BAC /* KMBatchBaseParameter.swift */; };
+		BB2CC5652AF123A300D7A796 /* KMBatchHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF8A3F92AE89B8500788BAC /* KMBatchHeader.swift */; };
+		BB2CC5662AF123A400D7A796 /* KMBatchHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF8A3F92AE89B8500788BAC /* KMBatchHeader.swift */; };
 		BB2E666229C885550000FEBC /* KMSignatureHelpViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2E665E29C885550000FEBC /* KMSignatureHelpViewController.xib */; };
 		BB2E666329C885550000FEBC /* KMSignatureHelpViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2E665E29C885550000FEBC /* KMSignatureHelpViewController.xib */; };
 		BB2E666429C885550000FEBC /* KMSignatureHelpViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2E665E29C885550000FEBC /* KMSignatureHelpViewController.xib */; };
@@ -2688,6 +2755,9 @@
 		BBA2109429ACC10F00E6B346 /* signlist_add.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBA2109329ACC10F00E6B346 /* signlist_add.pdf */; };
 		BBA2109529ACC10F00E6B346 /* signlist_add.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBA2109329ACC10F00E6B346 /* signlist_add.pdf */; };
 		BBA2109629ACC10F00E6B346 /* signlist_add.pdf in Resources */ = {isa = PBXBuildFile; fileRef = BBA2109329ACC10F00E6B346 /* signlist_add.pdf */; };
+		BBA388132AEF9A42004FE93F /* NSWindow+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA388122AEF9A42004FE93F /* NSWindow+KMExtension.swift */; };
+		BBA388142AEF9A42004FE93F /* NSWindow+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA388122AEF9A42004FE93F /* NSWindow+KMExtension.swift */; };
+		BBA388152AEF9A42004FE93F /* NSWindow+KMExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA388122AEF9A42004FE93F /* NSWindow+KMExtension.swift */; };
 		BBA5429C29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA5429B29F13A140041BAD0 /* KMMemorandumPattern.swift */; };
 		BBA5429D29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA5429B29F13A140041BAD0 /* KMMemorandumPattern.swift */; };
 		BBA5429E29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA5429B29F13A140041BAD0 /* KMMemorandumPattern.swift */; };
@@ -3812,6 +3882,16 @@
 		AD68782029A5FADC005B5210 /* KMLightMemberCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMLightMemberCache.swift; sourceTree = "<group>"; };
 		AD68783229A60FA7005B5210 /* KMLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLoginView.swift; sourceTree = "<group>"; };
 		AD68783729A60FC0005B5210 /* KMLoginView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLoginView.xib; sourceTree = "<group>"; };
+		AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeNOFileView.swift; sourceTree = "<group>"; };
+		AD85D1862AEF46DF000F4D28 /* KMHomeNOFileView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeNOFileView.xib; sourceTree = "<group>"; };
+		AD85D19D2AEF927D000F4D28 /* KMQucikToolsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMQucikToolsModel.swift; sourceTree = "<group>"; };
+		AD85D1A22AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeQuickToolsWindowController.swift; sourceTree = "<group>"; };
+		AD85D1A32AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeQuickToolsWindowController.xib; sourceTree = "<group>"; };
+		AD85D1AB2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeQuickToolsWindowCollectionViewItem.swift; sourceTree = "<group>"; };
+		AD85D1AC2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeQuickToolsWindowCollectionViewItem.xib; sourceTree = "<group>"; };
+		AD85D1B42AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeHistoryListViewModel.swift; sourceTree = "<group>"; };
+		AD85D1B82AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeQuickToolsCollectionView.swift; sourceTree = "<group>"; };
+		AD85D1BC2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeQuickToolsCollectionView.xib; sourceTree = "<group>"; };
 		AD867F8529D94F5100F00440 /* KMBOTAOutlineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBOTAOutlineView.swift; sourceTree = "<group>"; };
 		AD867F8A29D950B400F00440 /* KMBOTAOutlineView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBOTAOutlineView.xib; sourceTree = "<group>"; };
 		AD867F8F29D9554F00F00440 /* KMBOTAOutlineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBOTAOutlineItem.swift; sourceTree = "<group>"; };
@@ -3882,6 +3962,17 @@
 		ADAFDA412AE8F3C400F084BC /* KMAdvertisementTimeStampConversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAdvertisementTimeStampConversion.swift; sourceTree = "<group>"; };
 		ADAFDA472AEA7F1200F084BC /* KMAdvertisementShowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAdvertisementShowView.swift; sourceTree = "<group>"; };
 		ADAFDA4B2AEA7F2700F084BC /* KMAdvertisementShowView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAdvertisementShowView.xib; sourceTree = "<group>"; };
+		ADAFDA502AEB43BF00F084BC /* KMAdvertisement.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = KMAdvertisement.xcassets; sourceTree = "<group>"; };
+		ADAFDA552AEB451600F084BC /* KMHomeContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeContentView.swift; sourceTree = "<group>"; };
+		ADAFDA5D2AEB455500F084BC /* KMHomeContentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeContentView.xib; sourceTree = "<group>"; };
+		ADAFDA632AEB46D600F084BC /* KMQucikToolsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMQucikToolsView.swift; sourceTree = "<group>"; };
+		ADAFDA672AEB46F500F084BC /* KMHomeHistoryListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeHistoryListView.swift; sourceTree = "<group>"; };
+		ADAFDA6B2AEB470200F084BC /* KMQucikToolsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMQucikToolsView.xib; sourceTree = "<group>"; };
+		ADAFDA6F2AEB470E00F084BC /* KMHomeHistoryListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeHistoryListView.xib; sourceTree = "<group>"; };
+		ADAFDA742AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeHistoryCollectionItem.swift; sourceTree = "<group>"; };
+		ADAFDA752AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHomeHistoryCollectionItem.xib; sourceTree = "<group>"; };
+		ADAFDA802AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMQucikToolCollectionViewItem.swift; sourceTree = "<group>"; };
+		ADAFDA812AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMQucikToolCollectionViewItem.xib; sourceTree = "<group>"; };
 		ADB2D6E4294740F30029D2B3 /* KMPrintPaperSetWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPaperSetWindowController.swift; sourceTree = "<group>"; };
 		ADB2D6E5294740F30029D2B3 /* KMPrintPaperSetWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPrintPaperSetWindowController.xib; sourceTree = "<group>"; };
 		ADB2D6EC2947415E0029D2B3 /* KMPrintPaperSetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPaperSetView.swift; sourceTree = "<group>"; };
@@ -4393,6 +4484,7 @@
 		BBA19F4629AE27DA001A285A /* KMAnnotationTableRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAnnotationTableRowView.swift; sourceTree = "<group>"; };
 		BBA2108F29ACBFDA00E6B346 /* nosign.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = nosign.pdf; sourceTree = "<group>"; };
 		BBA2109329ACC10F00E6B346 /* signlist_add.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = signlist_add.pdf; sourceTree = "<group>"; };
+		BBA388122AEF9A42004FE93F /* NSWindow+KMExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSWindow+KMExtension.swift"; sourceTree = "<group>"; };
 		BBA5429B29F13A140041BAD0 /* KMMemorandumPattern.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMemorandumPattern.swift; sourceTree = "<group>"; };
 		BBA5B6492A823E0200748A83 /* KMPDFEditViewController_dmg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditViewController_dmg.swift; sourceTree = "<group>"; };
 		BBA762D129D2D98D00844513 /* KMCommonDefine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCommonDefine.swift; sourceTree = "<group>"; };
@@ -5490,6 +5582,7 @@
 		9F78EFD228F81EF9001E66F4 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				ADAFDA542AEB44ED00F084BC /* HomeContentView */,
 				ADAFD9F12AE68A3600F084BC /* CreatPDFView */,
 				9FA607D828F8227500B46586 /* KMBox.swift */,
 				9FBA0EF428FFC8A0001117AF /* KMCollectionView.swift */,
@@ -5554,6 +5647,7 @@
 		9F78EFD428F81F1A001E66F4 /* WindowController */ = {
 			isa = PBXGroup;
 			children = (
+				AD85D1A12AF09837000F4D28 /* HomeQuickToolsWindowController */,
 				ADAFD9FB2AE8AE9800F084BC /* KMURLToPDFWindowController */,
 				899700DD28F3A9F2009AF911 /* KMHomeWindowController.swift */,
 				899700DE28F3A9F2009AF911 /* KMHomeWindowController.xib */,
@@ -5906,6 +6000,59 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		AD85D1852AEF46C9000F4D28 /* NoFileView */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1812AEF46C2000F4D28 /* KMHomeNOFileView.swift */,
+				AD85D1862AEF46DF000F4D28 /* KMHomeNOFileView.xib */,
+			);
+			path = NoFileView;
+			sourceTree = "<group>";
+		};
+		AD85D19C2AEF925D000F4D28 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D19D2AEF927D000F4D28 /* KMQucikToolsModel.swift */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		AD85D1A12AF09837000F4D28 /* HomeQuickToolsWindowController */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1AA2AF09C61000F4D28 /* View */,
+				AD85D1A22AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift */,
+				AD85D1A32AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib */,
+			);
+			path = HomeQuickToolsWindowController;
+			sourceTree = "<group>";
+		};
+		AD85D1AA2AF09C61000F4D28 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1AB2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift */,
+				AD85D1AC2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib */,
+				AD85D1B82AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift */,
+				AD85D1BC2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		AD85D1B32AF0CCDE000F4D28 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1B42AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		AD85D1C02AF0F2D3000F4D28 /* Manager */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Manager;
+			sourceTree = "<group>";
+		};
 		AD867F8929D94F5500F00440 /* View */ = {
 			isa = PBXGroup;
 			children = (
@@ -6183,6 +6330,67 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		ADAFDA4F2AEB438200F084BC /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				ADAFDA502AEB43BF00F084BC /* KMAdvertisement.xcassets */,
+			);
+			path = Source;
+			sourceTree = "<group>";
+		};
+		ADAFDA542AEB44ED00F084BC /* HomeContentView */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1852AEF46C9000F4D28 /* NoFileView */,
+				ADAFDA622AEB466800F084BC /* QucikTools */,
+				ADAFDA612AEB465F00F084BC /* History */,
+				ADAFDA552AEB451600F084BC /* KMHomeContentView.swift */,
+				ADAFDA5D2AEB455500F084BC /* KMHomeContentView.xib */,
+			);
+			path = HomeContentView;
+			sourceTree = "<group>";
+		};
+		ADAFDA612AEB465F00F084BC /* History */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1B32AF0CCDE000F4D28 /* Model */,
+				ADAFDA732AEB5F9B00F084BC /* Cell */,
+				ADAFDA672AEB46F500F084BC /* KMHomeHistoryListView.swift */,
+				ADAFDA6F2AEB470E00F084BC /* KMHomeHistoryListView.xib */,
+			);
+			path = History;
+			sourceTree = "<group>";
+		};
+		ADAFDA622AEB466800F084BC /* QucikTools */ = {
+			isa = PBXGroup;
+			children = (
+				AD85D1C02AF0F2D3000F4D28 /* Manager */,
+				AD85D19C2AEF925D000F4D28 /* Model */,
+				ADAFDA882AEB804F00F084BC /* View */,
+				ADAFDA632AEB46D600F084BC /* KMQucikToolsView.swift */,
+				ADAFDA6B2AEB470200F084BC /* KMQucikToolsView.xib */,
+			);
+			path = QucikTools;
+			sourceTree = "<group>";
+		};
+		ADAFDA732AEB5F9B00F084BC /* Cell */ = {
+			isa = PBXGroup;
+			children = (
+				ADAFDA742AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift */,
+				ADAFDA752AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib */,
+			);
+			path = Cell;
+			sourceTree = "<group>";
+		};
+		ADAFDA882AEB804F00F084BC /* View */ = {
+			isa = PBXGroup;
+			children = (
+				ADAFDA802AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift */,
+				ADAFDA812AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		ADB2D6E229473FF00029D2B3 /* DealPaper */ = {
 			isa = PBXGroup;
 			children = (
@@ -6702,6 +6910,7 @@
 		ADE8BC3629F9453A00570F89 /* KMAdvertisement */ = {
 			isa = PBXGroup;
 			children = (
+				ADAFDA4F2AEB438200F084BC /* Source */,
 				ADAFDA3C2AE8F31400F084BC /* Manager */,
 				ADAFDA372AE8EEED00F084BC /* Request */,
 				ADAFDA2E2AE8E44200F084BC /* Config */,
@@ -6859,6 +7068,7 @@
 				BB74DA7A2AC41DE9006EDFE7 /* NSString+KMExtension.swift */,
 				BB60138F2AD3AFF000A76FB2 /* NSPopover+KMExtension.swift */,
 				BB7BC4DB2AD3FFC200D6BEE6 /* NSImage+ KMExtension.swift */,
+				BBA388122AEF9A42004FE93F /* NSWindow+KMExtension.swift */,
 			);
 			path = Category;
 			sourceTree = "<group>";
@@ -8830,6 +9040,7 @@
 				AD8810A329A8459000178CA1 /* KMComparativeTableViewController.xib in Resources */,
 				AD867F9829D955D200F00440 /* KMBOTAOutlineCellView.xib in Resources */,
 				9F1F82BF292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.xib in Resources */,
+				AD85D1A72AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */,
 				9F0CB48A29683DC400007028 /* KMPropertiesPanelPresetColorSubVC.xib in Resources */,
 				9F8DDF302924B855006CDC73 /* KMPDFToolsViewController.xib in Resources */,
 				AD867F8B29D950B400F00440 /* KMBOTAOutlineView.xib in Resources */,
@@ -8842,6 +9053,7 @@
 				ADD1B6FC2946C0D400C3FFF7 /* KMPrintChoosePageSizePamphletView.xib in Resources */,
 				ADBC376629CD86A000D93208 /* KMReadModelView.xcassets in Resources */,
 				9FF94F0C29A62B5000B1EF69 /* KMDesignSelect.xib in Resources */,
+				ADAFDA852AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
 				ADED71D929B57C01005EEC0A /* Localizable.strings in Resources */,
 				BB49ED11293F462E00C82CA2 /* KMConvertImageWindowController.xib in Resources */,
 				896933D429AEEE3D0055327F /* PageSheet.xib in Resources */,
@@ -8856,9 +9068,11 @@
 				BB7F7BFA29AA469F00A3E4E7 /* KMSigntureViewItem.xib in Resources */,
 				ADAFDA0D2AE8DD6600F084BC /* KMAdvertisementCollectionViewItem.xib in Resources */,
 				9F1F82E62934D5240092C4B4 /* KMHomeExtractActionViewController.xib in Resources */,
+				AD85D1BD2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */,
 				ADAFD9F72AE68A8500F084BC /* KMCreatPDFView.xib in Resources */,
 				89E4E77C2967B370002DBA6F /* KMDynamicStampViewController.xib in Resources */,
 				89316855296E45CA0073EA59 /* KMImageAccessoryController.xib in Resources */,
+				ADAFDA6C2AEB470200F084BC /* KMQucikToolsView.xib in Resources */,
 				896DD4582985FB3200ADE514 /* KMPageDisplayThemeCollectionViewItem.xib in Resources */,
 				89752E072939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
 				BBC3483E2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.xib in Resources */,
@@ -8937,6 +9151,7 @@
 				AD1CA41C2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				9F8539F62947137500DF644E /* sadfavicon.png in Resources */,
 				ADBC372429CA923E00D93208 /* KMComparative.plist in Resources */,
+				ADAFDA5E2AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				ADE787AE2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				BBEC00B2295C2AF300A26C98 /* KMBatesPreviewController.xib in Resources */,
 				9FD0FA3429CD947000F2AB0D /* KMOpacityPanel.xib in Resources */,
@@ -8951,6 +9166,7 @@
 				ADE8BC2A29F7CDB000570F89 /* KMPageNumberDisplayView.xib in Resources */,
 				ADF6B8812A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.xib in Resources */,
 				AD2D74B929F0D3A100EDC5E4 /* KMCancellationSuccessView.xib in Resources */,
+				AD85D1872AEF46DF000F4D28 /* KMHomeNOFileView.xib in Resources */,
 				BB3AAB9329878CE000992A5A /* KMWatermarkAdjectivePropertyMainController.xib in Resources */,
 				ADD272D429B9CFE20032B5D6 /* KMLightNoNetworkView.xib in Resources */,
 				9F8539E7294712D600DF644E /* KMChromiumTabContents.xib in Resources */,
@@ -9002,6 +9218,7 @@
 				AD867FAA29DFB78200F00440 /* KMAnnotationOutlineView.xib in Resources */,
 				F3B7DF9D2948565000333201 /* CPDFListHoverAnnotationViewController.xib in Resources */,
 				ADF1569C29A63CBF001D1018 /* KMLightMember.xcassets in Resources */,
+				ADAFDA792AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */,
 				899700EB28F3E4D3009AF911 /* MainWindowController.xib in Resources */,
 				BB49ED01293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				ADD1B6AE2941E97F00C3FFF7 /* KMPrintWindowController.xib in Resources */,
@@ -9095,11 +9312,14 @@
 				BBFBE6C528DD7B98008B2335 /* Main.storyboard in Resources */,
 				9F0201752A1B488C00C9B673 /* KMAITranslationVC.xib in Resources */,
 				9F0201812A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
+				AD85D1B02AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */,
 				ADE3C1E729A5ABC200793B13 /* KMLoginWindowController.xib in Resources */,
 				9FD0FA2C29CD3ED400F2AB0D /* KMRightSideEmptyVC.xib in Resources */,
 				9F8539F92947137500DF644E /* newtab_p.pdf in Resources */,
 				ADE3C1C429A4C13700793B13 /* KMPrintAccessoryController_OC.xib in Resources */,
 				9F080B17298CFDB300FC27DA /* KMTextImageButtonVC.xib in Resources */,
+				ADAFDA512AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */,
+				ADAFDA702AEB470E00F084BC /* KMHomeHistoryListView.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -9123,6 +9343,7 @@
 			files = (
 				9F8539F72947137500DF644E /* sadfavicon.png in Resources */,
 				89E9B40A295D268E00AEFA61 /* KMEditImagePropertyViewController.xib in Resources */,
+				ADAFDA6D2AEB470200F084BC /* KMQucikToolsView.xib in Resources */,
 				BB89724A294C19980045787C /* KMWatermarkAdjectiveListController.xib in Resources */,
 				89E4E6E72963CD82002DBA6F /* KMGeneralAnnotationViewController.xib in Resources */,
 				ADD272D529B9CFE20032B5D6 /* KMLightNoNetworkView.xib in Resources */,
@@ -9159,8 +9380,10 @@
 				ADD1B6C02942DD3D00C3FFF7 /* KMPrintChooseView.xib in Resources */,
 				ADAFDA0E2AE8DD6600F084BC /* KMAdvertisementCollectionViewItem.xib in Resources */,
 				8997012328F41AB8009AF911 /* KMLeftSideViewController.xib in Resources */,
+				ADAFDA712AEB470E00F084BC /* KMHomeHistoryListView.xib in Resources */,
 				BB2F615C2966B69D001CB369 /* KMWatermarkPropertyHomeController.xib in Resources */,
 				BBFBE74C28DD7DE4008B2335 /* Assets.xcassets in Resources */,
+				ADAFDA862AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
 				ADE3C1AF29A4779E00793B13 /* KMPrintAccessoryController.xib in Resources */,
 				BBC745EE295F067B0072C2ED /* KMCropSettingWindowController.xib in Resources */,
 				89752E082939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
@@ -9179,6 +9402,7 @@
 				BBC348472956A638008D2CD1 /* KMEditBackgroundController.xib in Resources */,
 				BB49ECFA293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */,
 				89E4E7862967BF5A002DBA6F /* KMCustomizeStampViewController.xib in Resources */,
+				AD85D1BE2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */,
 				BBA19F3729ADACC5001A285A /* signPicture_nor.pdf in Resources */,
 				89E4E76529656A88002DBA6F /* KMAnnotationStampViewController.xib in Resources */,
 				ADE3C1E829A5ABC200793B13 /* KMLoginWindowController.xib in Resources */,
@@ -9317,6 +9541,7 @@
 				BB24D4AB2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				ADBC374629CAD2D300D93208 /* SF-Pro-Text-Bold.otf in Resources */,
+				ADAFDA5F2AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				ADBC2CFF299CA6C7006280C8 /* KMPrintDuplexPrintingSetView.xib in Resources */,
 				89E4E7392964148E002DBA6F /* KMAnnotationPropertiesViewController.xib in Resources */,
 				9F56648B2988B16F00020985 /* KMTextfieldVC.xib in Resources */,
@@ -9329,6 +9554,7 @@
 				BB51074329A61B4100978662 /* ProgressSheet.xib in Resources */,
 				BB1AEF3629F937A50048D179 /* PDF Master User Guide.pdf in Resources */,
 				ADE3C1C529A4C13700793B13 /* KMPrintAccessoryController_OC.xib in Resources */,
+				ADAFDA7A2AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */,
 				9F8DDF312924B855006CDC73 /* KMPDFToolsViewController.xib in Resources */,
 				9F853A002947137500DF644E /* throbber.png in Resources */,
 				BBC348372955A118008D2CD1 /* KMCreateBackgroundController.xib in Resources */,
@@ -9342,13 +9568,17 @@
 				9F1F82E72934D5240092C4B4 /* KMHomeExtractActionViewController.xib in Resources */,
 				9F0CB49329683DEE00007028 /* KMPropertiesPanelLineSubVC.xib in Resources */,
 				BB8F454B295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
+				AD85D1B12AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */,
+				AD85D1A82AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */,
 				BB69C95D299116FD0001A9B1 /* five_line_score.pdf in Resources */,
 				8942F7FC2926089200389627 /* KMSignatureViewController.xib in Resources */,
 				9F080B18298CFDB300FC27DA /* KMTextImageButtonVC.xib in Resources */,
 				9F02019A2A1F352100C9B673 /* KMAITranslationConfirmWindowController.xib in Resources */,
 				BBFE6E832930EBD400142C01 /* KMCompressWindowController.xib in Resources */,
 				9F0CB46B2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
+				ADAFDA522AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */,
 				AD68783929A60FC0005B5210 /* KMLoginView.xib in Resources */,
+				AD85D1882AEF46DF000F4D28 /* KMHomeNOFileView.xib in Resources */,
 				ADD1B6F52946C07800C3FFF7 /* KMPrintChoosePageSizePosterView.xib in Resources */,
 				9F1FE3F5293F4F0F00E952CA /* Info.plist in Resources */,
 				BB7648E929ECECBF00931039 /* Color.xcassets in Resources */,
@@ -9443,6 +9673,7 @@
 				ADEC7A83299397F8009A8256 /* SF-Pro-Text-Regular.otf in Resources */,
 				9FD0FA2E29CD3ED400F2AB0D /* KMRightSideEmptyVC.xib in Resources */,
 				9F94748129FA24200042F949 /* Credits.rtf in Resources */,
+				AD85D1A92AF09864000F4D28 /* KMHomeQuickToolsWindowController.xib in Resources */,
 				BB49ED03293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				BB89723F294B3C840045787C /* KMWatermarkPropertyController.xib in Resources */,
 				BB49ECFB293F44DC00C82CA2 /* KMConvertExcelWindowController.xib in Resources */,
@@ -9455,6 +9686,7 @@
 				9F1F82D7292F6D510092C4B4 /* KMPDFInsertPreviewViewController.xib in Resources */,
 				9FAAA337290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.xib in Resources */,
 				8997012428F41AB8009AF911 /* KMLeftSideViewController.xib in Resources */,
+				ADAFDA872AEB804B00F084BC /* KMQucikToolCollectionViewItem.xib in Resources */,
 				9FBA0F0329015A82001117AF /* KMFastToolCollectionViewItem.xib in Resources */,
 				ADBC372629CA923E00D93208 /* KMComparative.plist in Resources */,
 				9FDD0FA12952FF4D000C4DAD /* global.json in Resources */,
@@ -9469,9 +9701,11 @@
 				89E4E6E82963CD82002DBA6F /* KMGeneralAnnotationViewController.xib in Resources */,
 				ADAFDA0F2AE8DD6600F084BC /* KMAdvertisementCollectionViewItem.xib in Resources */,
 				BBEC00D6295C33D600A26C98 /* KMCreateBatesController.xib in Resources */,
+				AD85D1BF2AF0D2DD000F4D28 /* KMHomeQuickToolsCollectionView.xib in Resources */,
 				ADAFD9F92AE68A8500F084BC /* KMCreatPDFView.xib in Resources */,
 				9F1F82E82934D5240092C4B4 /* KMHomeExtractActionViewController.xib in Resources */,
 				F3B7DF9F2948565000333201 /* CPDFListHoverAnnotationViewController.xib in Resources */,
+				ADAFDA6E2AEB470200F084BC /* KMQucikToolsView.xib in Resources */,
 				BB69C961299116FD0001A9B1 /* plaid.pdf in Resources */,
 				9F0CB4AC296CF19600007028 /* KMPropertiesPanelListMenuSubVC.xib in Resources */,
 				ADB2D6FF294882B70029D2B3 /* KMTextFieldStepperView.xib in Resources */,
@@ -9550,6 +9784,7 @@
 				ADD1B6CD2942E85300C3FFF7 /* KMPrintBottomView.xib in Resources */,
 				9F853A012947137500DF644E /* throbber.png in Resources */,
 				AD1CA41E2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
+				ADAFDA602AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				BBA8B7B5293635D80097D183 /* KMPasswordInputWindow.xib in Resources */,
 				F359917D292B7B8A000D25DE /* InitialUserDefaults.plist in Resources */,
 				89752DB22936F505003FF08E /* KMCustomButtonPopMenuViewController.xib in Resources */,
@@ -9564,6 +9799,7 @@
 				89E4E7872967BF5A002DBA6F /* KMCustomizeStampViewController.xib in Resources */,
 				BB4EEF3229763EE7003A3537 /* KMRedactBaseWindowController.xib in Resources */,
 				9F853A0A2947137500DF644E /* newtab.pdf in Resources */,
+				AD85D1892AEF46DF000F4D28 /* KMHomeNOFileView.xib in Resources */,
 				8997011328F40842009AF911 /* KMOutlineViewController.xib in Resources */,
 				896933D629AEEE3D0055327F /* PageSheet.xib in Resources */,
 				BBAFC8412985194800D0648E /* KMPDFEditAppendWindow.xib in Resources */,
@@ -9615,6 +9851,7 @@
 				BBFE6E622930809A00142C01 /* KMMergeCollectionPageViewItem.xib in Resources */,
 				9F1F82B9292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
 				ADBC374729CAD2D300D93208 /* SF-Pro-Text-Bold.otf in Resources */,
+				ADAFDA7B2AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */,
 				BB2F615D2966B69D001CB369 /* KMWatermarkPropertyHomeController.xib in Resources */,
 				ADD1B6C12942DD3D00C3FFF7 /* KMPrintChooseView.xib in Resources */,
 				9F1F82C1292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.xib in Resources */,
@@ -9708,11 +9945,14 @@
 				896DD45A2985FB3200ADE514 /* KMPageDisplayThemeCollectionViewItem.xib in Resources */,
 				9F00CCBB2A2F1E0F00AC462E /* dsa_priv.pem in Resources */,
 				9F0CB46C2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
+				AD85D1B22AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */,
 				BBC348482956A638008D2CD1 /* KMEditBackgroundController.xib in Resources */,
 				BB52372C29C313CA00663BD7 /* KMAnnotationPropertyBaseController.xib in Resources */,
 				F3B7DFA62949C8E300333201 /* CPDFListView.xcassets in Resources */,
 				ADD1B6DD2946BE1700C3FFF7 /* KMPrintChoosePageSizeView.xib in Resources */,
 				BB00301A298CA446002DD1A0 /* KMPreferenceGeneralController.xib in Resources */,
+				ADAFDA532AEB43BF00F084BC /* KMAdvertisement.xcassets in Resources */,
+				ADAFDA722AEB470E00F084BC /* KMHomeHistoryListView.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -9783,6 +10023,7 @@
 				9FDD0FA629533494000C4DAD /* KMJSONParser.swift in Sources */,
 				BBFE6E7F2930EBD400142C01 /* KMCompressWindowController.swift in Sources */,
 				AD1CA4302A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */,
+				ADAFDA562AEB451600F084BC /* KMHomeContentView.swift in Sources */,
 				ADE787AA2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */,
 				BB14700B299DC0D100784A6A /* OIDAuthorizationRequest.m in Sources */,
 				ADE3C1DE29A5AA0B00793B13 /* KMRequestServer.swift in Sources */,
@@ -9875,6 +10116,7 @@
 				9FDD0FAE29534FDC000C4DAD /* KMCompLight.swift in Sources */,
 				9F1F82F229373D6E0092C4B4 /* String+KMExtensions.swift in Sources */,
 				BB897236294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.swift in Sources */,
+				AD85D19E2AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */,
 				9F1F82D2292F6D510092C4B4 /* KMPDFInsertPreviewViewController.swift in Sources */,
 				AD02573F2A8601CD00EAD5D5 /* KMAppleLoginManager.swift in Sources */,
 				BBC70EB42AEA847500AC1585 /* KMToolbarCustomViewController.swift in Sources */,
@@ -9905,6 +10147,7 @@
 				89D9896C28FD50EF003A3E87 /* KMAnnotationCollectionViewItem.swift in Sources */,
 				9FCFEC742AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
 				9FCFECA42AD237B500EAD2CB /* KMBatchTableRowView.swift in Sources */,
+				ADAFDA642AEB46D600F084BC /* KMQucikToolsView.swift in Sources */,
 				BB86C1ED28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
 				BB88E454294045B4002B3655 /* KMPDFConvertManager.swift in Sources */,
 				BBD54ED42A1CBD720012A230 /* NSView+KMExtension.swift in Sources */,
@@ -9963,6 +10206,7 @@
 				89752E1D2942CB03003FF08E /* KMSearchMode.swift in Sources */,
 				AD3A3587294C11ED00D72802 /* KMPrintPreviewPresenter.swift in Sources */,
 				BB3AD6F929935483004FC1AE /* Reachability.m in Sources */,
+				ADAFDA762AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */,
 				BBEC00BF295C306400A26C98 /* KMBatesPropertyController.swift in Sources */,
 				BB93CDE52AE757A000B29C57 /* KMToolbarItemView.swift in Sources */,
 				89E4E6EC2963D1B7002DBA6F /* KMColorPickerViewController.m in Sources */,
@@ -9993,6 +10237,7 @@
 				BBF38A5E294F42FF0086D025 /* KMWatermarkAdjectiveStepper.swift in Sources */,
 				BB1EC7FE2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
 				BB5F8A1F29BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */,
+				AD85D1AD2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */,
 				AD68783329A60FA7005B5210 /* KMLoginView.swift in Sources */,
 				ADC63E3F2A49816900854E02 /* KMSubscribeSuccessView.swift in Sources */,
 				9F0CB531298656EA00007028 /* KMDesignToken+BorderWidthBottom.swift in Sources */,
@@ -10043,6 +10288,7 @@
 				BB146FCC299DC0D100784A6A /* GTMSessionUploadFetcher.m in Sources */,
 				BB14701D299DC0D100784A6A /* OIDIDToken.m in Sources */,
 				BB86C1F228F54535005AD968 /* CPDFListView+KeyEvent.m in Sources */,
+				AD85D1B52AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift in Sources */,
 				F37322F3292DF9410013862C /* CSelfSignAnnotationFreeText.m in Sources */,
 				9F1FE4D829406E4700E952CA /* NSString+Utils.m in Sources */,
 				BB6DD81829348A00001F0544 /* KMSecureEncryptComboBoxCellView.swift in Sources */,
@@ -10106,6 +10352,7 @@
 				BBD1F798296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				9FAAA33E290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
 				ADE3C1E429A5ABC200793B13 /* KMLoginWindowController.swift in Sources */,
+				AD85D1B92AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift in Sources */,
 				BBBB6CDE2AD174080035AA66 /* CPDFInkAnnotation+PDFListView.swift in Sources */,
 				9F0CB4D52986551600007028 /* KMDesignToken+Spacing.swift in Sources */,
 				BBBB6CCA2AD109F30035AA66 /* CPDFAnnotation+PDFListView.swift in Sources */,
@@ -10230,6 +10477,8 @@
 				ADAFD9EE2AE616B100F084BC /* FocusAwareSecureTextField.swift in Sources */,
 				9F0CB5392986570600007028 /* KMDesignToken+BoxShadow.swift in Sources */,
 				9F0CB4B52977BC1000007028 /* KMPropertiesPanelPreviewSubVC.swift in Sources */,
+				BBA388132AEF9A42004FE93F /* NSWindow+KMExtension.swift in Sources */,
+				ADAFDA682AEB46F500F084BC /* KMHomeHistoryListView.swift in Sources */,
 				9F02018E2A1DDAA500C9B673 /* KMAITranslationWindowController.swift in Sources */,
 				BB88E45829404752002B3655 /* KMPDFConvert.swift in Sources */,
 				9F1FE4CC29406E4700E952CA /* CTTabContentsController.m in Sources */,
@@ -10297,6 +10546,7 @@
 				BB6B436B2A04935000E02B54 /* KMPDFThumbViewBaseController.swift in Sources */,
 				ADE3C1F929A5C42300793B13 /* KMLightMemberUserInfo.swift in Sources */,
 				BB88E43B294023CB002B3655 /* KMDocumentModel.swift in Sources */,
+				AD85D1822AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */,
 				BBC3482929559B22008D2CD1 /* KMBackgroundListCell.swift in Sources */,
 				BBB9B316299A5D6D004F3235 /* KMDropboxManager.m in Sources */,
 				9F1F82EE293609F60092C4B4 /* CPDFDocument+PageEditManager.swift in Sources */,
@@ -10377,6 +10627,7 @@
 				BBAFC83C2985194800D0648E /* KMPDFEditAppendWindow.m in Sources */,
 				9F0201722A1B488C00C9B673 /* KMAITranslationVC.swift in Sources */,
 				9FDD0F8C2952FCE0000C4DAD /* KMGlobalParser.swift in Sources */,
+				ADAFDA822AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift in Sources */,
 				BB897251294C3F660045787C /* KMMenuTableView.swift in Sources */,
 				BB9695B229BDA46500FD68D3 /* SKLocalization.m in Sources */,
 				9F0CB4ED298655A800007028 /* KMDesignToken+PaddingLeft.swift in Sources */,
@@ -10502,6 +10753,7 @@
 				BBBB6CD22AD14A5F0035AA66 /* CPDFChoiceWidgetAnnotation+PDFListView.swift in Sources */,
 				9F1FE3DE293EE51F00E952CA /* KMMainDocument.swift in Sources */,
 				9F0201962A1F352100C9B673 /* KMAITranslationConfirmWindowController.swift in Sources */,
+				AD85D1A42AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift in Sources */,
 				BBF2455D2AE78FF900037D08 /* KMBatchWindow.swift in Sources */,
 				BBB9B31F299A5D6D004F3235 /* KMGoogleDriveManager.m in Sources */,
 				BB1BFF8E2AEA547B003EB179 /* NSButton+CustomAppearance.swift in Sources */,
@@ -10577,6 +10829,7 @@
 				BB4BD9CD2909026500A66A65 /* KMRightSideViewController.swift in Sources */,
 				BB162E8F294FFC0C0088E9D1 /* KMWatermarkPDFView.swift in Sources */,
 				AD9527C7295295110039D2BC /* KMPrintPrinterModel.swift in Sources */,
+				BBA388142AEF9A42004FE93F /* NSWindow+KMExtension.swift in Sources */,
 				BBFE6E88293210AB00142C01 /* KMCompressCellView.swift in Sources */,
 				899700F728F4051B009AF911 /* KMAnnotationViewController.swift in Sources */,
 				9F1FE4C429406E4700E952CA /* CTPageTransition.c in Sources */,
@@ -10584,6 +10837,7 @@
 				BBF8A3FE2AE8B04100788BAC /* KMBatchOperateFile.swift in Sources */,
 				ADBC375529CAE94700D93208 /* KMComparativeOutlineSectionCell.swift in Sources */,
 				8942F7C02923670F00389627 /* KMBOTAManagerClass.swift in Sources */,
+				ADAFDA772AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */,
 				BB897242294C028A0045787C /* KMWatermarkAdjectiveSegementControl.swift in Sources */,
 				9F1FE4B529406E4700E952CA /* CTBrowser.m in Sources */,
 				BB6719E62AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift in Sources */,
@@ -10591,6 +10845,7 @@
 				ADC63E402A49816900854E02 /* KMSubscribeSuccessView.swift in Sources */,
 				BBF38A63294F53FD0086D025 /* KMWatermarkFileView.swift in Sources */,
 				AD2D74B629F0D39500EDC5E4 /* KMCancellationSuccessView.swift in Sources */,
+				AD85D1B62AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift in Sources */,
 				9F080B24298FCB0D00FC27DA /* KMDesignToken+Action.swift in Sources */,
 				BB1BFF932AEA6352003EB179 /* KMImageToPDFMethod.swift in Sources */,
 				F37322F4292DF9410013862C /* CSelfSignAnnotationFreeText.m in Sources */,
@@ -10601,6 +10856,7 @@
 				9F0CB5022986560D00007028 /* KMDesignToken+BorderTop.swift in Sources */,
 				F34BF9542953DA91002C25A2 /* NSGeometry+PDFListView.m in Sources */,
 				BBB14A582978E75D00936EDB /* KMRedactMutilPageFlagWindowController.swift in Sources */,
+				ADAFDA692AEB46F500F084BC /* KMHomeHistoryListView.swift in Sources */,
 				BBB9B30E299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */,
 				BB146FC7299DC0D100784A6A /* GTMSessionFetcherService.m in Sources */,
 				BB8B17332907B63D001C5EA5 /* CipherTextView.swift in Sources */,
@@ -10635,6 +10891,7 @@
 				AD867FC629DFFBC400F00440 /* KMAnnotationOutlineRowView.swift in Sources */,
 				BB4EEF2E29763EE7003A3537 /* KMRedactBaseWindowController.swift in Sources */,
 				ADC31FA72A0E0C1A00ED44A2 /* KMEditPropertyAlignmentView.swift in Sources */,
+				BB2CC5652AF123A300D7A796 /* KMBatchHeader.swift in Sources */,
 				9FAAA333290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
 				BB7648ED29ECEEF400931039 /* KMAppearance.swift in Sources */,
 				8997010728F4082C009AF911 /* KMFromViewController.swift in Sources */,
@@ -10650,9 +10907,11 @@
 				ADF6B87F2A485A8F0090CB78 /* KMComparativeViewCollectionItemItem.swift in Sources */,
 				BBB7B4922A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */,
 				ADDEEA8F2AD78E4400EF675D /* KMSelfSignAnnotation.swift in Sources */,
+				BB2CC5632AF1239800D7A796 /* KMBatchBaseParameter.swift in Sources */,
 				BB8F4587295B19AC0037EA22 /* KMHeaderFooterDateInfoView.swift in Sources */,
 				ADF9ED3029A8507400C4A943 /* KMAccountInfoView.swift in Sources */,
 				BB60138D2AD3A94200A76FB2 /* CPDFSignatureAnnotation+PDFListView.swift in Sources */,
+				ADAFDA832AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift in Sources */,
 				89D2D2DF294C451400BFF5FE /* KMThumbnailViewController.swift in Sources */,
 				89752DF72938A236003FF08E /* PublicKey.swift in Sources */,
 				9F1FE4D329406E4700E952CA /* CTTabView.m in Sources */,
@@ -10888,6 +11147,7 @@
 				9F0CB4FA298655E500007028 /* KMDesignToken+Border.swift in Sources */,
 				ADD1B6E92946C02600C3FFF7 /* KMPrintChoosePageSizeMultipageView.swift in Sources */,
 				9F0CB4602966C9E200007028 /* KMFormPropertPanelViewController.swift in Sources */,
+				AD85D1AE2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */,
 				BB6719F62AD2C949003D44D5 /* CPDFRedactAnnotation+PDFListView.swift in Sources */,
 				ADCFFC0329C004AD007D3657 /* KMBookMarkTableRowView.swift in Sources */,
 				ADDEEA872AD7805200EF675D /* KMGeneralButton.swift in Sources */,
@@ -11043,6 +11303,7 @@
 				ADBC375E29CC61E100D93208 /* KMReadModelView.swift in Sources */,
 				BB2EDF7A296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				9FBA0EF628FFC8A0001117AF /* KMCollectionView.swift in Sources */,
+				AD85D1A52AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift in Sources */,
 				ADD1B7072946CBB600C3FFF7 /* KMBaseTextFormatter.swift in Sources */,
 				BB8F4573295ACE380037EA22 /* KMHeaderFooterAdjectiveListCell.swift in Sources */,
 				BBD54ED52A1CBD720012A230 /* NSView+KMExtension.swift in Sources */,
@@ -11114,6 +11375,7 @@
 				ADDEEA6F2AD3E16100EF675D /* KMSigntureViewItem.swift in Sources */,
 				BB14703F299DC0D200784A6A /* OIDEndSessionResponse.m in Sources */,
 				BBFE6E802930EBD400142C01 /* KMCompressWindowController.swift in Sources */,
+				ADAFDA572AEB451600F084BC /* KMHomeContentView.swift in Sources */,
 				BBFE6E66293097A600142C01 /* KMPageRangePickerWindowController.swift in Sources */,
 				BBEC00E6295C4D3C00A26C98 /* KMBatesPageInfoView.swift in Sources */,
 				F37322E8292DF9410013862C /* CPDFAnnotationModel.m in Sources */,
@@ -11136,6 +11398,7 @@
 				BB1CA5C7298E20820059E31C /* KMPreferenceAligementView.swift in Sources */,
 				BBEB93F02AD6C72C00739573 /* KMPDFMergePageRangeTabelViewCell.swift in Sources */,
 				9F8539D32943121100DF644E /* KMSegmentedBox.swift in Sources */,
+				AD85D1BA2AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift in Sources */,
 				AD9527C3295294EF0039D2BC /* KMPrintPaperModel.swift in Sources */,
 				9FD0D2A42AD4ECA900DA3FF8 /* KMPDFEditAppendCustomView.swift in Sources */,
 				BBBF68852A3C3AF10058E14E /* NSDocumentController+KMExtension.swift in Sources */,
@@ -11153,6 +11416,7 @@
 				BBD7FE072A1323F500F96075 /* KMCustomTableRowView.swift in Sources */,
 				9F1FE4F729406E4700E952CA /* CTFloatingBarBackingView.m in Sources */,
 				BB9695B329BDA46500FD68D3 /* SKLocalization.m in Sources */,
+				AD85D1832AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */,
 				BB13314F2AD78DC0008F6791 /* KMPDFMergeSizeTabelViewCell.swift in Sources */,
 				9F0CB4EE298655A800007028 /* KMDesignToken+PaddingLeft.swift in Sources */,
 				BB00302F298D315E002DD1A0 /* KMPreferenceMarkupController.swift in Sources */,
@@ -11199,6 +11463,7 @@
 				BBEC00CD295C31F900A26C98 /* KMBatesModel.swift in Sources */,
 				BB897219294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.swift in Sources */,
 				BB146FAC299DC0D000784A6A /* GTLRBatchQuery.m in Sources */,
+				ADAFDA652AEB46D600F084BC /* KMQucikToolsView.swift in Sources */,
 				9F8DDF2729237910006CDC73 /* Array+KMExtensions.swift in Sources */,
 				8942F7EA2925E1C400389627 /* KMLiftSideCellView.swift in Sources */,
 				ADE8BC3029F8CD7200570F89 /* KMPDFThumbnailModel.swift in Sources */,
@@ -11265,6 +11530,7 @@
 				BBE0BDF429A22EF300440583 /* KMMainViewController+MenuAction.swift in Sources */,
 				BB4EEF392976451E003A3537 /* KMRedactContentBaseView.swift in Sources */,
 				BB24D4A82977BE6700041659 /* KMRedactConfirmWindowController.swift in Sources */,
+				AD85D19F2AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */,
 				9F0CB4F2298655BC00007028 /* KMDesignToken+ItemSpacing.swift in Sources */,
 				BB93CDE62AE757A000B29C57 /* KMToolbarItemView.swift in Sources */,
 				8997010F28F40842009AF911 /* KMOutlineViewController.swift in Sources */,
@@ -11449,6 +11715,7 @@
 				9F1FE50729406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				BB146FEC299DC0D100784A6A /* GTLRDuration.m in Sources */,
 				9FCFEC762AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
+				BBA388152AEF9A42004FE93F /* NSWindow+KMExtension.swift in Sources */,
 				9FD0D2A92AD4EFB000DA3FF8 /* KMSavePanelAccessoryController.swift in Sources */,
 				9F1FE4D129406E4700E952CA /* CTTabController.m in Sources */,
 				9F8539E029470A0700DF644E /* KMTabStripView.swift in Sources */,
@@ -11467,6 +11734,7 @@
 				AD9527C0295294E20039D2BC /* KMPrintPageModel.swift in Sources */,
 				BBB14A6529792D6900936EDB /* KMRedactPageRangeContentView.swift in Sources */,
 				BBE9D0992AF0CECB002E83CE /* KMBatchOperateCompressViewController.swift in Sources */,
+				ADAFDA582AEB451600F084BC /* KMHomeContentView.swift in Sources */,
 				9FDD0F8A2952FCC6000C4DAD /* KMCompLightParser.swift in Sources */,
 				9FA607DB28F8227500B46586 /* KMBox.swift in Sources */,
 				ADDEEA9C2AD7BB2D00EF675D /* KMAnnotationPropertiesColorManager.swift in Sources */,
@@ -11476,11 +11744,13 @@
 				BB003011298CA383002DD1A0 /* KMPreferenceSegementControl.swift in Sources */,
 				BBBB6CD42AD14A5F0035AA66 /* CPDFChoiceWidgetAnnotation+PDFListView.swift in Sources */,
 				9F8539D82943180000DF644E /* KMTabAppearance.swift in Sources */,
+				AD85D1BB2AF0D2CA000F4D28 /* KMHomeQuickToolsCollectionView.swift in Sources */,
 				9FDD0F6D294AD12C000C4DAD /* KMMainViewController+UI.swift in Sources */,
 				BB1BFF902AEA547B003EB179 /* NSButton+CustomAppearance.swift in Sources */,
 				9FD0D2B12AD51BCC00DA3FF8 /* CPDFListEditAnnotationViewController.swift in Sources */,
 				BBCE571A2A72723600508EFC /* NSResponder+KMExtension.swift in Sources */,
 				BB146FDA299DC0D100784A6A /* GTLRFramework.m in Sources */,
+				AD85D1A02AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */,
 				9FF94F0B29A62B5000B1EF69 /* KMDesignSelect.swift in Sources */,
 				BB60138E2AD3A94200A76FB2 /* CPDFSignatureAnnotation+PDFListView.swift in Sources */,
 				ADBC2D2A299DCA76006280C8 /* NSTextField+Layer.swift in Sources */,
@@ -11563,6 +11833,7 @@
 				BBEC00DB295C39FD00A26C98 /* KMBatesPropertyInfoController.swift in Sources */,
 				BB0A551A2A3074F400B6E84B /* KMHoverView.swift in Sources */,
 				9F1FE4AA29406E4700E952CA /* CTBrowserWindowController.m in Sources */,
+				ADAFDA6A2AEB46F500F084BC /* KMHomeHistoryListView.swift in Sources */,
 				BBBB6CE02AD174080035AA66 /* CPDFInkAnnotation+PDFListView.swift in Sources */,
 				ADE3C1AD29A4779E00793B13 /* KMPrintAccessoryController.swift in Sources */,
 				ADEC7A80299397F8009A8256 /* NSFont+SFProText.swift in Sources */,
@@ -11664,6 +11935,7 @@
 				9FAAA327290A69920046FFCE /* KMToolSetScroller.swift in Sources */,
 				BB0A823429C00400002C5C1B /* KMCommonEnum.swift in Sources */,
 				BB6013922AD3AFF000A76FB2 /* NSPopover+KMExtension.swift in Sources */,
+				BB2CC5642AF1239900D7A796 /* KMBatchBaseParameter.swift in Sources */,
 				BB5F8A1029BB04F000365ADB /* GBDeviceInfo_OSX.m in Sources */,
 				AD02573C2A8601AA00EAD5D5 /* KMLoginManager.swift in Sources */,
 				BBFE6E89293210AB00142C01 /* KMCompressCellView.swift in Sources */,
@@ -11744,6 +12016,7 @@
 				BB3AD6FB29935483004FC1AE /* Reachability.m in Sources */,
 				AD0FA50C29A9E74200EDEB50 /* KMLoginInputPasswordView.swift in Sources */,
 				BB146FB3299DC0D100784A6A /* GTLRErrorObject.m in Sources */,
+				ADAFDA842AEB804B00F084BC /* KMQucikToolCollectionViewItem.swift in Sources */,
 				BB147028299DC0D100784A6A /* OIDTokenRequest.m in Sources */,
 				9F1FE49829406E4700E952CA /* common.c in Sources */,
 				ADBC375629CAE94700D93208 /* KMComparativeOutlineSectionCell.swift in Sources */,
@@ -11823,6 +12096,7 @@
 				BB88E43D294023CB002B3655 /* KMDocumentModel.swift in Sources */,
 				BBF2455A2AE78D0300037D08 /* KMBatchOperateWindowController.swift in Sources */,
 				BB146FF8299DC0D100784A6A /* OIDAuthorizationService+Mac.m in Sources */,
+				ADAFDA662AEB46D600F084BC /* KMQucikToolsView.swift in Sources */,
 				BB897267294C724D0045787C /* KMWatermarkAdjectiveOutsideView.swift in Sources */,
 				AD9527EC2955520C0039D2BC /* KMBaseTextFieldModel.swift in Sources */,
 				BBF38A5C294F2B760086D025 /* KMWatermarkPositionView.swift in Sources */,
@@ -11906,6 +12180,7 @@
 				BB3198202AC57ACA00107371 /* CPDFPage+PDFListView.swift in Sources */,
 				9FCFEC822AD0E74C00EAD2CB /* KMPopMenuButtonCell.swift in Sources */,
 				BB2EDF4E296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */,
+				AD85D1AF2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */,
 				BBB7B48B2A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				BBE9D0942AF0A85C002E83CE /* KMBatchOperation.swift in Sources */,
 				9FBA0EF728FFC8A0001117AF /* KMCollectionView.swift in Sources */,
@@ -11923,6 +12198,7 @@
 				AD9527D52952D51A0039D2BC /* KMPrintPresenter.swift in Sources */,
 				ADD1B6D92946BDFD00C3FFF7 /* KMPrintChoosePageSizeView.swift in Sources */,
 				9F0CB50F2986564500007028 /* KMDesignToken+BorderLeft.swift in Sources */,
+				BB2CC5662AF123A400D7A796 /* KMBatchHeader.swift in Sources */,
 				BB2F61522966A91D001CB369 /* KMBackgroundPropertyHomeController.swift in Sources */,
 				BB4EEF3E29764578003A3537 /* KMRedactPropertyContentView.swift in Sources */,
 				AD9527C4295294EF0039D2BC /* KMPrintPaperModel.swift in Sources */,
@@ -11939,6 +12215,7 @@
 				BB3A81B22AC2B82A006FC66C /* KMPageSizeTool.swift in Sources */,
 				9FD0D2A52AD4ECA900DA3FF8 /* KMPDFEditAppendCustomView.swift in Sources */,
 				ADAFDA4A2AEA7F1300F084BC /* KMAdvertisementShowView.swift in Sources */,
+				AD85D1B72AF0CCFC000F4D28 /* KMHomeHistoryListViewModel.swift in Sources */,
 				AD8F06192999DB5900D93CBC /* KMPrintDrawPage.swift in Sources */,
 				9FF94F1B29A770B500B1EF69 /* KMFillSignShapePanel.swift in Sources */,
 				BBA5429E29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */,
@@ -11969,6 +12246,7 @@
 				BBB1A3A829F6B66400E54E47 /* NSPanel+KMExtension.swift in Sources */,
 				AD867FB129DFBB1200F00440 /* KMAnnotationOutlineCellView.swift in Sources */,
 				9F1FE50129406E4700E952CA /* CTTabStripModel.m in Sources */,
+				AD85D1A62AF09864000F4D28 /* KMHomeQuickToolsWindowController.swift in Sources */,
 				BB35C4A12975362900D46EE2 /* KMRedactTopToolBar.swift in Sources */,
 				AD8810B429A846B100178CA1 /* KMVerficationCodeWindowController.swift in Sources */,
 				9F1FE4CB29406E4700E952CA /* CTTabContents.m in Sources */,
@@ -11976,6 +12254,7 @@
 				BB89721A294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.swift in Sources */,
 				BBB9B31B299A5D6D004F3235 /* KMCloudServer.m in Sources */,
 				BB4EEF4229764FCC003A3537 /* KMWatermarkColorView.swift in Sources */,
+				AD85D1842AEF46C2000F4D28 /* KMHomeNOFileView.swift in Sources */,
 				BB24D4A92977BE6700041659 /* KMRedactConfirmWindowController.swift in Sources */,
 				BBB14A61297929BD00936EDB /* KMRedactPageRangeWindowController.swift in Sources */,
 				BB5DF1F32959C9F00025CDA1 /* KMHeaderFooterPropertyMainController.swift in Sources */,
@@ -12032,6 +12311,7 @@
 				8997011028F40842009AF911 /* KMOutlineViewController.swift in Sources */,
 				9F1F82BE292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.swift in Sources */,
 				BB6DD8272934D056001F0544 /* KMSecureEncryptSuccessTipView.swift in Sources */,
+				ADAFDA782AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */,
 				ADAFDA052AE8BD5C00F084BC /* KMConvertURLToPDF.m in Sources */,
 				9FCFECAA2AD243C900EAD2CB /* KMBlankView.swift in Sources */,
 				9F0201902A1DDAA500C9B673 /* KMAITranslationWindowController.swift in Sources */,

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

@@ -244,49 +244,34 @@
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "4AA5DDA9-7119-40D7-89B4-F368372F819A - 844f8b9c5ebe0774"
+                  uuid = "4AA5DDA9-7119-40D7-89B4-F368372F819A - 12bb4aebd717cd8"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Master.KMEditPDFTextManager.setFontAlignment(alignment: __C.NSTextAlignment) -&gt; ()"
-                  moduleName = "PDF Master"
+                  symbolName = "function signature specialization &lt;Arg[1] = Dead&gt; of PDF_Master_DMG.KMEditPDFTextManager.setFontAlignment(alignment: __C.NSTextAlignment) -&gt; ()"
+                  moduleName = "PDF Master DMG"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/RightSide/EditPDF/Manager/KMEditPDFTextManager.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
                   startingLineNumber = "332"
                   endingLineNumber = "332"
-                  offsetFromSymbolStart = "186">
+                  offsetFromSymbolStart = "81">
                </Location>
                <Location
-                  uuid = "4AA5DDA9-7119-40D7-89B4-F368372F819A - 844f8b9c5ebe0774"
+                  uuid = "4AA5DDA9-7119-40D7-89B4-F368372F819A - 12bb4aebd717cd8"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Master.KMEditPDFTextManager.setFontAlignment(alignment: __C.NSTextAlignment) -&gt; ()"
-                  moduleName = "PDF Master"
+                  symbolName = "function signature specialization &lt;Arg[1] = Dead&gt; of PDF_Master_DMG.KMEditPDFTextManager.setFontAlignment(alignment: __C.NSTextAlignment) -&gt; ()"
+                  moduleName = "PDF Master DMG"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/work/tangchao/git/PDFOffice/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/RightSide/EditPDF/Manager/KMEditPDFTextManager.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
                   startingLineNumber = "332"
                   endingLineNumber = "332"
-                  offsetFromSymbolStart = "299">
-               </Location>
-               <Location
-                  uuid = "4AA5DDA9-7119-40D7-89B4-F368372F819A - 89e3ff688b88713e"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Master.KMEditPDFTextManager.setFontAlignment(alignment: __C.NSTextAlignment) -&gt; ()"
-                  moduleName = "PDF Master"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/PDF_Office/PDF%20Office/PDF%20Master/Class/PDFWindowController/Side/RightSide/EditPDF/Manager/KMEditPDFTextManager.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "332"
-                  endingLineNumber = "332"
-                  offsetFromSymbolStart = "192">
+                  offsetFromSymbolStart = "114">
                </Location>
             </Locations>
          </BreakpointContent>
@@ -358,32 +343,96 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "E33CE6EB-AF37-4B1D-89A4-DB97337F719D"
+            uuid = "BA35DAFD-2DD8-4E4C-9E39-70FC85E0D7C4"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFWindowController/Toolbar/KMToolbarViewController.swift"
+            filePath = "PDF Master/Class/PDFWindowController/Toolbar/KMToolbarView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "357"
-            endingLineNumber = "357"
-            landmarkName = "scanOCRModelSelect(sender:)"
+            startingLineNumber = "113"
+            endingLineNumber = "113"
+            landmarkName = "_moreButtonAction()"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "BA35DAFD-2DD8-4E4C-9E39-70FC85E0D7C4"
+            uuid = "017D8E63-C59C-474C-8D86-56EABCF89CEF"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFWindowController/Toolbar/KMToolbarView.swift"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "113"
-            endingLineNumber = "113"
-            landmarkName = "_moreButtonAction()"
+            startingLineNumber = "513"
+            endingLineNumber = "513"
+            landmarkName = "openBlankPage(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "C7D5FAD7-6212-42AC-9A70-C8237FF4EB89"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "558"
+            endingLineNumber = "558"
+            landmarkName = "screenShot_FullScreenDelay(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A7EA912F-FD84-4D3F-B327-D44A1EC37889"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "546"
+            endingLineNumber = "546"
+            landmarkName = "importFromWebPage(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "C26F29DC-2234-4254-AF30-35AE492835DD"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "543"
+            endingLineNumber = "543"
+            landmarkName = "newDocumetFromImage(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A82F3388-A61A-4717-B375-568DAD4759AC"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "540"
+            endingLineNumber = "540"
+            landmarkName = "newDocumentFromClipboard(_:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

File diff suppressed because it is too large
+ 350 - 212
PDF Office/PDF Master.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist


+ 83 - 20
PDF Office/PDF Master/AppDelegate.swift

@@ -51,7 +51,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
         KMAdvertisementManager.manager.debug = true
                 
         // 初版不支持暗黑模式
-        NSApp.appearance = NSAppearance(named: .aqua)
+//        NSApp.appearance = NSAppearance(named: .darkAqua)
         KMAnalytics.configure()
 
         //第一次开启app
@@ -259,6 +259,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
         PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Check for Updates", comment: ""), action: #selector(checkForUpdates), target: self, at: 1)
         let accountRefreshItem = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Account Refresh", comment: ""), action: #selector(accountRefreshAction), target: self, at: 8)
         accountRefreshItem?.tag = kKMMainMenuAccountRefreshItemTag
+#endif
+#if VERSION_FREE
+        _ = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Restore Previous Purchase ", comment: ""), action: #selector(restoreSubscriptions), target: self, at: 1)
 #endif
         if let items = PDFOfficeMenu?.items {
             for menu in items {
@@ -270,10 +273,22 @@ class AppDelegate: NSObject, NSApplicationDelegate {
         }
         
         let fileMenu = mainMenu?.item(at: 1)?.submenu
-        let shareItem: NSMenuItem = NSMenuItem(title: NSLocalizedString("Share", comment: ""), action: nil, target: nil)
-        fileMenu!.insertItem(shareItem, at: (fileMenu?.items.count)!-1)
+        var shareItem: NSMenuItem?
+        if let item = fileMenu?.item(withTitle: NSLocalizedString("Save Archive…", comment: "")) {
+            shareItem = NSMenuItem(title: NSLocalizedString("Share", comment: ""), action: nil, target: nil)
+            fileMenu?.insertItem(shareItem!, at: item.index)
+            fileMenu?.insertItem(.separator(), at: item.index)
+        } else {
+            shareItem = NSMenuItem(title: NSLocalizedString("Share", comment: ""), action: nil, target: nil)
+            fileMenu?.insertItem(shareItem!, at: (fileMenu?.items.count)!-1)
+        }
+        shareItem?.submenu = NSSharingServicePicker.menu(forSharingItems: [""], subjectContext: "", withTarget: self, selector: #selector(sharePageItemAction), serviceDelegate: nil)
         
-        shareItem.submenu = NSSharingServicePicker.menu(forSharingItems: [""], subjectContext: "", withTarget: self, selector: #selector(sharePageItemAction), serviceDelegate: nil)
+        let deviceCameraMenuItem = NSMenuItem(title: NSLocalizedString("Import From Camera", comment: ""), action: #selector(deviceCameraMenuItemAciton), target: self)
+        let deviceScannerMenuItem = NSMenuItem(title: NSLocalizedString("Import From Scanner", comment: ""), action: #selector(deviceScannerMenuItemAciton), target: self)
+        fileMenu?.insertItem(deviceCameraMenuItem, at: (fileMenu?.items.count)!-1)
+        fileMenu?.insertItem(deviceScannerMenuItem, at: (fileMenu?.items.count)!-1)
+        fileMenu?.insertItem(.separator(), at: (fileMenu?.items.count)!-1)
         
         let viewMenu = mainMenu?.item(at: 3)?.submenu
         var zoomMenu: NSMenu?
@@ -353,6 +368,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
             represent.perform(withItems: [document.fileURL as Any])
         }
     }
+    @objc func deviceCameraMenuItemAciton(sender: NSMenuItem) {
+        KMPrint("deviceCameraMenuItemAciton")
+    }
+    
+    @objc func deviceScannerMenuItemAciton(sender: NSMenuItem) {
+        KMPrint("deviceScannerMenuItemAciton")
+    }
     
     // MARK: PDF Master Menu
     @IBAction func openPreferenceWindow(_ sender: Any) {
@@ -445,12 +467,47 @@ class AppDelegate: NSObject, NSApplicationDelegate {
         
     }
     
+    @objc func restoreSubscriptions(_ sender: NSMenuItem) {
+#if VERSION_FREE
+        KMPrint("restoreSubscriptions ...")
+#endif
+    }
+    
     // MARK:-  DMG
     @objc func checkForUpdates(_ sender: NSMenuItem) {
 #if VERSION_DMG
         SUUpdater.shared().checkForUpdates(sender)
 #endif
     }
+    
+    @IBAction func orderFrontLineInspector(_ sender: NSMenuItem) -> Void {
+        KMPrint("orderFrontLineInspector ...")
+    }
+    
+    @IBAction func orderFrontNotesPanel(_ sender: NSMenuItem) -> Void {
+        KMPrint("orderFrontNotesPanel ...")
+    }
+    
+    @IBAction func showDownloads(_ sender: NSMenuItem) -> Void {
+        KMPrint("showDownloads ...")
+    }
+    
+    @IBAction func showWelcomeWindow(_ sender: NSMenuItem) -> Void {
+        KMPrint("showWelcomeWindow ...")
+    }
+    
+    @IBAction func newsletter(_ sender: NSMenuItem) -> Void {
+        KMPrint("newsletter ...")
+    }
+    @IBAction func feedback(_ sender: NSMenuItem) -> Void {
+        KMPrint("feedback ...")
+    }
+    @IBAction func reportBug(_ sender: NSMenuItem) -> Void {
+        KMPrint("reportBug ...")
+    }
+    @IBAction func reportGeneralQuestions(_ sender: NSMenuItem) -> Void {
+        KMPrint("reportGeneralQuestions ...")
+    }
 }
 
 extension AppDelegate : NSMenuDelegate,NSMenuItemValidation {
@@ -464,7 +521,7 @@ extension AppDelegate : NSMenuDelegate,NSMenuItemValidation {
             self.updateLoginMenuItem()
             return !KMLightMemberManager.manager.isLogin()
         }
-        
+
         if action == #selector(logoutMenuItemAction) {
             self.updateLoginMenuItem()
             return KMLightMemberManager.manager.isLogin()
@@ -490,22 +547,28 @@ extension AppDelegate : NSMenuDelegate,NSMenuItemValidation {
             let item4 = firstItem?.item(withTag: 14)
 //            let item5 = firstItem?.item(withTag: 15)
             let item6 = firstItem?.item(withTag: kKMMainMenuAccountRefreshItemTag)
-            if KMLightMemberManager.manager.isLogin() {
-                item1?.title = KMLightMemberManager.manager.info.email
-                item1?.isHidden = false
-                item2?.isHidden = true
-                item3?.isHidden = false
-                item4?.isHidden = false
-//                item5?.isHidden = false
-                item6?.isHidden = false
-            } else {
-                item1?.isHidden = true
-                item2?.isHidden = false
-                item3?.isHidden = true
-                item4?.isHidden = true
+//            if KMLightMemberManager.manager.isLogin() {
+//                item1?.title = KMLightMemberManager.manager.info.email
+//                item1?.isHidden = false
+//                item2?.isHidden = true
+//                item3?.isHidden = false
+//                item4?.isHidden = false
+////                item5?.isHidden = false
+//                item6?.isHidden = false
+//            } else {
+//                item1?.isHidden = true
+//                item2?.isHidden = false
+//                item3?.isHidden = true
+//                item4?.isHidden = true
+////                item5?.isHidden = true
+//                item6?.isHidden = true
+//            }
+            item1?.isHidden = true
+            item2?.isHidden = true
+            item3?.isHidden = true
+            item4?.isHidden = true
 //                item5?.isHidden = true
-                item6?.isHidden = true
-            }
+            item6?.isHidden = true
         }
     }
     

File diff suppressed because it is too large
+ 1540 - 210
PDF Office/PDF Master/Base.lproj/Main.storyboard


+ 44 - 44
PDF Office/PDF Master/Class/Batch/Catogary/NSWindow+PopOver.swift

@@ -7,47 +7,47 @@
 
 import Foundation
 
-let KMWindowPopOverKey = "KMWindowPopOverKey"
-let KMWindowPopOverSourcesRectKey = "KMWindowPopOverSourcesRectKey"
-extension NSWindow {
-    var popover: NSPopover? {
-        get {
-            return objc_getAssociatedObject(self,KMWindowPopOverKey) as? NSPopover
-        }
-        set {
-            objc_setAssociatedObject(self, KMWindowPopOverKey, newValue, .OBJC_ASSOCIATION_RETAIN)
-        }
-    }
-    
-    var sourcesRect: CGRect? {
-        get {
-            guard let value = objc_getAssociatedObject(self, KMWindowPopOverSourcesRectKey) as? NSValue else {
-                return nil
-            }
-            return value.rectValue
-        }
-        set {
-            if let newValue = newValue {
-                let value = NSValue(rect: newValue)
-                objc_setAssociatedObject(self, KMWindowPopOverSourcesRectKey, value, .OBJC_ASSOCIATION_RETAIN)
-            } else {
-                objc_setAssociatedObject(self, KMWindowPopOverSourcesRectKey, nil, .OBJC_ASSOCIATION_RETAIN)
-            }
-        }
-    }
-    
-    open override func mouseMoved(with event: NSEvent)  {
-        super.mouseMoved(with: event)
-        let point = event.locationInWindow
-        if NSStringFromClass(event.window!.classForCoder).elementsEqual("_NSPopoverWindow") == false {
-            if !sourcesRect!.contains(point) {
-                if (self.popover != nil) {
-                    NotificationCenter.default.post(name: NSNotification.Name("KMPopOverClosedByWindowNotification"), object: self.popover)
-                    popover!.close()
-                    self.popover = nil
-                    self.sourcesRect = CGRect.null
-                }
-            }
-        }
-    }
-}
+//var KMWindowPopOverKey = "KMWindowPopOverKey"
+//var KMWindowPopOverSourcesRectKey = "KMWindowPopOverSourcesRectKey"
+//extension NSWindow {
+//    var popover: NSPopover? {
+//        get {
+//            return objc_getAssociatedObject(self, &KMWindowPopOverKey) as? NSPopover
+//        }
+//        set {
+//            objc_setAssociatedObject(self, &KMWindowPopOverKey, newValue, .OBJC_ASSOCIATION_RETAIN)
+//        }
+//    }
+//    
+//    var sourcesRect: CGRect? {
+//        get {
+//            guard let value = objc_getAssociatedObject(self, &KMWindowPopOverSourcesRectKey) as? NSValue else {
+//                return nil
+//            }
+//            return value.rectValue
+//        }
+//        set {
+//            if let newValue = newValue {
+//                let value = NSValue(rect: newValue)
+//                objc_setAssociatedObject(self, &KMWindowPopOverSourcesRectKey, value, .OBJC_ASSOCIATION_RETAIN)
+//            } else {
+//                objc_setAssociatedObject(self, &KMWindowPopOverSourcesRectKey, nil, .OBJC_ASSOCIATION_RETAIN)
+//            }
+//        }
+//    }
+//    
+//    open override func mouseMoved(with event: NSEvent)  {
+//        super.mouseMoved(with: event)
+//        let point = event.locationInWindow
+//        if NSStringFromClass(event.window!.classForCoder).elementsEqual("_NSPopoverWindow") == false {
+//            if let data = sourcesRect?.contains(point), data == false {
+//                if (self.popover != nil) {
+//                    NotificationCenter.default.post(name: NSNotification.Name("KMPopOverClosedByWindowNotification"), object: self.popover)
+//                    popover!.close()
+//                    self.popover = nil
+//                    self.sourcesRect = CGRect.null
+//                }
+//            }
+//        }
+//    }
+//}

+ 2 - 2
PDF Office/PDF Master/Class/Batch/WindowController/KMBatchOperateLeftViewController.swift

@@ -309,7 +309,7 @@ class KMBatchOperateLeftViewController: NSViewController,NSTableViewDelegate,NST
         let vc = KMDeviceBrowserWindowController()
         vc.type = ICDeviceType.camera
         vc.importCameraFileCallback = { [weak self](url: NSURL) -> Void in
-            self!.addFilesToList(addArray: [url.path!])
+            self?.addFilesToList(addArray: [url.path!])
         }
         vc.showWindow(nil)
     }
@@ -318,7 +318,7 @@ class KMBatchOperateLeftViewController: NSViewController,NSTableViewDelegate,NST
         let vc = KMDeviceBrowserWindowController()
         vc.type = .scanner
         vc.importScannerFileCallback = { [weak self](url: NSURL) -> Void in
-            self!.addFilesToList(addArray: [url.path!])
+            self?.addFilesToList(addArray: [url.path!])
         }
     }
     

+ 526 - 0
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift

@@ -532,11 +532,537 @@ extension KMBrowserWindowController {
     @IBAction func menuItemAction_newTab(_ sender: Any) {
         self.openDocumentWindow()
     }
+    
+    /// New
+
+    @IBAction func newDocumentFromClipboard(_ sender: Any?) {
+        KMPrint("newDocumentFromClipboard")
+    }
+    @IBAction func newDocumetFromImage(_ sender: Any?) {
+        KMPrint("importFromWebPage")
+    }
+    @IBAction func importFromWebPage(_ sender: Any?) {
+        KMPrint("importFromWebPage")
+    }
+    
+    ///  screenShot
+    
+    @IBAction func screenShot_SelectArea(_ sender: Any?) {
+        KMPrint("screenShot_SelectArea")
+    }
+    @IBAction func screenShot_Window(_ sender: Any?) {
+        KMPrint("screenShot_Window")
+    }
+    @IBAction func screenShot_FullScreenDelay(_ sender: Any?) {
+        KMPrint("screenShot_FullScreenDelay")
+    }
+    @IBAction func screenShot_FullScreen(_ sender: Any?) {
+        KMPrint("screenShot_FullScreen")
+    }
+    
+    @IBAction func pasteAsPlainText(_ sender: Any?) {
+        KMPrint("pasteAsPlainText")
+    }
+    
+    @IBAction func deselectAll(_ sender: Any?) {
+        KMPrint("deselectAll")
+    }
+    
+    @IBAction func searchPDF(_ sender: Any?) {
+        KMPrint("searchPDF")
+    }
+    
+    @IBAction func notesLink(_ sender: Any?) {
+        KMPrint("notesLink")
+    }
+    
+    @IBAction func notesStamp(_ sender: Any?) {
+        KMPrint("notesStamp")
+    }
+    
+    @IBAction func selectToolModel(_ sender: Any?) {
+        KMPrint("selectToolModel")
+    }
+    
+    @IBAction func table(_ sender: Any?) {
+        KMPrint("table ...")
+    }
+    @IBAction func image(_ sender: Any?) {
+        KMPrint("image ...")
+    }
+    @IBAction func addForm(_ sender: Any?) {
+        KMPrint("addForm ...")
+    }
+    
+    @IBAction func editNote(_ sender: Any?) {
+        KMPrint("editNote ...")
+    }
+    
+    @IBAction func togglePresentation(_ sender: Any?) {
+        KMPrint("togglePresentation ...")
+    }
+    
+    @IBAction func chooseTransition(_ sender: Any?) {
+        KMPrint("chooseTransition ...")
+    }
+    
+    @IBAction func toggleAutoFlow(_ sender: Any?) {
+        KMPrint("toggleAutoFlow ...")
+    }
+    @IBAction func chooseAutoFlowSetting(_ sender: Any?) {
+        KMPrint("chooseAutoFlowSetting ...")
+    }
+    
+    @IBAction func toggleReadingBar(_ sender: Any?) {
+        KMPrint("toggleReadingBar ...")
+    }
+    
+    @IBAction func toggleLeftSidePane(_ sender: Any?) {
+        KMPrint("toggleLeftSidePane ...")
+    }
+    
+    @IBAction func changeLeftSidePaneState(_ sender: Any?) {
+        KMPrint("changeLeftSidePaneState ...")
+    }
+    
+    @IBAction func splitViewAction(_ sender: Any?) {
+        KMPrint("splitViewAction ...")
+    }
+    
+    @IBAction func themesColor(_ sender: Any?) {
+        KMPrint("themesColor ...")
+    }
+    
+    @IBAction func toggleStatusBar(_ sender: Any?) {
+        KMPrint("toggleStatusBar ...")
+    }
+    
+    @IBAction func toggleToolbarShow(_ sender: Any?) {
+        KMPrint("toggleToolbarShow ...")
+    }
+    
+    @IBAction func changeDisplayMode(_ sender: Any?) {
+        KMPrint("changeDisplayMode ...")
+    }
+    
+    @IBAction func toggleDisplayAsBook(_ sender: Any?) {
+        KMPrint("toggleDisplayAsBook ...")
+    }
+    
+    @IBAction func toggleDisplayPageBreaks(_ sender: Any?) {
+        KMPrint("toggleDisplayPageBreaks ...")
+    }
+    
+    @IBAction func changeDisplayBox(_ sender: Any?) {
+        KMPrint("changeDisplayBox ...")
+    }
+    
+    @IBAction func changeColor(_ sender: Any?) {
+        KMPrint("changeColor ...")
+    }
+    
+    @IBAction func changeFont(_ sender: Any?) {
+        KMPrint("changeFont ...")
+    }
+    
+    @IBAction func changeAttributes(_ sender: Any?) {
+        KMPrint("changeAttributes ...")
+    }
+    
+    @IBAction func alignLeft(_ sender: Any?) {
+        KMPrint("alignLeft ...")
+    }
+    
+    @IBAction func alignRight(_ sender: Any?) {
+        KMPrint("alignRight ...")
+    }
+    
+    @IBAction func alignCenter(_ sender: Any?) {
+        KMPrint("alignCenter ...")
+    }
+    
+    @IBAction func createNewNote(_ sender: Any?) {
+        KMPrint("createNewNote ...")
+    }
+    
+    @IBAction func toggleHideNotes(_ sender: Any?) {
+        KMPrint("toggleHideNotes ...")
+    }
+    
+    @IBAction func takeSnapshot(_ sender: Any?) {
+        KMPrint("takeSnapshot ...")
+    }
+    
+    @IBAction func takeSnapshotSelectContent(_ sender: Any?) {
+        KMPrint("takeSnapshotSelectContent ...")
+    }
+    
+    @IBAction func changeDisplaySinglePages(_ sender: Any?) {
+        KMPrint("changeDisplaySinglePages ...")
+    }
+    
+    @IBAction func changeDisplayContinuous(_ sender: Any?) {
+        KMPrint("changeDisplayContinuous ...")
+    }
+    
+    @IBAction func doGoToNextPage(_ sender: Any?) {
+        KMPrint("doGoToNextPage ...")
+    }
+    
+    @IBAction func doGoToPreviousPage(_ sender: Any?) {
+        KMPrint("doGoToPreviousPage ...")
+    }
+    
+    @IBAction func doGoToFirstPage(_ sender: Any?) {
+        KMPrint("doGoToFirstPage ...")
+    }
+    
+    @IBAction func doGoToLastPage(_ sender: Any?) {
+        KMPrint("doGoToLastPage ...")
+    }
+    
+    @IBAction func allGoToNextPage(_ sender: Any?) {
+        KMPrint("allGoToNextPage ...")
+    }
+    
+    @IBAction func allGoToPreviousPage(_ sender: Any?) {
+        KMPrint("allGoToPreviousPage ...")
+    }
+    
+    @IBAction func allGoToFirstPage(_ sender: Any?) {
+        KMPrint("allGoToFirstPage ...")
+    }
+
+    @IBAction func allGoToLastPage(_ sender: Any?) {
+        KMPrint("allGoToLastPage ...")
+    }
+    
+    @IBAction func doGoToPage(_ sender: Any?) {
+        KMPrint("doGoToPage ...")
+    }
+    
+    @IBAction func doGoBack(_ sender: Any?) {
+        KMPrint("doGoBack ...")
+    }
+    @IBAction func doGoForward(_ sender: Any?) {
+        KMPrint("doGoForward ...")
+    }
+    @IBAction func goToMarkedPage(_ sender: Any?) {
+        KMPrint("goToMarkedPage ...")
+    }
+    @IBAction func markPage(_ sender: Any?) {
+        KMPrint("markPage ...")
+    }
+    @IBAction func doZoomIn(_ sender: Any?) {
+        KMPrint("doZoomIn ...")
+    }
+    @IBAction func doZoomOut(_ sender: Any?) {
+        KMPrint("doZoomOut ...")
+    }
+    @IBAction func doZoomToActualSize(_ sender: Any?) {
+        KMPrint("doZoomToActualSize ...")
+    }
+    @IBAction func doZoomToPhysicalSize(_ sender: Any?) {
+        KMPrint("doZoomToPhysicalSize ...")
+    }
+    @IBAction func doZoomToFit(_ sender: Any?) {
+        KMPrint("doZoomToFit ...")
+    }
+    @IBAction func alternateZoomToFit(_ sender: Any?) {
+        KMPrint("alternateZoomToFit ...")
+    }
+    @IBAction func doZoomToSelection(_ sender: Any?) {
+        KMPrint("doZoomToSelection ...")
+    }
+    @IBAction func doMarqueeZoomTool(_ sender: Any?) {
+        KMPrint("doMarqueeZoomTool ...")
+    }
+    @IBAction func doAutoScale(_ sender: Any?) {
+        KMPrint("doAutoScale ...")
+    }
+    @IBAction func toggleAutoScale(_ sender: Any?) {
+        KMPrint("toggleAutoScale ...")
+    }
+    @IBAction func rotateRight(_ sender: Any?) {
+        KMPrint("rotateRight ...")
+    }
+    @IBAction func rotateLeft(_ sender: Any?) {
+        KMPrint("rotateLeft ...")
+    }
+    @IBAction func rotateAllRight(_ sender: Any?) {
+        KMPrint("rotateAllRight ...")
+    }
+    @IBAction func rotateAllLeft(_ sender: Any?) {
+        KMPrint("rotateAllLeft ...")
+    }
+    @IBAction func crop(_ sender: Any?) {
+        KMPrint("crop ...")
+    }
+    @IBAction func cropAll(_ sender: Any?) {
+        KMPrint("cropAll ...")
+    }
+    @IBAction func autoCropAll(_ sender: Any?) {
+        KMPrint("autoCropAll ...")
+    }
+    @IBAction func smartAutoCropAll(_ sender: Any?) {
+        KMPrint("smartAutoCropAll ...")
+    }
+    @IBAction func cropOptionsModel(_ sender: Any?) {
+        KMPrint("cropOptionsModel ...")
+    }
+    @IBAction func autoSelectContent(_ sender: Any?) {
+        KMPrint("autoSelectContent ...")
+    }
+    @IBAction func getInfo(_ sender: Any?) {
+        KMPrint("getInfo ...")
+    }
+//    @IBAction func delete(_ sender: Any?) {
+//        KMPrint("delete ...")
+//    }
+//    @IBAction func paste(_ sender: Any?) {
+//        KMPrint("paste ...")
+//    }
+    @IBAction func alternatePaste(_ sender: Any?) {
+        KMPrint("alternatePaste ...")
+    }
+    @IBAction func copy(_ sender: Any?) {
+        KMPrint("copy ...")
+    }
+    @IBAction func cut(_ sender: Any?) {
+        KMPrint("cut ...")
+    }
+    @IBAction func changeToolMode(_ sender: Any?) {
+        KMPrint("changeToolMode ...")
+    }
+    @IBAction func changeAnnotationMode(_ sender: Any?) {
+        KMPrint("changeAnnotationMode ...")
+    }
+    @IBAction func toggleFullscreen(_ sender: Any?) {
+        KMPrint("toggleFullscreen ...")
+    }
+    @IBAction func toggleRightSidePane(_ sender: Any?) {
+        KMPrint("toggleRightSidePane ...")
+    }
+    @IBAction func performFit(_ sender: Any?) {
+        KMPrint("performFit ...")
+    }
+    @IBAction func changeRightSidePaneState(_ sender: Any?) {
+        KMPrint("changeRightSidePaneState ...")
+    }
+    @IBAction func changeFindPaneState(_ sender: Any?) {
+        KMPrint("changeFindPaneState ...")
+    }
+    @IBAction func toggleSplitPDF(_ sender: Any?) {
+        KMPrint("toggleSplitPDF ...")
+    }
+    @IBAction func search(_ sender: Any?) {
+        KMPrint("search ...")
+    }
+    @IBAction func searchNotes(_ sender: Any?) {
+        KMPrint("searchNotes ...")
+    }
+    @IBAction func password(_ sender: Any?) {
+        KMPrint("password ...")
+    }
+    @IBAction func savePDFSettingToDefaults(_ sender: Any?) {
+        KMPrint("savePDFSettingToDefaults ...")
+    }
+    @IBAction func toggleCaseInsensitiveSearch(_ sender: Any?) {
+        KMPrint("toggleCaseInsensitiveSearch ...")
+    }
+    @IBAction func toggleWholeWordSearch(_ sender: Any?) {
+        KMPrint("toggleWholeWordSearch ...")
+    }
+    @IBAction func toggleCaseInsensitiveNoteSearch(_ sender: Any?) {
+        KMPrint("toggleCaseInsensitiveNoteSearch ...")
+    }
+    @IBAction func performFindPanelAction(_ sender: Any?) {
+        KMPrint("performFindPanelAction ...")
+    }
+    @IBAction func scrollUp(_ sender: Any?) {
+        KMPrint("scrollUp ...")
+    }
+    @IBAction func scrollDown(_ sender: Any?) {
+        KMPrint("scrollDown ...")
+    }
+    @IBAction func scrollRight(_ sender: Any?) {
+        KMPrint("scrollRight ...")
+    }
+    @IBAction func scrollLeft(_ sender: Any?) {
+        KMPrint("scrollLeft ...")
+    }
+    @IBAction func selectSelectedNote(_ sender: Any?) {
+        KMPrint("selectSelectedNote ...")
+    }
+    @IBAction func goToSelectedOutlineItem(_ sender: Any?) {
+        KMPrint("goToSelectedOutlineItem ...")
+    }
+    @IBAction func goToSelectedFindResults(_ sender: Any?) {
+        KMPrint("goToSelectedFindResults ...")
+    }
+    @IBAction func toggleSelectedSnapshots(_ sender: Any?) {
+        KMPrint("toggleSelectedSnapshots ...")
+    }
+    @IBAction func selfSignProfile(_ sender: Any?) {
+        KMPrint("selfSignProfile ...")
+    }
+    @IBAction func highlightFormFiled(_ sender: Any?) {
+        KMPrint("highlightFormFiled ...")
+    }
+    @IBAction func highlightLinks(_ sender: Any?) {
+        KMPrint("highlightLinks ...")
+    }
+    @IBAction func resetForm(_ sender: Any?) {
+        KMPrint("resetForm ...")
+    }
+    @IBAction func removeAllAnnotation(_ sender: Any?) {
+        KMPrint("removeAllAnnotation ...")
+    }
+    @IBAction func link(_ sender: Any?) {
+        KMPrint("link ...")
+    }
+    @IBAction func addWatermark(_ sender: Any?) {
+        KMPrint("addWatermark ...")
+    }
+    @IBAction func convert(_ sender: Any?) {
+        KMPrint("convert ...")
+    }
+    @IBAction func imageToPDF(_ sender: Any?) {
+        KMPrint("imageToPDF ...")
+    }
+    @IBAction func pageEdit(_ sender: Any?) {
+        KMPrint("pageEdit ...")
+    }
+    @IBAction func ocr(_ sender: Any?) {
+        KMPrint("ocr ...")
+    }
+    @IBAction func insertPage(_ sender: Any?) {
+        KMPrint("insertPage ...")
+    }
+    @IBAction func merge(_ sender: Any?) {
+        KMPrint("merge ...")
+    }
+    @IBAction func split(_ sender: Any?) {
+        KMPrint("split ...")
+    }
+    @IBAction func compression(_ sender: Any?) {
+        KMPrint("compression ...")
+    }
+    @IBAction func comparison(_ sender: Any?) {
+        KMPrint("comparison ...")
+    }
+    @IBAction func contentComparison(_ sender: Any?) {
+        KMPrint("contentComparison ...")
+    }
+    @IBAction func coverageComparison(_ sender: Any?) {
+        KMPrint("coverageComparison ...")
+    }
+    @IBAction func extractImage(_ sender: Any?) {
+        KMPrint("extractImage ...")
+    }
+    @IBAction func security(_ sender: Any?) {
+        KMPrint("security ...")
+    }
+    @IBAction func addBackground(_ sender: Any?) {
+        KMPrint("addBackground ...")
+    }
+    @IBAction func removeBackground(_ sender: Any?) {
+        KMPrint("removeBackground ...")
+    }
+    @IBAction func addHeaderFooter(_ sender: Any?) {
+        KMPrint("addHeaderFooter ...")
+    }
+    @IBAction func removeHeaderFooter(_ sender: Any?) {
+        KMPrint("removeHeaderFooter ...")
+    }
+    @IBAction func addHeaderFooterBates(_ sender: Any?) {
+        KMPrint("addHeaderFooterBates ...")
+    }
+    @IBAction func removeHeaderFooterBates(_ sender: Any?) {
+        KMPrint("removeHeaderFooterBates ...")
+    }
+    @IBAction func editWatermark(_ sender: Any?) {
+        KMPrint("editWatermark ...")
+    }
+    @IBAction func batchAddWatermark(_ sender: Any?) {
+        KMPrint("batchAddWatermark ...")
+    }
+    @IBAction func batchRemoveWatermark(_ sender: Any?) {
+        KMPrint("batchRemoveWatermark ...")
+    }
+    @IBAction func removeWatermark(_ sender: Any?) {
+        KMPrint("removeWatermark ...")
+    }
+    @IBAction func templateWatermark(_ sender: Any?) {
+        KMPrint("templateWatermark ...")
+    }
+    @IBAction func batchAddBackground(_ sender: Any?) {
+        KMPrint("batchAddBackground ...")
+    }
+    @IBAction func batchRemoveBackground(_ sender: Any?) {
+        KMPrint("batchRemoveBackground ...")
+    }
+    @IBAction func templateBackground(_ sender: Any?) {
+        KMPrint("templateBackground ...")
+    }
+    
+    @IBAction func batchAddHeaderFooter(_ sender: Any?) {
+        KMPrint("batchAddHeaderFooter ...")
+    }
+    @IBAction func batchRemoveHeaderFooter(_ sender: Any?) {
+        KMPrint("batchRemoveHeaderFooter ...")
+    }
+    @IBAction func templateHeaderFooter(_ sender: Any?) {
+        KMPrint("templateHeaderFooter ...")
+    }
+    @IBAction func batchAddBates(_ sender: Any?) {
+        KMPrint("batchAddBates ...")
+    }
+    @IBAction func batchRemoveBates(_ sender: Any?) {
+        KMPrint("batchRemoveBates ...")
+    }
+    @IBAction func templateBates(_ sender: Any?) {
+        KMPrint("templateBates ...")
+    }
+    @IBAction func togglePoster(_ sender: Any?) {
+        KMPrint("togglePoster ...")
+    }
+    @IBAction func toggleMultiple(_ sender: Any?) {
+        KMPrint("toggleMultiple ...")
+    }
+    @IBAction func toggleBooklet(_ sender: Any?) {
+        KMPrint("toggleBooklet ...")
+    }
+    @IBAction func decryption(_ sender: Any?) {
+        KMPrint("decryption ...")
+    }
+    @IBAction func readMode(_ sender: Any?) {
+        KMPrint("readMode ...")
+    }
+    @IBAction func changeFormType(_ sender: Any?) {
+        KMPrint("changeFormType ...")
+    }
+    @IBAction func changeSelfSignType(_ sender: Any?) {
+        KMPrint("changeSelfSignType ...")
+    }
+    @IBAction func clearAllForm(_ sender: Any?) {
+        KMPrint("clearAllForm ...")
+    }
+    @IBAction func thumbnailSizeScaling(_ sender: Any?) {
+        KMPrint("thumbnailSizeScaling ...")
+    }
+    @IBAction func textEditAction(_ sender: Any?) {
+        KMPrint("textEditAction ...")
+    }
+    @IBAction func redactAction(_ sender: Any?) {
+        KMPrint("redactAction ...")
+    }
 }
 
 // MARK: - KMSystemFileMenuProtocol
 
 extension KMBrowserWindowController: KMSystemFileMenuProtocol {
+    
     func menuItemClick_saveAsFlattenedPDF(_ sender: Any) {
         if (self.canResponseDocumentAction() == false) {
             return

+ 49 - 0
PDF Office/PDF Master/Class/Common/Category/NSWindow+KMExtension.swift

@@ -0,0 +1,49 @@
+//
+//  NSWindow+KMExtension.swift
+//  PDF Master
+//
+//  Created by tangchao on 2023/10/30.
+//
+
+import Foundation
+
+private var _KMWindowPopOverKey = "KMWindowPopOverKey"
+private var _KMWindowPopOverSourcesRectKey = "KMWindowPopOverSourcesRectKey"
+extension NSWindow {
+    var popover: NSPopover? {
+        get {
+            return objc_getAssociatedObject(self, &_KMWindowPopOverKey) as? NSPopover
+        }
+        set {
+            objc_setAssociatedObject(self, &_KMWindowPopOverKey, newValue, .OBJC_ASSOCIATION_RETAIN)
+        }
+    }
+    
+    var sourcesRect: NSRect {
+        get {
+            if let data = objc_getAssociatedObject(self, &_KMWindowPopOverSourcesRectKey) as? NSValue {
+                return data.rectValue
+            }
+            return NSZeroRect
+        }
+        set {
+            objc_setAssociatedObject(self, &_KMWindowPopOverSourcesRectKey, NSValue(rect: newValue), .OBJC_ASSOCIATION_RETAIN)
+        }
+    }
+    
+    open override func mouseMoved(with event: NSEvent) {
+        super.mouseMoved(with: event)
+        
+        let point = event.locationInWindow
+        if let data = event.window?.isKind(of: NSClassFromString("_NSPopoverWindow")!), data {
+            if (CGRectContainsPoint(self.sourcesRect, point)) {
+                if self.popover != nil {
+                    NotificationCenter.default.post(name: Notification.Name("KMPopOverClosedByWindowNotification"), object: self.popover!)
+                    self.popover?.close()
+                    self.popover = nil
+                    self.sourcesRect = NSRect.null
+                }
+            }
+        }
+    }
+}

+ 25 - 19
PDF Office/PDF Master/Class/Common/Category/View/NSMenu+KMExtension.swift

@@ -53,22 +53,23 @@ extension NSMenu {
 //    func addItem_r(withTitle title: String, action: Selector?, target: AnyObject?) -> NSMenuItem {
 //        return self.addItem(title: title, action: action, target: target)
 //    }
+    
+    func insertItem(title: String, imageNamed: String?, action: Selector?, target: AnyObject?, tag: Int, atIndex: Int) -> NSMenuItem? {
+        let item = NSMenuItem(title: title, imageNamed: imageNamed, action: action, target: target, tag: tag)
+        self.insertItem(item, at: atIndex)
+        return item
+    }
+    
+    func addItem(title: String, imageNamed: String?, action: Selector?, target: AnyObject?, tag: Int) {
+        _ = self.addItem_r(title: title, imageNamed: imageNamed, action: action, target: target, tag: tag)
+    }
+    
+    func addItem_r(title: String, imageNamed: String?, action: Selector?, target: AnyObject?, tag: Int) -> NSMenuItem? {
+        return self.insertItem(title: title, imageNamed: imageNamed, action: action, target: target, tag: tag, atIndex: self.numberOfItems)
+    }
 }
 
 /*
- + (NSMenu *)menu {
-     return [[NSMenu alloc] initWithTitle:@""];
- }
-
- - (NSMenuItem *)insertItemWithTitle:(NSString *)aString imageNamed:(NSString *)anImageName action:(SEL)aSelector target:(id)aTarget tag:(NSInteger)aTag atIndex:(NSInteger)anIndex {
-     NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:aString imageNamed:anImageName action:aSelector target:aTarget tag:aTag];
-     [self insertItem:item atIndex:anIndex];
-     return item;
- }
-
- - (NSMenuItem *)addItemWithTitle:(NSString *)aString imageNamed:(NSString *)anImageName action:(SEL)aSelector target:(id)aTarget tag:(NSInteger)aTag {
-     return [self insertItemWithTitle:aString imageNamed:anImageName action:aSelector target:aTarget tag:aTag atIndex:[self numberOfItems]];
- }
 
  - (NSMenuItem *)insertItemWithSubmenuAndTitle:(NSString *)aString atIndex:(NSInteger)anIndex {
      NSMenuItem *item = [[NSMenuItem alloc] initWithSubmenuAndTitle:aString];
@@ -76,12 +77,7 @@ extension NSMenu {
      return item;
  }
 
- - (NSMenuItem *)addItemWithTitle:(NSString *)aString forView:(NSView*)view action:(SEL)aSelector target:(id)aTarget tag:(NSInteger)aTag atIndex:(NSInteger)anIndex {
-     NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:aString inView:view action:aSelector target:aTarget tag:aTag];
-     [self insertItem:item atIndex:anIndex];
-     return item;
-     
- }
+
 
  - (NSMenuItem *)addItemWithSubmenuAndTitle:(NSString *)aString {
      return [self insertItemWithSubmenuAndTitle:aString atIndex:[self numberOfItems]];
@@ -128,3 +124,13 @@ extension NSMenu {
  }
 
  */
+
+// Quick Methods
+
+extension NSMenuItem {
+    var index: Int {
+        get {
+            return self.menu?.index(of: self) ?? NSNotFound
+        }
+    }
+}

+ 1 - 1
PDF Office/PDF Master/Class/Common/Tools/KMTools.swift

@@ -346,7 +346,7 @@ extension KMTools {
         #if VERSION_PRO
         return "PDF Master Pro"
         #endif
-        return "PDF Master"
+        return "PDF Readre Pro"
     }
     
     @objc class func pageRangeTypeString(pageRange: KMPageRange) -> String {

+ 30 - 0
PDF Office/PDF Master/Class/Document/KMMainDocument.swift

@@ -540,6 +540,36 @@ typealias KMMainDocumentCloudUploadHanddler = (@escaping(Bool, String)->()) -> (
         }
     }
     
+    @IBAction func saveArchive(_ sender: Any?) {
+        KMPrint("saveArchive")
+    }
+    @IBAction func readNotes(_ sender: Any?) {
+        KMPrint("readNotes")
+    }
+    @IBAction func convertNotes(_ sender: Any?) {
+        KMPrint("convertNotes")
+    }
+    @IBAction func batchRemovePassWord(_ sender: Any?) {
+        KMPrint("batchRemovePassWord")
+    }
+    @IBAction func batchRemovPrivatySecurity(_ sender: Any?) {
+        KMPrint("batchRemovPrivatySecurity")
+    }
+    @IBAction func printPDFDocument(_ sender: Any?) {
+        KMPrint("printPDFDocument")
+    }
+    @IBAction func performFindPanelAction(_ sender: Any?) {
+        KMPrint("performFindPanelAction")
+    }
+    
+    @IBAction func addBookmark(_ sender: Any?) {
+        KMPrint("addBookmark")
+    }
+    
+    @IBAction func showWindow(_ sender: Any?) {
+        KMPrint("showWindow")
+    }
+    
     // MARK: - Private Methods
     
     private func _km_write(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, originalContentsURL absoluteOriginalContentsURL: URL?) throws {

+ 285 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/History/Cell/KMHomeHistoryCollectionItem.swift

@@ -0,0 +1,285 @@
+//
+//  KMHomeHistoryCollectionItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/27.
+//
+
+import Cocoa
+
+
+typealias KMHomeHistoryCollectionItemShowPathAction = (_ view: KMHomeHistoryCollectionItem) -> Void
+typealias KMHomeHistoryCollectionItemRemovePathAction = (_ view: KMHomeHistoryCollectionItem) -> Void
+typealias KMHomeHistoryCollectionItemMouseMoveAction = (_ view: KMHomeHistoryCollectionItem, _ enter: Bool) -> Void
+typealias KMHomeHistoryCollectionItemMouseDobleClickAction = (_ view: KMHomeHistoryCollectionItem, _ url: URL) -> Void
+
+class KMHomeHistoryCollectionItem: NSCollectionViewItem {
+
+    @IBOutlet weak var contentBox: KMBox!
+    
+    @IBOutlet weak var horizontalView: NSView!
+    @IBOutlet weak var iconImageView: NSImageView!
+    @IBOutlet weak var horizontalTitleLabel: NSTextField!
+    @IBOutlet weak var sizeLabel: NSTextField!
+    @IBOutlet weak var pathLabel: NSTextField!
+    @IBOutlet weak var handleView: NSView!
+    @IBOutlet weak var showPathButton: KMButton!
+    @IBOutlet weak var removePathButton: KMButton!
+    @IBOutlet weak var timeLabel: NSTextField!
+    
+    //
+    @IBOutlet weak var verticalView: NSView!
+    @IBOutlet weak var verticalTitleLabel: NSTextField!
+    @IBOutlet weak var showImageView: NSImageView!
+    
+    var url: URL? {
+        didSet {
+            self.reloadData()
+        }
+    }
+    var showType: KMHomeHistoryListViewShowType = .horizontal {
+        didSet {
+            self.reloadData()
+        }
+    }
+
+    var showPathAction: KMHomeHistoryCollectionItemShowPathAction?
+    var removeAction: KMHomeHistoryCollectionItemRemovePathAction?
+    var mouseMoveAction: KMHomeHistoryCollectionItemMouseMoveAction?
+    var mouseDobleClickAction: KMHomeHistoryCollectionItemMouseDobleClickAction?
+    
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        // 使用自动布局设置 item 宽度等于父视图的宽度
+       view.translatesAutoresizingMaskIntoConstraints = false
+        
+        self.setup()
+    }
+
+    override func viewDidLayout() {
+        self.view.addTrackingRect(self.view.bounds, owner: self, userData: nil, assumeInside: false)
+    }
+    
+    func setup() {
+        self.view.wantsLayer = true;
+        self.view.layer?.cornerRadius = 4.0
+        
+        showPathButton.toolTip = NSLocalizedString("Show in Finder", comment: "")
+        removePathButton.toolTip = NSLocalizedString("Remove from Recents", comment: "")
+        handleView.isHidden = true;
+        
+        horizontalTitleLabel.textColor = KMAppearance.Layout.h0Color()
+        verticalTitleLabel.textColor = KMAppearance.Layout.h0Color()
+        pathLabel.textColor = KMAppearance.Layout.h1Color()
+        sizeLabel.textColor = KMAppearance.Layout.h1Color()
+        timeLabel.textColor = KMAppearance.Layout.h2Color()
+        
+        showPathButton.image = NSImage(named: "KMimageNameUXIconHomeOpenfinderNor")
+        showPathButton.alternateImage = NSImage(named:"KMimageNameUXIconHomeOpenfinderHov")
+        
+        removePathButton.image = NSImage(named: "KMImageNameUXIconHomeRemoveNor")
+        removePathButton.alternateImage = NSImage(named: "KMImageNameUXIconHomeRemoveHov")
+        
+        showPathButton.mouseMoveCallback = { [unowned self] mouseEntered in
+            if (mouseEntered) {
+                showPathButton.image = NSImage(named: "KMimageNameUXIconHomeOpenfinderHov")
+            } else {
+                showPathButton.image = NSImage(named: "KMimageNameUXIconHomeOpenfinderNor")
+            }
+        }
+        
+        removePathButton.mouseMoveCallback = { [unowned self] mouseEntered in
+            if (mouseEntered) {
+                removePathButton.image = NSImage(named: "KMImageNameUXIconHomeRemoveHov")
+            } else {
+                removePathButton.image = NSImage(named: "KMImageNameUXIconHomeRemoveNor")
+            }
+        }
+    }
+    
+    func reloadData() {
+        self.updateTypeData()
+        self.updateFilesData()
+    }
+    
+    override func rightMouseDown(with event: NSEvent) {
+        let point = self.view.convert(event.locationInWindow, from: nil)
+        let menu = NSMenu(title: "")
+        menu.addItem(NSMenuItem(title: NSLocalizedString("Show in Finder", comment: ""), action: #selector(showPathButtonAction), keyEquivalent: ""))
+        menu.addItem(NSMenuItem(title: NSLocalizedString("Remove from Recents", comment: ""), action: #selector(removePathButtonAction), keyEquivalent: ""))
+        menu.popUp(positioning: nil, at: point, in: self.view)
+    }
+}
+
+extension KMHomeHistoryCollectionItem {
+    func updateTypeData() {
+        switch self.showType {
+        case .horizontal:
+            self.verticalView.isHidden = true
+            self.horizontalView.isHidden = false
+        case .vertical:
+            self.verticalView.isHidden = false
+            self.horizontalView.isHidden = true
+        }
+    }
+    
+    func updateFilesData() -> Void {
+        guard let fileUrl = url else { return }
+        
+        let attrib = try? FileManager.default.attributesOfItem(atPath: fileUrl.path) as? Dictionary<FileAttributeKey , Any>
+        if attrib != nil {
+            let dateFormatter: DateFormatter = DateFormatter.init()
+            let fileDate: Date = attrib![FileAttributeKey(rawValue: "NSFileModificationDate")] as! Date
+            var fileTime: String = ""
+            if fileDate.isToday() {
+                dateFormatter.dateFormat = "HH:mm"
+            } else if self.isDateInCurrentWeek(fileDate) {
+                dateFormatter.dateFormat = "EEE, HH:mm"
+            } else {
+                dateFormatter.dateFormat = "MMM d, yyyy"
+            }
+            
+            let fileName = fileUrl.lastPathComponent
+//            let fileType = url.pathExtension.isEmpty ? "" : url.pathExtension
+            let fileType = ""
+            let sizeFloat: Float = attrib![FileAttributeKey(rawValue: "NSFileSize")] as? Float ?? 0.0
+            let fileSize = fileSizeString(sizeFloat).isEmpty ? "" : fileSizeString(sizeFloat)
+            let lastTime = dateFormatter.string(from: fileDate)
+            if fileDate.isToday() {
+                fileTime = String(format: "%@, %@", NSLocalizedString("Today", comment: ""), lastTime)
+            } else if isDateInCurrentWeek(fileDate) {
+                fileTime = lastTime
+            } else {
+                fileTime = lastTime
+            }
+
+            let paragraphStyle = NSMutableParagraphStyle()
+            paragraphStyle.lineSpacing = 22.0
+            horizontalTitleLabel.stringValue = fileName
+            verticalTitleLabel.stringValue = fileName
+            
+            //path
+            let array = fileUrl.path
+                .deletingLastPathComponent
+                .components(separatedBy: "/")
+            let string = NSMutableString()
+
+            if array.count > 4 {
+                string.append(".../")
+                string.append(array[array.count - 3])
+                string.append("/")
+                string.append(array[array.count - 2])
+                string.append("/")
+                string.append(array[array.count - 1])
+            } else {
+                string.setString(fileUrl.path.deletingLastPathComponent)
+            }
+
+            pathLabel.stringValue = string as String
+            
+    //        documentName.attributedStringValue = NSAttributedString(string: fileName, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
+//            documentType.attributedStringValue = NSAttributedString(string: fileType, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
+            sizeLabel.attributedStringValue = NSAttributedString(string: fileSize, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
+            timeLabel.attributedStringValue = NSAttributedString(string: fileTime, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
+//            mainBox.toolTip = fileName
+//            
+//            if selectUrls.contains(fileUrl) {
+//                isSelect = true
+//                mainBox.fillColor = NSColor.km_init(hex: "#CED0D4", alpha: 0.6)
+//                mainBox.borderWidth = 1.0
+//                mainBox.borderColor = NSColor.km_init(hex: "#CED0D4")
+//                mainBox.cornerRadius = 4.0
+//            } else {
+//                isSelect = false
+//                mainBox.fillColor = .clear
+//                mainBox.borderWidth = 0.0
+//                mainBox.cornerRadius = 0.0
+//            }
+//            documentName.backgroundColor = .clear
+//            documentName.textColor = NSColor.km_init(hex: "#252629")
+//            documentName.font = NSFont(name: "SFProText-Regular", size: 14)
+//            documentType.textColor = NSColor.km_init(hex: "#94989C")
+//            documentSize.textColor = NSColor.km_init(hex: "#94989C")
+//            documentName.backgroundColor = .clear
+//            lastModificationTime.textColor = NSColor.km_init(hex: "#94989C")
+//            lastModificationTime.backgroundColor = .clear
+//            moreButton.image = NSImage(named: "KMHomeMoreTools")
+            let image: NSImage = NSImage.previewForFile(path: fileUrl, ofSize: self.view.bounds.size, asIcon: true) ?? NSImage()
+            showImageView.image = image
+        }
+    }
+    
+    func fileSizeString(_ fSize: Float) -> String {
+        let fileSize = fSize / 1024
+        let size = fileSize >= 1024 ? (fileSize < 1048576 ? fileSize/1024 : fileSize/1048576.0) : fileSize
+        let unit = fileSize >= 1024 ? (fileSize < 1048576 ? "M" : "G") : "K"
+        return String(format: "%0.1f %@", size, unit)
+    }
+    
+    func isSameWeek (withDate date: Date) -> Bool {
+        let currentWeekOfYear = getWeekOfYear(date: Date.init())
+        let targetWeekOfYear = getWeekOfYear(date: date)
+        if targetWeekOfYear == currentWeekOfYear {
+            return false
+        } else {
+            return true
+        }
+    }
+    
+    func isDateInCurrentWeek(_ date: Date) -> Bool {
+        let calendar = Calendar.current
+        // 获取当前日期的星期几
+        let weekday = calendar.component(.weekday, from: Date())
+        // 获取一周的第一天(周日)的日期
+        let firstDayOfWeek = calendar.date(byAdding: .day, value: -weekday, to: Date())!
+        // 获取一周的最后一天(下周的第一天)的日期
+        let lastDayOfWeek = calendar.date(byAdding: .day, value: 7, to: firstDayOfWeek)!
+        // 判断日期是否在当前周的范围内
+        return date > firstDayOfWeek && date < lastDayOfWeek
+    }
+     
+    func getWeekOfYear(date: Date) -> Int {
+        let components = Calendar.current.dateComponents([Calendar.Component.weekOfYear], from: date)
+        return components.weekOfYear ?? 0
+    }
+}
+                     
+extension KMHomeHistoryCollectionItem {
+    @objc @IBAction func showPathButtonAction(_ sender: Any) {
+        guard let callBack = showPathAction else { return }
+        
+        callBack(self)
+    }
+    
+    @objc @IBAction func removePathButtonAction(_ sender: Any) {
+        guard let callBack = removeAction else { return }
+        
+        callBack(self)
+    }
+}
+
+extension KMHomeHistoryCollectionItem {
+    override func mouseEntered(with event: NSEvent) {
+        guard let callBack = mouseMoveAction else { return }
+        
+        callBack(self, true)
+    }
+    
+    override func mouseExited(with event: NSEvent) {
+        guard let callBack = mouseMoveAction else { return }
+        
+        callBack(self, false)
+    }
+    
+    override func mouseDown(with event: NSEvent) {
+        if event.clickCount == 2 {
+            // 处理双击操作
+            guard let callBack = mouseDobleClickAction else { return }
+            callBack(self, self.url!)
+        } else {
+            super.mouseDown(with: event)
+        }
+    }
+}

+ 196 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/History/Cell/KMHomeHistoryCollectionItem.xib

@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHomeHistoryCollectionItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="contentBox" destination="gvc-kj-Yeo" id="b05-Yu-1sn"/>
+                <outlet property="handleView" destination="seD-7E-dp2" id="AlN-MY-rLZ"/>
+                <outlet property="horizontalTitleLabel" destination="ddV-aD-Yah" id="xU2-pL-hSt"/>
+                <outlet property="horizontalView" destination="7sk-7M-lCI" id="EpH-GN-k8x"/>
+                <outlet property="iconImageView" destination="0Mh-Sf-3a2" id="uoB-VI-qbq"/>
+                <outlet property="pathLabel" destination="Der-Qi-aoW" id="PuH-jA-osJ"/>
+                <outlet property="removePathButton" destination="TFk-gH-WAn" id="kQT-uV-5d8"/>
+                <outlet property="showImageView" destination="dbA-sb-Xfk" id="GKb-W4-AfQ"/>
+                <outlet property="showPathButton" destination="HSD-uO-oml" id="QsF-AA-vhr"/>
+                <outlet property="sizeLabel" destination="wId-sm-qtO" id="Iod-iK-eyQ"/>
+                <outlet property="timeLabel" destination="WUP-W3-okM" id="zH1-iA-fty"/>
+                <outlet property="verticalTitleLabel" destination="mZL-RM-KzQ" id="llq-zu-fuu"/>
+                <outlet property="verticalView" destination="oc7-Ul-iDs" id="RTc-R1-XAN"/>
+                <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 translatesAutoresizingMaskIntoConstraints="NO" id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="618" height="88"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="gvc-kj-Yeo" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                    <rect key="frame" x="16" y="16" width="586" height="56"/>
+                    <view key="contentView" id="KgU-86-iwk">
+                        <rect key="frame" x="0.0" y="0.0" width="586" height="56"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                </box>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="oc7-Ul-iDs">
+                    <rect key="frame" x="0.0" y="0.0" width="618" height="88"/>
+                    <subviews>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dbA-sb-Xfk">
+                            <rect key="frame" x="0.0" y="40" width="618" height="48"/>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="bdV-B5-oJm"/>
+                        </imageView>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mZL-RM-KzQ">
+                            <rect key="frame" x="14" y="16" width="590" height="16"/>
+                            <textFieldCell key="cell" alignment="center" id="Nso-Kd-6li">
+                                <font key="font" metaFont="system"/>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="mZL-RM-KzQ" firstAttribute="leading" secondItem="oc7-Ul-iDs" secondAttribute="leading" constant="16" id="7fg-gh-Ipe"/>
+                        <constraint firstAttribute="trailing" secondItem="dbA-sb-Xfk" secondAttribute="trailing" id="HWM-9v-2Rd"/>
+                        <constraint firstItem="dbA-sb-Xfk" firstAttribute="top" secondItem="oc7-Ul-iDs" secondAttribute="top" id="Sv1-jj-Bfg"/>
+                        <constraint firstItem="mZL-RM-KzQ" firstAttribute="centerX" secondItem="oc7-Ul-iDs" secondAttribute="centerX" id="U8s-bU-U33"/>
+                        <constraint firstAttribute="trailing" secondItem="mZL-RM-KzQ" secondAttribute="trailing" constant="16" id="hy9-aF-hPG"/>
+                        <constraint firstItem="mZL-RM-KzQ" firstAttribute="top" secondItem="dbA-sb-Xfk" secondAttribute="bottom" constant="8" id="jfz-kY-uGx"/>
+                        <constraint firstAttribute="bottom" secondItem="dbA-sb-Xfk" secondAttribute="bottom" constant="40" id="lD8-TX-JUg"/>
+                        <constraint firstItem="dbA-sb-Xfk" firstAttribute="leading" secondItem="oc7-Ul-iDs" secondAttribute="leading" id="xP3-Qp-EQE"/>
+                    </constraints>
+                </customView>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="7sk-7M-lCI">
+                    <rect key="frame" x="0.0" y="0.0" width="618" height="88"/>
+                    <subviews>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="0Mh-Sf-3a2">
+                            <rect key="frame" x="16" y="28" width="32" height="32"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="32" id="Hwu-re-UBO"/>
+                                <constraint firstAttribute="height" constant="32" id="Wiy-fe-sgF"/>
+                            </constraints>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="KMImageNameUXIconPropertybarFilePdf" id="eLO-Yq-M3q"/>
+                        </imageView>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ddV-aD-Yah">
+                            <rect key="frame" x="54" y="43" width="40" height="17"/>
+                            <textFieldCell key="cell" lineBreakMode="truncatingMiddle" alignment="left" title="Label" id="AYN-Fy-tcy">
+                                <font key="font" metaFont="system" size="14"/>
+                                <color key="textColor" name="KMGray6Color"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WUP-W3-okM">
+                            <rect key="frame" x="495" y="37" width="109" height="15"/>
+                            <textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="2020-08-01 12:39" id="PEF-8C-QEE">
+                                <font key="font" metaFont="cellTitle"/>
+                                <color key="textColor" name="KMGray5Color"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Der-Qi-aoW">
+                            <rect key="frame" x="93" y="28" width="35" height="15"/>
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="2AB-HF-4Ox">
+                                <font key="font" metaFont="cellTitle"/>
+                                <color key="textColor" red="0.39607843139999999" green="0.41176470590000003" blue="0.43921568630000002" alpha="1" colorSpace="calibratedRGB"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wId-sm-qtO">
+                            <rect key="frame" x="54" y="28" width="35" height="15"/>
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Pbe-3u-seE">
+                                <font key="font" metaFont="cellTitle"/>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="seD-7E-dp2">
+                            <rect key="frame" x="373" y="24" width="100" height="40"/>
+                            <subviews>
+                                <button translatesAutoresizingMaskIntoConstraints="NO" id="HSD-uO-oml" customClass="KMButton" customModule="PDF_Master" customModuleProvider="target">
+                                    <rect key="frame" x="20" y="10" width="20" height="20"/>
+                                    <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMimageNameUXIconHomeOpenfinderNor" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="3fQ-E6-5PX">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="20" id="80L-12-LrA"/>
+                                        <constraint firstAttribute="height" constant="20" id="eOT-Uy-uIz"/>
+                                    </constraints>
+                                    <connections>
+                                        <action selector="showPathButtonAction:" target="-2" id="DOu-Nk-4jV"/>
+                                    </connections>
+                                </button>
+                                <button translatesAutoresizingMaskIntoConstraints="NO" id="TFk-gH-WAn" customClass="KMButton" customModule="PDF_Master" customModuleProvider="target">
+                                    <rect key="frame" x="60" y="10" width="20" height="20"/>
+                                    <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXIconHomeRemoveNor" imagePosition="overlaps" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="4WS-yy-x9P">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="20" id="3x6-0t-W2G"/>
+                                        <constraint firstAttribute="height" constant="20" id="Afa-dM-24q"/>
+                                    </constraints>
+                                    <connections>
+                                        <action selector="removePathButtonAction:" target="-2" id="iN4-wh-nGW"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="TFk-gH-WAn" firstAttribute="centerY" secondItem="seD-7E-dp2" secondAttribute="centerY" id="1WN-HU-Tbr"/>
+                                <constraint firstItem="HSD-uO-oml" firstAttribute="centerY" secondItem="seD-7E-dp2" secondAttribute="centerY" id="852-42-Het"/>
+                                <constraint firstItem="TFk-gH-WAn" firstAttribute="centerX" secondItem="seD-7E-dp2" secondAttribute="centerX" constant="20" id="Hl6-6Q-t6F"/>
+                                <constraint firstAttribute="height" constant="40" id="bWV-l7-iOY"/>
+                                <constraint firstItem="HSD-uO-oml" firstAttribute="centerX" secondItem="seD-7E-dp2" secondAttribute="centerX" constant="-20" id="eR0-13-eod"/>
+                                <constraint firstAttribute="width" constant="100" id="mmj-xq-JlI"/>
+                            </constraints>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="Der-Qi-aoW" firstAttribute="leading" secondItem="wId-sm-qtO" secondAttribute="trailing" constant="8" id="3Xx-1N-jxL"/>
+                        <constraint firstItem="WUP-W3-okM" firstAttribute="centerY" secondItem="0Mh-Sf-3a2" secondAttribute="centerY" id="Ek8-FQ-sYA"/>
+                        <constraint firstItem="seD-7E-dp2" firstAttribute="centerY" secondItem="7sk-7M-lCI" secondAttribute="centerY" id="LQm-ap-hCm"/>
+                        <constraint firstItem="0Mh-Sf-3a2" firstAttribute="leading" secondItem="7sk-7M-lCI" secondAttribute="leading" constant="16" id="NLG-Aa-oZ0"/>
+                        <constraint firstItem="wId-sm-qtO" firstAttribute="leading" secondItem="0Mh-Sf-3a2" secondAttribute="trailing" constant="8" id="P6W-HV-B1N"/>
+                        <constraint firstItem="Der-Qi-aoW" firstAttribute="centerY" secondItem="wId-sm-qtO" secondAttribute="centerY" id="WhF-tw-G1U"/>
+                        <constraint firstItem="ddV-aD-Yah" firstAttribute="leading" secondItem="0Mh-Sf-3a2" secondAttribute="trailing" constant="8" id="b6a-Mv-bbk"/>
+                        <constraint firstAttribute="trailing" secondItem="WUP-W3-okM" secondAttribute="trailing" constant="16" id="ffA-da-LAi"/>
+                        <constraint firstItem="0Mh-Sf-3a2" firstAttribute="centerY" secondItem="7sk-7M-lCI" secondAttribute="centerY" id="hSv-e3-grz"/>
+                        <constraint firstItem="wId-sm-qtO" firstAttribute="bottom" secondItem="0Mh-Sf-3a2" secondAttribute="bottom" id="k8G-xK-sUx"/>
+                        <constraint firstItem="WUP-W3-okM" firstAttribute="leading" secondItem="seD-7E-dp2" secondAttribute="trailing" constant="24" id="w23-gi-JHt"/>
+                        <constraint firstItem="ddV-aD-Yah" firstAttribute="top" secondItem="0Mh-Sf-3a2" secondAttribute="top" id="yC7-2n-C7a"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="7sk-7M-lCI" secondAttribute="bottom" id="1xu-Eu-Gpw"/>
+                <constraint firstItem="oc7-Ul-iDs" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="3mN-ui-HOd"/>
+                <constraint firstAttribute="trailing" secondItem="gvc-kj-Yeo" secondAttribute="trailing" constant="16" id="MQ9-mG-dvf"/>
+                <constraint firstItem="gvc-kj-Yeo" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="16" id="QNY-R7-aCn"/>
+                <constraint firstAttribute="trailing" secondItem="oc7-Ul-iDs" secondAttribute="trailing" id="ZvQ-Yb-83f"/>
+                <constraint firstItem="gvc-kj-Yeo" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="16" id="c3K-iJ-GsK"/>
+                <constraint firstAttribute="trailing" secondItem="7sk-7M-lCI" secondAttribute="trailing" id="cqh-JA-THy"/>
+                <constraint firstItem="7sk-7M-lCI" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="e4i-JT-Slb"/>
+                <constraint firstItem="7sk-7M-lCI" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="ooa-BQ-VTr"/>
+                <constraint firstAttribute="bottom" secondItem="gvc-kj-Yeo" secondAttribute="bottom" constant="16" id="pQn-cm-GgU"/>
+                <constraint firstAttribute="bottom" secondItem="oc7-Ul-iDs" secondAttribute="bottom" id="pjN-VI-SK1"/>
+                <constraint firstItem="oc7-Ul-iDs" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="tTF-yE-4ER"/>
+            </constraints>
+            <point key="canvasLocation" x="-67" y="194"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameUXIconHomeRemoveNor" width="20" height="20"/>
+        <image name="KMImageNameUXIconPropertybarFilePdf" width="32" height="33"/>
+        <image name="KMimageNameUXIconHomeOpenfinderNor" width="20" height="20"/>
+        <namedColor name="KMGray5Color">
+            <color red="0.32899999618530273" green="0.32400000095367432" blue="0.4779999852180481" alpha="0.33000001311302185" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+        <namedColor name="KMGray6Color">
+            <color red="0.396078431372549" green="0.41176470588235292" blue="0.4392156862745098" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

+ 129 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/History/KMHomeHistoryListView.swift

@@ -0,0 +1,129 @@
+//
+//  KMHomeHistoryListView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/27.
+//
+
+import Cocoa
+
+
+enum KMHomeHistoryListViewShowType: Int {
+    case horizontal = 0 //横
+    case vertical //纵
+}
+
+typealias KMHomeHistoryListViewItemDidSelect = (_ view: KMHomeHistoryListView, _ url: URL) -> Void
+class KMHomeHistoryListView: KMBaseXibView {
+    @IBOutlet weak var collectionView: NSCollectionView!
+    
+    var didSelect: KMHomeHistoryListViewItemDidSelect?
+    var data:[URL] = []
+    var showType:KMHomeHistoryListViewShowType = .horizontal {
+        didSet {
+            self.collectionView.reloadData()
+        }
+    }
+    
+    
+    override func draw(_ dirtyRect: NSRect) {
+        if dirtyRect.size.width != self.bounds.size.width {
+            collectionView.reloadSections(IndexSet(integer: 0))
+        }
+        super.draw(dirtyRect)
+    }
+    
+    override func setup() {
+        //设置代理
+        self.collectionView.delegate = self
+        self.collectionView.dataSource = self
+        //是否可选中
+        self.collectionView.isSelectable = true
+        //注册cell
+        self.collectionView.register(KMHomeHistoryCollectionItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeHistoryCollectionItem"))
+        
+//        self.backgroundColor(KMAppearance.Layout.l0Color())
+    }
+    
+    override func reloadData() {
+        self.data.removeAll()
+        for url in NSDocumentController.shared.recentDocumentURLs {
+            if FileManager.default.fileExists(atPath: url.path) {
+                self.data.append(url)
+            }
+        }
+
+        let fileNumber = KMPreferenceManager.shared.getData(forKey: KMPreference.documentMaximunDisplayNumberKey) as? Int ?? 10
+        if fileNumber <= data.count {
+            let arr1 = data.prefix(fileNumber)
+            self.data = Array(arr1)
+        }
+        
+        self.collectionView.reloadData()
+    }
+}
+
+extension KMHomeHistoryListView: NSCollectionViewDelegate {
+    //当item被选中
+    public func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+        print("点击")
+        let view = collectionView.item(at: indexPaths.first!) as! KMHomeHistoryCollectionItem
+        
+//        let content = view.model
+        
+//        guard let callBack = didSelect else { return }
+//        
+//        content?.index = indexPaths.first!.item
+//        callBack(self, content!)
+    }
+    
+   //当item取消选中
+    public func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
+        _ = collectionView.item(at: indexPaths.first!) as! KMHomeHistoryCollectionItem
+    }
+}
+
+extension KMHomeHistoryListView: NSCollectionViewDataSource {
+    public func numberOfSections(in collectionView: NSCollectionView) -> Int {
+        return 1
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+        return self.data.count
+    }
+    
+    //返回对应的item自定义个体
+    public func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+        let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeHistoryCollectionItem"), for: indexPath) as! KMHomeHistoryCollectionItem
+        view.showType = self.showType
+        if self.data.count > indexPath.item {
+            view.url = self.data[indexPath.item]
+        }
+    
+        view.mouseDobleClickAction = {[unowned self] view, url in
+            guard let callBack = didSelect else { return }
+            
+            callBack(self, url)
+        }
+        return view
+    }
+}
+
+extension KMHomeHistoryListView: NSCollectionViewDelegateFlowLayout {
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
+        if showType == .horizontal {
+            return NSSize(width: self.contentView.bounds.width, height: 64)
+        } else {
+            return NSSize(width: 136, height: 214)
+        }
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets {
+        if showType == .horizontal {
+            return NSEdgeInsets(top: 10, left: 0, bottom: 10, right: 0)
+        } else {
+            return NSEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
+        }
+    }
+}

+ 56 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/History/KMHomeHistoryListView.xib

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHomeHistoryListView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="collectionView" destination="2YZ-04-yn6" id="VrD-Wg-TzA"/>
+            </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" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rQW-DN-cJx">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+                    <clipView key="contentView" drawsBackground="NO" id="hpl-mt-Tmp">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <collectionView id="2YZ-04-yn6">
+                                <rect key="frame" x="0.0" y="0.0" width="480" height="158"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
+                                <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="nLD-SM-dF9">
+                                    <size key="itemSize" width="50" height="50"/>
+                                </collectionViewFlowLayout>
+                                <color key="primaryBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                            </collectionView>
+                        </subviews>
+                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </clipView>
+                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="nvA-t1-N9p">
+                        <rect key="frame" x="-100" y="-100" width="233" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="xme-h7-eh8" customClass="KMToolSetScroller" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="-100" y="-100" width="15" height="143"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                </scrollView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="rQW-DN-cJx" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="0qW-dq-SU7"/>
+                <constraint firstAttribute="trailing" secondItem="rQW-DN-cJx" secondAttribute="trailing" id="5pe-5b-eAE"/>
+                <constraint firstAttribute="bottom" secondItem="rQW-DN-cJx" secondAttribute="bottom" id="bOt-kl-Tq1"/>
+                <constraint firstItem="rQW-DN-cJx" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="d0j-Zg-yIC"/>
+            </constraints>
+            <point key="canvasLocation" x="-146" y="54"/>
+        </customView>
+    </objects>
+</document>

+ 12 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/History/Model/KMHomeHistoryListViewModel.swift

@@ -0,0 +1,12 @@
+//
+//  KMHomeHistoryListViewModel.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/31.
+//
+
+import Cocoa
+
+class KMHomeHistoryListViewModel: NSObject {
+
+}

+ 82 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/KMHomeContentView.swift

@@ -0,0 +1,82 @@
+//
+//  KMHomeContentView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/27.
+//
+
+import Cocoa
+
+typealias KMHomeContentViewHistoryDidSelect = (_ view: KMHomeContentView, _ url: URL) -> Void
+
+class KMHomeContentView: KMBaseXibView {
+    @IBOutlet weak var qucikToolsLabel: NSTextField!
+    @IBOutlet weak var qucikToolsView: KMQucikToolsView!
+    @IBOutlet weak var leftButton: NSButton!
+    @IBOutlet weak var rightButton: NSButton!
+    @IBOutlet weak var moreButton: KMButton!
+    
+    
+    @IBOutlet weak var recentlyLabel: NSTextField!
+    @IBOutlet weak var historyListView: KMHomeHistoryListView!
+    @IBOutlet weak var horizontalButton: NSButton!
+    @IBOutlet weak var verticalButton: NSButton!
+    @IBOutlet weak var cleanButton: KMButton!
+    
+    var historyDidSelect: KMHomeContentViewHistoryDidSelect?
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+        self.setup()
+    }
+    
+    override func setup() {
+        self.historyListViewSetup()
+    }
+}
+
+extension KMHomeContentView {
+    @IBAction func leftButtonAction(_ sender: Any) {
+        
+    }
+    
+    @IBAction func rightButtonAction(_ sender: Any) {
+        
+    }
+    
+    @IBAction func moreButtonAction(_ sender: Any) {
+        let homeQuickToolsWindowController: KMHomeQuickToolsWindowController = KMHomeQuickToolsWindowController.sharedHomeQuickTools
+        homeQuickToolsWindowController.window?.center()
+//        homeQuickToolsWindowController.window?.orderFront(sender)
+        NSWindow.currentWindow().addChildWindow(homeQuickToolsWindowController.window!, ordered: NSWindow.OrderingMode.above)
+//        NSWindow.currentWindow().beginSheet(homeQuickToolsWindowController.window!)
+        homeQuickToolsWindowController.dataChange = { [unowned self] controller in
+            self.qucikToolsView.reloadData()
+        }
+    }
+}
+
+extension KMHomeContentView {
+    func historyListViewSetup() {
+        self.historyListView.didSelect = { [unowned self] view, url in
+            guard let callBack = historyDidSelect else { return }
+            
+            callBack(self, url)
+        }
+        
+    }
+    
+    @IBAction func horizontalButtonAction(_ sender: Any) {
+        self.historyListView.showType = .horizontal
+    }
+    
+    @IBAction func verticalButtonAction(_ sender: Any) {
+        self.historyListView.showType = .vertical
+    }
+    
+    @IBAction func cleanButtonAction(_ sender: Any) {
+        
+    }
+}

+ 252 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/KMHomeContentView.xib

@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHomeContentView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="cleanButton" destination="2pe-eQ-jim" id="NzZ-si-Lah"/>
+                <outlet property="historyListView" destination="wMw-AS-5yG" id="HHc-lb-Uau"/>
+                <outlet property="horizontalButton" destination="f8L-dW-OV5" id="2bQ-AH-t3U"/>
+                <outlet property="leftButton" destination="PwG-OP-iJ7" id="eZg-FR-Kro"/>
+                <outlet property="moreButton" destination="YVh-aT-yWA" id="M54-rm-tnw"/>
+                <outlet property="qucikToolsLabel" destination="FaJ-2q-2cQ" id="q0S-ez-pED"/>
+                <outlet property="qucikToolsView" destination="ynU-RA-kWD" id="t4n-b1-mpf"/>
+                <outlet property="recentlyLabel" destination="Jq6-Hl-amd" id="cL6-5Q-9jC"/>
+                <outlet property="rightButton" destination="WPD-Y0-yC2" id="ZEL-I1-FmC"/>
+                <outlet property="verticalButton" destination="oce-zR-GCX" id="DXr-S4-r67"/>
+            </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="700" height="667"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kXR-P8-kEz">
+                    <rect key="frame" x="48" y="48" width="624" height="571"/>
+                    <clipView key="contentView" drawsBackground="NO" id="i44-GZ-Pxj">
+                        <rect key="frame" x="0.0" y="0.0" width="624" height="571"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <view id="jlt-dP-sou">
+                                <rect key="frame" x="0.0" y="0.0" width="609" height="556"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="PAa-wQ-E8L">
+                                        <rect key="frame" x="0.0" y="294" width="609" height="262"/>
+                                        <subviews>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="69z-SV-dL5">
+                                                <rect key="frame" x="0.0" y="238" width="609" height="24"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FaJ-2q-2cQ">
+                                                        <rect key="frame" x="-2" y="0.0" width="111" height="24"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Qucik Tools" id="uw9-z5-FMe">
+                                                            <font key="font" metaFont="systemSemibold" size="20"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YVh-aT-yWA" customClass="KMButton">
+                                                        <rect key="frame" x="589" y="2" width="20" height="20"/>
+                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXIconHomeMoreNor" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="H4M-FQ-wtf">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="moreButtonAction:" target="-2" id="4JY-gV-CUq"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WPD-Y0-yC2">
+                                                        <rect key="frame" x="557" y="2" width="16" height="21"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="NSTouchBarGoForwardTemplate" imagePosition="overlaps" alignment="center" imageScaling="proportionallyDown" inset="2" id="mRw-z9-Pze">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="16" id="ASJ-At-7qY"/>
+                                                            <constraint firstAttribute="height" constant="16" id="x37-9K-xk3"/>
+                                                        </constraints>
+                                                        <connections>
+                                                            <action selector="rightButtonAction:" target="-2" id="noR-iP-jsC"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PwG-OP-iJ7">
+                                                        <rect key="frame" x="509" y="2" width="16" height="21"/>
+                                                        <buttonCell key="cell" type="square" title="Button" bezelStyle="shadowlessSquare" image="NSTouchBarGoBackTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="bil-yH-Akb">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="16" id="Dw9-LS-jOQ"/>
+                                                            <constraint firstAttribute="width" constant="16" id="Wzf-Iv-uw7"/>
+                                                        </constraints>
+                                                        <connections>
+                                                            <action selector="leftButtonAction:" target="-2" id="U2S-eX-FI8"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="WPD-Y0-yC2" firstAttribute="centerY" secondItem="69z-SV-dL5" secondAttribute="centerY" id="1mQ-di-yW2"/>
+                                                    <constraint firstItem="WPD-Y0-yC2" firstAttribute="leading" secondItem="PwG-OP-iJ7" secondAttribute="trailing" constant="32" id="2o2-jt-hDj"/>
+                                                    <constraint firstAttribute="trailing" secondItem="YVh-aT-yWA" secondAttribute="trailing" id="C9W-JG-W8s"/>
+                                                    <constraint firstItem="FaJ-2q-2cQ" firstAttribute="leading" secondItem="69z-SV-dL5" secondAttribute="leading" id="UZc-nM-Aqt"/>
+                                                    <constraint firstAttribute="height" constant="24" id="VF5-NT-Dua"/>
+                                                    <constraint firstItem="FaJ-2q-2cQ" firstAttribute="centerY" secondItem="69z-SV-dL5" secondAttribute="centerY" id="e4G-eL-brO"/>
+                                                    <constraint firstItem="YVh-aT-yWA" firstAttribute="leading" secondItem="WPD-Y0-yC2" secondAttribute="trailing" constant="16" id="sIP-zf-cQy"/>
+                                                    <constraint firstItem="YVh-aT-yWA" firstAttribute="centerY" secondItem="69z-SV-dL5" secondAttribute="centerY" id="u3H-Ys-UG6"/>
+                                                    <constraint firstItem="PwG-OP-iJ7" firstAttribute="centerY" secondItem="69z-SV-dL5" secondAttribute="centerY" id="ygX-nH-XYo"/>
+                                                </constraints>
+                                            </customView>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="ynU-RA-kWD" customClass="KMQucikToolsView" customModule="PDF_Master" customModuleProvider="target">
+                                                <rect key="frame" x="0.0" y="0.0" width="609" height="238"/>
+                                            </customView>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstItem="69z-SV-dL5" firstAttribute="leading" secondItem="PAa-wQ-E8L" secondAttribute="leading" id="CXA-Yf-S6n"/>
+                                            <constraint firstAttribute="trailing" secondItem="69z-SV-dL5" secondAttribute="trailing" id="R3o-AV-ca6"/>
+                                            <constraint firstItem="69z-SV-dL5" firstAttribute="top" secondItem="PAa-wQ-E8L" secondAttribute="top" id="T3r-CJ-twO"/>
+                                            <constraint firstAttribute="height" constant="262" id="TWz-4G-1dS"/>
+                                            <constraint firstAttribute="trailing" secondItem="ynU-RA-kWD" secondAttribute="trailing" id="ah7-Yb-qGV"/>
+                                            <constraint firstItem="ynU-RA-kWD" firstAttribute="top" secondItem="69z-SV-dL5" secondAttribute="bottom" id="iUL-0f-b1G"/>
+                                            <constraint firstAttribute="bottom" secondItem="ynU-RA-kWD" secondAttribute="bottom" id="lil-Ek-8bs"/>
+                                            <constraint firstItem="ynU-RA-kWD" firstAttribute="leading" secondItem="PAa-wQ-E8L" secondAttribute="leading" id="sYF-gW-xax"/>
+                                        </constraints>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="lCh-WA-G58">
+                                        <rect key="frame" x="0.0" y="0.0" width="609" height="246"/>
+                                        <subviews>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="Q84-po-tiv">
+                                                <rect key="frame" x="0.0" y="222" width="609" height="24"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jq6-Hl-amd">
+                                                        <rect key="frame" x="-2" y="0.0" width="85" height="24"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Recently" id="ify-Mu-nbZ">
+                                                            <font key="font" metaFont="systemSemibold" size="20"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2pe-eQ-jim" customClass="KMButton">
+                                                        <rect key="frame" x="589" y="2" width="20" height="20"/>
+                                                        <buttonCell key="cell" type="square" title="Button" bezelStyle="shadowlessSquare" image="KMImageNameHomeDeletNor" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="unN-7z-cUu">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="20" id="68J-F8-nVR"/>
+                                                            <constraint firstAttribute="height" constant="20" id="hf5-uR-HfC"/>
+                                                        </constraints>
+                                                        <connections>
+                                                            <action selector="cleanButtonAction:" target="-2" id="4Ja-7N-Avc"/>
+                                                        </connections>
+                                                    </button>
+                                                    <box horizontalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="mDv-HL-Jso">
+                                                        <rect key="frame" x="567" y="2" width="5" height="20"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="1" id="SGq-bD-tlk"/>
+                                                            <constraint firstAttribute="height" constant="20" id="kQu-ie-pMw"/>
+                                                        </constraints>
+                                                    </box>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oce-zR-GCX">
+                                                        <rect key="frame" x="529" y="2" width="20" height="20"/>
+                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXIconHomeViewthumbnailNor" imagePosition="overlaps" alignment="center" imageScaling="proportionallyDown" inset="2" id="0s5-A7-lRz">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="20" id="HDg-pn-2rE"/>
+                                                            <constraint firstAttribute="width" constant="20" id="Kyx-GP-dbb"/>
+                                                        </constraints>
+                                                        <connections>
+                                                            <action selector="verticalButtonAction:" target="-2" id="Tsa-n6-92q"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f8L-dW-OV5">
+                                                        <rect key="frame" x="493" y="2" width="20" height="20"/>
+                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNameUXIconHomeViewlistNor" imagePosition="overlaps" alignment="center" imageScaling="proportionallyDown" inset="2" id="fSg-GB-X16">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="20" id="Hx5-iJ-u9m"/>
+                                                            <constraint firstAttribute="height" constant="20" id="Xzr-w7-vMu"/>
+                                                        </constraints>
+                                                        <connections>
+                                                            <action selector="horizontalButtonAction:" target="-2" id="ffd-Qv-P2i"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="height" constant="24" id="3cL-Mi-izd"/>
+                                                    <constraint firstItem="f8L-dW-OV5" firstAttribute="centerY" secondItem="Q84-po-tiv" secondAttribute="centerY" id="Cf9-QY-3at"/>
+                                                    <constraint firstItem="mDv-HL-Jso" firstAttribute="centerY" secondItem="Q84-po-tiv" secondAttribute="centerY" id="EBA-r9-ef4"/>
+                                                    <constraint firstItem="Jq6-Hl-amd" firstAttribute="leading" secondItem="Q84-po-tiv" secondAttribute="leading" id="Gpg-oa-r8n"/>
+                                                    <constraint firstAttribute="trailing" secondItem="2pe-eQ-jim" secondAttribute="trailing" id="JSL-Us-Bp2"/>
+                                                    <constraint firstItem="Jq6-Hl-amd" firstAttribute="centerY" secondItem="Q84-po-tiv" secondAttribute="centerY" id="Nvb-BH-krU"/>
+                                                    <constraint firstItem="oce-zR-GCX" firstAttribute="centerY" secondItem="Q84-po-tiv" secondAttribute="centerY" id="Xl6-TG-izL"/>
+                                                    <constraint firstItem="2pe-eQ-jim" firstAttribute="leading" secondItem="mDv-HL-Jso" secondAttribute="trailing" constant="19" id="Zqb-KP-jZ6"/>
+                                                    <constraint firstItem="oce-zR-GCX" firstAttribute="leading" secondItem="f8L-dW-OV5" secondAttribute="trailing" constant="16" id="aN0-Rr-nPu"/>
+                                                    <constraint firstItem="2pe-eQ-jim" firstAttribute="centerY" secondItem="Q84-po-tiv" secondAttribute="centerY" id="bjw-iR-IQZ"/>
+                                                    <constraint firstItem="mDv-HL-Jso" firstAttribute="leading" secondItem="oce-zR-GCX" secondAttribute="trailing" constant="20" id="soy-3d-rtd"/>
+                                                </constraints>
+                                            </customView>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="wMw-AS-5yG" customClass="KMHomeHistoryListView" customModule="PDF_Master" customModuleProvider="target">
+                                                <rect key="frame" x="0.0" y="0.0" width="609" height="222"/>
+                                            </customView>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstItem="wMw-AS-5yG" firstAttribute="top" secondItem="Q84-po-tiv" secondAttribute="bottom" id="9Vd-no-qV4"/>
+                                            <constraint firstItem="Q84-po-tiv" firstAttribute="leading" secondItem="lCh-WA-G58" secondAttribute="leading" id="Xua-gM-k6t"/>
+                                            <constraint firstAttribute="trailing" secondItem="Q84-po-tiv" secondAttribute="trailing" id="YLW-A7-bBV"/>
+                                            <constraint firstAttribute="trailing" secondItem="wMw-AS-5yG" secondAttribute="trailing" id="d3N-SN-uuz"/>
+                                            <constraint firstItem="Q84-po-tiv" firstAttribute="top" secondItem="lCh-WA-G58" secondAttribute="top" id="dc9-9O-prs"/>
+                                            <constraint firstItem="wMw-AS-5yG" firstAttribute="leading" secondItem="lCh-WA-G58" secondAttribute="leading" id="tJ1-Wi-nBZ"/>
+                                            <constraint firstAttribute="bottom" secondItem="wMw-AS-5yG" secondAttribute="bottom" id="xuF-zv-5TH"/>
+                                        </constraints>
+                                    </customView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="PAa-wQ-E8L" firstAttribute="top" secondItem="jlt-dP-sou" secondAttribute="top" id="3iE-Hv-fU7"/>
+                                    <constraint firstItem="lCh-WA-G58" firstAttribute="top" secondItem="PAa-wQ-E8L" secondAttribute="bottom" constant="48" id="Ark-gU-B5L"/>
+                                    <constraint firstAttribute="trailing" secondItem="lCh-WA-G58" secondAttribute="trailing" id="Bus-kI-RRx"/>
+                                    <constraint firstItem="lCh-WA-G58" firstAttribute="leading" secondItem="jlt-dP-sou" secondAttribute="leading" id="Q0h-pJ-4eR"/>
+                                    <constraint firstItem="PAa-wQ-E8L" firstAttribute="leading" secondItem="jlt-dP-sou" secondAttribute="leading" id="mj5-r1-2md"/>
+                                    <constraint firstAttribute="bottom" secondItem="lCh-WA-G58" secondAttribute="bottom" id="sNd-yf-uit"/>
+                                    <constraint firstAttribute="trailing" secondItem="PAa-wQ-E8L" secondAttribute="trailing" id="z8Z-dx-yGz"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </clipView>
+                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="lJa-LQ-t6a">
+                        <rect key="frame" x="-100" y="-100" width="685" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="JGk-Uc-9sS">
+                        <rect key="frame" x="-100" y="-100" width="15" height="667"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                </scrollView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="kXR-P8-kEz" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" constant="48" id="K7m-qE-Cbe"/>
+                <constraint firstAttribute="trailing" secondItem="kXR-P8-kEz" secondAttribute="trailing" constant="28" id="VPd-ma-QBA"/>
+                <constraint firstItem="kXR-P8-kEz" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="48" id="WjW-AJ-53t"/>
+                <constraint firstAttribute="bottom" secondItem="kXR-P8-kEz" secondAttribute="bottom" constant="48" id="dAS-Gt-Pni"/>
+            </constraints>
+            <point key="canvasLocation" x="-436" y="281.5"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameHomeDeletNor" width="20" height="20"/>
+        <image name="KMImageNameUXIconHomeMoreNor" width="20" height="20"/>
+        <image name="KMImageNameUXIconHomeViewlistNor" width="20" height="20"/>
+        <image name="KMImageNameUXIconHomeViewthumbnailNor" width="20" height="20"/>
+        <image name="NSTouchBarGoBackTemplate" width="12" height="17"/>
+        <image name="NSTouchBarGoForwardTemplate" width="12" height="17"/>
+    </resources>
+</document>

+ 18 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/NoFileView/KMHomeNOFileView.swift

@@ -0,0 +1,18 @@
+//
+//  KMHomeNOFileView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/30.
+//
+
+import Cocoa
+
+class KMHomeNOFileView: NSView {
+
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+}

+ 71 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/NoFileView/KMHomeNOFileView.xib

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <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="260" height="215"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Rqu-VJ-nd2">
+                    <rect key="frame" x="0.0" y="0.0" width="260" height="215"/>
+                    <subviews>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EpA-iG-2fX">
+                            <rect key="frame" x="-2" y="42" width="264" height="17"/>
+                            <textFieldCell key="cell" alignment="center" title="No recently opened file" id="jxf-2m-h5S">
+                                <font key="font" metaFont="systemSemibold" size="14"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="kgz-YX-oag">
+                            <rect key="frame" x="60" y="75" width="140" height="140"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="140" id="BKm-Q1-YeQ"/>
+                                <constraint firstAttribute="height" constant="140" id="Gbg-Xa-qLe"/>
+                            </constraints>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameUXIconImgEmpthHome" id="aSM-Nq-t67"/>
+                        </imageView>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Gc-Xd-aZe">
+                            <rect key="frame" x="-2" y="0.0" width="264" height="34"/>
+                            <textFieldCell key="cell" alignment="center" title="Click Add files or drag-and-drop files here to open them" id="NHF-rt-7Js">
+                                <font key="font" metaFont="system" size="14"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="EpA-iG-2fX" firstAttribute="leading" secondItem="Rqu-VJ-nd2" secondAttribute="leading" id="0NT-wi-bcZ"/>
+                        <constraint firstAttribute="trailing" secondItem="EpA-iG-2fX" secondAttribute="trailing" id="0pK-A5-6rf"/>
+                        <constraint firstItem="1Gc-Xd-aZe" firstAttribute="top" secondItem="EpA-iG-2fX" secondAttribute="bottom" constant="8" id="8jo-O3-gaQ"/>
+                        <constraint firstItem="kgz-YX-oag" firstAttribute="centerX" secondItem="Rqu-VJ-nd2" secondAttribute="centerX" id="Gep-uT-FZ0"/>
+                        <constraint firstItem="EpA-iG-2fX" firstAttribute="top" secondItem="kgz-YX-oag" secondAttribute="bottom" constant="16" id="Jvc-cu-Cr5"/>
+                        <constraint firstItem="1Gc-Xd-aZe" firstAttribute="leading" secondItem="Rqu-VJ-nd2" secondAttribute="leading" id="M6N-2l-Shn"/>
+                        <constraint firstAttribute="trailing" secondItem="1Gc-Xd-aZe" secondAttribute="trailing" id="Vo0-Pq-pLX"/>
+                        <constraint firstAttribute="trailing" secondItem="kgz-YX-oag" secondAttribute="trailing" constant="60" id="Zrc-C2-nxF"/>
+                        <constraint firstAttribute="bottom" secondItem="1Gc-Xd-aZe" secondAttribute="bottom" id="bA8-JM-AxD"/>
+                        <constraint firstItem="kgz-YX-oag" firstAttribute="top" secondItem="Rqu-VJ-nd2" secondAttribute="top" id="eac-A1-5Qr"/>
+                        <constraint firstItem="kgz-YX-oag" firstAttribute="leading" secondItem="Rqu-VJ-nd2" secondAttribute="leading" constant="60" id="lJC-gg-ouc"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="Rqu-VJ-nd2" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="Cgz-Ps-JpD"/>
+                <constraint firstAttribute="bottom" secondItem="Rqu-VJ-nd2" secondAttribute="bottom" id="IAk-5A-JSN"/>
+                <constraint firstAttribute="trailing" secondItem="Rqu-VJ-nd2" secondAttribute="trailing" id="IE3-rQ-cTx"/>
+                <constraint firstItem="Rqu-VJ-nd2" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="QS4-UF-nef"/>
+            </constraints>
+            <point key="canvasLocation" x="-54" y="108"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameUXIconImgEmpthHome" width="140" height="141"/>
+    </resources>
+</document>

+ 98 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/KMQucikToolsView.swift

@@ -0,0 +1,98 @@
+//
+//  KMQucikToolsView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/27.
+//
+
+import Cocoa
+
+class KMQucikToolsView: KMBaseXibView {
+    @IBOutlet weak var collectionView: NSCollectionView!
+    
+    var data: [KMQucikToolsModel] = []
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    override func setup() {
+        //设置代理
+        let layout = NSCollectionViewFlowLayout()
+        layout.scrollDirection = .horizontal
+        layout.minimumLineSpacing = 10
+        layout.minimumInteritemSpacing = 10
+        // 设置布局到 NSCollectionView
+        self.collectionView.collectionViewLayout = layout
+        
+        self.collectionView.delegate = self
+        self.collectionView.dataSource = self
+        //是否可选中
+        self.collectionView.isSelectable = true
+        //注册cell
+        self.collectionView.register(KMQucikToolCollectionViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMQucikToolCollectionViewItem"))
+        
+//        self.backgroundColor(KMAppearance.Layout.l0Color())
+    }
+    
+    override func reloadData() {
+        self.data.removeAll()
+        
+        for type in KMQucikToolsModel.showType() {
+            self.data.append(KMQucikToolsModel.init(type: type))
+        }
+        self.collectionView.reloadData()
+    }
+}
+
+extension KMQucikToolsView: NSCollectionViewDelegate {
+    //当item被选中
+    public func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+        print("点击")
+        let view = collectionView.item(at: indexPaths.first!) as! KMQucikToolCollectionViewItem
+        
+//        let content = view.model
+        
+//        guard let callBack = didSelect else { return }
+//        
+//        content?.index = indexPaths.first!.item
+//        callBack(self, content!)
+    }
+    
+   //当item取消选中
+    public func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
+        _ = collectionView.item(at: indexPaths.first!) as! KMQucikToolCollectionViewItem
+    }
+}
+
+extension KMQucikToolsView: NSCollectionViewDataSource {
+    public func numberOfSections(in collectionView: NSCollectionView) -> Int {
+        return 1
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+        return self.data.count
+    }
+    
+    //返回对应的item自定义个体
+    public func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+        let view = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMQucikToolCollectionViewItem"), for: indexPath) as! KMQucikToolCollectionViewItem
+        if self.data.count > indexPath.item {
+            view.model = self.data[indexPath.item]
+        }
+        return view
+    }
+    
+}
+
+extension KMQucikToolsView: NSCollectionViewDelegateFlowLayout {
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
+        return NSSize(width: 216, height: 96)
+    }
+    
+    public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets {
+        return NSEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
+    }
+}

+ 56 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/KMQucikToolsView.xib

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMQucikToolsView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="collectionView" destination="yOH-Gk-DXG" id="HWt-h6-8Wn"/>
+            </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="621" height="175"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <scrollView wantsLayer="YES" borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kBd-Wh-qT6">
+                    <rect key="frame" x="0.0" y="0.0" width="621" height="175"/>
+                    <clipView key="contentView" drawsBackground="NO" id="bai-5O-0kt">
+                        <rect key="frame" x="0.0" y="0.0" width="621" height="175"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <collectionView id="yOH-Gk-DXG">
+                                <rect key="frame" x="0.0" y="0.0" width="621" height="158"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
+                                <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="Boi-ZL-7EE">
+                                    <size key="itemSize" width="50" height="50"/>
+                                </collectionViewFlowLayout>
+                                <color key="primaryBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                            </collectionView>
+                        </subviews>
+                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </clipView>
+                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="iOy-A9-wuo" customClass="KMToolSetScroller" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="-100" y="-100" width="233" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="ASj-Kc-swn">
+                        <rect key="frame" x="-100" y="-100" width="15" height="143"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                </scrollView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="kBd-Wh-qT6" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="KAN-eN-rGv"/>
+                <constraint firstItem="kBd-Wh-qT6" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="KAb-VE-iHG"/>
+                <constraint firstAttribute="trailing" secondItem="kBd-Wh-qT6" secondAttribute="trailing" id="Qhy-st-hr6"/>
+                <constraint firstAttribute="bottom" secondItem="kBd-Wh-qT6" secondAttribute="bottom" id="nEX-md-hgZ"/>
+            </constraints>
+            <point key="canvasLocation" x="392.5" y="168.5"/>
+        </customView>
+    </objects>
+</document>

+ 172 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/Model/KMQucikToolsModel.swift

@@ -0,0 +1,172 @@
+//
+//  KMQucikToolsModel.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/30.
+//
+
+import Cocoa
+
+class KMQucikToolsModel: NSObject {
+    init(type: DataNavigationViewButtonActionType? = nil) {
+        self.type = type
+    }
+    
+    var type: DataNavigationViewButtonActionType?
+    
+    static func allType() -> [DataNavigationViewButtonActionType] {
+        let array: [DataNavigationViewButtonActionType] = [.Batch, .ConvertPDF, .PDFToWord, .PDFToExcel, .FileCompare, .PDFToPPT, .ImageToPDF, .OCR, .PageEdit, .MergePDF, .BreakUp, .Insert, .Compression, .Security, .Watermark, .Background, .HeaderAndFooter, .BatesCode, .Print, .Print, .Print]
+        return array
+    }
+    
+    static func showType() -> [DataNavigationViewButtonActionType] {
+        if UserDefaults.standard.object(forKey: "kQucikToolsShowType") != nil {
+            let array: [NSNumber] = UserDefaults.standard.object(forKey: "kQucikToolsShowType") as! [NSNumber]
+            if array.count != 0 {
+                var types: [DataNavigationViewButtonActionType] = []
+                for index in array {
+                    types.append(DataNavigationViewButtonActionType(rawValue: Int(truncating: index))!)
+                }
+                return types
+            } else {
+                return self.allType()
+            }
+        } else {
+            return self.allType()
+        }
+    }
+    
+    static func hiddenType() -> [DataNavigationViewButtonActionType] {
+        let allTypes = self.allType()
+        let showTypes = self.showType()
+        
+        return allTypes.filter { !showTypes.contains($0) }
+    }
+    
+    static func saveShowType(data: [NSNumber]) {
+        UserDefaults.standard.setValue(data, forKey: "kQucikToolsShowType")
+        UserDefaults.standard.synchronize()
+    }
+    
+    func titleString() -> String {
+        var string = ""
+        
+        switch self.type {
+        case .ConvertPDF: string = "Convert PDF"
+        case .PDFToWord: string = "PDF To Word"
+        case .PDFToExcel: string = "PDF To Excel"
+        case .PDFToPPT: string = "PDF To PPT"
+        case .ImageToPDF: string = "Image To PDF"
+        case .OCR: string = "OCR"
+        case .PageEdit: string = "Page Edit"
+        case .MergePDF: string = "Merge"
+        case .BreakUp: string = "Split"
+        case .Insert: string = "Insert"
+        case .Compression: string = "Compress"
+        case .Security: string = "Security"
+        case .Watermark: string = "Watermark"
+        case .Background: string = "Background"
+        case .HeaderAndFooter: string = "Header & Footer"
+        case .BatesCode: string = "Bates Numbers"
+//        case .Print: string = "Poster"
+//        case .Print: string = "Multiple"
+//        case .Print: string = "Booklet"
+        case .Batch: string = "Batch"
+        case .FileCompare: string = "Compare Files"
+        default: string = ""
+        }
+            
+        return string
+    }
+    
+    func subTitleString() -> String {
+        var string = ""
+        
+        switch self.type {
+        case .ConvertPDF: string = "Convert PDFs to Word/HTML/TXT/JPEG/PNG files"
+        case .PDFToWord: string = "Convert PDFs to Word, Fonts & formatting get converted"
+        case .PDFToExcel: string = "Turn PDF table into a formatted Excel file"
+        case .PDFToPPT: string = "Turn your PDF into a formatted PPT file that you can edit"
+        case .ImageToPDF: string = "Convert JPEG/JPG/PNG/TIFF/BMP/PSD files to PDFs"
+        case .OCR: string = "Recognize text from images or scanned PDF with OCR"
+        case .PageEdit: string = "Insert/delete/extract/rotate/reposition/replace PDF pages"
+        case .MergePDF: string = "Combine multiple documents into a new PDF file"
+        case .BreakUp: string = "Split and save selected PDF pages as a new document"
+        case .Insert: string = "Inserting pages into an existing PDF"
+        case .Compression: string = "Reduce files size to make sure you can easily send them by email."
+        case .Security: string = "Easily batch encrypt PDFs or decrypt the protected files"
+        case .Watermark: string = "Protect PDFs with image/text watermarks from plagiarism"
+        case .Background: string = "Customize PDFs background with colors or images"
+        case .HeaderAndFooter: string = "Customize PDFs header & footer or add page numbers"
+        case .BatesCode: string = "Easily retrieval indexing legal documents by Bates Numbers"
+//        case .Print: string = "Divide large PDF page(s) into multiple smaller pages"
+//        case .Print: string = "Print multiple PDF pages on a single sheet of paper"
+//        case .Print: string = "Print a multipage document as a booklet"
+        case .Batch: string = "Batch convert, compress, secure, watermark PDFs"
+        case .FileCompare: string = "Compare the differences between two files"
+        default: string = ""
+        }
+            
+        return string
+    }
+    
+    func iconImage(_ isHight: Bool = false) -> NSImage {
+        var string = ""
+        
+        if isHight {
+            switch self.type {
+            case .ConvertPDF: string = "KMImageNameUXIconHomeQuicktoolConvertHov"
+            case .PDFToWord: string = "KMImageNameUXIconHomeQuicktoolWordHov"
+            case .PDFToExcel: string = "KMImageNameUXIconHomeQuicktoolExcelHov"
+            case .PDFToPPT: string = "KMImageNameUXIconHomeQuicktoolPPTHov"
+            case .ImageToPDF: string = "KMImageNameUXIconHomeQuicktoolPdftoimgHov"
+            case .OCR: string = "KMImageNameUXIconHomeQuicktoolOcrHov"
+            case .PageEdit: string = "KMImageNameUXIconHomeQuicktoolPageeditHov"
+            case .MergePDF: string = "KMImageNameUXIconHomeQuicktoolMergeHov"
+            case .BreakUp: string = "KMImageNameUXIconHomeQuicktoolSplitHov"
+            case .Insert: string = "KMImageNameUXIconHomeQuicktoolInsertHov"
+            case .Compression: string = "KMImageNameUXIconHomeQuicktoolOptimizeHov"
+            case .Security: string = "KMImageNameUXIconHomeQuicktoolSafeHov"
+            case .Watermark: string = "KMImageNameUXIconHomeQuicktoolWatermarkHov"
+            case .Background: string = "KMImageNameUXIconHomeQuicktoolBackgroundHov"
+            case .HeaderAndFooter: string = "KMImageNameUXIconHomeQuicktoolHeaderandfooterHov"
+            case .BatesCode: string = "KMImageNameUXIconHomeQuicktoolBatesHov"
+    //        case .Print: string = "KMImageNameUXIconHomeQuicktoolPosterHov"
+    //        case .Print: string = "KMImageNameUXIconHomeQuicktoolMultipageHov"
+    //        case .Print: string = "KMImageNameUXIconHomeQuicktoolBookHov"
+            case .Batch: string = "KMImageNameUXIconHomeQuicktoolBatchHov"
+            case .FileCompare: string = "KMHomeQuickToolsItemTypePDFComparison"
+            default: string = ""
+            }
+        } else {
+            switch self.type {
+            case .ConvertPDF: string = "KMImageNameUXIconHomeQuicktoolConvertNor"
+            case .PDFToWord: string = "KMImageNameUXIconHomeQuicktoolWordNor"
+            case .PDFToExcel: string = "KMImageNameUXIconHomeQuicktoolExcelNor"
+            case .PDFToPPT: string = "KMImageNameUXIconHomeQuicktoolPPTNor"
+            case .ImageToPDF: string = "KMImageNameUXIconHomeQuicktoolPdftoimgNor"
+            case .OCR: string = "KMImageNameUXIconHomeQuicktoolOcrNor"
+            case .PageEdit: string = "KMImageNameUXIconHomeQuicktoolPageeditNor"
+            case .MergePDF: string = "KMImageNameUXIconHomeQuicktoolMergeNor"
+            case .BreakUp: string = "KMImageNameUXIconHomeQuicktoolSplitNor"
+            case .Insert: string = "KMImageNameUXIconHomeQuicktoolInsertNor"
+            case .Compression: string = "KMImageNameUXIconHomeQuicktoolOptimizeNor"
+            case .Security: string = "KMImageNameUXIconHomeQuicktoolSafeNor"
+            case .Watermark: string = "KMImageNameUXIconHomeQuicktoolWatermarkNor"
+            case .Background: string = "KMImageNameUXIconHomeQuicktoolBackgroundNor"
+            case .HeaderAndFooter: string = "KMImageNameUXIconHomeQuicktoolHeaderandfooterNor"
+            case .BatesCode: string = "KMImageNameUXIconHomeQuicktoolBatesNor"
+    //        case .Print: string = "KMImageNameUXIconHomeQuicktoolPosterNor"
+    //        case .Print: string = "KMImageNameUXIconHomeQuicktoolMultipageNor"
+    //        case .Print: string = "KMImageNameUXIconHomeQuicktoolBookNor"
+            case .Batch: string = "KMImageNameUXIconHomeQuicktoolBatchNor"
+            case .FileCompare: string = "KMHomeQuickToolsItemTypePDFComparison"
+            default: string = ""
+            }
+        }
+            
+        return NSImage(named: string) ?? NSImage()
+    }
+}
+
+

+ 123 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/View/KMQucikToolCollectionViewItem.swift

@@ -0,0 +1,123 @@
+//
+//  KMQucikToolCollectionViewItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/27.
+//
+
+import Cocoa
+
+class KMQucikToolCollectionViewItem: NSCollectionViewItem {
+    @IBOutlet weak var contentBox: KMBox!
+    @IBOutlet weak var iconImageView: NSImageView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subTitleLabel: NSTextField!
+    
+    @IBOutlet weak var handleView: NSView!
+    @IBOutlet weak var addBox: KMBox!
+    @IBOutlet weak var addButton: KMButton!
+    @IBOutlet weak var removeBox: KMBox!
+    @IBOutlet weak var removeButton: KMButton!
+    
+    @IBOutlet weak var tagView: NSView!
+    @IBOutlet weak var tagLabel: NSTextField!
+    
+    
+    var model: KMQucikToolsModel? {
+        didSet {
+            self.reloadData()
+        }
+    }
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        self.setup()
+    }
+    
+    override func viewDidLayout() {
+        self.view.addTrackingRect(self.view.bounds, owner: self, userData: nil, assumeInside: false)
+    }
+    
+    func setup() {
+        self.tagView.isHidden = true
+        
+        self.handleView.isHidden = true
+        self.addBox.borderColor = KMAppearance.Layout.w70Color()
+        self.addBox.borderWidth = 1.0
+        
+        self.addButton.title = "+" + NSLocalizedString("Add", comment: "")
+        self.addButton.contentTintColor = KMAppearance.Layout.w0Color()
+        
+        self.addBox.moveCallback = { [unowned self] mouseEntered, mouseBox in
+            if mouseEntered {
+                self.addButton.backgroundColor(KMAppearance.Status.preColor())
+            } else {
+                self.addButton.backgroundColor(NSColor.clear)
+            }
+        }
+
+        self.removeBox.borderColor = KMAppearance.Layout.w70Color()
+        self.removeBox.borderWidth = 1.0
+        
+        self.removeButton.title = "+" + NSLocalizedString("Remove", comment: "")
+        self.removeButton.contentTintColor = KMAppearance.Layout.w0Color()
+        self.removeButton.backgroundColor(KMAppearance.Status.preColor())
+        
+        self.removeBox.moveCallback = { [unowned self] mouseEntered, mouseBox in
+            if mouseEntered {
+                self.removeButton.backgroundColor(KMAppearance.Status.preColor())
+            } else {
+                self.removeButton.backgroundColor(NSColor.clear)
+            }
+        }
+        
+        self.contentBox.borderColor = KMAppearance.Interactive.s0Color()
+        self.contentBox.borderWidth = 1.0;
+        self.titleLabel.textColor = KMAppearance.Layout.h0Color()
+        self.subTitleLabel.textColor = KMAppearance.Layout.h1Color()
+        self.contentBox.fillColor = KMAppearance.Layout.l1Color()
+        self.contentBox.moveCallback = { [unowned self] mouseEntered, mouseBox in
+            if (mouseEntered) {
+//                if (blockSelf.mouseMoveCallback) {
+//                    blockSelf.mouseMoveCallback(YES);
+//                }
+            } else {
+//                if (blockSelf.mouseMoveCallback) {
+//                    blockSelf.mouseMoveCallback(NO);
+//                }
+            }
+        }
+        
+        self.tagView.backgroundColor(NSColor(red: 0.0/255.0, green: 207.0/255.0, blue: 133.0/255.0, alpha: 1))
+        self.tagView.layer?.masksToBounds = true
+        self.tagView.layer?.cornerRadius = 8
+    }
+    
+    func reloadData() {
+        guard let model = model else { return }
+        
+        self.titleLabel.stringValue = model.titleString()
+        self.subTitleLabel.stringValue = model.subTitleString()
+        self.iconImageView.image = model.iconImage()
+        
+    }
+    
+    @IBAction func removeButtonAction(_ sender: Any) {
+        
+    }
+    @IBAction func addButtonAction(_ sender: Any) {
+        
+    }
+    
+}
+
+extension KMQucikToolCollectionViewItem {
+    override func mouseEntered(with event: NSEvent) {
+        self.view.backgroundColor(NSColor.green)
+    }
+    
+    override func mouseExited(with event: NSEvent) {
+        self.view.backgroundColor(NSColor.red)
+    }
+    
+}

+ 204 - 0
PDF Office/PDF Master/Class/Home/View/HomeContentView/QucikTools/View/KMQucikToolCollectionViewItem.xib

@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMQucikToolCollectionViewItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="addBox" destination="WpY-hX-Iuh" id="fMG-vu-eRc"/>
+                <outlet property="addButton" destination="Sfr-Rz-iNv" id="t4A-h4-K0f"/>
+                <outlet property="contentBox" destination="Mqk-nf-F6P" id="NYS-b5-WXO"/>
+                <outlet property="handleView" destination="5hE-EB-Fbu" id="26F-NC-WO7"/>
+                <outlet property="iconImageView" destination="Vlz-sL-oSP" id="B0h-Nl-Kpf"/>
+                <outlet property="removeBox" destination="4I9-UP-8io" id="MX1-8C-cop"/>
+                <outlet property="removeButton" destination="HWd-oT-cNf" id="ZKr-wg-jc0"/>
+                <outlet property="subTitleLabel" destination="xUh-Dj-kJH" id="Tpg-Qr-ffJ"/>
+                <outlet property="tagLabel" destination="E0R-9e-vEN" id="bAB-No-8Yn"/>
+                <outlet property="tagView" destination="MKg-Pm-wMc" id="dRm-b8-PGC"/>
+                <outlet property="titleLabel" destination="CuI-0G-xl6" id="Isf-Kn-kGP"/>
+                <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="216" height="96"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="Mqk-nf-F6P" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                    <rect key="frame" x="0.0" y="0.0" width="216" height="96"/>
+                    <view key="contentView" id="bYU-P3-vtp">
+                        <rect key="frame" x="0.0" y="0.0" width="216" height="96"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <view translatesAutoresizingMaskIntoConstraints="NO" id="B7V-zv-Z6E">
+                                <rect key="frame" x="0.0" y="0.0" width="216" height="96"/>
+                                <subviews>
+                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Vlz-sL-oSP">
+                                        <rect key="frame" x="16" y="56" width="20" height="20"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="20" id="FfB-eG-3tH"/>
+                                            <constraint firstAttribute="width" constant="20" id="ZYz-CL-Mkm"/>
+                                        </constraints>
+                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameHomeBackground" id="5wv-kB-Bkg"/>
+                                    </imageView>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CuI-0G-xl6">
+                                        <rect key="frame" x="42" y="57" width="42" height="17"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="wMS-Vz-yLV">
+                                            <font key="font" metaFont="systemBold" size="14"/>
+                                            <color key="textColor" name="KMGray6Color"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xUh-Dj-kJH">
+                                        <rect key="frame" x="42" y="19" width="160" height="34"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="34" id="gc3-Ff-Nhi"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" title="Label" id="ynF-CO-E0E">
+                                            <font key="font" metaFont="cellTitle"/>
+                                            <color key="textColor" name="KMGrayColor"/>
+                                            <color key="backgroundColor" name="KMGray2Color"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MKg-Pm-wMc">
+                                        <rect key="frame" x="180" y="80" width="44" height="24"/>
+                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                                        <subviews>
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="E0R-9e-vEN">
+                                                <rect key="frame" x="0.0" y="0.0" width="36" height="14"/>
+                                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                                                <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="New" id="LoG-mu-nCH">
+                                                    <font key="font" metaFont="miniSystemBold"/>
+                                                    <color key="textColor" name="KMWhiteColor"/>
+                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                </textFieldCell>
+                                            </textField>
+                                        </subviews>
+                                    </customView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="5hE-EB-Fbu">
+                                        <rect key="frame" x="16" y="8" width="184" height="44"/>
+                                        <subviews>
+                                            <box boxType="custom" borderWidth="0.0" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="4I9-UP-8io" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                                                <rect key="frame" x="96" y="10" width="88" height="24"/>
+                                                <view key="contentView" id="xxV-Ig-q6L">
+                                                    <rect key="frame" x="0.0" y="0.0" width="88" height="24"/>
+                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                    <subviews>
+                                                        <button translatesAutoresizingMaskIntoConstraints="NO" id="HWd-oT-cNf" customClass="KMButton">
+                                                            <rect key="frame" x="0.0" y="0.0" width="88" height="24"/>
+                                                            <buttonCell key="cell" type="square" title="- Remove" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="lIK-U7-kOI">
+                                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                <font key="font" metaFont="system"/>
+                                                            </buttonCell>
+                                                            <connections>
+                                                                <action selector="removeButtonAction:" target="-2" id="dBj-wp-gqD"/>
+                                                            </connections>
+                                                        </button>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstItem="HWd-oT-cNf" firstAttribute="leading" secondItem="xxV-Ig-q6L" secondAttribute="leading" id="1vi-ws-tgb"/>
+                                                        <constraint firstAttribute="trailing" secondItem="HWd-oT-cNf" secondAttribute="trailing" id="7Wj-x2-AL1"/>
+                                                        <constraint firstAttribute="bottom" secondItem="HWd-oT-cNf" secondAttribute="bottom" id="hge-ov-hqL"/>
+                                                        <constraint firstItem="HWd-oT-cNf" firstAttribute="top" secondItem="xxV-Ig-q6L" secondAttribute="top" id="yMa-2W-bm2"/>
+                                                    </constraints>
+                                                </view>
+                                                <constraints>
+                                                    <constraint firstAttribute="height" constant="24" id="ZZ8-sN-RHF"/>
+                                                    <constraint firstAttribute="width" constant="88" id="mSV-Jb-zUY"/>
+                                                </constraints>
+                                                <color key="fillColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            </box>
+                                            <box boxType="custom" borderWidth="0.0" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="WpY-hX-Iuh" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                                                <rect key="frame" x="0.0" y="10" width="88" height="24"/>
+                                                <view key="contentView" id="G5Y-6x-Ziw">
+                                                    <rect key="frame" x="0.0" y="0.0" width="88" height="24"/>
+                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                    <subviews>
+                                                        <button translatesAutoresizingMaskIntoConstraints="NO" id="Sfr-Rz-iNv" customClass="KMButton">
+                                                            <rect key="frame" x="0.0" y="0.0" width="88" height="24"/>
+                                                            <buttonCell key="cell" type="square" title="+ Add" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="ION-oS-3z4">
+                                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                <font key="font" metaFont="system"/>
+                                                            </buttonCell>
+                                                            <connections>
+                                                                <action selector="addButtonAction:" target="-2" id="gN0-OC-odq"/>
+                                                            </connections>
+                                                        </button>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstAttribute="trailing" secondItem="Sfr-Rz-iNv" secondAttribute="trailing" id="9Tw-Za-Sz7"/>
+                                                        <constraint firstItem="Sfr-Rz-iNv" firstAttribute="leading" secondItem="G5Y-6x-Ziw" secondAttribute="leading" id="FlI-ZO-GLr"/>
+                                                        <constraint firstItem="Sfr-Rz-iNv" firstAttribute="top" secondItem="G5Y-6x-Ziw" secondAttribute="top" id="Rmu-2s-nSn"/>
+                                                        <constraint firstAttribute="bottom" secondItem="Sfr-Rz-iNv" secondAttribute="bottom" id="vsw-nH-T6p"/>
+                                                    </constraints>
+                                                </view>
+                                                <constraints>
+                                                    <constraint firstAttribute="height" constant="24" id="L9o-vl-BZL"/>
+                                                    <constraint firstAttribute="width" constant="88" id="lQZ-xc-ZE5"/>
+                                                </constraints>
+                                                <color key="fillColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            </box>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstAttribute="trailing" secondItem="4I9-UP-8io" secondAttribute="trailing" id="H7I-ef-a1Z"/>
+                                            <constraint firstItem="WpY-hX-Iuh" firstAttribute="centerY" secondItem="5hE-EB-Fbu" secondAttribute="centerY" id="PCT-YL-AFj"/>
+                                            <constraint firstItem="4I9-UP-8io" firstAttribute="leading" secondItem="WpY-hX-Iuh" secondAttribute="trailing" constant="8" id="chG-Dz-V3u"/>
+                                            <constraint firstItem="4I9-UP-8io" firstAttribute="centerY" secondItem="WpY-hX-Iuh" secondAttribute="centerY" id="hCY-iE-6l4"/>
+                                            <constraint firstItem="WpY-hX-Iuh" firstAttribute="leading" secondItem="5hE-EB-Fbu" secondAttribute="leading" id="hH9-RV-mUU"/>
+                                        </constraints>
+                                    </customView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="bottom" secondItem="5hE-EB-Fbu" secondAttribute="bottom" constant="8" id="D7T-JK-rEj"/>
+                                    <constraint firstItem="xUh-Dj-kJH" firstAttribute="leading" secondItem="CuI-0G-xl6" secondAttribute="leading" id="N72-QY-RBz"/>
+                                    <constraint firstItem="CuI-0G-xl6" firstAttribute="leading" secondItem="Vlz-sL-oSP" secondAttribute="trailing" constant="8" id="WfY-mk-msC"/>
+                                    <constraint firstItem="CuI-0G-xl6" firstAttribute="top" secondItem="B7V-zv-Z6E" secondAttribute="top" constant="22" id="YjZ-Fj-3Oa"/>
+                                    <constraint firstItem="5hE-EB-Fbu" firstAttribute="leading" secondItem="B7V-zv-Z6E" secondAttribute="leading" constant="16" id="Z1n-qt-ohg"/>
+                                    <constraint firstItem="xUh-Dj-kJH" firstAttribute="top" secondItem="CuI-0G-xl6" secondAttribute="bottom" constant="4" id="bxk-x0-9pl"/>
+                                    <constraint firstAttribute="trailing" secondItem="5hE-EB-Fbu" secondAttribute="trailing" constant="16" id="fM1-OU-rRd"/>
+                                    <constraint firstItem="5hE-EB-Fbu" firstAttribute="top" secondItem="Vlz-sL-oSP" secondAttribute="bottom" constant="4" id="kxS-do-AqU"/>
+                                    <constraint firstItem="Vlz-sL-oSP" firstAttribute="top" secondItem="B7V-zv-Z6E" secondAttribute="top" constant="20" id="pxK-L8-ix9"/>
+                                    <constraint firstItem="Vlz-sL-oSP" firstAttribute="leading" secondItem="B7V-zv-Z6E" secondAttribute="leading" constant="16" id="s3q-BH-Q5c"/>
+                                    <constraint firstAttribute="trailing" secondItem="xUh-Dj-kJH" secondAttribute="trailing" constant="16" id="zX8-gf-kxj"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="bottom" secondItem="B7V-zv-Z6E" secondAttribute="bottom" id="RMC-p6-6zB"/>
+                            <constraint firstItem="B7V-zv-Z6E" firstAttribute="leading" secondItem="bYU-P3-vtp" secondAttribute="leading" id="gnz-eK-PvV"/>
+                            <constraint firstAttribute="trailing" secondItem="B7V-zv-Z6E" secondAttribute="trailing" id="om2-p7-jaY"/>
+                            <constraint firstItem="B7V-zv-Z6E" firstAttribute="top" secondItem="bYU-P3-vtp" secondAttribute="top" id="ueL-23-WOe"/>
+                        </constraints>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="Mqk-nf-F6P" secondAttribute="bottom" id="Ryz-Ce-hvn"/>
+                <constraint firstAttribute="trailing" secondItem="Mqk-nf-F6P" secondAttribute="trailing" id="SZx-GQ-4io"/>
+                <constraint firstItem="Mqk-nf-F6P" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="fiI-MU-6go"/>
+                <constraint firstItem="Mqk-nf-F6P" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="rFA-23-wjT"/>
+            </constraints>
+            <point key="canvasLocation" x="-160" y="64"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameHomeBackground" width="40" height="40"/>
+        <namedColor name="KMGray2Color">
+            <color red="0.96078431372549022" green="0.96470588235294119" blue="0.98039215686274506" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+        <namedColor name="KMGray6Color">
+            <color red="0.396078431372549" green="0.41176470588235292" blue="0.4392156862745098" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+        <namedColor name="KMGrayColor">
+            <color red="0.32899999618530273" green="0.32400000095367432" blue="0.4779999852180481" alpha="0.33000001311302185" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+        <namedColor name="KMWhiteColor">
+            <color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

+ 1 - 1
PDF Office/PDF Master/Class/Home/ViewController/KMFastToolCollectionViewItem.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-public enum DataNavigationViewButtonActionType : Int {
+public enum DataNavigationViewButtonActionType : Int, CaseIterable {
     case Batch = 0      // 批量处理
     case ConvertPDF     // 转换PDF
     case ImageToPDF     // 图片转PDF

+ 5 - 5
PDF Office/PDF Master/Class/Home/ViewController/KMFastToolCollectionViewItem.xib

@@ -1,8 +1,8 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -43,7 +43,7 @@
                                 </constraints>
                                 <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMHomeFastToolBatch" id="nx5-26-1QI"/>
                             </imageView>
-                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qVZ-dA-Abp">
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qVZ-dA-Abp">
                                 <rect key="frame" x="58" y="71" width="156" height="19"/>
                                 <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="kCy-le-pux">
                                     <font key="font" metaFont="system" size="16"/>
@@ -51,7 +51,7 @@
                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                 </textFieldCell>
                             </textField>
-                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Mun-eL-flY">
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Mun-eL-flY">
                                 <rect key="frame" x="14" y="14" width="200" height="40"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="40" id="DYh-wg-zW1"/>
@@ -68,7 +68,7 @@
                                     <rect key="frame" x="0.0" y="0.0" width="33" height="14"/>
                                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                     <subviews>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5R2-cg-5CN">
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5R2-cg-5CN">
                                             <rect key="frame" x="-2" y="-1" width="37" height="16"/>
                                             <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="add" id="wp5-o2-BpP">
                                                 <font key="font" usesAppearanceFont="YES"/>

+ 9 - 8
PDF Office/PDF Master/Class/Home/ViewController/KMHistoryFileCollectionViewItem.xib

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -39,14 +40,14 @@
                                         </imageView>
                                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aI1-x1-Rrt">
                                             <rect key="frame" x="203" y="155" width="16" height="22"/>
-                                            <constraints>
-                                                <constraint firstAttribute="width" constant="16" id="GvL-SF-NNB"/>
-                                                <constraint firstAttribute="height" constant="16" id="je1-2J-vPy"/>
-                                            </constraints>
                                             <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="xih-IJ-6Lu">
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                 <font key="font" metaFont="system"/>
                                             </buttonCell>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="16" id="GvL-SF-NNB"/>
+                                                <constraint firstAttribute="height" constant="16" id="je1-2J-vPy"/>
+                                            </constraints>
                                             <connections>
                                                 <action selector="favoriteButtonAction:" target="-2" id="Woj-0j-TND"/>
                                             </connections>
@@ -66,7 +67,7 @@
                                     <constraint firstAttribute="height" constant="180" id="w3o-wZ-CNv"/>
                                 </constraints>
                             </box>
-                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lue-CR-EiO">
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lue-CR-EiO">
                                 <rect key="frame" x="-2" y="68" width="232" height="16"/>
                                 <textFieldCell key="cell" truncatesLastVisibleLine="YES" alignment="center" title="文档名称" id="qE9-hu-gK4">
                                     <font key="font" usesAppearanceFont="YES"/>
@@ -98,6 +99,6 @@
         </customView>
     </objects>
     <resources>
-        <image name="NSActionTemplate" width="15" height="15"/>
+        <image name="NSActionTemplate" width="20" height="20"/>
     </resources>
 </document>

+ 6 - 6
PDF Office/PDF Master/Class/Home/ViewController/KMHomeFastToolViewController.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -31,7 +31,7 @@
                         <rect key="frame" x="0.0" y="0.0" width="66" height="28"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oSa-X8-Fv6">
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oSa-X8-Fv6">
                                 <rect key="frame" x="-2" y="5" width="70" height="19"/>
                                 <textFieldCell key="cell" lineBreakMode="clipping" title="快捷工具" id="3bM-rD-uSs">
                                     <font key="font" metaFont="system" size="16"/>
@@ -84,11 +84,11 @@
                             <scrollView wantsLayer="YES" borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uso-UI-yCw">
                                 <rect key="frame" x="0.0" y="0.0" width="662" height="328"/>
                                 <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="5Kk-ea-dV6">
-                                    <rect key="frame" x="0.0" y="0.0" width="662" height="328"/>
+                                    <rect key="frame" x="0.0" y="0.0" width="662" height="313"/>
                                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                     <subviews>
                                         <collectionView selectable="YES" id="uRS-jl-d4p" customClass="KMFastToolCollectionView" customModule="PDF_Master" customModuleProvider="target">
-                                            <rect key="frame" x="0.0" y="0.0" width="662" height="328"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="662" height="313"/>
                                             <autoresizingMask key="autoresizingMask" heightSizable="YES"/>
                                             <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" scrollDirection="horizontal" id="ISw-7m-91E">
                                                 <size key="itemSize" width="50" height="50"/>
@@ -103,7 +103,7 @@
                                     <color key="backgroundColor" red="1" green="0.99843658091226151" blue="0.99619259258638859" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
                                 </clipView>
                                 <scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="sRD-Yg-vn1" customClass="KMToolSetScroller" customModule="PDF_Master" customModuleProvider="target">
-                                    <rect key="frame" x="0.0" y="312" width="662" height="16"/>
+                                    <rect key="frame" x="0.0" y="313" width="662" height="15"/>
                                     <autoresizingMask key="autoresizingMask"/>
                                 </scroller>
                                 <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="lpk-Q5-DdG">

+ 13 - 13
PDF Office/PDF Master/Class/Home/ViewController/KMHomeHistoryFileViewController.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -56,7 +56,7 @@
                                             </constraints>
                                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="KOq-0P-sP7"/>
                                         </imageView>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="itC-bM-NsD">
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="itC-bM-NsD">
                                             <rect key="frame" x="-2" y="18" width="665" height="16"/>
                                             <textFieldCell key="cell" alignment="center" title="Label" id="U1g-Yg-acv">
                                                 <font key="font" metaFont="system"/>
@@ -64,7 +64,7 @@
                                                 <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                             </textFieldCell>
                                         </textField>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TPr-pg-J3o">
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TPr-pg-J3o">
                                             <rect key="frame" x="-2" y="0.0" width="665" height="16"/>
                                             <textFieldCell key="cell" alignment="center" title="Label" id="LXV-F0-Kpc">
                                                 <font key="font" metaFont="system"/>
@@ -131,7 +131,7 @@
                         <rect key="frame" x="0.0" y="0.0" width="54" height="28"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Gz5-CK-8t7">
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Gz5-CK-8t7">
                                 <rect key="frame" x="-2" y="6" width="58" height="16"/>
                                 <textFieldCell key="cell" lineBreakMode="clipping" title="最近打开" id="9hO-pC-qyS">
                                     <font key="font" usesAppearanceFont="YES"/>
@@ -307,7 +307,7 @@
                                                                                 </constraints>
                                                                                 <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="gl5-8t-bO5"/>
                                                                             </imageView>
-                                                                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="puB-4O-CjH">
+                                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="puB-4O-CjH">
                                                                                 <rect key="frame" x="449" y="30" width="110" height="16"/>
                                                                                 <constraints>
                                                                                     <constraint firstAttribute="width" constant="106" id="7NU-ee-KGa"/>
@@ -318,7 +318,7 @@
                                                                                     <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                                                                 </textFieldCell>
                                                                             </textField>
-                                                                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vh7-Qm-ZYX">
+                                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vh7-Qm-ZYX">
                                                                                 <rect key="frame" x="173" y="30" width="264" height="16"/>
                                                                                 <constraints>
                                                                                     <constraint firstAttribute="width" constant="260" id="0N6-Kd-s2c"/>
@@ -331,14 +331,14 @@
                                                                             </textField>
                                                                             <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LlT-U5-9ck">
                                                                                 <rect key="frame" x="573" y="30" width="16" height="16"/>
-                                                                                <constraints>
-                                                                                    <constraint firstAttribute="width" constant="16" id="onN-E5-GUa"/>
-                                                                                    <constraint firstAttribute="height" constant="16" id="py5-ca-3rH"/>
-                                                                                </constraints>
                                                                                 <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" image="icon_btn_more_false_false" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="TvJ-sI-i3v">
                                                                                     <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                                                     <font key="font" metaFont="system"/>
                                                                                 </buttonCell>
+                                                                                <constraints>
+                                                                                    <constraint firstAttribute="width" constant="16" id="onN-E5-GUa"/>
+                                                                                    <constraint firstAttribute="height" constant="16" id="py5-ca-3rH"/>
+                                                                                </constraints>
                                                                                 <connections>
                                                                                     <action selector="moreButtonAction:" target="kZK-Bs-0PF" id="KgU-oC-kf8"/>
                                                                                 </connections>
@@ -346,7 +346,7 @@
                                                                             <customView translatesAutoresizingMaskIntoConstraints="NO" id="5Mc-aq-fMe">
                                                                                 <rect key="frame" x="68" y="25" width="89" height="26"/>
                                                                                 <subviews>
-                                                                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="91U-Kg-YfD">
+                                                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="91U-Kg-YfD">
                                                                                         <rect key="frame" x="-2" y="2" width="93" height="22"/>
                                                                                         <constraints>
                                                                                             <constraint firstAttribute="height" constant="22" id="RnG-se-20f"/>
@@ -357,7 +357,7 @@
                                                                                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                                                                         </textFieldCell>
                                                                                     </textField>
-                                                                                    <textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yBF-Ah-dXA">
+                                                                                    <textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yBF-Ah-dXA">
                                                                                         <rect key="frame" x="-2" y="0.0" width="93" height="1"/>
                                                                                         <constraints>
                                                                                             <constraint firstAttribute="height" constant="1" id="YG3-8v-oqS"/>

+ 6 - 0
PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift

@@ -60,6 +60,8 @@ import Cocoa
     
     @IBOutlet weak var creatPDFView: KMCreatPDFView!
     
+    //HomeContentView
+    @IBOutlet weak var homeContentView: KMHomeContentView!
     //广告 互推
     @IBOutlet weak var advertisementTableView: KMAdvertisementTableView!
     @IBOutlet weak var advertisementTableViewHeightConstraint: NSLayoutConstraint!
@@ -189,6 +191,10 @@ import Cocoa
         self.creatPDFView.creatPDFAction = { [unowned self] view, sender in
             self.creatPDFAction(sender)
         }
+        
+        self.homeContentView.historyDidSelect = { [unowned self] view, url in
+            self.openFile(withFilePath: url)
+        }
     }
     
     // MARK: Init

+ 9 - 1
PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.xib

@@ -31,6 +31,7 @@
                 <outlet property="dragView" destination="3Ej-3j-QZ3" id="KI9-gS-ovH"/>
                 <outlet property="fastToolViewController" destination="O3f-x2-y6f" id="QUu-yY-afK"/>
                 <outlet property="historyFileViewController" destination="UcW-Sh-zFW" id="4rg-j2-0qB"/>
+                <outlet property="homeContentView" destination="gve-l2-Bcq" id="5SL-s0-RBk"/>
                 <outlet property="homeRightScrollViewView" destination="Fsd-Oz-v7c" id="AOG-NU-G8N"/>
                 <outlet property="homeSplitView" destination="yVp-SB-ljO" id="zSV-aW-5He"/>
                 <outlet property="leftBox" destination="ndG-c5-lCg" id="Gx0-kb-H6N"/>
@@ -323,7 +324,7 @@ Gw
                                 <rect key="frame" x="0.0" y="0.0" width="803" height="820"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 <subviews>
-                                    <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="Fsd-Oz-v7c">
+                                    <scrollView hidden="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="Fsd-Oz-v7c">
                                         <rect key="frame" x="0.0" y="0.0" width="803" height="820"/>
                                         <clipView key="contentView" drawsBackground="NO" id="4Wb-9e-EKY">
                                             <rect key="frame" x="0.0" y="0.0" width="803" height="820"/>
@@ -387,9 +388,16 @@ Gw
                                             <autoresizingMask key="autoresizingMask"/>
                                         </scroller>
                                     </scrollView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="gve-l2-Bcq" customClass="KMHomeContentView" customModule="PDF_Master" customModuleProvider="target">
+                                        <rect key="frame" x="0.0" y="0.0" width="803" height="820"/>
+                                    </customView>
                                 </subviews>
                                 <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="gve-l2-Bcq" secondAttribute="trailing" id="1fY-PK-HV3"/>
+                                    <constraint firstItem="gve-l2-Bcq" firstAttribute="leading" secondItem="GVB-Xu-zsZ" secondAttribute="leading" id="2Kb-Ah-fD1"/>
                                     <constraint firstItem="Fsd-Oz-v7c" firstAttribute="top" secondItem="GVB-Xu-zsZ" secondAttribute="top" id="87S-Rb-bey"/>
+                                    <constraint firstItem="gve-l2-Bcq" firstAttribute="top" secondItem="GVB-Xu-zsZ" secondAttribute="top" id="UW2-JT-Fef"/>
+                                    <constraint firstAttribute="bottom" secondItem="gve-l2-Bcq" secondAttribute="bottom" id="dMX-bL-bAs"/>
                                     <constraint firstAttribute="bottom" secondItem="Fsd-Oz-v7c" secondAttribute="bottom" id="jKH-5n-L9g"/>
                                     <constraint firstItem="Fsd-Oz-v7c" firstAttribute="leading" secondItem="GVB-Xu-zsZ" secondAttribute="leading" id="v17-bP-0x9"/>
                                     <constraint firstAttribute="trailing" secondItem="Fsd-Oz-v7c" secondAttribute="trailing" id="xDo-M4-zHj"/>

+ 38 - 0
PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/KMHomeQuickToolsWindowController.swift

@@ -0,0 +1,38 @@
+//
+//  KMHomeQuickToolsWindowController.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/31.
+//
+
+import Cocoa
+
+typealias KMHomeQuickToolsWindowControllerDataDidChange = (_ controller: KMHomeQuickToolsWindowController) ->Void
+
+class KMHomeQuickToolsWindowController: NSWindowController {
+    @IBOutlet weak var collectionView: KMHomeQuickToolsCollectionView!
+    static var sharedHomeQuickTools: KMHomeQuickToolsWindowController = KMHomeQuickToolsWindowController.init(windowNibName: NSNib.Name("KMHomeQuickToolsWindowController"))
+
+    var dataChange: KMHomeQuickToolsWindowControllerDataDidChange?
+    override func windowDidLoad() {
+        let showType = KMQucikToolsModel.showType()
+        var showTypeArray: [NSNumber] = []
+        for index in showType {
+            showTypeArray.append(index.rawValue as NSNumber)
+        }
+        
+        let hiddenType = KMQucikToolsModel.hiddenType()
+        var hiddenTypeArray: [NSNumber] = []
+        for index in hiddenType {
+            hiddenTypeArray.append(index.rawValue as NSNumber)
+        }
+        collectionView.showData(showArr: showTypeArray, hideArr: hiddenTypeArray)
+        
+        collectionView.dataChange = { [unowned self] view, showData in
+            KMQucikToolsModel.saveShowType(data: showData)
+            
+            guard let callBack =  dataChange else { return  }
+            callBack(self)
+        }
+    }
+}

+ 43 - 0
PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/KMHomeQuickToolsWindowController.xib

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHomeQuickToolsWindowController" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="collectionView" destination="C6x-yX-ikY" id="ddt-SK-h37"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="600" height="371"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="600" height="371"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="C6x-yX-ikY" customClass="KMHomeQuickToolsCollectionView" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="371"/>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="C6x-yX-ikY" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="ADK-cL-ZUw"/>
+                    <constraint firstAttribute="bottom" secondItem="C6x-yX-ikY" secondAttribute="bottom" id="aeL-eu-GgP"/>
+                    <constraint firstAttribute="trailing" secondItem="C6x-yX-ikY" secondAttribute="trailing" id="bYv-ZF-KGr"/>
+                    <constraint firstItem="C6x-yX-ikY" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="sZW-Hi-1Eo"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="-318" y="9"/>
+        </window>
+    </objects>
+</document>

+ 411 - 0
PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsCollectionView.swift

@@ -0,0 +1,411 @@
+//
+//  KMHomeQuickToolsCollectionView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/31.
+//
+
+import Cocoa
+
+typealias KMHomeQuickToolsCollectionViewDataDidChange = (_ view: KMHomeQuickToolsCollectionView, _ showData: [NSNumber]) ->Void
+
+class KMHomeQuickToolsCollectionView: KMBaseXibView {
+    @IBOutlet weak var showBox: NSBox!
+    @IBOutlet weak var showLabel: NSTextField!
+    @IBOutlet weak var removeBox: NSBox!
+    @IBOutlet weak var removeButton: NSButton!
+    @IBOutlet weak var removeButtonLayoutConstraint: NSLayoutConstraint!
+    @IBOutlet weak var showCollectionView: NSCollectionView!
+    @IBOutlet weak var showScrollView: NSScrollView!
+    
+    @IBOutlet weak var hideBox: NSBox!
+    @IBOutlet weak var hideLabel: NSTextField!
+    @IBOutlet weak var addBox: NSBox!
+    @IBOutlet weak var addButton: NSButton!
+    @IBOutlet weak var addButtonLayoutConstraint: NSLayoutConstraint!
+    @IBOutlet weak var hideCollectionView: NSCollectionView!
+    @IBOutlet weak var hideScrollView: NSScrollView!
+    
+    @IBOutlet weak var promptLabel: NSTextField!
+    @IBOutlet weak var showCollectionBox: NSBox!
+    @IBOutlet weak var hideCollectionBox: NSBox!
+    
+    var dataChange: KMHomeQuickToolsCollectionViewDataDidChange?
+    
+    var indexPathsOfItemsBeingShowItemDragged: Set<IndexPath> = []
+    var indexPathsOfItemsBeingHideItemDragged: Set<IndexPath> = []
+    
+    var showArray: [NSNumber] = []
+    var hideArray: [NSNumber] = []
+    var selectShowItemMutableArray: [IndexPath] = []
+    var selectHideItemMutableArray: [IndexPath] = []
+    var collectionItemWidth: CGFloat = 0
+    let collectionItemHeight: CGFloat = 32
+    
+    override func setup() {
+        self.window?.title = NSLocalizedString("Advanced Editing Tools", comment: "")
+
+        showLabel.stringValue = NSLocalizedString("Show", comment: "")
+        hideLabel.stringValue = NSLocalizedString("Hide", comment: "")
+        removeButton.title = NSLocalizedString("Remove", comment: "")
+        addButton.title = NSLocalizedString("Add", comment: "")
+        promptLabel.stringValue = NSLocalizedString("Drag and drop to add, remove, and reorder the tools.", comment: "")
+        promptLabel.textColor = KMAppearance.Layout.h1Color()
+
+        showScrollView.drawsBackground = false
+        hideScrollView.drawsBackground = false
+
+        removeBox.borderColor = NSColor.gridColor
+        addBox.borderColor = NSColor.gridColor
+        removeBox.fillColor = NSColor.gridColor
+        addBox.fillColor = NSColor.gridColor
+        removeButton.isEnabled = false
+        addButton.isEnabled = false
+
+        let removeButtonConstant = labelReturnedValue(withString: NSLocalizedString("Remove", comment: ""), height: 20, fontSize: 11.0)
+        let addButtonConstant = labelReturnedValue(withString:NSLocalizedString("Add", comment: ""), height: 20.0, fontSize: 11.0)
+        var constant: CGFloat = 0
+        if removeButtonConstant > addButtonConstant {
+            constant = removeButtonConstant + 30
+        } else {
+            constant = addButtonConstant + 30
+        }
+        removeButtonLayoutConstraint.constant = constant
+        addButtonLayoutConstraint.constant = constant
+
+        showCollectionView.enclosingScrollView?.scrollerStyle = .legacy
+        hideCollectionView.enclosingScrollView?.scrollerStyle = .legacy
+
+        let shadow = NSShadow()
+        shadow.shadowColor = KMAppearance.Status.hovColor()
+        shadow.shadowOffset = NSMakeSize(0, 1)
+        showCollectionBox.wantsLayer = true
+        showCollectionBox.shadow = shadow
+        hideCollectionBox.wantsLayer = true
+        hideCollectionBox.shadow = shadow
+
+        showCollectionView.register(KMHomeQuickToolsWindowCollectionViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier("KMHomeQuickToolsWindowCollectionViewItem"))
+        hideCollectionView.register(KMHomeQuickToolsWindowCollectionViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier("KMHomeQuickToolsWindowCollectionViewItem"))
+
+        showCollectionView.delegate = self
+        showCollectionView.dataSource = self
+        hideCollectionView.delegate = self
+        hideCollectionView.dataSource = self
+
+        showCollectionView.layer?.cornerRadius = 3.0
+        hideCollectionView.layer?.cornerRadius = 3.0
+
+        registerForCollectionViewDragAndDrop()
+        
+//        self.showCollectionView.reloadData()
+//        self.hideCollectionView.reloadData()
+    }
+    
+    func showData(showArr: [NSNumber], hideArr: [NSNumber]) {
+        collectionItemWidth = self.itemReturnedWidthValue(withShowArray: showArr, hideArray: hideArr, fontSize: 12, height: collectionItemHeight) + 40
+        showArray = showArr
+        hideArray = hideArr
+    }
+
+    func registerForCollectionViewDragAndDrop() {
+        showCollectionView.registerForDraggedTypes([NSPasteboard.PasteboardType.string])
+        showCollectionView.setDraggingSourceOperationMask(.every, forLocal: false)
+        showCollectionView.setDraggingSourceOperationMask(.every, forLocal: true)
+
+        hideCollectionView.registerForDraggedTypes([NSPasteboard.PasteboardType.string])
+        hideCollectionView.setDraggingSourceOperationMask(.every, forLocal: false)
+        hideCollectionView.setDraggingSourceOperationMask(.every, forLocal: true)
+    }
+
+    func moveCell(fromIndex: Int, toIndex: Int, collectionView: NSCollectionView) {
+        if collectionView == showCollectionView {
+            let fromNumber = showArray[fromIndex]
+            var currentIndex = fromIndex
+            if fromIndex <= toIndex {
+                for _ in fromIndex..<toIndex {
+                    currentIndex = showArray.firstIndex(of: fromNumber) ?? fromIndex
+                    if currentIndex < toIndex {
+                        showArray.swapAt(currentIndex, currentIndex + 1)
+                        currentIndex += 1
+                    }
+                }
+            } else {
+                for _ in toIndex..<fromIndex {
+                    currentIndex = showArray.firstIndex(of: fromNumber) ?? fromIndex
+                    if currentIndex > toIndex {
+                        showArray.swapAt(currentIndex, currentIndex - 1)
+                        currentIndex -= 1
+                    }
+                }
+            }
+        } else if collectionView == hideCollectionView {
+            let fromNumber = hideArray[fromIndex]
+            var currentIndex = fromIndex
+            if fromIndex <= toIndex {
+                for _ in fromIndex..<toIndex {
+                    currentIndex = hideArray.firstIndex(of: fromNumber) ?? fromIndex
+                    if currentIndex < toIndex {
+                        hideArray.swapAt(currentIndex, currentIndex + 1)
+                        currentIndex += 1
+                    }
+                }
+            } else {
+                for _ in toIndex..<fromIndex {
+                    currentIndex = hideArray.firstIndex(of: fromNumber) ?? fromIndex
+                    if currentIndex > toIndex {
+                        hideArray.swapAt(currentIndex, currentIndex - 1)
+                        currentIndex -= 1
+                    }
+                }
+            }
+        }
+    }
+
+    func labelReturnedValue(withString value: String, height: CGFloat, fontSize: CGFloat) -> CGFloat {
+        if let value = value as NSString? {
+            let rect = value.boundingRect(with: CGSize(width: .greatestFiniteMagnitude, height: height), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: NSFont.systemFont(ofSize: fontSize)], context: nil)
+            return rect.size.width
+        }
+        return 0
+    }
+}
+
+extension KMHomeQuickToolsCollectionView {
+    @IBAction func removeButtonAction(_ sender: Any) {
+        for indexPath in selectShowItemMutableArray {
+            let itemCount = indexPath.item
+            hideArray.append(showArray[itemCount])
+            showArray.remove(at: itemCount)
+        }
+
+        removeBox.borderColor = NSColor.gridColor
+        removeButton.isEnabled = false
+        addBox.borderColor = NSColor.gridColor
+        addButton.isEnabled = false
+        hideCollectionView.reloadData()
+        showCollectionView.reloadData()
+        
+        guard let callBack = dataChange else { return }
+        callBack(self, showArray)
+    }
+    
+    @IBAction func addButtonAction(_ sender: Any) {
+        for indexPath in selectHideItemMutableArray {
+            let itemCount = indexPath.item
+            showArray.append(hideArray[itemCount])
+            hideArray.remove(at: itemCount)
+        }
+
+        removeBox.borderColor = NSColor.gridColor
+        addButton.isEnabled = false
+        addBox.borderColor = NSColor.gridColor
+        removeButton.isEnabled = false
+        showCollectionView.reloadData()
+        hideCollectionView.reloadData()
+        
+        guard let callBack = dataChange else { return }
+        callBack(self, showArray)
+
+    }
+}
+
+extension KMHomeQuickToolsCollectionView: NSCollectionViewDelegate, NSCollectionViewDataSource, NSCollectionViewDelegateFlowLayout {
+    func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+        let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeQuickToolsWindowCollectionViewItem"), for: indexPath) as! KMHomeQuickToolsWindowCollectionViewItem
+        
+        if collectionView.isEqual(showCollectionView) {
+            item.model = KMQucikToolsModel(type: DataNavigationViewButtonActionType(rawValue: Int(truncating: showArray[indexPath.item])))
+        } else if collectionView.isEqual(hideCollectionView) {
+            item.model = KMQucikToolsModel(type: DataNavigationViewButtonActionType(rawValue: Int(truncating: hideArray[indexPath.item])))
+        }
+        
+        return item
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+        if collectionView.isEqual(showCollectionView) {
+            return showArray.count
+        } else if collectionView.isEqual(hideCollectionView) {
+            return hideArray.count
+        }
+        return 0
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+        let indexPathArr = Array(indexPaths)
+        
+        if collectionView.isEqual(showCollectionView) {
+            self.selectShowItemMutableArray.removeAll()
+            
+            removeBox.borderColor = KMAppearance.Layout.h2Color()
+            removeButton.isEnabled = true
+            
+            for indexPath in indexPathArr {
+                self.selectShowItemMutableArray.append(indexPath)
+            }
+        } else if collectionView.isEqual(hideCollectionView) {
+            self.selectHideItemMutableArray.removeAll()
+            
+            addBox.borderColor = KMAppearance.Layout.h2Color()
+            addButton.isEnabled = true
+            
+            for indexPath in indexPathArr {
+                self.selectHideItemMutableArray.append(indexPath)
+            }
+        }
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
+        return NSSize(width: collectionItemWidth, height: collectionItemHeight)
+    }
+    
+    // NSCollectionViewDelegate Drag-and-Drop Methods
+    
+    func collectionView(_ collectionView: NSCollectionView, canDragItemsAt indexPaths: Set<IndexPath>, with event: NSEvent) -> Bool {
+        return true
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, pasteboardWriterForItemAt indexPath: IndexPath) -> NSPasteboardWriting? {
+        return String(indexPath.item) as NSPasteboardWriting
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, draggingSession session: NSDraggingSession, willBeginAt screenPoint: NSPoint, forItemsAt indexPaths: Set<IndexPath>) {
+        if collectionView.isEqual(showCollectionView) {
+            indexPathsOfItemsBeingShowItemDragged = indexPaths
+        } else if collectionView.isEqual(hideCollectionView) {
+            indexPathsOfItemsBeingHideItemDragged = indexPaths
+        }
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, validateDrop draggingInfo: NSDraggingInfo, proposedIndexPath proposedDropIndexPath: AutoreleasingUnsafeMutablePointer<NSIndexPath>, dropOperation proposedDropOperation: UnsafeMutablePointer<NSCollectionView.DropOperation>) -> NSDragOperation {
+        if collectionView.isEqual(showCollectionView) {
+            if indexPathsOfItemsBeingShowItemDragged.count != 0 {
+                return .move
+            } else {
+                return .copy
+            }
+        } else if collectionView.isEqual(hideCollectionView) {
+            if indexPathsOfItemsBeingHideItemDragged.count != 0 {
+                return .move
+            } else {
+                return .copy
+            }
+        }
+        return []
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, acceptDrop draggingInfo: NSDraggingInfo, indexPath: IndexPath, dropOperation: NSCollectionView.DropOperation) -> Bool {
+        var result = false
+        if collectionView.isEqual(showCollectionView) {
+            if indexPathsOfItemsBeingShowItemDragged.count != 0 {
+                var toItemIndex = indexPath.item
+                for fromIndexPath in indexPathsOfItemsBeingShowItemDragged {
+                    let fromItemIndex = fromIndexPath.item
+                    if fromItemIndex > toItemIndex {
+                        moveCell(fromIndex: fromItemIndex, toIndex: toItemIndex, collectionView: collectionView)
+                        collectionView.animator().moveItem(at: fromIndexPath, to: IndexPath(item: toItemIndex, section: indexPath.section))
+                        toItemIndex += 1
+                    }
+                }
+                var adjustedToItemIndex = indexPath.item
+                for fromIndexPath in indexPathsOfItemsBeingShowItemDragged.reversed() {
+                    let fromItemIndex = fromIndexPath.item
+                    if fromItemIndex < adjustedToItemIndex {
+                        if adjustedToItemIndex >= showArray.count {
+                            adjustedToItemIndex = showArray.count - 1
+                        }
+                        moveCell(fromIndex: fromItemIndex, toIndex: adjustedToItemIndex, collectionView: collectionView)
+                        let adjustedToIndexPath = IndexPath(item: adjustedToItemIndex, section: indexPath.section)
+                        collectionView.animator().moveItem(at: fromIndexPath, to: adjustedToIndexPath)
+                        adjustedToItemIndex -= 1
+                    }
+                }
+                result = true
+            } else if indexPathsOfItemsBeingHideItemDragged.count != 0 {
+                let toItemIndex = indexPathsOfItemsBeingHideItemDragged.first!.item
+                showArray.insert((hideArray[toItemIndex] as! Int) as NSNumber, at: indexPath.item)
+                hideArray.remove(at: toItemIndex)
+                result = true
+                
+                self.dataChange?(self, showArray)
+            }
+        } else if collectionView.isEqual(hideCollectionView) {
+            if indexPathsOfItemsBeingHideItemDragged.count != 0 {
+                var toItemIndex = indexPath.item
+                for fromIndexPath in indexPathsOfItemsBeingHideItemDragged {
+                    let fromItemIndex = fromIndexPath.item
+                    if fromItemIndex > toItemIndex {
+                        moveCell(fromIndex: fromItemIndex, toIndex: toItemIndex, collectionView: collectionView)
+                        collectionView.animator().moveItem(at: fromIndexPath, to: IndexPath(item: toItemIndex, section: indexPath.section))
+                        toItemIndex += 1
+                    }
+                }
+                var adjustedToItemIndex = indexPath.item - 1
+                for fromIndexPath in indexPathsOfItemsBeingHideItemDragged.reversed() {
+                    let fromItemIndex = fromIndexPath.item
+                    if fromItemIndex < adjustedToItemIndex {
+                        if adjustedToItemIndex >= showArray.count {
+                            adjustedToItemIndex = showArray.count - 1
+                        }
+                        moveCell(fromIndex: fromItemIndex, toIndex: adjustedToItemIndex, collectionView: collectionView)
+                        let adjustedToIndexPath = IndexPath(item: adjustedToItemIndex, section: indexPath.section)
+                        collectionView.animator().moveItem(at: fromIndexPath, to: adjustedToIndexPath)
+                        adjustedToItemIndex -= 1
+                    }
+                }
+                result = true
+            } else if indexPathsOfItemsBeingShowItemDragged.count != 0 {
+                let toItemIndex = indexPathsOfItemsBeingShowItemDragged.first!.item
+                hideArray.insert((showArray[toItemIndex] as! Int) as NSNumber, at: indexPath.item)
+                showArray.remove(at: toItemIndex)
+                result = true
+                
+                self.dataChange?(self, showArray)
+            }
+        }
+        return result
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, draggingSession session: NSDraggingSession, endedAt screenPoint: NSPoint, dragOperation operation: NSDragOperation) {
+        if collectionView.isEqual(showCollectionView) {
+            indexPathsOfItemsBeingShowItemDragged.removeAll()
+            removeBox.borderColor = KMAppearance.Layout.h2Color()
+            removeButton.isEnabled = false
+        } else if collectionView.isEqual(hideCollectionView) {
+            indexPathsOfItemsBeingHideItemDragged.removeAll()
+            addBox.borderColor = KMAppearance.Layout.h2Color()
+            addButton.isEnabled = false
+        }
+        showCollectionView.reloadSections(IndexSet(integer: 0))
+        hideCollectionView.reloadSections(IndexSet(integer: 0))
+    }
+}
+
+extension KMHomeQuickToolsCollectionView {
+    func itemReturnedWidthValue(withShowArray showArr: [Any], hideArray hideArr: [Any], fontSize: CGFloat, height: CGFloat) -> CGFloat {
+       var itemWidth: CGFloat = 0.0
+       
+       if showArr.count != 0 {
+           for number in showArr {
+               let value = KMQucikToolsModel(type: DataNavigationViewButtonActionType(rawValue: Int(truncating: number as! NSNumber))).titleString()
+               let rect = value.boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: height), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: NSFont.systemFont(ofSize: fontSize)], context: nil)
+               if itemWidth < rect.size.width {
+                   itemWidth = rect.size.width
+               }
+           }
+       }
+       
+        if hideArr.count != 0 {
+           for number in hideArr {
+               let value = KMQucikToolsModel(type: DataNavigationViewButtonActionType(rawValue: Int(truncating: number as! NSNumber))).titleString()
+               let rect = value.boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: height), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: NSFont.systemFont(ofSize: fontSize)], context: nil)
+               if itemWidth < rect.size.width {
+                   itemWidth = rect.size.width
+               }
+           }
+       }
+       
+       return itemWidth
+   }
+
+}

+ 301 - 0
PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsCollectionView.xib

@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHomeQuickToolsCollectionView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="addBox" destination="KYp-Pm-ymt" id="8Yz-gx-Su2"/>
+                <outlet property="addButton" destination="xs3-04-UNg" id="3eO-XG-Xlv"/>
+                <outlet property="addButtonLayoutConstraint" destination="hZi-du-dDD" id="2AM-5t-JKh"/>
+                <outlet property="hideBox" destination="juo-Ft-YOc" id="LQM-bP-yqL"/>
+                <outlet property="hideCollectionBox" destination="had-dS-O5V" id="dV1-yI-vbF"/>
+                <outlet property="hideCollectionView" destination="Bn0-jT-VhN" id="mnz-BN-O0w"/>
+                <outlet property="hideLabel" destination="h3C-nl-g1s" id="jcE-7w-U6K"/>
+                <outlet property="hideScrollView" destination="bM7-tQ-r2n" id="3Qb-2l-wTG"/>
+                <outlet property="promptLabel" destination="Ydr-bv-wt0" id="ha7-n9-NXT"/>
+                <outlet property="removeBox" destination="eO9-K6-xTh" id="RWI-PI-EF4"/>
+                <outlet property="removeButton" destination="KWV-Va-jBL" id="dRj-nP-G4X"/>
+                <outlet property="removeButtonLayoutConstraint" destination="GTY-ZM-EhO" id="b5j-Ub-nWy"/>
+                <outlet property="showBox" destination="JaM-hp-8ew" id="V3m-ni-eMt"/>
+                <outlet property="showCollectionBox" destination="Il2-Uc-CMi" id="SnW-Rx-1u7"/>
+                <outlet property="showCollectionView" destination="NTC-Mz-13p" id="JaW-b0-zTy"/>
+                <outlet property="showLabel" destination="oZJ-2u-a48" id="RSl-Ih-j7n"/>
+                <outlet property="showScrollView" destination="p4q-Sn-3Ru" id="qr8-7p-egD"/>
+            </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="599" height="389"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <view translatesAutoresizingMaskIntoConstraints="NO" id="3Fh-S9-PT7">
+                    <rect key="frame" x="0.0" y="0.0" width="599" height="389"/>
+                    <subviews>
+                        <box boxType="custom" borderWidth="0.0" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="JaM-hp-8ew">
+                            <rect key="frame" x="24" y="223" width="551" height="152"/>
+                            <view key="contentView" id="llW-kb-GME">
+                                <rect key="frame" x="0.0" y="0.0" width="551" height="152"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oZJ-2u-a48">
+                                        <rect key="frame" x="-2" y="129" width="37" height="17"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="FWK-FL-yyw">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <box boxType="custom" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="eO9-K6-xTh">
+                                        <rect key="frame" x="503" y="132" width="48" height="20"/>
+                                        <view key="contentView" id="dHa-Un-zbM">
+                                            <rect key="frame" x="1" y="1" width="46" height="18"/>
+                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                            <subviews>
+                                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KWV-Va-jBL">
+                                                    <rect key="frame" x="4" y="2" width="38" height="14"/>
+                                                    <buttonCell key="cell" type="square" title="Button" bezelStyle="shadowlessSquare" image="KMImageNameToolbarMinus" imagePosition="left" alignment="center" imageScaling="proportionallyDown" inset="2" id="Lym-za-6qG">
+                                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                        <font key="font" metaFont="smallSystem"/>
+                                                    </buttonCell>
+                                                    <color key="contentTintColor" name="KMGray6Color"/>
+                                                    <connections>
+                                                        <action selector="removeButtonAction:" target="-2" id="obE-gw-d2b"/>
+                                                    </connections>
+                                                </button>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="KWV-Va-jBL" firstAttribute="leading" secondItem="dHa-Un-zbM" secondAttribute="leading" constant="4" id="6Hb-Lf-Den"/>
+                                                <constraint firstAttribute="bottom" secondItem="KWV-Va-jBL" secondAttribute="bottom" constant="2" id="8rL-tO-Btf"/>
+                                                <constraint firstAttribute="trailing" secondItem="KWV-Va-jBL" secondAttribute="trailing" constant="4" id="B6N-8F-twD"/>
+                                                <constraint firstItem="KWV-Va-jBL" firstAttribute="top" secondItem="dHa-Un-zbM" secondAttribute="top" constant="2" id="VRD-uH-KEb"/>
+                                            </constraints>
+                                        </view>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="48" id="GTY-ZM-EhO"/>
+                                            <constraint firstAttribute="height" constant="20" id="tOM-5W-o1d"/>
+                                        </constraints>
+                                        <color key="borderColor" red="0.14117647059999999" green="0.1647058824" blue="0.20000000000000001" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                                    </box>
+                                    <box title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="Il2-Uc-CMi">
+                                        <rect key="frame" x="-3" y="1" width="557" height="130"/>
+                                        <view key="contentView" id="vHY-DU-qoM">
+                                            <rect key="frame" x="4" y="5" width="549" height="122"/>
+                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                            <subviews>
+                                                <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p4q-Sn-3Ru">
+                                                    <rect key="frame" x="0.0" y="0.0" width="549" height="122"/>
+                                                    <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Gny-pG-RYZ">
+                                                        <rect key="frame" x="0.0" y="0.0" width="549" height="107"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                        <subviews>
+                                                            <collectionView selectable="YES" id="NTC-Mz-13p">
+                                                                <rect key="frame" x="0.0" y="0.0" width="550" height="107"/>
+                                                                <autoresizingMask key="autoresizingMask" heightSizable="YES"/>
+                                                                <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" scrollDirection="horizontal" id="veu-Gt-wzR">
+                                                                    <size key="itemSize" width="50" height="32"/>
+                                                                    <edgeInsets key="sectionInset" left="11" right="11" top="11" bottom="11"/>
+                                                                </collectionViewFlowLayout>
+                                                                <color key="primaryBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                                            </collectionView>
+                                                        </subviews>
+                                                    </clipView>
+                                                    <scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="1NS-HY-iL0" customClass="KMToolSetScroller" customModule="PDF_Master" customModuleProvider="target">
+                                                        <rect key="frame" x="0.0" y="107" width="549" height="15"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Zs2-vu-yZI">
+                                                        <rect key="frame" x="-100" y="-100" width="15" height="110"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                </scrollView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="p4q-Sn-3Ru" firstAttribute="top" secondItem="vHY-DU-qoM" secondAttribute="top" id="IVl-i7-7YU"/>
+                                                <constraint firstAttribute="bottom" secondItem="p4q-Sn-3Ru" secondAttribute="bottom" id="Jxt-TW-nhd"/>
+                                                <constraint firstItem="p4q-Sn-3Ru" firstAttribute="leading" secondItem="vHY-DU-qoM" secondAttribute="leading" id="ZDR-ap-67a"/>
+                                                <constraint firstAttribute="trailing" secondItem="p4q-Sn-3Ru" secondAttribute="trailing" id="hd8-eK-lPZ"/>
+                                            </constraints>
+                                        </view>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="124" id="INB-ud-3sF"/>
+                                        </constraints>
+                                    </box>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="Il2-Uc-CMi" secondAttribute="trailing" id="7M3-9a-DdS"/>
+                                    <constraint firstItem="oZJ-2u-a48" firstAttribute="top" secondItem="llW-kb-GME" secondAttribute="top" constant="6" id="8k0-jU-tqA"/>
+                                    <constraint firstItem="oZJ-2u-a48" firstAttribute="leading" secondItem="llW-kb-GME" secondAttribute="leading" id="KN7-0E-weC"/>
+                                    <constraint firstItem="eO9-K6-xTh" firstAttribute="top" secondItem="llW-kb-GME" secondAttribute="top" id="LMT-up-4dW"/>
+                                    <constraint firstAttribute="trailing" secondItem="eO9-K6-xTh" secondAttribute="trailing" id="OFB-bC-bh1"/>
+                                    <constraint firstItem="Il2-Uc-CMi" firstAttribute="leading" secondItem="llW-kb-GME" secondAttribute="leading" id="iN0-iV-6rf"/>
+                                    <constraint firstItem="Il2-Uc-CMi" firstAttribute="top" secondItem="oZJ-2u-a48" secondAttribute="bottom" id="j2U-ab-GNw"/>
+                                    <constraint firstAttribute="bottom" secondItem="Il2-Uc-CMi" secondAttribute="bottom" constant="5" id="pZB-VC-nk3"/>
+                                </constraints>
+                            </view>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="152" id="lle-eg-g65"/>
+                            </constraints>
+                        </box>
+                        <box boxType="custom" borderWidth="0.0" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="juo-Ft-YOc">
+                            <rect key="frame" x="24" y="94" width="551" height="105"/>
+                            <view key="contentView" id="DfN-Ur-hrR">
+                                <rect key="frame" x="0.0" y="0.0" width="551" height="105"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h3C-nl-g1s">
+                                        <rect key="frame" x="-2" y="83" width="37" height="16"/>
+                                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Dib-hV-L3j">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <box boxType="custom" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="KYp-Pm-ymt">
+                                        <rect key="frame" x="503" y="85" width="48" height="20"/>
+                                        <view key="contentView" id="Hwe-10-zSW">
+                                            <rect key="frame" x="1" y="1" width="46" height="18"/>
+                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                            <subviews>
+                                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xs3-04-UNg">
+                                                    <rect key="frame" x="4" y="2" width="38" height="14"/>
+                                                    <buttonCell key="cell" type="square" title="Button" bezelStyle="shadowlessSquare" image="KMImageNameToolbarPlus" imagePosition="left" alignment="center" imageScaling="proportionallyDown" inset="2" id="WLS-gc-TkH">
+                                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                        <font key="font" metaFont="smallSystem"/>
+                                                    </buttonCell>
+                                                    <color key="contentTintColor" name="KMGray6Color"/>
+                                                    <connections>
+                                                        <action selector="addButtonAction:" target="-2" id="kIG-x0-JjT"/>
+                                                    </connections>
+                                                </button>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="xs3-04-UNg" firstAttribute="leading" secondItem="Hwe-10-zSW" secondAttribute="leading" constant="4" id="IwS-rZ-HNG"/>
+                                                <constraint firstAttribute="bottom" secondItem="xs3-04-UNg" secondAttribute="bottom" constant="2" id="OtB-Cb-cGk"/>
+                                                <constraint firstAttribute="trailing" secondItem="xs3-04-UNg" secondAttribute="trailing" constant="4" id="lMF-aN-x9e"/>
+                                                <constraint firstItem="xs3-04-UNg" firstAttribute="top" secondItem="Hwe-10-zSW" secondAttribute="top" constant="2" id="spE-Ng-PB5"/>
+                                            </constraints>
+                                        </view>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="20" id="TfY-2M-8Dj"/>
+                                            <constraint firstAttribute="width" constant="48" id="hZi-du-dDD"/>
+                                        </constraints>
+                                        <color key="borderColor" red="0.14117647059999999" green="0.1647058824" blue="0.20000000000000001" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                                    </box>
+                                    <box title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="had-dS-O5V">
+                                        <rect key="frame" x="-3" y="1" width="557" height="82"/>
+                                        <view key="contentView" id="Hg9-zh-qii">
+                                            <rect key="frame" x="4" y="5" width="549" height="74"/>
+                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                            <subviews>
+                                                <scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bM7-tQ-r2n">
+                                                    <rect key="frame" x="0.0" y="0.0" width="549" height="74"/>
+                                                    <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="aFj-Jy-bIY">
+                                                        <rect key="frame" x="0.0" y="0.0" width="549" height="59"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                        <subviews>
+                                                            <collectionView selectable="YES" id="Bn0-jT-VhN">
+                                                                <rect key="frame" x="0.0" y="0.0" width="550" height="59"/>
+                                                                <autoresizingMask key="autoresizingMask" heightSizable="YES"/>
+                                                                <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" scrollDirection="horizontal" id="o7v-Gi-hLL">
+                                                                    <size key="itemSize" width="50" height="50"/>
+                                                                    <edgeInsets key="sectionInset" left="11" right="11" top="11" bottom="11"/>
+                                                                </collectionViewFlowLayout>
+                                                                <color key="primaryBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                                            </collectionView>
+                                                        </subviews>
+                                                    </clipView>
+                                                    <scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="x6F-KV-VRU" customClass="KMToolSetScroller" customModule="PDF_Master" customModuleProvider="target">
+                                                        <rect key="frame" x="0.0" y="59" width="549" height="15"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="s2H-c0-laI">
+                                                        <rect key="frame" x="-100" y="-100" width="15" height="62"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                </scrollView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="bottom" secondItem="bM7-tQ-r2n" secondAttribute="bottom" id="CTt-I0-xeW"/>
+                                                <constraint firstItem="bM7-tQ-r2n" firstAttribute="top" secondItem="Hg9-zh-qii" secondAttribute="top" id="Me2-SI-EUd"/>
+                                                <constraint firstItem="bM7-tQ-r2n" firstAttribute="leading" secondItem="Hg9-zh-qii" secondAttribute="leading" id="X1i-xm-Xc9"/>
+                                                <constraint firstAttribute="trailing" secondItem="bM7-tQ-r2n" secondAttribute="trailing" id="n6W-ev-wGc"/>
+                                            </constraints>
+                                        </view>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="76" id="Hjf-dc-NRD"/>
+                                        </constraints>
+                                    </box>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="KYp-Pm-ymt" secondAttribute="trailing" id="DZV-cV-jw1"/>
+                                    <constraint firstItem="KYp-Pm-ymt" firstAttribute="top" secondItem="DfN-Ur-hrR" secondAttribute="top" id="UHA-oI-14y"/>
+                                    <constraint firstItem="h3C-nl-g1s" firstAttribute="leading" secondItem="DfN-Ur-hrR" secondAttribute="leading" id="ZwF-0d-YPC"/>
+                                    <constraint firstAttribute="trailing" secondItem="had-dS-O5V" secondAttribute="trailing" id="c04-hg-iMi"/>
+                                    <constraint firstItem="had-dS-O5V" firstAttribute="top" secondItem="h3C-nl-g1s" secondAttribute="bottom" constant="2" id="dsi-rB-vlz"/>
+                                    <constraint firstItem="had-dS-O5V" firstAttribute="leading" secondItem="DfN-Ur-hrR" secondAttribute="leading" id="ggn-WQ-ivd"/>
+                                    <constraint firstItem="h3C-nl-g1s" firstAttribute="top" secondItem="DfN-Ur-hrR" secondAttribute="top" constant="6" id="tBb-nS-WW2"/>
+                                    <constraint firstAttribute="bottom" secondItem="had-dS-O5V" secondAttribute="bottom" constant="5" id="y0C-GC-5Aa"/>
+                                </constraints>
+                            </view>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="105" id="8O5-Z9-guE"/>
+                            </constraints>
+                        </box>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="6J3-MG-5rt">
+                            <rect key="frame" x="24" y="29" width="20" height="31"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="36A-ZL-yZ6"/>
+                                <constraint firstAttribute="width" constant="20" id="gj1-el-v6y"/>
+                            </constraints>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSTouchBarGetInfoTemplate" id="8ut-Rb-hc0"/>
+                        </imageView>
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ydr-bv-wt0">
+                            <rect key="frame" x="42" y="36" width="37" height="16"/>
+                            <textFieldCell key="cell" title="Label" id="Z7N-Gq-h8w">
+                                <font key="font" metaFont="system"/>
+                                <color key="textColor" name="KMGrayColor"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="Ydr-bv-wt0" firstAttribute="centerY" secondItem="6J3-MG-5rt" secondAttribute="centerY" id="4tR-P9-bG8"/>
+                        <constraint firstItem="juo-Ft-YOc" firstAttribute="top" secondItem="JaM-hp-8ew" secondAttribute="bottom" constant="24" id="5pM-8v-7WF"/>
+                        <constraint firstItem="Ydr-bv-wt0" firstAttribute="leading" secondItem="6J3-MG-5rt" secondAttribute="trailing" id="ILE-bA-XtM"/>
+                        <constraint firstAttribute="trailing" secondItem="JaM-hp-8ew" secondAttribute="trailing" constant="24" id="JDO-qA-UjA"/>
+                        <constraint firstItem="6J3-MG-5rt" firstAttribute="top" secondItem="juo-Ft-YOc" secondAttribute="bottom" constant="40" id="NlQ-95-vvV"/>
+                        <constraint firstItem="juo-Ft-YOc" firstAttribute="leading" secondItem="3Fh-S9-PT7" secondAttribute="leading" constant="24" id="atb-YH-bzC"/>
+                        <constraint firstItem="6J3-MG-5rt" firstAttribute="leading" secondItem="juo-Ft-YOc" secondAttribute="leading" id="foS-66-teY"/>
+                        <constraint firstItem="JaM-hp-8ew" firstAttribute="top" secondItem="3Fh-S9-PT7" secondAttribute="top" constant="14" id="k7u-YG-NrQ"/>
+                        <constraint firstAttribute="trailing" secondItem="juo-Ft-YOc" secondAttribute="trailing" constant="24" id="trc-QJ-Xdy"/>
+                        <constraint firstItem="JaM-hp-8ew" firstAttribute="leading" secondItem="3Fh-S9-PT7" secondAttribute="leading" constant="24" id="ukm-uE-hGn"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <constraints>
+                <constraint firstItem="3Fh-S9-PT7" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="8xd-Z7-n1E"/>
+                <constraint firstAttribute="bottom" secondItem="3Fh-S9-PT7" secondAttribute="bottom" id="KS6-it-vKZ"/>
+                <constraint firstAttribute="trailing" secondItem="3Fh-S9-PT7" secondAttribute="trailing" id="YKF-Os-EKG"/>
+                <constraint firstItem="3Fh-S9-PT7" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="i10-hM-XSl"/>
+            </constraints>
+            <point key="canvasLocation" x="90.5" y="200.5"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameToolbarMinus" width="20" height="20"/>
+        <image name="KMImageNameToolbarPlus" width="20" height="20"/>
+        <image name="NSTouchBarGetInfoTemplate" width="20" height="20"/>
+        <namedColor name="KMGray6Color">
+            <color red="0.396078431372549" green="0.41176470588235292" blue="0.4392156862745098" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+        <namedColor name="KMGrayColor">
+            <color red="0.32899999618530273" green="0.32400000095367432" blue="0.4779999852180481" alpha="0.33000001311302185" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

+ 49 - 0
PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsWindowCollectionViewItem.swift

@@ -0,0 +1,49 @@
+//
+//  KMHomeQuickToolsWindowCollectionViewItem.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/10/31.
+//
+
+import Cocoa
+
+class KMHomeQuickToolsWindowCollectionViewItem: NSCollectionViewItem {
+    @IBOutlet weak var iconImageView: NSImageView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var box: KMBox!
+    
+    var model: KMQucikToolsModel? {
+        didSet {
+            self.reloadData()
+        }
+    }
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        self.setup()
+    }
+    
+    func setup() {
+        self.box.fillColor = NSColor.clear
+        self.titleLabel.textColor = KMAppearance.Layout.h2Color()
+        
+        self.box.moveCallback = {  [unowned self]  mouseEntered, mouseBox in
+            if mouseEntered {
+                box.fillColor = KMAppearance.Interactive.a0Color()
+                titleLabel.textColor = KMAppearance.Layout.w0Color()
+                iconImageView.image = model?.iconImage(true)
+            } else {
+                box.fillColor = NSColor.clear
+                titleLabel.textColor = KMAppearance.Layout.h2Color()
+                iconImageView.image = model?.iconImage(false)
+            }
+        }
+    }
+    
+    func reloadData() {
+        guard let model = model else { return }
+        
+        titleLabel.stringValue = model.titleString()
+        iconImageView.image = model.iconImage()
+    }
+}

+ 72 - 0
PDF Office/PDF Master/Class/Home/WindowController/HomeQuickToolsWindowController/View/KMHomeQuickToolsWindowCollectionViewItem.xib

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHomeQuickToolsWindowCollectionViewItem" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="box" destination="Ttz-dr-sxl" id="oem-1C-5Vo"/>
+                <outlet property="iconImageView" destination="d1h-XT-2z8" id="lDg-fT-BDM"/>
+                <outlet property="titleLabel" destination="prt-hf-eww" id="WAt-ak-9Ws"/>
+                <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="218" height="83"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" cornerRadius="1" translatesAutoresizingMaskIntoConstraints="NO" id="Ttz-dr-sxl" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                    <rect key="frame" x="0.0" y="0.0" width="218" height="83"/>
+                    <view key="contentView" id="c3L-Pc-4Zt">
+                        <rect key="frame" x="0.0" y="0.0" width="218" height="83"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="d1h-XT-2z8">
+                                <rect key="frame" x="8" y="32" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="tGJ-8f-5BF"/>
+                                    <constraint firstAttribute="width" constant="20" id="yaH-BX-8Ff"/>
+                                </constraints>
+                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameHomeBackground" id="bMJ-f5-1c8"/>
+                            </imageView>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="prt-hf-eww">
+                                <rect key="frame" x="30" y="34" width="35" height="15"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="7l0-f9-2oB">
+                                    <font key="font" metaFont="cellTitle"/>
+                                    <color key="textColor" name="KMGray6Color"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="prt-hf-eww" firstAttribute="leading" secondItem="d1h-XT-2z8" secondAttribute="trailing" constant="4" id="3bP-mR-cLf"/>
+                            <constraint firstItem="d1h-XT-2z8" firstAttribute="leading" secondItem="c3L-Pc-4Zt" secondAttribute="leading" constant="8" id="GxI-WE-hZL"/>
+                            <constraint firstItem="prt-hf-eww" firstAttribute="centerY" secondItem="c3L-Pc-4Zt" secondAttribute="centerY" id="KQh-kK-xVR"/>
+                            <constraint firstItem="d1h-XT-2z8" firstAttribute="centerY" secondItem="c3L-Pc-4Zt" secondAttribute="centerY" id="agB-eV-RCp"/>
+                        </constraints>
+                    </view>
+                    <color key="fillColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="Ttz-dr-sxl" secondAttribute="bottom" id="6pM-nY-zFZ"/>
+                <constraint firstItem="Ttz-dr-sxl" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="LP6-8J-kde"/>
+                <constraint firstItem="Ttz-dr-sxl" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="ZRe-Ar-djJ"/>
+                <constraint firstAttribute="trailing" secondItem="Ttz-dr-sxl" secondAttribute="trailing" id="mc5-sO-XY3"/>
+            </constraints>
+            <point key="canvasLocation" x="262" y="219.5"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="KMImageNameHomeBackground" width="40" height="40"/>
+        <namedColor name="KMGray6Color">
+            <color red="0.396078431372549" green="0.41176470588235292" blue="0.4392156862745098" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

+ 11 - 10
PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationConfirmWindowController.xib

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -49,7 +50,7 @@
                                         <rect key="frame" x="1" y="1" width="76" height="26"/>
                                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                         <subviews>
-                                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="deL-QF-z0s">
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="deL-QF-z0s">
                                                 <rect key="frame" x="20" y="5" width="37" height="16"/>
                                                 <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="FIx-7a-CCI">
                                                     <font key="font" usesAppearanceFont="YES"/>
@@ -88,7 +89,7 @@
                                         <rect key="frame" x="1" y="1" width="76" height="26"/>
                                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                         <subviews>
-                                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nFO-mt-ZB4">
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nFO-mt-ZB4">
                                                 <rect key="frame" x="20" y="5" width="37" height="16"/>
                                                 <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="UTP-2e-VlX">
                                                     <font key="font" usesAppearanceFont="YES"/>
@@ -138,7 +139,7 @@
                     <customView translatesAutoresizingMaskIntoConstraints="NO" id="iMz-Q5-D6R">
                         <rect key="frame" x="16" y="226" width="596" height="50"/>
                         <subviews>
-                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aq8-Ah-UWm">
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aq8-Ah-UWm">
                                 <rect key="frame" x="-2" y="17" width="600" height="16"/>
                                 <textFieldCell key="cell" alignment="left" title="Label" id="F7x-HZ-dOf">
                                     <font key="font" usesAppearanceFont="YES"/>
@@ -167,7 +168,7 @@
                             <customView translatesAutoresizingMaskIntoConstraints="NO" id="wV9-Le-UHj">
                                 <rect key="frame" x="122" y="0.0" width="474" height="162"/>
                                 <subviews>
-                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zlV-ti-gJ9">
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zlV-ti-gJ9">
                                         <rect key="frame" x="-2" y="146" width="478" height="16"/>
                                         <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="ken-B3-K7v">
                                             <font key="font" usesAppearanceFont="YES"/>
@@ -181,7 +182,7 @@
                                             <rect key="frame" x="1" y="1" width="219" height="30"/>
                                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                             <subviews>
-                                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rva-eU-GRw">
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rva-eU-GRw">
                                                     <rect key="frame" x="6" y="7" width="189" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="0g8-wy-2we">
                                                         <font key="font" usesAppearanceFont="YES"/>
@@ -246,7 +247,7 @@
                                                     </constraints>
                                                     <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="icon_btn_arrow_gray_down_s_norm_false" id="8cp-o3-LWj"/>
                                                 </imageView>
-                                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nfg-7P-9zD">
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nfg-7P-9zD">
                                                     <rect key="frame" x="6" y="7" width="189" height="16"/>
                                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="CJ2-nQ-Ths">
                                                         <font key="font" usesAppearanceFont="YES"/>
@@ -292,7 +293,7 @@
                                                 </constraints>
                                                 <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="image_btn_tips" id="yV6-OA-rAL"/>
                                             </imageView>
-                                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7Ui-Xy-UA6">
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7Ui-Xy-UA6">
                                                 <rect key="frame" x="18" y="2" width="458" height="16"/>
                                                 <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="ao3-xG-chl">
                                                     <font key="font" metaFont="system"/>
@@ -321,7 +322,7 @@
                                                 </constraints>
                                                 <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="image_btn_tips" id="Eu3-jj-OHz"/>
                                             </imageView>
-                                            <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pdX-rR-ESN">
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pdX-rR-ESN">
                                                 <rect key="frame" x="18" y="0.0" width="458" height="70"/>
                                                 <textFieldCell key="cell" title="Label" id="t5Z-wu-5ot">
                                                     <font key="font" metaFont="system"/>

+ 29 - 28
PDF Office/PDF Master/Class/Home/WindowController/KMAITranslationWindowController.xib

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -44,7 +45,7 @@
                 <rect key="frame" x="0.0" y="0.0" width="588" height="343"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Om-aJ-sAu">
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Om-aJ-sAu">
                         <rect key="frame" x="14" y="256" width="154" height="16"/>
                         <constraints>
                             <constraint firstAttribute="width" constant="150" id="enB-Az-ZLZ"/>
@@ -69,7 +70,7 @@
                             <rect key="frame" x="1" y="1" width="177" height="38"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WqQ-Zq-YmZ">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WqQ-Zq-YmZ">
                                     <rect key="frame" x="14" y="11" width="133" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="UG2-nF-ECS">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -126,7 +127,7 @@
                                     </constraints>
                                     <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="icon_btn_arrow_gray_down_s_norm_false" id="VHi-NG-0v5"/>
                                 </imageView>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CSz-xA-SxI">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CSz-xA-SxI">
                                     <rect key="frame" x="14" y="11" width="133" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="l7v-Rp-PN4">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -167,7 +168,7 @@
                             <rect key="frame" x="1" y="1" width="268" height="178"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
-                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hdM-Q0-JDl">
+                                <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hdM-Q0-JDl">
                                     <rect key="frame" x="18" y="16" width="232" height="146"/>
                                     <textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" id="hLa-1M-WD4">
                                         <font key="font" metaFont="system"/>
@@ -178,7 +179,7 @@
                                         <outlet property="delegate" destination="-2" id="rAU-a1-LDX"/>
                                     </connections>
                                 </textField>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="roT-Vm-vRn">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="roT-Vm-vRn">
                                     <rect key="frame" x="221" y="8" width="37" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="BCa-6w-gQj">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -252,7 +253,7 @@
                                             </constraints>
                                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="sao-NL-irT"/>
                                         </imageView>
-                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sSR-RP-4JK">
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sSR-RP-4JK">
                                             <rect key="frame" x="18" y="146" width="236" height="16"/>
                                             <textFieldCell key="cell" title="Label" id="5Hn-wR-mC6">
                                                 <font key="font" metaFont="system"/>
@@ -295,7 +296,7 @@
                             <rect key="frame" x="0.0" y="0.0" width="97" height="24"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GAn-bi-jA2">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GAn-bi-jA2">
                                     <rect key="frame" x="30" y="4" width="37" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="bX0-0T-yRv">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -334,7 +335,7 @@
                             <rect key="frame" x="0.0" y="0.0" width="97" height="24"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="p7M-Ry-WqB">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="p7M-Ry-WqB">
                                     <rect key="frame" x="30" y="4" width="37" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Jr1-ms-0zG">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -373,7 +374,7 @@
                             <rect key="frame" x="0.0" y="0.0" width="588" height="50"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5X-7w-lzl">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5X-7w-lzl">
                                     <rect key="frame" x="98" y="17" width="37" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="fbW-8e-acd">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -381,16 +382,16 @@
                                         <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                     </textFieldCell>
                                 </textField>
-                                <button verticalHuggingPriority="750" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YZR-Hn-fi0">
+                                <button imageHugsTitle="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YZR-Hn-fi0">
                                     <rect key="frame" x="137" y="17" width="16" height="16"/>
-                                    <constraints>
-                                        <constraint firstAttribute="height" constant="16" id="ZnO-ex-r7r"/>
-                                        <constraint firstAttribute="width" constant="16" id="zSz-ja-uLb"/>
-                                    </constraints>
                                     <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="image_btn_tips" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="ZYQ-5T-eyl">
                                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                         <font key="font" metaFont="system"/>
                                     </buttonCell>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="16" id="ZnO-ex-r7r"/>
+                                        <constraint firstAttribute="width" constant="16" id="zSz-ja-uLb"/>
+                                    </constraints>
                                     <connections>
                                         <action selector="tipsButtonAction:" target="-2" id="uEQ-Q1-e4g"/>
                                     </connections>
@@ -411,39 +412,39 @@
                                         </box>
                                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZOC-Aw-6KM">
                                             <rect key="frame" x="16" y="14" width="12" height="12"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="12" id="a4H-40-9Uj"/>
-                                                <constraint firstAttribute="width" constant="12" id="vkQ-6b-9SB"/>
-                                            </constraints>
                                             <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_btn_window_close" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="xpR-Cp-ha8">
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                 <font key="font" metaFont="system"/>
                                             </buttonCell>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="12" id="a4H-40-9Uj"/>
+                                                <constraint firstAttribute="width" constant="12" id="vkQ-6b-9SB"/>
+                                            </constraints>
                                             <connections>
                                                 <action selector="closeButtonAction:" target="-2" id="6Ai-Bp-mkK"/>
                                             </connections>
                                         </button>
                                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cad-Hf-ffb">
                                             <rect key="frame" x="36" y="14" width="12" height="12"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="12" id="TBm-QM-cwh"/>
-                                                <constraint firstAttribute="width" constant="12" id="Zx7-ky-pv7"/>
-                                            </constraints>
                                             <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_groping_default" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="4rY-Hh-ylK">
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                 <font key="font" metaFont="system"/>
                                             </buttonCell>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="12" id="TBm-QM-cwh"/>
+                                                <constraint firstAttribute="width" constant="12" id="Zx7-ky-pv7"/>
+                                            </constraints>
                                         </button>
                                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IxO-9g-nPH">
                                             <rect key="frame" x="56" y="14" width="12" height="12"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="12" id="6ma-3Z-P0K"/>
-                                                <constraint firstAttribute="width" constant="12" id="joB-Lk-3dV"/>
-                                            </constraints>
                                             <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_groping_default" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="Vab-Th-pen">
                                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                 <font key="font" metaFont="system"/>
                                             </buttonCell>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="12" id="6ma-3Z-P0K"/>
+                                                <constraint firstAttribute="width" constant="12" id="joB-Lk-3dV"/>
+                                            </constraints>
                                         </button>
                                     </subviews>
                                     <constraints>

+ 4 - 3
PDF Office/PDF Master/Class/Home/WindowController/KMHistoryFileDeleteWindowController.xib

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -24,7 +25,7 @@
                 <rect key="frame" x="0.0" y="0.0" width="260" height="213"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pp4-jZ-PBy">
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pp4-jZ-PBy">
                         <rect key="frame" x="14" y="93" width="232" height="16"/>
                         <constraints>
                             <constraint firstAttribute="width" constant="228" id="SGg-Fg-WbD"/>

+ 1 - 1
PDF Office/PDF Master/Class/Home/WindowController/KMURLToPDFWindowController/KMURLToPDFWindowController.xib

@@ -261,7 +261,7 @@ Gw
             <connections>
                 <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
             </connections>
-            <point key="canvasLocation" x="311" y="255.5"/>
+            <point key="canvasLocation" x="698" y="201"/>
         </window>
     </objects>
 </document>

+ 1 - 1
PDF Office/PDF Master/Class/KMAdvertisement/Manager/KMAdvertisementManager.swift

@@ -141,7 +141,7 @@ extension KMAdvertisementManager {
                     }
     #else
     //            MARK: 此处try 使用 ? ,如果数据出问题 advertisementModel将无参数, 测试时使用!
-                    var advertisementModel = try? decoder.decode(KMAdvertisementModel.self, from: jsonData)
+                    var advertisementModel = try? decoder.decode(KMAdvertisementInfo.self, from: jsonData)
                     if (advertisementModel != nil) {
                         if (self.allowLoadContentData(data: advertisementModel!)) {
                             resultArray.append(self.allowLoadItemData(advertisementModel!))

+ 6 - 0
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 23 - 0
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "ad_cancel_button00.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "ad_cancel_button00@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "ad_cancel_button00@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/ad_cancel_button00.png


BIN
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/ad_cancel_button00@2x.png


BIN
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ad_cancel_button00.imageset/ad_cancel_button00@3x.png


+ 1 - 1
PDF Office/PDF Master/Class/KMAdvertisement/View/Tableview/KMAdvertisementTableView.swift

@@ -89,7 +89,7 @@ typealias KMAdvertisementTableViewDidSelect = (_ view: KMAdvertisementTableView,
         //注册cell
         self.collectionView.register(KMAdvertisementCollectionViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMAdvertisementCollectionViewItem"))
         
-        self.backgroundColor(KMAppearance.Layout.l0Color())
+//        self.backgroundColor(KMAppearance.Layout.l0Color())
     }
     
     func reloadData() {

+ 2 - 2
PDF Office/PDF Master/Class/KMAdvertisement/View/View/KMAdvertisementShowView.swift

@@ -53,7 +53,7 @@ class KMAdvertisementShowView: NSView {
     }
     
     func setup() {
-        self.backgroundColor(NSColor.black)
+//        self.backgroundColor(NSColor.black)
     }
     
     func reloadData() {
@@ -66,6 +66,6 @@ class KMAdvertisementShowView: NSView {
     }
     
     @IBAction func closeButtonAction(_ sender: Any) {
-        
+        self.removeFromSuperview()
     }
 }

+ 1 - 4
PDF Office/PDF Master/Class/KMAdvertisement/View/View/KMAdvertisementShowView.xib

@@ -24,9 +24,6 @@
                     <subviews>
                         <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="obQ-2R-s8Q">
                             <rect key="frame" x="0.0" y="0.0" width="208" height="120"/>
-                            <constraints>
-                                <constraint firstAttribute="width" secondItem="obQ-2R-s8Q" secondAttribute="height" multiplier="208:120" id="VpK-gc-yT8"/>
-                            </constraints>
                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="DKy-5d-0cT"/>
                         </imageView>
                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FlW-6z-t7c">
@@ -57,8 +54,8 @@
                         <constraint firstItem="obQ-2R-s8Q" firstAttribute="top" secondItem="geo-Fe-wJO" secondAttribute="top" id="f86-yV-16W"/>
                         <constraint firstAttribute="trailing" secondItem="Iay-VK-ICj" secondAttribute="trailing" id="fkb-Kj-0hp"/>
                         <constraint firstAttribute="height" constant="120" id="kze-Mi-xh1"/>
+                        <constraint firstAttribute="width" constant="208" id="mJa-Ch-4S7"/>
                         <constraint firstItem="FlW-6z-t7c" firstAttribute="top" secondItem="geo-Fe-wJO" secondAttribute="top" id="oah-aB-v14"/>
-                        <constraint firstAttribute="width" constant="208" id="pzz-J5-rHf"/>
                         <constraint firstItem="obQ-2R-s8Q" firstAttribute="leading" secondItem="geo-Fe-wJO" secondAttribute="leading" id="z7j-Ok-plA"/>
                     </constraints>
                 </view>

+ 4 - 4
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/KMComparativeOutlineView.xib

@@ -1,8 +1,8 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -70,7 +70,7 @@
                         <customView translatesAutoresizingMaskIntoConstraints="NO" id="Day-pV-XEE">
                             <rect key="frame" x="646" y="16" width="126" height="22"/>
                             <subviews>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Wx-Ri-paS">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Wx-Ri-paS">
                                     <rect key="frame" x="28" y="3" width="70" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Registered" id="tEL-FU-hD1">
                                         <font key="font" usesAppearanceFont="YES"/>
@@ -89,7 +89,7 @@
                         <customView translatesAutoresizingMaskIntoConstraints="NO" id="IbW-xH-P0o">
                             <rect key="frame" x="520" y="16" width="126" height="22"/>
                             <subviews>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v3A-gL-7XA">
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v3A-gL-7XA">
                                     <rect key="frame" x="22" y="3" width="83" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Unregistered" id="kIf-38-Jua">
                                         <font key="font" usesAppearanceFont="YES"/>

+ 6 - 6
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/ComparativeView/View/KMComparativeOutlineCell.xib

@@ -1,8 +1,8 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -24,7 +24,7 @@
             <rect key="frame" x="0.0" y="0.0" width="784" height="44"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="u22-yU-gpo">
+                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="u22-yU-gpo">
                     <rect key="frame" x="6" y="14" width="394" height="16"/>
                     <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Oah-fo-Tas">
                         <font key="font" usesAppearanceFont="YES"/>
@@ -43,7 +43,7 @@
                             </constraints>
                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="icon_comparative_hook" id="gbd-gH-Kp4"/>
                         </imageView>
-                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NrT-Ja-To6">
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NrT-Ja-To6">
                             <rect key="frame" x="6" y="15" width="114" height="16"/>
                             <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Label" id="rII-xy-11h">
                                 <font key="font" metaFont="system"/>
@@ -74,7 +74,7 @@
                             </constraints>
                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="icon_comparative_hook" id="zYa-4Q-cE2"/>
                         </imageView>
-                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jzd-Mg-rfa">
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jzd-Mg-rfa">
                             <rect key="frame" x="6" y="15" width="114" height="16"/>
                             <textFieldCell key="cell" alignment="center" title="Label" id="46S-yl-Zwl">
                                 <font key="font" metaFont="system"/>
@@ -105,7 +105,7 @@
                             </constraints>
                             <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="icon_comparative_hook" id="IYc-dA-3hY"/>
                         </imageView>
-                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kLh-ev-nDz">
+                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kLh-ev-nDz">
                             <rect key="frame" x="6" y="15" width="114" height="16"/>
                             <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Label" id="oTb-sT-L9u">
                                 <font key="font" metaFont="system"/>

+ 7 - 7
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/KMComparativeView.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22146" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22146"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -79,7 +79,7 @@
                             <rect key="frame" x="40" y="20" width="727" height="20"/>
                             <subviews>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rP2-sO-AA6">
-                                    <rect key="frame" x="384" y="2" width="107" height="16"/>
+                                    <rect key="frame" x="384" y="2" width="106" height="16"/>
                                     <buttonCell key="cell" type="square" title="Terms of Service" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="ply-Hb-Jcv">
                                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                         <font key="font" metaFont="system"/>
@@ -96,7 +96,7 @@
                                     </constraints>
                                 </customView>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hY1-Tk-GCi">
-                                    <rect key="frame" x="254" y="2" width="89" height="16"/>
+                                    <rect key="frame" x="255" y="2" width="88" height="16"/>
                                     <buttonCell key="cell" type="square" title="Privacy Policy" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="Z32-Nt-dbF">
                                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                         <font key="font" metaFont="system"/>
@@ -127,8 +127,8 @@
                                     </constraints>
                                     <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="Upgrade your plan" id="Qxe-i0-Wsc"/>
                                 </imageView>
-                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MnS-Io-H7L">
-                                    <rect key="frame" x="82" y="8" width="117" height="16"/>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MnS-Io-H7L">
+                                    <rect key="frame" x="82" y="8" width="116" height="16"/>
                                     <textFieldCell key="cell" lineBreakMode="clipping" title="Upgrade your plan" id="YKh-hc-g1N">
                                         <font key="font" metaFont="system"/>
                                         <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -146,7 +146,7 @@
                                     </connections>
                                 </button>
                                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="t36-hD-ZhM">
-                                    <rect key="frame" x="205" y="8" width="16" height="16"/>
+                                    <rect key="frame" x="204" y="8" width="16" height="16"/>
                                     <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_info" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="bFX-Ce-vIG">
                                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                         <font key="font" metaFont="system"/>

+ 2 - 2
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItem.xib

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

+ 3 - 3
PDF Office/PDF Master/Class/KMLightMember/Controller/ComparativeTable/View/KMComparativeView/View/KMComparativeViewCollectionItemItem.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22146" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22146"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -27,7 +27,7 @@
                     </constraints>
                     <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="2Ns-FZ-peU"/>
                 </imageView>
-                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="77S-IT-dI0">
+                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="77S-IT-dI0">
                     <rect key="frame" x="22" y="14" width="264" height="16"/>
                     <textFieldCell key="cell" title="Label" id="6Xk-Wh-SL6">
                         <font key="font" metaFont="system"/>

+ 2 - 0
PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPDFEditToolbar.swift

@@ -420,6 +420,7 @@ extension KMPDFEditToolbar: KMToolbarViewDelegate {
             item?.titleName = NSLocalizedString("Page Range", comment: "")
             item?.boxImagePosition = .imageExpandLeft
             item?.btnAction = #selector(pageRangeMenuAction)
+            item?.needExpandAction = true
             
 //            let view = NSView()
 //            item?.addSubview(view)
@@ -530,6 +531,7 @@ extension KMPDFEditToolbar: KMToolbarViewDelegate {
             item?.toolTip = NSLocalizedString("Split and save selected PDF pages as a new separate document", comment: "")
             item?.titleName = NSLocalizedString("Split", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(splitMenuAction)
             
             let menuItem = NSMenuItem.init(title: "Split", action: #selector(splitMenuAction), target: self)

+ 2 - 2
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMThumbnailViewController.xib

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

+ 36 - 36
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMCustomButtonPopMenuViewController.swift

@@ -31,14 +31,19 @@ import Masonry
 
     weak var dataSources: KMCustomButtonPopMenuViewControllerDataSources?
     weak var delegate: KMCustomButtonPopMenuViewControllerDelegate?
+    
+//    override var nibName: NSNib.Name? {
+//        return "KMCustomButtonPopMenuViewController"
+//    }
 
     @objc override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
         
         var numberOfLine = 0
-        if self.responds(to: Selector.init(("numberOfLine"))) {
-            numberOfLine = self.dataSources!.numberOfLine()
+        
+        if let data = self.dataSources?.numberOfLine() {
+            numberOfLine = data
         }
         if numberOfLine < 1 {
             return
@@ -49,15 +54,13 @@ import Masonry
         for i in 0..<numberOfLine {
             var image: NSImage?
             var title: String?
-            
-            if self.responds(to: Selector.init(("imageForLineAtIndex:"))) {
-                image = self.dataSources?.imageForLine(at: i)
-                title = self.dataSources?.stringForLine(at: i)
+            if let data = self.dataSources?.imageForLine(at: i) {
+                image = data
             }
-            if self.responds(to: Selector.init(("stringForLineAtIndex:"))) {
-                title = self.dataSources?.stringForLine(at: i)
+            if let data = self.dataSources?.stringForLine(at: i) {
+                title = data
             }
-
+            
             var v: KMPopMenuButton
             if let image1 = image {
                 v = KMPopMenuButton(title: title!, image: image1, target: self, action: #selector(buttonClicked(_:)))
@@ -72,18 +75,30 @@ import Masonry
                 v.isEnabled = ((self.dataSources?.itemEnable(at: i)) != nil)
             }
             
-            self.view.addSubview(v)
-            
-            v.mas_makeConstraints { make in
-                if let viewBool = referenceView?.isEqual(self.view) {
-                    make?.top.equalTo()(referenceView)?.offset()(CGFloat(10))
-                } else {
-                    make?.top.equalTo()(referenceView?.mas_bottom)?.offset()(CGFloat(2))
+            if let data = self.dataSources?.needInsertSeperateLine(at: i), data {
+                let box = NSBox(frame: .zero)
+                box.boxType = .separator
+                self.view.addSubview(box)
+                
+                box.mas_makeConstraints { make in
+                    make?.top.equalTo()(referenceView?.mas_bottom)?.offset()(2)
+                    make?.left.equalTo()(self.view)?.offset()(CGFloat(21))
+                    make?.centerX.equalTo()(self.view)
+                }
+                referenceView = box
+            } else {
+                self.view.addSubview(v)
+                v.mas_makeConstraints { make in
+                    if let viewBool = referenceView?.isEqual(self.view), viewBool  {
+                        make?.top.equalTo()(referenceView)?.offset()(CGFloat(10))
+                    } else {
+                        make?.top.equalTo()(referenceView?.mas_bottom)?.offset()(CGFloat(2))
+                    }
+                    make?.left.right().equalTo()(self.view)
+                    make?.height.offset()(24)
                 }
-                make?.left.right().equalTo()(self.view)
-                make?.height.offset()(24)
+                referenceView = v
             }
-            referenceView = v
             
             if self.responds(to: Selector.init(("needHightLightLineAtIndex:"))) {
                 if let needBool = self.dataSources?.needHightLightLine(at: i) {
@@ -91,20 +106,7 @@ import Masonry
                 }
             }
             
-            if self.responds(to: Selector.init(("needInsertSeperateLineAtIndex:"))) {
-                if let needBool = self.dataSources?.needInsertSeperateLine(at: i) {
-                    let box = NSBox(frame: .zero)
-                    box.boxType = .separator
-                    self.view.addSubview(box)
-                    
-                    box.mas_makeConstraints { make in
-                        make?.top.equalTo()(referenceView?.mas_bottom)?.offset()(2)
-                        make?.left.equalTo()(self.view)?.offset()(CGFloat(21))
-                        make?.centerX.equalTo()(self.view)
-                    }
-                    referenceView = box
-                }
-            }
+
             
             if i == numberOfLine - 1 {
                 referenceView?.mas_updateConstraints({ make in
@@ -115,8 +117,6 @@ import Masonry
     }
     
     @objc func buttonClicked(_ sender: NSButton) {
-        if self.responds(to: Selector.init(("customViewButtonPopDidSelectIndex:"))) {
-            self.delegate!.customViewButtonPopDidSelectIndex(sender.tag)
-        }
+        self.delegate?.customViewButtonPopDidSelectIndex(sender.tag)
     }
 }

+ 3 - 3
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMCustomButtonPopMenuViewController.xib

@@ -1,12 +1,12 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMCustomButtonPopMenuViewController">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMCustomButtonPopMenuViewController" customModule="PDF_Master" customModuleProvider="target">
             <connections>
                 <outlet property="view" destination="c22-O7-iKe" id="JxB-w3-Tzc"/>
             </connections>

+ 4 - 6
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarController.swift

@@ -111,9 +111,7 @@ class KMToolbarController: NSViewController {
         mainToolBarView?.view.wantsLayer = true
         mainToolBarView?.view.layer?.backgroundColor = NSColor.km_init(hex: "#F7F8FA").cgColor
         mainToolBarBox.contentView = mainToolBarView?.view
-        mainToolBarView?.view.frame = mainToolBarBox.frame
         mainToolBarView?.delegate = self
-        mainToolBarView?.view.autoresizingMask = [.width, .height]
         mainToolBarView?.pdfView = self.listView!
         
         childToolBarView = KMToolbarViewController.init()
@@ -159,15 +157,15 @@ class KMToolbarController: NSViewController {
             if _toolbarType == .None {
                 bottomOffset.constant = 0
                 childToolBarBox.isHidden = true
-                self.delegate?.toolbarController?(self, heightOffsetChange: 40)
+                self.delegate?.toolbarController?(self, heightOffsetChange: 40+8)
             } else if _toolbarType == .Page || _toolbarType == .LeftPanel {
                 bottomOffset.constant = 0
                 childToolBarBox.isHidden = true
-                self.delegate?.toolbarController?(self, heightOffsetChange: 40)
+                self.delegate?.toolbarController?(self, heightOffsetChange: 40+8)
             } else {
                 bottomOffset.constant = 41
                 childToolBarBox.isHidden = false
-                self.delegate?.toolbarController?(self, heightOffsetChange: 81)
+                self.delegate?.toolbarController?(self, heightOffsetChange: 81+8)
             }
             childToolBarView?.toolbarType = _toolbarType
             childToolBarView?.reloadateToolbar()
@@ -521,7 +519,7 @@ extension KMToolbarController: KMToolbarViewControllerDelegate {
             #if VERSION_DMG
             if await (KMLightMemberManager.manager.canUseAdvanced() == false) {
                 let _ = KMComparativeTableViewController.show(window: self.view.window!)
-                let boxItem = item.clickObject as? KMToolBoxItem
+                let boxItem = item.clickObject as? KMToolbarItemView
                 boxItem?.isSelected = false
                 return
             }

+ 80 - 2
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarItemView.swift

@@ -207,7 +207,7 @@ extension KMToolbarItemView {
             return self._popOver
         }
         set {
-            if self._popOver?.isEqual(to: newValue) == false {
+            if self._popOver == nil || self._popOver!.isEqual(to: newValue) == false {
                 self._popOver = newValue
                 if (newValue != nil) {
                     self.layer?.backgroundColor = self.selectedBackgroundColor.cgColor
@@ -326,7 +326,7 @@ extension KMToolbarItemView {
         }
         if (self.needExpandAction) {
             self.needExpandButton.image = NSImage(named: "KMImageNameUXIconBtnTriDownSel")
-//            [self showPop:self];
+            self._showPop(self)
         }else if (self.isShowCustomToolTip) {
             self.perform(#selector(_showHUDHint), with: nil, afterDelay: 0.1)
         }
@@ -388,6 +388,27 @@ extension KMToolbarItemView {
         }
     }
     
+    private func _showPop(_ sender: NSView) {
+        let menuViewController = KMCustomButtonPopMenuViewController()
+        menuViewController.delegate = self
+        menuViewController.dataSources = self
+        self.popOver = NSPopover()
+        self.popOver?.delegate = self
+        self.popOver?.contentViewController = menuViewController
+        self.popOver?.animates = false
+        self.popOver?.behavior = .semitransient
+        self.popOver?.contentSize = menuViewController.view.frame.size
+        
+        var sourcesRect = sender.bounds
+        sourcesRect.size = sender.convert(sourcesRect.size, to: nil)
+        sourcesRect.origin.y -= 20
+        sourcesRect.size.height += 20
+        self.window?.popover = self.popOver
+        self.window?.sourcesRect = sourcesRect
+        
+        self.popOver?.show(relativeTo: CGRectInset(self.bounds, 0, 5), of: self, preferredEdge: .maxY)
+    }
+    
     private func _closePop() {
         self.popOver?.close()
         self.popOver = nil
@@ -567,3 +588,60 @@ extension KMToolbarItemView {
         }
     }
 }
+
+extension KMToolbarItemView: NSPopoverDelegate {
+    
+}
+
+extension KMToolbarItemView: KMCustomButtonPopMenuViewControllerDelegate, KMCustomButtonPopMenuViewControllerDataSources {
+    func customViewButtonPopDidSelectIndex(_ index: Int) {
+        self._closePop()
+        
+//        if (self.itemIdentifier == KMToolbarPageEditPageRangeItemIdentifier) {
+            if let items = self.menuFormRepresentation?.submenu?.items {
+                let item = items[index]
+                _ = item.target?.perform(item.action, with: item)
+            }
+//        }
+    }
+    
+    func numberOfLine() -> Int {
+//        if (self.itemIdentifier == KMToolbarPageEditPageRangeItemIdentifier) {
+            if let items = self.menuFormRepresentation?.submenu?.items {
+                return items.count
+            }
+//        }
+        return 0
+    }
+    
+    func stringForLine(at index: Int) -> String? {
+//        if (self.itemIdentifier == KMToolbarPageEditPageRangeItemIdentifier) {
+            if let items = self.menuFormRepresentation?.submenu?.items {
+                return items[index].title
+            }
+//        }
+        return nil
+    }
+    
+    func needInsertSeperateLine(at index: Int) -> Bool {
+        if let items = self.menuFormRepresentation?.submenu?.items {
+            return items[index].isSeparatorItem
+        }
+        return false
+    }
+    
+    func needHightLightLine(at index: Int) -> Bool {
+        return false
+    }
+    
+    func imageForLine(at index: Int) -> NSImage? {
+        if let items = self.menuFormRepresentation?.submenu?.items {
+            return items[index].image
+        }
+        return nil
+    }
+    
+    func itemEnable(at index: Int) -> Bool {
+        return true
+    }
+}

+ 14 - 5
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarView.swift

@@ -361,11 +361,20 @@ private let KMToolbarItemSpace = 8.0
                     }
                     
                 } else {
-                    item?.mas_makeConstraints({ make in
-                        make?.top.equalTo()(0)
-                        make?.bottom.equalTo()(0)
-                        make?.left.equalTo()(20)
-                    })
+                    if (i == itemIdentifiers.count - 1) {
+                        item?.mas_makeConstraints({ make in
+                            make?.top.equalTo()(0)
+                            make?.bottom.equalTo()(0)
+                            make?.left.equalTo()(self.leftView.mas_left)?.offset()(KMToolbarItemSpace)
+                            make?.right.equalTo()(self.leftView.mas_right)?.offset()(-20)
+                        })
+                    } else {
+                        item?.mas_makeConstraints({ make in
+                            make?.top.equalTo()(0)
+                            make?.bottom.equalTo()(0)
+                            make?.left.equalTo()(20)
+                        })
+                    }
                 }
                 lastItem = item
             }

+ 133 - 3
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarViewController.swift

@@ -25,6 +25,7 @@ import Cocoa
     case SelectZoom
     case LeftPanel
     case RightPanel
+    case viewSetting
     
     func isToolMode() -> Bool {
         return (self == .Move || self == .Magnify || self == .Select || self == .SelectZoom)
@@ -205,9 +206,24 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
     }
     
     @objc private func _itemAction(_ item: KMToolbarClickButton) {
+        if let data = item.clickObject as? KMToolbarItemView {
+            if data.itemIdentifier == KMToolbarComparisonItemIdentifier {
+                self._currentItemView = data
+                if let subMenu = data.menuFormRepresentation?.submenu {
+                    subMenu.popUp(positioning: nil, at: item.frame.origin, in: item.superview)
+                }
+                return
+            }
+        }
         self.delegate?.toolbarViewController?(self, itemDidClick: item.clickObject as! KMToolbarItemView)
     }
     
+    @objc private func _comparisonAction(sender: NSMenuItem) {
+        if let data = self._currentItemView {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
+        }
+    }
+    
     @IBAction func showPDFLayoutMode(sender: KMToolbarClickButton) {
         let item = sender.clickObject as? KMToolbarItemView
         if (item != nil) {
@@ -265,6 +281,8 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
     @objc private func _watermarkAction(sender: NSMenuItem) {
         if let data = self._currentItemView {
             self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
+        } else {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolWatermarkItemIdentifier), index: sender.tag, info: nil)
         }
     }
     
@@ -301,6 +319,29 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
         self.delegate?.toolbarViewController?(self, clickChaildToolType: type, toolbar: item)
     }
     
+    @objc private func _pdfToImageAction(sender: NSMenuItem) {
+        if let data = self._currentItemView {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
+        } else {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionImageItemIdentifier), index: sender.tag, info: nil)
+        }
+    }
+    
+    @objc private func _exportImageAction(sender: NSMenuItem) {
+        if let data = self._currentItemView {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
+        } else {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionExportImageItemIdentifier), index: sender.tag, info: nil)
+        }
+    }
+    
+    @objc private func _newPDFAction(sender: NSMenuItem) {
+        if let data = self._currentItemView {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
+        } else {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionCreatePDFItemIdentifier), index: sender.tag, info: nil)
+        }
+    }
     
     @IBAction func zoomModelSelectButtonAction(_ sender: NSPopUpButton) {
         self.delegate?.toolbarViewController?(self, zoomModel: sender.selectedTag())
@@ -362,6 +403,14 @@ class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
        
     }
     
+    @objc private func _alignmentAction(sender: NSMenuItem) {
+        if let data = self._currentItemView {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
+        } else {
+            self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolFormAlignIdentifier), index: sender.tag, info: nil)
+        }
+    }
+    
     // Form 更多操作
     @IBAction func formsMoreOperationAction(sender:KMToolbarClickButton) {
         
@@ -420,6 +469,8 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
             return [KMLeftControlToolbarItemIdentifier,
                     KMDocumentZoomViewToolbarItemIdentifier, KMDocumentZoomOutToolbarItemIdentifier, KMDocumentZoomToolbarItemIdentifier,
                     KMDocumentPreviousPageToolbarItemIdentifier, KMDocumentNextPageToolbarItemIdentifier, KMDocumentHomeToolbarItemIdentifier]
+        } else if (toolbarType == .Conversion) {
+            return [KMToolbarConversionCreatePDFItemIdentifier]
         }
         return []
     }
@@ -547,10 +598,13 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
                     KMToolbarConversionCSVItemIdentifier,
                     KMToolbarConversionHTMLItemIdentifier,
                     KMToolbarConversionTextItemIdentifier,
-                    KMToolbarConversionImageItemIdentifier]
+                    KMToolbarConversionImageItemIdentifier,
+                    KMDocumentScanOCRToolbarItemIdentifier, KMToolbarConversionExportImageItemIdentifier]
         case .ScanOCR:
             return [KMToolbarToolEnhancedScanIdentifier,
                 KMToolbarToolOCRTextIdentifier]
+        case .viewSetting:
+            return []
         default:
             break
         }
@@ -1209,9 +1263,59 @@ extension KMToolbarViewController {
             item?.btnTag = KMToolbarType.conversion_image.rawValue
             item?.toolTip = NSLocalizedString("Convert PDF to JPEG, PNG, TIFF, BMP, GIF or TGA files", comment: "")
             item?.titleName = NSLocalizedString("To Image", comment: "")
-            item?.boxImagePosition = .imageLeft
+            item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(conversionMenuItemAction)
+            
+            let menuItem = NSMenuItem.init(title: "To Image", action: #selector(conversionMenuItemAction), target: self)
+            let subMenu = NSMenu()
+            subMenu.addItem(title: NSLocalizedString("PDF To JPEG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.jpeg.rawValue)
+            subMenu.addItem(title: NSLocalizedString("PDF To JPG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.jpg.rawValue)
+            subMenu.addItem(title: NSLocalizedString("PDF To PNG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.png.rawValue)
+            subMenu.addItem(title: NSLocalizedString("PDF To GIF", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.gif.rawValue)
+            subMenu.addItem(title: NSLocalizedString("PDF To TIFF", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.tiff.rawValue)
+            subMenu.addItem(title: NSLocalizedString("PDF To TGA", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.tga.rawValue)
+            subMenu.addItem(title: NSLocalizedString("PDF To BMP", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.bmp.rawValue)
+            
+            menuItem.submenu = subMenu
+            item?.menuFormRepresentation = menuItem
+        } else if item?.itemIdentifier == KMToolbarConversionExportImageItemIdentifier {
+            item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertExportImage)
+            item?.target = self
+            item?.toolTip = NSLocalizedString("The range you can extract images includes current page, odd page, even page, custom page, and all pages.", comment: "")
+            item?.titleName = NSLocalizedString("Extract Images", comment: "")
+            item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
+            
+            let menuItem = NSMenuItem.init(title: "To Image", action: nil, target: self)
+            let subMenu = NSMenu()
+            subMenu.addItem(title: NSLocalizedString("Extract All Images", comment: ""), action: #selector(_exportImageAction), target: self, tag: 1)
+            subMenu.addItem(title: NSLocalizedString("Extract Images", comment: ""), action: #selector(_exportImageAction), target: self, tag: 2)
+            
+            menuItem.submenu = subMenu
+            item?.menuFormRepresentation = menuItem
+        } else if item?.itemIdentifier == KMToolbarConversionCreatePDFItemIdentifier {
+            item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertCreatPDF)
+            item?.target = self
+            item?.toolTip = NSLocalizedString("Convert JPEG, JPG, PNG, TIFF, BMP or PSD files to PDFs", comment: "")
+            item?.titleName = NSLocalizedString("New PDF Document", comment: "")
+            item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
+            
+            let menuItem = NSMenuItem.init(title: "New PDF Document", action: nil, target: self)
+            let subMenu = NSMenu()
+            subMenu.addItem(title: NSLocalizedString("New Blank Page", comment: ""), action: #selector(_newPDFAction), target: self, tag: 1)
+            subMenu.addItem(title: NSLocalizedString("New From Images", comment: ""), action: #selector(_newPDFAction), target: self, tag: 2)
+            subMenu.addItem(NSMenuItem.separator())
+            subMenu.addItem(title: NSLocalizedString("New From Web Page", comment: ""), action: #selector(_newPDFAction), target: self, tag: 3)
+            subMenu.addItem(title: NSLocalizedString("Import From Camera", comment: ""), action: #selector(_newPDFAction), target: self, tag: 4)
+            subMenu.addItem(NSMenuItem.separator())
+            subMenu.addItem(title: NSLocalizedString("Import From Scanner", comment: ""), action: #selector(_newPDFAction), target: self, tag: 5)
+            
+            menuItem.submenu = subMenu
+            item?.menuFormRepresentation = menuItem
         }
+                    
     }
     
     private func _setupFillSignItem(_ item: KMToolbarItemView?) {
@@ -1371,9 +1475,23 @@ extension KMToolbarViewController {
             item?.toolTip = NSLocalizedString("Alignment", comment: "")
             item?.titleName = NSLocalizedString("Alignment", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(formsAlignmentAction)
             
             let menuItem = NSMenuItem.init(title: "Alignment", action: #selector(formsAlignmentAction), target: self)
+            let subMenu = NSMenu()
+            subMenu.addItem(title: NSLocalizedString("Align Left", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignLeftNor", action: #selector(_alignmentAction), target: self, tag: 0)
+            subMenu.addItem(title: NSLocalizedString("Align Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVercenterNor", action: #selector(_alignmentAction), target: self, tag: 1)
+            subMenu.addItem(title: NSLocalizedString("Align Right", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignRightNor", action: #selector(_alignmentAction), target: self, tag: 2)
+            subMenu.addItem(NSMenuItem.separator())
+            subMenu.addItem(title: NSLocalizedString("Align Top", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignUpNor", action: #selector(_alignmentAction), target: self, tag: 3)
+            subMenu.addItem(title: NSLocalizedString("Align Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorcenterNor", action: #selector(_alignmentAction), target: self, tag: 4)
+            subMenu.addItem(title: NSLocalizedString("Align Bottom", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignDownNor", action: #selector(_alignmentAction), target: self, tag: 5)
+            subMenu.addItem(NSMenuItem.separator())
+            subMenu.addItem(title: NSLocalizedString("Distribute Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorsplitNor", action: #selector(_alignmentAction), target: self, tag: 6)
+            subMenu.addItem(title: NSLocalizedString("Distribute Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVersplitNor", action: #selector(_alignmentAction), target: self, tag: 7)
+            
+            menuItem.submenu = subMenu
             menuItem.tag = item!.btnTag
             item?.menuFormRepresentation = menuItem
         } else if identifier == KMToolbarToolFormMoreIdentifier {
@@ -1410,8 +1528,15 @@ extension KMToolbarViewController {
             item?.btnTag = KMToolbarType.comparison.rawValue
             item?.toolTip = NSLocalizedString("Compare", comment: "")
             item?.titleName = NSLocalizedString("Compare", comment: "")
-            item?.boxImagePosition = .imageLeft
+            item?.boxImagePosition = .imageExpandLeft
             item?.btnAction = #selector(_itemAction)
+            
+            let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(batesMenuAction), target: self)
+            let subMenu = NSMenu()
+            subMenu.addItem(title: NSLocalizedString("Side-by-Side View", comment: ""), action: #selector(_comparisonAction), target: self, tag: 1)
+            subMenu.addItem(title: NSLocalizedString("Compare by File Overlay", comment: ""), action: #selector(_comparisonAction), target: self, tag: 2)
+            menuItem.submenu = subMenu
+            item?.menuFormRepresentation = menuItem
         } else if identifier == KMToolbarToolBatesItemIdentifier {
             item?.image = NSImage(named: "KMImageNameUXIconBatchBatesNor")
             item?.target = self
@@ -1419,6 +1544,7 @@ extension KMToolbarViewController {
             item?.toolTip = NSLocalizedString("Add PDF Bates numbering to your legal, medical, or business documents", comment: "")
             item?.titleName = NSLocalizedString("Bates Number", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(batesMenuAction)
             
             let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(batesMenuAction), target: self)
@@ -1437,6 +1563,7 @@ extension KMToolbarViewController {
             item?.toolTip = NSLocalizedString("Insert header, footer, and page numbers to PDF", comment: "")
             item?.titleName = NSLocalizedString("Header & Footer", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(headerfooterMenuAction)
             
             let menuItem = NSMenuItem.init(title: "Header & Footer", action: #selector(headerfooterMenuAction), target: self)
@@ -1455,6 +1582,7 @@ extension KMToolbarViewController {
             item?.toolTip = NSLocalizedString("Insert PDF page background by color or image", comment: "")
             item?.titleName = NSLocalizedString("Backgroud", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(backgroundMenuAction)
             
             let menuItem = NSMenuItem.init(title: "Backgroud", action: #selector(backgroundMenuAction), target: self)
@@ -1473,6 +1601,7 @@ extension KMToolbarViewController {
             item?.toolTip = NSLocalizedString("Watermark", comment: "")
             item?.titleName = NSLocalizedString("Watermark", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(watermarkMenuAction)
             
             let menuItem = NSMenuItem.init(title: "Watermark", action: #selector(watermarkMenuAction), target: self)
@@ -1498,6 +1627,7 @@ extension KMToolbarViewController {
             item?.toolTip = NSLocalizedString("Batch encrypting PDF documents", comment: "")
             item?.titleName = NSLocalizedString("Security", comment: "")
             item?.boxImagePosition = .imageExpandLeft
+            item?.needExpandAction = true
             item?.btnAction = #selector(secureMenuAction)
             
             let menuItem = NSMenuItem.init(title: "Security", action: #selector(secureMenuAction), target: self)

+ 7 - 2
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/PublicKey.swift

@@ -87,6 +87,7 @@ let pageEditToolIdentifiers = [KMToolbarPageEditPageRangeItemIdentifier, KMToolb
                                KMToolbarPageEditPasteItemIdentifier, KMToolbarPageEditDeleteItemIdentifier]
 
 // conversion
+let KMToolbarConversionCreatePDFItemIdentifier = "KMToolbarConversionCreatePDFItemIdentifier"
 let KMToolbarConversionWordItemIdentifier = "KMToolbarConversionWordItemIdentifier"
 let KMToolbarConversionExcelItemIdentifier = "KMToolbarConversionExcelItemIdentifier"
 let KMToolbarConversionPPTItemIdentifier = "KMToolbarConversionPPTItemIdentifier"
@@ -95,10 +96,14 @@ let KMToolbarConversionCSVItemIdentifier = "KMToolbarConversionCSVItemIdentifier
 let KMToolbarConversionHTMLItemIdentifier = "KMToolbarConversionHTMLItemIdentifier"
 let KMToolbarConversionTextItemIdentifier = "KMToolbarConversionTextItemIdentifier"
 let KMToolbarConversionImageItemIdentifier = "KMToolbarConversionImageItemIdentifier"
-let conversionToolIdentifiers = [KMToolbarConversionWordItemIdentifier, KMToolbarConversionExcelItemIdentifier,
+let KMToolbarConversionExportImageItemIdentifier = "KMToolbarConversionExportImageItemIdentifier"
+
+let conversionToolIdentifiers = [KMToolbarConversionCreatePDFItemIdentifier,
+                                 KMToolbarConversionWordItemIdentifier, KMToolbarConversionExcelItemIdentifier,
                                  KMToolbarConversionPPTItemIdentifier, KMToolbarConversionRTFItemIdentifier,
                                  KMToolbarConversionCSVItemIdentifier, KMToolbarConversionHTMLItemIdentifier,
-                                 KMToolbarConversionTextItemIdentifier, KMToolbarConversionImageItemIdentifier]
+                                 KMToolbarConversionTextItemIdentifier, KMToolbarConversionImageItemIdentifier,
+                                 KMToolbarConversionExportImageItemIdentifier]
 
 // EditPDF
 let KMToolbarAddTextEditPDFItemIdentifier =  "KMToolbarAddTextEditPDFItemIdentifier"

+ 10 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -2954,6 +2954,16 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
             KMPrint("KMToolbarToolHeaderFooterItemIdentifier \(index)")
         } else if (toolbarItem.itemIdentifier == KMToolbarToolBatesItemIdentifier) {
             KMPrint("KMToolbarToolBatesItemIdentifier \(index)")
+        } else if (toolbarItem.itemIdentifier == KMToolbarComparisonItemIdentifier) {
+            KMPrint("KMToolbarComparisonItemIdentifier \(index)")
+        } else if (toolbarItem.itemIdentifier == KMToolbarToolFormAlignIdentifier) {
+            KMPrint("KMToolbarToolFormAlignIdentifier \(index)")
+        } else if (toolbarItem.itemIdentifier == KMToolbarConversionImageItemIdentifier) {
+            KMPrint("KMToolbarConversionImageItemIdentifier \(index)")
+        } else if (toolbarItem.itemIdentifier == KMToolbarConversionExportImageItemIdentifier) {
+            KMPrint("KMToolbarConversionExportImageItemIdentifier \(index)")
+        } else if (toolbarItem.itemIdentifier == KMToolbarConversionCreatePDFItemIdentifier) {
+            KMPrint("KMToolbarConversionCreatePDFItemIdentifier \(index)")
         }
     }
     

+ 17 - 0
PDF Office/PDF Master/KMSystemMenu.swift

@@ -8,6 +8,16 @@
 import Cocoa
 
 protocol KMSystemFileMenuProtocol {
+    /// New
+    func menuItemAction_newDocumentFromClipboard(_ sender: Any?)
+    func menuItemAction_newDocumetFromImage(_ sender: Any?)
+    func menuItemAction_importFromWebPage(_ sender: Any?)
+    ///  screenShot
+    func menuItemAction_screenShotSelectArea(_ sender: Any?)
+    func menuItemAction_screenShotWindow(_ sender: Any?)
+    func menuItemAction_screenShotFullScreenDelay(_ sender: Any?)
+    func menuItemAction_screenShotFullScreen(_ sender: Any?)
+    
     func menuItemClick_saveAsFlattenedPDF(_ sender: Any)
     func menuItemClick_mergePDF(_ sender: Any)
     func menuItemClick_Compress(_ sender: Any)
@@ -37,6 +47,13 @@ protocol KMSystemFileMenuProtocol {
 
 extension KMSystemFileMenuProtocol {
     func menuItemClick_Convert(_ sender: Any) {}
+    func menuItemAction_newDocumentFromClipboard(_ sender: Any?) {}
+    func menuItemAction_newDocumetFromImage(_ sender: Any?) {}
+    func menuItemAction_importFromWebPage(_ sender: Any?) {}
+    func menuItemAction_screenShotSelectArea(_ sender: Any?) {}
+    func menuItemAction_screenShotWindow(_ sender: Any?) {}
+    func menuItemAction_screenShotFullScreenDelay(_ sender: Any?) {}
+    func menuItemAction_screenShotFullScreen(_ sender: Any?) {}
 }
 
 @objc protocol KMSystemEditMenuProtocol {

+ 0 - 4
PDF Office/PDF Master/PDF_Master DMG-Bridging-Header.h

@@ -6,10 +6,7 @@
 #import "CPDFListView+Event.h"
 #import "ComPDFUIKit.h"
 
-#import "KMGOCRManager.h"
-
 #import "KMToolbarItem.h"
-#import "KMToolbar.h"
 #import <ComPDFKit_Conversion/ComPDFKit_Conversion.h>
 //#import <ComDocumentAIKit/ComDocumentAIKit.h>
 #import "CTTabContents.h"
@@ -23,7 +20,6 @@
 #import "CPDFListView+Public.h"
 #import "KMGeneralAnnotationViewController.h"
 #import "KMAnnotationPropertiesViewController.h"
-#import "KMDocumentAIViewController.h"
 
 #import "CPDFListView+Tool.h"
 #import "NSBitmapImageRep_SKExtensions.h"

+ 0 - 2
PDF Office/PDF Master/PDF_Master Pro-Bridging-Header.h

@@ -6,8 +6,6 @@
 #import "ComPDFUIKit.h"
 #import "CPDFListView+Event.h"
 
-#import "KMGOCRManager.h"
-
 #import "KMToolbarItem.h"
 #import "KMToolbar.h"
 #import <ComPDFKit_Conversion/ComPDFKit_Conversion.h>