Browse Source

【UI替换】打印 - poster逻辑串接

lizhe 1 year ago
parent
commit
d660ec1a71

+ 4 - 0
PDF Office/PDF Master/Class/PDFTools/Print/Model/KMPrintPaperModel.swift

@@ -42,6 +42,10 @@ struct KMPrintPaperInfo {
         return KMPaperType.paperSize(type: type, px: true)
     }
     
+//    var showSize: CGSize {
+//        return KMPaperType.paperSize(type: type, px: false)
+//    }
+    
     enum KMPaperType: String, CaseIterable {
         case Actual = "Actual Size"
         case A3 = "A3"

+ 2 - 2
PDF Office/PDF Master/Class/PDFTools/Print/Presenter/KMPrintPresenter.swift

@@ -957,12 +957,12 @@ extension KMPrintPresenter: KMPrintPresenterDraw {
 protocol KMPrintPresenterPrivate {}
 extension KMPrintPresenter: KMPrintPresenterPrivate {
     func isAnnoationStamp(type: String) -> Bool {
-        let annotationStamp: [String] = ["Square"]
+        let annotationStamp: [String] = ["Square", "Stamp"]
         return annotationStamp.contains(type)
     }
     
     func isAnnoationMarkup(type: String) -> Bool {
-        let annotationStamp: [String] = ["Widget", "Freehand"]
+        let annotationStamp: [String] = ["Widget", "Freehand", "Highlight", "Underline", "Squiggly", "Circle", "StrikeOut", "Ink"]
         return annotationStamp.contains(type)
     }
     

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/Print/View/Preview/KMPrintPreviewView.swift

@@ -94,7 +94,7 @@ class KMPrintPreviewView: KMBaseXibView {
             self.pageCountLabel.stringValue = self.previewView.document.pageCount.description
             
             if page != nil {
-                self.titleLabel.stringValue = NSLocalizedString("size", comment: "") + ":" + String(Int(page!.size.width / 28.3 * 10)) + NSLocalizedString("mm", comment: "") + "*" + String(Int(page!.size.height / 28.3 * 10)) + NSLocalizedString("mm", comment: "")
+                self.titleLabel.stringValue = NSLocalizedString("size", comment: "") + ":" + page!.size.width.description + NSLocalizedString("mm", comment: "") + "*" + String(page!.size.height.description) + NSLocalizedString("mm", comment: "")
             }
         }
     }

+ 8 - 0
PDF Office/PDF Master/Class/PDFTools/Print/View/PrintSettingView/KMPrintSettingView.swift

@@ -31,6 +31,14 @@ class KMPrintSettingView: KMBaseXibView {
         defaultView.printSettingChange = { [unowned self] view, model in
             self.printSettingChange?(self, model)
         }
+        
+        posterView.pageSettingChangeAction = { [unowned self] view, model in
+            self.pageSettingChange?(self, model)
+        }
+        
+        posterView.printSettingChangeAction = { [unowned self] view, model in
+            self.printSettingChange?(self, model)
+        }
     }
     
     override func reloadData() {

+ 111 - 58
PDF Office/PDF Master/Class/PDFTools/Print/View/PrintSettingView/View/Poster/KMPrintPosterView.swift

@@ -7,6 +7,10 @@
 
 import Cocoa
 
+typealias KMPrintPosterViewPageSettingChange = (_ view: KMPrintPosterView, _ model: KMPrintModel) -> Void
+typealias KMPrintPosterViewPrintSettingChange = (_ view: KMPrintPosterView, _ model: KMPrintModel) -> Void
+
+
 class KMPrintPosterView: KMBaseXibView {
 
     @IBOutlet weak var scaleTextField: NSTextField!
@@ -51,11 +55,14 @@ class KMPrintPosterView: KMBaseXibView {
     
     var preview: KMPDFPosterPrintContentView?
     
-    lazy var viewModel: KMPrintViewModel = KMPrintViewModel()
+    var pageSettingChangeAction: KMPrintPosterViewPageSettingChange?
+    var printSettingChangeAction: KMPrintPosterViewPrintSettingChange?
     
+    lazy var viewModel: KMPrintViewModel = KMPrintViewModel()
     
     override func setup() {
-
+        viewModel.model.page.operation.type = .poster
+        
         scaleTextField.stringValue = "100"
         scaleTextField.formatter = TextFieldFormatter()
 
@@ -83,7 +90,7 @@ class KMPrintPosterView: KMBaseXibView {
         
         unitComboBox.selectItem(at: 1)
 
-        var paperArray = KMPrintPaperInfo.KMPaperType.allValues()
+        let paperArray = KMPrintPaperInfo.KMPaperType.allValues()
         var tPaperArray = paperArray
         tPaperArray.removeFirst()
         
@@ -93,7 +100,7 @@ class KMPrintPosterView: KMBaseXibView {
         pageWidthTextField.isEnabled = false
         pageHeightTextField.isEnabled = false
 
-        var tFileArray = paperArray
+        let tFileArray = paperArray
         filePageSizeBox.addItems(withObjectValues: tFileArray)
         filePageSizeBox.selectItem(at: 0)
         filePageSizeBox.isEditable = false
@@ -152,14 +159,15 @@ class KMPrintPosterView: KMBaseXibView {
 
         tableView.tabViewItem(at: 0).label = NSLocalizedString("Tile", comment: "")
         tableView.tabViewItem(at: 1).label = NSLocalizedString("Split", comment: "")
+        tableView.delegate = self
 
-        var paperArray = KMPrintPaperInfo.KMPaperType.allValues() /*KMPageSizeTool.paperSize()*/
+        let paperArray = KMPrintPaperInfo.KMPaperType.allValues() /*KMPageSizeTool.paperSize()*/
         var tPaperArray = paperArray
         tPaperArray.removeFirst()
         splitSizeComboBox.removeAllItems()
         splitSizeComboBox.addItems(withObjectValues: tPaperArray)
 
-        var tFileArray = paperArray
+        let tFileArray = paperArray
         filePageSizeBox.removeAllItems()
         filePageSizeBox.addItems(withObjectValues: tFileArray)
 
@@ -168,23 +176,98 @@ class KMPrintPosterView: KMBaseXibView {
     }
     
     override func reloadData() {
+        let model = viewModel.model
+        
         let poster: KMPrintPageOperation.Poster = viewModel.model.page.operation.poster
         
         columnCountText.stringValue = "\(poster.pageOfPaper.point.x)"
         lineCountText.stringValue = "\(poster.pageOfPaper.point.y)"
+        
+        //pageRange
+        var range: KMPrintPageRange = self.viewModel.model.page.range
+        if range.type == .allPage {
+            pageRangeComboBox.isEditable = false
+            pageRangeComboBox.selectItem(at: 0)
+        } else if range.type == .oddPage {
+            pageRangeComboBox.isEditable = false
+            pageRangeComboBox.selectItem(at: 1)
+        } else if range.type == .evenPage {
+            pageRangeComboBox.isEditable = false
+            pageRangeComboBox.selectItem(at: 2)
+        } else if range.type == .custom {
+            pageRangeComboBox.isEditable = true
+            pageRangeComboBox.selectItem(at: 3)
+            pageRangeComboBox.stringValue = range.pageString
+        }
+        
+        //paper Type
+        if model.paper.info.type == .Actual {
+            filePageSizeBox.selectItem(at: 0)
+            paperWidthTextField.isEnabled = false
+            paperHeightTextField.isEnabled = false
+        } else if model.paper.info.type == .custom {
+            splitSizeComboBox.selectItem(at: splitSizeComboBox.numberOfItems)
+            pageWidthTextField.isEnabled = true
+            pageHeightTextField.isEnabled = true
+            
+            filePageSizeBox.selectItem(at: filePageSizeBox.numberOfItems)
+            paperWidthTextField.isEnabled = true
+            paperHeightTextField.isEnabled = true
+        } else {
+            splitSizeComboBox.selectItem(withObjectValue: model.paper.info.type.rawValue)
+            pageWidthTextField.isEnabled = false
+            pageHeightTextField.isEnabled = false
+            
+            filePageSizeBox.selectItem(withObjectValue: model.paper.info.type.rawValue)
+            paperWidthTextField.isEnabled = false
+            paperHeightTextField.isEnabled = false
+            
+            paperWidthTextField.stringValue = model.paper.info.size.width.description
+            paperHeightTextField.stringValue = model.paper.info.size.height.description
+            
+            pageWidthTextField.stringValue = model.paper.info.size.width.description
+            pageHeightTextField.stringValue = model.paper.info.size.height.description
+        }
+        
+        //page per
+        if model.page.operation.poster.pageOfPaper.type == .custom {
+            columnCountText.isEditable = true
+            lineCountText.isEditable = true
+            columnCountText.isSelectable = true
+            lineCountText.isSelectable = true
+        } else {
+            columnCountText.isEditable = false
+            lineCountText.isEditable = false
+            columnCountText.isSelectable = false
+            lineCountText.isSelectable = false
+            
+            lineCountText.stringValue = model.page.operation.poster.pageOfPaper.point.x.description
+            columnCountText.stringValue = model.page.operation.poster.pageOfPaper.point.y.description
+        }
     }
     
-    
+    func updatePDFView(isPageChange: Bool = true) {
+        debugPrint("需要刷新PDFView")
+        self.reloadData()
+        if isPageChange {
+            self.pageSettingChangeAction?(self, self.viewModel.model)
+        } else {
+            self.printSettingChangeAction?(self, self.viewModel.model)
+        }
+    }
+}
+
+extension KMPrintPosterView {
     //MARK: Action
     @IBAction func buttonItemClickCutMarks(_ sender: NSButton) {
         self.viewModel.posterCutMarkAction(isSelect: cutMarksButton.state == .on, completion: { success, model in
-                
+            self.updatePDFView()
         })
     }
 
     @IBAction func buttonItemClickLabels(_ sender: NSButton) {
         self.viewModel.posterTagsAction(isSelect: cutMarksButton.state == .on, tags:[labelTextField.stringValue]) { success, model in
-            
+            self.updatePDFView(isPageChange: false)
         }
     }
 
@@ -197,7 +280,7 @@ class KMPrintPosterView: KMBaseXibView {
         }
         
         self.viewModel.printDirectionAction(type: direction, completion: { success, model in
-            
+            self.updatePDFView(isPageChange: false)
         })
     }
 
@@ -205,11 +288,8 @@ class KMPrintPosterView: KMBaseXibView {
     @IBAction func comboBoxItemClickPageRange(_ sender: NSComboBox) {
         var range: KMPrintPageRange = KMPrintPageRange()
         if sender.indexOfSelectedItem == 0 ||
-            sender.indexOfSelectedItem == 1 || 
+            sender.indexOfSelectedItem == 1 ||
             sender.indexOfSelectedItem == 2 {
-            window?.makeFirstResponder(self)
-            sender.isEditable = false
-            
             if sender.indexOfSelectedItem == 0 {
                 range.type = .allPage
             } else if sender.indexOfSelectedItem == 1 {
@@ -219,59 +299,41 @@ class KMPrintPosterView: KMBaseXibView {
             }
         } else if sender.indexOfSelectedItem == 3 {
             sender.stringValue = ""
-            sender.isEditable = true
             window?.makeFirstResponder(sender)
             
             range.type = .custom
             range.pageString = sender.stringValue
         }
         self.viewModel.pageRangeAction(range: range) { success, model in
-            
+            self.updatePDFView()
         }
     }
 
     @IBAction func comboBoxItemClickSplitSize(_ sender: NSComboBox) {
         overlapTextField.stringValue = "0"
-        var customSize = CGSize(width: 595, height: 842)
+        let customSize = CGSize(width: 595, height: 842)
 //        self.PDFPrint.splitSize = CGSizeMake(tSize.width * 595.0/210, tSize.height * 842.0/297.0);
-        if splitSizeComboBox.indexOfSelectedItem == splitSizeComboBox.numberOfItems - 1 {
-            pageWidthTextField.isEnabled = true
-            pageHeightTextField.isEnabled = true
-        } else {
-            pageWidthTextField.isEnabled = false
-            pageHeightTextField.isEnabled = false
-        }
 
         let type = KMPrintPaperInfo.KMPaperType(rawValue: sender.stringValue) ?? .A4
         self.viewModel.printPaperTypeAction(type: type, customSize: customSize, completion: { success, model in
-            
+            self.updatePDFView()
         })
         
     }
 
     @IBAction func comboBoxItemClickFullPageSize(_ sender: NSComboBox) {
         var customSize = CGSize(width: 595, height: 842)
-        if filePageSizeBox.indexOfSelectedItem == 0 {
-            paperWidthTextField.isEnabled = false
-            paperHeightTextField.isEnabled = false
-        } else if filePageSizeBox.indexOfSelectedItem == filePageSizeBox.numberOfItems - 1 {
-            paperWidthTextField.isEnabled = true
-            paperHeightTextField.isEnabled = true
-        } else {
-            paperWidthTextField.isEnabled = false
-            paperHeightTextField.isEnabled = false
-        }
 
         overlapTextField.stringValue = "0"
         let type = KMPrintPaperInfo.KMPaperType(rawValue: sender.stringValue) ?? .A4
         self.viewModel.printPaperTypeAction(type: type, posterType: .breakUp, customSize: customSize, completion: { success, model in
-            
+            self.updatePDFView()
         })
     }
 
     @IBAction func buttonItemClickReversePage(_ sender: NSButton) {
         self.viewModel.printReverseAction(isSelect: reverseButton.state == .on) { success, model in
-            
+            self.updatePDFView()
         }
     }
 
@@ -292,7 +354,7 @@ class KMPrintPosterView: KMBaseXibView {
         
         overlapTextField.stringValue = "0"
         self.viewModel.printOverlapChangeAction(value: overlapTextField.floatValue, completion: { success, model in
-            
+            self.reloadData()
         })
     }
 
@@ -307,28 +369,18 @@ class KMPrintPosterView: KMBaseXibView {
         }
         
         self.viewModel.printContentAction(type: type, completion: { success, model in
-            
+            self.updatePDFView()
         })
     }
 
     @IBAction func comboBoxItemClickPagesPer(_ sender: NSComboBox) {
-        if selectPerComboBox.indexOfSelectedItem != 5 {
-            columnCountText.isEditable = false
-            lineCountText.isEditable = false
-            columnCountText.isSelectable = false
-            lineCountText.isSelectable = false
-        } else {
-            columnCountText.isEditable = true
-            lineCountText.isEditable = true
-            columnCountText.isSelectable = true
-            lineCountText.isSelectable = true
-        }
-        
         self.viewModel.printPagePerChangeAction(type: KMPrintPageOperation.PageOfPaper.PageType(rawValue: selectPerComboBox.stringValue) ?? .page, completion: { success, model in
-            
+            self.updatePDFView()
         })
     }
+}
 
+extension KMPrintPosterView: NSTabViewDelegate {
     func tabView(_ tabView: NSTabView, willSelect tabViewItem: NSTabViewItem?) {
         overlapTextField.stringValue = "0"
         self.viewModel.printOverlapChangeAction(value: overlapTextField.floatValue, completion: { success, model in
@@ -338,16 +390,18 @@ class KMPrintPosterView: KMBaseXibView {
         if let identifier = tabViewItem?.identifier as? String {
             if identifier == "1" {
                 self.viewModel.posterTypeAction(type: .tile) { success, model in
-                    
+                    self.updatePDFView()
                 }
             } else {
                 self.viewModel.posterTypeAction(type: .breakUp) { success, model in
-                    
+                    self.updatePDFView()
                 }
             }
         }
     }
-    
+}
+
+extension KMPrintPosterView  {
     @objc func controlTextDidEndEditing(_ notification: Notification) {
         guard let textField = notification.object as? NSTextField else {
             return
@@ -411,7 +465,7 @@ class KMPrintPosterView: KMBaseXibView {
             var size = self.viewModel.model.paper.info.size
             size.width = over
             self.viewModel.printPaperTypeAction(type: .custom, customSize: size, completion: { success, model in
-                
+                self.updatePDFView()
             })
             
         } else if textField == pageHeightTextField || textField == paperHeightTextField {
@@ -430,7 +484,7 @@ class KMPrintPosterView: KMBaseXibView {
             var size = self.viewModel.model.paper.info.size
             size.width = over
             self.viewModel.printPaperTypeAction(type: .custom, customSize: size, completion: { success, model in
-                
+                self.updatePDFView()
             })
         }
     }
@@ -468,7 +522,6 @@ class KMPrintPosterView: KMBaseXibView {
             }
         }
     }
-
 }