Преглед изворни кода

【综合】BOTA 注释列表,右击-编辑,列表下的笔记要进入编辑状态(已修复)

tangchao пре 11 месеци
родитељ
комит
d44be85e4c

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

@@ -215,6 +215,8 @@ extension KMNoteTableViewCell {
 
         self.contentView.isHidden = false
         self.contentViewHidden(false)
+        // 默认折叠
+        let isFold = model?.isFold() ?? true
         
         if let data = note {
             if data.isKind(of: CPDFMarkupAnnotation.self) {
@@ -238,8 +240,7 @@ extension KMNoteTableViewCell {
                 }
                 self.annotationContentLabel.attributedStringValue = attributeStr
                 
-                let type = model?.foldType ?? .none
-                self.isFold = type != .unfold
+                self.isFold = isFold
                 if (contentString.isEmpty == false) {
                     self.contentViewHidden(false)
                 } else {
@@ -299,8 +300,7 @@ extension KMNoteTableViewCell {
                     self.noteContentLabel.stringValue = noteContent
                 }
                 
-                let type = model?.foldType ?? .none
-                self.isFold = type != .unfold
+                self.isFold = isFold
                 if (noteString.isEmpty == false || noteContent.isEmpty == false) {
                     self.contentView.isHidden = false
                 } else {

+ 51 - 56
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController+Note.swift

@@ -196,7 +196,7 @@ extension KMLeftSideViewController {
         guard let model = self.fetchAnnoModel(for: row) else {
             return
         }
-        var isFold = model.isFold()
+        let isFold = model.isFold()
         item = menu.addItem(title: KMLocalizedString("Expand", nil), action: #selector(unfoldNoteAction), target: self)
         item?.state = isFold ? .off : .on
         item?.representedObject = items
@@ -285,8 +285,9 @@ extension KMLeftSideViewController {
         expandAllItem?.representedObject = self.noteOutlineView
         let foldAllItem = menu.addItem(title: KMLocalizedString("Collapse All", nil), action: #selector(note_foldAllComments), target: self)
         foldAllItem?.representedObject = self.noteOutlineView
-        expandAllItem?.state = self.foldType == .unfold ? .on : .off
-        foldAllItem?.state = self.foldType == .fold ? .on : .off
+        let type = self.annoListModel?.foldType ?? .none
+        expandAllItem?.state = type == .unfold ? .on : .off
+        foldAllItem?.state = type == .fold ? .on : .off
 
         let showItem = menu.addItem(title: KMLocalizedString("Show Note", nil), action: nil, target: self)
         let subMenu = NSMenu()
@@ -351,24 +352,24 @@ extension KMLeftSideViewController {
     }
     
     @IBAction func note_expandAllComments(_ sender: AnyObject?) {
-        if (self.foldType == .unfold) { // 已全部展开
+        guard let model = self.annoListModel else {
             return
         }
-        // 设置全部展开的标识
-        self.foldType = .unfold
-        // 加载数据
-        self.loadUnfoldDate(.none)
-        // 刷新UI
+        if (model.foldType == .unfold) { // 已全部展开
+            return
+        }
+        model.foldType = .unfold
         self.noteOutlineView.reloadData()
     }
     
     @IBAction func note_foldAllComments(_ sender: AnyObject?) {
-        if (self.foldType == .fold) {
+        guard let model = self.annoListModel else {
             return
         }
-        self.foldType = .fold
-        self.loadUnfoldDate(.none)
-        
+        if (model.foldType == .fold) {
+            return
+        }
+        model.foldType = .fold
         self.noteOutlineView.reloadData()
     }
     
@@ -409,11 +410,6 @@ extension KMLeftSideViewController {
             return
         }
 
-//        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
@@ -429,12 +425,6 @@ extension KMLeftSideViewController {
             return
         }
         
-//        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
@@ -491,7 +481,26 @@ extension KMLeftSideViewController {
     }
     
     @objc func editNoteFromTable(_ sender: AnyObject?) {
-        KMPrint("editNoteFromTable ...")
+        guard let annotation = (sender as? NSMenuItem)?.representedObject as? CPDFAnnotation else {
+            NSSound.beep()
+            return
+        }
+        let model = fetchAnnoModel(for: annotation)
+        let row = self.noteOutlineView.row(forItem: model)
+        self.noteOutlineView.km_safe_selectRowIndexes(.init(integer: row), byExtendingSelection: false)
+        let noteIndex = self.noteOutlineView.column(withIdentifier: .init("note"))
+        if (noteIndex >= 0) {
+            self.noteOutlineView.scrollColumnToVisible(noteIndex)
+//
+            self.isRenameNoteOutline = true
+//            self.renamePDFOutline = [rightSideController.noteOutlineView itemAtRow:rightSideController.noteOutlineView.clickedRow];
+            let viewS = self.noteOutlineView.view(atColumn: 0, row: row, makeIfNecessary: true) as? KMNoteTableViewCell
+            let targrtTextField = viewS?.noteContentLabel
+            self.renamePDFOutlineTextField = targrtTextField
+            targrtTextField?.delegate = self
+            targrtTextField?.isEditable = true
+            targrtTextField?.becomeFirstResponder()
+        }
     }
     
     @IBAction func noteSortAction(_ sender: AnyObject?) {
@@ -528,14 +537,6 @@ extension KMLeftSideViewController {
         filterViewController.listView = self.listView
         filterViewController.view.layer?.backgroundColor = .clear
 
-        var notes = NSMutableArray()
-//        for section in self._annotations {
-//            if section.annotations?.count != 0 {
-//                for item in section.annotations! {
-//                    notes.add(item.annotation!)
-//                }
-//            }
-//        }
         filterViewController.setNotesArray(self.allAnnotations as NSArray)
         filterViewController.applyFilterCallback = { [weak self] typeArr, colorArr, authorArr, isEmpty in
             menu.cancelTracking()
@@ -572,6 +573,23 @@ extension KMLeftSideViewController {
         }
     }
     
+    func fetchAnnoModel(for anno: CPDFAnnotation) -> KMBotaAnnotationModel? {
+        if self.noteSearchMode { // 搜索模式
+            for model in self.noteSearchArray {
+                if anno.isEqual(to: model.anno) {
+                    return model
+                }
+            }
+        } else { // 常规模式(非搜索)
+            for model in self.annoListModel?.datas ?? [] {
+                if anno.isEqual(to: model.anno) {
+                    return model
+                }
+            }
+        }
+        return nil
+    }
+    
     @IBAction @objc  func sortTypeAction(_ sender: NSMenuItem) {
         let item = sender
         let tag = item.tag
@@ -884,27 +902,4 @@ extension KMLeftSideViewController {
             userDefaults.synchronize()
         }
     }
-    
-    func loadUnfoldDate(_ foldType: KMFoldType) {
-        var mutableArray: [CPDFAnnotation] = []
-        if self.noteSearchMode {
-            for model in self.noteSearchArray {
-                if let note = model.anno as? CPDFMarkupAnnotation {
-                    mutableArray.append(note)
-                }
-            }
-        } else {
-            for model in self.annoListModel?.datas ?? [] {
-                if let note = model.anno, note is CPDFMarkupAnnotation {
-                    mutableArray.append(note)
-                }
-            }
-        }
-//        for note in self.notes {
-//            if note is CPDFMarkupAnnotation {
-//                mutableArray.append(note)
-//            }
-//        }
-        self.canFoldNotes = mutableArray
-    }
 }

+ 0 - 4
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController.swift

@@ -148,8 +148,6 @@ class KMLeftSideViewController: KMSideViewController {
         }
     }
     
-    var canFoldNotes: [CPDFAnnotation] = []
-    
     var isRenameNoteOutline = false
 
     // 所有注释
@@ -201,8 +199,6 @@ class KMLeftSideViewController: KMSideViewController {
     var findPaneState: KMFindPaneState = .singular
     var searchResultIndex: Int = 0
     
-    var foldType: KMFoldType = .none
-    
     var leftMargin: CGFloat = 0
     
     private var _copysPages: [CPDFPage] = []

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

@@ -25,8 +25,79 @@ class KMBotaAnnotationModel: KMAnnotationModel {
         }
         return true
     }
+    
+    func canFold() -> Bool {
+        guard let data = self.anno else {
+            return false
+        }
+        if data is CPDFMarkupAnnotation {
+            return true
+        }
+        if data is CPDFTextAnnotation {
+            return true
+        }
+        return false
+    }
 }
 
 class KMAnnotationListModel: NSObject {
     var datas: [KMBotaAnnotationModel] = []
+    
+    // 默认全部折叠
+    var foldType: KMFoldType {
+        set {
+            for model in self.canFoldModel() {
+                if newValue != .none {
+                    model.foldType = newValue
+                }
+            }
+        }
+        get {
+            let canFolds = self.canFoldModel()
+            if canFolds.isEmpty {
+                return .none
+            }
+            
+            // 是否全部折叠
+            var isAll = true
+            for model in canFolds {
+                if model.isFold() == false {
+                    isAll = false
+                    break
+                }
+            }
+            if isAll {
+                return .fold
+            }
+            
+            // 是否全部展开
+            for model in canFolds {
+                if model.isFold() {
+                    isAll = false
+                    break
+                }
+            }
+            
+            return isAll ? .unfold : .none
+        }
+    }
+    
+    func canFoldModel() -> [KMBotaAnnotationModel] {
+        var models: [KMBotaAnnotationModel] = []
+        for model in self.datas {
+            if model.canFold() {
+                models.append(model)
+            }
+        }
+        return models
+    }
+    
+    func isAllFold() -> Bool {
+        for model in self.canFoldModel() {
+            if model.isFold() == false {
+                return false
+            }
+        }
+        return true
+    }
 }

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

@@ -580,21 +580,5 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "895BEF84-D904-4EAF-99F9-552EED31AB19"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController+Note.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "358"
-            endingLineNumber = "358"
-            landmarkName = "note_expandAllComments(_:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
    </Breakpoints>
 </Bucket>