Browse Source

【UI替换】编辑工具 - 合并UI完善

lizhe 1 year ago
parent
commit
4f6b606fff

+ 85 - 2
PDF Office/PDF Master/Class/PDFTools/Merge/MergeNew/View/KMMergeBlankView/KMMergeBlankView.swift

@@ -7,12 +7,95 @@
 
 import Cocoa
 
-class KMMergeBlankView: NSView {
-
+typealias KMMergeBlankViewDragAction = (_ view: KMMergeBlankView, _ fileNames: [URL]) -> Void
+class KMMergeBlankView: KMBaseXibView {
+    @IBOutlet weak var selectViewBox: KMBox!
+    @IBOutlet weak var iconImageView: NSImageView!
+    @IBOutlet weak var titleLable: NSTextField!
+    @IBOutlet weak var subTitleLabel: NSTextField!
+    
+    var dragAction: KMMergeBlankViewDragAction?
+    
     override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
 
         // Drawing code here.
     }
     
+    override func setup() {
+        self.titleLable.stringValue = NSLocalizedString("Select Files", comment: "")
+        self.subTitleLabel.stringValue = NSLocalizedString("Drop files here or Click Add Files at upper left corner. You can drag files to reorder as you need.", comment: "")
+        
+        
+//        selectViewBox.moveCallback = { [unowned self] mouseEntered, mouseBox in
+//            if mouseEntered {
+//                iconImageView.image = NSImage(named: "KMImageNameEmptyListHov")
+//            } else {
+//                iconImageView.image = NSImage(named: "KMImageNameEmptyListNor")
+//            }
+//        }
+//        
+//        selectViewBox.downCallback = { [unowned self] downEntered, mouseBox, event in
+//            if downEntered {
+//                iconImageView.image = NSImage(named: "KMImageNameEmptyListPre")
+//            } else {
+//                iconImageView.image = NSImage(named: "KMImageNameEmptyListHov")
+//            }
+//        }
+        
+        registerForDraggedTypes([.fileURL])
+    }
+}
+
+extension KMMergeBlankView {
+    override func draggingExited(_ sender: NSDraggingInfo?) {
+
+    }
+
+    override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
+        let pboard = sender.draggingPasteboard
+        var isCanDrag = false
+        var result = NSDragOperation.copy
+        
+        if pboard.availableType(from: [.fileURL]) != nil {
+            if let fileNames = pboard.propertyList(forType: .fileURL) as? [String] {
+                for path in fileNames {
+                    if path.lowercased().hasSuffix("pdf") {
+                        isCanDrag = true
+                    } else {
+                        isCanDrag = false
+                        break
+                    }
+                }
+            }
+        }
+        
+        self.layer?.borderColor = NSColor.clear.cgColor
+        
+        if isCanDrag {
+            result = NSDragOperation.copy
+        }
+        
+        return result
+    }
+
+    override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {
+        let pboard = sender.draggingPasteboard
+        if pboard.availableType(from: [.fileURL]) != nil {
+            var urls: [URL] = []
+            for item in pboard.pasteboardItems! {
+                let fileURL = item.string(forType: .fileURL)
+                if (fileURL == nil) {
+                    continue
+                }
+                let path = URL.init(string: fileURL!)
+                urls.append(path!)
+                if (path == nil) {
+                    continue
+                }
+            }
+            dragAction?(self, urls)
+        }
+        return true
+    }
 }

+ 63 - 4
PDF Office/PDF Master/Class/PDFTools/Merge/MergeNew/View/KMMergeBlankView/KMMergeBlankView.xib

@@ -1,15 +1,74 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMMergeBlankView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="iconImageView" destination="Q2N-Tf-H5f" id="Afs-uj-IHu"/>
+                <outlet property="subTitleLabel" destination="5Oj-UO-Lu1" id="juH-rI-6Pj"/>
+                <outlet property="titleLable" destination="2fO-qA-Ys3" id="o2j-LY-F9d"/>
+            </connections>
+        </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
         <customView id="c22-O7-iKe">
             <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="VlN-ah-v0N">
