|
@@ -26,7 +26,6 @@ protocol KMEditImagePropertyViewControllerDelegate: NSObject {
|
|
|
}
|
|
|
|
|
|
class KMEditImagePropertyViewController: NSViewController {
|
|
|
-
|
|
|
@IBOutlet weak var backgroundView: NSView!
|
|
|
@IBOutlet weak var titleLabel: NSTextField!
|
|
|
|
|
@@ -107,7 +106,10 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
|
|
|
weak var delegate: KMEditImagePropertyViewControllerDelegate?
|
|
|
|
|
|
+ weak var handdler: KMEditPDfHanddler?
|
|
|
+
|
|
|
deinit {
|
|
|
+ KMPrint("KMEditImagePropertyViewController deinit.")
|
|
|
self.removeNotification()
|
|
|
}
|
|
|
|
|
@@ -152,8 +154,8 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
self.wTextFieldItemView.rightView = wRightView
|
|
|
var formatter = NumberFormatter()
|
|
|
formatter.numberStyle = .decimal
|
|
|
- formatter.maximum = NSNumber(value: 999)
|
|
|
- formatter.minimum = NSNumber(value: 1)
|
|
|
+// formatter.maximum = NSNumber(value: 999)
|
|
|
+// formatter.minimum = NSNumber(value: 1)
|
|
|
self.wTextFieldItemView.textFiled.formatter = formatter
|
|
|
|
|
|
self.hTextFieldItemView.backgroundView.wantsLayer = true
|
|
@@ -162,6 +164,7 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
self.hTextFieldItemView.backgroundView.layer?.borderColor = NSColor(hex: "#DFE1E5").cgColor
|
|
|
self.hTextFieldItemView.backgroundView.layer?.cornerRadius = 4
|
|
|
self.hTextFieldItemView.delegate = self
|
|
|
+ self.hTextFieldItemView.textFiled.formatter = formatter
|
|
|
let hRightView = NSView()
|
|
|
hRightView.frame = NSMakeRect(0, 0, 24, 32)
|
|
|
let hIv = NSImageView()
|
|
@@ -185,12 +188,15 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
self.whVC?.pagination()
|
|
|
whVC?.borderColor_hov = KMAppearance.Interactive.s0Color()
|
|
|
whVC?.borderColor_act = KMAppearance.Interactive.s0Color()
|
|
|
+ whVC?.borderColor_disabled = KMAppearance.Interactive.s0Color()
|
|
|
whVC?.cornerRadius = 4
|
|
|
whVC?.cornerRadius_hov = 4
|
|
|
whVC?.cornerRadius_act = 4
|
|
|
+ whVC?.cornerRadius_disabled = 4
|
|
|
whVC?.background_hov = KMAppearance.view_bg_dis_color()
|
|
|
whVC?.background_focus = KMAppearance.Layout.l1Color()
|
|
|
whVC?.background_act = KMAppearance.buttonSelectedColor()
|
|
|
+ whVC?.background_disabled = KMAppearance.buttonDisabledColor()
|
|
|
|
|
|
self.rotateTitleLabel.stringValue = NSLocalizedString("Rotate", comment: "")
|
|
|
self.rotateTextFieldItemView.delegate = self
|
|
@@ -472,6 +478,8 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
self.updateImageAreasOpacity(opacity: opacity, state: .ended, needListView: false)
|
|
|
self.turnOverBox.isHidden = false
|
|
|
self.opacityTitleLabel.isHidden = false
|
|
|
+ self.whVC?.state = .Norm
|
|
|
+ self.cropVC?.state = .Norm
|
|
|
} else if imagesAreas.count > 1 && imagesAreas.count == areas.count { //多选图片
|
|
|
self.headerBox.isHidden = false
|
|
|
self.headerBoxHeight.constant = 176
|
|
@@ -492,6 +500,17 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
self.updateImageAreasOpacity(opacity: opacity, state: .ended, needListView: false)
|
|
|
self.turnOverBox.isHidden = false
|
|
|
self.opacityTitleLabel.isHidden = false
|
|
|
+
|
|
|
+ self.whVC?.state = .Disabled
|
|
|
+ self.cropVC?.state = .Disabled
|
|
|
+
|
|
|
+ if let data = self.handdler?.editAreasOpacityIsEqual(), data {
|
|
|
+ self.opacitySlider.isEnabled = true
|
|
|
+ self.opacityVC?.state = .Norm
|
|
|
+ } else {
|
|
|
+ self.opacitySlider.isEnabled = false
|
|
|
+ self.opacityVC?.state = .Disabled
|
|
|
+ }
|
|
|
} else if imagesAreas.count > 0 && imagesAreas.count != areas.count { //多选图片跟文字
|
|
|
self.opacityBoxBottomMaginConstraint.constant = 8
|
|
|
self.alignmentViewTopConstraint.constant = 0
|
|
@@ -551,21 +570,23 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
}
|
|
|
|
|
|
func updateWHData() {
|
|
|
- let areas = self.listView.editingAreas() as? [CPDFEditArea] ?? []
|
|
|
- if areas.count == 1 {
|
|
|
- let areaFrame = areas.first?.bounds ?? .zero
|
|
|
+ if let data = self.handdler?.editAreasBoundsIsEqualForWidth(), data {
|
|
|
+ let areaFrame = self.handdler?.editingAreas.first?.bounds ?? .zero
|
|
|
self.wTextFieldItemView.stringValue = String(format: "%.1f", areaFrame.size.width)
|
|
|
+ } else {
|
|
|
+ self.wTextFieldItemView.stringValue = "--"
|
|
|
+ }
|
|
|
+ if let data = self.handdler?.editAreasBoundsIsEqualForHeight(), data {
|
|
|
+ let areaFrame = self.handdler?.editingAreas.first?.bounds ?? .zero
|
|
|
self.hTextFieldItemView.stringValue = String(format: "%.1f", areaFrame.size.height)
|
|
|
} else {
|
|
|
- self.wTextFieldItemView.stringValue = "-"
|
|
|
- self.hTextFieldItemView.stringValue = "-"
|
|
|
+ self.hTextFieldItemView.stringValue = "--"
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func updateRotateData() {
|
|
|
- let areas = self.listView.editingAreas() as? [CPDFEditArea] ?? []
|
|
|
- if areas.count == 1 {
|
|
|
- let area = (areas.first as? CPDFEditImageArea)
|
|
|
+ if let data = self.handdler?.editAreasRotateIsEqual(), data {
|
|
|
+ let area = self.handdler?.editingImageAreas.first
|
|
|
let rotate = self.listView.getRotateWith(area)
|
|
|
let stringValue = self.rotateTextFieldItemView.stringValue?.replacingOccurrences(of: "°", with: "")
|
|
|
let number = NSNumber(value: rotate)
|
|
@@ -573,7 +594,7 @@ class KMEditImagePropertyViewController: NSViewController {
|
|
|
let string = formatter.string(for: number)
|
|
|
self.rotateTextFieldItemView.stringValue = "\(string ?? "0") °"
|
|
|
} else {
|
|
|
- self.rotateTextFieldItemView.stringValue = "-"
|
|
|
+ self.rotateTextFieldItemView.stringValue = "--"
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -713,32 +734,16 @@ extension KMEditImagePropertyViewController {
|
|
|
}
|
|
|
|
|
|
@IBAction func cutImageAction(_ sender: Any) {
|
|
|
- if self.listView.selectImageAreas == nil {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- self.listView.isEditImage = true
|
|
|
- self.listView.enterCrop(with: self.listView.selectImageAreas)
|
|
|
- self.updateButtonState(hidden: false)
|
|
|
+ // selectImageAreas
|
|
|
+ self.handdler?.cropAction()
|
|
|
}
|
|
|
|
|
|
@IBAction func confirmVCImageAction(_ sender: Any) {
|
|
|
- if self.listView.selectImageAreas == nil || self.listView.cropAreas == nil {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- self.listView.cropEditImageArea(self.listView.selectImageAreas, withBounds: self.listView.cropAreas.cropRect)
|
|
|
- self.cancelCutImageAction(cancelVC?.button as Any)
|
|
|
+ self.handdler?.cropComfirmAction()
|
|
|
}
|
|
|
|
|
|
@IBAction func cancelCutImageAction(_ sender: Any) {
|
|
|
- if self.listView.selectImageAreas == nil {
|
|
|
- return
|
|
|
- }
|
|
|
- self.listView.exitCrop(with: self.listView.selectImageAreas)
|
|
|
- self.listView.cropAreas = nil
|
|
|
- self.listView.isEditImage = false
|
|
|
- self.updateButtonState(hidden: true)
|
|
|
+ self.handdler?.cropCancelAction()
|
|
|
}
|
|
|
|
|
|
@IBAction func restoreCutImageAction(_ sender: Any) {
|
|
@@ -753,85 +758,12 @@ extension KMEditImagePropertyViewController {
|
|
|
return
|
|
|
}
|
|
|
FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_PageEdit", withProperties: ["SubTbr_Btn": "Btn_SubTbr_PageEdit_Replace"])
|
|
|
- let panel = NSOpenPanel()
|
|
|
- panel.allowsMultipleSelection = false
|
|
|
- panel.allowedFileTypes = ["png","jpg"]
|
|
|
- panel.beginSheetModal(for: NSApp.mainWindow!) { response in
|
|
|
- if response == .OK {
|
|
|
- let openPath = panel.url?.path
|
|
|
-// let s = self.listView.extractImage(with: self.selectImageAreas, toImagePath: openPath!)
|
|
|
- let s = self.listView.replace(self.listView.selectImageAreas, imagePath: openPath!)
|
|
|
- if s {
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ self.handdler?.replaceAction()
|
|
|
}
|
|
|
|
|
|
@IBAction func exportImageAction(_ sender: Any) {
|
|
|
- if self.listView.selectImageAreas == nil {
|
|
|
- return
|
|
|
- }
|
|
|
- if imagesAreas.count == 1 {
|
|
|
- let panel = NSSavePanel()
|
|
|
- panel.nameFieldStringValue = "\(NSLocalizedString("Untitled", comment: "")).jpg"
|
|
|
-// let button = NSButton.init(checkboxWithTitle: NSLocalizedString("Open the document after saving", comment: ""), target: nil, action: nil)
|
|
|
-// button.state = .on
|
|
|
-// panel.accessoryView = button
|
|
|
- panel.isExtensionHidden = true
|
|
|
- let response = panel.runModal()
|
|
|
- if response == .OK {
|
|
|
- let url = panel.url
|
|
|
- if FileManager.default.fileExists(atPath: url!.path) {
|
|
|
- try?FileManager.default.removeItem(atPath: url!.path)
|
|
|
- }
|
|
|
- let result = self.listView.extractImage(with: self.listView.selectImageAreas, toImagePath: url!.path)
|
|
|
- if result {
|
|
|
-// if button.state == .on { /// 开启文档
|
|
|
-// NSWorkspace.shared.openFile(url!.path)
|
|
|
- NSWorkspace.shared.activateFileViewerSelecting([url!])
|
|
|
-// } else {
|
|
|
-//
|
|
|
-// }
|
|
|
- }
|
|
|
- }
|
|
|
- } else if imagesAreas.count > 1 {
|
|
|
- let panel = NSOpenPanel()
|
|
|
- panel.canChooseFiles = false
|
|
|
- panel.canChooseDirectories = true
|
|
|
- panel.canCreateDirectories = true
|
|
|
- panel.allowsMultipleSelection = false
|
|
|
- panel.beginSheetModal(for: NSApp.mainWindow!) { response in
|
|
|
- if response == .OK {
|
|
|
- let outputURL = panel.url
|
|
|
- let s = self.listView.document.documentURL.lastPathComponent
|
|
|
- let folderPath = self.listView.document.documentURL.deletingPathExtension().lastPathComponent + "_extract"
|
|
|
- var filePath = outputURL?.path.stringByAppendingPathComponent(folderPath)
|
|
|
-
|
|
|
- var i = 1
|
|
|
- let testFilePath = filePath
|
|
|
- while FileManager.default.fileExists(atPath: filePath!) {
|
|
|
- filePath = testFilePath! + "\(i)"
|
|
|
- i = i + 1
|
|
|
- }
|
|
|
- try? FileManager.default.createDirectory(atPath: filePath!, withIntermediateDirectories: false, attributes: nil)
|
|
|
- var saveURLs : [URL] = []
|
|
|
- for j in 0 ... self.imagesAreas.count-1 {
|
|
|
- let documentFileName = self.listView.document.documentURL.deletingPathExtension().lastPathComponent
|
|
|
- var outPath = filePath!
|
|
|
- outPath = outPath.stringByAppendingPathComponent(documentFileName)
|
|
|
- outPath = outPath + "page \(j+1)"
|
|
|
- outPath = outPath.stringByAppendingPathExtension("jpg")
|
|
|
- let result = self.listView.extractImage(with: self.imagesAreas[j], toImagePath: outPath)
|
|
|
- if result {
|
|
|
- saveURLs.append(URL(fileURLWithPath: outPath))
|
|
|
- }
|
|
|
- }
|
|
|
- NSWorkspace.shared.activateFileViewerSelecting(saveURLs)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ self.handdler?.exportAction()
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -896,7 +828,8 @@ extension KMEditImagePropertyViewController: KMTextFieldDelegate {
|
|
|
let string = formatter.string(for: number)
|
|
|
self.rotateTextFieldItemView.stringValue = "\(string ?? "0") °"
|
|
|
|
|
|
- if let area = self.listView.editingAreas().first as? CPDFEditImageArea {
|
|
|
+ let areas = self.handdler?.editingImageAreas ?? []
|
|
|
+ for area in areas {
|
|
|
let rotate = self.listView.getRotateWith(area)
|
|
|
let rotate2 = string?.stringToCGFloat() ?? 0
|
|
|
let offset = rotate2-rotate
|
|
@@ -913,9 +846,9 @@ extension KMEditImagePropertyViewController: KMTextFieldDelegate {
|
|
|
let string = self.wTextFieldItemView.textFiled.formatter?.string(for: number)
|
|
|
self.wTextFieldItemView.stringValue = string ?? ""
|
|
|
|
|
|
- let areas = self.listView?.editingAreas() as? [CPDFEditArea] ?? []
|
|
|
- if let area = areas.first as? CPDFEditImageArea {
|
|
|
- self.listView.editAreaBoundUpdating = true
|
|
|
+ let areas = self.handdler?.editingImageAreas ?? []
|
|
|
+ self.listView.editAreaBoundUpdating = true
|
|
|
+ for area in areas {
|
|
|
let state = self.whVC?.state ?? .None
|
|
|
var bounds = area.bounds
|
|
|
let width = string?.stringToCGFloat() ?? 0
|
|
@@ -946,9 +879,11 @@ extension KMEditImagePropertyViewController: KMTextFieldDelegate {
|
|
|
let string = self.hTextFieldItemView.textFiled.formatter?.string(for: number)
|
|
|
self.hTextFieldItemView.stringValue = string ?? ""
|
|
|
|
|
|
- let areas = self.listView?.editingAreas() as? [CPDFEditArea] ?? []
|
|
|
- if let area = areas.first as? CPDFEditImageArea {
|
|
|
- self.listView.editAreaBoundUpdating = true
|
|
|
+// let areas = self.listView?.editingAreas() as? [CPDFEditArea] ?? []
|
|
|
+ let areas = self.handdler?.editingImageAreas ?? []
|
|
|
+ self.listView.editAreaBoundUpdating = true
|
|
|
+ for area in areas {
|
|
|
+// if let area = areas.first as? CPDFEditImageArea {
|
|
|
let state = self.whVC?.state ?? .None
|
|
|
var bounds = area.bounds
|
|
|
let height = string?.stringToCGFloat() ?? 0
|