Ver Fonte

【综合】BOTA 注释列表,选中注释-右击-点击折叠,但还是勾选中展开(已修复)

tangchao há 11 meses atrás
pai
commit
3fe240f983

+ 6 - 12
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteTableViewCell.swift

@@ -118,14 +118,9 @@ class KMNoteTableViewCell: NSTableCellView {
     }
     
     @IBAction func foldButtonAction(_ sender: NSButton) {
-        if self._equalToImage(self.foldButton.image) {
-            self.isFold = false
-        } else {
-            self.isFold = true
-        }
-        
+        self.isFold = !self.isFold
         if (self.isUnFoldNote != nil) {
-            self.isUnFoldNote!(self.cellNote, self.isFold);
+            self.isUnFoldNote!(self.cellNote, !self.isFold);
         }
     }
     
@@ -211,10 +206,6 @@ extension KMNoteTableViewCell {
         self.typeImageView.image = imageView.noteTypeImage(withType: noteType, color: noteColor ?? .red)
         self.typeImageView.isHidden = false
 
-//        if note is CPDFMarkupAnnotation {
-//            self.isFold = true
-//        }
-
         self.noteContentBox.isHidden = true
         self.noteImageView.isHidden = true
         self.foldButton.isHidden = true
@@ -321,7 +312,10 @@ extension KMNoteTableViewCell {
                 }else{
                     self.foldButton.isHidden = true
                 }
-            } else {
+            } else if data is CPDFRedactAnnotation {
+                noteString = KMLocalizedString("Redact")
+                self.annotationContentLabel.stringValue = noteString
+            }else {
                 self.annotationContentLabel.stringValue = noteString
                 self.imageViewHeightConstraint.constant = self.contentView.frame.size.height
                 if (noteString.isEmpty == false) {

+ 3 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Annotation/View/KMNoteTypeImageView.swift

@@ -240,7 +240,7 @@ class KMNoteTypeImageView: NSImageView {
         } else if type == SKNSignDotString {
             image = NSImage(named: "KMImageNameToolbarPoint")?.copy() as? NSImage
         } else if type == SKNRedactString {
-            image = NSImage(named: "KMImageNameAnnotationListRedact")?.copy() as? NSImage
+            image = NSImage(named: "KMImageNameUXIconSubtoolbarRedactPoint")?.copy() as? NSImage
         } else if type == SKNSignatureString {
             image = NSImage(named: "KMImageNameSidetabbarSignatureNor")?.copy() as? NSImage
         }
@@ -382,6 +382,8 @@ func KMPDFAnnotationNoteType(_ anno: CPDFAnnotation?) -> String {
         } else if type == .strikeOut {
             noteType = SKNStrikeOutString
         }
+    } else if inAnno is CPDFRedactAnnotation {
+        noteType = SKNRedactString
     }
     return noteType
 }

+ 36 - 42
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController+Note.swift

@@ -193,13 +193,10 @@ extension KMLeftSideViewController {
             rowIndexes = IndexSet(integer: row)
         }
         items = self.noteOutlineView.itemsAtRowIndexes(rowIndexes) as NSArray
