Browse Source

【2025】【Edit】数据串接完善

niehaoyu 4 months ago
parent
commit
bbabc648c8

+ 75 - 4
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/Bates/KMBatesController.swift

@@ -24,6 +24,8 @@ class KMBatesController: NSViewController {
     var totalPDFCount: Int = 1
     var pdfDocument: CPDFDocument?
     
+    var batesModel: KMBatesModel?
+    
     var editSubType: KMPDFEditSubModeType = .none
     
     override func viewDidLoad() {
@@ -36,13 +38,13 @@ class KMBatesController: NSViewController {
         
         propertyController.view.frame = propertyInfoView.bounds
         propertyController.view.autoresizingMask = [.width, .height]
-//        propertyController.delegate = self
+        propertyController.delegate = self
         propertyController.view.isHidden = true
         propertyInfoView.addSubview(propertyController.view)
         
         templatesController.view.frame = propertyInfoView.bounds
         templatesController.view.autoresizingMask = [.width, .height]
-//        templatesController.delegate = self
+        templatesController.delegate = self
         templatesController.view.isHidden = true
         propertyInfoView.addSubview(templatesController.view)
         
@@ -69,8 +71,7 @@ class KMBatesController: NSViewController {
         } else if editSubType == .edit {
             propertyController.view.isHidden = false
             propertyController.reloadData()
-            
-        }
+         }
     }
     
     func reloadData() {
@@ -81,7 +82,77 @@ class KMBatesController: NSViewController {
         
         documentPreview.pdfDocument = pdfDocument
         documentPreview.reloadData()
+         
+    }
+    
+    func updatePDFDocumentBates() {
+        if let data = batesModel {
+            let cPDFBates = documentPreview.pdfDocument?.bates()
+            cPDFBates?.pageString = "0"
+            
+            var fontSize = data.fontsize
+            var fontName: String = data.fontName
+
+            let font = NSFont.boldSystemFont(ofSize:fontSize)
+            let style = NSMutableParagraphStyle()
+            style.alignment = .center
+            style.lineBreakMode = .byCharWrapping
+            let size: NSSize = "text".boundingRect(with: NSSize(width: 1000, height: 1000), options: NSString.DrawingOptions(rawValue: 3), attributes: [NSAttributedString.Key.font : font, NSAttributedString.Key.paragraphStyle : style]).size
+            cPDFBates?.margin = NSEdgeInsetsMake(max(CGFloat(data.topMargin)-size.height, 0), CGFloat(data.leftMargin), max(CGFloat(data.bottomMargin)-size.height, 0), CGFloat(data.rightMargin))
+             
+            let strings = KMBatesManager.parseModel(model: data, UInt(totalPDFCount))
+            var count: Int = 0
+            let color = data.color
+            
+            for text in strings {
+                cPDFBates?.setText(text, at: UInt(count))
+                cPDFBates?.setTextColor(color, at: UInt(count))
+                cPDFBates?.setFontSize(fontSize, at: UInt(count))
+                cPDFBates?.setFontName(fontName, at: UInt(count))
+                count += 1
+            }
+            cPDFBates?.update()
+            
+            self.documentPreview.refreshUI()
+        } else {
+            pdfDocument?.headerFooter().clear()
+            documentPreview.refreshUI()
+        }
+        
+    }
+    
+}
+
+//MARK: - KMHeaderPropertyControllerDelegate
+extension KMBatesController: KMBatesPropertyControllerDelegate {
+    func batesPropertyControllerDidUpdate(_ controller: KMBatesPropertyController) {
+        
+        batesModel = controller.batesModel
+        
+        updatePDFDocumentBates()
+
+    }
+    
+    func batesPropertyControllerDidChangetoTemplate(_ controller: KMBatesPropertyController) {
+        editSubType = .template
         
+        batesModel = nil
         
+        updatePDFDocumentBates()
+        
+        reloadData()
     }
+    
+    func batesPropertyControllerSaveTemplateSuccess(_ controller: KMBatesPropertyController, _ data: KMBatesModel) {
+        editSubType = .template
+        
+        reloadData()
+    }
+}
+
+
+//MARK: - KMHFTemplateControllerDelegate
+extension KMBatesController: KMBGTemplateControllerDelegate {
+    
+    
 }

+ 114 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/Bates/KMBatesManager.swift

@@ -277,5 +277,119 @@ class KMBatesManager: NSObject {
         }
         return "Bates\(availableIndex)"
     }
