浏览代码

【综合】内容编辑预设字体补充加粗和斜体

TangChao 7 月之前
父节点
当前提交
b9f57d4859

+ 59 - 34
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/EditPDF/KMEditPDFTextPropertyViewController.swift

@@ -901,12 +901,19 @@ extension KMEditPDFTextPropertyViewController {
             return
         }
         
+        var boldV = false
         if state == .Act {
             self.fontBoldVC?.state = .Norm
+            boldV = false
         } else {
             self.fontBoldVC?.state = .Act
+            boldV = true
         }
 
+        let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
+        let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
+        let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
+        KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontSize: model.fontSize, type: type, bold: boldV, italic: nil)
         
         self.handdler?.fontBoldAction()
         
@@ -918,12 +925,20 @@ extension KMEditPDFTextPropertyViewController {
         if state == .Disabled {
             return
         }
+        var italicV = false
         if state == .Act {
             self.fontItalicVC?.state = .Norm
+            italicV = false
         } else {
             self.fontItalicVC?.state = .Act
+            italicV = true
         }
         
+        let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
+        let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
+        let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
+        KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontSize: model.fontSize, type: type, bold: nil, italic: italicV)
+        
         self.handdler?.fontItalicAction()
         
         self._trackEvent()
@@ -1128,6 +1143,15 @@ extension KMEditPDFTextPropertyViewController {
         } else {
             self.textPresuppositionResetVC?.state = .Norm
         }
+        if needChangeListView {
+            let areas = self.handdler?.editingTextAreas ?? []
+            for area in areas {
+                self.listView.setCurrentSelectionIsBold(model.bold, with: area)
+                self.listView.setCurrentSelectionIsItalic(model.italic, with: area)
+            }
+            
+            self._boldButtonStateUpdate(fontStyle: "")
+        }
     }
 }
 
@@ -1348,7 +1372,7 @@ extension KMEditPDFTextPropertyViewController {
         } else {
             if needSave {
                 let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
-                KMEditPDFTextManager.manager.changeTextPresupposition(fontName: fontName, fontSize: model.fontSize, type: .commonly)
+                KMEditPDFTextManager.manager.changeTextPresupposition(fontName: fontName, fontSize: model.fontSize, type: .commonly, bold: nil, italic: nil)
             }
         }
         
@@ -1360,7 +1384,7 @@ extension KMEditPDFTextPropertyViewController {
             let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
             let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
             let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
-            KMEditPDFTextManager.manager.changeTextPresupposition(fontName: fontName, fontSize: model.fontSize, type: type)
+            KMEditPDFTextManager.manager.changeTextPresupposition(fontName: fontName, fontSize: model.fontSize, type: type, bold: nil, italic: nil)
         }
         
         //刷新样式
@@ -1369,7 +1393,6 @@ extension KMEditPDFTextPropertyViewController {
         //        }
         
         self._boldButtonStateUpdate(fontStyle: styleString)
-        self._italicButtonStateUpdate(fontStyle: styleString)
     }
     
     func updateFontSize(size: CGFloat, needChangeListView: Bool = true, needSave: Bool = true) {
@@ -1385,7 +1408,7 @@ extension KMEditPDFTextPropertyViewController {
             } else {
                 if needSave {
                     let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
-                    KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontSize: size, type: .commonly)
+                    KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontSize: size, type: .commonly, bold: nil, italic: nil)
                 }
             }
             self.fontSize = size
@@ -1394,7 +1417,7 @@ extension KMEditPDFTextPropertyViewController {
                 let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
                 let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
                 let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
-                KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontSize: size, type: type)
+                KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontSize: size, type: type, bold: nil, italic: nil)
             }
             
             //刷新样式
