|
@@ -98,9 +98,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
override func viewDidAppear() {
|
|
|
super.viewDidAppear()
|
|
|
|
|
|
- if (self.pdfDocument?.isLocked == false && self.viewFirstAppear) {
|
|
|
+ let isLocked = self.pdfDocument?.isLocked ?? false
|
|
|
+ if (isLocked == false && self.viewFirstAppear) {
|
|
|
self.viewFirstAppear = false
|
|
|
- self.thumbnailView.document = self.pdfDocument!
|
|
|
+ if let doc = self.pdfDocument {
|
|
|
+ self.thumbnailView.document = doc
|
|
|
+ }
|
|
|
self.thumbnailView.reloadData()
|
|
|
}
|
|
|
|
|
@@ -118,7 +121,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
} else {
|
|
|
var indexs: IndexSet = []
|
|
|
for pageIndex in self.selectedPages {
|
|
|
- if (pageIndex < 0 || pageIndex >= (self.listView?.document.pageCount)!) {
|
|
|
+ let pageCnt = self.listView?.document?.pageCount ?? 0
|
|
|
+ if (pageIndex < 0 || pageIndex >= pageCnt) {
|
|
|
continue
|
|
|
}
|
|
|
|
|
@@ -194,7 +198,6 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
} else if (type == .delete) {
|
|
|
self.deleteAction()
|
|
|
} else if (type == .pageRange) {
|
|
|
-// self.km_comboBoxSelectionDidChange((item?.pageRangeView)!)
|
|
|
} else if (type == .insert) {
|
|
|
self.trackEvent(type: .insert)
|
|
|
} else if (type == .copy) {
|
|
@@ -207,12 +210,14 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
self.km_comboBoxSelectionDidChange(type)
|
|
|
}
|
|
|
toolBar.pageRangeValueDidChange = { [unowned self] value, _ in
|
|
|
- self.km_controlTextDidEndEditing(self.toolBar.pageRangeView!)
|
|
|
+ if let data = self.toolBar.pageRangeView {
|
|
|
+ self.km_controlTextDidEndEditing(data)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
let view = self.thumbnailView
|
|
|
self.contentBox.contentView?.addSubview(view)
|
|
|
- view.frame = self.contentBox.contentView!.bounds
|
|
|
+ view.frame = self.contentBox.contentView?.bounds ?? .zero
|
|
|
view.autoresizingMask = [.width, .height]
|
|
|
self.pageEditThumbnailView.delegate = self
|
|
|
self.pageEditThumbnailView.selectionDidChange = { [weak self] selectedIndexs in
|
|
@@ -225,19 +230,10 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
let enabled = (selectedIndexs.count > 0)
|
|
|
for i in 0 ..< self.toolBar.toolBar.items.count {
|
|
|
let item = self.toolBar.toolBar.items[i]
|
|
|
-// if item.itemIdentifier == KMToolbarPageEditExtractItemIdentifier
|
|
|
if item.itemIdentifier == KMToolbarPageEditLeftRotateItemIdentifier
|
|
|
- || item.itemIdentifier == KMToolbarPageEditRightRotateItemIdentifier
|
|
|
-// || item.itemIdentifier == KMToolbarPageEditReplaceItemIdentifier
|
|
|
- {
|
|
|
+ || item.itemIdentifier == KMToolbarPageEditRightRotateItemIdentifier {
|
|
|
item.unEnabled = !enabled
|
|
|
}
|
|
|
-// else if (item.itemIdentifier == KMToolbarPageEditReverseItemIdentifier) {
|
|
|
-// item.unEnabled = !(selectedIndexs.count > 1)
|
|
|
-// }
|
|
|
-// else if (item.itemIdentifier == KMToolbarPageEditDeleteItemIdentifier) {
|
|
|
-// item.unEnabled = !self.canDelete()
|
|
|
-// }
|
|
|
}
|
|
|
|
|
|
if (self.pageIsUpdate == false) {
|
|
@@ -270,8 +266,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
return 0
|
|
|
}
|
|
|
|
|
|
- private func getSelectedPage() -> CPDFPage {
|
|
|
- return (self.pdfDocument!.page(at: UInt(getSelecteIndex())))!
|
|
|
+ private func getSelectedPage() -> CPDFPage? {
|
|
|
+ return self.pdfDocument?.page(at: UInt(getSelecteIndex()))
|
|
|
}
|
|
|
|
|
|
private func selectPages(indexs: IndexSet) {
|
|
@@ -319,7 +315,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
|
|
|
return
|
|
|
}
|
|
|
- if (self.thumbnailView.selectionIndexPaths.count == (self.listView?.document.pageCount)!) {
|
|
|
+ let pageCnt = self.listView?.document?.pageCount ?? 0
|
|
|
+ if (self.thumbnailView.selectionIndexPaths.count == pageCnt) {
|
|
|
self._progressHUD(message: NSLocalizedString("Unable to delete all pages", comment: ""))
|
|
|
return
|
|
|
}
|
|
@@ -505,7 +502,7 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
if ips.isEmpty {
|
|
|
return self.listView?.currentPageIndex ?? 0
|
|
|
}
|
|
|
- return ips.last!.item
|
|
|
+ return ips.last?.item ?? 0
|
|
|
}
|
|
|
|
|
|
override func splitAction() {
|
|
@@ -518,8 +515,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
|
|
|
return
|
|
|
}
|
|
|
+ guard let doc = self.pdfDocument else {
|
|
|
+ NSSound.beep()
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- let windowC = SplitWindowController(document: self.pdfDocument!)
|
|
|
+ let windowC = SplitWindowController(document: doc)
|
|
|
windowC.fileAttribute?.pagesType = .custom
|
|
|
let ips = self.indexpathsToIndexs(indexpaths: self.thumbnailView.selectionIndexPaths).sorted()
|
|
|
let string = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: ips)
|
|
@@ -571,7 +572,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
fileAttribute?.pagesString = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: self.indexpathsToIndexs(indexpaths: pages).sorted())
|
|
|
fileAttribute?.pageCnt = Int(self.thumbnailView.document?.pageCount ?? 0)
|
|
|
|
|
|
- if let data = fileAttribute?.fetchSelectPages(), data.isEmpty {
|
|
|
+ let pages = fileAttribute?.fetchSelectPages() ?? []
|
|
|
+ if pages.isEmpty {
|
|
|
KMAlertTool.runModelForMainThread(message: KMLocalizedString("Invalid page range or the page number is out of range. Please try again.", nil))
|
|
|
} else {
|
|
|
let panel = NSOpenPanel()
|
|
@@ -588,11 +590,11 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
if folderName == nil {
|
|
|
folderName = KMLocalizedString("Untitled", nil)
|
|
|
}
|
|
|
- var folderPath = "\(tFolderPath)/\(folderName!)"
|
|
|
+ var folderPath = "\(tFolderPath)/\(folderName ?? "")"
|
|
|
//创建目录
|
|
|
while (FileManager.default.fileExists(atPath: folderPath)) {
|
|
|
index += 1
|
|
|
- folderPath = "\(tFolderPath)/\(folderName!)_\(index)"
|
|
|
+ folderPath = "\(tFolderPath)/\(folderName ?? "")_\(index)"
|
|
|
// folderPath = [tFolderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%ld",folderName,index]];
|
|
|
}
|
|
|
tFolderPath = folderPath
|
|
@@ -600,16 +602,16 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
if (result == nil) {
|
|
|
// if (![[NSFileManager defaultManager] createDirectoryAtPath:tFolderPath withIntermediateDirectories:YES attributes:nil error:nil]) {
|
|
|
KMAlertTool.runModelForMainThread(message: KMLocalizedString("Failed to split!", nil))
|
|
|
- return;
|
|
|
+ return
|
|
|
}
|
|
|
let vc = KMProgressWindowController()
|
|
|
NSApp.beginSheet(vc.window!, modalFor: self.view.window!, modalDelegate: nil, didEnd: nil, contextInfo: nil)
|
|
|
DispatchQueue.global().async {
|
|
|
// NSArray * successArray = [self.pdfDocument splitByFileWithPages:fileAttribute folerPath:tFolderPath fileName:folderName];
|
|
|
- let successArray = self.pdfDocument?.splitByFileWithPages(fileAttribute!, folerPath: tFolderPath, fileName: folderName ?? "")
|
|
|
+ let successArray = self.pdfDocument?.splitByFileWithPages(fileAttribute!, folerPath: tFolderPath, fileName: folderName ?? "") ?? []
|
|
|
DispatchQueue.main.async {
|
|
|
- if let cnt = successArray?.count, cnt > 0 {
|
|
|
- let filePath = successArray!.first!
|
|
|
+ if successArray.count > 0 {
|
|
|
+ let filePath = successArray.first ?? ""
|
|
|
|
|
|
let workSpace = NSWorkspace.shared
|
|
|
workSpace.activateFileViewerSelecting([URL(fileURLWithPath: filePath)])
|
|
@@ -685,7 +687,7 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
}
|
|
|
|
|
|
private func _splitMethod(windowC: KMPageEditSplitWindowController, model: KMPageEditSplitSettingModel, limit: Bool = false) {
|
|
|
- let outputModel = windowC.model! as! KMPageEditSplitSettingModel
|
|
|
+ let outputModel = windowC.model as! KMPageEditSplitSettingModel
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
let panel = NSOpenPanel()
|
|
@@ -697,17 +699,17 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- let file_indexs = outputModel.getSplitIndexSets
|
|
|
- if (file_indexs == nil || file_indexs!.count <= 0) {
|
|
|
+ let file_indexs = outputModel.getSplitIndexSets ?? []
|
|
|
+ if (file_indexs.count <= 0) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
self.showProgressWindow(message: NSLocalizedString("Spliting...", comment: ""))
|
|
|
- self.progressC?.maxValue = Double(file_indexs!.count)
|
|
|
- let _document: CPDFDocument = (self.listView?.document)!
|
|
|
+ self.progressC?.maxValue = Double(file_indexs.count)
|
|
|
+ let _document = self.listView?.document
|
|
|
|
|
|
- let filePath = "\(panel.url!.path)/\(_document.documentURL.deletingPathExtension().lastPathComponent)"
|
|
|
+ let filePath = "\(panel.url!.path)/\(_document?.documentURL.deletingPathExtension().lastPathComponent ?? "")"
|
|
|
let uniqueFilePath = KMTools.getUniqueFilePath(filePath: filePath)
|
|
|
// Swift.debugPrint(uniqueFilePath)
|
|
|
if (!FileManager.default.fileExists(atPath: uniqueFilePath)) {
|
|
@@ -715,8 +717,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
}
|
|
|
|
|
|
var filepaths: [String] = []
|
|
|
- for i in 0 ..< file_indexs!.count {
|
|
|
- let indexs = file_indexs![i]
|
|
|
+ for i in 0 ..< file_indexs.count {
|
|
|
+ let indexs = file_indexs[i]
|
|
|
if (indexs.isEmpty) {
|
|
|
continue
|
|
|
}
|
|
@@ -726,11 +728,7 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
let newDocument = CPDFDocument()
|
|
|
newDocument?.importPages(indexs, from: _document, at: 0)
|
|
|
self.progressC?.increment(by: 1.0)
|
|
|
- if (limit) {
|
|
|
- let _ = KMTools.saveWatermarkDocument(document: newDocument!, to: URL(fileURLWithPath: filepath))
|
|
|
- } else {
|
|
|
- newDocument?.write(to: URL(fileURLWithPath: filepath))
|
|
|
- }
|
|
|
+ newDocument?.write(to: URL(fileURLWithPath: filepath))
|
|
|
}
|
|
|
self.hiddenProgressWindow()
|
|
|
self.km_endSheet()
|
|
@@ -745,12 +743,14 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
// MARK: Undo / Redo
|
|
|
|
|
|
@objc private func reversePages(indexs: IndexSet) {
|
|
|
- KMPageEditTools.reverse((self.thumbnailView.document)!, indexs
|
|
|
- ) { result, error in
|
|
|
- if (result) {
|
|
|
- self.refreshUI(indexpaths: self.indexsToIndexpaths(indexs: indexs), keepSelected: true)
|
|
|
-
|
|
|
- self.kmUndoManager?.registerUndo(withTarget: self, selector: #selector(self.reversePages), object: indexs)
|
|
|
+ if let doc = self.thumbnailView.document {
|
|
|
+ KMPageEditTools.reverse(doc, indexs
|
|
|
+ ) { result, error in
|
|
|
+ if (result) {
|
|
|
+ self.refreshUI(indexpaths: self.indexsToIndexpaths(indexs: indexs), keepSelected: true)
|
|
|
+
|
|
|
+ self.kmUndoManager?.registerUndo(withTarget: self, selector: #selector(self.reversePages), object: indexs)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -937,7 +937,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- let windowC = KMPDFEditInsertBlankPageWindow(document: self.pdfDocument!)
|
|
|
+ guard let doc = self.pdfDocument else {
|
|
|
+ NSSound.beep()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ let windowC = KMPDFEditInsertBlankPageWindow(document: doc)
|
|
|
windowC.currentPage = self.getSelecteIndex() + 1
|
|
|
windowC.insertLocation = 3
|
|
|
windowC.callback = { [weak self] pdfDoc, _, pages, insertI in
|
|
@@ -1136,27 +1141,29 @@ extension KMPDFEditViewController {
|
|
|
}
|
|
|
|
|
|
@objc func sharePageItemAction(menu:NSMenuItem) {
|
|
|
- let item = menu.parent!
|
|
|
- let index = (item.representedObject as! IndexSet).first ?? -1
|
|
|
+ guard let item = menu.parent else {
|
|
|
+ NSSound.beep()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let index = (item.representedObject as? IndexSet)?.first ?? -1
|
|
|
if Int(index) >= 0 {
|
|
|
- let doucument = self.pdfDocument!
|
|
|
- let page = doucument.page(at: UInt(index))
|
|
|
- let filename : String = doucument.documentURL.lastPathComponent
|
|
|
- let folderPath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(filename))!
|
|
|
+ let doucument = self.pdfDocument
|
|
|
+// let page = doucument.page(at: UInt(index))
|
|
|
+ let filename : String = doucument?.documentURL.lastPathComponent ?? ""
|
|
|
+ let folderPath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(filename)) ?? ""
|
|
|
try? FileManager.default.removeItem(atPath: folderPath)
|
|
|
let pdfdocument = CPDFDocument()
|
|
|
- let ret = pdfdocument!.importPages((item.representedObject as! IndexSet), from: self.thumbnailView.document, at: 0)
|
|
|
+ let ret = pdfdocument?.importPages((item.representedObject as? IndexSet) ?? [], from: self.thumbnailView.document, at: 0) ?? false
|
|
|
let url = URL(fileURLWithPath: folderPath)
|
|
|
if ret {
|
|
|
- let success = pdfdocument!.write(to:url)
|
|
|
+ let success = pdfdocument?.write(to:url) ?? false
|
|
|
if success {
|
|
|
let workspace = NSWorkspace.shared
|
|
|
workspace.activateFileViewerSelecting([url])
|
|
|
}
|
|
|
}
|
|
|
- let represent : NSSharingService = menu.representedObject as! NSSharingService
|
|
|
- represent.perform(withItems: [url])
|
|
|
-
|
|
|
+ let represent = menu.representedObject as? NSSharingService
|
|
|
+ represent?.perform(withItems: [url])
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1182,13 +1189,19 @@ extension KMPDFEditViewController {
|
|
|
|
|
|
extension KMPDFEditViewController {
|
|
|
override func menuItemAction_print(_ sender: Any?) {
|
|
|
- self.printItemAction(menu: sender as! NSMenuItem)
|
|
|
+ if let item = sender as? NSMenuItem {
|
|
|
+ self.printItemAction(menu: item)
|
|
|
+ }
|
|
|
}
|
|
|
override func menuItemAction_showPageSize(_ sender: Any?) {
|
|
|
- self.showPageSizeItemAction(menu: sender as! NSMenuItem)
|
|
|
+ if let item = sender as? NSMenuItem {
|
|
|
+ self.showPageSizeItemAction(menu: item)
|
|
|
+ }
|
|
|
}
|
|
|
override func menuItemAction_share(_ sender: Any?) {
|
|
|
- self.sharePageItemAction(menu: sender as! NSMenuItem)
|
|
|
+ if let item = sender as? NSMenuItem {
|
|
|
+ self.sharePageItemAction(menu: item)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1198,25 +1211,11 @@ extension KMPDFEditViewController {
|
|
|
func km_comboBoxSelectionDidChange(_ obj: KMPageRange) {
|
|
|
self.pageIsUpdate = false
|
|
|
|
|
|
-// let index: Int = obj.indexOfSelectedItem
|
|
|
let index = obj.rawValue
|
|
|
var indexpaths: Set<IndexPath> = []
|
|
|
var type: KMPageRange? = obj
|
|
|
-// if (index <= 0) { /// 全部页面
|
|
|
-// type = .all
|
|
|
-// } else if (index == 1) { /// 奇数页
|
|
|
-// type = .odd
|
|
|
-// } else if (index == 2) { /// 偶数页
|
|
|
-// type = .even
|
|
|
-// } else if (index == 3) { /// 横向页
|
|
|
-// type = .horizontal
|
|
|
-// } else if (index == 4) { /// 纵向页
|
|
|
-// type = .vertical
|
|
|
-// } else { /// 自定义
|
|
|
-// type = .custom
|
|
|
-// }
|
|
|
-
|
|
|
- for i in 0 ..< (self.pdfDocument?.pageCount)! {
|
|
|
+ let pageCnt = self.pdfDocument?.pageCount ?? 0
|
|
|
+ for i in 0 ..< pageCnt {
|
|
|
if (type == .all) {
|
|
|
indexpaths.insert(IndexPath(item: Int(i), section: 0))
|
|
|
} else if (type == .odd) {
|
|
@@ -1273,7 +1272,7 @@ extension KMPDFEditViewController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- let pages = KMPageRangeTools.findSelectPage(pageRangeString: self.toolBar.pageRangeView!.stringValue, pageCount: Int((self.listView?.document.pageCount)!))
|
|
|
+ let pages = KMPageRangeTools.findSelectPage(pageRangeString: self.toolBar.pageRangeView?.stringValue ?? "", pageCount: Int((self.listView?.document.pageCount) ?? 0))
|
|
|
if (pages.isEmpty) {
|
|
|
let alert = NSAlert()
|
|
|
alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
|
|
@@ -1328,10 +1327,11 @@ extension KMPDFEditViewController: KMThumbnailViewDelegate {
|
|
|
var indexs = IndexSet()
|
|
|
for document in documents {
|
|
|
for i in 0 ..< document.pageCount {
|
|
|
- let page = document.page(at: i)
|
|
|
- pages.append(page!)
|
|
|
- indexs.insert(insertIndex)
|
|
|
- insertIndex += 1
|
|
|
+ if let page = document.page(at: i) {
|
|
|
+ pages.append(page)
|
|
|
+ indexs.insert(insertIndex)
|
|
|
+ insertIndex += 1
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
self.insertPages(pages: pages, at: indexs)
|
|
@@ -1387,7 +1387,9 @@ extension KMPDFEditViewController: KMThumbnailViewDelegate {
|
|
|
func thumbnailView(thumbanView: KMThumbnailView, itemForRepresentedObjectAt indexpath: IndexPath) -> NSCollectionViewItem {
|
|
|
let cellView: KMPageEditThumbnailItem = thumbanView.collectionView.km.dequeueReusableCell(for: indexpath)
|
|
|
cellView.isShowPageSize = self.thumbnailView.isShowPageSize
|
|
|
- cellView.setPage(page: (self.pdfDocument?.page(at: UInt(indexpath.item)))!)
|
|
|
+ if let data = self.pdfDocument?.page(at: UInt(indexpath.item)) {
|
|
|
+ cellView.setPage(page: data)
|
|
|
+ }
|
|
|
|
|
|
cellView.doubleClickAction = { [unowned self] _ in
|
|
|
guard let callback = self.itemClick else {
|