|
@@ -7,60 +7,12 @@
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
|
-enum KMPageEditType: Int {
|
|
|
- case pageRange = 1
|
|
|
- case leftRotate = 2
|
|
|
- case rightRotate = 3
|
|
|
- case insert = 4
|
|
|
- case extract = 5
|
|
|
- case replace = 6
|
|
|
- case split = 7
|
|
|
- case reverse = 8
|
|
|
- case delete = 9
|
|
|
-}
|
|
|
-
|
|
|
class KMPDFEditViewController: NSViewController {
|
|
|
|
|
|
@IBOutlet weak var topBarBox: NSBox!
|
|
|
@IBOutlet weak var contentBox: NSBox!
|
|
|
|
|
|
- var pageRangeView: KMDesignSelect?
|
|
|
- var pageRangeViewItems = [NSLocalizedString("All Pages", comment: ""),
|
|
|
- NSLocalizedString("Odd Pages", comment: ""),
|
|
|
- NSLocalizedString("Even Pages", comment: ""),
|
|
|
- NSLocalizedString("Horizontal Pages", comment: ""),
|
|
|
- NSLocalizedString("Vertical Pages", comment: ""),
|
|
|
- NSLocalizedString("Customized", comment: "")]
|
|
|
-
|
|
|
- var toolBar = KMToolbar()
|
|
|
- private var zoomOutButton: NSButton?
|
|
|
- private var zoomInButton: NSButton?
|
|
|
- lazy var rightItemView: NSView = {
|
|
|
- let view = NSView()
|
|
|
-
|
|
|
- let size: CGFloat = 28
|
|
|
- let y: CGFloat = 6
|
|
|
- let zoomOutButton = NSButton()
|
|
|
- view.addSubview(zoomOutButton)
|
|
|
- zoomOutButton.frame = NSMakeRect(0, y, size, size)
|
|
|
- zoomOutButton.isBordered = false
|
|
|
- zoomOutButton.image = NSImage(named: "KMImageNamePageEditZoomOut")
|
|
|
- zoomOutButton.target = self
|
|
|
- zoomOutButton.action = #selector(zoomOutButtonAction)
|
|
|
- self.zoomOutButton = zoomOutButton
|
|
|
-
|
|
|
- let zoomInButton = NSButton()
|
|
|
- view.addSubview(zoomInButton)
|
|
|
- zoomInButton.frame = NSMakeRect(size+7, y, size, size)
|
|
|
- zoomInButton.isBordered = false
|
|
|
- zoomInButton.image = NSImage(named: "KMImageNamePageEditZoomIn")
|
|
|
- zoomInButton.target = self
|
|
|
- zoomInButton.action = #selector(zoomInButtonAction)
|
|
|
- self.zoomInButton = zoomInButton
|
|
|
-
|
|
|
- return view
|
|
|
- }()
|
|
|
-
|
|
|
+ var toolBar = KMPDFEditToolbar(frame: NSZeroRect)
|
|
|
var thumbnailView = KMPageEditThumbnailView()
|
|
|
|
|
|
private var pdfDocument: CPDFDocument?
|
|
@@ -112,8 +64,8 @@ class KMPDFEditViewController: NSViewController {
|
|
|
}
|
|
|
|
|
|
self.selectPages(indexs: IndexSet(integer: index))
|
|
|
- self.pageRangeView?.stringValue = "\(index+1)"
|
|
|
- self.pageRangeView?.editable = true
|
|
|
+ self.toolBar.pageRangeView?.stringValue = "\(index+1)"
|
|
|
+ self.toolBar.pageRangeView?.editable = true
|
|
|
} else {
|
|
|
var indexs: IndexSet = []
|
|
|
for pageIndex in self.selectedPages {
|
|
@@ -126,8 +78,8 @@ class KMPDFEditViewController: NSViewController {
|
|
|
|
|
|
self.selectPages(indexs: indexs)
|
|
|
|
|
|
- self.pageRangeView?.editable = true
|
|
|
- self.pageRangeView?.stringValue = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: indexs.sorted())
|
|
|
+ self.toolBar.pageRangeView?.editable = true
|
|
|
+ self.toolBar.pageRangeView?.stringValue = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: indexs.sorted())
|
|
|
}
|
|
|
|
|
|
self.view.window?.makeFirstResponder(self)
|
|
@@ -142,13 +94,44 @@ class KMPDFEditViewController: NSViewController {
|
|
|
self.topBarBox.contentView?.addSubview(toolBar)
|
|
|
toolBar.frame = self.topBarBox.contentView!.bounds
|
|
|
toolBar.autoresizingMask = [.width, .height]
|
|
|
- toolBar.delegate = self
|
|
|
self.topBarBox.fillColor = NSColor(hex: "#F7F8FA")
|
|
|
-
|
|
|
- let rightItemView = self.rightItemView
|
|
|
- self.topBarBox.contentView?.addSubview(rightItemView)
|
|
|
- rightItemView.frame = NSMakeRect(NSWidth(self.topBarBox.contentView!.frame)-80, 0, 80, NSHeight(self.topBarBox.contentView!.frame))
|
|
|
- rightItemView.autoresizingMask = [.minXMargin]
|
|
|
+ toolBar.itemClick = { [unowned self] item, index in
|
|
|
+ guard let type = KMPageEditType(rawValue: index) else {
|
|
|
+ if (index == KMPageEditType.insert_files) {
|
|
|
+ self.item_insertFile(sender: nil)
|
|
|
+ } else if (index == KMPageEditType.insert_blank_page) {
|
|
|
+ self.item_insertBlankPage(sender: nil)
|
|
|
+ } else if (index == KMPageEditType.insert_custom_page) {
|
|
|
+ self.item_insertCustomPage(sender: nil)
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (type == .leftRotate) {
|
|
|
+ self.leftRotatePageItemAction(menu: nil)
|
|
|
+ } else if (type == .rightRotate) {
|
|
|
+ self.rotatePageItemAction(menu: nil)
|
|
|
+ } else if (type == .zoomOut) {
|
|
|
+ self.zoomOutButtonAction(sender: item?.zoomOutButton)
|
|
|
+ } else if (type == .zoomIn) {
|
|
|
+ self.zoomInButtonAction(sender: item?.zoomInButton)
|
|
|
+ } else if (type == .extract) {
|
|
|
+ self.extractPageItemAction(menu: nil)
|
|
|
+ } else if (type == .replace) {
|
|
|
+ self.replacePageItemAction(menu: nil)
|
|
|
+ } else if (type == .split) {
|
|
|
+ self.splitMenuAction(sender: nil)
|
|
|
+ } else if (type == .reverse) {
|
|
|
+ self.reverseMenuAction(sender: nil)
|
|
|
+ } else if (type == .delete) {
|
|
|
+ self.deleteMenuAction(sender: nil)
|
|
|
+ } else if (type == .pageRange) {
|
|
|
+ self.km_comboBoxSelectionDidChange((item?.pageRangeView)!)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ toolBar.pageRangeValueDidChange = { [unowned self] value, _ in
|
|
|
+ self.km_controlTextDidEndEditing(self.toolBar.pageRangeView!)
|
|
|
+ }
|
|
|
|
|
|
let view = self.thumbnailView
|
|
|
self.contentBox.contentView?.addSubview(view)
|
|
@@ -168,17 +151,17 @@ class KMPDFEditViewController: NSViewController {
|
|
|
enabled = true
|
|
|
}
|
|
|
|
|
|
- if (self?.toolBar.items == nil) {
|
|
|
+ if (self?.toolBar.toolBar.items == nil) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var replaceItem: KMToolBoxItem?
|
|
|
- for i in 0 ..< (self?.toolBar.items.count)! {
|
|
|
- let item: KMToolBoxItem = (self?.toolBar.items[i])!
|
|
|
+ for i in 0 ..< (self?.toolBar.toolBar.items.count)! {
|
|
|
+ let item: KMToolBoxItem = (self?.toolBar.toolBar.items[i])!
|
|
|
if (item.itemIdentifier == KMToolbarPageEditReplaceItemIdentifier) {
|
|
|
replaceItem = item
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (item.itemIdentifier == KMToolbarPageEditExtractItemIdentifier ||
|
|
|
item.itemIdentifier == KMToolbarPageEditReverseItemIdentifier ||
|
|
|
item.itemIdentifier == KMToolbarPageEditDeleteItemIdentifier ||
|
|
@@ -204,8 +187,8 @@ class KMPDFEditViewController: NSViewController {
|
|
|
|
|
|
indexs.sort(){$0 < $1}
|
|
|
|
|
|
- self?.pageRangeView?.editable = true;
|
|
|
- self?.pageRangeView?.stringValue = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: indexs)
|
|
|
+ self?.toolBar.pageRangeView?.editable = true;
|
|
|
+ self?.toolBar.pageRangeView?.stringValue = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: indexs)
|
|
|
}
|
|
|
|
|
|
let menu = NSMenu()
|
|
@@ -619,7 +602,7 @@ class KMPDFEditViewController: NSViewController {
|
|
|
|
|
|
// MARK: topBar 事件
|
|
|
|
|
|
- @objc func zoomOutButtonAction(sender: NSButton) {
|
|
|
+ @objc func zoomOutButtonAction(sender: NSButton?) {
|
|
|
if (self.itemSize.width > self.defaultItemSize.width) {
|
|
|
return
|
|
|
}
|
|
@@ -628,15 +611,15 @@ class KMPDFEditViewController: NSViewController {
|
|
|
} else if (self.itemSize.width == self.defaultItemSize.width) {
|
|
|
self.itemSize = NSSize(width: self.defaultItemSize.width*1.5, height: self.defaultItemSize.height*1.5)
|
|
|
}
|
|
|
-
|
|
|
- self.zoomInButton?.isEnabled = true
|
|
|
+
|
|
|
+ self.toolBar.zoomInButton?.isEnabled = true
|
|
|
if (self.itemSize.width > self.defaultItemSize.width) {
|
|
|
- sender.isEnabled = false
|
|
|
+ sender?.isEnabled = false
|
|
|
}
|
|
|
self.thumbnailView.zoomOut()
|
|
|
}
|
|
|
|
|
|
- @objc func zoomInButtonAction(sender: NSButton) {
|
|
|
+ @objc func zoomInButtonAction(sender: NSButton?) {
|
|
|
if (self.itemSize.width < self.defaultItemSize.width) {
|
|
|
return
|
|
|
}
|
|
@@ -645,10 +628,10 @@ class KMPDFEditViewController: NSViewController {
|
|
|
} else if (self.itemSize.width == self.defaultItemSize.width) {
|
|
|
self.itemSize = NSSize(width: self.defaultItemSize.width*0.5, height: self.defaultItemSize.height*0.5)
|
|
|
}
|
|
|
-
|
|
|
- self.zoomOutButton?.isEnabled = true
|
|
|
+
|
|
|
+ self.toolBar.zoomOutButton?.isEnabled = true
|
|
|
if (self.itemSize.width < self.defaultItemSize.width) {
|
|
|
- sender.isEnabled = false
|
|
|
+ sender?.isEnabled = false
|
|
|
}
|
|
|
self.thumbnailView.zoomIn()
|
|
|
}
|
|
@@ -773,142 +756,9 @@ class KMPDFEditViewController: NSViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // MARK: toolBar 菜单事件
|
|
|
-
|
|
|
- @objc func pageRangeMenuAction(sender: KMToolbarClickButton) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @objc func leftRotateMenuAction(sender: KMToolbarClickButton?) {
|
|
|
- let selectedIndexs = self.thumbnailView.selectionIndexPaths
|
|
|
- var indexs: IndexSet = []
|
|
|
- for indexpath in selectedIndexs {
|
|
|
- indexs.insert(indexpath.item)
|
|
|
- }
|
|
|
-
|
|
|
- self.leftRotate(indexs: indexs)
|
|
|
- }
|
|
|
-
|
|
|
- @objc func rightRotateMenuAction(sender: KMToolbarClickButton?) {
|
|
|
- let selectedIndexs = self.thumbnailView.selectionIndexPaths
|
|
|
- var indexs: IndexSet = []
|
|
|
- for indexpath in selectedIndexs {
|
|
|
- indexs.insert(indexpath.item)
|
|
|
- }
|
|
|
-
|
|
|
- self.rightRotate(indexs: indexs)
|
|
|
- }
|
|
|
-
|
|
|
- @objc func insertMenuAction(sender: KMToolbarClickButton) {
|
|
|
- let menu = NSMenu()
|
|
|
- let insertFileItem = NSMenuItem(title: "Insert File", action: #selector(item_insertFile), target: self)
|
|
|
- menu.addItem(insertFileItem!)
|
|
|
- let insertBlankPageItem = NSMenuItem(title: "Insert a blank page", action: #selector(item_insertBlankPage), target: self)
|
|
|
- menu.addItem(insertBlankPageItem!)
|
|
|
- let insertCustomPageItem = NSMenuItem(title: "Insert custom page", action: #selector(item_insertCustomPage), target: self)
|
|
|
- menu.addItem(insertCustomPageItem!)
|
|
|
- menu.popUp(positioning: nil, at: NSPoint(x: 0, y: 40), in: sender)
|
|
|
- }
|
|
|
-
|
|
|
- @objc func extractMenuAction(sender: KMToolbarClickButton?) {
|
|
|
- if (self.thumbnailView.selectionIndexPaths.count == 0) {
|
|
|
- let alert = NSAlert()
|
|
|
- alert.messageText = "请选择需要提取的页面"
|
|
|
- alert.runModal()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- let windowController = KMPageEditExtractWindowController(windowNibName: "KMPageEditSettingBaseWindowController")
|
|
|
- self.view.window?.beginSheet(windowController.window!)
|
|
|
- self.windowController = windowController
|
|
|
-
|
|
|
- windowController.itemClick = { [weak self] index, value in
|
|
|
- if (index == 1) { /// 取消
|
|
|
- self?.view.window?.endSheet((self?.windowController?.window)!)
|
|
|
- self?.windowController = nil
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- let windowController_extract: KMPageEditExtractWindowController = self?.windowController as! KMPageEditExtractWindowController
|
|
|
- /// 提取设置项
|
|
|
- let settingView: KMPageEditExtractSettingView = windowController_extract.settingView! as! KMPageEditExtractSettingView
|
|
|
- let oneDocumentPerPage: Bool = settingView.independentPerPageCheck.state != .on
|
|
|
- let extractAfterDelete: Bool = settingView.extractAfterDeletePageCheck.state == .on
|
|
|
-
|
|
|
- self?.view.window?.endSheet((self?.windowController!.window)!)
|
|
|
- self?.windowController = nil
|
|
|
-
|
|
|
-// /// 提取的页面
|
|
|
- let indexpaths = self?.thumbnailView.selectionIndexPaths
|
|
|
- var indexs: IndexSet = []
|
|
|
- var extractPages: Array<CPDFPage> = []
|
|
|
- for indexpath in indexpaths! {
|
|
|
- let page = self?.listView?.document.page(at: UInt(indexpath.item))
|
|
|
- if (page != nil) {
|
|
|
- extractPages.append(page!)
|
|
|
- }
|
|
|
- indexs.insert(indexpath.item)
|
|
|
- }
|
|
|
+// // MARK: toolBar 菜单事件
|
|
|
|
|
|
- KMPageEditTools.extract((self?.listView?.document)!, indexs, oneDocumentPerPage, (self?.view.window)!) { result, urls, error in
|
|
|
- if (result == false) {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if (extractAfterDelete) {
|
|
|
- var indexs: IndexSet = IndexSet()
|
|
|
- for page in extractPages {
|
|
|
- let indexPage: Int = Int((self?.listView?.document.index(for: page))!)
|
|
|
- indexs.insert(indexPage)
|
|
|
- }
|
|
|
- self?.deletePages(indexs: indexs)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @objc func replaceMenuAction(sender: KMToolbarClickButton?) {
|
|
|
- let panel = NSOpenPanel()
|
|
|
- panel.allowedFileTypes = ["pdf"]
|
|
|
- panel.allowsMultipleSelection = true
|
|
|
- panel.beginSheetModal(for: self.view.window!) { [weak self] response in
|
|
|
- if (response == .cancel) {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- /// 处理page
|
|
|
- var pages: Array<CPDFPage> = []
|
|
|
- let selectedIndex: Int = (self?.getSelecteIndex())!
|
|
|
- self?.listView?.document.removePage(at: UInt(selectedIndex))
|
|
|
-
|
|
|
- var insertIndex: Int = selectedIndex
|
|
|
- self?.lockedFiles.removeAll()
|
|
|
- for fileURL in panel.urls {
|
|
|
- let document = CPDFDocument(url: fileURL)
|
|
|
- if ((document?.isLocked)!) {
|
|
|
- self?.lockedFiles.append(fileURL)
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- for i in 0 ..< document!.pageCount {
|
|
|
- let page = document?.page(at: i)
|
|
|
- pages.append(page!)
|
|
|
- self!.listView?.document.insertPageObject(page, at:UInt(insertIndex))
|
|
|
- insertIndex += 1
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if ((self?.lockedFiles.count)! <= 0) {
|
|
|
- self?.refreshUI()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- self?.refreshUI()
|
|
|
- self!.showPasswordWindow(insertIndex)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @objc func splitMenuAction(sender: KMToolbarClickButton) {
|
|
|
+ @objc func splitMenuAction(sender: AnyObject?) {
|
|
|
let model = KMPageEditSplitSettingModel()
|
|
|
model.documentURL = self.listView?.document.documentURL
|
|
|
model.fileName = model.documentURL.lastPathComponent
|
|
@@ -985,7 +835,7 @@ class KMPDFEditViewController: NSViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @objc func reverseMenuAction(sender: KMToolbarClickButton) {
|
|
|
+ @objc func reverseMenuAction(sender: AnyObject?) {
|
|
|
let selectedIndexs = self.thumbnailView.selectionIndexPaths
|
|
|
if (selectedIndexs.count < 2 ) {
|
|
|
let _ = CustomAlertView(message: "请先选择至少两个页面进行编辑操作", from: self.thumbnailView, with: .blue)
|
|
@@ -1000,7 +850,7 @@ class KMPDFEditViewController: NSViewController {
|
|
|
self.reversePages(indexs: indexs)
|
|
|
}
|
|
|
|
|
|
- @objc func deleteMenuAction(sender: KMToolbarClickButton) {
|
|
|
+ @objc func deleteMenuAction(sender: AnyObject?) {
|
|
|
Task { @MainActor in
|
|
|
if await (KMLightMemberManager.manager.canUseAdvanced() == false) {
|
|
|
let _ = KMComparativeTableViewController.show(window: self.view.window!)
|
|
@@ -1021,155 +871,7 @@ class KMPDFEditViewController: NSViewController {
|
|
|
// MARK: -
|
|
|
// MARK: KMNewToolbarDelegate
|
|
|
|
|
|
-extension KMPDFEditViewController: KMNewToolbarDelegate {
|
|
|
- func toolbarDefaultItemIdentifiers(_ toolbar: KMToolbar!) -> [String]! {
|
|
|
- return [KMToolbarPageEditPageRangeItemIdentifier,
|
|
|
- KMToolbarPageEditLeftRotateItemIdentifier,
|
|
|
- KMToolbarPageEditRightRotateItemIdentifier,
|
|
|
-// KMToolbarDividerItemIdentifier,
|
|
|
-// KMToolbarPageEditInsetItemIdentifier,
|
|
|
-// KMToolbarPageEditExtractItemIdentifier,
|
|
|
-// KMToolbarPageEditReplaceItemIdentifier,
|
|
|
-// KMToolbarPageEditSplitItemIdentifier,
|
|
|
-// KMToolbarPageEditReverseItemIdentifier,
|
|
|
- KMToolbarDividerItemIdentifier,
|
|
|
- KMToolbarPageEditDeleteItemIdentifier]
|
|
|
- }
|
|
|
-
|
|
|
- func toolbar(_ toolbar: KMToolbar!, itemForItemIdentifier identifier: String!) -> KMToolBoxItem! {
|
|
|
- let item = KMToolBoxItem(itemIdentifier: identifier)
|
|
|
- if (identifier == KMToolbarPageEditPageRangeItemIdentifier) {
|
|
|
-// item?.image = NSImage(named: "KMImageNameMainToolbarrRight")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolbarrRight")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.pageRange.rawValue
|
|
|
-// item?.toolTip = NSLocalizedString("pageRange", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("pageRange ", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(pageRangeMenuAction)
|
|
|
-
|
|
|
- let view = NSView()
|
|
|
- item?.addSubview(view)
|
|
|
- view.frame = item!.bounds
|
|
|
- view.autoresizingMask = [.width,.height]
|
|
|
- view.wantsLayer = true
|
|
|
- view.layer?.backgroundColor = NSColor(hex: "#F7F8FA").cgColor
|
|
|
-
|
|
|
- let comBoxView = KMDesignSelect(withType: .Combox)
|
|
|
- view.addSubview(comBoxView.view)
|
|
|
- comBoxView.view.frame = NSMakeRect(0, 8, NSWidth(view.frame), 24)
|
|
|
- comBoxView.view.autoresizingMask = [.width]
|
|
|
- comBoxView.removeAllItems()
|
|
|
- comBoxView.addItems(withObjectValues: self.pageRangeViewItems)
|
|
|
- comBoxView.selectItem(at: 0)
|
|
|
- comBoxView.placeholderString = NSLocalizedString("eg .1,3-5,10", comment: "")
|
|
|
- comBoxView.editable = false
|
|
|
- comBoxView.delete = self
|
|
|
- pageRangeView = comBoxView
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "pageRange", action: #selector(pageRangeMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditLeftRotateItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageLeftRotate")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageLeftRotate")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.leftRotate.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Rotate Left", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(leftRotateMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "", action: #selector(leftRotateMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditRightRotateItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageRightRotate")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageRightRotate")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.rightRotate.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Rotate Right", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(rightRotateMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "", action: #selector(rightRotateMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditInsetItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageInsert")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageInsert")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.insert.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Insert", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("Insert", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(insertMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "Insert", action: #selector(insertMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditExtractItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageExtract")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageExtract")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.extract.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Extract", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("Extract", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(extractMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "Extract", action: #selector(extractMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditReplaceItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageReplace")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageReplace")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.replace.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Replace", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("Replace", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(replaceMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "Replace", action: #selector(replaceMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditSplitItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageSplit")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageSplit")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.split.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Split the PDF into multiple files", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("Split", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(splitMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "Split", action: #selector(splitMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditReverseItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageReverse")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageReverse")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.reverse.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Reverse", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("Reverse", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(reverseMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "Reverse", action: #selector(reverseMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- } else if (identifier == KMToolbarPageEditDeleteItemIdentifier) {
|
|
|
- item?.image = NSImage(named: "KMImageNameMainToolPageDelete")
|
|
|
- item?.alternateImage = NSImage(named: "KMImageNameMainToolPageDelete")
|
|
|
- item?.target = self
|
|
|
- item?.btnTag = KMPageEditType.delete.rawValue
|
|
|
- item?.toolTip = NSLocalizedString("Delete", comment: "")
|
|
|
- item?.titleName = NSLocalizedString("", comment: "")
|
|
|
- item?.boxImagePosition = KMToolBoxImagePosition.left
|
|
|
- item?.btnAction = #selector(deleteMenuAction)
|
|
|
-
|
|
|
- let menuItem = NSMenuItem.init(title: "Delete", action: #selector(deleteMenuAction), target: self)
|
|
|
- item?.menuFormRepresentation = menuItem
|
|
|
- }
|
|
|
-
|
|
|
- return item
|
|
|
- }
|
|
|
-
|
|
|
+extension KMPDFEditViewController {
|
|
|
//MARK: menu Action
|
|
|
|
|
|
@objc func insertPageItemAction(menu:NSMenuItem) {
|
|
@@ -1182,20 +884,122 @@ extension KMPDFEditViewController: KMNewToolbarDelegate {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @objc func rotatePageItemAction(menu:NSMenuItem) {
|
|
|
- rightRotateMenuAction(sender: nil)
|
|
|
+ @objc func rotatePageItemAction(menu:NSMenuItem?) {
|
|
|
+ let selectedIndexs = self.thumbnailView.selectionIndexPaths
|
|
|
+ var indexs: IndexSet = []
|
|
|
+ for indexpath in selectedIndexs {
|
|
|
+ indexs.insert(indexpath.item)
|
|
|
+ }
|
|
|
+
|
|
|
+ self.rightRotate(indexs: indexs)
|
|
|
}
|
|
|
|
|
|
- @objc func leftRotatePageItemAction(menu:NSMenuItem) {
|
|
|
- leftRotateMenuAction(sender: nil)
|
|
|
+ @objc func leftRotatePageItemAction(menu:NSMenuItem?) {
|
|
|
+ let selectedIndexs = self.thumbnailView.selectionIndexPaths
|
|
|
+ var indexs: IndexSet = []
|
|
|
+ for indexpath in selectedIndexs {
|
|
|
+ indexs.insert(indexpath.item)
|
|
|
+ }
|
|
|
+
|
|
|
+ self.leftRotate(indexs: indexs)
|
|
|
}
|
|
|
|
|
|
- @objc func extractPageItemAction(menu:NSMenuItem) {
|
|
|
- extractMenuAction(sender: nil)
|
|
|
+ @objc func extractPageItemAction(menu:NSMenuItem?) {
|
|
|
+ if (self.thumbnailView.selectionIndexPaths.count == 0) {
|
|
|
+ let alert = NSAlert()
|
|
|
+ alert.messageText = "请选择需要提取的页面"
|
|
|
+ alert.runModal()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ let windowController = KMPageEditExtractWindowController(windowNibName: "KMPageEditSettingBaseWindowController")
|
|
|
+ self.view.window?.beginSheet(windowController.window!)
|
|
|
+ self.windowController = windowController
|
|
|
+
|
|
|
+ windowController.itemClick = { [weak self] index, value in
|
|
|
+ if (index == 1) { /// 取消
|
|
|
+ self?.view.window?.endSheet((self?.windowController?.window)!)
|
|
|
+ self?.windowController = nil
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ let windowController_extract: KMPageEditExtractWindowController = self?.windowController as! KMPageEditExtractWindowController
|
|
|
+ /// 提取设置项
|
|
|
+ let settingView: KMPageEditExtractSettingView = windowController_extract.settingView! as! KMPageEditExtractSettingView
|
|
|
+ let oneDocumentPerPage: Bool = settingView.independentPerPageCheck.state != .on
|
|
|
+ let extractAfterDelete: Bool = settingView.extractAfterDeletePageCheck.state == .on
|
|
|
+
|
|
|
+ self?.view.window?.endSheet((self?.windowController!.window)!)
|
|
|
+ self?.windowController = nil
|
|
|
+
|
|
|
+ // /// 提取的页面
|
|
|
+ let indexpaths = self?.thumbnailView.selectionIndexPaths
|
|
|
+ var indexs: IndexSet = []
|
|
|
+ var extractPages: Array<CPDFPage> = []
|
|
|
+ for indexpath in indexpaths! {
|
|
|
+ let page = self?.listView?.document.page(at: UInt(indexpath.item))
|
|
|
+ if (page != nil) {
|
|
|
+ extractPages.append(page!)
|
|
|
+ }
|
|
|
+ indexs.insert(indexpath.item)
|
|
|
+ }
|
|
|
+
|
|
|
+ KMPageEditTools.extract((self?.listView?.document)!, indexs, oneDocumentPerPage, (self?.view.window)!) { result, urls, error in
|
|
|
+ if (result == false) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (extractAfterDelete) {
|
|
|
+ var indexs: IndexSet = IndexSet()
|
|
|
+ for page in extractPages {
|
|
|
+ let indexPage: Int = Int((self?.listView?.document.index(for: page))!)
|
|
|
+ indexs.insert(indexPage)
|
|
|
+ }
|
|
|
+ self?.deletePages(indexs: indexs)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- @objc func replacePageItemAction(menu:NSMenuItem) {
|
|
|
- replaceMenuAction(sender: nil)
|
|
|
+ @objc func replacePageItemAction(menu:NSMenuItem?) {
|
|
|
+ let panel = NSOpenPanel()
|
|
|
+ panel.allowedFileTypes = ["pdf"]
|
|
|
+ panel.allowsMultipleSelection = true
|
|
|
+ panel.beginSheetModal(for: self.view.window!) { [weak self] response in
|
|
|
+ if (response == .cancel) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 处理page
|
|
|
+ var pages: Array<CPDFPage> = []
|
|
|
+ let selectedIndex: Int = (self?.getSelecteIndex())!
|
|
|
+ self?.listView?.document.removePage(at: UInt(selectedIndex))
|
|
|
+
|
|
|
+ var insertIndex: Int = selectedIndex
|
|
|
+ self?.lockedFiles.removeAll()
|
|
|
+ for fileURL in panel.urls {
|
|
|
+ let document = CPDFDocument(url: fileURL)
|
|
|
+ if ((document?.isLocked)!) {
|
|
|
+ self?.lockedFiles.append(fileURL)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ for i in 0 ..< document!.pageCount {
|
|
|
+ let page = document?.page(at: i)
|
|
|
+ pages.append(page!)
|
|
|
+ self!.listView?.document.insertPageObject(page, at:UInt(insertIndex))
|
|
|
+ insertIndex += 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((self?.lockedFiles.count)! <= 0) {
|
|
|
+ self?.refreshUI()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ self?.refreshUI()
|
|
|
+ self!.showPasswordWindow(insertIndex)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@objc func deletePageItemAction(menu:NSMenuItem) {
|
|
@@ -1414,15 +1218,14 @@ extension KMPDFEditViewController : NSMenuDelegate,NSMenuItemValidation {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// MARK: -
|
|
|
-// MARK: KMSelectPopButtonDelegate
|
|
|
+// MARK: - KMSelectPopButtonDelegate
|
|
|
|
|
|
-extension KMPDFEditViewController: KMSelectPopButtonDelegate {
|
|
|
+extension KMPDFEditViewController {
|
|
|
func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
|
|
|
- let index: Int = self.pageRangeView!.indexOfSelectedItem
|
|
|
+ let index: Int = self.toolBar.pageRangeView!.indexOfSelectedItem
|
|
|
var indexpaths: Set<IndexPath> = []
|
|
|
if (index <= 0) { /// 全部页面
|
|
|
- self.pageRangeView?.editable = false
|
|
|
+ self.toolBar.pageRangeView?.editable = false
|
|
|
for i in 0 ..< (self.listView?.document.pageCount)! {
|
|
|
indexpaths.insert(IndexPath(item: Int(i), section: 0))
|
|
|
}
|
|
@@ -1430,7 +1233,7 @@ extension KMPDFEditViewController: KMSelectPopButtonDelegate {
|
|
|
self.pageIsUpdate = false
|
|
|
self.thumbnailView.selectPages(at: indexpaths)
|
|
|
} else if (index == 1) { /// 奇数页
|
|
|
- self.pageRangeView?.editable = false
|
|
|
+ self.toolBar.pageRangeView?.editable = false
|
|
|
for i in 0 ..< (self.listView?.document.pageCount)! {
|
|
|
if (i % 2 == 1) {
|
|
|
continue
|
|
@@ -1440,7 +1243,7 @@ extension KMPDFEditViewController: KMSelectPopButtonDelegate {
|
|
|
self.pageIsUpdate = false
|
|
|
self.thumbnailView.selectPages(at: indexpaths)
|
|
|
} else if (index == 2) { /// 偶数页
|
|
|
- self.pageRangeView?.editable = false
|
|
|
+ self.toolBar.pageRangeView?.editable = false
|
|
|
for i in 0 ..< (self.listView?.document.pageCount)! {
|
|
|
if (i % 2 == 0) {
|
|
|
continue
|
|
@@ -1450,7 +1253,7 @@ extension KMPDFEditViewController: KMSelectPopButtonDelegate {
|
|
|
self.pageIsUpdate = false
|
|
|
self.thumbnailView.selectPages(at: indexpaths)
|
|
|
} else if (index == 3) { /// 横向页
|
|
|
- self.pageRangeView?.editable = false
|
|
|
+ self.toolBar.pageRangeView?.editable = false
|
|
|
for i in 0 ..< (self.listView?.document.pageCount)! {
|
|
|
let page = self.listView?.document.page(at: i)
|
|
|
if (page?.rotation == 0 || page?.rotation == 180 || page?.rotation == -180) {
|
|
@@ -1461,7 +1264,7 @@ extension KMPDFEditViewController: KMSelectPopButtonDelegate {
|
|
|
self.pageIsUpdate = false
|
|
|
self.thumbnailView.selectPages(at: indexpaths)
|
|
|
} else if (index == 4) { /// 纵向页
|
|
|
- self.pageRangeView?.editable = false
|
|
|
+ self.toolBar.pageRangeView?.editable = false
|
|
|
for i in 0 ..< (self.listView?.document.pageCount)! {
|
|
|
let page = self.listView?.document.page(at: i)
|
|
|
if (page?.rotation == 90 || page?.rotation == 270 || page?.rotation == -90 || page?.rotation == -270) {
|
|
@@ -1473,28 +1276,24 @@ extension KMPDFEditViewController: KMSelectPopButtonDelegate {
|
|
|
self.thumbnailView.selectPages(at: indexpaths)
|
|
|
} else { /// 自定义
|
|
|
self.pageIsUpdate = false
|
|
|
- self.pageRangeView?.editable = true
|
|
|
+ self.toolBar.pageRangeView?.editable = true
|
|
|
self.clearSelectPages()
|
|
|
DispatchQueue.main.async {
|
|
|
- self.pageRangeView?.stringValue = ""
|
|
|
+ self.toolBar.pageRangeView?.stringValue = ""
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- func km_controlTextDidChange(_ obj: KMDesignSelect) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
func km_controlTextDidEndEditing(_ obj: KMDesignSelect) {
|
|
|
self.view.window?.makeFirstResponder(self)
|
|
|
|
|
|
- for index in 0 ..< self.pageRangeView!.numberOfItems {
|
|
|
- if (self.pageRangeViewItems[index] == self.pageRangeView!.stringValue) {
|
|
|
+ for index in 0 ..< obj.numberOfItems {
|
|
|
+ if (obj.items[index] == obj.stringValue) {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- let pages = KMPageRangeTools.findSelectPage(pageRangeString: self.pageRangeView!.stringValue, pageCount: Int((self.listView?.document.pageCount)!))
|
|
|
+ let pages = KMPageRangeTools.findSelectPage(pageRangeString: self.toolBar.pageRangeView!.stringValue, pageCount: Int((self.listView?.document.pageCount)!))
|
|
|
if (pages.isEmpty) {
|
|
|
let alert = NSAlert()
|
|
|
alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
|