Kaynağa Gözat

【2025】【Home】空状态逻辑补充&组件库完善

niehaoyu 4 ay önce
ebeveyn
işleme
dcca16099a
58 değiştirilmiş dosya ile 906 ekleme ve 22 silme
  1. 2 2
      PDF Office/KMComponentLibrary/KMComponentLibrary.xcodeproj/project.pbxproj
  2. 6 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Contents.json
  3. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add-hover.imageset/Contents.json
  4. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add-hover.imageset/Type_add-hover.pdf
  5. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_addImage.imageset/Contents.json
  6. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_addImage.imageset/Type_addImage.pdf
  7. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_normal.imageset/Contents.json
  8. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_normal.imageset/Type_add_normal.pdf
  9. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_pressed.imageset/Contents.json
  10. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_pressed.imageset/Type_add_pressed.pdf
  11. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_empty.imageset/Contents.json
  12. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_empty.imageset/Type_empty.pdf
  13. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noAnnotation.imageset/Contents.json
  14. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noAnnotation.imageset/Type_noAnnotation.pdf
  15. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBates.imageset/Contents.json
  16. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBates.imageset/Type_noBates.pdf
  17. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBookmark.imageset/Contents.json
  18. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBookmark.imageset/Type_noBookmark.pdf
  19. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noCompare.imageset/Contents.json
  20. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noCompare.imageset/Type_noCompare.pdf
  21. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noFile.imageset/Contents.json
  22. 70 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noFile.imageset/Type_noFile.pdf
  23. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noForm.imageset/Contents.json
  24. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noForm.imageset/Type_noForm.pdf
  25. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noInternet.imageset/Contents.json
  26. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noInternet.imageset/Type_noInternet.pdf
  27. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noLink.imageset/Contents.json
  28. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noLink.imageset/Type_noLink.pdf
  29. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noOutline.imageset/Contents.json
  30. 65 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noOutline.imageset/Type_noOutline.pdf
  31. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScannedFile.imageset/Contents.json
  32. 136 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScannedFile.imageset/Type_noScannedFile.pdf
  33. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScanner.imageset/Contents.json
  34. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScanner.imageset/Type_noScanner.pdf
  35. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSearch.imageset/Contents.json
  36. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSearch.imageset/Type_noSearch.pdf
  37. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSign.imageset/Contents.json
  38. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSign.imageset/Type_noSign.pdf
  39. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSignature.imageset/Contents.json
  40. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSignature.imageset/Type_noSignature.pdf
  41. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noStamp.imageset/Contents.json
  42. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noStamp.imageset/Type_noStamp.pdf
  43. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noWatermark.imageset/Contents.json
  44. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noWatermark.imageset/Type_noWatermark.pdf
  45. 12 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Type_empty.imageset/Contents.json
  46. BIN
      PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Type_empty.imageset/Type_empty.pdf
  47. 111 1
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Empty/ComponentEmpty.swift
  48. 3 3
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Empty/ComponentEmpty.xib
  49. 34 1
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Empty/ComponentEmptyProperty.swift
  50. 11 0
      PDF Office/PDF Master/KMClass/KMHomeViewController/KMNHomeViewController.swift
  51. 1 2
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeQuickToolsView/KMHomeQuickToolsView.swift
  52. 15 1
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HeaderFooterView/KMHomeFilesEmptyHeaderView.swift
  53. 40 0
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFilesItems/KMHistoryEmptyView.swift
  54. 66 0
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFilesItems/KMHistoryEmptyView.xib
  55. 43 5
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/KMHomeRightView.swift
  56. 7 7
      PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/KMHomeRightView.xib
  57. 16 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  58. 16 0
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

+ 2 - 2
PDF Office/KMComponentLibrary/KMComponentLibrary.xcodeproj/project.pbxproj

