|
@@ -10,34 +10,20 @@ import KMComponentLibrary
|
|
|
|
|
|
let KMBatchDragType = "KMBatchDragType"
|
|
let KMBatchDragType = "KMBatchDragType"
|
|
|
|
|
|
-class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegate,NSTableViewDataSource{
|
|
|
|
-
|
|
|
|
|
|
+class KMBatchOperateLeftViewController: KMNBaseViewController {
|
|
@IBOutlet var selectFileButton: KMLongerButton!
|
|
@IBOutlet var selectFileButton: KMLongerButton!
|
|
-
|
|
|
|
@IBOutlet var deleteFileButton: NSButton!
|
|
@IBOutlet var deleteFileButton: NSButton!
|
|
-
|
|
|
|
@IBOutlet var tableView: NSTableView!
|
|
@IBOutlet var tableView: NSTableView!
|
|
-
|
|
|
|
@IBOutlet var indexTableColumn: NSTableColumn!
|
|
@IBOutlet var indexTableColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var fileNameTableColumn: NSTableColumn!
|
|
@IBOutlet var fileNameTableColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var pageRangeTableColumn: NSTableColumn!
|
|
@IBOutlet var pageRangeTableColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var sizeTableColumn: NSTableColumn!
|
|
@IBOutlet var sizeTableColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var stateTableColumn: NSTableColumn!
|
|
@IBOutlet var stateTableColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var DPIColumn: NSTableColumn!
|
|
@IBOutlet var DPIColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var dimensionsTableColumn: NSTableColumn!
|
|
@IBOutlet var dimensionsTableColumn: NSTableColumn!
|
|
-
|
|
|
|
@IBOutlet var headerOperateView: NSView!
|
|
@IBOutlet var headerOperateView: NSView!
|
|
-
|
|
|
|
@IBOutlet var showInFinderMenuItem: NSMenuItem!
|
|
@IBOutlet var showInFinderMenuItem: NSMenuItem!
|
|
-
|
|
|
|
@IBOutlet var deleteMenuItem: NSMenuItem!
|
|
@IBOutlet var deleteMenuItem: NSMenuItem!
|
|
-
|
|
|
|
@IBOutlet var blankView: KMBlankView!
|
|
@IBOutlet var blankView: KMBlankView!
|
|
|
|
|
|
var files: [KMBatchOperateFile] = []
|
|
var files: [KMBatchOperateFile] = []
|
|
@@ -49,9 +35,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
|
|
|
|
private var addFileButton_: ComponentDropdown?
|
|
private var addFileButton_: ComponentDropdown?
|
|
private var deleteButton_: ComponentButton?
|
|
private var deleteButton_: ComponentButton?
|
|
-
|
|
|
|
private var groupView_: ComponentGroup?
|
|
private var groupView_: ComponentGroup?
|
|
-
|
|
|
|
private var emptyViewTopLine: NSView = {
|
|
private var emptyViewTopLine: NSView = {
|
|
let view = NSView()
|
|
let view = NSView()
|
|
view.wantsLayer = true
|
|
view.wantsLayer = true
|
|
@@ -63,15 +47,17 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
return view
|
|
return view
|
|
}()
|
|
}()
|
|
|
|
|
|
|
|
+ private var dividerColor_: NSColor?
|
|
|
|
+
|
|
|
|
+ private var isSizeAsc_ = false
|
|
|
|
+ private var dimensionsAsc_ = false
|
|
|
|
+ private var fileNameAsc_ = false
|
|
|
|
+
|
|
deinit {
|
|
deinit {
|
|
- NotificationCenter.default.removeObserver(self)
|
|
|
|
DistributedNotificationCenter.default().removeObserver(self)
|
|
DistributedNotificationCenter.default().removeObserver(self)
|
|
}
|
|
}
|
|
override func viewDidLoad() {
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
super.viewDidLoad()
|
|
- NotificationCenter.default.addObserver(self.tableView!, selector: #selector(self.reloadData), name: NSNotification.Name(kNeedChangePageRangeNotification), object: nil)
|
|
|
|
- NotificationCenter.default.addObserver(self, selector: #selector(imageToPDFSuccessNotification(aNotification:)), name: NSNotification.Name("KMBatchOperateImageToPDFSuccessNotification"), object: nil)
|
|
|
|
- DistributedNotificationCenter.default.addObserver(self, selector: #selector(themeChanged(notification:)), name: NSNotification.Name("AppleInterfaceThemeChangedNotification"), object: nil)
|
|
|
|
|
|
|
|
for i in 0..<self.tableView.tableColumns.count {
|
|
for i in 0..<self.tableView.tableColumns.count {
|
|
let column = self.tableView.tableColumns[i]
|
|
let column = self.tableView.tableColumns[i]
|
|
@@ -89,35 +75,31 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
self.dimensionsTableColumn.resizingMask = []
|
|
self.dimensionsTableColumn.resizingMask = []
|
|
self.tableView.moveColumn(5, toColumn: 2)
|
|
self.tableView.moveColumn(5, toColumn: 2)
|
|
|
|
|
|
- self.indexTableColumn.title = " \(NSLocalizedString("Index", comment: ""))"
|
|
|
|
- self.fileNameTableColumn.title = NSLocalizedString("File Name", comment: "")
|
|
|
|
- self.pageRangeTableColumn.title = NSLocalizedString("Page Range", comment: "")
|
|
|
|
- self.sizeTableColumn.title = NSLocalizedString("Size", comment: "")
|
|
|
|
- self.stateTableColumn.title = NSLocalizedString("Status", comment: "")
|
|
|
|
- self.DPIColumn.title = NSLocalizedString("DPI", comment: "")
|
|
|
|
- self.dimensionsTableColumn.title = NSLocalizedString("Dimensions", comment: "")
|
|
|
|
|
|
+ self.indexTableColumn.title = " \(KMLocalizedString("Index", comment: ""))"
|
|
|
|
+ self.fileNameTableColumn.title = KMLocalizedString("File Name", comment: "")
|
|
|
|
+ self.pageRangeTableColumn.title = KMLocalizedString("Page Range", comment: "")
|
|
|
|
+ self.sizeTableColumn.title = KMLocalizedString("Size", comment: "")
|
|
|
|
+ self.stateTableColumn.title = KMLocalizedString("Status", comment: "")
|
|
|
|
+ self.DPIColumn.title = KMLocalizedString("DPI", comment: "")
|
|
|
|
+ self.dimensionsTableColumn.title = KMLocalizedString("Dimensions", comment: "")
|
|
|
|
|
|
self.DPIColumn.isHidden = true
|
|
self.DPIColumn.isHidden = true
|
|
self.tableView.intercellSpacing = CGSize(width: 0, height: 0)
|
|
self.tableView.intercellSpacing = CGSize(width: 0, height: 0)
|
|
-// self.tableView.backgroundColor = KMAppearance.Layout.bgColor()
|
|
|
|
self.tableView.allowsColumnReordering = false
|
|
self.tableView.allowsColumnReordering = false
|
|
self.tableView.allowsMultipleSelection = true
|
|
self.tableView.allowsMultipleSelection = true
|
|
self.tableView.enclosingScrollView?.borderType = .noBorder
|
|
self.tableView.enclosingScrollView?.borderType = .noBorder
|
|
|
|
|
|
self.headerOperateView.wantsLayer = true
|
|
self.headerOperateView.wantsLayer = true
|
|
|
|
|
|
- self.tableView.registerForDraggedTypes([NSPasteboard.PasteboardType.string,NSPasteboard.PasteboardType.fileURL]) //[KMBatchDragType,NSFilenamesPboardType]
|
|
|
|
|
|
+ self.tableView.registerForDraggedTypes([NSPasteboard.PasteboardType.string,NSPasteboard.PasteboardType.fileURL, NSPasteboard.PasteboardType(KMBatchDragType)])
|
|
self.lockFilePathArr = NSMutableArray()
|
|
self.lockFilePathArr = NSMutableArray()
|
|
self.lockFileIndex = 0
|
|
self.lockFileIndex = 0
|
|
self.progressInt = 0
|
|
self.progressInt = 0
|
|
|
|
|
|
-// self.selectFileButton.containerViewController = self
|
|
|
|
selectFileButton.title = ""
|
|
selectFileButton.title = ""
|
|
addFileButton_ = ComponentDropdown()
|
|
addFileButton_ = ComponentDropdown()
|
|
-// addFileButton_?.properties = ComponentButtonProperty(type: .gray, size: .s, state: .normal, showLeftIcon: true,buttonText: KMLocalizedString("Add Files"), icon: NSImage(named: "KMImageNameAddFilesIcon"))
|
|
|
|
addFileButton_?.properties = ComponentDropdownProperty(type: .split_graySecondary, size: .s, split: true, text: KMLocalizedString("Add Files..."))
|
|
addFileButton_?.properties = ComponentDropdownProperty(type: .split_graySecondary, size: .s, split: true, text: KMLocalizedString("Add Files..."))
|
|
// addFileButton_?.splitRightButton.properties.icon = NSImage(named: "ImageToPDFDropdownButtonIcon")
|
|
// addFileButton_?.splitRightButton.properties.icon = NSImage(named: "ImageToPDFDropdownButtonIcon")
|
|
-// addFileButton_?.setTarget(self, action: #selector(cancelButtonAction))
|
|
|
|
|
|
|
|
selectFileButton.addSubview(addFileButton_!)
|
|
selectFileButton.addSubview(addFileButton_!)
|
|
addFileButton_?.frame = selectFileButton.bounds
|
|
addFileButton_?.frame = selectFileButton.bounds
|
|
@@ -134,15 +116,10 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
deleteButton_?.properties.propertyInfo.leftIcon_nor = NSImage(named: "KMImageNameDeleteFileIcon")
|
|
deleteButton_?.properties.propertyInfo.leftIcon_nor = NSImage(named: "KMImageNameDeleteFileIcon")
|
|
deleteButton_?.setTarget(self, action: #selector(buttonClicked_DeleteFile))
|
|
deleteButton_?.setTarget(self, action: #selector(buttonClicked_DeleteFile))
|
|
|
|
|
|
-// tableView.headerView?.wantsLayer = true
|
|
|
|
-// tableView.headerView?.layer?.backgroundColor = NSColor.blue.cgColor
|
|
|
|
-// var frame = tableView.headerView?.frame
|
|
|
|
-// frame?.size.height = 32
|
|
|
|
-// tableView.headerView?.frame = frame ?? .zero
|
|
|
|
tableView.headerView = nil
|
|
tableView.headerView = nil
|
|
|
|
|
|
- self.showInFinderMenuItem.title = NSLocalizedString("Show in Finder", comment: "")
|
|
|
|
- self.deleteMenuItem.title = NSLocalizedString("Delete", comment: "")
|
|
|
|
|
|
+ self.showInFinderMenuItem.title = KMLocalizedString("Show in Finder", comment: "")
|
|
|
|
+ self.deleteMenuItem.title = KMLocalizedString("Delete", comment: "")
|
|
self.blankView.wantsLayer = true
|
|
self.blankView.wantsLayer = true
|
|
self.blankView.layer?.backgroundColor = NSColor.clear.cgColor
|
|
self.blankView.layer?.backgroundColor = NSColor.clear.cgColor
|
|
self.blankView.titleLabel.stringValue = ""
|
|
self.blankView.titleLabel.stringValue = ""
|
|
@@ -150,17 +127,9 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
self.blankView.addButton.isHidden = true
|
|
self.blankView.addButton.isHidden = true
|
|
self.blankView.secondTitleLabel.stringValue = ""
|
|
self.blankView.secondTitleLabel.stringValue = ""
|
|
self.blankView.mouseActionCallBack = { [weak self] mouseType in
|
|
self.blankView.mouseActionCallBack = { [weak self] mouseType in
|
|
-// guard let self = self else { return }
|
|
|
|
-// if mouseType == .mouseEnter {
|
|
|
|
-// self.blankView.imageView.image = NSImage(named: "KMImageNameEmptyListHov")
|
|
|
|
-// } else if mouseType == .mouseExit {
|
|
|
|
-// self.blankView.imageView.image = NSImage(named: "KMImageNameEmptyListNor")
|
|
|
|
-// } else if mouseType == .mouseDown {
|
|
|
|
-// self.blankView.imageView.image = NSImage(named: "KMImageNameEmptyListPre")
|
|
|
|
-// self.chooseFile()
|
|
|
|
-// } else if mouseType == .mouseUp {
|
|
|
|
-// self.blankView.imageView.image = NSImage(named: "KMImageNameEmptyListHov")
|
|
|
|
-// }
|
|
|
|
|
|
+ if mouseType == .mouseDown {
|
|
|
|
+ self?.chooseFile()
|
|
|
|
+ }
|
|
}
|
|
}
|
|
self.blankView.addSubview(emptyView_)
|
|
self.blankView.addSubview(emptyView_)
|
|
|
|
|
|
@@ -178,8 +147,13 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
emptyView_.km_add_leading_constraint()
|
|
emptyView_.km_add_leading_constraint()
|
|
emptyView_.km_add_trailing_constraint()
|
|
emptyView_.km_add_trailing_constraint()
|
|
emptyView_.setTarget(self, action: #selector(emptyAddFileAction))
|
|
emptyView_.setTarget(self, action: #selector(emptyAddFileAction))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override func addNotifations() {
|
|
|
|
+ super.addNotifations()
|
|
|
|
|
|
- updateViewColor()
|
|
|
|
|
|
+ NotificationCenter.default.addObserver(self.tableView!, selector: #selector(self.reloadData), name: NSNotification.Name(kNeedChangePageRangeNotification), object: nil)
|
|
|
|
+ NotificationCenter.default.addObserver(self, selector: #selector(imageToPDFSuccessNotification(aNotification:)), name: NSNotification.Name("KMBatchOperateImageToPDFSuccessNotification"), object: nil)
|
|
}
|
|
}
|
|
|
|
|
|
override func updateUILanguage() {
|
|
override func updateUILanguage() {
|
|
@@ -188,6 +162,20 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
KMMainThreadExecute {
|
|
KMMainThreadExecute {
|
|
self.addFileButton_?.properties.text = KMLocalizedString("Add Files...")
|
|
self.addFileButton_?.properties.text = KMLocalizedString("Add Files...")
|
|
self.addFileButton_?.reloadData()
|
|
self.addFileButton_?.reloadData()
|
|
|
|
+
|
|
|
|
+ self.tableView.reloadData()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override func updateUIThemeColor() {
|
|
|
|
+ super.updateUIThemeColor()
|
|
|
|
+
|
|
|
|
+ self.dividerColor_ = ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider")
|
|
|
|
+
|
|
|
|
+ KMMainThreadExecute {
|
|
|
|
+ self.updateViewColor()
|
|
|
|
+
|
|
|
|
+ self.tableView.reloadData()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -213,18 +201,13 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
self.tableView.reloadData()
|
|
self.tableView.reloadData()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- @objc func themeChanged(notification: Notification) {
|
|
|
|
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: {
|
|
|
|
- self.updateViewColor()
|
|
|
|
- })
|
|
|
|
- }
|
|
|
|
|
|
|
|
func updateViewColor() {
|
|
func updateViewColor() {
|
|
self.view.wantsLayer = true
|
|
self.view.wantsLayer = true
|
|
if KMAppearance.isDarkMode() {
|
|
if KMAppearance.isDarkMode() {
|
|
-// self.headerOperateView.layer?.backgroundColor = NSColor(red: 0.055, green: 0.067, blue: 0.078, alpha: 1).cgColor
|
|
|
|
|
|
+ let color = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-low")
|
|
|
|
+ view.layer?.backgroundColor = color.cgColor
|
|
} else {
|
|
} else {
|
|
-// self.headerOperateView.layer?.backgroundColor = NSColor(red: 0.922, green: 0.925, blue: 0.941, alpha: 1).cgColor
|
|
|
|
view.layer?.backgroundColor = .white
|
|
view.layer?.backgroundColor = .white
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -256,7 +239,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
panel.canChooseFiles = true
|
|
panel.canChooseFiles = true
|
|
#if VERSION_FREE
|
|
#if VERSION_FREE
|
|
#else
|
|
#else
|
|
- panel.message = NSLocalizedString("To select multiple files press cmd ⌘ button on keyboard and click on the target files one by one.", comment: "")
|
|
|
|
|
|
+ panel.message = KMLocalizedString("To select multiple files press cmd ⌘ button on keyboard and click on the target files one by one.", comment: "")
|
|
#endif
|
|
#endif
|
|
panel.beginSheetModal(for: self.view.window!) {
|
|
panel.beginSheetModal(for: self.view.window!) {
|
|
(result) in
|
|
(result) in
|
|
@@ -350,8 +333,8 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
func openPasswordWindow() {
|
|
func openPasswordWindow() {
|
|
-
|
|
|
|
if lockFilePathArr!.count > lockFileIndex {
|
|
if lockFilePathArr!.count > lockFileIndex {
|
|
let filePath = lockFilePathArr![lockFileIndex] as! String
|
|
let filePath = lockFilePathArr![lockFileIndex] as! String
|
|
KMBaseWindowController.checkPassword(url: URL(fileURLWithPath: filePath), type: .owner) { [unowned self] success, resultPassword in
|
|
KMBaseWindowController.checkPassword(url: URL(fileURLWithPath: filePath), type: .owner) { [unowned self] success, resultPassword in
|
|
@@ -373,10 +356,13 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
func closePwd() {
|
|
func closePwd() {
|
|
self.km_endSheet()
|
|
self.km_endSheet()
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // MARK: - Actions
|
|
|
|
+
|
|
func chooseFileFromCamera() {
|
|
func chooseFileFromCamera() {
|
|
self.progressInt = 0
|
|
self.progressInt = 0
|
|
let vc = KMDeviceBrowserWindowController.shared
|
|
let vc = KMDeviceBrowserWindowController.shared
|
|
@@ -396,10 +382,6 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
vc.showWindow(nil)
|
|
vc.showWindow(nil)
|
|
}
|
|
}
|
|
|
|
|
|
- @IBAction func buttonClicked_SelectFile(_ sender: Any) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
|
|
@IBAction func blankViewAddFileAction(_ sender: Any) {
|
|
@IBAction func blankViewAddFileAction(_ sender: Any) {
|
|
self.chooseFile()
|
|
self.chooseFile()
|
|
@@ -414,22 +396,17 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
self.files = newArr as! [KMBatchOperateFile]
|
|
self.files = newArr as! [KMBatchOperateFile]
|
|
self.tableView.reloadData()
|
|
self.tableView.reloadData()
|
|
} else {
|
|
} else {
|
|
-// if KMAlertWindowController.needShowRemoveAllFilesHint() {
|
|
|
|
- let alert = NSAlert()
|
|
|
|
- alert.alertStyle = .critical
|
|
|
|
- alert.messageText = KMLocalizedString("Clear All Recents", comment: "")+"?"
|
|
|
|
- alert.addButton(withTitle: KMLocalizedString("Delete", comment: ""))
|
|
|
|
- alert.addButton(withTitle: KMLocalizedString("Cancel", comment: ""))
|
|
|
|
- alert.beginSheetModal(for: self.view.window!) {[weak self] response in
|
|
|
|
- if response == NSApplication.ModalResponse.alertFirstButtonReturn {
|
|
|
|
- self?.files.removeAll()
|
|
|
|
- self?.tableView.reloadData()
|
|
|
|
- }
|
|
|
|
|
|
+ let alert = NSAlert()
|
|
|
|
+ alert.alertStyle = .critical
|
|
|
|
+ alert.messageText = KMLocalizedString("Clear All Recents", comment: "")+"?"
|
|
|
|
+ alert.addButton(withTitle: KMLocalizedString("Delete", comment: ""))
|
|
|
|
+ alert.addButton(withTitle: KMLocalizedString("Cancel", comment: ""))
|
|
|
|
+ alert.beginSheetModal(for: self.view.window!) {[weak self] response in
|
|
|
|
+ if response == NSApplication.ModalResponse.alertFirstButtonReturn {
|
|
|
|
+ self?.files.removeAll()
|
|
|
|
+ self?.tableView.reloadData()
|
|
}
|
|
}
|
|
-// } else {
|
|
|
|
-// self.files.removeAll()
|
|
|
|
-// self.tableView.reloadData()
|
|
|
|
-// }
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func fetchAvailableFilesInFolder(_ folderPath: String) -> [String] {
|
|
func fetchAvailableFilesInFolder(_ folderPath: String) -> [String] {
|
|
@@ -447,7 +424,6 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
array.append(path)
|
|
array.append(path)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-// UTTypeString?.release()
|
|
|
|
}
|
|
}
|
|
return array
|
|
return array
|
|
}
|
|
}
|
|
@@ -468,13 +444,13 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
containFile = true
|
|
containFile = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-// UTTypeString?.release()
|
|
|
|
if containFile {
|
|
if containFile {
|
|
break
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return containFile
|
|
return containFile
|
|
}
|
|
}
|
|
|
|
+
|
|
func switchToOperateType(_ type: KMBatchOperationType) {
|
|
func switchToOperateType(_ type: KMBatchOperationType) {
|
|
self.type = type
|
|
self.type = type
|
|
self.indexTableColumn.isHidden = false
|
|
self.indexTableColumn.isHidden = false
|
|
@@ -493,7 +469,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
self.selectFileButton.isImageToPDF = type == .CreatePDF
|
|
self.selectFileButton.isImageToPDF = type == .CreatePDF
|
|
if type == .CreatePDF {
|
|
if type == .CreatePDF {
|
|
self.pageRangeTableColumn.isHidden = false
|
|
self.pageRangeTableColumn.isHidden = false
|
|
- self.pageRangeTableColumn.title = NSLocalizedString("Dimensions", comment: "")
|
|
|
|
|
|
+ self.pageRangeTableColumn.title = KMLocalizedString("Dimensions", comment: "")
|
|
}
|
|
}
|
|
|
|
|
|
for i in 0..<self.files.count {
|
|
for i in 0..<self.files.count {
|
|
@@ -527,14 +503,10 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
for i in 0..<documentArray.count {
|
|
for i in 0..<documentArray.count {
|
|
let document = documentArray[i]
|
|
let document = documentArray[i]
|
|
let path: String = document.fileURL?.path ?? ""
|
|
let path: String = document.fileURL?.path ?? ""
|
|
-// let UTTypeString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, path!.customPathExtension as CFString, nil)
|
|
|
|
let UTTypeString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, path.customPathExtension as CFString, nil)?.takeRetainedValue() as String?
|
|
let UTTypeString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, path.customPathExtension as CFString, nil)?.takeRetainedValue() as String?
|
|
let TypeCFString = UTTypeString as CFString?
|
|
let TypeCFString = UTTypeString as CFString?
|
|
if UTTypeConformsTo(TypeCFString!, kUTTypePDF) {
|
|
if UTTypeConformsTo(TypeCFString!, kUTTypePDF) {
|
|
pdfArray.add(path as Any)
|
|
pdfArray.add(path as Any)
|
|
-// UTTypeString?.release()
|
|
|
|
- } else {
|
|
|
|
-// UTTypeString?.release()
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if !IAPProductsManager.default().isAvailableAllFunction() {
|
|
if !IAPProductsManager.default().isAvailableAllFunction() {
|
|
@@ -548,8 +520,6 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
addFilesToList(addArray: pdfArray)
|
|
addFilesToList(addArray: pdfArray)
|
|
}
|
|
}
|
|
|
|
|
|
- // MARK: - Actions
|
|
|
|
-
|
|
|
|
@objc func emptyAddFileAction() {
|
|
@objc func emptyAddFileAction() {
|
|
self.chooseFile()
|
|
self.chooseFile()
|
|
}
|
|
}
|
|
@@ -616,7 +586,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
document = CPDFDocument(data: data)
|
|
document = CPDFDocument(data: data)
|
|
|
|
|
|
} else if let outError = outError {
|
|
} else if let outError = outError {
|
|
- outError.pointee = NSError(domain: "SKDocumentErrorDomain", code: 3, userInfo: [NSLocalizedDescriptionKey: NSLocalizedString("Unable to load data from clipboard", comment: "Error description")])
|
|
|
|
|
|
+ outError.pointee = NSError(domain: "SKDocumentErrorDomain", code: 3, userInfo: [NSLocalizedDescriptionKey: KMLocalizedString("Unable to load data from clipboard", comment: "Error description")])
|
|
}
|
|
}
|
|
|
|
|
|
return document
|
|
return document
|
|
@@ -655,7 +625,133 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private func _initHeaderCellView(cellView: KMNTableHeaderCellView) {
|
|
|
|
+ var dividerColor = self.dividerColor_
|
|
|
|
+ if dividerColor == nil {
|
|
|
|
+ dividerColor = ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ cellView.leftLine.wantsLayer = true
|
|
|
|
+ cellView.leftLine.layer?.backgroundColor = dividerColor?.cgColor ?? .black
|
|
|
|
+ cellView.rightLine.wantsLayer = true
|
|
|
|
+ cellView.rightLine.layer?.backgroundColor = dividerColor?.cgColor ?? .black
|
|
|
|
+ cellView.bottomLine.wantsLayer = true
|
|
|
|
+ cellView.bottomLine.layer?.backgroundColor = dividerColor?.cgColor ?? .black
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private func _addFolderAction() {
|
|
|
|
+ let openPanel = NSOpenPanel()
|
|
|
|
+// openPanel.title = NSLocalizedString("选择并合并文件。按下键盘上的命令按钮,逐次点击目标文件,即可选择多个文件", comment: "")
|
|
|
|
+ openPanel.canChooseDirectories = true
|
|
|
|
+ openPanel.canChooseFiles = false
|
|
|
|
+ openPanel.allowsMultipleSelection = true
|
|
|
|
+
|
|
|
|
+ openPanel.beginSheetModal(for: view.window!, completionHandler: { [self] result in
|
|
|
|
+ if result != .OK {
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ var result: [URL] = []
|
|
|
|
+ for folderURL in openPanel.urls {
|
|
|
|
+ _findAllFiles(folder: folderURL, result: &result)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var paths: [String] = []
|
|
|
|
+ for url in result {
|
|
|
|
+ paths.append(url.path)
|
|
|
|
+ }
|
|
|
|
+ self.addFilesToList(addArray: NSMutableArray(array: paths))
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ private func _findAllFiles(folder: URL, result: inout [URL]) {
|
|
|
|
+ let fileManager = FileManager.default
|
|
|
|
+ var isDirectory: ObjCBool = ObjCBool(false)
|
|
|
|
+ fileManager.fileExists(atPath: folder.path, isDirectory: &isDirectory)
|
|
|
|
+ if (!isDirectory.boolValue) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let contents = try?fileManager.contentsOfDirectory(at: folder, includingPropertiesForKeys: nil)
|
|
|
|
+ if contents?.count == 0 {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let array = ["jpg","cur","bmp","jpeg","gif","png","tiff","tif","ico","icns","tga","psd","eps","hdr","jp2","jpc","pict","sgi","heic"]
|
|
|
|
+ for documentURL in contents! {
|
|
|
|
+ var isDirectory: ObjCBool = ObjCBool(false)
|
|
|
|
+ fileManager.fileExists(atPath: documentURL.path, isDirectory: &isDirectory)
|
|
|
|
+ if (isDirectory.boolValue) {
|
|
|
|
+ _findAllFiles(folder: documentURL, result: &result)
|
|
|
|
+ } else {
|
|
|
|
+ if !array.contains(documentURL.pathExtension.lowercased()) {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ result.append(documentURL)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ func switchToOperateType(_ operateType: KMBatchOperationType, files: [KMBatchOperateFile]) {
|
|
|
|
+ switchToOperateType(operateType)
|
|
|
|
+ self.files = files
|
|
|
|
+ self.tableView.reloadData()
|
|
|
|
+ }
|
|
|
|
+ func checkNeedPasswordSwitchToOperateType(_ operateType: KMBatchOperationType, files: [KMBatchOperateFile]) {
|
|
|
|
+ switchToOperateType(operateType)
|
|
|
|
+ var arr: [String] = []
|
|
|
|
+ for i in 0..<files.count {
|
|
|
|
+ let file = files[i]
|
|
|
|
+ arr.append(file.filePath)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ self.files = files
|
|
|
|
+ self.files.removeAll()
|
|
|
|
+ addFilesToList(addArray: NSMutableArray.init(array: arr))
|
|
|
|
+ self.tableView.reloadData()
|
|
|
|
+ }
|
|
|
|
+ func reloadFile(_ file: KMBatchOperateFile) {
|
|
|
|
+ var rowIndexSet = IndexSet()
|
|
|
|
+ for i in 0..<self.files.count {
|
|
|
|
+ if file.filePath == self.files[i].filePath {
|
|
|
|
+ rowIndexSet.insert(i)
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var columnIndexSet = IndexSet()
|
|
|
|
+ for i in 0..<self.tableView.numberOfColumns {
|
|
|
|
+ let identifier = self.tableView.tableColumns[i].identifier
|
|
|
|
+ if identifier.rawValue == "status" {
|
|
|
|
+ columnIndexSet.insert(i)
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if Thread.isMainThread {
|
|
|
|
+ self.tableView.reloadData(forRowIndexes: rowIndexSet, columnIndexes: columnIndexSet)
|
|
|
|
+ } else {
|
|
|
|
+ DispatchQueue.main.async {
|
|
|
|
+ self.tableView.reloadData(forRowIndexes: rowIndexSet, columnIndexes: columnIndexSet)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ func refreshConvertProgress(_ progress: CGFloat, file: KMBatchOperateFile) {
|
|
|
|
+ self.tableView.reloadData()
|
|
|
|
+ }
|
|
|
|
+ func reloadConvertInterface(withType type: KMConvertWithPDFType) {
|
|
|
|
+ if type == .WordAdvance || type == .WordStandard || type == .Excel || type == .PowerPoint || type == .RTF || type == .CSV || type == .HTML || type == .Text || type == .Json {
|
|
|
|
+ self.DPIColumn.isHidden = true
|
|
|
|
+ } else {
|
|
|
|
+ self.DPIColumn.isHidden = false
|
|
|
|
+ }
|
|
|
|
+ self.tableView.reloadData()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// MARK: - NSTableViewDelegate,NSTableViewDataSource
|
|
|
|
+
|
|
|
|
+extension KMBatchOperateLeftViewController: NSTableViewDelegate,NSTableViewDataSource {
|
|
func numberOfRows(in tableView: NSTableView) -> Int {
|
|
func numberOfRows(in tableView: NSTableView) -> Int {
|
|
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "KMBatchFilesCountNotification"), object: self.files, userInfo: [kObjectKey : self])
|
|
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "KMBatchFilesCountNotification"), object: self.files, userInfo: [kObjectKey : self])
|
|
self.deleteFileButton.isEnabled = self.files.count > 0
|
|
self.deleteFileButton.isEnabled = self.files.count > 0
|
|
@@ -666,6 +762,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
}
|
|
}
|
|
return self.files.count + 1;
|
|
return self.files.count + 1;
|
|
}
|
|
}
|
|
|
|
+
|
|
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
|
|
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
|
|
let identifier = tableColumn?.identifier
|
|
let identifier = tableColumn?.identifier
|
|
|
|
|
|
@@ -673,7 +770,6 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
let file = self.files[rowIdx]
|
|
let file = self.files[rowIdx]
|
|
|
|
|
|
let cellColor = ComponentLibrary.shared.getComponentColorFromKey("olorFill/4")
|
|
let cellColor = ComponentLibrary.shared.getComponentColorFromKey("olorFill/4")
|
|
- let dividerColor = ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider")
|
|
|
|
let titleFont = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
|
|
let titleFont = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
|
|
let titleColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/1")
|
|
let titleColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/1")
|
|
|
|
|
|
@@ -686,17 +782,12 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
|
|
|
|
cellView.titleLabel.stringValue = KMLocalizedString("")
|
|
cellView.titleLabel.stringValue = KMLocalizedString("")
|
|
|
|
|
|
- cellView.leftLine.wantsLayer = true
|
|
|
|
- cellView.leftLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.rightLine.wantsLayer = true
|
|
|
|
- cellView.rightLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.bottomLine.wantsLayer = true
|
|
|
|
- cellView.bottomLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
|
|
+ _initHeaderCellView(cellView: cellView)
|
|
return cellView
|
|
return cellView
|
|
}
|
|
}
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
_ = row + 1
|
|
_ = row + 1
|
|
- cellView.textField?.stringValue = String(format: "%d", row + 1);
|
|
|
|
|
|
+ cellView.textField?.stringValue = String(format: "%d", row);
|
|
return cellView;
|
|
return cellView;
|
|
} else if identifier?.rawValue == "pageRange"{
|
|
} else if identifier?.rawValue == "pageRange"{
|
|
if (file.currentOperateType == .CreatePDF) {
|
|
if (file.currentOperateType == .CreatePDF) {
|
|
@@ -709,12 +800,19 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.textColor = titleColor
|
|
cellView.titleLabel.textColor = titleColor
|
|
|
|
|
|
- cellView.leftLine.wantsLayer = true
|
|
|
|
- cellView.leftLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.rightLine.wantsLayer = true
|
|
|
|
- cellView.rightLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.bottomLine.wantsLayer = true
|
|
|
|
- cellView.bottomLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
|
|
+ _initHeaderCellView(cellView: cellView)
|
|
|
|
+ cellView.itemClick = { [weak self] idx, _ in
|
|
|
|
+ if idx == 1 { // 排序
|
|
|
|
+ let asc = self?.dimensionsAsc_ ?? false
|
|
|
|
+ if asc {
|
|
|
|
+ self?.files.sort(){$0.dimensions > $1.dimensions}
|
|
|
|
+ } else {
|
|
|
|
+ self?.files.sort(){$0.dimensions <= $1.dimensions}
|
|
|
|
+ }
|
|
|
|
+ self?.dimensionsAsc_ = !asc
|
|
|
|
+ self?.reloadData()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return cellView
|
|
return cellView
|
|
}
|
|
}
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
@@ -722,6 +820,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
if (file.fileType == .Image) {
|
|
if (file.fileType == .Image) {
|
|
let image = NSImage(contentsOfFile: file.filePath)
|
|
let image = NSImage(contentsOfFile: file.filePath)
|
|
cellView.textField?.stringValue = String(Int(image?.size.width ?? 0)) + "x" + String(Int(image?.size.height ?? 0))
|
|
cellView.textField?.stringValue = String(Int(image?.size.width ?? 0)) + "x" + String(Int(image?.size.height ?? 0))
|
|
|
|
+ file.dimensions = Float((image?.size.width ?? 0) * (image?.size.height ?? 0))
|
|
}
|
|
}
|
|
|
|
|
|
return cellView;
|
|
return cellView;
|
|
@@ -740,12 +839,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.textColor = titleColor
|
|
cellView.titleLabel.textColor = titleColor
|
|
|
|
|
|
- cellView.leftLine.wantsLayer = true
|
|
|
|
- cellView.leftLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.rightLine.wantsLayer = true
|
|
|
|
- cellView.rightLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.bottomLine.wantsLayer = true
|
|
|
|
- cellView.bottomLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
|
|
+ _initHeaderCellView(cellView: cellView)
|
|
return cellView
|
|
return cellView
|
|
}
|
|
}
|
|
let cellView = KMBatchTableCellView(type: .Status)
|
|
let cellView = KMBatchTableCellView(type: .Status)
|
|
@@ -769,12 +863,19 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.textColor = titleColor
|
|
cellView.titleLabel.textColor = titleColor
|
|
|
|
|
|
- cellView.leftLine.wantsLayer = true
|
|
|
|
- cellView.leftLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.rightLine.wantsLayer = true
|
|
|
|
- cellView.rightLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.bottomLine.wantsLayer = true
|
|
|
|
- cellView.bottomLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
|
|
+ _initHeaderCellView(cellView: cellView)
|
|
|
|
+ cellView.itemClick = { [weak self] idx, _ in
|
|
|
|
+ if idx == 1 { // 排序
|
|
|
|
+ let asc = self?.isSizeAsc_ ?? false
|
|
|
|
+ if asc {
|
|
|
|
+ self?.files.sort(){$0.fileSize > $1.fileSize}
|
|
|
|
+ } else {
|
|
|
|
+ self?.files.sort(){$0.fileSize <= $1.fileSize}
|
|
|
|
+ }
|
|
|
|
+ self?.isSizeAsc_ = !asc
|
|
|
|
+ self?.reloadData()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return cellView
|
|
return cellView
|
|
}
|
|
}
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
@@ -790,12 +891,19 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.textColor = titleColor
|
|
cellView.titleLabel.textColor = titleColor
|
|
|
|
|
|
- cellView.leftLine.wantsLayer = true
|
|
|
|
- cellView.leftLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.rightLine.wantsLayer = true
|
|
|
|
- cellView.rightLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.bottomLine.wantsLayer = true
|
|
|
|
- cellView.bottomLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
|
|
+ _initHeaderCellView(cellView: cellView)
|
|
|
|
+ cellView.itemClick = { [weak self] idx, _ in
|
|
|
|
+ if idx == 1 { // 排序
|
|
|
|
+ let asc = self?.fileNameAsc_ ?? false
|
|
|
|
+ if asc {
|
|
|
|
+ self?.files.sort(){$0.filePath.lastPathComponent > $1.filePath.lastPathComponent}
|
|
|
|
+ } else {
|
|
|
|
+ self?.files.sort(){$0.filePath.lastPathComponent <= $1.filePath.lastPathComponent}
|
|
|
|
+ }
|
|
|
|
+ self?.fileNameAsc_ = !asc
|
|
|
|
+ self?.reloadData()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return cellView
|
|
return cellView
|
|
}
|
|
}
|
|
let cellView = KMBatchTableCellView(type: .FileName)
|
|
let cellView = KMBatchTableCellView(type: .FileName)
|
|
@@ -824,13 +932,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.font = titleFont
|
|
cellView.titleLabel.textColor = titleColor
|
|
cellView.titleLabel.textColor = titleColor
|
|
|
|
|
|
- cellView.leftLine.wantsLayer = true
|
|
|
|
- cellView.leftLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.rightLine.wantsLayer = true
|
|
|
|
- cellView.rightLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
- cellView.bottomLine.wantsLayer = true
|
|
|
|
- cellView.bottomLine.layer?.backgroundColor = dividerColor.cgColor
|
|
|
|
-// cellView.
|
|
|
|
|
|
+ _initHeaderCellView(cellView: cellView)
|
|
return cellView
|
|
return cellView
|
|
}
|
|
}
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
let cellView = KMBatchTableCellView(type: .Size)
|
|
@@ -882,12 +984,24 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
return rowView
|
|
return rowView
|
|
}
|
|
}
|
|
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
|
|
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
|
|
- let indexSetData = try? NSKeyedArchiver.archivedData(withRootObject: rowIndexes, requiringSecureCoding: true)
|
|
|
|
|
|
+ if rowIndexes.first == 0 {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var theIndex = IndexSet()
|
|
|
|
+ for idx in rowIndexes {
|
|
|
|
+ theIndex.insert(idx-1)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let indexSetData = try? NSKeyedArchiver.archivedData(withRootObject: theIndex, requiringSecureCoding: true)
|
|
pboard.declareTypes([NSPasteboard.PasteboardType.string], owner: self)
|
|
pboard.declareTypes([NSPasteboard.PasteboardType.string], owner: self)
|
|
pboard.setData(indexSetData, forType: NSPasteboard.PasteboardType(rawValue: KMBatchDragType) )
|
|
pboard.setData(indexSetData, forType: NSPasteboard.PasteboardType(rawValue: KMBatchDragType) )
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation {
|
|
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation {
|
|
|
|
+ if row == 0 {
|
|
|
|
+ return NSDragOperation(rawValue: 0)
|
|
|
|
+ }
|
|
var isCanDrag = false
|
|
var isCanDrag = false
|
|
var result: NSDragOperation = []
|
|
var result: NSDragOperation = []
|
|
let pboard = info.draggingPasteboard
|
|
let pboard = info.draggingPasteboard
|
|
@@ -942,18 +1056,20 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
let backUpArray = self.files
|
|
let backUpArray = self.files
|
|
var referenceIndex = -1
|
|
var referenceIndex = -1
|
|
rowIndexes.enumerate(options: .reverse, using: { (idx, stop) in
|
|
rowIndexes.enumerate(options: .reverse, using: { (idx, stop) in
|
|
- let sortFile = backUpArray[idx]
|
|
|
|
|
|
+ let theIdx = max(0, idx)
|
|
|
|
+ let sortFile = backUpArray[theIdx]
|
|
|
|
+ let theRow = row-1
|
|
if referenceIndex < 0 {
|
|
if referenceIndex < 0 {
|
|
- if idx > row {
|
|
|
|
|
|
+ if idx > theRow {
|
|
self.files.remove(at: idx)
|
|
self.files.remove(at: idx)
|
|
- self.files.insert(sortFile, at: row)
|
|
|
|
- } else if idx < row {
|
|
|
|
- if row > self.files.count {
|
|
|
|
|
|
+ self.files.insert(sortFile, at: theRow)
|
|
|
|
+ } else if idx < theRow {
|
|
|
|
+ if theRow > self.files.count {
|
|
self.files.remove(at: idx)
|
|
self.files.remove(at: idx)
|
|
self.files.append(sortFile)
|
|
self.files.append(sortFile)
|
|
} else {
|
|
} else {
|
|
self.files.remove(at: idx)
|
|
self.files.remove(at: idx)
|
|
- self.files.insert(sortFile, at: row - 1)
|
|
|
|
|
|
+ self.files.insert(sortFile, at: theRow - 1)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
referenceIndex = self.files.firstIndex(of: sortFile) ?? -1
|
|
referenceIndex = self.files.firstIndex(of: sortFile) ?? -1
|
|
@@ -1008,7 +1124,7 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
if !pdf.allowsPrinting || !pdf.allowsCopying {
|
|
if !pdf.allowsPrinting || !pdf.allowsCopying {
|
|
let alert = NSAlert()
|
|
let alert = NSAlert()
|
|
alert.alertStyle = .critical
|
|
alert.alertStyle = .critical
|
|
- alert.messageText = NSLocalizedString("This is a secured document. Editing is not permitted.", comment: "")
|
|
|
|
|
|
+ alert.messageText = KMLocalizedString("This is a secured document. Editing is not permitted.", comment: "")
|
|
alert.runModal()
|
|
alert.runModal()
|
|
continue
|
|
continue
|
|
} else if document?.isLocked ?? false {
|
|
} else if document?.isLocked ?? false {
|
|
@@ -1050,63 +1166,11 @@ class KMBatchOperateLeftViewController: KMNBaseViewController,NSTableViewDelegat
|
|
}
|
|
}
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
- func switchToOperateType(_ operateType: KMBatchOperationType, files: [KMBatchOperateFile]) {
|
|
|
|
- switchToOperateType(operateType)
|
|
|
|
- self.files = files
|
|
|
|
- self.tableView.reloadData()
|
|
|
|
- }
|
|
|
|
- func checkNeedPasswordSwitchToOperateType(_ operateType: KMBatchOperationType, files: [KMBatchOperateFile]) {
|
|
|
|
- switchToOperateType(operateType)
|
|
|
|
- var arr: [String] = []
|
|
|
|
- for i in 0..<files.count {
|
|
|
|
- let file = files[i]
|
|
|
|
- arr.append(file.filePath)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- self.files = files
|
|
|
|
- self.files.removeAll()
|
|
|
|
- addFilesToList(addArray: NSMutableArray.init(array: arr))
|
|
|
|
- self.tableView.reloadData()
|
|
|
|
- }
|
|
|
|
- func reloadFile(_ file: KMBatchOperateFile) {
|
|
|
|
- var rowIndexSet = IndexSet()
|
|
|
|
- for i in 0..<self.files.count {
|
|
|
|
- if file.filePath == self.files[i].filePath {
|
|
|
|
- rowIndexSet.insert(i)
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- var columnIndexSet = IndexSet()
|
|
|
|
- for i in 0..<self.tableView.numberOfColumns {
|
|
|
|
- let identifier = self.tableView.tableColumns[i].identifier
|
|
|
|
- if identifier.rawValue == "status" {
|
|
|
|
- columnIndexSet.insert(i)
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if Thread.isMainThread {
|
|
|
|
- self.tableView.reloadData(forRowIndexes: rowIndexSet, columnIndexes: columnIndexSet)
|
|
|
|
- } else {
|
|
|
|
- DispatchQueue.main.async {
|
|
|
|
- self.tableView.reloadData(forRowIndexes: rowIndexSet, columnIndexes: columnIndexSet)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- func refreshConvertProgress(_ progress: CGFloat, file: KMBatchOperateFile) {
|
|
|
|
- self.tableView.reloadData()
|
|
|
|
- }
|
|
|
|
- func reloadConvertInterface(withType type: KMConvertWithPDFType) {
|
|
|
|
- if type == .WordAdvance || type == .WordStandard || type == .Excel || type == .PowerPoint || type == .RTF || type == .CSV || type == .HTML || type == .Text || type == .Json {
|
|
|
|
- self.DPIColumn.isHidden = true
|
|
|
|
- } else {
|
|
|
|
- self.DPIColumn.isHidden = false
|
|
|
|
- }
|
|
|
|
- self.tableView.reloadData()
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-extension KMBatchOperateLeftViewController: NSMenuDelegate, NSMenuItemValidation{
|
|
|
|
|
|
+// MARK: - NSMenuDelegate, NSMenuItemValidation
|
|
|
|
+
|
|
|
|
+extension KMBatchOperateLeftViewController: NSMenuDelegate, NSMenuItemValidation {
|
|
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
|
|
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
|
|
let action = menuItem.action
|
|
let action = menuItem.action
|
|
if action == #selector(menuItem_ShowInFinder(_:)) || action == #selector(menuItem_Delete(_:)) {
|
|
if action == #selector(menuItem_ShowInFinder(_:)) || action == #selector(menuItem_Delete(_:)) {
|
|
@@ -1131,7 +1195,6 @@ extension KMBatchOperateLeftViewController: ComponentDropdownDelegate {
|
|
|
|
|
|
extension KMBatchOperateLeftViewController: ComponentGroupDelegate {
|
|
extension KMBatchOperateLeftViewController: ComponentGroupDelegate {
|
|
func componentGroupDidDismiss(group: ComponentGroup?) {
|
|
func componentGroupDidDismiss(group: ComponentGroup?) {
|
|
-
|
|
|
|
removeGroupView()
|
|
removeGroupView()
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1141,7 +1204,7 @@ extension KMBatchOperateLeftViewController: ComponentGroupDelegate {
|
|
if index == 0 {
|
|
if index == 0 {
|
|
chooseFile()
|
|
chooseFile()
|
|
} else if index == 1 {
|
|
} else if index == 1 {
|
|
- chooseFile()
|
|
|
|
|
|
+ _addFolderAction()
|
|
} else if index == 2 {
|
|
} else if index == 2 {
|
|
let pboard = NSPasteboard.general
|
|
let pboard = NSPasteboard.general
|
|
if let document = self.openDocumentWithImageFromPasteboard(pboard, error: nil) {
|
|
if let document = self.openDocumentWithImageFromPasteboard(pboard, error: nil) {
|