123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508 |
- //
- // SettingsDisplayView.swift
- // PDF Reader Pro
- //
- // Created by Niehaoyu on 2024/9/26.
- //
- import Cocoa
- import KMComponentLibrary
- class SettingsDisplayView: BaseXibView {
- @IBOutlet weak var contendBox: NSBox!
-
- @IBOutlet weak var layoutZoomView: NSView!
- @IBOutlet weak var layoutZoomLabel: NSTextField!
- @IBOutlet weak var layoutLabel: NSTextField!
- @IBOutlet weak var layoutSelectView: ComponentSelect!
- @IBOutlet weak var zoomLabel: NSTextField!
- @IBOutlet weak var zoomSelectView: ComponentSelect!
-
- @IBOutlet weak var leftSideView: NSView!
- @IBOutlet weak var leftSideLabel: NSTextField!
- @IBOutlet weak var defaultOpenRadio: ComponentRadio!
- @IBOutlet weak var defaultOpenSelectView: ComponentSelect!
- @IBOutlet weak var remeberLastRadio: ComponentRadio!
- @IBOutlet weak var hideLeftSideRadio: ComponentRadio!
- @IBOutlet weak var prioritizeOutlineRadio: ComponentRadio!
- @IBOutlet weak var defaultOpenRadioWidthConst: NSLayoutConstraint!
- @IBOutlet weak var remeberLastRadioWidthConst: NSLayoutConstraint!
- @IBOutlet weak var hideLeftSideRadioWidthConst: NSLayoutConstraint!
- @IBOutlet weak var prioritizeOutlineCheckboxWidthConst: NSLayoutConstraint!
-
- @IBOutlet weak var propertyPanelView: NSView!
- @IBOutlet weak var propertyPanelLabel: NSTextField!
- @IBOutlet var autoExpandPropertyPanelCheckbox: ComponentCheckBox!
- @IBOutlet weak var showQuickCheckbox: ComponentCheckBox!
- @IBOutlet weak var showQuickCheckboxWidthConst: NSLayoutConstraint!
- @IBOutlet var propertyPanelWidthConst: NSLayoutConstraint!
-
- @IBOutlet weak var highlightView: NSView!
- @IBOutlet weak var highlightLabel: NSTextField!
- @IBOutlet weak var highlightLinkCheckbox: ComponentCheckBox!
- @IBOutlet weak var highlightFormCheckbox: ComponentCheckBox!
- @IBOutlet weak var highlightLinkBoxWidthConst: NSLayoutConstraint!
- @IBOutlet weak var highglightFormboxWidthConst: NSLayoutConstraint!
-
- @IBOutlet var autoScrollView: NSView!
- @IBOutlet var autoScrolllabel: NSTextField!
- @IBOutlet var timeLabel: NSTextField!
- @IBOutlet var autoTimeSlider: ComponentSlider!
- @IBOutlet var autoTimeSelect: ComponentSelect!
- @IBOutlet var timeValueLabel: NSTextField!
-
- @IBOutlet var jumpSpaceLabel: NSTextField!
- @IBOutlet var jumpSpaceSlider: ComponentSlider!
- @IBOutlet var jumpSpaceSelect: ComponentSelect!
- @IBOutlet var jumpSpaceValueLabel: NSTextField!
-
-
- deinit {
- NotificationCenter.default.removeObserver(self)
- }
-
- override func draw(_ dirtyRect: NSRect) {
- super.draw(dirtyRect)
- // Drawing code here.
- self.setTitleUI()
-
- self.setUpLayoutAndZoom()
-
- self.setUpLeftSidePanel()
-
- self.setUpPropertyPanel()
-
- self.setUpHighlight()
-
- setUpAutoScroll()
-
- self.reloadData()
- }
-
- 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()
-
- }
-
- func setTitleUI () {
-
- //获取颜色
- let titleLabelColor: NSColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
-
- let subtitleLabelColor: NSColor = ComponentLibrary.shared.getComponentColorFromKey("comp-field/colorText-filled-nor")
-
- //获取字体
- let titleLabelFont: NSFont = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
-
- let subtitleLabelFont: NSFont = ComponentLibrary.shared.getFontFromKey("mac/body-s-regular")
-
- //Layout and Zoom
- layoutZoomLabel.stringValue = KMLocalizedString("Default Layout and Zoom")
- layoutZoomLabel.textColor = titleLabelColor
- layoutZoomLabel.font = titleLabelFont
-
- layoutLabel.stringValue = KMLocalizedString("Page Layout:")
- layoutLabel.textColor = subtitleLabelColor
- layoutLabel.font = subtitleLabelFont
-
- zoomLabel.stringValue = KMLocalizedString("Zoom:")
- zoomLabel.textColor = subtitleLabelColor
- zoomLabel.font = subtitleLabelFont
-
- leftSideLabel.stringValue = KMLocalizedString("Left Side Panel")
- leftSideLabel.textColor = titleLabelColor
- leftSideLabel.font = titleLabelFont
-
- propertyPanelLabel.stringValue = KMLocalizedString("Property Panel")
- propertyPanelLabel.textColor = titleLabelColor
- propertyPanelLabel.font = titleLabelFont
-
- highlightLabel.stringValue = KMLocalizedString("Highlight")
- highlightLabel.textColor = titleLabelColor
- highlightLabel.font = titleLabelFont
-
- autoScrolllabel.stringValue = KMLocalizedString("Auto Scroll Options")
- autoScrolllabel.textColor = titleLabelColor
- autoScrolllabel.font = titleLabelFont
-
- timeLabel.stringValue = KMLocalizedString("Time Interval:")
- timeLabel.textColor = subtitleLabelColor
- timeLabel.font = subtitleLabelFont
-
- timeValueLabel.stringValue = KMLocalizedString("sec (1~100)")
- timeValueLabel.textColor = subtitleLabelColor
- timeValueLabel.font = subtitleLabelFont
-
- jumpSpaceLabel.stringValue = KMLocalizedString("Jump Space:")
- jumpSpaceLabel.textColor = subtitleLabelColor
- jumpSpaceLabel.font = subtitleLabelFont
-
- jumpSpaceValueLabel.stringValue = KMLocalizedString("px (10~1000)")
- jumpSpaceValueLabel.textColor = subtitleLabelColor
- jumpSpaceValueLabel.font = subtitleLabelFont
- }
-
- func setUpLayoutAndZoom() {
-
- layoutSelectView.properties = ComponentSelectProperties(size: .s,
- state: .normal,
- text: KMLocalizedString("Single Page Continuous"))
- if true {
- var menuItemArr: [ComponentMenuitemProperty] = []
- for string in ["Single Page", "Single Page Continuous", "Two Page", "Two Page Continuous",
- "Book Mode", "Book Mode Continuous"] {
- var itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
- itemSelected: false,
- isDisabled: false,
- keyEquivalent: nil,
- text: KMLocalizedString(string))
- if string == " " {
- itemProperty = ComponentMenuitemProperty.divider()
- }
- menuItemArr.append(itemProperty)
- }
- layoutSelectView.updateMenuItemsArr(menuItemArr)
- layoutSelectView.delegate = self
- }
-
- zoomSelectView.properties = ComponentSelectProperties(size: .s,
- state: .normal,
- text: KMLocalizedString("Adaptation Width"))
- if true {
- zoomSelectView.updateMenuItemsArr(KMPDFToolbarConfig.scaleZoomItems())
- zoomSelectView.delegate = self
- }
-
- }
-
- func setUpLeftSidePanel() {
- //Left Side Panel
- defaultOpenRadio.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Default Open"),
- checkboxType: .normal)
- defaultOpenRadioWidthConst.constant = defaultOpenRadio.properties.propertyInfo.viewWidth
-
- defaultOpenSelectView.properties = ComponentSelectProperties(size: .s,
- state: .normal,
- isDisabled: false,
- isError: false,
- leftIcon: false,
- placeholder: nil,
- errorText: nil,
- creatable: false,
- text: KMLocalizedString("Thumbnail"))
- if true {
- var menuItemArr: [ComponentMenuitemProperty] = []
- let ThumbnailProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: "Thumbnail")
- menuItemArr.append(ThumbnailProperty)
-
- let OutlineProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: "Outline")
- menuItemArr.append(OutlineProperty)
-
- let BookmarkProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: "Bookmark")
- menuItemArr.append(BookmarkProperty)
-
- let AnnotationProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: "Annotation")
- menuItemArr.append(AnnotationProperty)
-
- defaultOpenSelectView.updateMenuItemsArr(menuItemArr)
- defaultOpenSelectView.delegate = self
- }
-
- remeberLastRadio.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Same as the last open"),
- checkboxType: .normal)
- remeberLastRadioWidthConst.constant = remeberLastRadio.properties.propertyInfo.viewWidth
-
- hideLeftSideRadio.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Hide left side panel"),
- checkboxType: .normal)
- hideLeftSideRadioWidthConst.constant = hideLeftSideRadio.properties.propertyInfo.viewWidth
-
- prioritizeOutlineRadio.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Prioritize open the outline list when outlines are available"),
- checkboxType: .normal)
- prioritizeOutlineCheckboxWidthConst.constant = prioritizeOutlineRadio.properties.propertyInfo.viewWidth
-
- defaultOpenRadio.setTarget(self, action: #selector(leftSidePanelAction(_:)))
- remeberLastRadio.setTarget(self, action: #selector(leftSidePanelAction(_:)))
- hideLeftSideRadio.setTarget(self, action: #selector(leftSidePanelAction(_:)))
- prioritizeOutlineRadio.setTarget(self, action: #selector(leftSidePanelAction(_:)))
-
- }
-
- func setUpPropertyPanel() {
- //Property Panel
-
- autoExpandPropertyPanelCheckbox.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: true,
- text: KMLocalizedString("Automatically expand the properties panel"),
- checkboxType: SettingsManager.sharedInstance.showQuickActionBar ? .selected : .normal)
- autoExpandPropertyPanelCheckbox.setTarget(self, action: #selector(propertyPanelAction(_:)))
- autoExpandPropertyPanelCheckbox.toolTip = KMLocalizedString("If you don't want the automatic expansion mode to interfere with your immersive reading experience, you can turn this option off. You can still click the \"Properties\" icon to expand the panel when you need it (⌥⌘0).")
- propertyPanelWidthConst.constant = autoExpandPropertyPanelCheckbox.properties.propertyInfo.viewWidth
-
- showQuickCheckbox.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Always show quick action bar"),
- checkboxType: SettingsManager.sharedInstance.showQuickActionBar ? .selected : .normal)
- showQuickCheckbox.setTarget(self, action: #selector(propertyPanelAction(_:)))
- showQuickCheckboxWidthConst.constant = showQuickCheckbox.properties.propertyInfo.viewWidth
-
- }
-
- func setUpHighlight() {
- //Highlight
-
- highlightLinkCheckbox.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Highlight Link"),
- checkboxType: .normal)
- highlightLinkBoxWidthConst.constant = highlightLinkCheckbox.properties.propertyInfo.viewWidth
-
- highlightFormCheckbox.properties = ComponentCheckBoxProperty(size: .s,
- state: .normal,
- isDisabled: false,
- showhelp: false,
- text: KMLocalizedString("Highlight Form Field"),
- checkboxType: .normal)
- highglightFormboxWidthConst.constant = highlightFormCheckbox.properties.propertyInfo.viewWidth
-
- highlightLinkCheckbox.setTarget(self, action: #selector(highlightAction(_:)))
- highlightFormCheckbox.setTarget(self, action: #selector(highlightAction(_:)))
-
- }
-
- func setUpAutoScroll() {
-
- autoTimeSlider.properties = ComponentSliderProperty(size: .m, percent: 1)
- autoTimeSlider.delegate = self
-
- autoTimeSelect.properties = ComponentSelectProperties(size: .s,
- state: .normal,
- text: KMLocalizedString("5"))
- if true {
- var menuItemArr: [ComponentMenuitemProperty] = []
- for string in ["5", "10", "20", "40", "50", "100"] {
- var itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
- itemSelected: false,
- isDisabled: false,
- keyEquivalent: nil,
- text: KMLocalizedString(string))
- if string == " " {
- itemProperty = ComponentMenuitemProperty.divider()
- }
- menuItemArr.append(itemProperty)
- }
- autoTimeSelect.updateMenuItemsArr(menuItemArr)
- autoTimeSelect.delegate = self
- }
-
- jumpSpaceSlider.properties = ComponentSliderProperty(size: .m, percent: 1)
- jumpSpaceSlider.delegate = self
-
- jumpSpaceSelect.properties = ComponentSelectProperties(size: .s,
- state: .normal,
- text: KMLocalizedString("20"))
- if true {
- var menuItemArr: [ComponentMenuitemProperty] = []
- for string in ["10", "50", "100", "200", "500", "1000"] {
- var itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
- itemSelected: false,
- isDisabled: false,
- keyEquivalent: nil,
- text: KMLocalizedString(string))
- if string == " " {
- itemProperty = ComponentMenuitemProperty.divider()
- }
- menuItemArr.append(itemProperty)
- }
- jumpSpaceSelect.updateMenuItemsArr(menuItemArr)
- jumpSpaceSelect.delegate = self
- }
-
- }
-
- func reloadData() {
-
- //Default Layout and Zoom
- layoutSelectView.selectItemAtIndex(SettingsManager.sharedInstance.layoutType.rawValue)
- zoomSelectView.selectItemAtIndex(SettingsManager.sharedInstance.zoomType.rawValue)
-
-
- //Left Side Panel
- defaultOpenRadio.properties.checkboxType = .normal
- remeberLastRadio.properties.checkboxType = .normal
- hideLeftSideRadio.properties.checkboxType = .normal
- prioritizeOutlineRadio.properties.checkboxType = .normal
-
- defaultOpenSelectView.properties.isDisabled = true
- if SettingsManager.sharedInstance.leftPanelType == .defaultOpen {
- defaultOpenSelectView.properties.isDisabled = false
- defaultOpenRadio.properties.checkboxType = .selected
-
- } else if SettingsManager.sharedInstance.leftPanelType == .sameAsLastOpen {
- remeberLastRadio.properties.checkboxType = .selected
-
- } else if SettingsManager.sharedInstance.leftPanelType == .hideLeftSide {
- hideLeftSideRadio.properties.checkboxType = .selected
-
- } else if SettingsManager.sharedInstance.leftPanelType == .prioritizeOutline {
- prioritizeOutlineRadio.properties.checkboxType = .selected
-
- }
-
- defaultOpenRadio.reloadData()
- remeberLastRadio.reloadData()
- hideLeftSideRadio.reloadData()
- prioritizeOutlineRadio.reloadData()
-
- defaultOpenSelectView.selectItemAtIndex(SettingsManager.sharedInstance.defaultOpen.rawValue)
- defaultOpenSelectView.reloadData()
-
- //Property Panel
-
- autoExpandPropertyPanelCheckbox.properties.checkboxType = SettingsManager.sharedInstance.autoExpandPropertyPanel ? .selected : .normal
- autoExpandPropertyPanelCheckbox.reloadData()
-
- showQuickCheckbox.properties.checkboxType = SettingsManager.sharedInstance.showQuickActionBar ? .selected : .normal
- showQuickCheckbox.reloadData()
- //Highlight
- highlightLinkCheckbox.properties.checkboxType = CPDFKitConfig.sharedInstance().enableLinkFieldHighlight() ? .selected : .normal
- highlightLinkCheckbox.reloadData()
-
- highlightFormCheckbox.properties.checkboxType = CPDFKitConfig.sharedInstance().enableFormFieldHighlight() ? .selected : .normal
- highlightFormCheckbox.reloadData()
-
- //Auto Scroll
- let autoScrollTime: CGFloat = SettingsManager.sharedInstance.autoScrollTimeInterval
- autoTimeSlider.properties.percent = (autoScrollTime - 1) / (100 - 1)
- autoTimeSlider.reloadData()
-
- autoTimeSelect.properties.text = String(format: "%.0f", autoScrollTime, "%")
- autoTimeSelect.reloadData()
-
- let autoScrollJump: CGFloat = SettingsManager.sharedInstance.autoScrollJumpSpace
- jumpSpaceSlider.properties.percent = (autoScrollJump - 10) / (1000 - 10)
- jumpSpaceSlider.reloadData()
-
- jumpSpaceSelect.properties.text = String(format: "%.0f", autoScrollJump, "%")
- jumpSpaceSelect.reloadData()
-
- }
-
- //MARK: - Action
-
- @objc func leftSidePanelAction(_ sender: NSView) {
- if sender == defaultOpenRadio {
- SettingsManager.sharedInstance.leftPanelType = .defaultOpen
- } else if sender == remeberLastRadio {
- SettingsManager.sharedInstance.leftPanelType = .sameAsLastOpen
- } else if sender == hideLeftSideRadio {
- SettingsManager.sharedInstance.leftPanelType = .hideLeftSide
- } else if sender == prioritizeOutlineRadio {
- SettingsManager.sharedInstance.leftPanelType = .prioritizeOutline
- }
- self.reloadData()
-
- }
-
- @objc func propertyPanelAction(_ sender: NSView) {
- if sender == showQuickCheckbox {
- SettingsManager.sharedInstance.showQuickActionBar = showQuickCheckbox.properties.checkboxType == .selected ? true : false
- } else if sender == autoExpandPropertyPanelCheckbox {
- SettingsManager.sharedInstance.autoExpandPropertyPanel = autoExpandPropertyPanelCheckbox.properties.checkboxType == .selected ? true : false
- }
- self.reloadData()
-
- }
-
- @objc func highlightAction(_ sender: NSView) {
- if sender == highlightLinkCheckbox {
- let value = highlightLinkCheckbox.properties.checkboxType == .selected ? true : false
- CPDFAnnotation.updateLinkFieldHighlight(nil, linkFieldHighlight: value)
-
- NotificationCenter.default.post(name: kPDFViewHighlightLinkUpdateNotiName, object: nil)
-
- } else if sender == highlightFormCheckbox {
- let value = highlightFormCheckbox.properties.checkboxType == .selected ? true : false
- CPDFAnnotation.updateHighlightFormFiled(nil, highlightFormFiled: value)
-
- NotificationCenter.default.post(name: kPDFViewHighlightFormFiledUpdateNotiName, object: nil)
- }
- self.reloadData()
-
- }
-
-
- }
- //MARK: - ComponentSelectDelegate
- extension SettingsDisplayView: ComponentSelectDelegate {
- func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
- if view == layoutSelectView {
- if layoutSelectView.indexOfSelect() >= 0 {
- SettingsManager.sharedInstance.layoutType = pageLayoutType(rawValue: layoutSelectView.indexOfSelect())!
- }
- } else if view == zoomSelectView {
- if zoomSelectView.indexOfSelect() >= 0 {
- SettingsManager.sharedInstance.zoomType = zoomInfoType(rawValue: zoomSelectView.indexOfSelect())!
- }
- } else if view == defaultOpenSelectView {
- if defaultOpenSelectView.indexOfSelect() >= 0 {
- SettingsManager.sharedInstance.defaultOpen = defaultOpenType(rawValue: defaultOpenSelectView.indexOfSelect())!
- }
- }
- SettingsManager.sharedInstance.saveData()
-
- self.reloadData()
- }
-
- }
-
- //MARK: - ComponentSliderDelegate
- extension SettingsDisplayView: ComponentSliderDelegate {
- func componentSliderDidUpdate(_ view: ComponentSlider) {
- let value = view.properties.percent
- if view == autoTimeSlider {
- SettingsManager.sharedInstance.autoScrollTimeInterval = 1 + (100 - 1)*value
- } else if view == jumpSpaceSlider {
- SettingsManager.sharedInstance.autoScrollJumpSpace = 10 + (1000 - 10)*value
- }
-
- reloadData()
- }
-
- }
|