Selaa lähdekoodia

【2025】文件列表处理

niehaoyu 5 kuukautta sitten
vanhempi
commit
f980140551

+ 5 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Segmented/ComponentSegmentedItem.swift

@@ -98,6 +98,11 @@ public class ComponentSegmentedItem: ComponentBaseXibView {
     }
     
     //MARK: - MouseEvent
+    public override func mouseDown(with event: NSEvent) {
+        super.mouseDown(with: event)
+        
+    }
+    
     public override func mouseUp(with event: NSEvent) {
         super.mouseUp(with: event)
         

+ 4 - 4
PDF Office/PDF Master/Class/Home/ViewController/KMHistoryFileCollectionViewItem.xib

@@ -1,12 +1,12 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMHistoryFileCollectionViewItem" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHistoryFileCollectionViewItem" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="documentName" destination="lue-CR-EiO" id="Kut-UF-epU"/>
                 <outlet property="favoriteButton" destination="aI1-x1-Rrt" id="K8z-lG-qKM"/>
@@ -22,7 +22,7 @@
             <rect key="frame" x="0.0" y="0.0" width="228" height="272"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
-                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="04S-7L-aR3" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="04S-7L-aR3" customClass="KMBox" customModule="PDF_Reader_Pro" customModuleProvider="target">
                     <rect key="frame" x="0.0" y="0.0" width="228" height="272"/>
                     <view key="contentView" id="Y6Z-am-nWp">
                         <rect key="frame" x="0.0" y="0.0" width="228" height="272"/>

+ 17 - 1
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HeaderFooterView/KMHomeFilesHeaderView.swift

@@ -55,6 +55,7 @@ public class KMHomeFilesHeaderView: BaseXibView {
         
         self.reloadData()
          
+        self.updateDeleteButtonState()
     }
     
     func setUpProperty() {
@@ -72,13 +73,14 @@ public class KMHomeFilesHeaderView: BaseXibView {
                                                           state: .normal,
                                                           onlyIcon: true)
         deleteButton.properties.propertyInfo.leftIcon_nor = NSImage(named: "file_delete")
+        deleteButton.properties.propertyInfo.leftIcon_dis = NSImage(named: "file_delete_dis")
         
          
         deleteButton.reloadData()
         
     }
     
-    func reloadData() {
+    private func reloadData() {
         if HistoryFilesManager.manager.showMode == .Thumbnail {
             thumbProperty.active = true
             listProperty.active = false
@@ -89,6 +91,20 @@ public class KMHomeFilesHeaderView: BaseXibView {
         typeSegmented.reloadData()
          
     }
+    
+    func updateDeleteButtonState() {
+        if HistoryFilesManager.manager.selectFiles.count > 0 {
+            deleteButton.properties.isDisabled = false
+        } else {
+            deleteButton.properties.isDisabled = true
+        }
+        deleteButton.reloadData()
+    }
+    
+    public override func mouseDown(with event: NSEvent) {
+//        super.mouseDown(with: event)
+        
+    }
  }
 
 

+ 9 - 1
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HeaderFooterView/KMHomeFilesHeaderView.xib

@@ -20,6 +20,10 @@
             <rect key="frame" x="0.0" y="0.0" width="480" height="28"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
+                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="rek-Av-1GN">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="28"/>
+                    <imageCell key="cell" enabled="NO" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="Yug-yC-kHA"/>
+                </imageView>
                 <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="SVE-bK-QHP">
                     <rect key="frame" x="40" y="0.0" width="400" height="28"/>
                     <view key="contentView" id="xRx-n8-zTx">
@@ -62,11 +66,15 @@
             </subviews>
             <constraints>
                 <constraint firstAttribute="trailing" secondItem="SVE-bK-QHP" secondAttribute="trailing" constant="40" id="7f1-21-T93"/>
+                <constraint firstAttribute="bottom" secondItem="rek-Av-1GN" secondAttribute="bottom" id="8YU-9p-BGA"/>
+                <constraint firstAttribute="trailing" secondItem="rek-Av-1GN" secondAttribute="trailing" id="9Ui-m8-P0m"/>
                 <constraint firstItem="SVE-bK-QHP" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="40" id="IPd-oo-JpB"/>
+                <constraint firstItem="rek-Av-1GN" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="Mbb-AU-Pbr"/>
                 <constraint firstAttribute="bottom" secondItem="SVE-bK-QHP" secondAttribute="bottom" id="O1m-1v-Pet"/>
+                <constraint firstItem="rek-Av-1GN" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="iOE-dm-eIs"/>
                 <constraint firstItem="SVE-bK-QHP" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="vRx-hJ-NyO"/>
             </constraints>
-            <point key="canvasLocation" x="62" y="114"/>
+            <point key="canvasLocation" x="67" y="136"/>
         </customView>
     </objects>
 </document>

+ 109 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFile.swift

@@ -0,0 +1,109 @@
+//
+//  HistoryFile.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/10/11.
+//
+
+import Cocoa
+
+class HistoryFile: NSObject {
+
+    private var fileUrl: URL?
+    private var iconSize: NSSize = CGSizeZero
+    
+    var image: NSImage = NSImage()
+    var name: String = ""
+    var date: String = ""
+    var size: String = ""
+    
+    public init(fileURL: URL, iconSize: NSSize) {
+        super.init()
+        
+        self.fileUrl = fileURL
+        self.iconSize = iconSize
+        
+        self.reloadData()
+    }
+    
+    func reloadData() {
+        
+        guard let fileUrl = self.fileUrl else {
+            return
+        }
+        let attribe = try?FileManager.default.attributesOfItem(atPath: fileUrl.path)
+        if attribe != nil {
+            let dateFormatter: DateFormatter = DateFormatter.init()
+            let fileDate: Date = attribe![FileAttributeKey(rawValue: "NSFileModificationDate")] as! Date
+            var fileTime: String = ""
+            
+            dateFormatter.dateFormat = "yyyy/MM/dd HH:mm"
+            
+            let fileType = ""
+            let sizeFloat: CGFloat = (attribe![FileAttributeKey(rawValue: "NSFileSize")]) as? CGFloat ?? 0.0
+            let fileSize = fileSizeString(Float(sizeFloat)).isEmpty ? "" : fileSizeString(Float(sizeFloat))
+            let lastTime = dateFormatter.string(from: fileDate)
+            
+            fileTime = lastTime
+            
+            
+            //path
+            let array = fileUrl.path.deletingLastPathComponent.components(separatedBy: "/")
+            let string = NSMutableString()
+            
+            if array.count > 4 {
+                string.append(".../")
+                string.append(array[array.count - 3])
+                string.append("/")
+                string.append(array[array.count - 2])
+                string.append("/")
+                string.append(array[array.count - 1])
+            } else {
+                string.setString(fileUrl.path.deletingLastPathComponent)
+            }
+            
+            let image = NSImage.previewForFile(path: fileUrl, ofSize: self.iconSize, asIcon: true) ?? NSImage()
+            
+            self.image = image
+            self.name = fileUrl.path.lastPathComponent
+            self.date = fileTime
+            self.size = fileSize
+        }
+    }
+    
+    //MARK: - private
+    func fileSizeString(_ fSize: Float) -> String {
+        let fileSize = fSize / 1024
+        let size = fileSize >= 1024 ? (fileSize < 1048576 ? fileSize/1024 : fileSize/1048576.0) : fileSize
+        let unit = fileSize >= 1024 ? (fileSize < 1048576 ? "M" : "G") : "K"
+        return String(format: "%0.1f %@", size, unit)
+    }
+    
+    func isSameWeek (withDate date: Date) -> Bool {
+        let currentWeekOfYear = getWeekOfYear(date: Date.init())
+        let targetWeekOfYear = getWeekOfYear(date: date)
+        if targetWeekOfYear == currentWeekOfYear {
+            return false
+        } else {
+            return true
+        }
+    }
+    
+    func isDateInCurrentWeek(_ date: Date) -> Bool {
+        let calendar = Calendar.current
+        // 获取当前日期的星期几
+        let weekday = calendar.component(.weekday, from: Date())
+        // 获取一周的第一天(周日)的日期
+        let firstDayOfWeek = calendar.date(byAdding: .day, value: -weekday, to: Date())!
+        // 获取一周的最后一天(下周的第一天)的日期
+        let lastDayOfWeek = calendar.date(byAdding: .day, value: 7, to: firstDayOfWeek)!
+        // 判断日期是否在当前周的范围内
+        return date > firstDayOfWeek && date < lastDayOfWeek
+    }
+     
+    func getWeekOfYear(date: Date) -> Int {
+        let components = Calendar.current.dateComponents([Calendar.Component.weekOfYear], from: date)
+        return components.weekOfYear ?? 0
+    }
+        
+}

+ 47 - 0
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFilesItems/KMHistoryFileListItem.swift

@@ -6,12 +6,59 @@
 //
 
 import Cocoa
+import KMComponentLibrary
 
 class KMHistoryFileListItem: NSCollectionViewItem {
 
+    @IBOutlet var contendBox: NSBox!
+    @IBOutlet var iconImage: NSImageView!
+    @IBOutlet var nameLabel: NSTextField!
+    @IBOutlet var dateLabel: NSTextField!
+    @IBOutlet var sizeLabel: NSTextField!
+    
+    var fileURL: URL? = nil
+    
+    var selectedColor: NSColor = ComponentLibrary.shared.getComponentColorFromKey("colorPrimary/bg-opacity-dark")
+    var selectedRadius: CGFloat = 6
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
     }
     
+    override var isSelected: Bool {
+        get{
+            return super.isSelected
+        }
+        set{
+            super.isSelected = newValue
+
+            self.contendBox.fillColor = isSelected ? selectedColor : NSColor.clear
+            self.contendBox.cornerRadius = isSelected ? selectedRadius : 0
+        }
+    }
+    
+    func reloadData() {
+        guard let fileUrl = self.fileURL else {
+            return
+        }
+        let file = HistoryFile(fileURL: fileUrl, iconSize: CGSizeMake(48, 64))
+        
+        self.iconImage.image = file.image
+        self.nameLabel.stringValue = file.name
+        self.dateLabel.stringValue = file.date
+        self.sizeLabel.stringValue = file.size
+        
+    }
+    
+    
+    func fileSizeString(_ fSize: Float) -> String {
+        let fileSize = fSize / 1024
+        let size = fileSize >= 1024 ? (fileSize < 1048576 ? fileSize/1024 : fileSize/1048576.0) : fileSize
+        let unit = fileSize >= 1024 ? (fileSize < 1048576 ? "M" : "G") : "K"
+        return String(format: "%0.1f %@", size, unit)
+    }
+    
+    
+    
 }

+ 76 - 5
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/HistoryFilesItems/KMHistoryFileListItem.xib

@@ -8,20 +8,88 @@
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="KMHistoryFileListItem" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
+                <outlet property="contendBox" destination="VYN-Gn-Hqx" id="s8k-5E-uYE"/>
+                <outlet property="dateLabel" destination="qDy-wE-i8c" id="09C-fQ-lcK"/>
+                <outlet property="iconImage" destination="jHX-dD-CQO" id="5bv-bC-zHM"/>
+                <outlet property="nameLabel" destination="zKu-lm-fyn" id="KHi-Uf-kOl"/>
+                <outlet property="sizeLabel" destination="NTN-kq-Yvv" id="IPd-tN-atE"/>
                 <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
         <customView id="Hz6-mo-xeY">
-            <rect key="frame" x="0.0" y="0.0" width="620" height="170"/>
+            <rect key="frame" x="0.0" y="0.0" width="960" height="86"/>
             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
             <subviews>
-                <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="VYN-Gn-Hqx">
-                    <rect key="frame" x="0.0" y="0.0" width="620" height="170"/>
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="VYN-Gn-Hqx">
+                    <rect key="frame" x="0.0" y="0.0" width="960" height="86"/>
                     <view key="contentView" id="0Ch-gP-aK4">
-                        <rect key="frame" x="1" y="1" width="618" height="168"/>
+                        <rect key="frame" x="0.0" y="0.0" width="960" height="86"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="jHX-dD-CQO">
+                                <rect key="frame" x="12" y="11" width="48" height="64"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="48" id="ETm-hp-h4Q"/>
+                                    <constraint firstAttribute="height" constant="64" id="moh-NP-BQe"/>
+                                </constraints>
+                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="test" id="0a9-Rx-feb"/>
+                            </imageView>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zKu-lm-fyn">
+                                <rect key="frame" x="70" y="35" width="540" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" relation="lessThanOrEqual" constant="536" id="dDV-7O-phh"/>
+                                </constraints>
+                                <textFieldCell key="cell" title="--" id="70S-Wn-1Cy">
+                                    <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" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qDy-wE-i8c">
+                                <rect key="frame" x="650" y="35" width="164" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="160" id="rKY-bV-7oy"/>
+                                </constraints>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="j3D-b5-lQG">
+                                    <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" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NTN-kq-Yvv">
+                                <rect key="frame" x="822" y="35" width="84" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="80" id="cKm-AT-sGq"/>
+                                </constraints>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="0Bl-Ug-WTf">
+                                    <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>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="u8Q-G3-15h">
+                                <rect key="frame" x="916" y="27" width="32" height="32"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="32" id="KVI-fA-3O4"/>
+                                    <constraint firstAttribute="height" constant="32" id="Mdz-xt-uR6"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="jHX-dD-CQO" firstAttribute="centerY" secondItem="0Ch-gP-aK4" secondAttribute="centerY" id="5t0-42-DSl"/>
+                            <constraint firstAttribute="trailing" secondItem="u8Q-G3-15h" secondAttribute="trailing" constant="12" id="CXR-CG-sDa"/>
+                            <constraint firstItem="NTN-kq-Yvv" firstAttribute="centerY" secondItem="0Ch-gP-aK4" secondAttribute="centerY" id="Gfc-wI-t9o"/>
+                            <constraint firstItem="qDy-wE-i8c" firstAttribute="leading" secondItem="zKu-lm-fyn" secondAttribute="trailing" constant="44" id="Hq1-q0-4me"/>
+                            <constraint firstItem="jHX-dD-CQO" firstAttribute="leading" secondItem="0Ch-gP-aK4" secondAttribute="leading" constant="12" id="Kr2-gm-jme"/>
+                            <constraint firstItem="NTN-kq-Yvv" firstAttribute="leading" secondItem="qDy-wE-i8c" secondAttribute="trailing" constant="12" id="Qla-1G-pIj"/>
+                            <constraint firstItem="zKu-lm-fyn" firstAttribute="centerY" secondItem="0Ch-gP-aK4" secondAttribute="centerY" id="hl6-yv-V1X"/>
+                            <constraint firstItem="zKu-lm-fyn" firstAttribute="leading" secondItem="jHX-dD-CQO" secondAttribute="trailing" constant="12" id="kkh-qQ-X7o"/>
+                            <constraint firstItem="u8Q-G3-15h" firstAttribute="centerY" secondItem="0Ch-gP-aK4" secondAttribute="centerY" id="raS-oJ-3hE"/>
+                            <constraint firstItem="u8Q-G3-15h" firstAttribute="leading" secondItem="NTN-kq-Yvv" secondAttribute="trailing" constant="12" id="sgi-Zj-029"/>
+                            <constraint firstItem="qDy-wE-i8c" firstAttribute="centerY" secondItem="0Ch-gP-aK4" secondAttribute="centerY" id="x71-sr-4Bp"/>
+                        </constraints>
                     </view>
                 </box>
             </subviews>
@@ -31,7 +99,10 @@
                 <constraint firstItem="VYN-Gn-Hqx" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="g2J-8Q-Rqi"/>
                 <constraint firstItem="VYN-Gn-Hqx" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="vqE-hO-aTz"/>
             </constraints>
-            <point key="canvasLocation" x="134" y="63"/>
+            <point key="canvasLocation" x="-46.5" y="11"/>
         </customView>
     </objects>
+    <resources>
+        <image name="test" width="200" height="200"/>
+    </resources>
 </document>

+ 38 - 10
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/KMHomeRightView.swift

@@ -12,6 +12,8 @@ class KMHomeRightView: BaseXibView {
     @IBOutlet var rightScrollView: NSScrollView!
     @IBOutlet var rightCollectionView: NSCollectionView!
     
+    var filesHeaderView: KMHomeFilesHeaderView = KMHomeFilesHeaderView()
+    
     //MARK: - func
     override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
@@ -50,6 +52,7 @@ class KMHomeRightView: BaseXibView {
         rightCollectionView.layer?.backgroundColor = NSColor.clear.cgColor
         rightCollectionView.delegate = self
         rightCollectionView.dataSource = self
+        rightCollectionView.allowsEmptySelection = true
         
         rightCollectionView.register(KMHistoryFileThumbItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem"))
         rightCollectionView.register(KMHistoryFileListItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileListItem"))
@@ -58,14 +61,28 @@ class KMHomeRightView: BaseXibView {
         rightCollectionView.register(KMHomeQuickToolsView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "kmHomeQuickToolsView"))
         rightCollectionView.register(KMHomeFilesHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "kmHomeFilesHeaderView"))
         
+        rightCollectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView"))
         rightCollectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionFooter, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView"))
-        
     }
     
     func reloadData() {
         self.rightCollectionView.reloadData()
         
     }
+    
+    private func collectionViewSelectedChanged() {
+        let indexs = rightCollectionView.selectionIndexPaths
+        HistoryFilesManager.manager.selectFiles.removeAll()
+        if indexs.count >= 0 {
+            for index in indexs {
+                let url = HistoryFilesManager.manager.files[index.item]
+                HistoryFilesManager.manager.selectFiles.append(url)
+            }
+        }
+        filesHeaderView.updateDeleteButtonState()
+    }
+    
+    
 }
 
 //MARK: - NSCollectionViewDelegate, NSCollectionViewDataSource
@@ -79,26 +96,27 @@ extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource,
         if section == 0 {
             return 0
         }
-        return 10
+        return HistoryFilesManager.manager.files.count
     }
      
     func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+        if indexPath.item >= HistoryFilesManager.manager.files.count {
+            return NSCollectionViewItem()
+        }
+        
         if HistoryFilesManager.manager.showMode == .Thumbnail {
             let item: KMHistoryFileThumbItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem"), for: indexPath) as! KMHistoryFileThumbItem
             
             return item
         } else if HistoryFilesManager.manager.showMode == .List {
             let item: KMHistoryFileListItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileListItem"), for: indexPath) as! KMHistoryFileListItem
-            
+            item.fileURL = HistoryFilesManager.manager.files[indexPath.item]
+            item.reloadData()
             return item
         }
         return NSCollectionViewItem()
     }
     
-    func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
-         
-    }
-    
     func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
         if HistoryFilesManager.manager.showMode == .Thumbnail {
             return CGSize(width: 226, height: 248)
@@ -121,10 +139,10 @@ extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource,
                 
             } else if indexPath.section == 1 {
                 //Recently
-                let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("kmHomeFilesHeaderView"), for: indexPath) as! KMHomeFilesHeaderView
-                view.delegate = self
+                filesHeaderView = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("kmHomeFilesHeaderView"), for: indexPath) as! KMHomeFilesHeaderView
+                filesHeaderView.delegate = self
                 