@@ -621,13 +621,13 @@
 		BB5A9BDE2CB64D4700F64C1F /* Progress */ = {
 			isa = PBXGroup;
 			children = (
+				BB5A9BE52CB64D4700F64C1F /* ComponentProgressProperty.swift */,
 				BB5A9BDF2CB64D4700F64C1F /* ComponentProgressLine.swift */,
+				BB5A9BE22CB64D4700F64C1F /* ComponentProgressLine.xib */,
 				BB5A9BE02CB64D4700F64C1F /* ComponentProgressPopup.swift */,
 				BB5A9BE12CB64D4700F64C1F /* ComponentProgressPopup.xib */,
-				BB5A9BE22CB64D4700F64C1F /* ComponentProgressLine.xib */,
 				BB5A9BE32CB64D4700F64C1F /* ComponentProgressCircle.swift */,
 				BB5A9BE42CB64D4700F64C1F /* ComponentProgressCircle.xib */,
-				BB5A9BE52CB64D4700F64C1F /* ComponentProgressProperty.swift */,
 			);
 			path = Progress;
 			sourceTree = "<group>";

+ 6 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Contents.json

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

+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add-hover.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_add-hover.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add-hover.imageset/Type_add-hover.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_addImage.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_addImage.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_addImage.imageset/Type_addImage.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_normal.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_add_normal.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_normal.imageset/Type_add_normal.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_pressed.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_add_pressed.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_add_pressed.imageset/Type_add_pressed.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_empty.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_empty.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_empty.imageset/Type_empty.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noAnnotation.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noAnnotation.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noAnnotation.imageset/Type_noAnnotation.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBates.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noBates.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBates.imageset/Type_noBates.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBookmark.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noBookmark.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noBookmark.imageset/Type_noBookmark.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noCompare.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noCompare.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noCompare.imageset/Type_noCompare.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noFile.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noFile.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 70 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noFile.imageset/Type_noFile.pdf

@@ -0,0 +1,70 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Filter /FlateDecode
+     /Length 3 0 R
+  >>
+stream
+x�—ËŽ5F÷ý½FŠñý²$ÖÀ‚hi&ŠÄósª/U�ÒY¤çüvùsÝìþñ—�ÿþ}|üýןöŸÿØ~´¿Ž/Û?[èΟÏރ˽ùö×™f×½oµîÑ»Úkaïí³ŽSvli¸Òªq¢/[ö®—Ús�hŽ.øìëæ[mì9¹�Jô}ïÕ¥ÐÒèØ,¬âèyïØñ-—†Í\Í9Ä&Ôgdö½D×GH¬Ó†«©µÞö’]h1t?±cÞåë}ÙFÂ~ÅèDG½F†½U7J(ìxbé‡M¥©°f�þ´i4¸Žä‘÷{Ÿ÷8ž‘�"<«ìØ/Ï#_¶'e¢7[gbªè˜#¬qÙ>mþ°}–´x~Å­ç³Ð7ýÍlÜ
+bÚ�×Í;âXscn‹CÉK>úýËñyKñ‰¤D/Ž˜2—ˆjJ	æáb '*zVcEeW†Á»K¾÷Ô±1ÑòPüdTÇž6ðyü^oƒÉ¥RªŒÎÈÏä>£WcÅF}`¦_'8©0¨#Å@‹p7xºTß=6Óùiÿ�η0€6{M§ùŸ¶k„(x(^WMÕmëëô™O|ŒM•G@Î.—AÕ³–Ñi°$ß7 Íg[:¦sÔÝ„Ñ‚®”0*­Á¨XÂy>I³HܸNÞìÒˆ¥GësÎD
4��;í­Ð&KNÙ]Ø•õR¥°ÎÆ•iš×¦qåaš¥R¤´$£faMg¬·Ø	û#8FÝ3%ß²üÎîbñ#µ°²Êq ô�‚â
+ݽ–‰bsø
+^ ¥ÖŒ}a(ͅNÑo¶¸‘
‘15£Õ(¬ãæ|Ž>
O½,¢@û]GKµã€½ÒˆGö4?æçÑ"­ÔRÉæRV¿©è_¥þëL‡Ë‰“•Ã
×+Xõ¹Ê€cÊ‹
+Ù‘˜G)ØT:•1Ãcñ
SEǬH©è¿ËW<åüº@\Ïy LÛÆõ«(Ñ6p¬;ŽAŽ!9]Êý’ãÔU†¡c¡M?Þ™{(†Oð.—£¶çkÅ7H%âoõ˜BÜ­P÷|G€TA&FöšQ~ý�'¬MSª
+“µÈ¬kAîC–j·+¥Hýó¶^[Mm‚·
+rÆFês;0¦b¨Ò÷P„ÿÅã7þ}ç5#r5<Ÿ=Ò}Îç;®Ôç}dW®°ÉÓ,pW©˜KT(&F& é+taAäÓ
ŸKÉp)Ò:Ι\ñ±õ"ý àbG—»)–gº° –ɈqE‡qÉlÉcÙhç…G“ ß‚6ªógªµzn�-‹Yc2Š+Œ6£f`	§ù4æ…‹qZ v)à4®E�¢ Š¸gé4Ú°çÄáH¨¼¥6‚„ceWÖ»�FÖWW¯MãÊû~MƒTŠƒŒrãèdaM'ŸÈd¤ñÈFjoüÁr
+Ùÿñ0öÃÿP3 ÕÇÿ<o yr–Ú†ñ°þ®=Ž,…DC¡š²ýJ#[Ài:~\Dˆ¸QÙ�ÊàHä>\“o´pæµÒ왕·hFgÏéP
++)Åfl5Px°Qº¼±ö™s¡as¡SôO™‹>vžÈòÈå£V¬•Ã»EÏú° WŽ!߷ﲋÛü[fbKÕsQ�ŽÎ͆of¾e[ó…K‚–ȤH6�ª"Ñ¿*iòØhu|ñ(ÇIM¹ó…„¯nÿ=A�3›ŨF…àÈim4æ+Å泎XG_š™*¦)Rzê×ÑÚ§�¯°ºÂÍ ž'ß½ºnÿ‘9e$ë(Äa  ÒE\
+M½»´Î�Ì�JÁžJQ(²‰ëùL1’r>-‘ 
+­l	[ÈQÒbZà|p¿‡S}WÎø^bOÜ„Ä#lƒÏ�ÏCói­bDøu¶þ€à†
+
+endstream
+endobj
+
+3 0 obj
+  1410
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 128.000000 128.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001528 00000 n
+0000001551 00000 n
+0000001726 00000 n
+0000001800 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1859
+%%EOF

+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noForm.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noForm.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noForm.imageset/Type_noForm.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noInternet.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noInternet.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noInternet.imageset/Type_noInternet.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noLink.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noLink.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noLink.imageset/Type_noLink.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noOutline.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noOutline.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 65 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noOutline.imageset/Type_noOutline.pdf

@@ -0,0 +1,65 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Filter /FlateDecode
+     /Length 3 0 R
+  >>
+stream
+xÅ—MŽÔ0…÷>EÖHÿÛÙk਑ÒH‰óóìNªÞM3Hx©ù’zUår÷«·Ÿ~|Ù>}x÷zyóѼÒÿ¶ïæ›ñÖ�±¸Óx)–Üó͆–k©KµÑ§Pݲ]�³Õ×’*\kX“ÝH«nù¾}5-Û¯Rï��~ër5ED•î&Ù˜¢Ïh”'Ýj]høc†TúsaÙŒPߕݤ‘æa49¯J¶3íšî¦UëZN¡(lí|îЭ„áÖõJʽ`ÆR�†¡i8z8�›¹ðLÆ“_M°¥•°z¦ÚQ(”–}ÌÄδúL
+ñ]Ù!�O£©Èñx_¸`@ëH%
+uW„ª”ÔêÏçÝLèî3©PRî3IX«Ó04
GBc&nÓyÜ1¿!ÚZ±&ÝRƒÍ¹F¬ð«AŒÏ x¥;Ó¬”支öôJbŽ÷+ÕµLtgÊʪ0§¤p1KeãeŽÙ®-·VO+QÊõÁK(ìSaNIáB9Ù€@£¯¦¦­Dw¦U))Ì))àýÀÛ‚^âm
+Ŷ]èñôi¥¬V¥¤0§¤Àõ¥l}h56ÄËÁzŸbÆþ#tgÚ”’Âœ’꫶ä¼'Žxù\]JO))“Âœ’×ç«­ÎùÒç3…­D±Ÿ
ø(œTæ”.æóóÕ¼ê7
+ÂÅc+b��Tvks}ªÉã{¥ý#E:˜T„U‹úÑ…XÔ“Bñž1rF-÷”R‡Õð.3Ç»jN(Fa´Þ¥\úÆÛÖŒ/ÖâÓySm&«¯P¬$ÓA·„b5ã‚AQˆ‰M±Å€¤Ø’šF‘$416|ípÅ)ë"ý8€ÁƸE�]K˜&|wëöe¤ƒÖµ1;ÿ§sØ�a`Å^o:ܹ4‰BLÔ7£T ^s�’šF‘{šŽ é1鵇ŒÇ·Dàug/ô�ónœ¤u+θ®ÀY�rZµ-î�‹’…@̾ÀÙf1cä|g-kîV¯ç nýu)a(a(Ä�Bà,í#ç;KÁA—^ʳÛ2¦CŽ£'›e=cä{g%í–>*ynS††2|´O6KzÆÈ÷ÎBŠ´äQ!OÛã‚àîƒ+Æp2ÅÖn¿†ð+“èKIîãnyÈpÁà½@a¯PðØ 1]"º@ÑpdÂï
+MHŠLjÖ“„~ú�L½äH”Š”û8ïŽÓ†B¨
+œ-�#gŽ³žù_!Îñ'ÔV’è²û¹2Q<
+endstream
+endobj
+
+3 0 obj
+  965
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 128.000000 128.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001083 00000 n
+0000001105 00000 n
+0000001280 00000 n
+0000001354 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1413
+%%EOF

+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScannedFile.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noScannedFile.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 136 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScannedFile.imageset/Type_noScannedFile.pdf

@@ -0,0 +1,136 @@
+%PDF-1.7
+
+1 0 obj
+  << /Length 2 0 R >>
+stream
+0.722656 0 0.014160 0.000000 0.708496 0.718750 d1
+
+endstream
+endobj
+
+2 0 obj
+  50
+endobj
+
+3 0 obj
+  [ 0.722656 ]
+endobj
+
+4 0 obj
+  << /Length 5 0 R >>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (FigmaPDF)
+   /Ordering (FigmaPDF)
+   /Supplement 0
+>> def
+/CMapName /A-B-C def
+/CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<00> <0041>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endstream
+endobj
+
+5 0 obj
+  332
+endobj
+
+6 0 obj
+  << /Subtype /Type3
+     /CharProcs << /C0 1 0 R >>
+     /Encoding << /Type /Encoding
+                  /Differences [ 0 /C0 ]
+               >>
+     /Widths 3 0 R
+     /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ]
+     /FontMatrix [ 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 ]
+     /Type /Font
+     /ToUnicode 4 0 R
+     /FirstChar 0
+     /LastChar 0
+     /Resources << >>
+  >>
+endobj
+
+7 0 obj
+  << /Font << /F1 6 0 R >> >>
+endobj
+
+8 0 obj
+  << /Filter /FlateDecode
+     /Length 9 0 R
+  >>
+stream
+x•˜ËŽE†÷ý½¤tê~Ùr•Ø³VGDƒ4'ŠÄóó¹§Ûöd:j3ž¿Ú¿]v•]uÞ~ûÇßÞþøù‡¯×o~YÞÚ·Ë_KÜÂ>Öp
+oTÒ¹4O)ªt»/aë±·ÒÑíi–˜D(3¤°~¸½_jÎcÔµ÷­”Z_6 5ŒÆú´”¹�‘jÍëh[H%çðŒæXR삶Rg®k[�¡×°Ž~úRvÎ2†ÃnDûp ”[.pVæSukµ
œ0¨œÒmQP‰Ÿ;xû)4ãÐÏÁ7åUðii¯í7õòàíRbøDš!¤.„ÈûtÌÚ3êD²×ãÚQëu0Û¶B—ïæ–2Imp’©>RD&Sy
++œ‚~œÕ§åq©{‡|=·šS#d;áMkq®cl¡0½s„mÖ9KZöf}¬’ëš»aê´¼ÆZOÑÀ§%mm´4“U Õ9檃4þ7¶1Ï'ÃÞz
+Ñ8ôsEðMyÜÓ öc6°«tðN…”ø¶8�\’�=¯[±È¶�øÅ‹¥RcÙg³!®=n¹3Ÿà¼Ê”dðÝWËûå'jÙáX¦*¥ Ž\º¬F…cŽŽ0P"³¹¶
+÷gkBJ[¹D|ë[ì©°�î�a+3—)¥úï¨1€*ƒGq‡(1$<í¾/±ÁÇl5CŸÚÉɉ*Á%èõOœèÛ“ãäU*´'ˆ-‹Uýtê�n½ǹŘ8½kŠdŽ48ýÊ›³ãŒÃ7J˜]ªÚZø9ýµÎ4d¾ÜD÷º{®_[¦ð\QÙ½#v»õìb¸ù"Iê<¨Oˆ-ÝP8;œ
ÚM"‰S�ð_=2TüwmŽº8-üaXã,‰'cÍñ”>HÊùi©'Ú8É�Bj ÚÃÌd?
W`J8I\�3'\çºM݃‘4J’ÞÖz¤�ˆefì�CÁ “_£ìiCu-Ò™/ÀGƒu.Š©pLIhù—aŽ¹@˜ny— j;ìX}9ׯõsE|ô1P§\F4–•»G5ûN²YÕ1Œ»Œ&ÝPVh(qܨcð¨nC�t5«<·ÅP³	§úr�ÃýOÃEX4
+š>FŸ7‡Ar|RÐ’ƒu”öñ	T	<xlŒââ ¹7·òùPЧCׂUw eélÞZ{tú¢.ÕBIžrà*–z,£<×¥æÝ^"%Ê4¤.…-so@éM;•î˜æãNè/`º·Ä4$j¥ö�#nFTè"ô K”®ÕJhÒz¤i”š1æ@.Fµµ�%iƯÌK@
+WGÉ\ßD.›,FšqåFKÍϬ‹�.%=VNëx°m9÷ÁuÏÔ‰ýkN1鎼X*¸º@ã'š´�Øü
+|vVoB‡¤h"5‰[yv´|{aLœø_}éùÿúa‘ËÜ>L_?'¹EÝ|x¸/o¿�fâáÝòëúÅoˆ_®¿¯?.ß=üwÿºÅAhø‹„¤šMùɾéx�ûB¦Y…'I¹Tœ`E…ëµ²¼|9$öÜ?vzÅYþ2“½Ê_†Q’PU¾�6†N«*°ÏN‘ýrH~…ר
+˜:EÄÒ¹�¸ï7ny
çRƒžK¤Içð6æy³G^¹&n…ŸOWá™FååÃËeNÊ2å›cǹ*kÝx5Þ«rêv¬½Ä>Ö§u‘²[ïN(¬°É®õ‘¸F�ÀÈ�R`Àkcë<3p3Iœ‡I‰q('ÙÐl¨\‚Nÿqa;PBú”ZReÅØ*ˆ¡æ²¾ä6$1¸ŠOlˆb…òܱ�ùÄÊÕúýr¡<á¹Y·yò‹%sÊ;f7ìGC…zê`bOd:Xï�w\ûÜ ”v1/nÎCÅg…-‘>çsãG6$½Ÿ_!Ò˜.°±§A/²";]~”r ùÓð‡’Lß0Ìœáþ÷ÇŸOØ?I7Éý
+endstream
+endobj
+
+9 0 obj
+  1517
+endobj
+
+10 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 128.000000 128.000000 ]
+     /Resources 7 0 R
+     /Contents 8 0 R
+     /Parent 11 0 R
+  >>
+endobj
+
+11 0 obj
+  << /Kids [ 10 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+12 0 obj
+  << /Pages 11 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 13
+0000000000 65535 f
+0000000010 00000 n
+0000000116 00000 n
+0000000137 00000 n
+0000000168 00000 n
+0000000556 00000 n
+0000000578 00000 n
+0000000990 00000 n
+0000001036 00000 n
+0000002637 00000 n
+0000002660 00000 n
+0000002837 00000 n
+0000002913 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 12 0 R
+   /Size 13
+>>
+startxref
+2974
+%%EOF

+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScanner.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noScanner.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noScanner.imageset/Type_noScanner.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSearch.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noSearch.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSearch.imageset/Type_noSearch.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSign.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noSign.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSign.imageset/Type_noSign.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSignature.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noSignature.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noSignature.imageset/Type_noSignature.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noStamp.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noStamp.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noStamp.imageset/Type_noStamp.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noWatermark.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_noWatermark.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Empty/Type_noWatermark.imageset/Type_noWatermark.pdf


+ 12 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Type_empty.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "Type_empty.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/KMComponentLibrary/KMComponentLibrary/Component.xcassets/Type_empty.imageset/Type_empty.pdf


+ 111 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Empty/ComponentEmpty.swift

@@ -18,7 +18,10 @@ public class ComponentEmpty: ComponentBaseXibView {
     @IBOutlet var subTitleTopConst: NSLayoutConstraint!
     
     private var _properties : ComponentEmptyProperty = ComponentEmptyProperty()
-     
+    
+    private var action: Selector?   // 点击事件
+    private weak var target: AnyObject? // 对象目标
+    
     public override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
 
@@ -85,6 +88,51 @@ public class ComponentEmpty: ComponentBaseXibView {
         
         if let image = self.properties.image {
             self.iconImage.image = image
+        } else {
+            if properties.emptyType == .empty {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_empty")
+            } else if properties.emptyType == .noSearch {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noSearch")
+            } else if properties.emptyType == .noOutline {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noOutline")
+            } else if properties.emptyType == .noBookmark {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noBookmark")
+            } else if properties.emptyType == .noAnnotation {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noAnnotation")
+            } else if properties.emptyType == .noSignature {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noSignature")
+            } else if properties.emptyType == .noForm {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noForm")
+            } else if properties.emptyType == .noStamp {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noStamp")
+            } else if properties.emptyType == .noSign {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noSign")
+            } else if properties.emptyType == .addImage {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_addImage")
+            } else if properties.emptyType == .noLink {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noLink")
+            } else if properties.emptyType == .noWatermark {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noWatermark")
+            } else if properties.emptyType == .noBates {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noBates")
+            } else if properties.emptyType == .noCompare {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noCompare")
+            } else if properties.emptyType == .noFile {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noFile")
+            } else if properties.emptyType == .noScannedFile {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noScannedFile")
+            } else if properties.emptyType == .noScanner {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noScanner")
+            } else if properties.emptyType == .noInternet {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_noInternet")
+            } else if properties.emptyType == .add_File {
+                iconImage.image = ComponentLibrary.shared.image(forResource: "Type_add_normal")
+                if properties.state == .hover {
+                    iconImage.image = ComponentLibrary.shared.image(forResource: "Type_add-hover")
+                } else if properties.state == .pressed {
+                    iconImage.image = ComponentLibrary.shared.image(forResource: "Type_add_pressed")
+                }
+            }
         }
         
         self.titleLabel.textColor = properties.propertyInfo.textColor
@@ -113,4 +161,66 @@ public class ComponentEmpty: ComponentBaseXibView {
         
     }
     
+    //暂时只有type为add_File时支持点击
+    public func setTarget(_ target: AnyObject?, action: Selector?) {
+        self.target = target!
+        self.action = action!
+    }
+    
+    //MARK: - MouseEvent
+    public override func mouseEntered(with event: NSEvent) {
+        super.mouseEntered(with: event)
+          
+    }
+    
+    public override func mouseMoved(with event: NSEvent) {
+        super.mouseMoved(with: event)
+        
+        if properties.emptyType == .add_File {
+            let point = convert(event.locationInWindow, from: nil)
+            if CGRectContainsPoint(iconImage.frame, point) {
+                properties.state = .hover
+            } else {
+                properties.state = .normal
+            }
+            self.refreshUI()
+        }
+    }
+     
+    public override func mouseExited(with event: NSEvent) {
+        super.mouseExited(with: event)
+        
+    }
+    
+    public override func mouseDown(with event: NSEvent) {
+        super.mouseDown(with: event)
+    
+        if properties.emptyType == .add_File {
+            let point = convert(event.locationInWindow, from: nil)
+            if CGRectContainsPoint(iconImage.frame, point) {
+                properties.state = .pressed
+            }
+            self.refreshUI()
+        }
+    }
+    
+    public override func mouseUp(with event: NSEvent) {
+        super.mouseUp(with: event)
+        
+        if properties.emptyType == .add_File {
+            let point = convert(event.locationInWindow, from: nil)
+            if CGRectContainsPoint(iconImage.frame, point) {
+                properties.state = .hover
+            } else {
+                properties.state = .normal
+            }
+        
+            self.refreshUI()
+            
+            if let target = target, let action = action {
+                _ = target.perform(action, with: self)
+            }
+        }
+    }
+    
 }

+ 3 - 3
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Empty/ComponentEmpty.xib

@@ -6,7 +6,7 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="ComponentEmpty" customModule="WComponentLibrary" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="ComponentEmpty" customModule="KMComponentLibrary" customModuleProvider="target">
             <connections>
                 <outlet property="contendBox" destination="mgf-vq-4rR" id="RBt-5d-txR"/>
                 <outlet property="iconImage" destination="7ju-Ni-oXO" id="Zqj-ea-dSi"/>
@@ -34,7 +34,7 @@
                                     <constraint firstAttribute="width" secondItem="7ju-Ni-oXO" secondAttribute="height" multiplier="1:1" id="Eyc-HV-RJC"/>
                                     <constraint firstAttribute="width" constant="128" id="NnS-ar-X16"/>
                                 </constraints>
-                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="ai_Appstore" id="RzZ-gx-hhQ"/>
+                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="test" id="RzZ-gx-hhQ"/>
                             </imageView>
                             <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h3w-66-q0g">
                                 <rect key="frame" x="92" y="28" width="17" height="16"/>
@@ -74,6 +74,6 @@
         </customView>
     </objects>
     <resources>
-        <image name="ai_Appstore" width="1278" height="720"/>
+        <image name="test" width="200" height="200"/>
     </resources>
 </document>

+ 34 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Empty/ComponentEmptyProperty.swift

@@ -8,8 +8,37 @@
 import Foundation
 import AppKit
 
+/*
+- 默认类型内部会自动调用一张图片,也可从外部传图片。
+- custom类型时需从外部传图片。
+ */
+@objc public enum componentEmptyType : Int {
+    case empty = 0
+    case noSearch
+    case noOutline
+    case noBookmark
+    case noAnnotation
+    case noSignature
+    case noForm
+    case noStamp
+    case noSign
+    case addImage
+    case noLink
+    case noWatermark
+    case noBates
+    case noCompare
+    case noFile
+    case noScannedFile
+    case noScanner
+    case noInternet
+    case add_File
+    case custom
+}
+
 public class ComponentEmptyProperty: NSObject {
     
+    public var emptyType: componentEmptyType = .empty
+    public var state: ComponentState = .normal
     public var image: NSImage? //icon
     public var text: String = "" //文本
     public var subText: String = "" //副文本
@@ -17,11 +46,15 @@ public class ComponentEmptyProperty: NSObject {
     
     public var propertyInfo = EmptyPropertyInfo()
     
-    public init(image: NSImage? = nil,
+    public init(emptyType: componentEmptyType = .empty,
+                state: ComponentState = .normal,
+                image: NSImage? = nil,
                 text: String = "",
                 subText: String = "",
                 imageWidth: CGFloat = 108) {
         
+        self.emptyType = emptyType
+        self.state = state
         self.image = image
         self.text = text
         self.subText = subText

+ 11 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/KMNHomeViewController.swift

@@ -130,6 +130,7 @@ extension KMNHomeViewController: KMHomeOpenViewDelegate {
 
 //MARK: - KMHomeRightViewDelegate
 extension KMNHomeViewController: KMHomeRightViewDelegate {
+    //点击管理快捷工具按钮
     func homeRightViewDidManageQuickTools(_ view: KMHomeRightView) {
         let quickToolWindowController: KMNQuickToolWindowController = KMNQuickToolWindowController.init(windowNibName: "KMNQuickToolWindowController")
         quickToolWindowController.own_beginSheetModal(for: self.view.window) { string in
@@ -137,10 +138,20 @@ extension KMNHomeViewController: KMHomeRightViewDelegate {
         }
     }
     
+    //点击快捷工具列表中的某一项
     func homeRightViewDidQuickToolsItemClicked(_ view: KMHomeRightView, _ toolType: HomeQuickToolType) {
         print("HomeQuickToolType = %d", toolType.rawValue)
     }
+ 
+    //最近文件列表删除更新结束后回调
+    func homeRightViewDidRecentFilesUpdated(_ view: KMHomeRightView) {
+        
+    }
     
+    //选择打开文件
+    func homeRightViewDidChooseFileToOpen(_ view: KMHomeRightView, _ fileURL: URL) {
+        
+    }
 }
 
 //MARK: - KMNQuickToolWindowDelegate

+ 1 - 2
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeQuickToolsView/KMHomeQuickToolsView.swift

@@ -89,7 +89,6 @@ public class KMHomeQuickToolsView: BaseXibView {
                 }
             }
             
-            var itemXValue = 0
             let itemWidth = (CGRectGetWidth(self.itemsContendView.frame) - 3*16)/4
             var itemHeight: CGFloat = 88
             if KMNHomeQuickToolManager.defaultManager.collapseTools {
@@ -99,7 +98,7 @@ public class KMHomeQuickToolsView: BaseXibView {
                 let toolType = HomeQuickToolType(rawValue: KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray[index])!
                 let toolMode = KMNHomeQuickToolMode.toolModeData(type: toolType)
                 
-                var rect = CGRectMake(CGFloat(index%4)*(itemWidth+16), CGRectGetHeight(self.itemsContendView.frame) - 12 - CGFloat(index/4)*(itemHeight+16) - itemHeight, itemWidth, itemHeight)
+                let rect = CGRectMake(CGFloat(index%4)*(itemWidth+16), CGRectGetHeight(self.itemsContendView.frame) - 12 - CGFloat(index/4)*(itemHeight+16) - itemHeight, itemWidth, itemHeight)
                 
                 let view: ComponentCardPDFTool = ComponentCardPDFTool()
                 view.properties = ComponentCardPDFToolProperty(collapse: KMNHomeQuickToolManager.defaultManager.collapseTools,

+ 15 - 1
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HeaderFooterView/KMHomeFilesEmptyHeaderView.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class KMHomeFilesEmptyHeaderView: NSView {
+class KMHomeFilesEmptyHeaderView: BaseXibView {
 
     override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
@@ -15,4 +15,18 @@ class KMHomeFilesEmptyHeaderView: NSView {
         // Drawing code here.
     }
     
+    public required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+    }
+    
+    public override func awakeFromNib() {
+        super.awakeFromNib()
+        
+    }
+    
 }

+ 40 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFilesItems/KMHistoryEmptyView.swift

@@ -0,0 +1,40 @@
+//
+//  KMHistoryEmptyView.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/10/15.
+//
+
+import Cocoa
+import KMComponentLibrary
+
+class KMHistoryEmptyView: BaseXibView {
+
+    
+    @IBOutlet var emptyView: ComponentEmpty!
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    public required init?(coder decoder: NSCoder) {
+        super.init(coder: decoder)
+        
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+    }
+    
+    public override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        emptyView.properties = ComponentEmptyProperty(emptyType: .add_File,
+                                                      text: KMLocalizedString("No Recently Opened Files"),
+                                                      subText: KMLocalizedString("Click to open the file or drag the file directly here to open the file."))
+        
+    }
+    
+}

+ 66 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFilesItems/KMHistoryEmptyView.xib

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHistoryEmptyView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="emptyView" destination="pzT-6X-APu" id="KFW-x6-HZP"/>
+            </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="520" height="184"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZlN-UQ-RDi">
+                    <rect key="frame" x="0.0" y="0.0" width="520" height="184"/>
+                    <subviews>
+                        <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="4uQ-GM-ek4">
+                            <rect key="frame" x="0.0" y="0.0" width="520" height="184"/>
+                            <view key="contentView" id="MnD-pQ-3AI">
+                                <rect key="frame" x="0.0" y="0.0" width="520" height="184"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <subviews>
+                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2y9-br-mBz">
+                                        <rect key="frame" x="174" y="-1" width="128" height="128"/>
+                                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="VRQ-Th-NQN"/>
+                                    </imageView>
+                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="pzT-6X-APu" customClass="ComponentEmpty" customModule="KMComponentLibrary">
+                                        <rect key="frame" x="0.0" y="0.0" width="520" height="184"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="520" id="X8U-ul-THo"/>
+                                            <constraint firstAttribute="height" constant="184" id="acX-zX-dRo"/>
+                                        </constraints>
+                                    </customView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="pzT-6X-APu" firstAttribute="centerY" secondItem="MnD-pQ-3AI" secondAttribute="centerY" id="Pzr-SC-rFs"/>
+                                    <constraint firstItem="pzT-6X-APu" firstAttribute="centerX" secondItem="MnD-pQ-3AI" secondAttribute="centerX" id="f5y-wm-cMC"/>
+                                </constraints>
+                            </view>
+                        </box>
+                    </subviews>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="4uQ-GM-ek4" secondAttribute="bottom" id="4Wy-ch-0KQ"/>
+                        <constraint firstItem="4uQ-GM-ek4" firstAttribute="leading" secondItem="ZlN-UQ-RDi" secondAttribute="leading" id="aqr-hS-Ptd"/>
+                        <constraint firstAttribute="trailing" secondItem="4uQ-GM-ek4" secondAttribute="trailing" id="g9g-AT-eRB"/>
+                        <constraint firstItem="4uQ-GM-ek4" firstAttribute="top" secondItem="ZlN-UQ-RDi" secondAttribute="top" id="wM7-af-yT5"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="ZlN-UQ-RDi" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="AhG-eZ-vE0"/>
+                <constraint firstAttribute="bottom" secondItem="ZlN-UQ-RDi" secondAttribute="bottom" id="BXs-qQ-x3i"/>
+                <constraint firstAttribute="trailing" secondItem="ZlN-UQ-RDi" secondAttribute="trailing" id="Pb0-gJ-g3I"/>
+                <constraint firstItem="ZlN-UQ-RDi" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="uY9-9N-QgE"/>
+            </constraints>
+            <point key="canvasLocation" x="104" y="169"/>
+        </customView>
+    </objects>
+</document>

+ 43 - 5
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/KMHomeRightView.swift

@@ -18,6 +18,9 @@ import KMComponentLibrary
  
     //最近文件列表删除更新结束后回调
     @objc optional func homeRightViewDidRecentFilesUpdated(_ view: KMHomeRightView)
+    
+    //选择打开文件
+    @objc optional func homeRightViewDidChooseFileToOpen(_ view: KMHomeRightView, _ fileURL: URL)
  
 }
 
@@ -28,6 +31,7 @@ public class KMHomeRightView: BaseXibView {
     
     var filesHeaderView: KMHomeFilesHeaderView = KMHomeFilesHeaderView()
     var quickToolsView: KMHomeQuickToolsView = KMHomeQuickToolsView()
+    var filesEmptyView: KMHistoryEmptyView = KMHistoryEmptyView()
      
     var groupView: ComponentGroup!
     var menuActionIndexPaths: Set<IndexPath> = []
@@ -89,7 +93,7 @@ public class KMHomeRightView: BaseXibView {
         collectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionFooter, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView"))
     }
     
-    func reloadData() {
+    public func reloadData() {
         
         HistoryFilesManager.manager.refreshHistoryFile()
         
@@ -97,6 +101,12 @@ public class KMHomeRightView: BaseXibView {
         
     }
     
+    //刷新快捷工具列表
+    public func reloadQuickTools() {
+        quickToolsView.reloadData()
+        
+    }
+    
     private func collectionViewSelectedChanged() {
         let indexs = collectionView.selectionIndexPaths
         HistoryFilesManager.manager.selectFiles.removeAll()
@@ -109,6 +119,7 @@ public class KMHomeRightView: BaseXibView {
         filesHeaderView.updateDeleteButtonState()
     }
     
+    //显示右键菜单
     func showFileMoreActionMenu(point: CGPoint) {
         var viewHeight: CGFloat = 8
         var menuItemArr: [ComponentMenuitemProperty] = []
@@ -190,6 +201,20 @@ public class KMHomeRightView: BaseXibView {
         }
     }
     
+    @objc func emptyViewAddFileClicked(_ sender: NSView) {
+        let openPanel = NSOpenPanel()
+        openPanel.allowedFileTypes = ["pdf", "PDF"]
+        openPanel.allowsMultipleSelection = false
+        openPanel.beginSheetModal(for: self.window!) { [weak self] result in
+             if result == NSApplication.ModalResponse.OK {
+                 if let url = openPanel.url {
+                     guard let weakSelf = self else { return }
+                     weakSelf.delegate?.homeRightViewDidChooseFileToOpen?(weakSelf, url)
+                 }
+            }
+        }
+    }
+    
     //MARK: - MouseEvent
     public override func rightMouseDown(with event: NSEvent) {
         super.rightMouseDown(with: event)
@@ -235,9 +260,6 @@ extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource,
         if HistoryFilesManager.manager.showMode == .Thumbnail {
             let item: KMHistoryFileThumbItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem"), for: indexPath) as! KMHistoryFileThumbItem
             item.fileURL = HistoryFilesManager.manager.files[indexPath.item]
-//            if let url = item.fileURL {
-//                item.isSelected = HistoryFilesManager.manager.selectFiles.contains(url)
-//            }
             item.reloadData()
             
             return item
@@ -283,7 +305,18 @@ extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource,
             }
         } else if kind == NSCollectionView.elementKindSectionFooter {
             let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("KMHomeFilesEmptyHeaderView"), for: indexPath) as! KMHomeFilesEmptyHeaderView
-            
+            if self.filesEmptyView.superview != nil {
+                self.filesEmptyView.removeFromSuperview()
+            }
+            if indexPath.section == 1 &&
+                HistoryFilesManager.manager.files.count == 0 {
+                
+                filesEmptyView.frame = CGRectMake((CGRectGetWidth(collectionView.frame)-520)/2, (344-184)/2, 520, 184)
+                filesEmptyView.autoresizingMask = [.minXMargin, .maxXMargin, .minYMargin, .maxYMargin]
+                filesEmptyView.emptyView.setTarget(self, action: #selector(emptyViewAddFileClicked(_:)))
+                view.addSubview(self.filesEmptyView)
+                
+            }
             return view
         }
         return NSView()
@@ -315,7 +348,12 @@ extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource,
     public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForFooterInSection section: Int) -> NSSize {
         if section == 0 {
             return NSSize(width: 0, height: 40-16)
+        } else if section == 1 {
+            if HistoryFilesManager.manager.files.count == 0 {
+                return NSSize(width: collectionView.frame.size.width, height: 344)
+            }
         }
+        
         return NSSize(width: 0, height: 0.01)
         
     }

+ 7 - 7
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/KMHomeRightView.xib

@@ -15,25 +15,25 @@
         <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="402" height="468"/>
+            <rect key="frame" x="0.0" y="0.0" width="341" height="307"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
                 <box fixedFrame="YES" boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="f83-m3-SQD">
-                    <rect key="frame" x="0.0" y="0.0" width="402" height="468"/>
+                    <rect key="frame" x="0.0" y="0.0" width="341" height="307"/>
                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                     <view key="contentView" id="e5g-bi-MA7">
-                        <rect key="frame" x="0.0" y="0.0" width="402" height="468"/>
+                        <rect key="frame" x="0.0" y="0.0" width="341" height="307"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
                             <scrollView wantsLayer="YES" fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JYc-HP-w9v">
-                                <rect key="frame" x="0.0" y="0.0" width="402" height="468"/>
+                                <rect key="frame" x="0.0" y="0.0" width="341" height="307"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 <clipView key="contentView" id="8DI-YV-2Wo">
-                                    <rect key="frame" x="0.0" y="0.0" width="402" height="468"/>
+                                    <rect key="frame" x="0.0" y="0.0" width="341" height="307"/>
                                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                     <subviews>
                                         <collectionView selectable="YES" allowsMultipleSelection="YES" id="5OB-sb-Wo4">
-                                            <rect key="frame" x="0.0" y="0.0" width="402" height="286"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="341" height="307"/>
                                             <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
                                             <collectionViewFlowLayout key="collectionViewLayout" id="EPd-CT-cRT">
                                                 <size key="itemSize" width="1" height="1"/>
@@ -55,7 +55,7 @@
                     </view>
                 </box>
             </subviews>
-            <point key="canvasLocation" x="93" y="26"/>
+            <point key="canvasLocation" x="62.5" y="-54.5"/>
         </customView>
     </objects>
 </document>

+ 16 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -5429,6 +5429,12 @@
 		BBFCCE082B56988C003742B3 /* KMPreferenceCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFCCE072B56988C003742B3 /* KMPreferenceCommon.swift */; };
 		BBFCCE092B56988C003742B3 /* KMPreferenceCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFCCE072B56988C003742B3 /* KMPreferenceCommon.swift */; };
 		BBFCCE0A2B56988C003742B3 /* KMPreferenceCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFCCE072B56988C003742B3 /* KMPreferenceCommon.swift */; };
+		BBFD225D2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFD225C2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift */; };
+		BBFD225E2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFD225C2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift */; };
+		BBFD225F2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFD225C2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift */; };
+		BBFD22622CBE16B200DA4ABD /* KMHistoryEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBFD22612CBE16B200DA4ABD /* KMHistoryEmptyView.xib */; };
+		BBFD22632CBE16B200DA4ABD /* KMHistoryEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBFD22612CBE16B200DA4ABD /* KMHistoryEmptyView.xib */; };
+		BBFD22642CBE16B200DA4ABD /* KMHistoryEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBFD22612CBE16B200DA4ABD /* KMHistoryEmptyView.xib */; };
 		BBFD2B122AEFAAF70016C456 /* KMBatchOperateBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFD2B112AEFAAF70016C456 /* KMBatchOperateBaseViewController.swift */; };
 		BBFD2B142AEFAB8F0016C456 /* KMOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBFD2B132AEFAB8F0016C456 /* KMOperationQueue.swift */; };
 		BBFD2B162AEFAC9C0016C456 /* KMBatchOperateBaseViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBFD2B152AEFAC9B0016C456 /* KMBatchOperateBaseViewController.xib */; };
@@ -7871,6 +7877,8 @@
 		BBFBE73928DD7C43008B2335 /* PDF_ Master_DMGUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PDF_ Master_DMGUITests.swift"; sourceTree = "<group>"; };
 		BBFBE73B28DD7C43008B2335 /* PDF_ Master_DMGUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PDF_ Master_DMGUITestsLaunchTests.swift"; sourceTree = "<group>"; };
 		BBFCCE072B56988C003742B3 /* KMPreferenceCommon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPreferenceCommon.swift; sourceTree = "<group>"; };
+		BBFD225C2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHistoryEmptyView.swift; sourceTree = "<group>"; };
+		BBFD22612CBE16B200DA4ABD /* KMHistoryEmptyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMHistoryEmptyView.xib; sourceTree = "<group>"; };
 		BBFD2B112AEFAAF70016C456 /* KMBatchOperateBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchOperateBaseViewController.swift; sourceTree = "<group>"; };
 		BBFD2B132AEFAB8F0016C456 /* KMOperationQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMOperationQueue.swift; sourceTree = "<group>"; };
 		BBFD2B152AEFAC9B0016C456 /* KMBatchOperateBaseViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMBatchOperateBaseViewController.xib; sourceTree = "<group>"; };
@@ -11849,6 +11857,8 @@
 				BB19A74E2CB7C710008204DC /* KMHistoryFileThumbItem.xib */,
 				BB19A7552CB7C724008204DC /* KMHistoryFileListItem.swift */,
 				BB19A7562CB7C724008204DC /* KMHistoryFileListItem.xib */,
+				BBFD225C2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift */,
+				BBFD22612CBE16B200DA4ABD /* KMHistoryEmptyView.xib */,
 			);
 			path = HistoryFilesItems;
 			sourceTree = "<group>";
@@ -15105,6 +15115,7 @@
 				BB031B632C47BB080099F7AD /* KMUserFeekbackWindowController.xib in Resources */,
 				BB5A9D642CB6521400F64C1F /* KMPDFSecToolbarController.xib in Resources */,
 				BBD1F77F296F9BE000343885 /* KMPageEditSettingBaseWindowController.xib in Resources */,
+				BBFD22622CBE16B200DA4ABD /* KMHistoryEmptyView.xib in Resources */,
 				BBB3769E2B10A7FD009539CC /* a_4a.png in Resources */,
 				BB24D4AA2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				ADDF838C2B391A5D00A81A4E /* DSignatureFileListCellView.xib in Resources */,
@@ -15672,6 +15683,7 @@
 				BBE788A32CBD2463008086E2 /* DropdownDemoVC.xib in Resources */,
 				ADFA8F0E2B579957002595A4 /* KMSearchFindView.xib in Resources */,
 				9F0201762A1B488C00C9B673 /* KMAITranslationVC.xib in Resources */,
+				BBFD22632CBE16B200DA4ABD /* KMHistoryEmptyView.xib in Resources */,
 				AD7D5CE92B96B3B2006562CD /* KMBookmarkOutlineSeparatorCellView.xib in Resources */,
 				9F72D20C2994BDAF00DCACF1 /* KMNotificationVC.xib in Resources */,
 				9F512CCB2B4640AB00EC0BC3 /* KMPageDisplayCustomThemesCollectionViewItem.xib in Resources */,
@@ -16284,6 +16296,7 @@
 				BB031B652C47BB080099F7AD /* KMUserFeekbackWindowController.xib in Resources */,
 				BB5A9D662CB6521400F64C1F /* KMPDFSecToolbarController.xib in Resources */,
 				ADFCEB4D2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
+				BBFD22642CBE16B200DA4ABD /* KMHistoryEmptyView.xib in Resources */,
 				ADC63E4D2A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.xib in Resources */,
 				BB0FE0362B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */,
 				BB5DF1F62959C9F00025CDA1 /* KMHeaderFooterPropertyMainController.xib in Resources */,
@@ -17653,6 +17666,7 @@
 				BB031B722C47BB080099F7AD /* KMUserFbEmailItemView.swift in Sources */,
 				BB853C822AF8BAF0009C20C1 /* KMSetPasswordObject.swift in Sources */,
 				ADE86A8A2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */,
+				BBFD225D2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */,
 				89D2D2C129495D2100BFF5FE /* KMFormModel.swift in Sources */,
 				BBA19F3F29ADE40A001A285A /* KMCellEmptyView.m in Sources */,
 				BB7185412C2B0AAF00C1156B /* KMEditPDFToolbarItemView.swift in Sources */,
@@ -18736,6 +18750,7 @@
 				BB147006299DC0D100784A6A /* OIDFieldMapping.m in Sources */,
 				BB4A94A12B04D8EC00940F8B /* KMGOCRManager.m in Sources */,
 				BBB9B32F299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */,
+				BBFD225E2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */,
 				BB3EAEAE293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */,
 				BB8810D72B4F984000AFA63E /* JSONKit.m in Sources */,
 				ADDF83242B391A5C00A81A4E /* CDSDrawView.m in Sources */,
@@ -20205,6 +20220,7 @@
 				BB031B742C47BB090099F7AD /* KMUserFbEmailItemView.swift in Sources */,
 				BB8F457C295AFB330037EA22 /* KMHeaderFooterFontInfoView.swift in Sources */,
 				ADDF83A32B391A5D00A81A4E /* DSignatureFileListViewController.swift in Sources */,
+				BBFD225F2CBE16AB00DA4ABD /* KMHistoryEmptyView.swift in Sources */,
 				AD68782329A5FADC005B5210 /* KMLightMemberCache.swift in Sources */,
 				AD7D5C832B8ECD09006562CD /* KMPDFSynchronizer.swift in Sources */,
 				BB7185432C2B0AAF00C1156B /* KMEditPDFToolbarItemView.swift in Sources */,

+ 16 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -84,5 +84,21 @@
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "F9E55924-AB5F-4643-9619-66B8F00A7D6C"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/KMClass/KMHomeViewController/KMNHomeViewController.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "160"
+            endingLineNumber = "160"
+            landmarkName = "quickToolWindowControllerUpdate()"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>