-        guard let foldNote = self.fetchNote(for: row) else {
+        guard let model = self.fetchAnnoModel(for: row) else {
             return
         }
-        var isFold = true
-        if self.allFoldNotes.contains(foldNote) {
-            isFold = false
-        }
+        var isFold = model.isFold()
         item = menu.addItem(title: KMLocalizedString("Expand", nil), action: #selector(unfoldNoteAction), target: self)
         item?.state = isFold ? .off : .on
         item?.representedObject = items
@@ -324,7 +321,8 @@ extension KMLeftSideViewController {
                    action == #selector(note_foldAllComments) ||
                    action == #selector(exportAnnotationNotes) ||
                    action == #selector(removeAllAnnotations)) {
-            return self.annotations.count > 0
+            let cnt = self.annoListModel?.datas.count ?? 0
+            return cnt > 0
         } else if (action == #selector(unfoldNoteAction) ||
             action == #selector(foldNoteAction)) {
             let row = self.noteOutlineView.clickedRow
@@ -400,48 +398,44 @@ extension KMLeftSideViewController {
         doc?.saveTo(sender)
     }
     
+    // 展开
+    
     @objc func unfoldNoteAction(_ sender: NSMenuItem) {
         if sender.state == .on {
             return
         }
         let row = self.noteOutlineView.clickedRow
-        guard let foldNote = self.fetchNote(for: row) else {
+        guard let model = self.fetchAnnoModel(for: row) else {
             return
         }
-        if self.allFoldNotes.contains(foldNote) == false {
-            self.allFoldNotes.append(foldNote)
-        }
 
-        if self.allFoldNotes.count == self.canFoldNotes.count {
-            self.foldType = .unfold
-        } else {
-            self.foldType = .none
-        }
-        
+//        if self.allFoldNotes.count == self.canFoldNotes.count {
+//            self.foldType = .unfold
+//        } else {
+//            self.foldType = .none
+//        }
+        model.foldType = .unfold
         let viewS = self.noteOutlineView.view(atColumn: 0, row: row, makeIfNecessary: true)
         (viewS as? KMNoteTableViewCell)?.isFold = false
     }
     
     @objc func foldNoteAction(_ sender: NSMenuItem) {
-//        if sender.state == .on {
-//            return
-//        }
+        if sender.state == .on {
+            return
+        }
         
         let row = self.noteOutlineView.clickedRow
-        guard let foldNote = self.fetchNote(for: row) else {
+        guard let model = self.fetchAnnoModel(for: row) else {
             return
         }
         
-        if self.allFoldNotes.contains(foldNote) == false {
-            self.allFoldNotes.append(foldNote)
-        }
+//        if (self.allFoldNotes.count == 0) {
+//            self.foldType = .fold
+//        } else {
+//            self.foldType = .none
+//        }
         
-        if (self.allFoldNotes.count == 0) {
-            self.foldType = .fold
-        } else {
-            self.foldType = .none
-        }
-
+        model.foldType = .fold
         let viewS = self.noteOutlineView.view(atColumn: 0, row: row, makeIfNecessary: true)
         (viewS as? KMNoteTableViewCell)?.isFold = true
     }
@@ -512,7 +506,6 @@ extension KMLeftSideViewController {
         }
         KMDataManager.ud_set(self.isAscendSort, forKey: Self.Key.noteAscendSortKey)
         
-//        self.annotationSort(sortArray: [])
         self.reloadAnnotation()
     }
     
@@ -568,12 +561,14 @@ extension KMLeftSideViewController {
     }
     
     func fetchNote(for index: Int) -> CPDFAnnotation? {
+        return self.fetchAnnoModel(for: index)?.anno
+    }
+    
+    func fetchAnnoModel(for index: Int) -> KMBotaAnnotationModel? {
         if self.noteSearchMode { // 搜索模式
-            let model = self.noteSearchArray.safe_element(for: index) as? KMBotaAnnotationModel
-            return model?.anno
+            return self.noteSearchArray.safe_element(for: index) as? KMBotaAnnotationModel
         } else { // 常规模式(非搜索)
-            let model = self.annotations.safe_element(for: index) as? KMBotaAnnotationModel
-            return model?.anno
+            return self.annoListModel?.datas.safe_element(for: index) as? KMBotaAnnotationModel
         }
     }
     
@@ -653,7 +648,7 @@ extension KMLeftSideViewController {
         }
         if anno is CPDFLineAnnotation || anno is CPDFSquareAnnotation || anno is CPDFCircleAnnotation || anno is CPDFInkAnnotation {
             // 形状注释 + Ink 需要显示框住的内容【刷新】
-            for item in self.annotations {
+            for item in self.annoListModel?.datas ?? [] {
                 if anno.isEqual(to: item.anno) {
                     self.noteOutlineView.reloadItem(item)
                     break
@@ -758,6 +753,7 @@ extension KMLeftSideViewController {
                 }
             }
             // 数据模型\化
+            let model = KMAnnotationListModel()
             var datas: [KMBotaAnnotationModel] = []
             for anno in allAnnotation {
                 let item = KMBotaAnnotationModel()
@@ -767,7 +763,8 @@ extension KMLeftSideViewController {
                 item.showAuthor = self.annoListIsShowAnther()
                 datas.append(item)
             }
-            self.annotations = datas
+            model.datas = datas
+            self.annoListModel = model
             
             // 转换对象,用于数据显示
             self.allAnnotations = annotationArray
@@ -793,14 +790,14 @@ extension KMLeftSideViewController {
         // 清空数据
         self.noteSearchArray.removeAll()
         if stringValue.isEmpty {
-            for model in self.annotations {
+            for model in self.annoListModel?.datas ?? [] {
                 guard let note = model.anno else {
                     continue
                 }
                 self.noteSearchArray.append(model)
             }
         } else {
-            for model in self.annotations {
+            for model in self.annoListModel?.datas ?? [] {
                 guard let note = model.anno else {
                     continue
                 }
@@ -889,8 +886,6 @@ extension KMLeftSideViewController {
     }
     
     func loadUnfoldDate(_ foldType: KMFoldType) {
-        // 清空所有折叠数组
-        self.allFoldNotes.removeAll()
         var mutableArray: [CPDFAnnotation] = []
         if self.noteSearchMode {
             for model in self.noteSearchArray {
@@ -899,7 +894,7 @@ extension KMLeftSideViewController {
                 }
             }
         } else {
-            for model in self.annotations {
+            for model in self.annoListModel?.datas ?? [] {
                 if let note = model.anno, note is CPDFMarkupAnnotation {
                     mutableArray.append(note)
                 }
@@ -911,6 +906,5 @@ extension KMLeftSideViewController {
 //            }
 //        }
         self.canFoldNotes = mutableArray
-        self.allFoldNotes = []
     }
 }

+ 8 - 39
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController.swift

@@ -148,13 +148,10 @@ class KMLeftSideViewController: KMSideViewController {
         }
     }
     
-    var allFoldNotes: [CPDFAnnotation] = []
     var canFoldNotes: [CPDFAnnotation] = []
     
     var isRenameNoteOutline = false
 
-    // 注释列表数据源
-    var annotations: [KMBotaAnnotationModel] = []
     // 所有注释
     var allAnnotations: [CPDFAnnotation] = []
     // 注释搜索模式标记
@@ -163,6 +160,8 @@ class KMLeftSideViewController: KMSideViewController {
     var noteSearchArray: [KMBotaAnnotationModel] = []
     // 注释搜索 忽略大小写标识
     var caseInsensitiveNoteSearch = false
+    // 注释列表数据源
+    var annoListModel: KMAnnotationListModel?
     
     // 快照
     var snapshotCacheSize: CGFloat = 32 * 3
@@ -1759,7 +1758,7 @@ extension KMLeftSideViewController: NSOutlineViewDelegate, NSOutlineViewDataSour
             if self.noteSearchMode {
                 return self.noteSearchArray.count
             }
-            let count = self.annotations.count
+            let count = self.annoListModel?.datas.count ?? 0
 
             let hasAnno = self.allAnnotations.count >= 1
             self.noteSearchButton.isEnabled = hasAnno
@@ -1817,7 +1816,7 @@ extension KMLeftSideViewController: NSOutlineViewDelegate, NSOutlineViewDataSour
             if self.noteSearchMode {
                 return self.noteSearchArray[index]
             }
-            return self.annotations[index] as Any
+            return self.annoListModel?.datas[index] as Any
         }
         return item as Any
     }
@@ -1867,18 +1866,6 @@ extension KMLeftSideViewController: NSOutlineViewDelegate, NSOutlineViewDataSour
             let note = (item as? KMBotaAnnotationModel)?.anno
             let cell = outlineView.makeView(withIdentifier: KMNoteTableViewCell.km_identifier, owner: self) as! KMNoteTableViewCell
             cell.cellNote = note
-            
-//            let annoModel = KMBotaAnnotationModel()
-//            annoModel.anno = note
-//            annoModel.showPage = self.annoListIsShowPage()
-//            annoModel.showTime = self.annoListIsShowTime()
-//            annoModel.showAuthor = self.annoListIsShowAnther()
-            model?.foldType = self.foldType
-            if self.foldType == .none {
-                if let data = note , self.allFoldNotes.isEmpty == false {
-                    model?.foldType = self.allFoldNotes.contains(data) ? .fold : .none
-                }
-            }
             cell.model = model
             if let data = note {
                 if data.isKind(of: CPDFStampAnnotation.self) && data.isKind(of: KMSelfSignAnnotation.self) == false {
@@ -1886,7 +1873,7 @@ extension KMLeftSideViewController: NSOutlineViewDelegate, NSOutlineViewDataSour
                 } else {
                     if data.isKind(of: CPDFMarkupAnnotation.self) {
                         if (!cell.isFold) {
-                            self.allFoldNotes.append(data)
+//                            self.allFoldNotes.append(data)
                         } else {
                             cell.imageViewHeightConstraint.constant = 18.0 + 8
                         }
@@ -1895,27 +1882,9 @@ extension KMLeftSideViewController: NSOutlineViewDelegate, NSOutlineViewDataSour
                     }
                 }
             }
-            cell.isUnFoldNote = { [unowned self] cellNote, isUnfold in
-                model?.foldType = isUnfold ? .unfold : .fold
-                if cellNote is CPDFMarkupAnnotation {
-                    model?.foldH = isUnfold ? 30 : (cell.noteContentHeightConstraint.constant + cell.maltlineLabelLayoutConstraint.constant + 85)
-                }
-                if (isUnfold) {
-                    if let data = cellNote {
-                        if (self.allFoldNotes.contains(data)) {
-                            self.allFoldNotes.removeObject(data)
-                        }
-                    }
-
-                    self.foldType = self.allFoldNotes.count == 0 ? .fold : .none
-                } else {
-                    if let data = cellNote {
-                        if self.allFoldNotes.contains(data) == false {
-                            self.allFoldNotes.append(data)
-                        }
-                    }
-                    self.foldType = .unfold
-                }
+            cell.isUnFoldNote = { cellNote, isUnfold in
+                // 将折叠状态记录到模型
+                model?.foldType = isUnfold  ? .unfold : .fold
             }
             return cell
         }

+ 11 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Model/KMAnnotationModel.swift

@@ -18,4 +18,15 @@ class KMBotaAnnotationModel: KMAnnotationModel {
     
     var foldType: KMFoldType    = .none
     var foldH: CGFloat = 30
+    
+    func isFold() -> Bool {
+        if self.foldType == .unfold {
+            return false
+        }
+        return true
+    }
+}
+
+class KMAnnotationListModel: NSObject {
+    var datas: [KMBotaAnnotationModel] = []
 }

+ 2 - 2
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -590,8 +590,8 @@
             filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController+Note.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "360"
-            endingLineNumber = "360"
+            startingLineNumber = "358"
+            endingLineNumber = "358"
             landmarkName = "note_expandAllComments(_:)"
             landmarkType = "7">
          </BreakpointContent>