+                    <rect key="frame" x="103" y="42" width="275" height="188"/>
+                    <subviews>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Q2N-Tf-H5f">
+                            <rect key="frame" x="67" y="48" width="140" height="140"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="140" id="JMA-Gr-W5h"/>
+                                <constraint firstAttribute="height" constant="140" id="bTE-a4-TAO"/>
+                            </constraints>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="KMImageNameEmptyListNor" id="3IP-Mo-Ab2"/>
+                        </imageView>
+                        <textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2fO-qA-Ys3">
+                            <rect key="frame" x="91" y="32" width="92" height="16"/>
+                            <textFieldCell key="cell" title="Multiline Label" id="S3f-OA-K2O">
+                                <font key="font" metaFont="system"/>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                        <textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5Oj-UO-Lu1">
+                            <rect key="frame" x="89" y="8" width="96" height="16"/>
+                            <textFieldCell key="cell" alignment="center" title="Multiline Label" id="Gay-dg-FTT">
+                                <font key="font" metaFont="system"/>
+                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            </textFieldCell>
+                        </textField>
+                    </subviews>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="275" id="1nX-kl-LGA"/>
+                        <constraint firstItem="Q2N-Tf-H5f" firstAttribute="centerX" secondItem="VlN-ah-v0N" secondAttribute="centerX" id="6qD-Ci-PB8"/>
+                        <constraint firstAttribute="bottom" secondItem="5Oj-UO-Lu1" secondAttribute="bottom" constant="8" id="Av7-oi-q7O"/>
+                        <constraint firstItem="2fO-qA-Ys3" firstAttribute="top" secondItem="Q2N-Tf-H5f" secondAttribute="bottom" id="E53-Ab-hG7"/>
+                        <constraint firstItem="5Oj-UO-Lu1" firstAttribute="top" secondItem="2fO-qA-Ys3" secondAttribute="bottom" constant="8" id="XLy-wr-E3U"/>
+                        <constraint firstItem="Q2N-Tf-H5f" firstAttribute="top" secondItem="VlN-ah-v0N" secondAttribute="top" id="avG-5M-qBC"/>
+                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5Oj-UO-Lu1" secondAttribute="trailing" id="dfr-gS-ogu"/>
+                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="2fO-qA-Ys3" secondAttribute="trailing" id="dui-G5-IQa"/>
+                        <constraint firstItem="2fO-qA-Ys3" firstAttribute="centerX" secondItem="VlN-ah-v0N" secondAttribute="centerX" id="heE-V7-yq2"/>
+                        <constraint firstItem="5Oj-UO-Lu1" firstAttribute="centerX" secondItem="VlN-ah-v0N" secondAttribute="centerX" id="ixj-o8-d8U"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="VlN-ah-v0N" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="Xrx-dv-7k1"/>
+                <constraint firstItem="VlN-ah-v0N" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="zm0-x8-aD4"/>
+            </constraints>
+            <point key="canvasLocation" x="34" y="-72"/>
         </customView>
     </objects>
+    <resources>
+        <image name="KMImageNameEmptyListNor" width="200" height="200"/>
+    </resources>
 </document>

+ 69 - 7
PDF Office/PDF Master/Class/PDFTools/Merge/MergeNew/View/KMMergeView.swift

