// // KMPageRangeSelectView.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/11/21. // import Cocoa import KMComponentLibrary @objc protocol KMPageRangeSelectViewDelegate: AnyObject { @objc optional func kmPageRangeSelectViewDidClickedItem(_ RangeSelectView: KMPageRangeSelectView, _ item: ComponentMenuitemProperty?) //ComponentSelect中文字编辑回调 @objc optional func kmPageRangeSelectViewDidSelectTextBeginEditing(_ RangeSelectView: KMPageRangeSelectView, _ view: ComponentSelect?) @objc optional func kmPageRangeSelectViewDidSelectTextChange(_ RangeSelectView: KMPageRangeSelectView, _ view: ComponentSelect?) @objc optional func kmPageRangeSelectViewDidSelectTextEndEditing(_ RangeSelectView: KMPageRangeSelectView, _ view: ComponentSelect?) @objc optional func kmPageRangeSelectViewDidMouseDown(_ RangeSelectView: KMPageRangeSelectView, _ view: ComponentSelect?) @objc optional func kmPageRangeSelectViewDidMouseup(_ RangeSelectView: KMPageRangeSelectView, _ view: ComponentSelect?) } class KMPageRangeSelectView: NSView { var pageSelectView: ComponentSelect = ComponentSelect() weak open var delegate: KMPageRangeSelectViewDelegate? override init(frame frameRect: NSRect) { super.init(frame: frameRect) setUp() } required init?(coder: NSCoder) { super.init(coder: coder) setUp() } func setUp() { pageSelectView.frame = self.bounds pageSelectView.autoresizingMask = [.width, .height] self.addSubview(pageSelectView) pageSelectView.properties = ComponentSelectProperties(size: .s, state: .normal, placeholder: KMLocalizedString("e.g. 1,3-5,10"), errorText: nil, creatable: false, text: KMLocalizedString("All Pages"), regexString: "0123456789,-") pageSelectView.delegate = self let menuItemString:[String] = [KMLocalizedString("Current Page"), KMLocalizedString("All Pages"), KMLocalizedString("Odd Pages Only"), KMLocalizedString("Even Pages Only"), KMLocalizedString("e.g. 1,3-5,10")] var menuItemArr: [ComponentMenuitemProperty] = [] for language in menuItemString { let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: language, identifier: language) menuItemArr.append(itemProperty) } pageSelectView.updateMenuItemsArr(menuItemArr) pageSelectView.selectItemAtIndex(0) } func reloadData(items:[String]) { var menuItemString:[String] = [KMLocalizedString("Current Page"), KMLocalizedString("All Pages"), KMLocalizedString("Odd Pages Only"), KMLocalizedString("Even Pages Only"), KMLocalizedString("e.g. 1,3-5,10")] if items.count != 0 { menuItemString = items } var menuItemArr: [ComponentMenuitemProperty] = [] for language in menuItemString { let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: language, identifier: language) menuItemArr.append(itemProperty) } pageSelectView.updateMenuItemsArr(menuItemArr) pageSelectView.selectItemAtIndex(0) } //MARK: - Get func getSelectedPageString(_ document: CPDFDocument, _ pageIndexs: [Int]) -> String { var pages = [Int]() if pageSelectView.indexOfSelect() == 1 { pages = Array(0.. ([Int], isCurrentpage: Bool) { let pageRangeSelectIndex = pageSelectView.indexOfSelect() let fileAttribute = KMNFileAttribute() fileAttribute.pdfDocument = document fileAttribute.password = document.password ?? "" if pageRangeSelectIndex == 0 { } else if pageRangeSelectIndex == 1 { fileAttribute.bAllPage = true fileAttribute.pagesType = .AllPages } else if pageRangeSelectIndex == 2 { fileAttribute.bAllPage = false fileAttribute.pagesType = .OnlyOdd } else { if(document.pageCount <= 1) { fileAttribute.bAllPage = false fileAttribute.pagesType = .PagesString fileAttribute.pagesString = pageSelectView.properties.text ?? "" } else { fileAttribute.bAllPage = false if(pageRangeSelectIndex == 2) { fileAttribute.pagesType = .OnlyEven } else { fileAttribute.bAllPage = false fileAttribute.pagesType = .PagesString fileAttribute.pagesString = pageSelectView.properties.text ?? "" } } } let pageIndex = fileAttribute.fetchSelectPages() return (pageIndex, pageRangeSelectIndex == 0) } } extension KMPageRangeSelectView: ComponentSelectDelegate { func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) { if menuItemProperty?.identifier == KMLocalizedString("e.g. 1,3-5,10") { view?.properties.creatable = true view?.properties.text = "" view?.reloadData() DispatchQueue.main.async { view?.beginEditing() } } else { view?.properties.creatable = false view?.reloadData() } delegate?.kmPageRangeSelectViewDidClickedItem?(self, menuItemProperty) } func componentSelectTextDidBeginEditing(_ view: ComponentSelect) { delegate?.kmPageRangeSelectViewDidSelectTextBeginEditing?(self, view) } func componentSelectTextDidChange(_ view: ComponentSelect) { delegate?.kmPageRangeSelectViewDidSelectTextChange?(self, view) } func componentSelectTextDidEndEditing(_ view: ComponentSelect, removeUnit text: String?) { delegate?.kmPageRangeSelectViewDidSelectTextEndEditing?(self, view) } func componentSelectDidMouseDown(_ view: ComponentSelect, with event: NSEvent) { delegate?.kmPageRangeSelectViewDidMouseDown?(self, view) } func componentSelectDidMouseUp(_ view: ComponentSelect, with event: NSEvent) { delegate?.kmPageRangeSelectViewDidMouseup?(self, view) } }