/* * (c) Copyright Ascensio System SIA 2010-2024 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ "use strict"; (function () { const CFormControlPr_checked_unchecked = 0; const CFormControlPr_checked_checked = 1; const CFormControlPr_checked_mixed = 2; const CFormControlPr_selType_single = 0; const CFormControlPr_selType_multi = 1; const CFormControlPr_selType_extended = 2; const CFormControlPr_objectType_button = 0; const CFormControlPr_objectType_checkBox = 1; const CFormControlPr_objectType_drop = 2; const CFormControlPr_objectType_gBox = 3; const CFormControlPr_objectType_label = 4; const CFormControlPr_objectType_list = 5; const CFormControlPr_objectType_radio = 6; const CFormControlPr_objectType_scroll = 7; const CFormControlPr_objectType_spin = 8; const CFormControlPr_objectType_editBox = 9; const CFormControlPr_objectType_dialog = 10; const CFormControlPr_objectType_toggleButton = 11; const CFormControlPr_objectType_tabStrip = 12; const CFormControlPr_objectType_image = 13; const CFormControlPr_verticalAlignment_bottom = 0; const CFormControlPr_verticalAlignment_center = 1; const CFormControlPr_verticalAlignment_distributed = 2; const CFormControlPr_verticalAlignment_justify = 3; const CFormControlPr_verticalAlignment_top = 4; const CFormControlPr_horizontalAlignment_center = 0; const CFormControlPr_horizontalAlignment_continuous = 1; const CFormControlPr_horizontalAlignment_distributed = 2; const CFormControlPr_horizontalAlignment_fill = 3; const CFormControlPr_horizontalAlignment_general = 4; const CFormControlPr_horizontalAlignment_justify = 5; const CFormControlPr_horizontalAlignment_left = 6; const CFormControlPr_horizontalAlignment_right = 7; const CFormControlPr_horizontalAlignment_centerContinuous = 8; function CStringCacheManager() { this.paragraphsByString = {}; this.paragraphsForDelete = null; } CStringCacheManager.prototype.getParagraphWithText = function(sText) { if (!this.paragraphsByString[sText]) { const oParagraph = AscFormat.ExecuteNoHistory(function() { const oShape = new AscFormat.CShape(); oShape.createTextBody(); const oParagraph = oShape.txBody.content.GetAllParagraphs()[0]; oParagraph.MoveCursorToStartPos(); oParagraph.Pr = new AscCommonWord.CParaPr(); const oParaRun = new AscCommonWord.ParaRun(oParagraph); const oTextPr = getListBoxItemTextPr(); oParaRun.Set_Pr(oTextPr); oParaRun.AddText(sText); oParagraph.AddToContent(0, oParaRun); oParagraph.SetParagraphAlign(AscCommon.align_Left); oParagraph.Reset(0, 0, 1000, 1000, 0, 0, 1); oParagraph.Recalculate_Page(0); oParagraph.LineNumbersInfo = null; return oParagraph; }, this, []); this.paragraphsByString[sText] = oParagraph; } if (this.paragraphsForDelete) { delete this.paragraphsForDelete[sText]; } return this.paragraphsByString[sText]; }; CStringCacheManager.prototype.startCheckDeleteParagraphs = function() { this.paragraphsForDelete = Object.assign({}, this.paragraphsByString); }; CStringCacheManager.prototype.endCheckDeleteParagraphs = function() { for (let sText in this.paragraphsForDelete) { delete this.paragraphsByString[sText]; } this.paragraphsForDelete = null; }; function drawParagraph(paragraph, graphics) { const oApi = Asc.editor; let bOldViewMode = false; if (oApi) { bOldViewMode = oApi.isViewMode; oApi.isViewMode = true; } paragraph.Draw(0, graphics); if (oApi) { oApi.isViewMode = bOldViewMode; } } function getVerticalAlignFromControlPr(nPr) { switch (nPr) { case CFormControlPr_verticalAlignment_bottom: return AscFormat.VERTICAL_ANCHOR_TYPE_BOTTOM; case CFormControlPr_verticalAlignment_center: return AscFormat.VERTICAL_ANCHOR_TYPE_CENTER; case CFormControlPr_verticalAlignment_distributed: return AscFormat.VERTICAL_ANCHOR_TYPE_DISTRIBUTED; case CFormControlPr_verticalAlignment_justify: return AscFormat.VERTICAL_ANCHOR_TYPE_JUSTIFIED; case CFormControlPr_verticalAlignment_top: return AscFormat.VERTICAL_ANCHOR_TYPE_TOP; default: return null; } } function getHorizontalAlignFromControl(nPr) { switch (nPr) { case CFormControlPr_horizontalAlignment_center: return AscCommon.align_Center; case CFormControlPr_horizontalAlignment_continuous: return null; case CFormControlPr_horizontalAlignment_distributed: return AscCommon.align_Distributed; case CFormControlPr_horizontalAlignment_fill: return null; case CFormControlPr_horizontalAlignment_general: return null; case CFormControlPr_horizontalAlignment_justify: return AscCommon.align_Justify; case CFormControlPr_horizontalAlignment_left: return AscCommon.align_Left; case CFormControlPr_horizontalAlignment_right: return AscCommon.align_Right; case CFormControlPr_horizontalAlignment_centerContinuous: return AscCommon.align_CenterContinuous; default: return null; } } function getVerticalControlAlignFromBodyPr(nPr) { switch (nPr) { case AscFormat.VERTICAL_ANCHOR_TYPE_BOTTOM: return CFormControlPr_verticalAlignment_bottom; case AscFormat.VERTICAL_ANCHOR_TYPE_CENTER: return CFormControlPr_verticalAlignment_center; case AscFormat.VERTICAL_ANCHOR_TYPE_DISTRIBUTED: return CFormControlPr_verticalAlignment_distributed; case AscFormat.VERTICAL_ANCHOR_TYPE_JUSTIFIED: return CFormControlPr_verticalAlignment_justify; case AscFormat.VERTICAL_ANCHOR_TYPE_TOP: return CFormControlPr_verticalAlignment_top; default: return null; } } function getHorizontalAlignFromContentControl(nPr) { switch (nPr) { case AscCommon.align_Center: return CFormControlPr_horizontalAlignment_center; case AscCommon.align_Distributed: return CFormControlPr_horizontalAlignment_distributed; case AscCommon.align_Justify: return CFormControlPr_horizontalAlignment_justify; case AscCommon.align_Left: return CFormControlPr_horizontalAlignment_left; case AscCommon.align_Right: return CFormControlPr_horizontalAlignment_right; case AscCommon.align_CenterContinuous: return CFormControlPr_horizontalAlignment_centerContinuous; default: return null; } } const nKappa = 4 * (Math.sqrt(2) - 1) / 3; function drawRoundedRect(graphics, x, y, extX, extY, nRadiusPx) { const nRadius = Math.min(nRadiusPx * AscCommon.g_dKoef_pix_to_mm, extX / 2, extY / 2); const nKappaRadius = nKappa * nRadius; graphics._s(); graphics._m(x, y + nRadius); graphics._c(x, y + nRadius - nKappaRadius, x + nRadius - nKappaRadius, y, x + nRadius, y); graphics._l(x + extX - nRadius, y); graphics._c(x + extX - nRadius + nKappaRadius, y, x + extX, y + nRadius - nKappaRadius, x + extX, y + nRadius); graphics._l(x + extX, y + extY - nRadius); graphics._c(x + extX, y + extY - nRadius + nKappaRadius, x + extX - nRadius + nKappaRadius, y + extY, x + extX - nRadius, y + extY); graphics._l(x + nRadius, y + extY); graphics._c(x + nRadius - nKappaRadius, y + extY, x, y + extY - nRadius + nKappaRadius, x, y + extY - nRadius); graphics._z(); } function startRoundControl(graphics, x, y, extX, extY, nRadiusPx, arrColor) { graphics.SaveGrState(); graphics.AddClipRect(x, y, extX, extY); graphics.StartClipPath(); drawRoundedRect(graphics, x, y, extX, extY, nRadiusPx); graphics.EndClipPath(); return function endRoundControl() { graphics.RestoreGrState(); graphics.SaveGrState(); graphics.p_width(0); graphics.p_color.apply(graphics, arrColor); drawRoundedRect(graphics, x, y, extX, extY, nRadiusPx); graphics.ds(); graphics.RestoreGrState(); } } function CStepManager() { this.timeoutId = null; } CStepManager.prototype.start = function (fCallback) { const oThis = this; if (oThis.timeoutId === null) { fCallback(); oThis.timeoutId = setTimeout(function () { (function f() { fCallback(); oThis.timeoutId = setTimeout(f, 100); })(); }, 500); } }; CStepManager.prototype.end = function () { clearTimeout(this.timeoutId); this.timeoutId = null; }; function getFlatPenColor() { return [202, 202, 202, 255]; } function getFlatCheckBoxPenColor() { return [51, 51, 51, 255]; } function CButtonBase(oController) { this.x = null; this.y = null; this.extX = null; this.extY = null; this.transform = new AscCommon.CMatrix(); this.invertTransform = new AscCommon.CMatrix(); this.controller = oController; this.isHold = false; this.isHover = false; } CButtonBase.prototype.getFlatFillColor = function () { if (this.isHold) { return [225, 225, 225, 255]; } if (this.isHover) { return [234, 234, 234, 255]; } return [244, 244, 244, 255]; }; CButtonBase.prototype.getFlatPenColor = function () { return getFlatPenColor(); }; CButtonBase.prototype.draw = function (graphics) { graphics.SaveGrState(); graphics.transform3(this.transform); const arrPenColor = this.getFlatPenColor(); graphics.p_width(0); graphics.p_color.apply(graphics, arrPenColor); graphics.b_color1.apply(graphics, this.getFlatFillColor()); graphics._s(); graphics._m(0, 0); graphics._l(this.extX, 0); graphics._l(this.extX, this.extY); graphics._l(0, this.extY); graphics._z(); graphics.df(); graphics.ds(); graphics.RestoreGrState(); graphics._e(); }; CButtonBase.prototype.hit = function (nX, nY) { return AscFormat.HitToRect(nX, nY, this.invertTransform, 0, 0, this.extX, this.extY); }; CButtonBase.prototype.setIsHold = function (pr) { if (this.isHold !== pr) { this.controller.checkNeedUpdate(); } this.isHold = pr; }; CButtonBase.prototype.setIsHover = function (pr) { if (this.isHover !== pr) { this.controller.checkNeedUpdate(); } this.isHover = pr; }; CButtonBase.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { if (!this.hit(nX, nY)) { return false; } this.setIsHold(true); if (this._onMouseDown(e, nX, nY, nPageIndex, oDrawingController)) { this.controller.checkNeedUpdate(); } return true; }; CButtonBase.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { if (this.isHold) { this.setIsHold(false); if (this._onMouseUp(e, nX, nY, nPageIndex, oDrawingController)) { this.controller.checkNeedUpdate(); } return true; } return false; }; CButtonBase.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { this.setIsHover(this.hit(nX, nY)); if (this.isHover || this.isHold) { return this._onMouseMove(e, nX, nY, nPageIndex, oDrawingController); } return false; }; CButtonBase.prototype._onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { }; CButtonBase.prototype._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { }; CButtonBase.prototype._onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { }; AscDFH.changesFactory[AscDFH.historyitem_Control_ControlPr] = AscDFH.CChangesDrawingsObject; AscDFH.changesFactory[AscDFH.historyitem_Control_FormControlPr] = AscDFH.CChangesDrawingsObject; AscDFH.drawingsChangesMap[AscDFH.historyitem_Control_ControlPr] = function (oClass, pr) { oClass.controlPr = pr; } AscDFH.drawingsChangesMap[AscDFH.historyitem_Control_FormControlPr] = function (oClass, pr) { oClass.formControlPr = pr; } function CControl() { AscFormat.CShape.call(this); this.name = null; this.link = null; this.rId = null; this.setFormControlPr(new CFormControlPr()); this.setControlPr(new CControlPr()); this.controller = null; } AscFormat.InitClass(CControl, AscFormat.CShape, AscDFH.historyitem_type_Control); CControl.prototype.superclass = AscFormat.CGraphicObjectBase; CControl.prototype.fillObject = function (oCopy, oPr) { AscFormat.CShape.prototype.fillObject.call(this, oCopy, oPr); if (this.controlPr) { oCopy.setControlPr(this.controlPr.createDuplicate()); } if (this.formControlPr) { oCopy.setFormControlPr(this.formControlPr.createDuplicate()); } }; CControl.prototype.isNeedResetState = function() { return this.controller.isNeedResetState(); }; CControl.prototype.initController = function () { switch (this.formControlPr.objectType) { case CFormControlPr_objectType_checkBox: { this.controller = new CCheckBoxController(this); break; } case CFormControlPr_objectType_button: { this.controller = new CButtonController(this); break; } case CFormControlPr_objectType_spin: { this.controller = new CSpinController(this); break; } case CFormControlPr_objectType_scroll: { this.controller = new CScrollController(this); break; } case CFormControlPr_objectType_list: { this.controller = new CListBoxController(this); break; } case CFormControlPr_objectType_drop: { this.controller = new CComboBoxController(this); break; } default: { return false; } } return true; } CControl.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { const oUR = graphics.updatedRect; if (oUR && this.bounds) { if (!oUR.isIntersectOther(this.bounds)) { return; } } if (graphics.isBoundsChecker()) { this.controller.drawBounds(graphics, transform, transformText, pageIndex, opt); } else { this.controller.draw(graphics, transform, transformText, pageIndex, opt); } }; CControl.prototype.hitInInnerArea = function (x, y) { return this.controller.hitInInnerArea(x, y); } CControl.prototype.hitInPath = CControl.prototype.hitInInnerArea; CControl.prototype.hitInTextRect = function (x, y) { if (this.selected) { return AscFormat.CShape.prototype.hitInTextRect.call(this, x, y); } return false; }; CControl.prototype.isControl = function () { return true; } CControl.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { const bRet = this.controller.onMouseDown(e, nX, nY, nPageIndex, oDrawingController); this.controller.update(); return bRet; } CControl.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { const bRet = this.controller.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); this.controller.update(); return bRet; } CControl.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { const bRet = this.controller.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); this.controller.update(); return bRet; } CControl.prototype.getCursorInfo = function (e, nX, nY) { return this.controller.getCursorInfo(e, nX, nY); } CControl.prototype.getTextRect = function () { return this.controller.getTextRect(); }; CControl.prototype.canRotate = function () { return false; }; CControl.prototype.canEditText = function () { return this.controller.canEditText(); }; CControl.prototype.canEditGeometry = function () { return false; }; CControl.prototype.setControlPr = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsObject(this, AscDFH.historyitem_Control_ControlPr, this.controlPr, pr)); this.controlPr = pr; this.controlPr.setParent(this); }; CControl.prototype.setFormControlPr = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsObject(this, AscDFH.historyitem_Control_FormControlPr, this.formControlPr, pr)); this.formControlPr = pr; this.formControlPr.setParent(this); }; CControl.prototype.clearVmlTxBody = function () { const oDocContent = this.getDocContent(); for (let i = 0; i < oDocContent.Content.length; i++) { const oParagraph = oDocContent.Content[i]; oParagraph.CheckRunContent(function (oRun) { let nCount = 0; for (let i = oRun.Content.length - 1; i >= 0; i -= 1) { const oElement = oRun.Content[i]; switch (oElement.Type) { case para_Space: { nCount += 1; break; } case para_NewLine: { oRun.Content.splice(i, nCount); nCount = 0; break; } default: { nCount = 0; break; } } } }); } } CControl.prototype.getControlPr = function () { return this.controlPr; }; CControl.prototype.getFormControlPr = function () { return this.formControlPr; }; CControl.prototype.getChecked = function () { return this.controller.getChecked(); } CControl.prototype.copy = function (oPr) { var copy = new CControl(); this.fillObject(copy, oPr); copy.initController(); return copy; }; CControl.prototype.applySpecialPasteProps = function (oPastedWb) { this.controller.applySpecialPasteProps(oPastedWb); }; CControl.prototype.initTextProperties = function () { this.controller.initTextProperties(); }; CControl.prototype.setMacro = function (pr) { this.controlPr.setMacro(pr); }; CControl.prototype.getTextHAlign = function () { const oTxBody = this.txBody; const oContent = oTxBody && oTxBody.content; if (oContent) { oContent.SetApplyToAll(true); const oTextPr = oContent.GetDirectParaPr(); oContent.SetApplyToAll(false); return getHorizontalAlignFromContentControl(oTextPr.Jc); } return null; }; CControl.prototype.getTextVAlign = function () { const oTxBody = this.txBody; const oBodyPr = oTxBody && oTxBody.bodyPr; if (oBodyPr) { return getVerticalControlAlignFromBodyPr(oBodyPr.anchor); } return null; }; CControl.prototype.recalculateTransform = function () { AscFormat.CShape.prototype.recalculateTransform.call(this); this.controller.recalculateTransform(); }; CControl.prototype.recalculate = function () { AscFormat.CShape.prototype.recalculate.call(this); this.controller.recalculate(); }; CControl.prototype.handleChangeRanges = function (arrRanges) { return this.controller.handleChangeRanges(arrRanges); } CControl.prototype.onUpdate = function () { this.controller.onUpdate(); }; function CControlControllerBase(oControl) { this.control = oControl; this.isNeedUpdate = false; } CControlControllerBase.prototype.getFormControlPr = function () { return this.control.formControlPr; }; CControlControllerBase.prototype.getControlPr = function () { return this.control.controlPr; }; CControlControllerBase.prototype.getWorksheet = function () { return this.control.Get_Worksheet(); }; CControlControllerBase.prototype.getParsedFmlaLink = function () { const oFormControlPr = this.getFormControlPr(); const oRef = this.getParsedRef(oFormControlPr.fmlaLink); if (oRef) { return new AscCommonExcel.Range(oRef.worksheet, oRef.bbox.r1, oRef.bbox.c1, oRef.bbox.r1, oRef.bbox.c1); } return null; }; CControlControllerBase.prototype.getParsedFmlaRange = function () { const oFormControlPr = this.getFormControlPr(); return this.getParsedRef(oFormControlPr.fmlaRange); }; CControlControllerBase.prototype.getParsedRef = function (sStrRef) { if (sStrRef) { const oWs = this.getWorksheet(); let aParsedRef = AscCommonExcel.getRangeByRef(sStrRef, oWs, true, true, true); const oRef = aParsedRef[0]; if (oRef) { return oRef; } } return null; }; CControlControllerBase.prototype.setRangeValue = function (oRef, oCellValue) { oRef._foreach(function (oCell) { if (oCell) { oCell.setValueData(new AscCommonExcel.UndoRedoData_CellValueData(null, new AscCommonExcel.CCellValue(oCellValue))); } }); const oWb = Asc.editor.wb; if (oWb) { const oActiveWs = oWb.getWorksheet(null, true); const nWorksheetIndex = oRef.worksheet.getIndex(); const oWs = oWb.getWorksheet(nWorksheetIndex, true); if (oWs) { oWs._updateRange(oRef.bbox); } if (oActiveWs) { oActiveWs.draw(); } } }; CControlControllerBase.prototype.drawBounds = function (graphics, transform, transformText, pageIndex, opt) { const oControl = this.control; transform = transform || oControl.transform; graphics.transform3(transform); graphics._s(); graphics._m(0, 0); graphics._l(oControl.extX, 0); graphics._l(oControl.extX, oControl.extY); graphics._l(0, oControl.extY); graphics._e(); graphics.reset(); }; CControlControllerBase.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) {}; CControlControllerBase.prototype.getCursorInfo = function (e, nX, nY) {}; CControlControllerBase.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) {}; CControlControllerBase.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) {return false;}; CControlControllerBase.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) {}; CControlControllerBase.prototype.initTextProperties = function () {return null;}; CControlControllerBase.prototype.applySpecialPasteProps = function (oPastedWb) {}; CControlControllerBase.prototype.handleChangeRanges = function (aRanges) { const bHandleFmlaRange = this.handleFmlaRange(aRanges); const bHandleFmlaLink = this.handleFmlaLink(aRanges); return bHandleFmlaRange || bHandleFmlaLink; }; CControlControllerBase.prototype.getTextRect = function () { return AscFormat.CShape.prototype.getTextRect.call(this.control); }; CControlControllerBase.prototype.getChecked = function () { return null; }; CControlControllerBase.prototype.recalculateTransform = function () {}; CControlControllerBase.prototype.recalculate = function() {}; CControlControllerBase.prototype.handleFmlaLink = function (aRanges) {return false;}; CControlControllerBase.prototype.handleFmlaRange = function (aRanges) {return false;}; CControlControllerBase.prototype.onUpdate = function () { return AscFormat.CShape.prototype.onUpdate.call(this.control); }; CControlControllerBase.prototype.hitInInnerArea = function (nX, nY) { const oControl = this.control; return AscFormat.HitToRect(nX, nY, oControl.invertTransform, 0, 0, oControl.extX, oControl.extY); }; CControlControllerBase.prototype.handleRef = function(aRanges, oRef, fCallback) { if (!oRef) { return false; } for (let i = 0; i < aRanges.length; i += 1) { if (oRef.isIntersect(aRanges[i])) { fCallback(); return true; } } return false; }; CControlControllerBase.prototype.isNeedResetState = function () { return true; }; CControlControllerBase.prototype.checkNeedUpdate = function() { this.isNeedUpdate = true; }; CControlControllerBase.prototype.update = function() { if (this.isNeedUpdate) { this.isNeedUpdate = false; this.control.onUpdate(); this.forceUpdate(); } }; CControlControllerBase.prototype.forceUpdate = function() { this.control.onUpdate(); }; CControlControllerBase.prototype.canEditText = function () { return false; }; const CHECKBOX_SIDE_SIZE = 3; const CHECKBOX_X_OFFSET = 1.5; const CHECKBOX_BODYPR_INSETS_L = 27432 / 36000; const CHECKBOX_BODYPR_INSETS_R = 0; const CHECKBOX_BODYPR_INSETS_T = 32004 / 36000; const CHECKBOX_BODYPR_INSETS_B = 32004 / 36000; const CHECKBOX_OFFSET_X = CHECKBOX_SIDE_SIZE + (CHECKBOX_X_OFFSET * 2 - CHECKBOX_BODYPR_INSETS_L); function CCheckBox(oController) { CButtonBase.call(this, oController); } AscFormat.InitClassWithoutType(CCheckBox, CButtonBase); CCheckBox.prototype.getFlatPenColor = function () { return getFlatCheckBoxPenColor(); }; CCheckBox.prototype.isChecked = function () { }; CCheckBox.prototype.isMixed = function () { }; CCheckBox.prototype.getFlatFillColor = function () { if (this.isHold) { return [225, 225, 225, 255]; } if (this.isHover) { return [234, 234, 234, 255]; } return [255, 255, 255, 255]; }; CCheckBox.prototype.draw = function (graphics) { graphics.SaveGrState(); graphics.transform3(this.transform); const endRoundControl = startRoundControl(graphics, 0, 0, this.extX, this.extY, 2, getFlatCheckBoxPenColor()); CButtonBase.prototype.draw.call(this, graphics); graphics.p_color.apply(graphics, this.getFlatPenColor()); graphics.p_width(400); graphics._s(); if (this.isChecked()) { graphics._m(2.5, 0.75); graphics._l(1, 2.25); graphics._l(0.5, 1.75); graphics.ds(); } else if (this.isMixed()) { graphics._m(CHECKBOX_SIDE_SIZE * 0.2, CHECKBOX_SIDE_SIZE * 0.5); graphics._l(CHECKBOX_SIDE_SIZE * 0.8, CHECKBOX_SIDE_SIZE * 0.5); graphics.ds(); } graphics._e(); endRoundControl(); graphics.RestoreGrState(); }; function CCheckBoxController(oControl) { CControlControllerBase.call(this, oControl); this.checkBox = new CCheckBox(this); this.initCheckBoxHandlers(); } AscFormat.InitClassWithoutType(CCheckBoxController, CControlControllerBase); CCheckBoxController.prototype.initCheckBoxHandlers = function () { const oThis = this; this.checkBox.isChecked = function () { return oThis.isChecked(); }; this.checkBox.isMixed = function () { return oThis.isMixed(); }; }; CCheckBoxController.prototype.initTextProperties = function () { const oControl = this.control; const oTxBody = oControl.txBody; if (oTxBody) { const oBodyPr = new AscFormat.CBodyPr(); oBodyPr.setInsets(CHECKBOX_BODYPR_INSETS_L, CHECKBOX_BODYPR_INSETS_T, CHECKBOX_BODYPR_INSETS_R, CHECKBOX_BODYPR_INSETS_B); oBodyPr.setAnchor(getVerticalAlignFromControlPr(this.control.formControlPr.textVAlign)); oBodyPr.vertOverflow = AscFormat.nVOTClip; oBodyPr.wrap = AscFormat.nTWTSquare; oBodyPr.upright = true; oTxBody.setBodyPr(oBodyPr); } }; CCheckBoxController.prototype.recalculateTransform = function () { const oControl = this.control; const oCheckBoxTransform = oControl.transform.CreateDublicate(); const nXOffset = CHECKBOX_X_OFFSET; const nYOffset = (oControl.extY - CHECKBOX_SIDE_SIZE) / 2; oCheckBoxTransform.tx += nXOffset; oCheckBoxTransform.ty += nYOffset; this.checkBox.x = oControl.x + nXOffset; this.checkBox.y = oControl.y + nYOffset; this.checkBox.extX = CHECKBOX_SIDE_SIZE; this.checkBox.extY = CHECKBOX_SIDE_SIZE; this.checkBox.transform = oCheckBoxTransform; this.checkBox.invertTransform = oCheckBoxTransform.CreateDublicate().Invert(); }; CCheckBoxController.prototype.drawBounds = function (graphics, transform, transformText, pageIndex, opt) { this.draw(graphics, transform, transformText, pageIndex, opt); }; CCheckBoxController.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { const oControl = this.control; AscFormat.CShape.prototype.draw.call(oControl, graphics, transform, transformText, pageIndex, opt); this.checkBox.draw(graphics); }; CCheckBoxController.prototype.isChecked = function () { const nCheckValue = this.getChecked(); return nCheckValue === CFormControlPr_checked_checked; }; CCheckBoxController.prototype.isMixed = function () { const nCheckValue = this.getChecked(); return nCheckValue === CFormControlPr_checked_mixed; }; CCheckBoxController.prototype.isEmpty = function () { return !(this.isChecked() || this.isMixed()); }; CCheckBoxController.prototype.isExternalCheckBox = function () { const oRef = this.getParsedFmlaLink(); const oWbModel = Asc.editor && Asc.editor.wbModel; if (oRef && oWbModel) { return oRef.worksheet.workbook !== oWbModel; } return false; }; CCheckBoxController.prototype.getCursorInfo = function (e, nX, nY) { const oControl = this.control; if (oControl.selected) { return null; } if (!oControl.hit(nX, nY)) { return null; } return {cursorType: "pointer", objectId: oControl.GetId()}; }; CCheckBoxController.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { const oControl = this.control; if (oControl.selected) { return false; } if (e.button !== 0) { return false; } if (e.CtrlKey) { return false; } if (!oControl.hit(nX, nY)) { return false; } this.checkBox.setIsHold(true); return true; } CCheckBoxController.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { const bIsHit = this.control.hit(nX, nY); this.checkBox.setIsHover(bIsHit); return bIsHit; } CCheckBoxController.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oController) { this.checkBox.setIsHold(false); if (this.isExternalCheckBox()) { this.checkNeedUpdate(); return false; } const oThis = this; oController.checkObjectsAndCallback(function () { const oFormControlPr = oThis.getFormControlPr(); if (!oThis.isEmpty()) { oFormControlPr.setChecked(CFormControlPr_checked_unchecked); } else { oFormControlPr.setChecked(CFormControlPr_checked_checked); } oThis.updateCellFromControl(); }, [], false, AscDFH.historydescription_Spreadsheet_SwitchCheckbox, [this.control]); this.checkNeedUpdate(); return true; } CCheckBoxController.prototype.getCheckedFromRange = function () { const oRef = this.getParsedFmlaLink(); let nRetValue = null; if (oRef) { oRef._foreachNoEmpty(function (oCell) { if (oCell) { const bValue = oCell.getBoolValue(); if (oCell.type === AscCommon.CellValueType.Bool || oCell.type === AscCommon.CellValueType.Number) { nRetValue = bValue ? CFormControlPr_checked_checked : CFormControlPr_checked_unchecked; } else if (oCell.type === AscCommon.CellValueType.Error) { nRetValue = CFormControlPr_checked_mixed; } } }); } return nRetValue; }; CCheckBoxController.prototype.getCellValueFromControl = function () { const oFormControlPr = this.getFormControlPr(); const oCellValue = new AscCommonExcel.CCellValue(); if (oFormControlPr.checked === CFormControlPr_checked_checked) { oCellValue.type = AscCommon.CellValueType.Bool; oCellValue.number = 1; } else if (oFormControlPr.checked === CFormControlPr_checked_mixed) { oCellValue.type = AscCommon.CellValueType.Error; oCellValue.text = AscCommonExcel.cError.prototype.getStringFromErrorType(AscCommonExcel.cErrorType.not_available); } else { oCellValue.type = AscCommon.CellValueType.Bool; oCellValue.number = 0; } return oCellValue; } CCheckBoxController.prototype.updateCellFromControl = function () { const oThis = this; const oRef = this.getParsedFmlaLink(); if (oRef) { const oCellValue = oThis.getCellValueFromControl(); this.setRangeValue(oRef, oCellValue); } }; CCheckBoxController.prototype.getTextRect = function () { const oTextRect = AscFormat.CShape.prototype.getTextRect.call(this.control); oTextRect.l += CHECKBOX_OFFSET_X; oTextRect.r += CHECKBOX_OFFSET_X; return oTextRect; }; CCheckBoxController.prototype.getChecked = function () { const nRangeValue = this.getCheckedFromRange(); if (nRangeValue !== null) { return nRangeValue; } const oFormControlPr = this.getFormControlPr(); return oFormControlPr.getChecked(); }; CCheckBoxController.prototype.applySpecialPasteProps = function (oPastedWb) { this.addExternalReferenceToEditor(oPastedWb); }; CCheckBoxController.prototype.addExternalReferenceToEditor = function (oPastedWb) { const oApi = Asc.editor; const oWbModel = oApi && oApi.wbModel; if (!oWbModel) { return; } const oFormControlPr = this.getFormControlPr(); const sRef = oFormControlPr.fmlaLink; if (!sRef) { return; } const oMockWb = new AscCommonExcel.Workbook(undefined, undefined, false); oMockWb.externalReferences = oPastedWb.externalReferences; oMockWb.dependencyFormulas = oPastedWb.dependencyFormulas; const oWorksheets = this.getWorksheetsFromControlValue(oMockWb); const oMainExternalReference = oWbModel.addExternalReferenceFromWorksheets(oWorksheets, oPastedWb, oMockWb); if (oMainExternalReference) { const sNewRef = AscFormat.updateRefToExternal(sRef, oMainExternalReference, oPastedWb.externalReferences, oMockWb); oFormControlPr.setFmlaLink(sNewRef); } else if (oPastedWb.externalReferences.length) { const sNewRef = AscFormat.updateRefToExternal(sRef, oMainExternalReference, oPastedWb.externalReferences, oPastedWb); oFormControlPr.setFmlaLink(sNewRef); } }; CCheckBoxController.prototype.getWorksheetsFromControlValue = function (oParentWb) { const oFormControlPr = this.getFormControlPr(); const sRef = oFormControlPr.fmlaLink; const oRes = {}; if (sRef) { const arrF = AscFormat.getParsedCopyRefs(sRef, oParentWb); if (arrF.length) { const oFirstRef = arrF[0]; const sSheetName = oFirstRef.sheet; const oWorksheet = new AscCommonExcel.Worksheet(oParentWb); oWorksheet.sName = sSheetName; const oRange = oWorksheet.getRange2(oFirstRef.range); if (oRange) { const oBBox = oRange.bbox; const oWorksheetInfo = {}; oRes[sSheetName] = oWorksheetInfo; oRes[sSheetName].defNames = []; oRes[sSheetName].ws = oWorksheet; oRes[sSheetName].maxR = oBBox.r1; oRes[sSheetName].maxC = oBBox.c1; oRes[sSheetName].minC = oBBox.c1; oRes[sSheetName].minR = oBBox.r1; const oCellValue = this.getCellValueFromControl(); oWorksheet._getCell(oBBox.c1, oBBox.r1, function (oCell) { oCell.setValueData(new AscCommonExcel.UndoRedoData_CellValueData(null, oCellValue)); }); if (oFirstRef.defName) { oWorksheetInfo.defNames.push(oFirstRef.defName); } } } } return oRes; }; CCheckBoxController.prototype.canEditText = function () { return AscFormat.CShape.prototype.canEditText.call(this.control); }; const BUTTON_BODYPR_INSETS = 27432 / 36000; function CButtonController(oControl) { CControlControllerBase.call(this, oControl); this.button = new CButtonBase(this); this.initButton(); }; AscFormat.InitClassWithoutType(CButtonController, CControlControllerBase); CButtonController.prototype.initButton = function () { const oThis = this; this.button._onMouseMove = function () { return true; }; this.button._onMouseDown = function () { return true; }; this.button._onMouseUp = function () { oThis.runMacros(); return true; } }; CButtonController.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { const oControl = this.control; transform = transform || oControl.transform; transformText = transformText || oControl.transformText; graphics.SaveGrState(); graphics.transform3(transform); const endRoundControl = startRoundControl(graphics, 0, 0, oControl.extX, oControl.extY, 4, getFlatPenColor()); this.button.draw(graphics); oControl.drawTxBody(graphics, transform, transformText, pageIndex); endRoundControl(); graphics.RestoreGrState(); }; CButtonController.prototype.recalculateTransform = function () { const oControl = this.control; this.button.x = oControl.x; this.button.y = oControl.y; this.button.extX = oControl.extX; this.button.extY = oControl.extY; this.button.transform = oControl.transform.CreateDublicate(); this.button.invertTransform = oControl.invertTransform.CreateDublicate(); }; CButtonController.prototype.onMacroError = function (sMacro) { const oApi = Asc.editor; if (oApi) { oApi.sendEvent("asc_onError", Asc.c_oAscError.ID.MacroUnavailableWarning, c_oAscError.Level.NoCritical, sMacro); } }; CButtonController.prototype.getCursorInfo = function (e, nX, nY) { const oControl = this.control; if (oControl.selected) { return null; } if (!oControl.hit(nX, nY)) { return null; } return {cursorType: "pointer", objectId: oControl.GetId()}; }; CButtonController.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { const oControl = this.control; if (oControl.selected) { return false; } if (e.button !== 0) { return false; } if (e.CtrlKey) { return false; } const oControlPr = this.getControlPr(); if (oControlPr.getMacroId() === null) { return false; } return this.button.onMouseDown(e, nX, nY, nPageIndex, oDrawingController); }; CButtonController.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oController) { return this.button.onMouseUp(e, nX, nY, nPageIndex, oController); }; CButtonController.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oController) { return this.button.onMouseMove(e, nX, nY, nPageIndex, oController); }; CButtonController.prototype.runMacros = function () { const oControlPr = this.getControlPr(); const sMacro = oControlPr.getJSAMacroId(); if (sMacro === null) { this.onMacroError(oControlPr.getMacroId()); return; } const oApi = Asc.editor; if (oApi) { const sMacroName = oApi.macros && oApi.macros.getNameByGuid(sMacro); if (!sMacroName) { this.onMacroError(sMacro); } oApi.asc_runMacros(sMacro); } }; CButtonController.prototype.initTextProperties = function () { const oControl = this.control; const oBodyPr = new AscFormat.CBodyPr(); oBodyPr.setInsets(BUTTON_BODYPR_INSETS, BUTTON_BODYPR_INSETS, BUTTON_BODYPR_INSETS, BUTTON_BODYPR_INSETS); oBodyPr.setAnchor(getVerticalAlignFromControlPr(oControl.formControlPr.textVAlign)); oBodyPr.vertOverflow = AscFormat.nVOTClip; oBodyPr.wrap = AscFormat.nTWTSquare; oBodyPr.upright = true; const oTextBody = oControl.txBody; oTextBody.setBodyPr(oBodyPr); const oContent = oTextBody.content; if (oContent) { oContent.SetApplyToAll(true); oContent.SetParagraphAlign(getHorizontalAlignFromControl(oControl.formControlPr.textHAlign)); oContent.SetApplyToAll(false); } return oBodyPr; }; CButtonController.prototype.canEditText = function () { return AscFormat.CShape.prototype.canEditText.call(this.control); }; const SPINBUTTON_RECTANGLE_SIDE_SCALE = 0.25; const SPINBUTTON_DIRECTION_UP = 1; const SPINBUTTON_DIRECTION_DOWN = 2; const SPINBUTTON_DIRECTION_RIGHT = 3; const SPINBUTTON_DIRECTION_LEFT = 4; function CSpinButton(oController, nDirection) { CButtonBase.call(this, oController); this.direction = nDirection || SPINBUTTON_DIRECTION_UP; } AscFormat.InitClassWithoutType(CSpinButton, CButtonBase); CSpinButton.prototype.draw = function (graphics) { CButtonBase.prototype.draw.call(this, graphics); const arrRectColor = [51, 51, 51, 255]; graphics.SaveGrState(); graphics.transform3(this.transform); const nRectCX = this.extX / 2; const nRectCY = this.extY / 2; const nRectHeight = (SPINBUTTON_RECTANGLE_SIDE_SCALE) * Math.min(this.extX, this.extY); const nHalfRectHeight = nRectHeight / 2; graphics.p_width(nRectHeight * 200); graphics.p_color.apply(graphics, arrRectColor); graphics._s(); switch (this.direction) { case SPINBUTTON_DIRECTION_UP: { graphics._m(nRectCX - nRectHeight, nRectCY + nHalfRectHeight); graphics._l(nRectCX, nRectCY - nHalfRectHeight); graphics._l(nRectCX + nRectHeight, nRectCY + nHalfRectHeight); break; } case SPINBUTTON_DIRECTION_DOWN: { graphics._m(nRectCX - nRectHeight, nRectCY - nHalfRectHeight); graphics._l(nRectCX, nRectCY + nHalfRectHeight); graphics._l(nRectCX + nRectHeight, nRectCY - nHalfRectHeight); break; } case SPINBUTTON_DIRECTION_LEFT: { graphics._m(nRectCX + nHalfRectHeight, nRectCY - nRectHeight); graphics._l(nRectCX - nHalfRectHeight, nRectCY); graphics._l(nRectCX + nHalfRectHeight, nRectCY + nRectHeight); break; } case SPINBUTTON_DIRECTION_RIGHT: { graphics._m(nRectCX - nHalfRectHeight, nRectCY - nRectHeight); graphics._l(nRectCX + nHalfRectHeight, nRectCY); graphics._l(nRectCX - nHalfRectHeight, nRectCY + nRectHeight); break; } default: { break; } } graphics.ds(); graphics._z(); // graphics.df(); graphics.RestoreGrState(); graphics._e(); }; function CSpinController(oControl) { CControlControllerBase.call(this, oControl); this.upButton = new CSpinButton(this, SPINBUTTON_DIRECTION_UP); this.downButton = new CSpinButton(this, SPINBUTTON_DIRECTION_DOWN); this.stepManager = new CStepManager(); this.initButtonEventHandlers(); }; AscFormat.InitClassWithoutType(CSpinController, CControlControllerBase); CSpinController.prototype.startChangeValue = function (fCallback) { Asc.editor.startGroupActions(); this.stepManager.start(fCallback); }; CSpinController.prototype.endChangeValue = function (oDrawingController) { const oFormControlPr = this.getFormControlPr(); const nCurrentValue = oFormControlPr.val; Asc.editor.cancelGroupActions(); this.stepManager.end(); if (nCurrentValue !== null) { const oThis = this; oDrawingController.checkObjectsAndCallback(function () { oFormControlPr.setVal(nCurrentValue); const oRef = oThis.getParsedFmlaLink(); if (oRef) { const oCellValue = new AscCommonExcel.CCellValue(); oCellValue.number = nCurrentValue; oThis.setRangeValue(oRef, oCellValue); } }, [], undefined, AscDFH.historydescription_Spreadsheet_IncrementControl, [], true); } }; CSpinController.prototype.initButtonEventHandlers = function () { const oController = this; this.downButton._onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { oController.startChangeValue(oController.decrement.bind(oController, oDrawingController)); }; this.upButton._onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { oController.startChangeValue(oController.increment.bind(oController, oDrawingController)); }; this.downButton._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { oController.endChangeValue(oDrawingController); return true; }; this.upButton._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { oController.endChangeValue(oDrawingController); return true; }; }; CSpinController.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { graphics.SaveGrState(); transform = transform || this.control.transform; graphics.transform3(transform); const endRoundControl = startRoundControl(graphics, 0, 0, this.control.extX, this.control.extY, 2, getFlatPenColor()); this.downButton.draw(graphics); this.upButton.draw(graphics); endRoundControl(); graphics.RestoreGrState(); }; CSpinController.prototype.getCursorInfo = function (e, nX, nY) { const oControl = this.control; if (!oControl.hit(nX, nY)) { return null; } return {cursorType: "pointer", objectId: oControl.GetId()}; }; CSpinController.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { if (e.button !== 0) { return false; } if (e.CtrlKey) { return false; } if (this.upButton.onMouseDown(e, nX, nY, nPageIndex, oDrawingController)) { return true; } if (this.downButton.onMouseDown(e, nX, nY, nPageIndex, oDrawingController)) { return true; } return false; }; CSpinController.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { this.upButton.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); this.downButton.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); }; CSpinController.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { let bRet = 0; bRet |= this.upButton.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); bRet |= this.downButton.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); return !!bRet; }; CSpinController.prototype.initTextProperties = function () {}; CSpinController.prototype.applySpecialPasteProps = function (oPastedWb) {}; CSpinController.prototype.hit = function (nX, nY) { return this.upButton.hit(nX, nY) || this.downButton.hit(nX, nY); }; CSpinController.prototype.increment = function (oDrawingController) { this.doAction(oDrawingController, true); }; CSpinController.prototype.decrement = function (oDrawingController) { this.doAction(oDrawingController, false); }; CSpinController.prototype.doAction = function (oDrawingController, isIncrement) { const oRef = this.getParsedFmlaLink(); const oFormControlPr = this.getFormControlPr(); const nIncValue = AscFormat.isRealNumber(oFormControlPr.inc) ? oFormControlPr.inc : 1; const nMaxValue = oFormControlPr.max || 0; const nMinValue = oFormControlPr.min || 0; let nCurrentValue; if (oRef) { let nRefValue = 0; oRef.worksheet._getCellNoEmpty(oRef.bbox.r1, oRef.bbox.c1, function (oCell) { if (oCell && !oCell.isNullText()) { nRefValue = oCell.number; } }); if (nRefValue === null) { nRefValue = oFormControlPr.val; } nCurrentValue = nRefValue || 0; } else { nCurrentValue = oFormControlPr.val || 0; } const nNewValue = Math.min(Math.max(isIncrement ? nCurrentValue + nIncValue : nCurrentValue - nIncValue, nMinValue), nMaxValue); oFormControlPr.setVal(nNewValue); if (oRef) { const oCellValue = new AscCommonExcel.CCellValue(); oCellValue.number = nNewValue; this.setRangeValue(oRef, oCellValue); } }; CSpinController.prototype.recalculateTransform = function () { const oControl = this.control; const oControlMatrix = oControl.transform; const nHalfHeight = oControl.extY / 2; this.upButton.x = oControl.x; this.upButton.y = oControl.y; this.upButton.extX = oControl.extX; this.upButton.extY = nHalfHeight; this.upButton.transform = oControlMatrix.CreateDublicate(); this.upButton.invertTransform = global_MatrixTransformer.Invert(this.upButton.transform); const oDownMatrix = oControlMatrix.CreateDublicate(); const nUpX = oDownMatrix.TransformPointX(0, 0); const nUpY = oDownMatrix.TransformPointY(0, 0); const nDownX = oDownMatrix.TransformPointX(0, nHalfHeight); const nDownY = oDownMatrix.TransformPointY(0, nHalfHeight); oDownMatrix.Translate(nDownX - nUpX, nDownY - nUpY); this.downButton.transform = oDownMatrix; this.downButton.invertTransform = global_MatrixTransformer.Invert(this.downButton.transform); this.downButton.x = oControl.x; this.downButton.y = oControl.y + nHalfHeight; this.downButton.extX = oControl.extX; this.downButton.extY = nHalfHeight; }; const SCROLLBAR_THUMB_MIN_SIZE_RATIO = 0.2; function CTrackArea(oController) { CButtonBase.call(this, oController); this.trackAreaHoldDirection = 0; this.currentMousePostion = { x: 0, y: 0 }; } AscFormat.InitClassWithoutType(CTrackArea, CButtonBase); CTrackArea.prototype.getFlatFillColor = function () { return [244, 244, 244, 255]; } CTrackArea.prototype.draw = function (graphics) { const bOldHold = this.isHold; this.isHold = false; CButtonBase.prototype.draw.call(this, graphics); this.isHold = bOldHold; } function CScrollController(oControl) { CControlControllerBase.call(this, oControl); this.scroll = new CScrollContainer(this); this.initButtonEventHandlers(); } AscFormat.InitClassWithoutType(CScrollController, CControlControllerBase); CScrollController.prototype.startGroupPoints = function () { Asc.editor.startGroupActions(); }; CScrollController.prototype.endGroupPoints = function (oDrawingController) { const nCurrentValue = this.scroll.getCurrentValue(); Asc.editor.cancelGroupActions(); this.scroll.setValue(nCurrentValue, oDrawingController); }; CScrollController.prototype.initButtonEventHandlers = function () { const oController = this; this.scroll.getMinValue = function () { const oFormControlPr = oController.getFormControlPr(); return oFormControlPr.min || 0; }; this.scroll.getMaxValue = function () { const oFormControlPr = oController.getFormControlPr(); return oFormControlPr.max || 0; }; this.scroll.getCurrentValue = function () { const oFormControlPr = oController.getFormControlPr(); const oRef = oController.getParsedFmlaLink(); let nCurrentValue; if (oRef) { let nRefValue = 0; oRef.worksheet._getCellNoEmpty(oRef.bbox.r1, oRef.bbox.c1, function (oCell) { if (oCell && !oCell.isNullText()) { nRefValue = oCell.number; } }); if (nRefValue === null) { nRefValue = oFormControlPr.val; } nCurrentValue = nRefValue || 0; } else { nCurrentValue = oFormControlPr.val || 0; } return nCurrentValue; }; this.scroll._setValue = function (newValue, oDrawingController) { const oThis = this; oDrawingController.checkObjectsAndCallback(function () { const nRoundedValue = Math.round(newValue); const oFormControlPr = oController.getFormControlPr(); oFormControlPr.setVal(nRoundedValue); const oRef = oController.getParsedFmlaLink(); if (oRef) { const oCellValue = new AscCommonExcel.CCellValue(); oCellValue.number = nRoundedValue; oController.setRangeValue(oRef, oCellValue); } oThis.recalculateThumbTransform(oThis.getMinValue(), oThis.getMaxValue(), nRoundedValue); }, [], undefined, AscDFH.historydescription_Spreadsheet_IncrementControl, [], true); }; this.scroll.getPageValue = function () { const oFormControlPr = oController.getFormControlPr(); const nPage = oFormControlPr.getPage(); return AscFormat.isRealNumber(nPage) ? nPage : 1; }; this.scroll.getIncrementValue = function () { const oFormControlPr = oController.getFormControlPr(); const nInc = oFormControlPr.getInc(); return AscFormat.isRealNumber(nInc) ? nInc : 1; }; this.scroll.onStartChangeValues = function () { oController.startGroupPoints(); }; this.scroll.onEndChangeValues = function (oDrawingController) { oController.endGroupPoints(oDrawingController); }; }; CScrollController.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { graphics.SaveGrState(); const oControl = this.control; transform = transform || oControl.transform; graphics.transform3(transform); const endRoundControl = startRoundControl(graphics, 0, 0, oControl.extX, oControl.extY, 2, getFlatPenColor()); this.scroll.draw(graphics); endRoundControl(); graphics.RestoreGrState(); }; CScrollController.prototype.getCursorInfo = function (e, nX, nY) { return this.scroll.getCursorInfo(nX, nY); }; CScrollController.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { return this.scroll.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); }; CScrollController.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { const oControl = this.control; if (e.button !== 0) { return false; } if (e.CtrlKey) { return false; } return this.scroll.onMouseDown(e, nX, nY, nPageIndex, oDrawingController); }; CScrollController.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { return this.scroll.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); }; CScrollController.prototype.recalculateTransform = function () { const oControl = this.control; this.scroll.x = oControl.x; this.scroll.y = oControl.y; this.scroll.extX = oControl.extX; this.scroll.extY = oControl.extY; this.scroll.transform = oControl.transform.CreateDublicate(); this.scroll.invertTransform = oControl.invertTransform.CreateDublicate(); this.scroll.recalculateTransform(); }; function CThumbButton(oController) { CButtonBase.call(this, oController); } AscFormat.InitClassWithoutType(CThumbButton, CButtonBase); CThumbButton.prototype.getFlatFillColor = function () { if (this.isHold || this.isHover) { return [51, 51, 51, 255]; } return [148, 148, 148, 255]; }; CThumbButton.prototype.draw = function (graphics) { graphics.SaveGrState(); graphics.transform3(this.transform); const arrPenColor = getFlatPenColor(); graphics.p_color.apply(graphics, arrPenColor); graphics.p_width(0); graphics.b_color1.apply(graphics, this.getFlatFillColor()); drawRoundedRect(graphics, 0, 0, this.extX, this.extY, 4); graphics.df(); graphics.ds(); graphics.RestoreGrState(); }; function CScrollContainer(oController) { this.controller = oController; this.upButton = new CSpinButton(oController); this.downButton = new CSpinButton(oController); this.thumb = new CThumbButton(oController); this.trackArea = new CTrackArea(oController); this.stepManager = new CStepManager(); this.x = null; this.y = null; this.extX = null; this.extY = null; this.transform = new AscCommon.CMatrix(); this.invertTransform = new AscCommon.CMatrix(); this.isChangeValues = false; this.initButtonEventHandlers(); } CScrollContainer.prototype.getMinValue = function () { }; CScrollContainer.prototype.getMaxValue = function () { }; CScrollContainer.prototype.getCurrentValue = function () { }; CScrollContainer.prototype.getIncrementValue = function () { return 1; } CScrollContainer.prototype.getPageValue = function () { return 1; } CScrollContainer.prototype._setValue = function () { }; CScrollContainer.prototype.onEndChangeValues = function () { }; CScrollContainer.prototype.onStartChangeValues = function () { }; CScrollContainer.prototype.isCanScroll = function () { return (this.getMaxValue() - this.getMinValue()) > 0; }; CScrollContainer.prototype.setValue = function (nNewValue, oDrawingController) { this.startChangeValues(); this._setValue(nNewValue, oDrawingController); }; CScrollContainer.prototype.isVertical = function () { return this.extY > this.extX; }; CScrollContainer.prototype.increment = function (oDrawingController) { this.doIncrement(oDrawingController, true); }; CScrollContainer.prototype.decrement = function (oDrawingController) { this.doIncrement(oDrawingController, false); }; CScrollContainer.prototype.doIncrement = function (oDrawingController, bIsIncrement) { const nIncValue = this.getIncrementValue(); const nMinValue = this.getMinValue(); const nMaxValue = this.getMaxValue(); const nCurrentValue = this.getCurrentValue(); const nNewValue = bIsIncrement ? Math.min(nMaxValue, nCurrentValue + nIncValue) : Math.max(nMinValue, nCurrentValue - nIncValue); this.setValue(nNewValue, oDrawingController); }; CScrollContainer.prototype.endChangeValues = function (oDrawingController) { if (this.isChangeValues) { this.onEndChangeValues(oDrawingController); this.isChangeValues = false; } }; CScrollContainer.prototype.startChangeValues = function () { if (!this.isChangeValues) { this.isChangeValues = true; this.onStartChangeValues(); } }; CScrollContainer.prototype.initButtonEventHandlers = function () { const oThis = this; this.upButton._onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { oThis.stepManager.start(oThis.decrement.bind(oThis, oDrawingController)); }; this.upButton._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { oThis.endChangeValues(oDrawingController); oThis.stepManager.end(); return true; }; this.downButton._onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { oThis.stepManager.start(oThis.increment.bind(oThis, oDrawingController)); }; this.downButton._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { oThis.endChangeValues(oDrawingController); oThis.stepManager.end(); return true; }; this.thumb._onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { return true; }; this.thumb._onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { if (this.isHold) { const nTrackSize = oThis.getThumbTrackSpace(); const bIsVertical = oThis.isVertical(); let nRelPos; if (bIsVertical) { nRelPos = nY - (oThis.trackArea.y + oThis.getThumbTrackOffset()); } else { nRelPos = nX - (oThis.trackArea.x + oThis.getThumbTrackOffset()); } const nMin = oThis.getMinValue(); const nMax = oThis.getMaxValue(); const nRange = nMax - nMin; let nNewValue = (nRelPos / nTrackSize) * nRange; nNewValue = Math.max(nMin, Math.min(nMax, nNewValue)); oThis.setValue(nNewValue, oDrawingController); return true; } }; this.thumb._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { oThis.endChangeValues(oDrawingController); return true; }; this.trackArea.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { if (!this.hit(nX, nY)) { return false; } this.currentMousePostion.x = nX; this.currentMousePostion.y = nY; if (!oThis.initPerformTrackAreaStep()) { return false; } this.setIsHold(true); oThis.stepManager.start(oThis.performTrackAreaStep.bind(oThis, oDrawingController)); return true; }; this.trackArea._onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { this.trackAreaHoldDirection = 0; oThis.stepManager.end(); oThis.endChangeValues(oDrawingController); return true; }; this.trackArea._onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { if (this.isHold) { this.currentMousePostion.x = nX; this.currentMousePostion.y = nY; } return false; }; }; CScrollContainer.prototype.initPerformTrackAreaStep = function () { let nLocalPos, nThumbMin, nThumbMax; const bIsVertical = this.isVertical(); const oThumb = this.thumb; const oTrackArea = this.trackArea; const nX = oTrackArea.currentMousePostion.x; const nY = oTrackArea.currentMousePostion.y; if (bIsVertical) { nLocalPos = oTrackArea.invertTransform.TransformPointY(nX, nY); nThumbMin = oThumb.y - oTrackArea.y; nThumbMax = nThumbMin + oThumb.extY; } else { nLocalPos = oTrackArea.invertTransform.TransformPointX(nX, nY); nThumbMin = oThumb.x - oTrackArea.x; nThumbMax = nThumbMin + oThumb.extX; } if (nLocalPos >= nThumbMin && nLocalPos <= nThumbMax) { return false; } const nTempTrackAreaHold = (nLocalPos < nThumbMin) ? -1 : 1; if (oTrackArea.trackAreaHoldDirection === 0 || nTempTrackAreaHold === oTrackArea.trackAreaHoldDirection) { oTrackArea.trackAreaHoldDirection = nTempTrackAreaHold; return true; } return false; }; CScrollContainer.prototype.performTrackAreaStep = function (oDrawingController, bSkipUpdate) { if (this.initPerformTrackAreaStep()) { const nMinValue = this.getMinValue(); const nMaxValue = this.getMaxValue(); const nPageSize = this.getPageValue(); const nValue = this.getCurrentValue(); const nNewValue = this.trackArea.trackAreaHoldDirection === -1 ? nValue - nPageSize : nValue + nPageSize; this.setValue(Math.min(Math.max(nMinValue, nNewValue), nMaxValue), oDrawingController); if (!bSkipUpdate) { this.controller.checkNeedUpdate(); } return true; } else { this.stepManager.end(); } return false; }; CScrollContainer.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { if (!this.isCanScroll()) { return !this.selected && !e.CtrlKey && e.button === 0 && this.hit(nX, nY); } return this.upButton.onMouseDown(e, nX, nY, nPageIndex, oDrawingController) || this.downButton.onMouseDown(e, nX, nY, nPageIndex, oDrawingController) || this.thumb.onMouseDown(e, nX, nY, nPageIndex, oDrawingController) || this.trackArea.onMouseDown(e, nX, nY, nPageIndex, oDrawingController); }; CScrollContainer.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { if (!this.isCanScroll()) { return; } this.trackArea.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); this.upButton.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); this.downButton.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); this.thumb.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); }; CScrollContainer.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { if (!this.isCanScroll()) { return; } let bButtonRet = 0; bButtonRet |= this.upButton.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); bButtonRet |= this.downButton.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); bButtonRet |= this.thumb.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); bButtonRet |= this.trackArea.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); return bButtonRet; }; CScrollContainer.prototype.recalculateTransform = function () { if (!this.isCanScroll()) { return; } const oControlMatrix = this.transform; const nScrollWidth = this.extX; const nScrollHeight = this.extY; const bIsVertical = this.isVertical(); const nMinValue = this.getMinValue(); const nMaxValue = this.getMaxValue(); const nCurrentValue = this.getCurrentValue(); if (bIsVertical) { const nButtonWidth = this.extX; const nButtonHeight = Math.min(this.extY / 2, nButtonWidth); const nTrackHeight = nScrollHeight - (nButtonHeight * 2); this.upButton.x = this.x; this.upButton.y = this.y; this.upButton.extX = nButtonWidth; this.upButton.extY = nButtonHeight; this.upButton.transform = oControlMatrix.CreateDublicate(); this.upButton.invertTransform = global_MatrixTransformer.Invert(this.upButton.transform); this.upButton.direction = SPINBUTTON_DIRECTION_UP; const oDownButtonMatrix = oControlMatrix.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oDownButtonMatrix, 0, nScrollHeight - nButtonHeight); this.downButton.transform = oDownButtonMatrix; this.downButton.invertTransform = global_MatrixTransformer.Invert(this.downButton.transform); this.downButton.x = this.x; this.downButton.y = this.y + nScrollHeight - nButtonHeight; this.downButton.extX = nButtonWidth; this.downButton.extY = nButtonHeight; this.downButton.direction = SPINBUTTON_DIRECTION_DOWN; this.trackArea.x = this.x; this.trackArea.y = this.y + nButtonHeight; this.trackArea.extX = nScrollWidth; this.trackArea.extY = nTrackHeight; const oTrackMatrix = oControlMatrix.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oTrackMatrix, 0, nButtonHeight); this.trackArea.transform = oTrackMatrix; this.trackArea.invertTransform = global_MatrixTransformer.Invert(this.trackArea.transform); } else { const nButtonHeight = this.extY; const nButtonWidth = Math.min(nButtonHeight, this.extX / 2); const nTrackWidth = nScrollWidth - (nButtonWidth * 2); this.upButton.x = this.x; this.upButton.y = this.y; this.upButton.extX = nButtonWidth; this.upButton.extY = nButtonHeight; this.upButton.transform = oControlMatrix.CreateDublicate(); this.upButton.invertTransform = global_MatrixTransformer.Invert(this.upButton.transform); this.upButton.direction = SPINBUTTON_DIRECTION_LEFT; const oDownButtonMatrix = oControlMatrix.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oDownButtonMatrix, nScrollWidth - nButtonWidth, 0); this.downButton.transform = oDownButtonMatrix; this.downButton.invertTransform = global_MatrixTransformer.Invert(this.downButton.transform); this.downButton.x = this.x + nScrollWidth - nButtonWidth; this.downButton.y = this.y; this.downButton.extX = nButtonWidth; this.downButton.extY = nButtonHeight; this.downButton.direction = SPINBUTTON_DIRECTION_RIGHT; this.trackArea.x = this.x + nButtonWidth; this.trackArea.y = this.y; this.trackArea.extX = nTrackWidth; this.trackArea.extY = nScrollHeight; const oTrackMatrix = oControlMatrix.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oTrackMatrix, nButtonWidth, 0); this.trackArea.transform = oTrackMatrix; this.trackArea.invertTransform = global_MatrixTransformer.Invert(this.trackArea.transform); } this.recalculateThumbTransform(nMinValue, nMaxValue, nCurrentValue); }; const ThumbTrackSpaceOffset = 2; CScrollContainer.prototype.getThumbTrackSpace = function () { if (this.isVertical()) { return this.trackArea.extY - ThumbTrackSpaceOffset - this.thumb.extY; } return this.trackArea.extX - ThumbTrackSpaceOffset - this.thumb.extX; }; CScrollContainer.prototype.getThumbTrackOffset = function () { return ThumbTrackSpaceOffset / 2; }; CScrollContainer.prototype.recalculateThumbTransform = function (nMinValue, nMaxValue, nCurrentValue) { const bIsVertical = this.isVertical(); const nValueRange = nMaxValue - nMinValue; const nThumbPositionRatio = nValueRange > 0 ? (nCurrentValue - nMinValue) / nValueRange : 0; const nButtonSide = this.upButton.extY; if (bIsVertical) { const nScrollWidth = this.extX; const nTrackHeight = this.trackArea.extY; const nThumbMinHeight = nScrollWidth * SCROLLBAR_THUMB_MIN_SIZE_RATIO; const nThumbHeight = Math.max(nThumbMinHeight, nTrackHeight / (nValueRange + 1)); this.thumb.extY = nThumbHeight; const nThumbTrackSpace = this.getThumbTrackSpace(); const nThumbY = nThumbPositionRatio * nThumbTrackSpace + this.getThumbTrackOffset(); const nThumbWidth = nScrollWidth * 0.8; const nXOffset = (nScrollWidth - nThumbWidth) / 2; this.thumb.x = this.x + nXOffset; this.thumb.y = this.y + nButtonSide + nThumbY; this.thumb.extX = nThumbWidth; const oThumbMatrix = this.transform.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oThumbMatrix, nXOffset, nButtonSide + nThumbY); this.thumb.transform = oThumbMatrix; this.thumb.invertTransform = global_MatrixTransformer.Invert(this.thumb.transform); } else { const nScrollHeight = this.extY; const nTrackWidth = this.trackArea.extX; const nThumbMinWidth = nScrollHeight * SCROLLBAR_THUMB_MIN_SIZE_RATIO; const nThumbWidth = Math.max(nThumbMinWidth, nTrackWidth / (nValueRange + 1)); this.thumb.extX = nThumbWidth; const nThumbTrackSpace = this.getThumbTrackSpace(); const nThumbX = nThumbPositionRatio * nThumbTrackSpace + this.getThumbTrackOffset(); const nThumbHeight = nScrollHeight * 0.8; const nYOffset = (nScrollHeight - nThumbHeight) / 2; this.thumb.x = this.x + nButtonSide + nThumbX; this.thumb.y = this.y + nYOffset; this.thumb.extY = nThumbHeight; const oThumbMatrix = this.transform.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oThumbMatrix, nButtonSide + nThumbX, nYOffset); this.thumb.transform = oThumbMatrix; this.thumb.invertTransform = global_MatrixTransformer.Invert(this.thumb.transform); } }; CScrollContainer.prototype.draw = function (graphics) { if (this.isCanScroll()) { this.trackArea.draw(graphics); this.thumb.draw(graphics); this.downButton.draw(graphics); this.upButton.draw(graphics); } else { graphics.SaveGrState(); graphics.transform3(this.transform); graphics.b_color1(244,244,244, 255); graphics._s(); graphics._m(0, 0); graphics._l(this.extX, 0); graphics._l(this.extX, this.extY); graphics._l(0, this.extY); graphics._z(0, this.extY); graphics.df(); graphics._e(); graphics.RestoreGrState(); } }; CScrollContainer.prototype.hit = function (nX, nY) { return AscFormat.HitToRect(nX, nY, this.invertTransform, 0, 0, this.extX, this.extY); } CScrollContainer.prototype.getCursorInfo = function (nX, nY) { const oControl = this.controller.control; if (this.thumb.hit(nX, nY) || this.downButton.hit(nX, nY) || this.upButton.hit(nX, nY)) { return {cursorType: "pointer", objectId: oControl.GetId()}; } else if (this.trackArea.hit(nX, nY)) { return {cursorType: "default", objectId: oControl.GetId()}; } return null; }; const LISTBOX_ITEM_HEIGHT = 2; const LISTBOX_SCROLL_WIDTH = 4; const LISTBOX_MAX_ITEM_HEIGHT = 4; function getListBoxItemTextPr() { const oTextPr = new AscCommonWord.CTextPr(); oTextPr.Set_FromObject({ FontFamily: { Name: "Arial", Index: -1, }, FontSize: 8, Color: {r: 0, g: 0, b: 0, a: 255}, Bold: false }); oTextPr.RFonts.SetAll("Arial"); return oTextPr; } let FONT_HEIGHT_LISTBOX_ITEM = null; function getListBoxItemFontHeight() { if (FONT_HEIGHT_LISTBOX_ITEM === null) { const oTextPr = getListBoxItemTextPr(); AscCommon.g_oTextMeasurer.SetTextPr(oTextPr); AscCommon.g_oTextMeasurer.SetFontSlot(fontslot_ASCII); FONT_HEIGHT_LISTBOX_ITEM = AscCommon.g_oTextMeasurer.GetHeight(); } return FONT_HEIGHT_LISTBOX_ITEM; } const LISTBOX_TEXT_PADDING = 1; function CListBoxItem(oListBox, oParagraph) { this.listBox = oListBox; this.text = oParagraph || null; this.x = 0; this.y = 0; this.extX = 0; this.extY = LISTBOX_ITEM_HEIGHT; this.textY = 0; this.isSelected = false; this.isHovered = false; } CListBoxItem.prototype.setPosition = function (nX, nY, nWidth, nHeight) { this.x = nX; this.y = nY; this.extX = nWidth; this.extY = nHeight || LISTBOX_ITEM_HEIGHT; }; CListBoxItem.prototype.setSelected = function (bSelected) { this.isSelected = bSelected; }; CListBoxItem.prototype.setHovered = function (bHovered) { this.isHovered = bHovered; }; CListBoxItem.prototype.getItemBackgroundColor = function () { if (this.isSelected) { return [225, 225, 225, 255]; } if (this.isHovered) { return [234, 234, 234, 255]; } return [255, 255, 255, 255]; }; CListBoxItem.prototype.getItemTextColor = function () { return [51, 51, 51, 255]; }; CListBoxItem.prototype.draw = function (graphics, oListBoxTransform) { graphics.SaveGrState(); graphics.b_color1.apply(graphics, this.getItemBackgroundColor()); graphics.SetIntegerGrid(true); graphics.TableRect(this.x, this.y, this.extX, this.extY); if (this.text) { const nTextX = this.x + LISTBOX_TEXT_PADDING; const oTransform = oListBoxTransform.CreateDublicate(); oTransform.Translate(nTextX, this.textY); graphics.transform3(oTransform); drawParagraph(this.text, graphics); } graphics.RestoreGrState(); }; CListBoxItem.prototype.hit = function (nX, nY) { return nX >= this.x && nX <= this.x + this.extX && nY >= this.y && nY <= this.y + this.extY; }; CListBoxItem.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController, nItemIndex) { if (this.hit(nX, nY)) { this.listBox.handleItemClick(nItemIndex, e.CtrlKey, oDrawingController); return true; } return false; }; CListBoxItem.prototype.recalculateTextPosition = function () { this.textY = this.y + (this.extY - getListBoxItemFontHeight()) / 2; }; function CListBox(oController) { this.controller = oController; this.selectedIndices = {}; this.scrollPosition = 0; this.scrollContainer = new CScrollContainer(oController); this.listItems = []; this.visibleItemsCount = 0; this.x = 0; this.y = 0; this.extX = 0; this.extY = 0; this.transform = new AscCommon.CMatrix(); this.invertTransform = new AscCommon.CMatrix(); this.stringCacheManager = new CStringCacheManager(); this.initScrollContainer(); } CListBox.prototype.isMultiSelection = function () { return false; }; CListBox.prototype.isExtendedSelection = function () { return false; }; CListBox.prototype.isShowScroll = function () { return true; }; CListBox.prototype.onChangeSelection = function (oDrawingController) { }; CListBox.prototype.initScrollContainer = function () { const oThis = this; this.scrollContainer.getMinValue = function () { return 0; }; this.scrollContainer.getMaxValue = function () { return Math.max(0, oThis.listItems.length - oThis.visibleItemsCount); }; this.scrollContainer.getCurrentValue = function () { return oThis.scrollPosition; }; this.scrollContainer.getIncrementValue = function () { return 1; }; this.scrollContainer.getPageValue = function () { return Math.max(1, Math.floor(oThis.visibleItemsCount / 2)); }; this.scrollContainer._setValue = function (newValue, oDrawingController) { oThis.scrollPosition = Math.round(newValue); oThis.recalculateTransform(); oThis.controller.checkNeedUpdate(); }; this.scrollContainer.isVertical = function () { return true; } }; CListBox.prototype.updateListItems = function () { this.listItems = []; const oStringCacheManager = this.stringCacheManager; oStringCacheManager.startCheckDeleteParagraphs(); const oFormControlPr = this.controller.getFormControlPr(); if (oFormControlPr.itemLst.length) { for (let i = 0; i < oFormControlPr.itemLst.length; i += 1) { this.listItems.push(new CListBoxItem(this, oStringCacheManager.getParagraphWithText(oFormControlPr.itemLst[i]))); } } else { const oRange = this.controller.getParsedFmlaRange(); if (oRange) { const oThis = this; oRange._foreach(function (oCell) { const sItem = oCell && !oCell.isNullText() ? oCell.getValue() : ""; oThis.listItems.push(new CListBoxItem(oThis, oStringCacheManager.getParagraphWithText(sItem))); }); } } oStringCacheManager.endCheckDeleteParagraphs(); }; CListBox.prototype.recalculateItemPositions = function () { if (this.listItems.length === 0) { return; } const nItemCount = this.extY / LISTBOX_MAX_ITEM_HEIGHT; const nMaxItemCount = Math.ceil(nItemCount); let nCalcItemHeight = this.extY / nMaxItemCount; const nListWidth = this.extX; if (nCalcItemHeight < LISTBOX_ITEM_HEIGHT) { nCalcItemHeight = LISTBOX_ITEM_HEIGHT; this.visibleItemsCount = Math.ceil(this.extY / LISTBOX_ITEM_HEIGHT); } else { this.visibleItemsCount = nMaxItemCount; } for (let i = 0; i < this.listItems.length; i += 1) { this.listItems[i].setPosition(0, 0, nListWidth, nCalcItemHeight); } this.recalculateVisibleItemPositions(); }; CListBox.prototype.recalculateVisibleItemPositions = function () { let nIndex = 0; this.checkVisibleItems(function (oItem) { oItem.y = oItem.extY * nIndex; oItem.recalculateTextPosition(); nIndex++; }); }; CListBox.prototype.resetSelectedIndices = function () { for (let sIndex in this.selectedIndices) { this.selectedIndices[sIndex].setSelected(false); } this.selectedIndices = {}; }; CListBox.prototype.addSelectedIndex = function (nIndex) { nIndex = Math.max(0, Math.min(nIndex, this.listItems.length - 1)); if (this.listItems[nIndex]) { this.selectedIndices[nIndex] = this.listItems[nIndex]; this.selectedIndices[nIndex].setSelected(true); return nIndex; } return null; }; CListBox.prototype.removeSelectedIndex = function (nIndex) { if (this.selectedIndices[nIndex]) { this.selectedIndices[nIndex].setSelected(false); delete this.selectedIndices[nIndex]; return nIndex; } return null; }; CListBox.prototype.handleItemClick = function (nItemIndex, bCtrlKey, oDrawingController) { if (this.isMultiSelection() || this.isExtendedSelection() && bCtrlKey) { if (this.selectedIndices[nItemIndex]) { this.removeSelectedIndex(nItemIndex); } else { this.addSelectedIndex(nItemIndex); } } else { this.resetSelectedIndices(); this.addSelectedIndex(nItemIndex); } this.onChangeSelection(oDrawingController); this.controller.checkNeedUpdate(); }; CListBox.prototype.recalculateTransform = function() { this.recalculateItemPositions(); this.recalculateScrollTransform(); }; CListBox.prototype.draw = function (graphics, transform) { const oTransform = transform || this.transform; graphics.SaveGrState(); graphics.transform3(oTransform); const endRoundControl = startRoundControl(graphics, 0, 0, this.extX, this.extY, 2, getFlatPenColor()); graphics.b_color1(255, 255, 255, 255); graphics.TableRect(0, 0, this.extX, this.extY); this.checkVisibleItems(function (oItem) { oItem.draw(graphics, oTransform); }); if (this.isShowScroll() && this.listItems.length > this.visibleItemsCount) { this.scrollContainer.draw(graphics); } endRoundControl(); graphics.RestoreGrState(); }; CListBox.prototype.recalculateScrollTransform = function () { const nScrollWidth = this.isShowScroll() ? LISTBOX_SCROLL_WIDTH : 0; const nListWidth = this.extX - nScrollWidth; this.scrollContainer.x = this.x + nListWidth; this.scrollContainer.y = this.y; this.scrollContainer.extX = nScrollWidth; this.scrollContainer.extY = this.extY; this.scrollContainer.transform = this.transform.CreateDublicate(); global_MatrixTransformer.TranslateAppend(this.scrollContainer.transform, nListWidth, 0); this.scrollContainer.invertTransform = global_MatrixTransformer.Invert(this.scrollContainer.transform); this.scrollContainer.recalculateTransform(); }; CListBox.prototype.checkVisibleItems = function (fCallback) { const nStartIndex = this.scrollPosition; const nEndIndex = Math.min(nStartIndex + this.visibleItemsCount + 1, this.listItems.length); for (let i = nStartIndex; i < nEndIndex; i++) { if (fCallback(this.listItems[i], i)) { return true; } } return false; } CListBox.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { if (!this.hit(nX, nY)) { return false; } if (e.CtrlKey && !this.isExtendedSelection()) { return false; } if (this.isShowScroll() && this.scrollContainer.onMouseDown(e, nX, nY, nPageIndex, oDrawingController)) { return true; } const nLocalX = this.invertTransform.TransformPointX(nX, nY); const nLocalY = this.invertTransform.TransformPointY(nX, nY); this.checkVisibleItems(function (oItem, nItemIndex) { return oItem.onMouseDown(e, nLocalX, nLocalY, nPageIndex, oDrawingController, nItemIndex); }); return true; }; CListBox.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { if (this.isShowScroll()) { return this.scrollContainer.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); } return false; }; CListBox.prototype.resetHoverEffect = function () { let bUpdate = false; this.checkVisibleItems(function (oItem) { if (oItem.isHovered) { bUpdate = true; oItem.setHovered(false); } return bUpdate; }); if (bUpdate) { this.controller.checkNeedUpdate(); } }; CListBox.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { if (this.isShowScroll()) { const bIsScrollMove = this.scrollContainer.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); const bIsHitScroll = this.scrollContainer.hit(nX, nY); if (bIsHitScroll || bIsScrollMove) { if (bIsHitScroll) { this.resetHoverEffect(); } return bIsScrollMove; } } const nLocalX = this.invertTransform.TransformPointX(nX, nY); const nLocalY = this.invertTransform.TransformPointY(nX, nY); let bUpdate = 0; let bHit = false; this.checkVisibleItems(function (oItem) { if (bHit) { bUpdate |= oItem.isHovered; oItem.setHovered(false); } else { bHit = oItem.hit(nLocalX, nLocalY); bUpdate |= oItem.isHovered !== bHit; oItem.setHovered(bHit); } }); if (bUpdate) { this.controller.checkNeedUpdate(); } return false; }; CListBox.prototype.hit = function (nX, nY) { return AscFormat.HitToRect(nX, nY, this.invertTransform, 0, 0, this.extX, this.extY); }; CListBox.prototype.getSingleSelectedIndex = function () { if (!this.isMultiSelection() && !this.isExtendedSelection()) { for (let sIndex in this.selectedIndices) { return parseInt(sIndex, 10); } } return -1; }; function CListBoxController(oControl) { CControlControllerBase.call(this, oControl); this.listBox = new CListBox(this); this.recalcInfo = { recalculateItems: true }; this.setupListBoxBehavior(); } AscFormat.InitClassWithoutType(CListBoxController, CControlControllerBase); CListBoxController.prototype.handleFmlaRange = function (aRanges) { return this.handleRef(aRanges, this.getParsedFmlaRange(), this.recalculateItems.bind(this)); }; CListBoxController.prototype.handleFmlaLink = function (aRanges) { if (this.listBox.isMultiSelection() || this.listBox.isExtendedSelection()) { return false; } return this.handleRef(aRanges, this.getParsedFmlaLink(), this.updateSelectedIndices.bind(this)); }; CListBoxController.prototype.recalculate = function() { if (this.recalcInfo.recalculateItems) { this.recalcInfo.recalculateItems = false; this.recalculateItems(); } }; CListBoxController.prototype.recalculateItems = function() { this.updateListItems(); this.updateSelectedIndices(); this.listBox.recalculateTransform(); }; CListBoxController.prototype.setupListBoxBehavior = function () { const oThis = this; const oFormControlPr = this.getFormControlPr(); this.listBox.isMultiSelection = function () { return oFormControlPr.selType === CFormControlPr_selType_multi; }; this.listBox.isExtendedSelection = function () { return oFormControlPr.selType === CFormControlPr_selType_extended; }; this.listBox.isShowScroll = function () { return true; }; this.listBox.onChangeSelection = function (oDrawingController) { oDrawingController.checkObjectsAndCallback(function () { oThis.updateSelectionInFormControl(); oThis.updateLinkedCell(); }, [], undefined, AscDFH.historydescription_Spreadsheet_SelectListBox, [], true); }; }; CListBoxController.prototype.updateListItems = function () { this.listBox.updateListItems(); }; CListBoxController.prototype.getFmlaLinkIndex = function () { const oParsedLink = this.getParsedFmlaLink(); if (oParsedLink) { let nIndex = null; oParsedLink._foreach(function (oCell) { if (oCell) { const nNumber = oCell.getNumberValue(); if (nNumber !== null) { nIndex = nNumber - 1; } } }); return nIndex; } return null; }; CListBoxController.prototype.updateSelectedIndices = function () { const oFormControlPr = this.getFormControlPr(); this.listBox.resetSelectedIndices(); if (oFormControlPr.selType === CFormControlPr_selType_multi) { if (oFormControlPr.multiSel) { const aIndices = oFormControlPr.multiSel.split(", "); for (let i = 0; i < aIndices.length; i++) { const nIndex = parseInt(aIndices[i], 10) - 1; if (!isNaN(nIndex) && nIndex >= 0) { this.listBox.addSelectedIndex(nIndex); } } } } else if (!this.listBox.isMultiSelection() && !this.listBox.isExtendedSelection()) { const nFmlaLinkIndex = this.getFmlaLinkIndex(); if (nFmlaLinkIndex !== null) { if (nFmlaLinkIndex >= 0) { this.listBox.addSelectedIndex(nFmlaLinkIndex); } } else if (typeof oFormControlPr.sel === "number" && oFormControlPr.sel > 0) { const nSelectedIndex = oFormControlPr.sel - 1; if (nSelectedIndex >= 0) { this.listBox.addSelectedIndex(nSelectedIndex); } } } }; CListBoxController.prototype.updateSelectionInFormControl = function () { const oFormControlPr = this.getFormControlPr(); const oListBox = this.listBox; if (oFormControlPr.selType === CFormControlPr_selType_multi || oFormControlPr.selType === CFormControlPr_selType_extended) { const arrIndexes = []; for (let sIndex in oListBox.selectedIndices) { arrIndexes.push(parseInt(sIndex, 10) + 1); } oFormControlPr.setMultiSel(arrIndexes.join(", ")); } else { const nIndex = oListBox.getSingleSelectedIndex() + 1; oFormControlPr.setSel(nIndex ? nIndex : null); } }; CListBoxController.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { this.listBox.draw(graphics, transform); }; CListBoxController.prototype.recalculateTransform = function () { const oControl = this.control; this.listBox.x = oControl.x; this.listBox.y = oControl.y; this.listBox.extX = oControl.extX; this.listBox.extY = oControl.extY; this.listBox.transform = oControl.transform.CreateDublicate(); this.listBox.invertTransform = oControl.invertTransform.CreateDublicate(); this.listBox.recalculateTransform(); }; CListBoxController.prototype.getCursorInfo = function (e, nX, nY) { const oControl = this.control; if (!oControl.hit(nX, nY)) { return null; } return {cursorType: "pointer", objectId: oControl.GetId()}; }; CListBoxController.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { if (e.button !== 0) { return false; } return this.listBox.onMouseDown(e, nX, nY, nPageIndex, oDrawingController); }; CListBoxController.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { return this.listBox.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); }; CListBoxController.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { return this.listBox.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); }; CListBoxController.prototype.updateLinkedCell = function () { const oFormControlPr = this.getFormControlPr(); if (oFormControlPr.selType === CFormControlPr_selType_multi || oFormControlPr.selType === CFormControlPr_selType_extended) { return; } const nIndex = this.listBox.getSingleSelectedIndex() + 1; if (!nIndex) { return; } const oRef = this.getParsedFmlaLink(); if (oRef) { const oCellValue = new AscCommonExcel.CCellValue(); oCellValue.type = AscCommon.CellValueType.Number; oCellValue.number = nIndex; this.setRangeValue(oRef, oCellValue); } }; function CComboBoxController(oControl) { CControlControllerBase.call(this, oControl); this.listBox = new CListBox(this); this.dropButton = new CSpinButton(this, SPINBUTTON_DIRECTION_DOWN); this.isDropdownOpen = false; this.selectedText = null; this.recalcInfo = { recalculateItems: true }; this.setupComboBoxBehavior(); } AscFormat.InitClassWithoutType(CComboBoxController, CControlControllerBase); CComboBoxController.prototype.recalculate = function () { if (this.recalcInfo.recalculateItems) { this.recalcInfo.recalculateItems = false; this.recalculateItems(); } }; CComboBoxController.prototype.recalculateItems = function () { this.updateListItems(); this.updateSelectedIndex(); this.recalculateListBoxTransform(); }; CComboBoxController.prototype.recalculateTransform = function () { const oControl = this.control; this.dropButton.extY = oControl.extY; this.dropButton.extX = Math.min(oControl.extY, oControl.extX); const nXOffset = (oControl.extX - this.dropButton.extX); this.dropButton.x = oControl.x + nXOffset; this.dropButton.y = oControl.y; this.dropButton.transform = oControl.transform.CreateDublicate(); this.dropButton.transform.Translate(nXOffset, 0); this.dropButton.invertTransform = this.dropButton.transform.CreateDublicate().Invert(); this.recalculateListBoxTransform(); }; CComboBoxController.prototype.setupComboBoxBehavior = function () { const oThis = this; this.listBox.isMultiSelection = function () { return false; }; this.listBox.isExtendedSelection = function () { return false; }; this.listBox.isShowScroll = function () { const oFormControlPr = oThis.getFormControlPr(); const nDropLines = oFormControlPr.dropLines || 8; return oThis.listBox.listItems.length > nDropLines; }; this.listBox.onChangeSelection = function (oDrawingController) { const nIndex = this.getSingleSelectedIndex(); if (nIndex === -1) { return; } oDrawingController.checkObjectsAndCallback(function () { oThis.selectedText = oThis.listBox.listItems[nIndex].text; oThis.updateLinkedCell(); oThis.updateSelectionInFormControl(); oThis.closeDropdown(oDrawingController); }, [], undefined, AscDFH.historydescription_Spreadsheet_SelectListBox, [], true); }; }; CComboBoxController.prototype.updateSelectionInFormControl = function () { const oFormControlPr = this.getFormControlPr(); const nIndex = this.listBox.getSingleSelectedIndex() + 1; oFormControlPr.setSel(nIndex ? nIndex : null); }; CComboBoxController.prototype.updateListItems = function () { this.listBox.updateListItems(); }; CComboBoxController.prototype.updateSelectedIndex = function () { this.listBox.resetSelectedIndices(); const nFmlaLinkIndex = this.getFmlaLinkIndex(); if (nFmlaLinkIndex !== null) { if (nFmlaLinkIndex >= 0) { const nIndex = this.listBox.addSelectedIndex(nFmlaLinkIndex); if (nIndex !== null) { this.selectedText = this.listBox.listItems[nIndex].text; } } } else { const oFormControlPr = this.getFormControlPr(); const nSelectedIndex = AscFormat.isRealNumber(oFormControlPr.sel) ? oFormControlPr.sel - 1 : -1; if (nSelectedIndex >= 0 && this.listBox.listItems[nSelectedIndex]) { const nIndex = this.listBox.addSelectedIndex(nSelectedIndex); if (nIndex !== null) { this.selectedText = this.listBox.listItems[nIndex].text; } } else { this.selectedText = null; } } }; CComboBoxController.prototype.openDropdown = function (oDrawingController) { if (!this.isDropdownOpen) { this.isDropdownOpen = true; this.dropButton.setIsHold(true); oDrawingController.addDropDown(this); this.checkNeedUpdate(); } }; CComboBoxController.prototype.closeDropdown = function (oDrawingController) { if (this.isDropdownOpen) { this.dropButton.setIsHold(false); this.isDropdownOpen = false; oDrawingController.resetDropDowns(); this.checkNeedUpdate(); } }; CComboBoxController.prototype.drawDropDown = function(graphics) { if (this.isDropdownOpen) { this.listBox.draw(graphics); } }; CComboBoxController.prototype.draw = function (graphics, transform, transformText, pageIndex, opt) { const oControl = this.control; const oTransform = transform || oControl.transform; graphics.SaveGrState(); graphics.transform3(oTransform); const endRoundControl = startRoundControl(graphics, 0, 0, oControl.extX, oControl.extY, 2, getFlatPenColor()); const nLabelWidth = oControl.extX - this.dropButton.extX; graphics.b_color1(255, 255, 255, 255); graphics.p_width(0); graphics._s(); graphics._m(0, 0); graphics._l(nLabelWidth, 0); graphics._l(nLabelWidth, oControl.extY); graphics._l(0, oControl.extY); graphics._z(); graphics.df(); graphics._e(); if (this.selectedText) { const nTextX = LISTBOX_TEXT_PADDING; const nTextY = (this.control.extY - getListBoxItemFontHeight()) / 2; const transform = oTransform.CreateDublicate(); transform.Translate(nTextX, nTextY); graphics.transform3(transform); drawParagraph(this.selectedText, graphics); } this.dropButton.draw(graphics); endRoundControl(); graphics.RestoreGrState(); }; CComboBoxController.prototype.recalculateListBoxTransform = function () { const oControl = this.control; const oFormControlPr = this.getFormControlPr(); const nDropLines = oFormControlPr.dropLines || 8; const nItemHeight = LISTBOX_MAX_ITEM_HEIGHT; const nActualItems = this.listBox.listItems.length; const nVisibleItems = Math.min(nDropLines, nActualItems); const nDropdownHeight = nVisibleItems * nItemHeight; const nYOffset = 1 + oControl.extY; this.listBox.x = oControl.x; this.listBox.y = oControl.y + nYOffset; this.listBox.extX = oControl.extX; this.listBox.extY = nDropdownHeight; const oDropdownTransform = oControl.transform.CreateDublicate(); global_MatrixTransformer.TranslateAppend(oDropdownTransform, 0, nYOffset); this.listBox.transform = oDropdownTransform; this.listBox.invertTransform = global_MatrixTransformer.Invert(oDropdownTransform); this.listBox.recalculateTransform(); }; CComboBoxController.prototype.getCursorInfo = function (e, nX, nY) { const oControl = this.control; if (!this.hitInInnerArea(nX, nY)) { return null; } if (oControl.selected) { return {cursorType: "default", objectId: oControl.GetId()}; } return {cursorType: "pointer", objectId: oControl.GetId()}; }; CComboBoxController.prototype.onMouseDown = function (e, nX, nY, nPageIndex, oDrawingController) { const oControl = this.control; if (oControl.selected) { return true; } if (e.button !== 0) { this.closeDropdown(oDrawingController); return false; } if (this.isDropdownOpen) { if (!this.listBox.onMouseDown(e, nX, nY, nPageIndex, oDrawingController)) { this.closeDropdown(oDrawingController); } return oControl.hit(nX, nY); } else if (oControl.hit(nX, nY)) { this.openDropdown(oDrawingController); return true; } return false; }; CComboBoxController.prototype.onMouseUp = function (e, nX, nY, nPageIndex, oDrawingController) { if (this.isDropdownOpen) { return this.listBox.onMouseUp(e, nX, nY, nPageIndex, oDrawingController); } return false; }; CComboBoxController.prototype.onMouseMove = function (e, nX, nY, nPageIndex, oDrawingController) { let bRet = this.hitInComboBox(nX, nY); this.dropButton.setIsHover(bRet); if (this.isDropdownOpen) { bRet |= this.listBox.onMouseMove(e, nX, nY, nPageIndex, oDrawingController); } return !!bRet; }; CComboBoxController.prototype.updateLinkedCell = function () { const nIndex = this.listBox.getSingleSelectedIndex() + 1; if (!nIndex) { return; } const oRef = this.getParsedFmlaLink(); if (oRef) { const oCellValue = new AscCommonExcel.CCellValue(); oCellValue.type = AscCommon.CellValueType.Number; oCellValue.number = nIndex; this.setRangeValue(oRef, oCellValue); } }; CComboBoxController.prototype.onUpdate = function () { const oRect = new AscFormat.CGraphicBounds(this.control.x - 1, this.control.y - 1, this.control.x + this.control.extX + 1, this.listBox.y + this.listBox.extY + 1); return AscFormat.CShape.prototype.onUpdate.call(this.control, oRect); }; CComboBoxController.prototype.hitInInnerArea = function (nX, nY) { if (this.isDropdownOpen) { const oControl = this.control; return AscFormat.HitToRect(nX, nY, oControl.invertTransform, 0, 0, oControl.extX, oControl.extY + this.listBox.extY + 1); } else { return this.hitInComboBox(nX, nY); } }; CComboBoxController.prototype.hitInComboBox = function (nX, nY) { const oControl = this.control; return AscFormat.HitToRect(nX, nY, oControl.invertTransform, 0, 0, oControl.extX, oControl.extY); }; CComboBoxController.prototype.isNeedResetState = function () { return !this.isDropdownOpen; }; CComboBoxController.prototype.handleFmlaRange = function (aRanges) { return this.handleRef(aRanges, this.getParsedFmlaRange(), this.recalculateItems.bind(this)); }; CComboBoxController.prototype.handleFmlaLink = function (aRanges) { return this.handleRef(aRanges, this.getParsedFmlaLink(), this.updateSelectedIndex.bind(this)); }; CComboBoxController.prototype.getFmlaLinkIndex = function () { const oParsedLink = this.getParsedFmlaLink(); if (oParsedLink) { let nIndex = null; oParsedLink._foreach(function (oCell) { if (oCell) { const nNumber = oCell.getNumberValue(); if (nNumber !== null) { nIndex = nNumber - 1; } } }); return nIndex; } return null; }; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_AltText] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_AutoFill] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_AutoLine] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_AutoPict] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_Dde] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_DefaultSize] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_Disabled] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_Cf] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_LinkedCell] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_ListFillRange] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_RId] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_Locked] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_Macro] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_Print] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_RecalcAlways] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_ControlPr_UiObject] = AscDFH.CChangesDrawingsBool; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_AltText] = function (oClass, value) { this.altText = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_AutoFill] = function (oClass, value) { this.autoFill = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_AutoLine] = function (oClass, value) { this.autoLine = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_AutoPict] = function (oClass, value) { this.autoPict = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_Dde] = function (oClass, value) { this.dde = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_DefaultSize] = function (oClass, value) { this.defaultSize = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_Disabled] = function (oClass, value) { this.disabled = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_Cf] = function (oClass, value) { this.cf = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_LinkedCell] = function (oClass, value) { this.linkedCell = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_ListFillRange] = function (oClass, value) { this.listFillRange = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_RId] = function (oClass, value) { this.rId = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_Locked] = function (oClass, value) { this.locked = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_Macro] = function (oClass, value) { this.macro = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_Print] = function (oClass, value) { this.print = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_RecalcAlways] = function (oClass, value) { this.recalcAlways = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_ControlPr_UiObject] = function (oClass, value) { this.uiObject = value; }; function CControlPr() { AscFormat.CBaseFormatObject.call(this); this.altText = null; this.autoFill = null; this.autoLine = null; this.autoPict = null; this.dde = null; this.defaultSize = null; this.disabled = null; this.cf = null; this.linkedCell = null; this.listFillRange = null; this.rId = null; this.locked = null; this.macro = null; this.print = null; this.recalcAlways = null; this.uiObject = null; } AscFormat.InitClass(CControlPr, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_ControlPr); CControlPr.prototype.setAltText = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_ControlPr_AltText, this.altText, pr)); this.altText = pr; } CControlPr.prototype.getAltText = function () { return this.altText; }; CControlPr.prototype.setAutoFill = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_AutoFill, this.autoFill, pr)); this.autoFill = pr; } CControlPr.prototype.getAutoFill = function () { return this.autoFill; }; CControlPr.prototype.setAutoLine = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_AutoLine, this.autoLine, pr)); this.autoLine = pr; } CControlPr.prototype.getAutoLine = function () { return this.autoLine; }; CControlPr.prototype.setAutoPict = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_AutoPict, this.autoPict, pr)); this.autoPict = pr; } CControlPr.prototype.getAutoPict = function () { return this.autoPict; }; CControlPr.prototype.setDde = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_Dde, this.dde, pr)); this.dde = pr; } CControlPr.prototype.getDde = function () { return this.dde; }; CControlPr.prototype.setDefaultSize = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_DefaultSize, this.defaultSize, pr)); this.defaultSize = pr; } CControlPr.prototype.getDefaultSize = function () { return this.defaultSize; }; CControlPr.prototype.setDisabled = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_Disabled, this.disabled, pr)); this.disabled = pr; } CControlPr.prototype.getDisabled = function () { return this.disabled; }; CControlPr.prototype.setCf = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_ControlPr_Cf, this.cf, pr)); this.cf = pr; } CControlPr.prototype.getCf = function () { return this.cf; }; CControlPr.prototype.setLinkedCell = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_ControlPr_LinkedCell, this.linkedCell, pr)); this.linkedCell = pr; } CControlPr.prototype.getLinkedCell = function () { return this.linkedCell; }; CControlPr.prototype.setListFillRange = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_ControlPr_ListFillRange, this.listFillRange, pr)); this.listFillRange = pr; } CControlPr.prototype.getListFillRange = function () { return this.listFillRange; }; CControlPr.prototype.setRId = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_ControlPr_RId, this.rId, pr)); this.rId = pr; } CControlPr.prototype.getRId = function () { return this.rId; }; CControlPr.prototype.setLocked = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_Locked, this.locked, pr)); this.locked = pr; } CControlPr.prototype.getLocked = function () { return this.locked; }; CControlPr.prototype.setMacro = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_ControlPr_Macro, this.macro, pr)); this.macro = pr; } CControlPr.prototype.getMacro = function () { return this.macro; }; CControlPr.prototype.setPrint = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_Print, this.print, pr)); this.print = pr; } CControlPr.prototype.getPrint = function () { return this.print; }; CControlPr.prototype.setRecalcAlways = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_RecalcAlways, this.recalcAlways, pr)); this.recalcAlways = pr; } CControlPr.prototype.getRecalcAlways = function () { return this.recalcAlways; }; CControlPr.prototype.setUiObject = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_ControlPr_UiObject, this.uiObject, pr)); this.uiObject = pr; }; CControlPr.prototype.getUiObject = function () { return this.uiObject; }; CControlPr.prototype.fillObject = function (oCopy, oPr) { oCopy.setAltText(this.altText); oCopy.setAutoFill(this.autoFill); oCopy.setAutoLine(this.autoLine); oCopy.setAutoPict(this.autoPict); oCopy.setDde(this.dde); oCopy.setDefaultSize(this.defaultSize); oCopy.setDisabled(this.disabled); oCopy.setCf(this.cf); oCopy.setLinkedCell(this.linkedCell); oCopy.setListFillRange(this.listFillRange); oCopy.setRId(this.rId); oCopy.setLocked(this.locked); oCopy.setMacro(this.macro); oCopy.setPrint(this.print); oCopy.setRecalcAlways(this.recalcAlways); oCopy.setUiObject(this.uiObject); }; CControlPr.prototype.getMacroId = function () { const sMacro = this.macro; return typeof sMacro === "string" ? sMacro : null; }; CControlPr.prototype.getJSAMacroId = function () { const sMacro = this.getMacroId(); if (sMacro !== null && sMacro.indexOf(AscFormat.MACRO_PREFIX) === 0) { return sMacro.slice(AscFormat.MACRO_PREFIX.length); } return null; }; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_DropLines] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_ObjectType] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Checked] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_DropStyle] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Dx] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Inc] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Min] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Max] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Page] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Sel] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_SelType] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_TextHAlign] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_TextVAlign] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Val] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_WidthMin] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_EditVal] = AscDFH.CChangesDrawingsLong; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_FmlaGroup] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_FmlaLink] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_FmlaRange] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_FmlaTxbx] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Colored] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_FirstButton] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_Horiz] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_JustLastX] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_LockText] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_MultiSel] = AscDFH.CChangesDrawingsString; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_NoThreeD] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_NoThreeD2] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_MultiLine] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_VerticalBar] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_PasswordEdit] = AscDFH.CChangesDrawingsBool; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_AddItemToLst] = AscDFH.CChangesDrawingsContentString; AscDFH.changesFactory[AscDFH.historyitem_FormControlPr_RemoveItemFromLst] = AscDFH.CChangesDrawingsContentString; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_DropLines] = function (oClass, value) { oClass.dropLines = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_ObjectType] = function (oClass, value) { oClass.objectType = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Checked] = function (oClass, value) { oClass.checked = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_DropStyle] = function (oClass, value) { oClass.dropStyle = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Dx] = function (oClass, value) { oClass.dx = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Inc] = function (oClass, value) { oClass.inc = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Min] = function (oClass, value) { oClass.min = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Max] = function (oClass, value) { oClass.max = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Page] = function (oClass, value) { oClass.page = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Sel] = function (oClass, value) { if(oClass.parent) { oClass.parent.controller.recalcInfo.recalculateItems = true; oClass.parent.addToRecalculate(); } oClass.sel = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_SelType] = function (oClass, value) { oClass.selType = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_TextHAlign] = function (oClass, value) { oClass.textHAlign = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_TextVAlign] = function (oClass, value) { oClass.textVAlign = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Val] = function (oClass, value) { if(oClass.parent) { oClass.parent.recalcInfo.recalculateTransform = true; oClass.parent.addToRecalculate(); } oClass.val = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_WidthMin] = function (oClass, value) { oClass.widthMin = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_EditVal] = function (oClass, value) { oClass.editVal = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_FmlaGroup] = function (oClass, value) { oClass.fmlaGroup = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_FmlaLink] = function (oClass, value) { oClass.fmlaLink = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_FmlaRange] = function (oClass, value) { oClass.fmlaRange = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_FmlaTxbx] = function (oClass, value) { oClass.fmlaTxbx = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Colored] = function (oClass, value) { oClass.colored = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_FirstButton] = function (oClass, value) { oClass.firstButton = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_Horiz] = function (oClass, value) { oClass.horiz = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_JustLastX] = function (oClass, value) { oClass.justLastX = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_LockText] = function (oClass, value) { oClass.lockText = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_MultiSel] = function (oClass, value) { if(oClass.parent) { oClass.parent.recalcInfo.recalculateTransform = true; oClass.parent.addToRecalculate(); } oClass.multiSel = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_NoThreeD] = function (oClass, value) { oClass.noThreeD = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_NoThreeD2] = function (oClass, value) { oClass.noThreeD2 = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_MultiLine] = function (oClass, value) { oClass.multiLine = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_VerticalBar] = function (oClass, value) { oClass.verticalBar = value; }; AscDFH.drawingsChangesMap[AscDFH.historyitem_FormControlPr_PasswordEdit] = function (oClass, value) { oClass.passwordEdit = value; }; AscDFH.drawingContentChanges[AscDFH.historyitem_FormControlPr_AddItemToLst] = function (oClass) { return oClass.itemLst; }; AscDFH.drawingContentChanges[AscDFH.historyitem_FormControlPr_RemoveItemFromLst] = function (oClass) { return oClass.itemLst; }; function CFormControlPr() { AscFormat.CBaseFormatObject.call(this); this.dropLines = null; this.objectType = null; this.checked = null; this.dropStyle = null; this.dx = null; this.inc = null; this.min = null; this.max = null; this.page = null; this.sel = null; this.selType = null; this.textHAlign = null; this.textVAlign = null; this.val = null; this.widthMin = null; this.editVal = null; this.fmlaGroup = null; this.fmlaLink = null; this.fmlaRange = null; this.fmlaTxbx = null; this.colored = null; this.firstButton = null; this.horiz = null; this.justLastX = null; this.lockText = null; this.multiSel = null; this.noThreeD = null; this.noThreeD2 = null; this.multiLine = null; this.verticalBar = null; this.passwordEdit = null; this.itemLst = []; this.isExternalFmlaLink = false; } AscFormat.InitClass(CFormControlPr, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_FormControlPr); CFormControlPr.prototype.setDropLines = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_DropLines, this.dropLines, pr)); this.dropLines = pr; } CFormControlPr.prototype.getDropLines = function () { return this.dropLines; } CFormControlPr.prototype.setObjectType = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_ObjectType, this.objectType, pr)); this.objectType = pr; } CFormControlPr.prototype.getObjectType = function () { return this.objectType; } CFormControlPr.prototype.setChecked = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Checked, this.checked, pr)); this.checked = pr; } CFormControlPr.prototype.getChecked = function () { return this.checked; } CFormControlPr.prototype.setDropStyle = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_DropStyle, this.dropStyle, pr)); this.dropStyle = pr; } CFormControlPr.prototype.getDropStyle = function () { return this.dropStyle; } CFormControlPr.prototype.setDx = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Dx, this.dx, pr)); this.dx = pr; } CFormControlPr.prototype.getDx = function () { return this.dx; } CFormControlPr.prototype.setInc = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Inc, this.inc, pr)); this.inc = pr; } CFormControlPr.prototype.getInc = function () { return this.inc; } CFormControlPr.prototype.setMin = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Min, this.min, pr)); this.min = pr; } CFormControlPr.prototype.getMin = function () { return this.min; } CFormControlPr.prototype.setMax = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Max, this.max, pr)); this.max = pr; } CFormControlPr.prototype.getMax = function () { return this.max; } CFormControlPr.prototype.setPage = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Page, this.page, pr)); this.page = pr; } CFormControlPr.prototype.getPage = function () { return this.page; } CFormControlPr.prototype.setSel = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Sel, this.sel, pr)); this.sel = pr; } CFormControlPr.prototype.getSel = function () { return this.sel; } CFormControlPr.prototype.setSelType = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_SelType, this.selType, pr)); this.selType = pr; } CFormControlPr.prototype.getSelType = function () { return this.selType; } CFormControlPr.prototype.setTextHAlign = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_TextHAlign, this.textHAlign, pr)); this.textHAlign = pr; } CFormControlPr.prototype.getTextHAlign = function () { return this.textHAlign; } CFormControlPr.prototype.setTextVAlign = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_TextVAlign, this.textVAlign, pr)); this.textVAlign = pr; } CFormControlPr.prototype.getTextVAlign = function () { return this.textVAlign; } CFormControlPr.prototype.setVal = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_Val, this.val, pr)); this.val = pr; } CFormControlPr.prototype.getVal = function () { return this.val; } CFormControlPr.prototype.setWidthMin = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_WidthMin, this.widthMin, pr)); this.widthMin = pr; } CFormControlPr.prototype.getWidthMin = function () { return this.widthMin; } CFormControlPr.prototype.setEditVal = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsLong(this, AscDFH.historyitem_FormControlPr_EditVal, this.editVal, pr)); this.editVal = pr; } CFormControlPr.prototype.getEditVal = function () { return this.editVal; } CFormControlPr.prototype.setFmlaGroup = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_FormControlPr_FmlaGroup, this.fmlaGroup, pr)); this.fmlaGroup = pr; } CFormControlPr.prototype.getFmlaGroup = function () { return this.fmlaGroup; } CFormControlPr.prototype.setFmlaLink = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_FormControlPr_FmlaLink, this.fmlaLink, pr)); this.fmlaLink = pr; } CFormControlPr.prototype.getFmlaLink = function () { return this.fmlaLink; } CFormControlPr.prototype.setFmlaRange = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_FormControlPr_FmlaRange, this.fmlaRange, pr)); this.fmlaRange = pr; } CFormControlPr.prototype.getFmlaRange = function () { return this.fmlaRange; } CFormControlPr.prototype.setFmlaTxbx = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_FormControlPr_FmlaTxbx, this.fmlaTxbx, pr)); this.fmlaTxbx = pr; } CFormControlPr.prototype.getFmlaTxbx = function () { return this.fmlaTxbx; } CFormControlPr.prototype.setColored = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_Colored, this.colored, pr)); this.colored = pr; } CFormControlPr.prototype.getColored = function () { return this.colored; } CFormControlPr.prototype.setFirstButton = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_FirstButton, this.firstButton, pr)); this.firstButton = pr; } CFormControlPr.prototype.getFirstButton = function () { return this.firstButton; } CFormControlPr.prototype.setHoriz = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_Horiz, this.horiz, pr)); this.horiz = pr; } CFormControlPr.prototype.getHoriz = function () { return this.horiz; } CFormControlPr.prototype.setJustLastX = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_JustLastX, this.justLastX, pr)); this.justLastX = pr; } CFormControlPr.prototype.getJustLastX = function () { return this.justLastX; } CFormControlPr.prototype.setLockText = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_LockText, this.lockText, pr)); this.lockText = pr; } CFormControlPr.prototype.getLockText = function () { return this.lockText; } CFormControlPr.prototype.setMultiSel = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsString(this, AscDFH.historyitem_FormControlPr_MultiSel, this.multiSel, pr)); this.multiSel = pr; } CFormControlPr.prototype.getMultiSel = function () { return this.multiSel; } CFormControlPr.prototype.setNoThreeD = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_NoThreeD, this.noThreeD, pr)); this.noThreeD = pr; } CFormControlPr.prototype.getNoThreeD = function () { return this.noThreeD; } CFormControlPr.prototype.setNoThreeD2 = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_NoThreeD2, this.noThreeD2, pr)); this.noThreeD2 = pr; } CFormControlPr.prototype.getNoThreeD2 = function () { return this.noThreeD2; } CFormControlPr.prototype.setMultiLine = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_MultiLine, this.multiLine, pr)); this.multiLine = pr; } CFormControlPr.prototype.getMultiLine = function () { return this.multiLine; } CFormControlPr.prototype.setVerticalBar = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_VerticalBar, this.verticalBar, pr)); this.verticalBar = pr; } CFormControlPr.prototype.getVerticalBar = function () { return this.verticalBar; } CFormControlPr.prototype.setPasswordEdit = function (pr) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsBool(this, AscDFH.historyitem_FormControlPr_PasswordEdit, this.passwordEdit, pr)); this.passwordEdit = pr; } CFormControlPr.prototype.getPasswordEdit = function () { return this.passwordEdit; } CFormControlPr.prototype.addItemToLst = function (nIdx, sPr) { var nInsertIdx = Math.min(this.itemLst.length, Math.max(0, nIdx)); AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsContentString(this, AscDFH.historyitem_FormControlPr_AddItemToLst, nInsertIdx, [sPr], true)); this.itemLst.splice(nInsertIdx, 0, sPr); }; CFormControlPr.prototype.removeItemFromLst = function (nIdx) { if (nIdx > -1 && nIdx < this.itemLst.length) { AscCommon.History.CanAddChanges() && AscCommon.History.Add(new AscDFH.CChangesDrawingsContentString(this, AscDFH.historyitem_CCommonDataListRemove, nIdx, [this.itemLst[nIdx]], false)); this.itemLst.splice(nIdx, 1); } }; CFormControlPr.prototype.fillObject = function (oCopy, oPr) { oCopy.setDropLines(this.dropLines); oCopy.setObjectType(this.objectType); oCopy.setChecked(this.checked); oCopy.setDropStyle(this.dropStyle); oCopy.setDx(this.dx); oCopy.setInc(this.inc); oCopy.setMin(this.min); oCopy.setMax(this.max); oCopy.setPage(this.page); oCopy.setSel(this.sel); oCopy.setSelType(this.selType); oCopy.setTextHAlign(this.textHAlign); oCopy.setTextVAlign(this.textVAlign); oCopy.setVal(this.val); oCopy.setWidthMin(this.widthMin); oCopy.setEditVal(this.editVal); oCopy.setFmlaGroup(this.fmlaGroup); oCopy.setFmlaLink(this.fmlaLink); oCopy.setFmlaRange(this.fmlaRange); oCopy.setFmlaTxbx(this.fmlaTxbx); oCopy.setColored(this.colored); oCopy.setFirstButton(this.firstButton); oCopy.setHoriz(this.horiz); oCopy.setJustLastX(this.justLastX); oCopy.setLockText(this.lockText); oCopy.setMultiSel(this.multiSel); oCopy.setNoThreeD(this.noThreeD); oCopy.setNoThreeD2(this.noThreeD2); oCopy.setMultiLine(this.multiLine); oCopy.setVerticalBar(this.verticalBar); oCopy.setPasswordEdit(this.passwordEdit); for (let i = 0; i < this.itemLst.length; i += 1) { oCopy.addItemToLst(oCopy.itemLst.length, this.itemLst[i]); } }; window["AscFormat"] = window["AscFormat"] || {}; window["AscFormat"].CControl = CControl; window["AscFormat"].CFormControlPr_checked_unchecked = CFormControlPr_checked_unchecked; window["AscFormat"].CFormControlPr_checked_checked = CFormControlPr_checked_checked; window["AscFormat"].CFormControlPr_checked_mixed = CFormControlPr_checked_mixed; window["AscFormat"].getVerticalControlAlignFromBodyPr = getVerticalControlAlignFromBodyPr; window["AscFormat"].getHorizontalAlignFromControl = getHorizontalAlignFromControl; })();