@@ -1406,38 +1429,40 @@ extension KMEditPDFTextPropertyViewController {
     // Bold
     
     private func _boldButtonStateUpdate(fontStyle fStyle: String) {
-        let fontStyleNames = self.fontStyleVC?.items ?? []
-        var hasBold = false
-        for name in fontStyleNames {
-            if name.contains("Bold") {
-                hasBold = true
-                break
+        if self.selectAreas.count == 1 {
+            let areas = self.selectAreas.first
+            if areas is CPDFEditTextArea  {
+                let area = areas as! CPDFEditTextArea
+                if let value = self.listView?.isBoldCurrentSelection(byRangeEdit: area) {
+                    self.fontBoldVC?.state = value ? .Act : .Norm
+                }
+                if let value = self.listView?.isItalicCurrentSelection(byRangeEdit: area) {
+                    self.fontItalicVC?.state = value ? .Act : .Norm
+                }
             }
-        }
-        if !hasBold {
-//            self.fontBoldVC?.state = .Disabled
-            return
-        }
-        let bold = fStyle.contains("Bold")
-//        self.fontBoldVC?.state = bold ? .Act : .Norm
-    }
-    
-    private func _italicButtonStateUpdate(fontStyle fStyle: String) {
-        let fontStyleNames = self.fontStyleVC?.items ?? []
-        var hasItalic = false
-        for name in fontStyleNames {
-            if name.contains("Italic") || name.contains("Oblique") {
-                hasItalic = true
-                break
+        } else if self.selectAreas.count > 1 {
+            if let data = self.handdler?.editAreasFontBoldIsEqual(), data {
+                if let area = self.handdler?.editingTextAreas.first {
+                    let value = self.listView.isBoldCurrentSelection(byRangeEdit: area)
+                    self.fontBoldVC?.state = value ? .Act : .Norm
+                } else {
+                    self.fontBoldVC?.state = .Disabled
+                }
+            } else {
+                self.fontBoldVC?.state = .Disabled
+            }
+            
+            if let data = self.handdler?.editAreasFontItalicIsEqual(), data {
+                if let area = self.handdler?.editingTextAreas.first {
+                    let value = self.listView.isItalicCurrentSelection(byRangeEdit: area)
+                    self.fontItalicVC?.state = value ? .Act : .Norm
+                } else {
+                    self.fontItalicVC?.state = .Disabled
+                }
+            } else {
+                self.fontItalicVC?.state = .Disabled
             }
         }
-        if !hasItalic {
-//            self.fontItalicVC?.state = .Disabled
-            return
-        }
-        
-        let italic = fStyle.contains("Italic") || fStyle.contains("Oblique")
-//        self.fontItalicVC?.state = italic ? .Act : .Norm
     }
     
     //MARK: 刷新预览图片

+ 40 - 17
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/EditPDF/Manager/KMEditPDFTextManager.swift

@@ -33,6 +33,8 @@ let CHANGE_KEY = "change"
 let REDEFINE_KEY = "redefine"
 let COLOR_KEY = "fontColor"
 let ALIGNMENT_KEY = "FontAlignment"
+let Bold_KEY = "bold"
+let Italic_KEY = "italic"
 
 //字体样式类型
 enum KMEditPDFTextFontType: String, CaseIterable {
@@ -87,14 +89,14 @@ enum KMEditPDFTextFontType: String, CaseIterable {
 
 //默认字体样式
 let defaultTextPresupposition: NSDictionary = [
-    KMEditPDFTextFontType.commonly.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "12.0", REDEFINE_KEY: false, CHANGE_KEY: false, COLOR_KEY: COLOR_DEFAULT, ALIGNMENT_KEY: ALIGNMENT_DEFAULT] as [String : Any],
-    KMEditPDFTextFontType.customize.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "12.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any],
-    KMEditPDFTextFontType.h1.rawValue: [FONTNAME_KEY: "Helvetica-Bold", FONTSIZE_KEY: "36.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any],
-    KMEditPDFTextFontType.h2.rawValue: [FONTNAME_KEY: "Helvetica-Bold", FONTSIZE_KEY: "24.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any],
-    KMEditPDFTextFontType.h3.rawValue: [FONTNAME_KEY: "Helvetica-Bold", FONTSIZE_KEY: "18.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any],
-    KMEditPDFTextFontType.b1.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "14.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any],
-    KMEditPDFTextFontType.b2.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "12.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any],
-    KMEditPDFTextFontType.b3.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "11.0", REDEFINE_KEY: false, CHANGE_KEY: false] as [String : Any]]
+    KMEditPDFTextFontType.commonly.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "12.0", REDEFINE_KEY: false, CHANGE_KEY: false, COLOR_KEY: COLOR_DEFAULT, ALIGNMENT_KEY: ALIGNMENT_DEFAULT, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.customize.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "12.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.h1.rawValue: [FONTNAME_KEY: "Helvetica-Bold", FONTSIZE_KEY: "36.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.h2.rawValue: [FONTNAME_KEY: "Helvetica-Bold", FONTSIZE_KEY: "24.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.h3.rawValue: [FONTNAME_KEY: "Helvetica-Bold", FONTSIZE_KEY: "18.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.b1.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "14.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.b2.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "12.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any],
+    KMEditPDFTextFontType.b3.rawValue: [FONTNAME_KEY: "Helvetica", FONTSIZE_KEY: "11.0", REDEFINE_KEY: false, CHANGE_KEY: false, Bold_KEY : false, Italic_KEY : false] as [String : Any]]
 
 let defaultFontStyles: Array = ["Regular", "Bold", "Italic", "Bold Italic"]
 
@@ -107,6 +109,9 @@ let defaultFontStyles: Array = ["Regular", "Bold", "Italic", "Bold Italic"]
     var type: KMEditPDFTextFontType = .customize
     var color: NSColor = NSColor.black
     var alignment: NSTextAlignment = ALIGNMENT_DEFAULT
+    
+    var bold: Bool = false
+    var italic: Bool = false
 }
 
 @objcMembers class KMEditPDFTextManager: NSObject {
@@ -152,14 +157,15 @@ extension KMEditPDFTextManager {
                                    fontSize: CGFloat(Float(dic[FONTSIZE_KEY] as? String ?? "12") ?? Float(FONTSIZE_DEFAULT)),
                                    redefine: false,
                                    change: false,
-                                   type: KMEditPDFTextFontType(rawValue: type) ?? .customize)
+                                   type: KMEditPDFTextFontType(rawValue: type) ?? .customize,
+                                   bold: dic[Bold_KEY] as? Bool ?? false, italic: dic[Italic_KEY] as? Bool ?? false)
     }
     
     @objc func changeTextPresupposition(fontName: String, fontSize: CGFloat, type: String) {
         self.setTextPresupposition(fontName: fontName,
                                    fontSize: fontSize,
                                    change: true,
-                                   type: KMEditPDFTextFontType(rawValue: type) ?? .customize)
+                                   type: KMEditPDFTextFontType(rawValue: type) ?? .customize, bold: nil, italic: nil)
     }
     
     @objc func reDefineTextPresupposition(fontName: String, fontSize: CGFloat, type: String) {
@@ -167,17 +173,18 @@ extension KMEditPDFTextManager {
                                    fontSize: fontSize,
                                    redefine: true,
                                    change: false,
-                                   type: KMEditPDFTextFontType(rawValue: type) ?? .customize)
+                                   type: KMEditPDFTextFontType(rawValue: type) ?? .customize,
+                                   bold: nil, italic: nil)
     }
 }
 
 extension KMEditPDFTextManager {
     //改变单个字体样式
-    func changeTextPresupposition(fontName: String, fontSize: CGFloat, type: KMEditPDFTextFontType) {
+    func changeTextPresupposition(fontName: String, fontSize: CGFloat, type: KMEditPDFTextFontType, bold: Bool?, italic: Bool?) {
         self.setTextPresupposition(fontName: fontName,
                                    fontSize: fontSize,
                                    change: true,
-                                   type: type)
+                                   type: type, bold: bold, italic: italic)
     }
     
     //重定义单个字体样式
@@ -186,7 +193,8 @@ extension KMEditPDFTextManager {
                                    fontSize: fontSize,
                                    redefine: true,
                                    change: false,
-                                   type: type)
+                                   type: type,
+                                   bold: nil, italic: nil)
     }
     
     //重置单个字体样式