@@ -49,7 +49,7 @@ class KMMergeView: KMBaseXibView {
     var files: [KMFileAttribute] = [] //导入文件
     var lockFiles: [KMFileAttribute] = [] //存在密码文件
     var lockFilesIndex: Int = 0
-    
+    var newPageSize = CGSizeZero
     
     var insertRow: Int = 0
     override func draw(_ dirtyRect: NSRect) {
@@ -68,11 +68,15 @@ class KMMergeView: KMBaseXibView {
         tableview.dataSource = self
         tableview.allowsMultipleSelection = true
         
-        tableview.register(NSNib.init(nibNamed: "KMMergeTableViewCell", bundle: nil), forIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMMergeTableViewCell"))
+//        tableview.register(NSNib.init(nibNamed: "KMMergeTableViewCell", bundle: nil), forIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMMergeTableViewCell"))
         
         progress.isHidden = true
         
         boxLabel.textColor = KMAppearance.Layout.h0Color()
+        
+        blankView.dragAction = { [unowned self] view, filePaths in
+            self.addFilePaths(urls: filePaths)
+        }
     }
     
     override func updateLanguage() {
@@ -96,6 +100,12 @@ class KMMergeView: KMBaseXibView {
     
     override func reloadData() {
         self.updateButtonState()
+        if files.count != 0 {
+            self.blankView.isHidden = true
+        } else {
+            self.blankView.isHidden = false
+        }
+        
         self.tableview.reloadData()
     }
     
@@ -126,17 +136,24 @@ extension KMMergeView: NSTableViewDataSource {
     }
     
     func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
-        let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMMergeTableViewCell"), owner: self) as? KMMergeTableViewCell
-        cell?.removeAction = { [unowned self] view, model in
-            self.files.removeObject(model)
-            self.reloadData()
+        if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("KMMergeTableViewCell"), owner: nil) as? KMMergeTableViewCell {
+            // 配置单元格的显示内容
+            cell.removeAction = { [unowned self] view, model in
+                self.files.removeObject(model)
+                self.reloadData()
+            }
+            return cell
         }
-        return cell
+        return nil
     }
     
     func tableView(_ tableView: NSTableView, shouldSelect tableColumn: NSTableColumn?) -> Bool {
         return false
     }
+    
+    func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
+        return 60
+    }
 }
 
 extension KMMergeView: NSTableViewDelegate {
@@ -269,6 +286,9 @@ extension KMMergeView: NSTableViewDelegate {
 
 extension KMMergeView {
     @IBAction func clearButtonAction(_ sender: Any) {
+        self.files.removeAll()
+        self.reloadData()
+        
         guard let callBack = clearAction else { return }
         
         callBack(self)
@@ -291,12 +311,52 @@ extension KMMergeView {
         
         callBack(self)
     }
+    
+    @IBAction func sizeButtonAction(_ sender: NSButton) {
+        originalSizeButton.state = .off
+        A3SizeButton.state = .off
+        A4SizeButton.state = .off
+        USLetterSizeButton.state = .off
+        USLegalButton.state = .off
+        customSizeButton.state = .off
+        sender.state = .on
+        
+        pageSizeHeightTextField.isEnabled = sender.isEqual(customSizeButton)
+        pageSizeWidthTextField.isEnabled = sender.isEqual(customSizeButton)
+        
+        var size = CGSizeZero
+        switch sender.tag {
+        case 0:
+            break
+        case 1:
+            size = CGSizeMake(595, 841);
+            break;
+        case 2:
+            size = CGSizeMake(841, 1190);
+            break;
+        case 3:
+            size = CGSizeMake(612, 792);
+            break;
+        case 4:
+            size = CGSizeMake(612, 1108);
+            break;
+        case 5:
+            size = CGSizeMake(595, 841);
+            pageSizeWidthTextField.stringValue = size.width.description
+            pageSizeHeightTextField.stringValue = size.height.description
+            break;
+        default:
+            break
+        }
+        self.newPageSize = size
+    }
 }
 
 //MARK: public
 extension KMMergeView {
     func addFilePaths(urls: [URL]) {
         lockFiles.removeAll()
+        files.removeAll()
         
         for url in urls {
             let file = KMFileAttribute()
@@ -331,6 +391,8 @@ extension KMMergeView {
                 }
                 
             }
+        } else {
+            completion(true, "")
         }
     }
 }

+ 21 - 3
PDF Office/PDF Master/Class/PDFTools/Merge/MergeNew/View/KMMergeView.xib

@@ -42,9 +42,6 @@
                         <customView translatesAutoresizingMaskIntoConstraints="NO" id="etf-2M-YwD">
                             <rect key="frame" x="40" y="60" width="480" height="489"/>
                             <subviews>
-                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Fxn-3r-IMx" customClass="KMMergeBlankView" customModule="PDF_Master" customModuleProvider="target">
-                                    <rect key="frame" x="0.0" y="0.0" width="480" height="489"/>
-                                </customView>
                                 <scrollView autohidesScrollers="YES" horizontalLineScroll="122" horizontalPageScroll="10" verticalLineScroll="122" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eYV-Ln-Tgq">
                                     <rect key="frame" x="0.0" y="0.0" width="480" height="489"/>
                                     <clipView key="contentView" drawsBackground="NO" id="fdS-X3-PXq">
@@ -205,6 +202,9 @@
                                         <autoresizingMask key="autoresizingMask"/>
                                     </scroller>
                                 </scrollView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Fxn-3r-IMx" customClass="KMMergeBlankView" customModule="PDF_Master" customModuleProvider="target">
+                                    <rect key="frame" x="0.0" y="0.0" width="480" height="489"/>
+                                </customView>
                             </subviews>
                             <constraints>
                                 <constraint firstItem="Fxn-3r-IMx" firstAttribute="leading" secondItem="etf-2M-YwD" secondAttribute="leading" id="462-eC-IZR"/>
@@ -281,6 +281,9 @@ Gw
                                             <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                             <font key="font" metaFont="system"/>
                                         </buttonCell>
+                                        <connections>
+                                            <action selector="sizeButtonAction:" target="-2" id="6wn-AB-Ppz"/>
+                                        </connections>
                                     </button>
                                     <button tag="1" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2ei-fd-tJ7">
                                         <rect key="frame" x="14" y="424" width="61" height="18"/>
@@ -288,6 +291,9 @@ Gw
                                             <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                             <font key="font" metaFont="system"/>
                                         </buttonCell>
+                                        <connections>
+                                            <action selector="sizeButtonAction:" target="-2" id="M9K-U9-GK5"/>
+                                        </connections>
                                     </button>
                                     <button tag="3" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zI3-nm-B9g">
                                         <rect key="frame" x="14" y="370" width="61" height="18"/>
@@ -295,6 +301,9 @@ Gw
                                             <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                             <font key="font" metaFont="system"/>
                                         </buttonCell>
+                                        <connections>
+                                            <action selector="sizeButtonAction:" target="-2" id="YLf-6h-yeV"/>
+                                        </connections>
                                     </button>
                                     <button tag="2" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hWH-Ju-iVA">
                                         <rect key="frame" x="14" y="397" width="61" height="18"/>
@@ -302,6 +311,9 @@ Gw
                                             <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                             <font key="font" metaFont="system"/>
                                         </buttonCell>
+                                        <connections>
+                                            <action selector="sizeButtonAction:" target="-2" id="TnE-QB-kJy"/>
+                                        </connections>
                                     </button>
                                     <button tag="4" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PyK-Bm-Rx8">
                                         <rect key="frame" x="14" y="343" width="61" height="18"/>
@@ -309,6 +321,9 @@ Gw
                                             <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                             <font key="font" metaFont="system"/>
                                         </buttonCell>
+                                        <connections>
+                                            <action selector="sizeButtonAction:" target="-2" id="fKI-u0-OXu"/>
+                                        </connections>
                                     </button>
                                     <button tag="5" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jFg-oQ-HUB">
                                         <rect key="frame" x="14" y="316" width="61" height="18"/>
@@ -316,6 +331,9 @@ Gw
                                             <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                             <font key="font" metaFont="system"/>
                                         </buttonCell>
+                                        <connections>
+                                            <action selector="sizeButtonAction:" target="-2" id="CkR-4f-Lia"/>
+                                        </connections>
                                     </button>
                                     <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LOP-cY-2ku">
                                         <rect key="frame" x="36" y="292" width="60" height="22"/>