// // KMConvertPageRangeSettingItemView.swift // PDF Master // // Created by tangchao on 2022/12/6. // import Cocoa typealias KMConvertPageRangeSettingItemViewTextDidEndEditing = (_ textString: String) -> () class KMConvertPageRangeSettingItemView: NSView, NibLoadable { @IBOutlet weak var titleLabel: NSTextField! @IBOutlet weak var pageSizeComboBox: NSComboBox! @IBOutlet weak var pageSizeBox: NSBox! @IBOutlet weak var pagesizeBoxHeight: NSLayoutConstraint! var pageSizeVC: KMDesignSelect! var pageRangeValue: String = "" var itemClick: KMCommonClickBlock? var textDidEndEditingCallback: KMConvertPageRangeSettingItemViewTextDidEndEditing! var isTextDidEndCallback: Bool = false var pageCount = 0 static var nibName: String? { return "KMConvertBaseWindowController" } static func createFromNib(in bundle: Bundle = Bundle.main) -> Self? { guard let nibName = nibName else { return nil } var topLevelArray: NSArray? = nil bundle.loadNibNamed(NSNib.Name(nibName), owner: nil, topLevelObjects: &topLevelArray) guard let results = topLevelArray else { return nil } let views = Array(results).filter { $0 is Self } return views.last as? Self } override func awakeFromNib() { super.awakeFromNib() pageSizeVC = KMDesignSelect.init(withType: .Combox) pageSizeBox.fillColor = .clear pageSizeBox.contentView = pageSizeVC.view pageSizeVC.removeAllItems() pageSizeVC.addItems(withObjectValues: [KMTools.pageRangeTypeString(pageRange: .all), KMTools.pageRangeTypeString(pageRange: .current), KMTools.pageRangeTypeString(pageRange: .odd), KMTools.pageRangeTypeString(pageRange: .even), KMTools.pageRangeTypeString(pageRange: .custom)]) pageSizeVC.selectItem(at: 0) pageSizeVC.editable = false //默认属性,初始化可不设置 pageSizeVC.delete = self pageSizeVC.placeholderString = NSLocalizedString("eg. 1,3-5,10", comment: "") titleLabel.stringValue = NSLocalizedString("Page Range", comment: "") titleLabel.textColor = NSColor(hex: "#616469") titleLabel.font = .SFProTextSemibold(12) pageSizeVC.updateUI() } } extension KMConvertPageRangeSettingItemView: KMSelectPopButtonDelegate { func km_controlTextDidChange(_ obj: KMDesignSelect) { if pageSizeVC != obj { return } self.pageRangeValue = pageSizeVC.stringValue } func km_controlTextDidEndEditing(_ obj: KMDesignSelect) { if pageSizeVC != obj { return } if (!self.isTextDidEndCallback) { return } if (self.pageSizeVC.indexOfSelectedItem != (self.pageSizeVC.numberOfItems-1)) { /// 其他item切换 return } guard let callback = textDidEndEditingCallback else { return } callback(pageSizeVC.stringValue) } func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) { if pageSizeVC != obj { return } let index = pageSizeVC.indexOfSelectedItem if index < 0 { return } if index == pageSizeVC.numberOfItems-1 { pageSizeVC.editable = true DispatchQueue.main.async { [self] in pageSizeVC.stringValue = "" } self.window?.makeFirstResponder(pageSizeVC.textField) } else { self.window?.makeFirstResponder(nil) pageSizeVC.editable = false } guard let callback = itemClick else { return } callback(index) } func km_SelectPopoverWillShow(_ obj: KMDesignSelect) { if (self.pageCount <= 1) { self.pageSizeVC.disItems = [KMTools.pageRangeTypeString(pageRange: .even)] } else { self.pageSizeVC.disItems = [] } } }