-                return view
+                return filesHeaderView
             }
         } else if kind == NSCollectionView.elementKindSectionFooter {
             let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("KMHomeFilesEmptyHeaderView"), for: indexPath) as! KMHomeFilesEmptyHeaderView
@@ -166,6 +184,16 @@ extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource,
         return NSEdgeInsetsMake(12, 40, 0, 40)
     }
     
+    func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
+        self.collectionViewSelectedChanged()
+        
+    }
+    
+    func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
+        self.collectionViewSelectedChanged()
+        
+    }
+    
 }
 
 

+ 1 - 1
PDF Office/PDF Master/KMClass/KMHomeViewController/Views/KMHomeRightView/KMHomeRightView.xib

@@ -32,7 +32,7 @@
                                     <rect key="frame" x="0.0" y="0.0" width="402" height="468"/>
                                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                     <subviews>
-                                        <collectionView id="5OB-sb-Wo4">
+                                        <collectionView selectable="YES" allowsMultipleSelection="YES" id="5OB-sb-Wo4">
                                             <rect key="frame" x="0.0" y="0.0" width="402" height="286"/>
                                             <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
                                             <collectionViewFlowLayout key="collectionViewLayout" minimumInteritemSpacing="10" minimumLineSpacing="10" id="EPd-CT-cRT">