+     
+}
+
+//Class
+extension KMBatesManager {
+    class func parseModel(model: KMBatesModel, _ pageCount: UInt) -> [String] {
+        var topLeftString: String = ""
+        if (!model.topLeftString.isEmpty) {
+            var string = KMBatesManager.parsePageFormat(formatString: model.topLeftString, startPage: model.startString, pageCount: "\(pageCount)")
+            string = KMBatesManager.parseDateFormat(formatString: string)
+            topLeftString = string
+        }
+        
+        var topCenterString: String = ""
+        if (!model.topCenterString.isEmpty) {
+            var string = KMBatesManager.parsePageFormat(formatString: model.topCenterString, startPage: model.startString, pageCount: "\(pageCount)")
+            string = KMBatesManager.parseDateFormat(formatString: string)
+            topCenterString = string
+        }
+        
+        var topRightString: String = ""
+        if (!model.topRightString.isEmpty) {
+            var string = KMBatesManager.parsePageFormat(formatString: model.topRightString, startPage: model.startString, pageCount: "\(pageCount)")
+            string = KMBatesManager.parseDateFormat(formatString: string)
+            topRightString = string
+        }
+        
+        var bottomLeftString: String = ""
+        if (!model.bottomLeftString.isEmpty) {
+            var string = KMBatesManager.parsePageFormat(formatString: model.bottomLeftString, startPage: model.startString, pageCount: "\(pageCount)")
+            string = KMBatesManager.parseDateFormat(formatString: string)
+            bottomLeftString = string
+        }
+        var bottomCenterString: String = ""
+        if (!model.bottomCenterString.isEmpty) {
+            var string = KMBatesManager.parsePageFormat(formatString: model.bottomCenterString, startPage: model.startString, pageCount: "\(pageCount)")
+            string = KMBatesManager.parseDateFormat(formatString: string)
+            bottomCenterString = string
+        }
+        var bottomRightString: String = ""
+        if (!model.bottomRightString.isEmpty) {
+            var string = KMBatesManager.parsePageFormat(formatString: model.bottomRightString, startPage: model.startString, pageCount: "\(pageCount)")
+            string = KMBatesManager.parseDateFormat(formatString: string)
+            bottomRightString = string
+        }
+        
+        return [topLeftString, topCenterString, topRightString, bottomLeftString, bottomCenterString, bottomRightString]
+    }
+    
+    class func parsePageFormat(formatString: String, startPage: String, pageCount: String) -> String {
+        var result = formatString
+        for pageFormat in self.getPageFormats() {
+            let string = "<<\(pageFormat)>>"
+            if (result.contains(string)) {
+                var tempString = ""
+                if (string == "<<1>>") {
+                    tempString.append("<<\(startPage)>>")
+                } else if (string == "<<1 of n>>") {
+                    tempString.append("<<\(startPage)>>")
+                    tempString.append(" of \(pageCount)")
+                } else if (string == "<<1/n>>") {
+                    tempString.append("<<\(startPage)>>")
+                    tempString.append("/\(pageCount)")
+                } else if (string == "<<Page 1>>") {
+                    tempString.append("Page \(startPage)")
+                } else if (string == "<<Page 1 of n>>") {
+                    tempString.append("Page \(startPage)")
+                    tempString.append("of \(pageCount)")
+                }
+                result = result.replacingOccurrences(of: string, with: tempString)
+            }
+        }
+        
+        return result
+    }
+    
+    class func parseDateFormat(formatString: String) -> String {
+        var result: String = formatString
+        for dateFormat in self.getDateFormats() {
+            if (result.contains(dateFormat)) {
+                var formatString: String = dateFormat.replacingOccurrences(of: "m", with: "M")
+                var replace = "<<\(dateFormat)>>"
+                
+                let date = Date()
+                let dateFormatter = DateFormatter()
+                dateFormatter.dateFormat = formatString
+                var dateString = dateFormatter.string(from: date)
+                result = result.replacingOccurrences(of: replace, with: dateString)
+            }
+        }
+        return result
+    }
+    
+    class func getPageFormats() -> [String] {
+        return ["1",
+                "1 of n",
+                "1/n",
+                "Page 1",
+                "Page 1 of n"]
+    }
+    
+    @objc class func getDateFormats() -> [String] {
+        return ["m/d", "m/d/yy", "m/d/yyyy",
+                "mm/dd/yy", "mm/dd/yyyy",
+                "d/m/yy", "d/m/yyyy",
+                "dd/mm/yy", "dd/mm/yyyy",
+                "mm/yy", "mm/yyyy",
+                "m.d.yy", "m.d.yyyy",
+                "mm.dd.yy", "mm.dd.yyyy", "mm.yy", "mm.yyyy",
+                "d.m.yy", "d.m.yyyy",
+                "dd.mm.yy", "dd.mm.yyyy",
+                "yy-mm-dd",
+                "yyyy-mm-dd"]
+    }
     
 }

