KMDisplayPreferences.swift 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. //
  2. // KMDisplayPreferences.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2023/11/6.
  6. //
  7. import Cocoa
  8. @objcMembers class KMDisplayPreferences: NSViewController {
  9. @IBOutlet weak var thumbSizeLabel: NSTextField!
  10. @IBOutlet weak var pagesLabel: NSTextField!
  11. @IBOutlet weak var pagesSlider: NSSlider!
  12. @IBOutlet weak var snapshotLabel: NSTextField!
  13. @IBOutlet weak var snapshotSlider: NSSlider!
  14. @IBOutlet weak var discreteSizeCheckbox: NSButton!
  15. @IBOutlet var tableFontLabelField: NSTextField!
  16. @IBOutlet var tableFontComboBox: NSComboBox!
  17. @IBOutlet weak var displayLabel: NSTextField!
  18. @IBOutlet var greekingLabelField: NSTextField!
  19. @IBOutlet var greekingTextField: NSTextField!
  20. @IBOutlet var antiAliasCheckButton: NSButton!
  21. @IBOutlet weak var backgroundColorLabel: NSTextField!
  22. @IBOutlet weak var normalColorLabel: NSTextField!
  23. @IBOutlet weak var normalColorWell: NSColorWell!
  24. @IBOutlet weak var fullScreenLabel: NSTextField!
  25. @IBOutlet weak var fullScreenColorWell: NSColorWell!
  26. @IBOutlet weak var readBarLabel: NSTextField!
  27. @IBOutlet weak var readingbarColorLabel: NSTextField!
  28. @IBOutlet weak var readBarColorWell: NSColorWell!
  29. @IBOutlet weak var invertBarButton: NSButton!
  30. var thumbnailSizeLabels: [NSTextField] = []
  31. var thumbnailSizeControls: [NSControl] = []
  32. var colorLabels: [NSTextField] = []
  33. var colorControls: [NSControl] = []
  34. /*
  35. - (NSUInteger)countOfSizes;
  36. - (NSNumber *)objectInSizesAtIndex:(NSUInteger)anIndex;
  37. */
  38. let SKDefaultFontSizes: [CGFloat] = [8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 16.0, 18.0, 20.0, 24.0, 28.0, 32.0, 48.0, 64.0]
  39. override var nibName: NSNib.Name? {
  40. return "DisplayPreferences"
  41. }
  42. override func loadView() {
  43. super.loadView()
  44. self.thumbnailSizeLabels = [self.pagesLabel, self.snapshotLabel]
  45. self.thumbnailSizeControls = [self.pagesSlider, self.snapshotSlider, self.discreteSizeCheckbox]
  46. _ = KMAutoSizeLabelFields(self.thumbnailSizeLabels, self.thumbnailSizeControls, false)
  47. self.discreteSizeCheckbox.sizeToFit()
  48. _ = KMAutoSizeLabelFields([self.tableFontLabelField], [self.tableFontComboBox], false)
  49. _ = KMAutoSizeLabelFields([self.greekingLabelField], [self.greekingTextField], false)
  50. self.antiAliasCheckButton.sizeToFit()
  51. self.colorLabels = [self.normalColorLabel, self.readingbarColorLabel]
  52. self.colorControls = [self.normalColorWell, self.fullScreenLabel, self.fullScreenColorWell, self.readBarColorWell, self.invertBarButton]
  53. _ = KMAutoSizeLabelFields(self.colorLabels, self.colorControls, false)
  54. _ = KMAutoSizeLabelFields([self.fullScreenLabel], [self.fullScreenColorWell], false);
  55. self.invertBarButton.sizeToFit()
  56. var w = 0.0
  57. for view in self.view.subviews {
  58. if view.autoresizingMask.contains(.width) == false {
  59. var x = NSMaxX(view.frame)
  60. if view.isKind(of: NSSlider.self) || view.isKind(of: NSButton.self) {
  61. x -= 2.0
  62. } else if view.isKind(of: NSComboBox.self) {
  63. x -= 3.0
  64. }
  65. w = fmax(w, x)
  66. }
  67. }
  68. var size = self.view.frame.size
  69. size.width = w + 20.0
  70. self.view.setFrameSize(size)
  71. }
  72. override func viewDidLoad() {
  73. super.viewDidLoad()
  74. // Do view setup here.
  75. self.pagesSlider.target = self
  76. self.pagesSlider.action = #selector(pageSliderAction)
  77. self.snapshotSlider.target = self
  78. self.snapshotSlider.action = #selector(snapshotSliderAction)
  79. self.tableFontComboBox.addItems(withObjectValues: SKDefaultFontSizes)
  80. self.tableFontComboBox.selectItem(at: 4)
  81. self.tableFontComboBox.delegate = self
  82. self.greekingTextField.delegate = self
  83. self.antiAliasCheckButton.target = self
  84. self.antiAliasCheckButton.action = #selector(antiAliasCheckAction)
  85. self.normalColorWell.target = self
  86. self.normalColorWell.action = #selector(normalColorAction)
  87. self.fullScreenColorWell.target = self
  88. self.fullScreenColorWell.action = #selector(fullScreenColorAction)
  89. self.readBarColorWell.target = self
  90. self.readBarColorWell.action = #selector(readBarColorAction)
  91. self.invertBarButton.target = self
  92. self.invertBarButton.action = #selector(invertBarAction)
  93. self.greekingTextField.formatter = NumberFormatter()
  94. // 赋值
  95. self.pagesSlider.floatValue = KMPreference.shared.thumbPageSize
  96. self.snapshotSlider.floatValue = KMPreference.shared.thumbSnapshotSize
  97. self.tableFontComboBox.stringValue = String(format: "%.0f", KMPreference.shared.outlineFontSize)
  98. self.greekingTextField.stringValue = String(format: "%.0f", KMPreference.shared.greekThreshold)
  99. self.antiAliasCheckButton.state = KMPreference.shared.antiAliasText ? .on : .off
  100. self.normalColorWell.color = KMPreference.shared.displayBackgroundNormalColor
  101. self.fullScreenColorWell.color = KMPreference.shared.displayBackgroundFullScreenColor
  102. self.readBarColorWell.color = KMPreference.shared.readBarColor
  103. self.invertBarButton.state = KMPreference.shared.invertBar ? .on : .off
  104. }
  105. override var title: String? {
  106. set {
  107. super.title = newValue
  108. }
  109. get {
  110. KMLocalizedString("Display", "Preference pane label")
  111. }
  112. }
  113. @objc func pageSliderAction(_ sender: NSSlider) {
  114. KMPreference.shared.thumbPageSize = self.pagesSlider.floatValue
  115. }
  116. @objc func snapshotSliderAction(_ sender: NSSlider) {
  117. KMPreference.shared.thumbSnapshotSize = self.snapshotSlider.floatValue
  118. }
  119. @IBAction func changeDiscreteThumbnailSizes(_ sender: AnyObject?) {
  120. let slider1 = self.pagesSlider
  121. let slider2 = self.snapshotSlider
  122. let button = sender as? NSButton
  123. if let data = button?.state, data == .on {
  124. slider1?.numberOfTickMarks = 8
  125. slider2?.numberOfTickMarks = 8
  126. slider1?.allowsTickMarkValuesOnly = true
  127. slider2?.allowsTickMarkValuesOnly = true
  128. } else {
  129. slider1?.superview?.setNeedsDisplay(slider1!.frame)
  130. slider2?.superview?.setNeedsDisplay(slider2!.frame)
  131. slider1?.numberOfTickMarks = 0
  132. slider2?.numberOfTickMarks = 0
  133. slider1?.allowsTickMarkValuesOnly = false
  134. slider2?.allowsTickMarkValuesOnly = false
  135. }
  136. slider1?.sizeToFit()
  137. slider2?.sizeToFit()
  138. }
  139. @objc func antiAliasCheckAction(_ sender: NSButton) {
  140. KMPreference.shared.antiAliasText = self.antiAliasCheckButton.state == .on
  141. }
  142. @objc func normalColorAction(_ sender: NSColorWell) {
  143. KMPreference.shared.displayBackgroundNormalColor = sender.color
  144. }
  145. @objc func fullScreenColorAction(_ sender: NSColorWell) {
  146. KMPreference.shared.displayBackgroundFullScreenColor = sender.color
  147. }
  148. @objc func readBarColorAction(_ sender: NSColorWell) {
  149. KMPreference.shared.readBarColor = sender.color
  150. }
  151. @objc func invertBarAction(_ sender: NSButton) {
  152. KMPreference.shared.invertBar = sender.state == .on
  153. }
  154. /*
  155. - (NSUInteger)countOfSizes {
  156. return sizeof(SKDefaultFontSizes) / sizeof(CGFloat);
  157. }
  158. - (NSNumber *)objectInSizesAtIndex:(NSUInteger)anIndex {
  159. return [NSNumber numberWithDouble:SKDefaultFontSizes[anIndex]];
  160. }
  161. */
  162. }
  163. extension KMDisplayPreferences: KMPreferencePane {
  164. func defaultsDidRevert() {
  165. // no things.
  166. }
  167. }
  168. extension KMDisplayPreferences: NSComboBoxDelegate {
  169. func comboBoxSelectionDidChange(_ notification: Notification) {
  170. if self.tableFontComboBox.isEqual(to: notification.object) {
  171. KMPreference.shared.outlineFontSize = self.tableFontComboBox.floatValue
  172. }
  173. }
  174. }
  175. extension KMDisplayPreferences: NSTextFieldDelegate {
  176. func controlTextDidChange(_ obj: Notification) {
  177. if self.greekingTextField.isEqual(to: obj.object) {
  178. KMPreference.shared.greekThreshold = self.greekingTextField.floatValue
  179. }
  180. }
  181. }