From 7c09cb12bb1c5e870ba913d044c9f8effde6447f Mon Sep 17 00:00:00 2001 From: Nikita Khromov Date: Fri, 14 Feb 2025 17:02:30 +0700 Subject: [PATCH] handlers for edit forms --- pdf/src/document.js | 14 +++++++++++--- pdf/src/drawings/shape.js | 9 ++++++++- pdf/src/forms/base/base.js | 2 ++ pdf/src/forms/base/basecheckbox.js | 10 +++++++++- pdf/src/forms/combobox.js | 8 ++++++++ pdf/src/forms/listbox.js | 8 ++++++++ pdf/src/forms/pushbutton.js | 9 +++++++++ pdf/src/history/formsChanges.js | 17 +++++++++++++++++ pdf/src/viewer.js | 13 +++++++++++-- 9 files changed, 83 insertions(+), 7 deletions(-) diff --git a/pdf/src/document.js b/pdf/src/document.js index 290269c850..608b50f42d 100644 --- a/pdf/src/document.js +++ b/pdf/src/document.js @@ -444,6 +444,10 @@ var CPresentation = CPresentation || function(){}; } oField.SetDocument(this); + if (this.IsEditFieldsMode()) { + oField.SetEditMode(true); + } + return oField; }; CPDFDoc.prototype.SetEditFieldsMode = function(bEdit) { @@ -3217,7 +3221,13 @@ var CPresentation = CPresentation || function(){}; let oDrawing = this.activeDrawing; let oContent; - if (oForm && oForm.IsCanEditText()) { + if (this.IsEditFieldsMode()) { + oController.selectedObjects.forEach(function(shape) { + let field = shape.GetEditField(); + oThis.RemoveField(field.GetId()); + }); + } + else if (oForm && oForm.IsCanEditText()) { oForm.Remove(nDirection, isCtrlKey); oContent = oForm.GetDocContent(); } @@ -3354,8 +3364,6 @@ var CPresentation = CPresentation || function(){}; CPDFDoc.prototype.RemoveField = function(sId) { let oController = this.GetController(); - this.BlurActiveObject(); - let oForm = this.widgets.find(function(form) { return form.GetId() == sId; }); diff --git a/pdf/src/drawings/shape.js b/pdf/src/drawings/shape.js index 90d5a58637..ead243faa8 100644 --- a/pdf/src/drawings/shape.js +++ b/pdf/src/drawings/shape.js @@ -55,7 +55,14 @@ }; CPdfShape.prototype.GetEditField = function() { return this.editField; - } + }; + CPdfShape.prototype.hitInTextRect = function(x, y) { + if (this.IsEditFieldShape()) { + return false; + } + + return this.hitInTextRectWord(x, y); + }; CPdfShape.prototype.GetDocument = function() { if (this.IsEditFieldShape()) { return this.editField.GetDocument(); diff --git a/pdf/src/forms/base/base.js b/pdf/src/forms/base/base.js index e92acd020c..a9ffa42cde 100644 --- a/pdf/src/forms/base/base.js +++ b/pdf/src/forms/base/base.js @@ -2033,6 +2033,8 @@ return this._textSize; }; CBaseField.prototype.SetRect = function(aOrigRect) { + AscCommon.History.Add(new CChangesPDFFormRect(this, this.GetRect(), aOrigRect)); + this._origRect = aOrigRect; this.SetWasChanged(true); this.SetNeedRecalc(true); diff --git a/pdf/src/forms/base/basecheckbox.js b/pdf/src/forms/base/basecheckbox.js index 918d61deb3..fcde997a4e 100644 --- a/pdf/src/forms/base/basecheckbox.js +++ b/pdf/src/forms/base/basecheckbox.js @@ -64,7 +64,7 @@ CBaseCheckBoxField.prototype = Object.create(AscPDF.CBaseField.prototype); CBaseCheckBoxField.prototype.constructor = CBaseCheckBoxField; - CBaseCheckBoxField.prototype.Draw = function(oGraphicsPDF) { + CBaseCheckBoxField.prototype.Draw = function(oGraphicsPDF, oGraphicsWord) { if (this.IsHidden() == true) return; @@ -75,6 +75,7 @@ this.DrawCheckedSymbol(oGraphicsPDF); this.DrawLocks(oGraphicsPDF); + this.DrawEdit(oGraphicsWord); }; CBaseCheckBoxField.prototype.IsChecked = function() { return this._checked; @@ -341,6 +342,13 @@ let isInFocus = oDoc.activeForm === this; oDoc.activeForm = this; + if (oDoc.IsEditFieldsMode()) { + let oController = oDoc.GetController(); + this.editShape.select(oController, this.GetPage()); + this.editShape.onMouseDown(x, y, e); + return; + } + function callbackAfterFocus() { this.SetInForm(true); } diff --git a/pdf/src/forms/combobox.js b/pdf/src/forms/combobox.js index ceb965e94c..c65e71c0a2 100644 --- a/pdf/src/forms/combobox.js +++ b/pdf/src/forms/combobox.js @@ -81,6 +81,7 @@ this.DrawBorders(oGraphicsPDF); this.DrawLocks(oGraphicsPDF); + this.DrawEdit(oGraphicsWord); }; CComboBoxField.prototype.Recalculate = function() { if (this.IsNeedRecalc() == false) @@ -262,6 +263,13 @@ oDoc.activeForm = this; + if (oDoc.IsEditFieldsMode()) { + let oController = oDoc.GetController(); + this.editShape.select(oController, this.GetPage()); + this.editShape.onMouseDown(x, y, e); + return; + } + function callbackAfterFocus(x, y, e) { oDoc.SetLocalHistory(); if (false == e.ShiftKey) { diff --git a/pdf/src/forms/listbox.js b/pdf/src/forms/listbox.js index a92b551094..dd0ca2eafd 100644 --- a/pdf/src/forms/listbox.js +++ b/pdf/src/forms/listbox.js @@ -85,6 +85,7 @@ this.DrawBorders(oGraphicsPDF); this.DrawLocks(oGraphicsPDF); + this.DrawEdit(oGraphicsWord); }; CListBoxField.prototype.Recalculate = function() { if (this.IsNeedRecalc() == false) @@ -488,6 +489,13 @@ oDoc.activeForm = this; + if (oDoc.IsEditFieldsMode()) { + let oController = oDoc.GetController(); + this.editShape.select(oController, this.GetPage()); + this.editShape.onMouseDown(x, y, e); + return; + } + function callbackAfterFocus(x, y, e) { this.SetInForm(true); this.SetDrawHighlight(false); diff --git a/pdf/src/forms/pushbutton.js b/pdf/src/forms/pushbutton.js index 20f08df020..aa317f234d 100644 --- a/pdf/src/forms/pushbutton.js +++ b/pdf/src/forms/pushbutton.js @@ -730,6 +730,7 @@ } this.DrawLocks(oGraphicsPDF); + this.DrawEdit(oGraphicsWord); }; CPushButtonField.prototype.SetImageRasterId = function(sRasterId, nAPType) { let sPrevRasterId; @@ -1252,6 +1253,7 @@ } this.DrawLocks(oGraphicsPDF); + this.DrawEdit(oGraphicsWord); }; CPushButtonField.prototype.SetPressed = function(bValue) { this._pressed = bValue; @@ -1275,6 +1277,13 @@ let isInFocus = oDoc.activeForm === this; oDoc.activeForm = this; + if (oDoc.IsEditFieldsMode()) { + let oController = oDoc.GetController(); + this.editShape.select(oController, this.GetPage()); + this.editShape.onMouseDown(x, y, e); + return; + } + function callbackAfterFocus() { this.SetInForm(true); } diff --git a/pdf/src/history/formsChanges.js b/pdf/src/history/formsChanges.js index 2b3cfc371d..4eeb342e9a 100644 --- a/pdf/src/history/formsChanges.js +++ b/pdf/src/history/formsChanges.js @@ -347,6 +347,23 @@ CChangesPDFFormBorderStyle.prototype.private_SetValue = function(Value) oField.SetBorderStyle(Value); }; +/** + * @constructor + * @extends {AscDFH.CChangesAnnotArrayOfDoubleProperty} + */ +function CChangesPDFFormRect(Class, Old, New, Color) +{ + AscDFH.CChangesAnnotArrayOfDoubleProperty.call(this, Class, Old, New, Color); +} +CChangesPDFFormRect.prototype = Object.create(AscDFH.CChangesAnnotArrayOfDoubleProperty.prototype); +CChangesPDFFormRect.prototype.constructor = CChangesPDFFormRect; +CChangesPDFFormRect.prototype.Type = AscDFH.historyitem_Pdf_Form_Rect; +CChangesPDFFormRect.prototype.private_SetValue = function(Value) +{ + let oField = this.Class; + oField.SetRect(Value); +}; + /** * @constructor * @extends {AscDFH.CChangesBaseProperty} diff --git a/pdf/src/viewer.js b/pdf/src/viewer.js index b418eb95c3..5ea6983829 100644 --- a/pdf/src/viewer.js +++ b/pdf/src/viewer.js @@ -2142,12 +2142,21 @@ this.getPageFieldByCoords = function(x, y, pageIndex, bGetHidden) { var pageFields = this.pagesInfo.pages[pageIndex]; + if (pageFields.fields) { for (var i = 0, len = pageFields.fields.length; i < len; i++) { - if (x >= pageFields.fields[i]._origRect[0] && x <= pageFields.fields[i]._origRect[2] && - y >= pageFields.fields[i]._origRect[1] && y <= pageFields.fields[i]._origRect[3]) { + let oField = pageFields.fields[i]; + let aRect = oField.GetRect(); + let oFieldEditShape = oField.GetEditShape(); + let bHitToHandles = false; + if (oFieldEditShape) { + bHitToHandles = oFieldEditShape.hitToHandles(x * g_dKoef_pt_to_mm, y * g_dKoef_pt_to_mm) !== -1; + } + + if (x >= aRect[0] && x <= aRect[2] && + y >= aRect[1] && y <= aRect[3] || bHitToHandles) { if (bGetHidden) { return pageFields.fields[i]; }