@@ -196,7 +204,8 @@ extension KMEditPDFTextManager {
                                    fontSize: CGFloat(Float(dic[FONTSIZE_KEY] as? String ?? "12") ?? Float(FONTSIZE_DEFAULT)),
                                    redefine: false,
                                    change: false,
-                                   type: type)
+                                   type: type,
+                                   bold: dic[Bold_KEY] as? Bool ?? false, italic: dic[Italic_KEY] as? Bool ?? false)
     }
     
     //获取保存的自定义字体样式
@@ -432,11 +441,19 @@ extension KMEditPDFTextManager {
 //MARK: - private
 extension KMEditPDFTextManager {
     //设置相应的字体样式
-    private func setTextPresupposition(fontName: String, fontSize: CGFloat, redefine: Bool = false, change: Bool = false, type: KMEditPDFTextFontType) {
+    private func setTextPresupposition(fontName: String, fontSize: CGFloat, redefine: Bool = false, change: Bool = false, type: KMEditPDFTextFontType, bold: Bool?, italic: Bool?) {
         let tempFontName = self.checkFontName(fontName: fontName)
         let model = self.fetchUserDefaultData(type: type)
         let colorString: String = model.color.toHex(alpha: true) ?? ""
-        let fontDic: NSDictionary = [FONTNAME_KEY: tempFontName, FONTSIZE_KEY: fontSize.description, REDEFINE_KEY: redefine, CHANGE_KEY: change, COLOR_KEY: colorString, ALIGNMENT_KEY: model.alignment.rawValue]
+        var boldV = model.bold
+        if let data = bold {
+            boldV = data
+        }
+        var italicV = model.italic
+        if let data = italic {
+            italicV = data
+        }
+        let fontDic: NSDictionary = [FONTNAME_KEY: tempFontName, FONTSIZE_KEY: fontSize.description, REDEFINE_KEY: redefine, CHANGE_KEY: change, COLOR_KEY: colorString, ALIGNMENT_KEY: model.alignment.rawValue, Bold_KEY : boldV, Italic_KEY : italicV]
         
         let userDefaults = UserDefaults.standard
         switch type {
@@ -512,6 +529,9 @@ extension KMEditPDFTextManager {
 //            }
 //        }
         
+        let bold = data[Bold_KEY] as? Bool ?? false
+        let italic = data[Italic_KEY] as? Bool ?? false
+        
         let resultModel: KMEditPDFTextFontModel = KMEditPDFTextFontModel()
         resultModel.fontName = fontName
         resultModel.fontSize = fontSize
@@ -520,6 +540,9 @@ extension KMEditPDFTextManager {
         resultModel.type = type
         resultModel.color = NSColor.km_init(hex: colorString)
         resultModel.alignment = alignment
+        
+        resultModel.bold = bold
+        resultModel.italic = italic
 //        if type == .customize {
 //            resultModel.color = UserDefaults.standard.pdfListViewColor(forKey: FontColor_USERDEFAULTS) ?? NSColor.black
 //        }