CPDFPopMenuView.swift 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. //
  2. // CPDFPopMenuView.swift
  3. // ComPDFKit_Tools
  4. //
  5. // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. import UIKit
  13. public enum CPDFPopMenuViewType: Int {
  14. case setting = 0
  15. case pageEdit
  16. case info
  17. case save
  18. case share
  19. case addFile
  20. case watermark
  21. case security
  22. case flattened
  23. }
  24. public protocol CPDFPopMenuViewDelegate: AnyObject {
  25. func menuDidClick(at view: CPDFPopMenuView, clickType viewType: CPDFPopMenuViewType)
  26. }
  27. public class CPDFPopMenuView: UIView,UITableViewDelegate,UITableViewDataSource {
  28. public weak var delegate: CPDFPopMenuViewDelegate?
  29. private var menuItemTitleArr: [String] = []
  30. private var menuItemIconArr: [String] = []
  31. private var tableView: UITableView?
  32. var menuItemTypes: [NSNumber] = []
  33. override init(frame: CGRect) {
  34. super.init(frame: frame)
  35. self.menuItemTypes = [NSNumber(value: CPDFPopMenuViewType.setting.rawValue),
  36. NSNumber(value: CPDFPopMenuViewType.pageEdit.rawValue),
  37. NSNumber(value: CPDFPopMenuViewType.info.rawValue),
  38. NSNumber(value: CPDFPopMenuViewType.save.rawValue),
  39. NSNumber(value: CPDFPopMenuViewType.share.rawValue),
  40. NSNumber(value: CPDFPopMenuViewType.addFile.rawValue)]
  41. setUp()
  42. }
  43. init(_ frame: CGRect, Configuration configuration: CPDFConfiguration) {
  44. super.init(frame: frame)
  45. for num in configuration.showMoreItems {
  46. self.menuItemTypes.append(NSNumber(value: num.rawValue))
  47. }
  48. for num in menuItemTypes {
  49. switch CPDFPopMenuViewType(rawValue: num.intValue) {
  50. case .setting:
  51. menuItemTitleArr.append(NSLocalizedString("View Setting", comment: ""))
  52. menuItemIconArr.append("CNavigationImageNamePreview")
  53. case .pageEdit:
  54. menuItemTitleArr.append(NSLocalizedString("Document Editor", comment: ""))
  55. menuItemIconArr.append("CNavigationImageNamePageEditTool")
  56. case .info:
  57. menuItemTitleArr.append(NSLocalizedString("Document Info", comment: ""))
  58. menuItemIconArr.append("CNavigationImageNameInformation")
  59. case .save:
  60. menuItemTitleArr.append(NSLocalizedString("Save", comment: ""))
  61. menuItemIconArr.append("CNavigationImageNameSave")
  62. case .share:
  63. menuItemTitleArr.append(NSLocalizedString("Share", comment: ""))
  64. menuItemIconArr.append("CNavigationImageNameShare")
  65. case .addFile:
  66. menuItemTitleArr.append(NSLocalizedString("Open...", comment: ""))
  67. menuItemIconArr.append("CNavigationImageNameNewFile")
  68. case .watermark:
  69. menuItemTitleArr.append(NSLocalizedString("Watermark", comment: ""))
  70. menuItemIconArr.append("CNavigationImageNameWatermark")
  71. case .security:
  72. menuItemTitleArr.append(NSLocalizedString("Security", comment: ""))
  73. menuItemIconArr.append("CNavigationImageNameSecurity")
  74. case .flattened:
  75. menuItemTitleArr.append(NSLocalizedString("Save as Flattened PDF", comment: ""))
  76. menuItemIconArr.append("CNavigationImageNameFlattened")
  77. case .none:
  78. break
  79. }
  80. }
  81. tableView = UITableView()
  82. tableView?.layer.cornerRadius = 5.0
  83. tableView?.isScrollEnabled = false
  84. tableView?.separatorStyle = .none
  85. tableView?.delegate = self
  86. tableView?.dataSource = self
  87. tableView?.autoresizingMask = .flexibleWidth
  88. if tableView != nil {
  89. addSubview(tableView!)
  90. }
  91. }
  92. required init?(coder aDecoder: NSCoder) {
  93. super.init(coder: aDecoder)
  94. setUp()
  95. }
  96. private func setUp() {
  97. menuItemTitleArr = [
  98. NSLocalizedString("View Setting", comment: ""),
  99. NSLocalizedString("Document Editor", comment: ""),
  100. NSLocalizedString("Document Info", comment: ""),
  101. NSLocalizedString("Save", comment: ""),
  102. NSLocalizedString("Share", comment: ""),
  103. NSLocalizedString("Open...", comment: "")
  104. ]
  105. menuItemIconArr = [
  106. "CNavigationImageNamePreview",
  107. "CNavigationImageNamePageEditTool",
  108. "CNavigationImageNameInformation",
  109. "CNavigationImageNameSave",
  110. "CNavigationImageNameShare",
  111. "CNavigationImageNameNewFile"
  112. ]
  113. tableView = UITableView()
  114. tableView?.layer.cornerRadius = 5.0
  115. tableView?.isScrollEnabled = false
  116. tableView?.separatorStyle = .none
  117. tableView?.delegate = self
  118. tableView?.dataSource = self
  119. tableView?.autoresizingMask = .flexibleWidth
  120. if tableView != nil {
  121. addSubview(tableView!)
  122. }
  123. }
  124. public override func layoutSubviews() {
  125. super.layoutSubviews()
  126. tableView?.frame = bounds
  127. tableView?.reloadData()
  128. }
  129. // MARK: - tableview delegate & datasource
  130. public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  131. return menuItemTitleArr.count
  132. }
  133. public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  134. let reuseIdentifier = "CPDFPopMenuItem"
  135. if let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) as? CPDFPopMenuItem {
  136. cell.selectionStyle = .none
  137. cell.titleLabel?.text = menuItemTitleArr[indexPath.row]
  138. cell.iconImage?.image = UIImage(named: menuItemIconArr[indexPath.row], in: Bundle(for: type(of: self)), compatibleWith: nil)
  139. if indexPath.row == (menuItemTypes.count - 1) {
  140. cell.hiddenLineView(true)
  141. } else {
  142. cell.hiddenLineView(false)
  143. }
  144. return cell
  145. } else {
  146. let cell = CPDFPopMenuItem.init(style: .default, reuseIdentifier: reuseIdentifier)
  147. cell.selectionStyle = .none
  148. cell.titleLabel?.text = menuItemTitleArr[indexPath.row]
  149. cell.iconImage?.image = UIImage(named: menuItemIconArr[indexPath.row], in: Bundle(for: type(of: self)), compatibleWith: nil)
  150. if indexPath.row == (menuItemTypes.count - 1) {
  151. cell.hiddenLineView(true)
  152. } else {
  153. cell.hiddenLineView(false)
  154. }
  155. return cell
  156. }
  157. }
  158. public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  159. return 45
  160. }
  161. public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  162. let num = self.menuItemTypes[indexPath.row]
  163. delegate?.menuDidClick(at: self, clickType: CPDFPopMenuViewType(rawValue: num.intValue) ?? .setting)
  164. }
  165. }