+ 8 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -5030,6 +5030,9 @@
 		BBE0BDF329A22EF300440583 /* KMMainViewController+MenuAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE0BDF229A22EF300440583 /* KMMainViewController+MenuAction.swift */; };
 		BBE0BDF429A22EF300440583 /* KMMainViewController+MenuAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE0BDF229A22EF300440583 /* KMMainViewController+MenuAction.swift */; };
 		BBE0BDF529A22EF300440583 /* KMMainViewController+MenuAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE0BDF229A22EF300440583 /* KMMainViewController+MenuAction.swift */; };
+		BBE3709D2CB8BD3700390884 /* HistoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE3709C2CB8BD3700390884 /* HistoryFile.swift */; };
+		BBE3709E2CB8BD3700390884 /* HistoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE3709C2CB8BD3700390884 /* HistoryFile.swift */; };
+		BBE3709F2CB8BD3700390884 /* HistoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE3709C2CB8BD3700390884 /* HistoryFile.swift */; };
 		BBE66D092B55467C009343FA /* repeatTrialAlert_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BBE66D082B55467C009343FA /* repeatTrialAlert_icon.png */; };
 		BBE66D0A2B55467C009343FA /* repeatTrialAlert_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BBE66D082B55467C009343FA /* repeatTrialAlert_icon.png */; };
 		BBE66D0B2B55467C009343FA /* repeatTrialAlert_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BBE66D082B55467C009343FA /* repeatTrialAlert_icon.png */; };
