123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- //
- // KMPageRangePickerWindowController.swift
- // PDF Master
- //
- // Created by tangchao on 2022/11/25.
- //
- import Cocoa
- typealias KMPageRangePickerWindowControllerCancelClick = (_ window: NSWindow)->()
- typealias KMPageRangePickerWindowControllerConfirmClick = (_ windowController: NSWindowController)->()
- class KMPageRangePickerWindowController: NSWindowController {
- @IBOutlet weak var titleLabel: NSTextField!
-
- @IBOutlet weak var allPageButton: NSButton!
- @IBOutlet weak var oddPagesButton: NSButton!
- @IBOutlet weak var evenPagesButton: NSButton!
- @IBOutlet weak var customPagesButton: NSButton!
-
- @IBOutlet weak var customPagesTextField: NSTextField!
- @IBOutlet weak var cancelButton: NSButton!
- @IBOutlet weak var confirmButton: NSButton!
-
- var fileModel: KMMergeFileModel!
-
- var selectIndex: Int = 0
-
- var cancelClick: KMPageRangePickerWindowControllerCancelClick!
- var confirmClick: KMPageRangePickerWindowControllerConfirmClick!
-
- override func windowDidLoad() {
- super.windowDidLoad()
- titleLabel.stringValue = NSLocalizedString("页面范围", comment: "")
-
- allPageButton.title = NSLocalizedString("全部页面", comment: "")
- allPageButton.target = self
- allPageButton.action = #selector(allPageButtonAction)
-
- oddPagesButton.title = NSLocalizedString("奇数页面", comment: "")
- oddPagesButton.target = self
- oddPagesButton.action = #selector(oddPagesButtonAction)
-
- evenPagesButton.title = NSLocalizedString("偶数页面", comment: "")
- evenPagesButton.target = self
- evenPagesButton.action = #selector(evenPagesButtonAction)
-
- customPagesButton.title = NSLocalizedString("自定义", comment: "")
- customPagesButton.target = self
- customPagesButton.action = #selector(customPagesButtonAction)
-
- customPagesTextField.placeholderString = NSLocalizedString("如1,3-5,10", comment: "")
- customPagesTextField.isEnabled = false
-
- cancelButton.title = NSLocalizedString("Cancel", comment: "")
- cancelButton.target = self
- cancelButton.action = #selector(cancelButtonAction)
- confirmButton.title = NSLocalizedString("Confirm", comment: "")
- confirmButton.target = self
- confirmButton.action = #selector(confirmButtonAction)
-
- selectIndex = 0;
- allPageButton.state = .on
- }
-
- @objc func allPageButtonAction() {
- for button in [allPageButton, oddPagesButton, evenPagesButton, customPagesButton] {
- button?.state = .off
- }
-
- allPageButton.state = .on
- window?.makeFirstResponder(nil)
- customPagesTextField.isEnabled = false
- selectIndex = 0
- }
-
- @objc func oddPagesButtonAction() {
- for button in [allPageButton, oddPagesButton, evenPagesButton, customPagesButton] {
- button?.state = .off
- }
-
- oddPagesButton.state = .on
- window?.makeFirstResponder(nil)
- customPagesTextField.isEnabled = false
- selectIndex = 1
- }
-
- @objc func evenPagesButtonAction() {
- for button in [allPageButton, oddPagesButton, evenPagesButton, customPagesButton] {
- button?.state = .off
- }
-
- evenPagesButton.state = .on
- window?.makeFirstResponder(nil)
- customPagesTextField.isEnabled = false
- selectIndex = 2
- }
-
- @objc func customPagesButtonAction() {
- for button in [allPageButton, oddPagesButton, evenPagesButton, customPagesButton] {
- button?.state = .off
- }
-
- customPagesButton.state = .on
- customPagesTextField.isEnabled = true
- window?.makeFirstResponder(customPagesTextField)
- selectIndex = 3
- }
-
- @objc func cancelButtonAction() {
- guard let callback = cancelClick else {
- return
- }
-
- callback(window!)
- }
-
- @objc func confirmButtonAction() {
- if selectIndex == 3 && findSelectPage(pagesString: self.customPagesTextField.stringValue).count == 0 {
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
- alert.runModal()
- return
- }
-
- guard let callback = confirmClick else {
- return
- }
-
- callback(self)
- }
-
- func isValidPagesString(pagesString: String)-> Bool {
- var valid = false
- for ch in pagesString {
- if ch != "0" && ch != "1" && ch != "2" && ch != "3" && ch != "4" && ch != "5" && ch != "6" && ch != "7" && ch != "8" && ch != "9" && ch != "," && ch != "-" {
- valid = false
- break
- } else {
- valid = true
- }
- }
-
- return valid
- }
-
- func findSelectPage(pagesString: String) -> ([Int]) {
- if !isValidPagesString(pagesString: pagesString) {
- return []
- }
-
- var result: [Int] = []
- let array = pagesString.components(separatedBy: ",")
- for string in array {
- if string.isEmpty {
- return []
- } else {
- let pages = string .components(separatedBy: "-")
- if pages.count > 2 {
- return []
- } else if pages.count == 1 {
- let page = pages[0]
- if page.isEmpty || Int(page)! > fileModel.document.pageCount || Int(page)! == 0 {
- return []
- } else {
- var hasSame: Bool = false
- for i in result {
- if i == Int(page)! {
- hasSame = true
- return []
- }
- }
- if !hasSame {
- result.append(Int(page)!)
- }
- }
- } else if pages.count == 2 {
- let page1 = pages[0]
- let page2 = pages[1]
- if page1.isEmpty || page2.isEmpty || page1 >= page2 || Int(page2)! > fileModel.myDocument.pageCount || Int(page1)! == 0 {
- return []
- } else {
- var hasSame: Bool = false
- for i in Int(page1)! ... Int(page2)! {
- for j in result {
- if j == i {
- hasSame = true
- return []
- }
- }
- }
- if !hasSame {
- for i in Int(page1)! ... Int(page2)! {
- result.append(i)
- }
- }
- }
- }
- }
- }
-
- return result
- }
- }
|