+ 109 - 4
PDF Office/PDF Master/KMClass/KMPDFViewController/EditTool/Bates/Views/KMBatesPropertyController.swift

@@ -72,6 +72,9 @@ class KMBatesPropertyController: NSViewController {
     var groupView: ComponentGroup!
     
     private var familyNames = CPDFFont.familyNames
+    private var positionSelRow: Int = 0
+    private var positionSelColumn: Int = 0
+    
     
     var totalPDFCount: Int = 1
     var batesModel: KMBatesModel = KMBatesModel()
@@ -209,6 +212,12 @@ class KMBatesPropertyController: NSViewController {
         layoutInsertButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "watermark_template_add"), keepPressState: false)
         layoutInsertButton.setTarget(self, action: #selector(componentButtonClicked(_:)))
         
+        layoutPosition.properties = ComponentCPositionProperty(rowCount: 2, columnCount: 3, dash: true)
+        layoutPosition.delegate = self
+        
+        layoutTextarea.properties = ComponentTextareaProperty(totalCount: -1)
+        layoutTextarea.delegate = self
+        
         //Save
         saveTemplateBGView.wantsLayer = true
         saveTemplateBGView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor
@@ -278,16 +287,32 @@ class KMBatesPropertyController: NSViewController {
         
     }
     
-    //MARK: - Action
+    func updateTextAreaText() {
+         if positionSelRow == 0 && positionSelColumn == 0 {
+            //左下角
+            layoutTextarea.properties.text = batesModel.bottomLeftString
+        } else if positionSelRow == 0 && positionSelColumn == 1 {
+            layoutTextarea.properties.text = batesModel.bottomCenterString
+        } else if positionSelRow == 0 && positionSelColumn == 2 {
+            layoutTextarea.properties.text = batesModel.bottomRightString
+        } else if positionSelRow == 1 && positionSelColumn == 0 {
+            layoutTextarea.properties.text = batesModel.topLeftString
+        } else if positionSelRow == 1 && positionSelColumn == 1 {
+            layoutTextarea.properties.text = batesModel.topCenterString
+        } else if positionSelRow == 1 && positionSelColumn == 2 {
+            layoutTextarea.properties.text = batesModel.topRightString
+        }
+        layoutTextarea.reloadData()
+    }
     
+    //MARK: - Action
     @objc func componentButtonClicked(_ sender: ComponentButton) {
         if sender == templateButton {
             delegate?.batesPropertyControllerDidChangetoTemplate?(self)
             
         } else if sender == layoutInsertButton {
             var menuItemArr: [ComponentMenuitemProperty] = []
-            var items: [(String, String)] = [("Insert Page Number", "InsertPageNumberKey"),
-                                             ("Insert Date", "InsertDateKey")]
+            let items: [(String, String)] = [("Insert Bates", "InsertBatesKey")]
             
             for (i, value) in items {
                 let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
@@ -303,7 +328,7 @@ class KMBatesPropertyController: NSViewController {
                 groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
             }
             groupView.groupDelegate = self
-            groupView?.frame = CGRectMake(0, 0, 160, 80)
+            groupView?.frame = CGRectMake(0, 0, 160, 44)
             groupView.updateGroupInfo(menuItemArr)
             if let point: CGPoint = sender.superview?.convert(sender.frame.origin, to: self.view.window?.contentView) {
                 groupView.showWithPoint(CGPoint(x: point.x, y: point.y - CGRectGetHeight(groupView.frame)-4), relativeTo: self.view)
@@ -393,6 +418,86 @@ extension KMBatesPropertyController: ComponentSelectDelegate {
 //MARK: - ComponentGroupDelegate
 extension KMBatesPropertyController: ComponentGroupDelegate {
     func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
+        if menuItemProperty?.identifier == "InsertBatesKey" {
+            guard let digitsText = digitsInputNumber.properties.text else {
+                return
+            }
+            guard let startPageText = startPageSelect.properties.text else {
+                return
+            }
+            batesModel.digits = Int(digitsText) ?? 1
+            
+            var tString = "<<#\((digitsText))#\(startPageText)"
+            if !self.prefixInput.properties.text.isEmpty {
+                tString += "#\(self.prefixInput.properties.text)"
+            } else if self.prefixInput.properties.text.isEmpty && !self.suffixInput.properties.text.isEmpty {
+                tString += "#"
+            }
+            if !self.suffixInput.properties.text.isEmpty {
+                tString += "#\(self.suffixInput.properties.text)"
+            }
+            tString += ">>"
+            
+            if positionSelRow == 0 && positionSelColumn == 0 {
+                //左下角
+                batesModel.bottomLeftString = batesModel.bottomLeftString + tString
+            } else if positionSelRow == 0 && positionSelColumn == 1 {
+                batesModel.bottomCenterString = batesModel.bottomCenterString + tString
+            } else if positionSelRow == 0 && positionSelColumn == 2 {
+                batesModel.bottomRightString = batesModel.bottomRightString + tString
+            } else if positionSelRow == 1 && positionSelColumn == 0 {
+                batesModel.topLeftString = batesModel.topLeftString + tString
+            } else if positionSelRow == 1 && positionSelColumn == 1 {
+                batesModel.topCenterString = batesModel.topCenterString + tString
+            } else if positionSelRow == 1 && positionSelColumn == 2 {
+                batesModel.topRightString = batesModel.topRightString + tString
+            }
+            
+        }
+        updateTextAreaText()
+        
+        delegate?.batesPropertyControllerDidUpdate?(self)
+        
+    }
+}
+
+//MARK: - ComponentCPositionDelegate
+extension KMBatesPropertyController: ComponentCPositionDelegate {
+    func componentCPositionDidChoose(_ view: NSView, _ row: Int, _ column: Int) {
+        if view == layoutPosition {
+            view.window?.makeFirstResponder(nil)
+            
+            positionSelRow = row
+            positionSelColumn = column
+            
+            updateTextAreaText()
+            
+            delegate?.batesPropertyControllerDidUpdate?(self)
+            
+        }
+    }
+}
+
+//MARK: - ComponentTextareaDelegate
+extension KMBatesPropertyController: ComponentTextareaDelegate {
+    func componentTextareaTextDidChange(_ view: ComponentTextarea) {
+        if positionSelRow == 0 && positionSelColumn == 0 {
+            //左下角
+            batesModel.bottomLeftString = layoutTextarea.properties.text
+        } else if positionSelRow == 0 && positionSelColumn == 1 {
+            batesModel.bottomCenterString = layoutTextarea.properties.text
+        } else if positionSelRow == 0 && positionSelColumn == 2 {
+            batesModel.bottomRightString = layoutTextarea.properties.text
+        } else if positionSelRow == 1 && positionSelColumn == 0 {
+            batesModel.topLeftString = layoutTextarea.properties.text
+        } else if positionSelRow == 1 && positionSelColumn == 1 {
+            batesModel.topCenterString = layoutTextarea.properties.text
+        } else if positionSelRow == 1 && positionSelColumn == 2 {
+            batesModel.topRightString = layoutTextarea.properties.text
+        }
+    }
+    
+    func componentTextareaTextDidEndEditing(_ view: ComponentTextarea) {
         
     }
 }

+ 2 - 2
PDF Office/PDF Master/KMClass/KMPDFViewController/HeaderFooter/KMHeaderFooterController.swift

@@ -103,9 +103,9 @@ class KMHeaderFooterController: NSViewController {
              
             let strings = KMHeaderFooterObject.parseModel(model: data, pageCount: totalPDFCount)
             var count: Int = 0
-            var color = data.color
+            let color = data.color
             
-            for text in ["<<1>>", "<<1>>", "<<1>>", "<<1>>", "<<1>>", "<<1>>"] {
+            for text in strings {
                 cPDFHeaderFooter?.setText(text, at: UInt(count))
                 cPDFHeaderFooter?.setTextColor(color, at: UInt(count))
                 cPDFHeaderFooter?.setFontSize(fontSize, at: UInt(count))

+ 110 - 3
PDF Office/PDF Master/KMClass/KMPDFViewController/HeaderFooter/Views/KMHeaderPropertyController.swift

@@ -71,6 +71,9 @@ class KMHeaderPropertyController: NSViewController {
     
     private var familyNames = CPDFFont.familyNames
     
+    private var positionSelRow: Int = 0
+    private var positionSelColumn: Int = 0
+    
     var totalPDFCount: Int = 1
     var headerFooterModel: KMHeaderFooterObject = KMHeaderFooterObject()
     
@@ -215,6 +218,12 @@ class KMHeaderPropertyController: NSViewController {
         layoutInsertButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "watermark_template_add"), keepPressState: false)
         layoutInsertButton.setTarget(self, action: #selector(componentButtonClicked(_:)))
         
+        layoutPosition.properties = ComponentCPositionProperty(rowCount: 2, columnCount: 3, dash: true)
+        layoutPosition.delegate = self
+        
+        layoutTextarea.properties = ComponentTextareaProperty(totalCount: -1)
+        layoutTextarea.delegate = self
+        
         //Save
         saveTemplateBGView.wantsLayer = true
         saveTemplateBGView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor
@@ -291,8 +300,25 @@ class KMHeaderPropertyController: NSViewController {
         startPageSelect.reloadData()
         
         //Layout
-        
-        
+         
+    }
+    
+    func updateTextAreaText() {
+         if positionSelRow == 0 && positionSelColumn == 0 {
+            //左下角
+            layoutTextarea.properties.text = headerFooterModel.bottomLeftString
+        } else if positionSelRow == 0 && positionSelColumn == 1 {
+            layoutTextarea.properties.text = headerFooterModel.bottomCenterString
+        } else if positionSelRow == 0 && positionSelColumn == 2 {
+            layoutTextarea.properties.text = headerFooterModel.bottomRightString
+        } else if positionSelRow == 1 && positionSelColumn == 0 {
+            layoutTextarea.properties.text = headerFooterModel.topLeftString
+        } else if positionSelRow == 1 && positionSelColumn == 1 {
+            layoutTextarea.properties.text = headerFooterModel.topCenterString
+        } else if positionSelRow == 1 && positionSelColumn == 2 {
+            layoutTextarea.properties.text = headerFooterModel.topRightString
+        }
+        layoutTextarea.reloadData()
     }
     
     //MARK: - Action
@@ -302,7 +328,7 @@ class KMHeaderPropertyController: NSViewController {
             delegate?.headerFooterPropertyControllerDidChangetoTemplate?(self)
         } else if sender == layoutInsertButton {
             var menuItemArr: [ComponentMenuitemProperty] = []
-            var items: [(String, String)] = [("Insert Page Number", "InsertPageNumberKey"),
+            let items: [(String, String)] = [("Insert Page Number", "InsertPageNumberKey"),
                                              ("Insert Date", "InsertDateKey")]
             
             for (i, value) in items {
@@ -421,6 +447,87 @@ extension KMHeaderPropertyController: ComponentSelectDelegate {
 //MARK: - ComponentGroupDelegate
 extension KMHeaderPropertyController: ComponentGroupDelegate {
     func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
+        if menuItemProperty?.identifier == "InsertPageNumberKey" {
+            if let text = pageSelect.properties.text {
+                let tString = "<<\(text)>>"
+                if positionSelRow == 0 && positionSelColumn == 0 {
+                    //左下角
+                    headerFooterModel.bottomLeftString = headerFooterModel.bottomLeftString + tString
+                } else if positionSelRow == 0 && positionSelColumn == 1 {
+                    headerFooterModel.bottomCenterString = headerFooterModel.bottomCenterString + tString
+                } else if positionSelRow == 0 && positionSelColumn == 2 {
+                    headerFooterModel.bottomRightString = headerFooterModel.bottomRightString + tString
+                } else if positionSelRow == 1 && positionSelColumn == 0 {
+                    headerFooterModel.topLeftString = headerFooterModel.topLeftString + tString
+                } else if positionSelRow == 1 && positionSelColumn == 1 {
+                    headerFooterModel.topCenterString = headerFooterModel.topCenterString + tString
+                } else if positionSelRow == 1 && positionSelColumn == 2 {
+                    headerFooterModel.topRightString = headerFooterModel.topRightString + tString
+                }
+            }
+        } else if menuItemProperty?.identifier == "InsertDateKey" {
+            if let text = dateSelect.properties.text {
+                let tString = "<<\(text)>>"
+                if positionSelRow == 0 && positionSelColumn == 0 {
+                    //左下角
+                    headerFooterModel.bottomLeftString = headerFooterModel.bottomLeftString + tString
+                } else if positionSelRow == 0 && positionSelColumn == 1 {
+                    headerFooterModel.bottomCenterString = headerFooterModel.bottomCenterString + tString
+                } else if positionSelRow == 0 && positionSelColumn == 2 {
+                    headerFooterModel.bottomRightString = headerFooterModel.bottomRightString + tString
+                } else if positionSelRow == 1 && positionSelColumn == 0 {
+                    headerFooterModel.topLeftString = headerFooterModel.topLeftString + tString
+                } else if positionSelRow == 1 && positionSelColumn == 1 {
+                    headerFooterModel.topCenterString = headerFooterModel.topCenterString + tString
+                } else if positionSelRow == 1 && positionSelColumn == 2 {
+                    headerFooterModel.topRightString = headerFooterModel.topRightString + tString
+                }
+            }
+        }
+        updateTextAreaText()
+        
+        delegate?.headerFooterPropertyControllerDidUpdate?(self)
+        
+    }
+}
+
+//MARK: - ComponentCPositionDelegate
+extension KMHeaderPropertyController: ComponentCPositionDelegate {
+    func componentCPositionDidChoose(_ view: NSView, _ row: Int, _ column: Int) {
+        if view == layoutPosition {
+            view.window?.makeFirstResponder(nil)
+            
+            positionSelRow = row
+            positionSelColumn = column
+            
+            updateTextAreaText()
+            
+            delegate?.headerFooterPropertyControllerDidUpdate?(self)
+            
+        }
+    }
+}
+
+//MARK: - ComponentTextareaDelegate
+extension KMHeaderPropertyController: ComponentTextareaDelegate {
+    func componentTextareaTextDidChange(_ view: ComponentTextarea) {
+        if positionSelRow == 0 && positionSelColumn == 0 {
+            //左下角
+            headerFooterModel.bottomLeftString = layoutTextarea.properties.text
+        } else if positionSelRow == 0 && positionSelColumn == 1 {
+            headerFooterModel.bottomCenterString = layoutTextarea.properties.text
+        } else if positionSelRow == 0 && positionSelColumn == 2 {
+            headerFooterModel.bottomRightString = layoutTextarea.properties.text
+        } else if positionSelRow == 1 && positionSelColumn == 0 {
+            headerFooterModel.topLeftString = layoutTextarea.properties.text
+        } else if positionSelRow == 1 && positionSelColumn == 1 {
+            headerFooterModel.topCenterString = layoutTextarea.properties.text
+        } else if positionSelRow == 1 && positionSelColumn == 2 {
+            headerFooterModel.topRightString = layoutTextarea.properties.text
+        }
+    }
+    
+    func componentTextareaTextDidEndEditing(_ view: ComponentTextarea) {
         
     }
 }