@@ -7536,6 +7539,7 @@
 		BBDE52BA2BF3676C000545B2 /* KMPresentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPresentTableViewCell.swift; sourceTree = "<group>"; };
 		BBE01DC02BF60D9200304FA4 /* KMTabStripController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMTabStripController.swift; sourceTree = "<group>"; };
 		BBE0BDF229A22EF300440583 /* KMMainViewController+MenuAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KMMainViewController+MenuAction.swift"; sourceTree = "<group>"; };
+		BBE3709C2CB8BD3700390884 /* HistoryFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryFile.swift; sourceTree = "<group>"; };
 		BBE66D082B55467C009343FA /* repeatTrialAlert_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = repeatTrialAlert_icon.png; sourceTree = "<group>"; };
 		BBE78F1A2B36F69F0071AC1A /* KMLeftSideViewController+Note.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KMLeftSideViewController+Note.swift"; sourceTree = "<group>"; };
 		BBE78F1E2B3875B50071AC1A /* KMLeftSideViewController+Search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KMLeftSideViewController+Search.swift"; sourceTree = "<group>"; };
@@ -12401,6 +12405,7 @@
 			isa = PBXGroup;
 			children = (
 				BB19A7492CB7C2C6008204DC /* HistoryFilesManager.swift */,
+				BBE3709C2CB8BD3700390884 /* HistoryFile.swift */,
 				BB19A7392CB7B4C9008204DC /* KMHomeRightView.swift */,
 				BB19A73D2CB7B4D1008204DC /* KMHomeRightView.xib */,
 				BBE370992CB7D76200390884 /* HeaderFooterView */,
@@ -16683,6 +16688,7 @@
 				BB1B0AC52B4FC6E900889528 /* KMGuideInfoWindow.swift in Sources */,
 				BB48F8712BE07DAA002DA996 /* KMMainModel.swift in Sources */,
 				AD199DF82B26A36500D56FEE /* KMPrintPosterPreviewView.swift in Sources */,
+				BBE3709D2CB8BD3700390884 /* HistoryFile.swift in Sources */,
 				BB3AD6F929935483004FC1AE /* Reachability.m in Sources */,
 				AD1FE84C2BD920C300AA4A9B /* TextFieldFormatter.m in Sources */,
 				ADAFDA762AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.swift in Sources */,
@@ -18424,6 +18430,7 @@
 				BB97BE252BC3E02D00BECEA8 /* SKExportAccessoryController.m in Sources */,
 				ADDF832A2B391A5C00A81A4E /* CPDFSelection+PDFListView.m in Sources */,
 				AD7D5CCC2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */,
+				BBE3709E2CB8BD3700390884 /* HistoryFile.swift in Sources */,
 				BB570AE02B513A66005E7E4A /* KMLeftSideViewController+Snapshot.swift in Sources */,
 				BB2F9AB02AFCAE1F00F9DD93 /* KMProfileTitleCellView.swift in Sources */,
 				AD88109329A7612000178CA1 /* KMRegisterModel.swift in Sources */,
@@ -19173,6 +19180,7 @@
 				BB2F615A2966B69D001CB369 /* KMWatermarkPropertyHomeController.swift in Sources */,
 				BB48F8732BE07DAA002DA996 /* KMMainModel.swift in Sources */,
 				89752E1F2942CB04003FF08E /* KMSearchMode.swift in Sources */,
+				BBE3709F2CB8BD3700390884 /* HistoryFile.swift in Sources */,
 				BB147049299DC0D200784A6A /* OIDServiceConfiguration.m in Sources */,
 				AD1FE84E2BD920C300AA4A9B /* TextFieldFormatter.m in Sources */,
 				ADE3C1C329A4C13700793B13 /* KMPrintAccessoryController_OC.m in Sources */,