Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

4981 lines
175 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (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";
// Import
var changestype_Drawing_Props = AscCommon.changestype_Drawing_Props;
var changestype_2_ElementsArray_and_Type = AscCommon.changestype_2_ElementsArray_and_Type;
var isRealObject = AscCommon.isRealObject;
var global_mouseEvent = AscCommon.global_mouseEvent;
var History = AscCommon.History;
var DrawingObjectsController = AscFormat.DrawingObjectsController;
var HANDLE_EVENT_MODE_HANDLE = AscFormat.HANDLE_EVENT_MODE_HANDLE;
var HANDLE_EVENT_MODE_CURSOR = AscFormat.HANDLE_EVENT_MODE_CURSOR;
var asc_CImgProperty = Asc.asc_CImgProperty;
var c_oAscAlignH = Asc.c_oAscAlignH;
var c_oAscAlignV = Asc.c_oAscAlignV;
function CGraphicObjects(document, drawingDocument, api)
{
this.api = api;
this.document = document;
this.drawingDocument = drawingDocument;
this.graphicPages = [];
this.startTrackPos =
{
x: null,
y: null,
pageIndex: null
};
this.arrPreTrackObjects = [];
this.arrTrackObjects = [];
this.curState = new AscFormat.NullState(this);
this.selectionInfo =
{
selectionArray: []
};
this.maximalGraphicObjectZIndex = 1024;
this.spline = null;
this.polyline = null;
this.drawingObjects = [];
this.urlMap = [];
this.recalcMap = {};
this.selectedObjects = [];
this.selection =
{
groupSelection: null,
chartSelection: null,
textSelection: null,
wrapPolygonSelection: null
};
this.selectedObjects = [];
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
this.nullState = new AscFormat.NullState(this);
this.bNoCheckChartTextSelection = false;
this.Id = AscCommon.g_oIdCounter.Get_NewId();
this.Lock = new AscCommon.CLock();
AscCommon.g_oTableId.Add( this, this.Id );
}
CGraphicObjects.prototype =
{
createShape: DrawingObjectsController.prototype.createShape,
handleAdjustmentHit: DrawingObjectsController.prototype.handleAdjustmentHit,
handleHandleHit: DrawingObjectsController.prototype.handleHandleHit,
handleMoveHit: DrawingObjectsController.prototype.handleMoveHit,
handleEnter: DrawingObjectsController.prototype.handleEnter,
rotateTrackObjects: DrawingObjectsController.prototype.rotateTrackObjects,
handleRotateTrack: DrawingObjectsController.prototype.handleRotateTrack,
trackResizeObjects: DrawingObjectsController.prototype.trackResizeObjects,
trackGeometryObjects: DrawingObjectsController.prototype.trackGeometryObjects,
resetInternalSelection: DrawingObjectsController.prototype.resetInternalSelection,
handleTextHit: DrawingObjectsController.prototype.handleTextHit,
getConnectorsForCheck: DrawingObjectsController.prototype.getConnectorsForCheck,
getConnectorsForCheck2: DrawingObjectsController.prototype.getConnectorsForCheck2,
checkDrawingHyperlinkAndMacro: DrawingObjectsController.prototype.checkDrawingHyperlinkAndMacro,
canEditTableOleObject: DrawingObjectsController.prototype.canEditTableOleObject,
canEditGeometry: DrawingObjectsController.prototype.canEditGeometry,
startEditGeometry: DrawingObjectsController.prototype.startEditGeometry,
haveTrackedObjects: DrawingObjectsController.prototype.haveTrackedObjects,
checkShowMediaControlOnSelect: function () {
},
checkShowMediaControlOnHover: function (oDrawing) {
},
checkSelectedObjectsAndCallback: function(callback, args, bNoSendProps, nHistoryPointType, aAdditionaObjects, bNoCheckLock)
{
var oLogicDocument = editor.WordControl.m_oLogicDocument;
var check_type = AscCommon.changestype_Drawing_Props;
if(bNoCheckLock || oLogicDocument.Document_Is_SelectionLocked(check_type, null, false, false) === false)
{
var nPointType = AscFormat.isRealNumber(nHistoryPointType) ? nHistoryPointType : AscDFH.historydescription_CommonControllerCheckSelected;
oLogicDocument.StartAction(nPointType);
callback.apply(this, args);
oLogicDocument.Recalculate();
oLogicDocument.FinalizeAction();
}
},
AddContentControl: function(nContentControlType)
{
var oTargetDocContent = this.getTargetDocContent();
if(oTargetDocContent && (!oTargetDocContent.bPresentation || nContentControlType === Asc.c_oAscSdtLevelType.Inline && !oTargetDocContent.Is_ChartTitleContent())){
return oTargetDocContent.AddContentControl(nContentControlType);
}
return null;
},
Get_Id: function()
{
return this.Id;
},
GetAllFields: function(isUseSelection, arrFields){
var _arrFields = arrFields ? arrFields : [];
for(var i = 0; i < this.selectedObjects.length; ++i){
this.selectedObjects[i].GetAllFields(isUseSelection, arrFields);
}
return _arrFields;
},
TurnOffCheckChartSelection: function()
{
this.bNoCheckChartTextSelection = true;
},
TurnOnCheckChartSelection: function()
{
this.bNoCheckChartTextSelection = false;
},
getDrawingDocument: function()
{
return editor.WordControl.m_oDrawingDocument;
},
sortDrawingArrays: function()
{
for(var i = 0; i < this.graphicPages.length; ++i)
{
if(this.graphicPages[i])
this.graphicPages[i].sortDrawingArrays();
}
},
getSelectedObjects: function()
{
return this.selectedObjects;
},
getSelectedArray: DrawingObjectsController.prototype.getSelectedArray,
getSelectedOleObjects: DrawingObjectsController.prototype.getSelectedOleObjects,
getTheme: function()
{
return this.document.theme;
},
getColorMapOverride: function()
{
return null;
},
isViewMode: function()
{
return this.document.IsViewMode();
},
convertPixToMM: function(v)
{
return this.document.DrawingDocument.GetMMPerDot(v);
},
getGraphicInfoUnderCursor: function(pageIndex, x, y)
{
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
var ret = this.curState.onMouseDown(global_mouseEvent, x, y, pageIndex, false);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(ret && ret.cursorType === "text")
{
if((this.selection.chartSelection && this.selection.chartSelection.selection.textSelection) ||
(this.selection.groupSelection && this.selection.groupSelection.selection.chartSelection && this.selection.groupSelection.selection.chartSelection.selection.textSelection))
{
ret = {};
}
}
return ret || {};
},
updateCursorType: function(pageIndex, x, y, e, bTextFlag)
{
var ret;
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
ret = this.curState.onMouseDown(global_mouseEvent, x, y, pageIndex, bTextFlag);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(ret)
{
if(ret.cursorType !== "text")
{
var oApi = Asc.editor || editor;
var isDrawHandles = oApi ? oApi.isShowShapeAdjustments() : true;
var oShape = AscCommon.g_oTableId.Get_ById(ret.objectId);
var oInnerForm = null;
if (oShape && oShape.isForm() && (oInnerForm = oShape.getInnerForm()))
{
if (isDrawHandles && oInnerForm.IsFormLocked())
isDrawHandles = false;
// Данная ситуация обрабатывается отдельно, т.к. картиночная форма находится внутри другой
// автофигуры и мы специально не даем заходить во внутреннюю, поэтому дополнительно здесь
// обрабатываем попадание в ContentControl
var oPara;
if (oInnerForm.IsPictureForm() && oInnerForm.IsFixedForm() && (oPara = oInnerForm.GetParagraph()))
{
var X = x, Y = y;
var oTransform = oPara.Get_ParentTextInvertTransform();
if (oTransform)
{
X = oTransform.TransformPointX(x, y);
Y = oTransform.TransformPointY(x, y);
}
oInnerForm.DrawContentControlsTrack(AscCommon.ContentControlTrack.Hover, X, Y, 0);
}
}
if(isDrawHandles === false)
{
this.drawingDocument.SetCursorType("default");
return true;
}
let sCursorType = ret.cursorType;
let oAPI = this.getEditorApi();
if(oAPI.isFormatPainterOn())
{
if(sCursorType !== "text")
{
let oData = oAPI.getFormatPainterData();
if(oData.isDrawingData())
{
sCursorType = AscCommon.Cursors.ShapeCopy;
}
}
}
this.drawingDocument.SetCursorType(sCursorType);
}
return true;
}
return false;
},
removeTextSelection: function(){
var oTargetDocContent = this.getTargetDocContent();
if(oTargetDocContent && oTargetDocContent.IsSelectionUse()){
oTargetDocContent.RemoveSelection();
}
},
getDefaultText: DrawingObjectsController.prototype.getDefaultText,
canEdit: DrawingObjectsController.prototype.canEdit,
createImage: DrawingObjectsController.prototype.createImage,
createOleObject: DrawingObjectsController.prototype.createOleObject,
createTextArt: DrawingObjectsController.prototype.createTextArt,
getOleObject: DrawingObjectsController.prototype.getOleObject,
getChartObject: DrawingObjectsController.prototype.getChartObject,
getChartSpace2: DrawingObjectsController.prototype.getChartSpace2,
getChartInfo: DrawingObjectsController.prototype.getChartInfo,
CreateDocContent: DrawingObjectsController.prototype.CreateDocContent,
isSlideShow: function()
{
return false;
},
isObjectsProtected: function()
{
return false;
},
checkSelectedObjectsProtection: function()
{
return false;
},
checkSelectedObjectsProtectionText: function()
{
return false;
},
clearPreTrackObjects: function()
{
this.arrPreTrackObjects.length = 0;
},
addPreTrackObject: function(preTrackObject)
{
this.arrPreTrackObjects.push(preTrackObject);
},
clearTrackObjects: function()
{
this.arrTrackObjects.length = 0;
},
addTrackObject: function(trackObject)
{
this.arrTrackObjects.push(trackObject);
},
swapTrackObjects: function()
{
this.clearTrackObjects();
for(var i = 0; i < this.arrPreTrackObjects.length; ++i)
{
this.addTrackObject(this.arrPreTrackObjects[i]);
}
if(this.arrPreTrackObjects.length > 1)
{
var aAllDrawings;
var oFirstTrack = this.arrPreTrackObjects[0];
if(oFirstTrack)
{
var oOrigObj = oFirstTrack.originalObject;
if(oOrigObj)
{
if(oOrigObj.group)
{
aAllDrawings = [];
}
else
{
var oGrPage = this.getGraphicPage(oOrigObj.selectStartPage);
if(oGrPage && oGrPage.getAllDrawings)
{
var aParaDrawings = oGrPage.getAllDrawings();
if(Array.isArray(aParaDrawings))
{
aAllDrawings = [];
for(var nDrawing = 0; nDrawing < aParaDrawings.length; ++nDrawing)
{
if(aParaDrawings[nDrawing].GraphicObj)
{
aAllDrawings.push(aParaDrawings[nDrawing].GraphicObj);
}
}
}
aAllDrawings = oGrPage.getAllDrawings();
}
}
AscFormat.fSortTrackObjects(this, aAllDrawings);
}
}
}
this.clearPreTrackObjects();
},
getGraphicPage: function(pageIndex)
{
var drawing_page;
if(this.document.GetDocPosType() !== docpostype_HdrFtr)
{
drawing_page = this.graphicPages[pageIndex];
}
else
{
drawing_page = this.getHdrFtrObjectsByPageIndex(pageIndex);
}
return drawing_page;
},
addToRecalculate: function(object)
{
if (object && object.Get_Id && object.recalculate) {
History.RecalcData_Add({Type : AscDFH.historyitem_recalctype_Drawing, Object : object});
if (object.checkAutofit && object.checkAutofit()) {
let mainObject = object.group && object.getMainGroup ? object.getMainGroup() : object;
if (mainObject && mainObject.parent) {
mainObject.parent.Refresh_RecalcData({Type : AscDFH.historyitem_Drawing_SetExtent});
}
}
}
},
createWatermarkImage: DrawingObjectsController.prototype.createWatermarkImage,
getAllInksShapes: function ()
{
let aDrawings = this.document.GetAllDrawingObjects();
let aInksDrawings = [];
for(let nIdx = 0; nIdx < aDrawings.length; ++nIdx)
{
let oDrawing = aDrawings[nIdx];
if(oDrawing.GraphicObj.isInk() || oDrawing.GraphicObj.isHaveOnlyInks())
{
aInksDrawings.push(oDrawing.GraphicObj);
} else {
oDrawing.GraphicObj.getAllInks(aInksDrawings);
}
}
return aInksDrawings;
},
haveInks: function ()
{
return this.getAllInksShapes().length > 0;
},
removeAllInks: function() {
let aInkShapes = this.getAllInksShapes();
if (aInkShapes.length > 0) {
const arrDrawings = [];
for (let nIdx = 0; nIdx < aInkShapes.length; ++nIdx) {
let oShape = aInkShapes[nIdx];
const oDrawing = oShape.GetParaDrawing();
if (oDrawing) {
arrDrawings.push(oDrawing);
}
}
if (this.document.Document_Is_SelectionLocked(changestype_None, {
Type: changestype_2_ElementsArray_and_Type,
Elements: arrDrawings,
CheckType: AscCommon.changestype_Drawing_Props
})) {
return;
}
this.document.StartAction(AscDFH.historydescription_RemoveAllInks);
const oGroups = {};
for (let i = 0; i < aInkShapes.length; i++) {
const oShape = aInkShapes[i];
if (oShape.parent instanceof AscCommonWord.ParaDrawing) {
oShape.parent.Remove_FromDocument(false);
if (oShape.isGroup()) {
oShape.deselectInternal(this);
}
this.deselectObject(oShape);
} else if (oShape.group) {
const oMainGroup = oShape.getMainGroup();
const sGroupId = oMainGroup.Get_Id();
if (!oGroups[sGroupId]) {
oGroups[sGroupId] = {group: oMainGroup, shapes: []};
}
oGroups[sGroupId].shapes.push(oShape);
if (oShape.isGroup()) {
oShape.deselectInternal(this);
}
}
}
for (let sId in oGroups) {
const oGroupInfo = oGroups[sId];
this.removeFromGroup(oGroupInfo.group, oGroupInfo.shapes);
}
this.document.UpdateSelection();
this.document.Recalculate();
this.document.FinalizeAction();
}
},
createWatermark: function(oProps)
{
if(oProps.get_Type() === Asc.c_oAscWatermarkType.None)
{
return null;
}
let bTrackRevisions = false;
if (this.document.IsTrackRevisions())
{
bTrackRevisions = this.document.GetLocalTrackRevisions();
this.document.SetLocalTrackRevisions(false);
}
let oDrawing, extX, extY;
let oSectPr = this.document.Get_SectionProps();
let dMaxWidth = oSectPr.get_W() - oSectPr.get_LeftMargin() - oSectPr.get_RightMargin();
let dMaxHeight = oSectPr.get_H() - oSectPr.get_TopMargin() - oSectPr.get_BottomMargin();
let nOpacity = oProps.get_Opacity();
if(oProps.get_Type() === Asc.c_oAscWatermarkType.Image)
{
var oImgP = new Asc.asc_CImgProperty();
oImgP.ImageUrl = oProps.get_ImageUrl();
var oSize = oImgP.asc_getOriginSize(this.getEditorApi());
var dScale = oProps.get_Scale();
let nImageW = oProps.get_ImageWidth();
let nImageH = oProps.get_ImageHeight();
if(AscFormat.isRealNumber(nImageW) && AscFormat.isRealNumber(nImageH) &&
nImageW > 0 && nImageH > 0) {
extX = nImageW / 36000;
extY = nImageH / 36000;
}
else if(dScale < 0)
{
let nImageW = oProps.get_ImageWidth();
let nImageH = oProps.get_ImageWidth();
if(AscFormat.isRealNumber(nImageW) && AscFormat.isRealNumber(nImageH) &&
nImageW > 0 && nImageH > 0) {
extX = nImageW / 36000;
extY = nImageH / 36000;
}
else {
extX = dMaxWidth;
extY = oSize.asc_getImageHeight() * (extX / oSize.asc_getImageWidth());
if(extY > dMaxHeight)
{
extY = dMaxHeight;
extX = oSize.asc_getImageWidth() * (extY / oSize.asc_getImageHeight());
}
}
}
else
{
extX = oSize.asc_getImageWidth() * dScale;
extY = oSize.asc_getImageHeight() * dScale;
}
oDrawing = this.createImage(oProps.get_ImageUrl(), 0, 0, extX, extY, null, null);
let dRot = oProps.getXfrmRot();
let bZeroAngle = AscFormat.fApproxEqual(0.0, dRot);
if(!bZeroAngle)
{
oDrawing.spPr.xfrm.setRot(dRot);
}
if(AscFormat.isRealNumber(nOpacity) && nOpacity < 255)
{
if(oDrawing.blipFill)
{
let oBlipFill = oDrawing.blipFill.createDuplicate();
let oEffect = new AscFormat.CAlphaModFix();
let nAmt = ((255 - nOpacity) / 255) * 100000 + 0.5 >> 0;
oEffect.amt = Math.max(0, Math.min(100000, nAmt));
oBlipFill.Effects.push(oEffect);
oDrawing.setBlipFill(oBlipFill);
}
}
}
else
{
var oTextPropMenu = oProps.get_TextPr();
oDrawing = new AscFormat.CShape();
oDrawing.setWordShape(true);
oDrawing.setBDeleted(false);
oDrawing.createTextBoxContent();
var oSpPr = new AscFormat.CSpPr();
var oXfrm = new AscFormat.CXfrm();
oXfrm.setOffX(0);
oXfrm.setOffY(0);
oXfrm.setExtX(5);
oXfrm.setExtY(5);
let dRot = oProps.getXfrmRot();
let bZeroAngle = AscFormat.fApproxEqual(0.0, dRot);
if(!bZeroAngle)
{
oXfrm.setRot(dRot);
}
oSpPr.setXfrm(oXfrm);
oXfrm.setParent(oSpPr);
oSpPr.setFill(AscFormat.CreateNoFillUniFill());
oSpPr.setLn(AscFormat.CreateNoFillLine());
oSpPr.setGeometry(AscFormat.CreateGeometry("rect"));
oDrawing.setSpPr(oSpPr);
oSpPr.setParent(oDrawing);
var oContent = oDrawing.getDocContent();
AscFormat.AddToContentFromString(oContent, oProps.get_Text());
var oTextPr = new CTextPr();
oTextPr.FontSize = (oTextPropMenu.get_FontSize() > 0 ? oTextPropMenu.get_FontSize() : 20);
oTextPr.RFonts.SetAll(oTextPropMenu.get_FontFamily().get_Name(), -1);
oTextPr.Bold = oTextPropMenu.get_Bold();
oTextPr.HighLight = oTextPropMenu.get_HighLight();
oTextPr.Italic = oTextPropMenu.get_Italic();
oTextPr.Underline = oTextPropMenu.get_Underline();
oTextPr.Strikeout = oTextPropMenu.get_Strikeout();
oTextPr.TextFill = AscFormat.CreateUnifillFromAscColor(oTextPropMenu.get_Color(), 1);
let nOpacity = oProps.get_Opacity();
if(AscFormat.isRealNumber(nOpacity) && nOpacity < 255)
{
oTextPr.TextFill.transparent = (nOpacity >> 0);
}
if(null !== oTextPropMenu.get_Lang())
{
oTextPr.SetLang(oTextPropMenu.get_Lang());
}
oContent.SetApplyToAll(true);
oContent.AddToParagraph(new ParaTextPr(oTextPr));
oContent.SetParagraphAlign(AscCommon.align_Center);
oContent.SetParagraphSpacing({Before : 0, After: 0, LineRule : Asc.linerule_Auto, Line : 1.0});
oContent.SetParagraphIndent({FirstLine:0, Left:0, Right:0});
oContent.SetApplyToAll(false);
var oBodyPr = oDrawing.getBodyPr().createDuplicate();
oBodyPr.rot = 0;
oBodyPr.spcFirstLastPara = false;
oBodyPr.vertOverflow = AscFormat.nVOTOverflow;
oBodyPr.horzOverflow = AscFormat.nHOTOverflow;
oBodyPr.vert = AscFormat.nVertTThorz;
oBodyPr.resetInsets();
oBodyPr.numCol = 1;
oBodyPr.spcCol = 0;
oBodyPr.rtlCol = 0;
oBodyPr.fromWordArt = false;
oBodyPr.anchor = 1;
oBodyPr.anchorCtr = false;
oBodyPr.forceAA = false;
oBodyPr.compatLnSpc = true;
oBodyPr.prstTxWarp = null;
oDrawing.setBodyPr(oBodyPr);
var oContentSize = AscFormat.GetContentOneStringSizes(oContent);
oXfrm.setExtX(oContentSize.w + 1);
oXfrm.setExtY(oContentSize.h);
if(oTextPropMenu.get_FontSize() < 0)
{
if(!bZeroAngle)
{
extX = Math.SQRT2*Math.min(dMaxWidth, dMaxHeight) / (oContentSize.h / oContentSize.w + 1);
}
else
{
extX = dMaxWidth;
}
oTextPr.FontSize *= (extX / oContentSize.w);
oContent.SetApplyToAll(true);
oContent.AddToParagraph(new ParaTextPr(oTextPr));
oContent.SetApplyToAll(false);
oContentSize = AscFormat.GetContentOneStringSizes(oContent);
oXfrm.setExtX(extX + 1);
oXfrm.setExtY(oContentSize.h);
}
}
var oParaDrawing = null;
if(oDrawing)
{
oParaDrawing = new ParaDrawing(oDrawing.spPr.xfrm.extX, oDrawing.spPr.xfrm.extY, oDrawing, this.document.DrawingDocument, this.document, null);
oDrawing.setParent(oParaDrawing);
oParaDrawing.Set_GraphicObject(oDrawing);
oParaDrawing.setExtent(oDrawing.spPr.xfrm.extX, oDrawing.spPr.xfrm.extY);
oParaDrawing.Set_DrawingType(drawing_Anchor);
oParaDrawing.Set_WrappingType(WRAPPING_TYPE_NONE);
oParaDrawing.Set_BehindDoc(true);
oParaDrawing.Set_Distance(3.2, 0, 3.2, 0);
oParaDrawing.Set_PositionH(Asc.c_oAscRelativeFromH.Margin, true, Asc.c_oAscAlignH.Center, false);
oParaDrawing.Set_PositionV(Asc.c_oAscRelativeFromV.Margin, true, Asc.c_oAscAlignV.Center, false);
++AscFormat.Ax_Counter.GLOBAL_AX_ID_COUNTER;
oParaDrawing.docPr.setName("PowerPlusWaterMarkObject" + AscFormat.Ax_Counter.GLOBAL_AX_ID_COUNTER)
}
if (false !== bTrackRevisions)
{
this.document.SetLocalTrackRevisions(bTrackRevisions);
}
return oParaDrawing;
},
getTrialImage: function(sImageUrl)
{
return AscFormat.ExecuteNoHistory(function(){
var oParaDrawing = new ParaDrawing();
oParaDrawing.Set_PositionH(Asc.c_oAscRelativeFromH.Page, true, c_oAscAlignH.Center, undefined);
oParaDrawing.Set_PositionV(Asc.c_oAscRelativeFromV.Page, true, c_oAscAlignV.Center, undefined);
oParaDrawing.Set_WrappingType(WRAPPING_TYPE_NONE);
oParaDrawing.Set_BehindDoc( false );
oParaDrawing.Set_Distance( 3.2, 0, 3.2, 0 );
oParaDrawing.Set_DrawingType(drawing_Anchor);
var oShape = this.createWatermarkImage(sImageUrl);
oParaDrawing.Extent.W = oShape.spPr.xfrm.extX;
oParaDrawing.Extent.H = oShape.spPr.xfrm.extY;
oShape.setParent(oParaDrawing);
oParaDrawing.Set_GraphicObject(oShape);
return oParaDrawing;
}, this, []);
},
recalculateAll : function()
{
for (let iDrawing = 0; iDrawing < this.drawingObjects.length; ++iDrawing)
{
let drawing = this.drawingObjects[iDrawing];
let shape = drawing ? drawing.GraphicObj : null;
if (!shape)
continue;
if (shape.recalcText)
shape.recalcText();
if (shape.handleUpdateExtents)
shape.handleUpdateExtents();
shape.recalculate();
}
for (let iDrawing = 0; iDrawing < this.drawingObjects.length; ++iDrawing)
{
let drawing = this.drawingObjects[iDrawing];
let shape = drawing ? drawing.GraphicObj : null;
if (!shape)
continue;
if (shape.recalculateText)
shape.recalculateText();
}
},
recalculate : function(data)
{
if (!data || data.All || !data.Map)
return this.recalculateAll();
let shapeMap = data.Map;
//recalculate drawings and text in drawings separately
//to be assured that all internal drawings have calculated sizes to be correctly measured
for (let id in shapeMap)
{
if (!shapeMap.hasOwnProperty(id))
continue;
let shape = shapeMap[id];
if (!shape.IsUseInDocument())
continue;
shape.recalculate();
}
for (let id in shapeMap)
{
if (!shapeMap.hasOwnProperty(id))
continue;
let shape = shapeMap[id];
if (!shape.IsUseInDocument())
continue;
if (shape.recalculateText)
shape.recalculateText();
}
},
selectObject: DrawingObjectsController.prototype.selectObject,
checkSelectedObjectsForMove: DrawingObjectsController.prototype.checkSelectedObjectsForMove,
getDrawingProps: DrawingObjectsController.prototype.getDrawingProps,
getDrawingPropsFromArray: DrawingObjectsController.prototype.getDrawingPropsFromArray,
getSelectedObjectsByTypes: DrawingObjectsController.prototype.getSelectedObjectsByTypes,
getChartSettings: DrawingObjectsController.prototype.getChartSettings,
editChartDrawingObjects: DrawingObjectsController.prototype.editChartDrawingObjects,
editChartCallback: DrawingObjectsController.prototype.editChartCallback,
getSelectedSingleChart: DrawingObjectsController.prototype.getSelectedSingleChart,
getPageSizesByDrawingObjects: function()
{
var aW = [], aH = [];
var aBPages = [];
var page_limits;
if(this.selectedObjects.length > 0)
{
for(var i = 0; i < this.selectedObjects.length; ++i)
{
if(!aBPages[this.selectedObjects[i].selectStartPage])
{
page_limits = this.document.Get_PageLimits(this.selectedObjects[i].selectStartPage);
aW.push(page_limits.XLimit);
aH.push(page_limits.YLimit);
aBPages[this.selectedObjects[i].selectStartPage] = true;
}
}
return {W: Math.min.apply(Math, aW), H: Math.min.apply(Math, aH)};
}
page_limits = this.document.Get_PageLimits(0);
return {W: page_limits.XLimit, H: page_limits.YLimit};
},
AcceptRevisionChanges: function(Type, bAll)
{
var oDocContent = this.getTargetDocContent();
if(oDocContent)
{
oDocContent.AcceptRevisionChanges(Type, bAll);
}
},
RejectRevisionChanges: function(Type, bAll)
{
var oDocContent = this.getTargetDocContent();
if(oDocContent)
{
oDocContent.RejectRevisionChanges(Type, bAll);
}
},
Get_Props: function()
{
var props_by_types = DrawingObjectsController.prototype.getDrawingProps.call(this);
var para_drawing_props = null;
for(var i = 0; i < this.selectedObjects.length; ++i)
{
para_drawing_props = this.selectedObjects[i].parent.Get_Props(para_drawing_props);
}
var chart_props, shape_props, image_props;
if(para_drawing_props)
{
if(props_by_types.shapeProps)
{
shape_props = new asc_CImgProperty(para_drawing_props);
shape_props.ShapeProperties = AscFormat.CreateAscShapePropFromProp(props_by_types.shapeProps);
shape_props.verticalTextAlign = props_by_types.shapeProps.verticalTextAlign;
shape_props.vert = props_by_types.shapeProps.vert;
shape_props.Width = props_by_types.shapeProps.w;
shape_props.Height = props_by_types.shapeProps.h;
shape_props.rot = props_by_types.shapeProps.rot;
shape_props.flipH = props_by_types.shapeProps.flipH;
shape_props.flipV = props_by_types.shapeProps.flipV;
shape_props.lockAspect = props_by_types.shapeProps.lockAspect;
if(this.selection.groupSelection){
shape_props.description = props_by_types.shapeProps.description;
shape_props.title = props_by_types.shapeProps.title;
shape_props.fromGroup = true;
}
if (para_drawing_props.Form) {
shape_props.ShapeProperties.textArtProperties = null;
}
}
if(props_by_types.imageProps)
{
image_props = new asc_CImgProperty(para_drawing_props);
image_props.ImageUrl = props_by_types.imageProps.ImageUrl;
image_props.isCrop = props_by_types.imageProps.isCrop;
image_props.cropHeightCoefficient = props_by_types.imageProps.cropHeightCoefficient;
image_props.cropWidthCoefficient = props_by_types.imageProps.cropWidthCoefficient;
image_props.Width = props_by_types.imageProps.w;
image_props.Height = props_by_types.imageProps.h;
image_props.rot = props_by_types.imageProps.rot;
image_props.flipH = props_by_types.imageProps.flipH;
image_props.flipV = props_by_types.imageProps.flipV;
image_props.lockAspect = props_by_types.imageProps.lockAspect;
image_props.transparent = props_by_types.imageProps.transparent;
image_props.pluginGuid = props_by_types.imageProps.pluginGuid;
image_props.pluginData = props_by_types.imageProps.pluginData;
if(this.selection.groupSelection){
image_props.description = props_by_types.imageProps.description;
image_props.title = props_by_types.imageProps.title;
image_props.fromGroup = true;
}
}
if(props_by_types.chartProps && !(props_by_types.chartProps.severalCharts === true))
{
chart_props = new asc_CImgProperty(para_drawing_props);
chart_props.ChartProperties = props_by_types.chartProps.chartProps;
chart_props.severalCharts = props_by_types.chartProps.severalCharts;
chart_props.severalChartStyles = props_by_types.chartProps.severalChartStyles;
chart_props.severalChartTypes = props_by_types.chartProps.severalChartTypes;
chart_props.lockAspect = props_by_types.chartProps.lockAspect;
if(this.selection.groupSelection){
chart_props.description = props_by_types.chartProps.description;
chart_props.title = props_by_types.chartProps.title;
chart_props.fromGroup = true;
}
}
}
if(props_by_types.shapeProps)
{
var pr = props_by_types.shapeProps;
if (pr.fill != null && pr.fill.fill != null && pr.fill.fill.type == Asc.c_oAscFill.FILL_TYPE_BLIP)
{
this.drawingDocument.DrawImageTextureFillShape(pr.fill.fill.RasterImageId);
}
else
{
this.drawingDocument.DrawImageTextureFillShape(null);
}
}
else
{
this.drawingDocument.DrawImageTextureFillShape(null);
}
var ret = [];
if(isRealObject(shape_props))
{
ret.push(shape_props);
}
if(isRealObject(image_props))
{
ret.push(image_props);
}
if(isRealObject(chart_props))
{
ret.push(chart_props);
}
return ret;
},
resetTextSelection: DrawingObjectsController.prototype.resetTextSelection,
setProps: function(oProps)
{
var oApplyProps, i;
for(i = 0; i < this.selectedObjects.length; ++i)
{
this.selectedObjects[i].parent.Set_Props(oProps);
}
oApplyProps = oProps;
if(oProps.ShapeProperties)
{
oApplyProps = oProps.ShapeProperties;
if(AscFormat.isRealBool(oProps.lockAspect))
{
oApplyProps.lockAspect = oProps.lockAspect;
}
if(AscFormat.isRealNumber(oProps.Width))
{
oApplyProps.Width = oProps.Width;
}
if(AscFormat.isRealNumber(oProps.Height))
{
oApplyProps.Height = oProps.Height;
}
if(AscFormat.isRealNumber(oProps.rot))
{
oApplyProps.rot = oProps.rot;
}
if(AscFormat.isRealBool(oProps.flipH))
{
oApplyProps.flipH = oProps.flipH;
}
if(AscFormat.isRealBool(oProps.flipV))
{
oApplyProps.flipV = oProps.flipV;
}
if(AscFormat.isRealBool(oProps.flipHInvert))
{
oApplyProps.flipHInvert = oProps.flipHInvert;
}
if(AscFormat.isRealBool(oProps.flipVInvert))
{
oApplyProps.flipVInvert = oProps.flipVInvert;
}
}
this.applyDrawingProps(oApplyProps);
if(AscFormat.isRealNumber(oApplyProps.Width) || AscFormat.isRealNumber(oApplyProps.Height) || AscFormat.isRealNumber(oApplyProps.rot)
|| AscFormat.isRealNumber(oApplyProps.rotAdd)
|| AscFormat.isRealBool(oApplyProps.flipH)|| AscFormat.isRealBool(oApplyProps.flipV)
|| AscFormat.isRealBool(oApplyProps.flipHInvert)|| AscFormat.isRealBool(oApplyProps.flipVInvert) || (typeof oApplyProps.type === "string")
|| AscCommon.isRealObject(oApplyProps.shadow) || oApplyProps.shadow === null || oApplyProps.bSetOriginalSize)
{
/*в случае если в насторойках ParaDrawing стоит UseAlign - пересчитываем drawing, т. к. ширина и высото ParaDrawing рассчитывается по bounds*/
var aSelectedObjects = this.selectedObjects;
for(i = 0; i < aSelectedObjects.length; ++i)
{
aSelectedObjects[i].parent.CheckWH();
}
}
this.document.Recalculate();
if(oApplyProps &&
(oApplyProps.ChartProperties ||
oApplyProps.textArtProperties && typeof oApplyProps.textArtProperties.asc_getForm() === "string" ||
AscFormat.isRealNumber(oApplyProps.verticalTextAlign) ||
AscFormat.isRealNumber(oApplyProps.vert))
)
{
this.document.Document_UpdateSelectionState();
this.document.RecalculateCurPos();
}
},
applyDrawingProps: DrawingObjectsController.prototype.applyDrawingProps,
updateConnectors: function (bMoveFlag) {},
sendCropState: DrawingObjectsController.prototype.sendCropState,
CheckAutoFit : function()
{
for(var i = this.drawingObjects.length - 1; i > -1; --i)
{
this.drawingObjects[i].CheckGroupSizes();
}
},
checkUseDrawings: function(aDrawings)
{
for(var i = aDrawings.length - 1; i > -1; --i)
{
if(!aDrawings[i].IsUseInDocument())
{
aDrawings.splice(i, 1);
}
}
},
bringToFront : function()//перемещаем заселекченые объекты наверх
{
if(false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsBringToFront);
if(this.selection.groupSelection)
{
this.selection.groupSelection.bringToFront();
}
else
{
var aSelectedObjectsCopy = [], i;
for(i = 0; i < this.selectedObjects.length; ++i)
{
aSelectedObjectsCopy.push(this.selectedObjects[i].parent);
}
aSelectedObjectsCopy.sort(ComparisonByZIndexSimple);
for(i = 0; i < aSelectedObjectsCopy.length; ++i)
{
aSelectedObjectsCopy[i].Set_RelativeHeight(this.getZIndex());
}
}
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
},
checkZIndexMap: function(oDrawing, oDrawingMap, nNewZIndex)
{
if(!isRealObject(oDrawingMap[oDrawing.Get_Id()]))
{
oDrawingMap[oDrawing.Get_Id()] = oDrawing.RelativeHeight;
}
oDrawing.Set_RelativeHeight2(nNewZIndex);
},
insertBetween: function(aToInsert/*массив в котрый вставляем*/, aDrawings/*массив куда вставляем*/, nPos, oDrawingMap)
{
if(nPos > aDrawings.length || nPos < 0)
return;
var i, j, nBetweenMin, nBetweenMax, nTempInterval, aTempDrawingsArray, nDelta;
if(nPos === aDrawings.length)
{
for(i = 0; i < aToInsert.length; ++i)
{
this.checkZIndexMap(aToInsert[i], oDrawingMap, this.getZIndex());
aDrawings.push(aToInsert[i]);
}
}
else
{
if(nPos > 0)
{
nBetweenMin = aDrawings[nPos-1].RelativeHeight;
}
else
{
nBetweenMin = -1;
}
nBetweenMax = aDrawings[nPos].RelativeHeight;
if(aToInsert.length < nBetweenMax - nBetweenMin)//интервала хватает для вставки
{
for(i = 0; i < aToInsert.length; ++i)
{
nBetweenMin += ((nBetweenMax - nBetweenMin)/(aToInsert.length + 1 - i)) >> 0;
this.checkZIndexMap(aToInsert[i], oDrawingMap, nBetweenMin);
aDrawings.splice(nPos + i, aToInsert[i]);
}
}
else
{
nDelta = nBetweenMax - nBetweenMin - aToInsert.length + 1; //сколько нам не хватает для вставки
for(i = nPos; i < aDrawings.length; ++i)
{
this.checkZIndexMap(aDrawings[i], oDrawingMap, aDrawings[i].RelativeHeight + nDelta);
if(i < aDrawings.length - 1)
{
if(aDrawings[i].RelativeHeight <= aDrawings[i+1].RelativeHeight)
{
break;
}
}
}
for(i = 0; i < aToInsert.length; ++i)
{
this.checkZIndexMap(aToInsert[i], oDrawingMap, nBetweenMin+i);
aDrawings.splice(nPos + i, aToInsert[i]);
}
}
}
},
checkDrawingsMap: function(oDrawingMap)
{
var aDrawings = [], oDrawing, aZIndex = [];
for(var key in oDrawingMap)
{
if(oDrawingMap.hasOwnProperty(key))
{
oDrawing = AscCommon.g_oTableId.Get_ById(key);
aDrawings.push(oDrawing);
aZIndex.push(oDrawing.RelativeHeight);
oDrawing.Set_RelativeHeight2(oDrawingMap[key]);
}
}
return {aDrawings: aDrawings, aZIndex: aZIndex};
},
applyZIndex: function(oDrawingObject)
{
var aDrawings = oDrawingObject.aDrawings, aZIndex = oDrawingObject.aZIndex;
for(var i = 0; i < aDrawings.length; ++i)
{
aDrawings[i].Set_RelativeHeight(aZIndex[i]);
}
},
bringForward : function()//перемещаем заселекченные объекты на один уровень выше
{
if(this.selection.groupSelection)
{
if(false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsBringForwardGroup);
this.selection.groupSelection.bringForward();
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
}
else
{
var aDrawings = [].concat(this.drawingObjects), i, j, aSelect = [], nIndexLastNoSelect = -1, oDrawingsMap = {};
this.checkUseDrawings(aDrawings);
aDrawings.sort(ComparisonByZIndexSimple);
for(i = aDrawings.length - 1; i > -1; --i)
{
if(aDrawings[i].GraphicObj.selected)
{
if(nIndexLastNoSelect !== -1)
{
for(j = i; j > -1; --j)
{
if(aDrawings[j].GraphicObj.selected)
{
aSelect.splice(0, 0, aDrawings.splice(j, 1)[0]);
--nIndexLastNoSelect;
}
else
{
break;
}
}
this.insertBetween(aSelect, aDrawings, nIndexLastNoSelect + 1, oDrawingsMap);
aSelect.length = 0;
nIndexLastNoSelect = -1;
i = j+1;
}
}
else
{
nIndexLastNoSelect = i;
}
}
var oCheckObject = this.checkDrawingsMap(oDrawingsMap);
if(false === this.document.Document_Is_SelectionLocked(AscCommon.changestype_None, {Type: changestype_2_ElementsArray_and_Type, CheckType: changestype_Drawing_Props, Elements:oCheckObject.aDrawings}))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsBringForward);
this.applyZIndex(oCheckObject);
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
}
},
sendToBack : function()
{
if(this.selection.groupSelection)
{
if(false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsSendToBackGroup);
this.selection.groupSelection.sendToBack();
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
}
else
{
var aDrawings = [].concat(this.drawingObjects), i, aSelect = [], oDrawingsMap = {};
this.checkUseDrawings(aDrawings);
aDrawings.sort(ComparisonByZIndexSimple);
for(i = 0; i < aDrawings.length; ++i)
{
if(aDrawings[i].GraphicObj.selected)
{
aSelect.push(aDrawings.splice(i, 1)[0]);
}
}
this.insertBetween(aSelect, aDrawings, 0, oDrawingsMap);
var oCheckObject = this.checkDrawingsMap(oDrawingsMap);
if(false === this.document.Document_Is_SelectionLocked(AscCommon.changestype_None, {Type: changestype_2_ElementsArray_and_Type, CheckType: changestype_Drawing_Props, Elements:oCheckObject.aDrawings}))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsSendToBack);
this.applyZIndex(oCheckObject);
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
}
},
bringBackward : function()
{
if(this.selection.groupSelection)
{
if(false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : changestype_2_ElementsArray_and_Type , Elements : [this.selection.groupSelection.parent.Get_ParentParagraph()], CheckType : AscCommon.changestype_Paragraph_Content}))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsBringBackwardGroup);
this.selection.groupSelection.bringBackward();
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
}
else
{
var aDrawings = [].concat(this.drawingObjects), i, j, aSelect = [], nIndexLastNoSelect = -1, oDrawingsMap = {};
this.checkUseDrawings(aDrawings);
aDrawings.sort(ComparisonByZIndexSimple);
for(i = 0; i < aDrawings.length; ++i)
{
if(aDrawings[i].GraphicObj.selected)
{
if(nIndexLastNoSelect !== -1)
{
for(j = i; j < aDrawings.length; ++j)
{
if(aDrawings[j].GraphicObj.selected)
{
aSelect.push(aDrawings.splice(j, 1)[0]);
}
else
{
break;
}
}
this.insertBetween(aSelect, aDrawings, nIndexLastNoSelect, oDrawingsMap);
aSelect.length = 0;
nIndexLastNoSelect = -1;
i = j-1;
}
}
else
{
nIndexLastNoSelect = i;
}
}
var oCheckObject = this.checkDrawingsMap(oDrawingsMap);
if(false === this.document.Document_Is_SelectionLocked(AscCommon.changestype_None, {Type: changestype_2_ElementsArray_and_Type, CheckType: changestype_Drawing_Props, Elements:oCheckObject.aDrawings}))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsBringBackward);
this.applyZIndex(oCheckObject);
this.document.Recalculate();
this.document.UpdateUndoRedo();
this.document.FinalizeAction();
}
}
},
getSingleSelectedChart: function ()
{
const arrByTypes = AscFormat.getObjectsByTypesFromArr(this.selectedObjects, true);
const arrSelectedCharts = [];
for(let i = 0; i < arrByTypes.charts.length; ++i)
{
if(arrByTypes.charts[i].selected)
{
arrSelectedCharts.push(arrByTypes.charts[i]);
}
}
if (arrSelectedCharts.length === 1)
{
return arrSelectedCharts[0];
}
return null;
},
editChart: function(oBinary)
{
var chart_space = this.getChartSpace2(oBinary, null), select_start_page;
const oSelectedChart = this.getSingleSelectedChart();
if(oSelectedChart)
{
if (!oSelectedChart.isExternal() && oBinary["workbookBinary"])
{
const oApi = this.getEditorApi();
chart_space.setXLSX(oApi.frameManager.getDecodedArray(oBinary["workbookBinary"]));
}
if (oBinary['imagesForAddToHistory'])
{
AscDFH.addImagesFromFrame(chart_space, oBinary['imagesForAddToHistory']);
}
if(oSelectedChart.group)
{
var parent_group = oSelectedChart.group;
var major_group = oSelectedChart.getMainGroup();
for(var i = parent_group.spTree.length -1; i > -1; --i)
{
if(parent_group.spTree[i] === oSelectedChart)
{
parent_group.removeFromSpTreeByPos(i);
chart_space.setGroup(parent_group);
chart_space.spPr.xfrm.setOffX(oSelectedChart.spPr.xfrm.offX);
chart_space.spPr.xfrm.setOffY(oSelectedChart.spPr.xfrm.offY);
parent_group.addToSpTree(i, chart_space);
major_group.updateCoordinatesAfterInternalResize();
major_group.parent.CheckWH();
if(this.selection.groupSelection)
{
select_start_page = this.selection.groupSelection.selectedObjects[0].selectStartPage;
this.selection.groupSelection.resetSelection();
this.selection.groupSelection.selectObject(chart_space, select_start_page);
}
this.document.Recalculate();
this.document.Document_UpdateInterfaceState();
return;
}
}
}
else
{
chart_space.spPr.xfrm.setOffX(0);
chart_space.spPr.xfrm.setOffY(0);
select_start_page = oSelectedChart.selectStartPage;
chart_space.setParent(oSelectedChart.parent);
oSelectedChart.parent.Set_GraphicObject(chart_space);
this.resetSelection();
this.selectObject(chart_space, select_start_page);
oSelectedChart.parent.CheckWH();
this.document.Recalculate();
this.document.Document_UpdateInterfaceState();
}
}
},
loadChartData: function (bNeedRecalculate) {
const oChart = this.getSingleSelectedChart();
const oApi = this.getEditorApi();
if (oChart && oApi) {
oApi.frameManager.loadChartData(oChart);
if (bNeedRecalculate) {
oChart.handleUpdateType();
const oRecalcData = new AscCommon.RecalcData();
oRecalcData.Drawings.Map[oChart.Id] = oChart;
this.document.RecalculateWithParams(oRecalcData);
}
}
},
updateChart: function (binary)
{
const oSelectedChart = this.getSingleSelectedChart();
if (oSelectedChart)
{
const oApi = this.getEditorApi();
oApi.frameManager.saveChartData(oSelectedChart);
const oChartInfo = this.getChartInfo(binary);
const oChart = oChartInfo.chart;
const oChartData = oChartInfo.chartData;
oSelectedChart.setChart(oChart);
if (oChartData) {
oSelectedChart.setChartData(oChartData);
}
oSelectedChart.handleUpdateType();
const oRecalcData = new AscCommon.RecalcData();
oRecalcData.Drawings.Map[oSelectedChart.Id] = oSelectedChart;
this.document.RecalculateWithParams(oRecalcData);
}
},
getCompatibilityMode: function(){
var ret = 0xFF;
if(this.document && this.document.GetCompatibilityMode){
ret = this.document.GetCompatibilityMode();
}
return ret;
},
mergeDrawings: function(pageIndex, HeaderDrawings, HeaderTables, FooterDrawings, FooterTables)
{
var nCompatibilityMode = this.getCompatibilityMode();
if(!this.graphicPages[pageIndex])
{
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
}
var drawings = [], tables = [], i, hdr_ftr_page = this.graphicPages[pageIndex].hdrFtrPage;
if(HeaderDrawings)
{
drawings = drawings.concat(HeaderDrawings);
}
if(FooterDrawings)
{
drawings = drawings.concat(FooterDrawings);
}
var getFloatObjects = function(arrObjects)
{
var ret = [];
for(var i = 0; i < arrObjects.length; ++i)
{
if(arrObjects[i].IsParagraph())
{
var calc_frame = arrObjects[i].CalculatedFrame;
if(calc_frame.StartIndex === arrObjects[i].Index)
{
var FramePr = arrObjects[i].Get_FramePr();
var FrameDx = ( undefined === FramePr.HSpace ? 0 : FramePr.HSpace );
var FrameDy = ( undefined === FramePr.VSpace ? 0 : FramePr.VSpace );
ret.push(new CFlowParagraph(arrObjects[i], calc_frame.L2, calc_frame.T2, calc_frame.W2, calc_frame.H2, FrameDx, FrameDy, arrObjects[i].GetIndex(), calc_frame.FlowCount, FramePr.Wrap));
}
}
else if(arrObjects[i].IsTable())
{
if (0 === arrObjects[i].GetRelativeStartPage())
ret.push(new CFlowTable(arrObjects[i], 0));
}
}
return ret;
};
if(HeaderTables)
{
tables = tables.concat(getFloatObjects(HeaderTables));
}
if(FooterTables)
{
tables = tables.concat(getFloatObjects(FooterTables));
}
hdr_ftr_page.clear();
for(i = 0; i < drawings.length; ++i)
{
var cur_drawing = drawings[i];
if(!cur_drawing.bNoNeedToAdd && cur_drawing.PageNum === pageIndex)
{
var drawing_array = null;
var Type = cur_drawing.getDrawingArrayType();
if(Type === DRAWING_ARRAY_TYPE_INLINE){
drawing_array = hdr_ftr_page.inlineObjects;
}
else if(Type === DRAWING_ARRAY_TYPE_BEHIND){
drawing_array = hdr_ftr_page.behindDocObjects;
}
else{
drawing_array = hdr_ftr_page.beforeTextObjects;
}
if(Array.isArray(drawing_array))
{
drawing_array.push(drawings[i].GraphicObj);
}
}
}
for(i = 0; i < tables.length; ++i)
{
hdr_ftr_page.flowTables.push(tables[i]);
}
hdr_ftr_page.behindDocObjects.sort(ComparisonByZIndexSimpleParent);
hdr_ftr_page.beforeTextObjects.sort(ComparisonByZIndexSimpleParent);
},
addFloatTable: function(table)
{
var hdr_ftr = table.Table.Parent.IsHdrFtr(true);
if(!this.graphicPages[table.PageNum + table.PageController])
{
this.graphicPages[table.PageNum + table.PageController] = new CGraphicPage(table.PageNum + table.PageController, this);
}
if (!hdr_ftr)
{
this.graphicPages[table.PageNum + table.PageController].addFloatTable(table);
}
else
{
this.graphicPages[table.PageNum + table.PageController].hdrFtrPage.addFloatTable(table);
}
},
updateFloatTable : function(table)
{
var hdr_ftr = table.Table.Parent.IsHdrFtr(true);
if (!hdr_ftr && this.graphicPages[table.PageNum + table.PageController])
{
this.graphicPages[table.PageNum + table.PageController].updateFloatTable(table);
}
},
removeFloatTableById: function(pageIndex, id)
{
if(!this.graphicPages[pageIndex])
{
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
}
var table = AscCommon.g_oTableId.Get_ById(id);
if(table)
{
var hdr_ftr = table.Parent.IsHdrFtr(true);
if(!hdr_ftr)
{
this.graphicPages[pageIndex].removeFloatTableById(id);
}
}
},
selectionIsTableBorder: function()
{
var content = this.getTargetDocContent();
if(content)
return content.IsMovingTableBorder();
return false;
},
getTableByXY: function(x, y, pageIndex, documentContent)
{
if(!this.graphicPages[pageIndex])
{
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
}
if(!documentContent.IsHdrFtr())
return this.graphicPages[pageIndex].getTableByXY(x, y, documentContent);
else
return this.graphicPages[pageIndex].hdrFtrPage.getTableByXY(x, y, documentContent);
return null;
},
OnMouseDown: function(e, x, y, pageIndex)
{
//console.log("down " + this.curState.id);
this.checkInkState();
this.curState.onMouseDown(e, x, y, pageIndex);
if(this.arrTrackObjects.length === 0)
{
this.document.GetApi().sendEvent("asc_onSelectionEnd");
}
},
OnMouseMove: function(e, x, y, pageIndex)
{
//console.log("move " + this.curState.id);
this.curState.onMouseMove(e, x, y, pageIndex);
},
OnMouseUp: function(e, x, y, pageIndex)
{
//console.log("up " + this.curState.id);
this.curState.onMouseUp(e, x, y, pageIndex);
},
draw: function(pageIndex, graphics)
{
this.graphicPages[pageIndex] && this.graphicPages[pageIndex].draw(graphics);
},
selectionDraw: function()
{
this.drawingDocument.m_oWordControl.OnUpdateOverlay();
},
updateOverlay: function()
{
this.drawingDocument.m_oWordControl.OnUpdateOverlay();
},
isPolylineAddition: function()
{
return this.curState.polylineFlag === true;
},
shapeApply: function(props)
{
this.applyDrawingProps(props);
},
addShapeOnPage: function(sPreset, nPageIndex)
{
if ( docpostype_HdrFtr !== this.document.GetDocPosType() || null !== this.document.HdrFtr.CurHdrFtr )
{
if (docpostype_HdrFtr !== this.document.GetDocPosType())
{
this.document.SetDocPosType(docpostype_DrawingObjects);
this.document.Selection.Use = true;
this.document.Selection.Start = true;
}
else
{
this.document.Selection.Use = true;
this.document.Selection.Start = true;
var CurHdrFtr = this.document.HdrFtr.CurHdrFtr;
var DocContent = CurHdrFtr.Content;
DocContent.SetDocPosType(docpostype_DrawingObjects);
DocContent.Selection.Use = true;
DocContent.Selection.Start = true;
}
var dX, dY, dExtX, dExtY;
var oSectPr = this.document.Get_PageLimits(nPageIndex);
var oExt = AscFormat.fGetDefaultShapeExtents(sPreset);
var dSize = Math.min(oSectPr.XLimit / 2, oSectPr.YLimit / 2);
var dScale = dSize/Math.max(oExt.x, oExt.y);
dExtX = oExt.x * dScale;
dExtY = oExt.y * dScale;
dX = (oSectPr.XLimit - oSectPr.X - dExtX) / 2;
dX = Math.max(0, dX);
dY = (oSectPr.YLimit - oSectPr.Y - dExtY) / 2;
dY = Math.max(0, dY);
this.changeCurrentState(new AscFormat.StartAddNewShape(this, sPreset));
this.OnMouseDown({}, dX, dY, nPageIndex);
if(AscFormat.isRealNumber(dExtX) && AscFormat.isRealNumber(dExtY))
{
this.OnMouseMove({IsLocked: true}, dX + dExtX, dY + dExtY, nPageIndex)
}
this.OnMouseUp({}, dX, dY, nPageIndex);
this.document.Document_UpdateInterfaceState();
this.document.Document_UpdateRulersState();
this.document.Document_UpdateSelectionState();
}
},
drawOnOverlay: function(overlay)
{
var _track_objects = this.arrTrackObjects;
var _object_index;
var _object_count = _track_objects.length;
for(_object_index = 0; _object_index < _object_count; ++_object_index)
{
_track_objects[_object_index].draw(overlay);
}
if(this.curState.InlinePos)
{
this.drawingDocument.AutoShapesTrack.SetCurrentPage(this.curState.InlinePos.Page);
this.drawingDocument.AutoShapesTrack.DrawInlineMoveCursor(this.curState.InlinePos.X, this.curState.InlinePos.Y, this.curState.InlinePos.Height, this.curState.InlinePos.transform);
}
//TODO Anchor Position
return;
},
getAllDrawingsOnPage: function(pageIndex, bHdrFtr)
{
if(!this.graphicPages[pageIndex])
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
var arr, page, i, ret = [];
if(!bHdrFtr)
{
page = this.graphicPages[pageIndex];
}
else
{
page = this.graphicPages[pageIndex].hdrFtrPage;
}
arr = page.behindDocObjects.concat(page.beforeTextObjects);
return arr;
},
getDrawingObjects: function(pageIndex)
{
let bHdrFtr = false;
if(this.document && this.document.GetDocPosType() === AscCommonWord.docpostype_HdrFtr)
{
bHdrFtr = true;
}
return this.getAllDrawingsOnPage(pageIndex, bHdrFtr);
},
getAllFloatObjectsOnPage: function(pageIndex, docContent)
{
if(!this.graphicPages[pageIndex])
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
var arr, page, i, ret = [];
arr = this.getAllDrawingsOnPage(pageIndex, docContent.IsHdrFtr());
for(i = 0; i < arr.length; ++i)
{
if(arr[i].parent && arr[i].parent.GetDocumentContent() === docContent)
{
ret.push(arr[i].parent);
}
}
return ret;
},
getAllFloatTablesOnPage: function(pageIndex, docContent)
{
if(!this.graphicPages[pageIndex])
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
if(!docContent)
{
docContent = this.document;
}
var tables, page;
if(!docContent.IsHdrFtr())
{
page = this.graphicPages[pageIndex];
}
else
{
page = this.graphicPages[pageIndex].hdrFtrPage;
}
tables = page.flowTables;
var ret = [];
for(var i = 0; i < tables.length; ++i)
{
if(tables[i].IsFlowTable() && tables[i].Table.Parent === docContent)
ret.push(tables[i]);
}
return ret;
},
getTargetDocContent: DrawingObjectsController.prototype.getTargetDocContent,
getTextArtPreviewManager: DrawingObjectsController.prototype.getTextArtPreviewManager,
getEditorApi: DrawingObjectsController.prototype.getEditorApi,
resetConnectors: DrawingObjectsController.prototype.resetConnectors,
checkDlblsPosition: DrawingObjectsController.prototype.checkDlblsPosition,
resetChartElementsSelection: DrawingObjectsController.prototype.resetChartElementsSelection,
checkCurrentTextObjectExtends: DrawingObjectsController.prototype.checkCurrentTextObjectExtends,
openChartEditor: function ()
{
const oChart = this.getChartObject();
if (oChart)
{
const oChartLoader = new AscCommon.CFrameDiagramBinaryLoader(oChart);
oChartLoader.tryOpen();
}
},
handleChartDoubleClick: function(drawing, chart, e, x, y, pageIndex)
{
const oApi = this.getEditorApi();
if(oApi && !oApi.isOpenedFrameEditor && false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.openChartEditor(chart);
this.clearTrackObjects();
this.clearPreTrackObjects();
this.changeCurrentState(new AscFormat.NullState(this));
this.document.OnMouseUp(e, x, y, pageIndex);
}
},
openOleEditor: function ()
{
const oOleObject = this.canEditTableOleObject(true);
if (oOleObject)
{
const oleLoader = new AscCommon.CFrameOleBinaryLoader(oOleObject);
oleLoader.tryOpen();
}
},
handleSignatureDblClick: function(sGuid, width, height){
editor.sendEvent("asc_onSignatureDblClick", sGuid, width, height);
},
handleOleObjectDoubleClick: function(drawing, oleObject, e, x, y, pageIndex)
{
if (false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props) || !this.document.CanEdit()) {
if(drawing && drawing.ParaMath){
editor.sync_OnConvertEquationToMath(drawing);
}
else if (oleObject.canEditTableOleObject())
{
this.openOleEditor();
}
else
{
oleObject.runPlugin();
}
this.clearTrackObjects();
this.clearPreTrackObjects();
this.changeCurrentState(new AscFormat.NullState(this));
this.document.OnMouseUp(e, x, y, pageIndex);
}
},
startEditCurrentOleObject: function()
{
let aSelectedObjects = this.getSelectedArray();
if(aSelectedObjects.length === 1 && aSelectedObjects[0].isOleObject())
{
let oleObject = aSelectedObjects[0];
if(!this.document.IsSelectionLocked(changestype_Drawing_Props))
{
oleObject.runPlugin();
}
}
},
handleMathDrawingDoubleClick : function(drawing, e, x, y, pageIndex)
{
editor.sync_OnConvertEquationToMath(drawing);
this.changeCurrentState(new AscFormat.NullState(this));
this.document.OnMouseUp(e, x, y, pageIndex);
},
addInlineImage: function( W, H, Img, GraphicObject, bFlow )
{
var content = this.getTargetDocContent();
if(content)
{
if(!content.bPresentation){
content.AddInlineImage(W, H, Img, GraphicObject, bFlow );
}
else{
if(this.selectedObjects.length > 0)
{
this.resetSelection2();
this.document.AddInlineImage(W, H, Img, GraphicObject, bFlow );
}
}
}
else
{
if(this.selectedObjects.length > 0)
{
this.resetSelection2();
this.document.AddInlineImage(W, H, Img, GraphicObject, bFlow );
}
}
},
addSignatureLine: function(oSignatureDrawing)
{
var content = this.getTargetDocContent();
if(content)
{
if(!content.bPresentation){
content.AddSignatureLine(oSignatureDrawing);
}
else{
if(this.selectedObjects.length > 0)
{
this.resetSelection2();
this.document.AddSignatureLine(oSignatureDrawing);
}
}
}
else
{
if(this.selectedObjects[0] && this.selectedObjects[0].parent && this.selectedObjects[0].parent.Is_Inline())
{
this.resetInternalSelection();
this.document.Remove(1, true);
this.document.AddSignatureLine(oSignatureDrawing);
}
else
{
if(this.selectedObjects.length > 0)
{
this.resetSelection2();
this.document.AddSignatureLine(oSignatureDrawing);
}
}
}
},
getDrawingArray: function()
{
var ret = [];
var arrDrawings = [].concat(this.drawingObjects);
this.checkUseDrawings(arrDrawings);
for(var i = 0; i < arrDrawings.length; ++i) {
if(arrDrawings[i] && arrDrawings[i].GraphicObj && !arrDrawings[i].GraphicObj.bDeleted){
ret.push(arrDrawings[i].GraphicObj);
}
}
return ret;
},
getAllSignatures: AscFormat.DrawingObjectsController.prototype.getAllSignatures,
getAllSignatures2: AscFormat.DrawingObjectsController.prototype.getAllSignatures2,
addOleObject: function(W, H, nWidthPix, nHeightPix, Img, Data, sApplicationId, bSelect, arrImagesForAddToHistory)
{
let content = this.getTargetDocContent();
let oDrawing = null;
if(content)
{
if(!content.bPresentation){
oDrawing = content.AddOleObject(W, H, nWidthPix, nHeightPix, Img, Data, sApplicationId, bSelect, arrImagesForAddToHistory);
}
else{
if(this.selectedObjects.length > 0)
{
this.resetSelection2();
oDrawing = this.document.AddOleObject(W, H, nWidthPix, nHeightPix, Img, Data, sApplicationId, bSelect, arrImagesForAddToHistory);
}
}
}
else
{
if(this.selectedObjects[0] && this.selectedObjects[0].parent && this.selectedObjects[0].parent.Is_Inline())
{
this.resetInternalSelection();
this.document.Remove(1, true);
oDrawing = this.document.AddOleObject(W, H, nWidthPix, nHeightPix, Img, Data, sApplicationId, bSelect, arrImagesForAddToHistory);
}
else
{
if(this.selectedObjects.length > 0)
{
this.resetSelection2();
oDrawing = this.document.AddOleObject(W, H, nWidthPix, nHeightPix, Img, Data, sApplicationId, bSelect, arrImagesForAddToHistory);
}
}
}
return oDrawing;
},
addInlineTable : function(nCols, nRows, nMode)
{
var content = this.getTargetDocContent();
if (content)
{
return content.AddInlineTable(nCols, nRows, nMode);
}
return null;
},
addImages: function( aImages )
{
var content = this.getTargetDocContent();
if(content && !content.bPresentation)
{
content.AddImages(aImages);
}
else{
if(this.selectedObjects.length === 0)
{
if(this.resetDrawStateBeforeAction())
{
this.document.AddImages(aImages);
}
}
else
{
this.resetSelection2();
this.document.AddImages(aImages);
}
}
},
canAddComment: function()
{
var content = this.getTargetDocContent();
return content && content.CanAddComment();
},
addComment: function(commentData)
{
var content = this.getTargetDocContent();
return content && content.AddComment(commentData, true, true);
},
hyperlinkCheck: DrawingObjectsController.prototype.hyperlinkCheck,
hyperlinkCanAdd: DrawingObjectsController.prototype.hyperlinkCanAdd,
hyperlinkRemove: DrawingObjectsController.prototype.hyperlinkRemove,
hyperlinkModify: DrawingObjectsController.prototype.hyperlinkModify,
hyperlinkAdd: DrawingObjectsController.prototype.hyperlinkAdd,
isCurrentElementParagraph: function()
{
var content = this.getTargetDocContent();
return content && content.Is_CurrentElementParagraph();
},
isCurrentElementTable: function()
{
var content = this.getTargetDocContent();
return content && content.Is_CurrentElementTable();
},
getColumnSize: function()
{
var oTargetTexObject = AscFormat.getTargetTextObject(this);
if(oTargetTexObject && oTargetTexObject.getObjectType() === AscDFH.historyitem_type_Shape)
{
var oRect = oTargetTexObject.getTextRect();
if(oRect)
{
var oBodyPr = oTargetTexObject.getBodyPr();
var l_ins = AscFormat.isRealNumber(oBodyPr.lIns) ? oBodyPr.lIns : 2.54;
var t_ins = AscFormat.isRealNumber(oBodyPr.tIns) ? oBodyPr.tIns : 1.27;
var r_ins = AscFormat.isRealNumber(oBodyPr.rIns) ? oBodyPr.rIns : 2.54;
var b_ins = AscFormat.isRealNumber(oBodyPr.bIns) ? oBodyPr.bIns : 1.27;
var dW = oRect.r - oRect.l - (l_ins + r_ins);
var dH = oRect.b - oRect.t - (t_ins + b_ins);
if(dW > 0 && dH > 0)
{
return {
W : dW,
H : dH
};
}
}
}
return {
W : AscCommon.Page_Width - (AscCommon.X_Left_Margin + AscCommon.X_Right_Margin),
H : AscCommon.Page_Height - (AscCommon.Y_Top_Margin + AscCommon.Y_Bottom_Margin)
};
},
GetSelectedContent : function(SelectedContent)
{
var content = this.getTargetDocContent();
if(content)
{
content.GetSelectedContent(SelectedContent);
}
else
{
var para = new AscWord.Paragraph();
var selectedObjects, run, drawing, i;
var aDrawings = [];
if(this.selection.groupSelection)
{
selectedObjects = this.selection.groupSelection.selectedObjects;
var groupParaDrawing = this.selection.groupSelection.parent;
//TODO: в случае инлановой группы для определения позиции нужно чтобы докуметн был рассчитан. Не понятно можно ли использовать рассчитаные позиции. Пока создаем инлайновые ParaDrawing.
for(i = 0; i < selectedObjects.length; ++i)
{
run = new ParaRun(para, false);
var oRunPr = selectedObjects[i].parent && selectedObjects[i].parent.GetRun() ? selectedObjects[i].parent.GetRun().GetDirectTextPr() : null;
if (oRunPr)
run.SetPr(oRunPr.Copy());
selectedObjects[i].recalculate();
var oGraphicObj = selectedObjects[i].copy();
if(this.selection.groupSelection.getObjectType() === AscDFH.historyitem_type_SmartArt)
{
oGraphicObj = oGraphicObj.convertFromSmartArt();
if(oGraphicObj.getObjectType() === AscDFH.historyitem_type_Shape)
{
oGraphicObj = oGraphicObj.convertToWord(this.document);
}
}
drawing = new ParaDrawing(0, 0, oGraphicObj, this.document.DrawingDocument, this.document, null);
drawing.Set_DrawingType(groupParaDrawing.DrawingType);
drawing.GraphicObj.setParent(drawing);
if(drawing.GraphicObj.spPr && drawing.GraphicObj.spPr.xfrm && AscFormat.isRealNumber(drawing.GraphicObj.spPr.xfrm.offX) && AscFormat.isRealNumber(drawing.GraphicObj.spPr.xfrm.offY))
{
drawing.GraphicObj.spPr.xfrm.setOffX(0);
drawing.GraphicObj.spPr.xfrm.setOffY(0);
}
drawing.CheckWH();
if(groupParaDrawing.DrawingType === drawing_Anchor)
{
drawing.Set_Distance(groupParaDrawing.Distance.L, groupParaDrawing.Distance.T, groupParaDrawing.Distance.R, groupParaDrawing.Distance.B);
drawing.Set_WrappingType(groupParaDrawing.wrappingType);
drawing.Set_BehindDoc(groupParaDrawing.behindDoc);
drawing.Set_PositionH(groupParaDrawing.PositionH.RelativeFrom, groupParaDrawing.PositionH.Align, groupParaDrawing.PositionH.Value + selectedObjects[i].bounds.x, groupParaDrawing.PositionH.Percent);
drawing.Set_PositionV(groupParaDrawing.PositionV.RelativeFrom, groupParaDrawing.PositionV.Align, groupParaDrawing.PositionV.Value + selectedObjects[i].bounds.y, groupParaDrawing.PositionV.Percent);
}
run.Add_ToContent(run.State.ContentPos, drawing, true, false);
para.Internal_Content_Add(para.CurPos.ContentPos, run, true);
aDrawings.push(drawing);
}
}
else
{
selectedObjects = this.selectedObjects;
for(i = 0; i < selectedObjects.length; ++i)
{
run = new ParaRun(para, false);
var oRunPr = selectedObjects[i].parent && selectedObjects[i].parent.GetRun() ? selectedObjects[i].parent.GetRun().GetDirectTextPr() : null;
if (oRunPr)
run.SetPr(oRunPr.Copy());
var oSp = selectedObjects[i];
var oDr = oSp.parent;
oSp.recalculate();
drawing = new ParaDrawing(0, 0, oSp.copy(), this.document.DrawingDocument, this.document, null);
drawing.Set_DrawingType(oDr.DrawingType);
if(oDr.Extent)
{
drawing.setExtent(oDr.Extent.W, oDr.Extent.H)
}
drawing.GraphicObj.setParent(drawing);
drawing.GraphicObj.setTransformParams(0, 0, oSp.extX, oSp.extY, oSp.rot, oSp.flipH, oSp.flipV);
//drawing.CheckWH();
drawing.Set_ParaMath(oDr.ParaMath);
drawing.docPr.setFromOther(oDr.docPr);
drawing.SetForm(oDr.IsForm());
if(oDr.DrawingType === drawing_Anchor)
{
drawing.Set_Distance(oDr.Distance.L, oDr.Distance.T, oDr.Distance.R, oDr.Distance.B);
drawing.Set_WrappingType(oDr.wrappingType);
drawing.Set_BehindDoc(oDr.behindDoc);
if(oDr.wrappingPolygon && drawing.wrappingPolygon)
{
drawing.wrappingPolygon.fromOther(oDr.wrappingPolygon);
}
drawing.Set_BehindDoc(oDr.behindDoc);
drawing.Set_RelativeHeight(oDr.RelativeHeight);
if(oDr.PositionH.Align){
drawing.Set_PositionH(oDr.PositionH.RelativeFrom, oDr.PositionH.Align, oDr.PositionH.Value, oDr.PositionH.Percent);
}
else{
drawing.Set_PositionH(oDr.PositionH.RelativeFrom, oDr.PositionH.Align, oDr.PositionH.Value + oSp.bounds.x, oDr.PositionH.Percent);
}
if(oDr.PositionV.Align){
drawing.Set_PositionV(oDr.PositionV.RelativeFrom, oDr.PositionV.Align, oDr.PositionV.Value, oDr.PositionV.Percent);
}
else{
drawing.Set_PositionV(oDr.PositionV.RelativeFrom, oDr.PositionV.Align, oDr.PositionV.Value + oSp.bounds.y, oDr.PositionV.Percent);
}
}
run.Add_ToContent(run.State.ContentPos, drawing, true, false);
para.Internal_Content_Add(para.CurPos.ContentPos, run, true);
aDrawings.push(drawing);
}
}
var bSelectedAll = true;
if(aDrawings.length === 1 && aDrawings[0].IsInline())
{
bSelectedAll = false;
}
SelectedContent.Add( new AscCommonWord.CSelectedElement( para, bSelectedAll ) );
}
},
getCurrentPageAbsolute: function()
{
if(this.curState.majorObject)
{
return this.curState.majorObject.selectStartPage;
}
var selection_arr = this.selectedObjects;
if(selection_arr[0].length > 0)
{
return selection_arr[0].selectStartPage;
}
return 0;
},
createGraphicPage: function(pageIndex)
{
if(!isRealObject(this.graphicPages[pageIndex]))
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
},
resetDrawingArrays : function(pageIndex, docContent)
{
var hdr_ftr = docContent.IsHdrFtr(true);
if (!hdr_ftr)
{
if (isRealObject(this.graphicPages[pageIndex]))
{
this.graphicPages[pageIndex].resetDrawingArrays(docContent);
}
}
},
resetHdrFtrDrawingArrays : function(pageIndex)
{
let oPage = this.getHdrFtrObjectsByPageIndex(pageIndex);
if (oPage)
oPage.clear();
},
mergeHdrFtrPages: function(page1, page2, pageIndex)
{
if(!isRealObject(this.graphicPages[pageIndex]))
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
this.graphicPages[pageIndex].hdrFtrPage.clear();
this.graphicPages[pageIndex].hdrFtrPage.mergePages(page1, page2);
},
onEndRecalculateDocument: function(pagesCount)
{
for(var i = 0; i < pagesCount; ++i)
{
if(!isRealObject(this.graphicPages[i]))
this.graphicPages[i] = new CGraphicPage(i, this);
}
if(this.graphicPages.length > pagesCount)
{
for(i = pagesCount; i < this.graphicPages.length; ++i)
delete this.graphicPages[i];
}
},
documentStatistics: function( CurPage, Statistics )
{
if(this.graphicPages[CurPage])
{
this.graphicPages[CurPage].documentStatistics(Statistics);
}
},
setSelectionState: function (state, stateIndex)
{
DrawingObjectsController.prototype.setSelectionState.call(this, state, stateIndex);
let oState = state[stateIndex];
if(!oState)
{
oState = state[state.length - 1];
}
if(oState)
{
if(oState.curState)
this.curState = oState.curState;
if(Array.isArray(oState.arrPreTrackObjects))
this.arrPreTrackObjects = oState.arrPreTrackObjects;
if(Array.isArray(oState.arrTrackObjects))
this.arrTrackObjects = oState.arrTrackObjects;
}
},
getSelectionState: DrawingObjectsController.prototype.getSelectionState,
resetTrackState: DrawingObjectsController.prototype.resetTrackState,
applyPropsToChartSpace: DrawingObjectsController.prototype.applyPropsToChartSpace,
getAllowedDataLabelsPosition: DrawingObjectsController.prototype.getAllowedDataLabelsPosition,
checkSingleChartSelection: DrawingObjectsController.prototype.checkSingleChartSelection,
documentUpdateSelectionState: function()
{
if(this.selection.textSelection)
{
this.selection.textSelection.updateSelectionState();
}
else if(this.selection.groupSelection)
{
this.selection.groupSelection.documentUpdateSelectionState();
}
else if(this.selection.chartSelection)
{
this.selection.chartSelection.documentUpdateSelectionState();
}
else
{
this.drawingDocument.SelectClear();
this.drawingDocument.TargetEnd();
this.drawingDocument.SelectEnabled(true);
this.drawingDocument.SelectShow();
}
},
getMajorParaDrawing: function()
{
if(this.selectedObjects.length > 0)
{
return this.selectedObjects[0].parent;
}
if(this.lastSelectedObject)
{
let oParaDrawing = this.lastSelectedObject.parent;
if(oParaDrawing && oParaDrawing.IsUseInDocument())
{
return oParaDrawing;
}
}
return null;
},
resetDrawStateBeforeAction: function()
{
if(!this.document)
return;
if(!this.checkTrackDrawings())
return;
if(!this.document.IsDrawingSelected())
return
let bResult = !!this.startDocState;
this.loadStartDocState();
const oAPI = this.getEditorApi();
oAPI.stopInkDrawer();
return bResult;
},
loadStartDocState: function() {
if(this.startDocState)
{
if(this.document)
{
this.document.LoadDocumentState(this.startDocState);
}
this.startDocState = null;
}
},
documentUpdateRulersState: function()
{
var content = this.getTargetDocContent();
if(content && content.Parent && content.Parent.getObjectType && content.Parent.getObjectType() === AscDFH.historyitem_type_Shape)
{
content.Parent.documentUpdateRulersState();
}
//else if(this.selectedObjects.length > 0)
//{
// var parent_paragraph = this.selectedObjects[0].parent.Get_ParentParagraph();
// if(parent_paragraph)
// {
// parent_paragraph.Document_UpdateRulersState();
// }
//}
},
updateTextPr: function()
{
var TextPr = this.getParagraphTextPr();
if(TextPr)
{
var theme = this.document.Get_Theme();
if(theme && theme.themeElements && theme.themeElements.fontScheme)
{
TextPr.ReplaceThemeFonts(theme.themeElements.fontScheme);
}
editor.UpdateTextPr(TextPr);
}
},
updateParentParagraphParaPr : function()
{
let oDrawing = this.getMajorParaDrawing();
if(oDrawing)
{
let oParagraph = oDrawing.Get_ParentParagraph();
if(oParagraph)
{
let oParaPr = oParagraph.Get_CompiledPr2(true).ParaPr;
if (oParaPr)
{
editor.sync_ParaSpacingLine( oParaPr.Spacing );
editor.Update_ParaInd(oParaPr.Ind, oParaPr.Bidi);
editor.sync_PrAlignCallBack(oParaPr.Jc);
editor.sync_ParaStyleName(oParaPr.StyleName);
}
}
}
},
documentUpdateInterfaceState: function()
{
if(this.selection.textSelection)
{
this.selection.textSelection.getDocContent().Document_UpdateInterfaceState();
}
else if(this.selection.groupSelection)
{
this.selection.groupSelection.documentUpdateInterfaceState();
}
else
{
var para_pr = DrawingObjectsController.prototype.getParagraphParaPr.call(this);
if(!para_pr)
{
//if(this.selectedObjects[0] && this.selectedObjects[0].parent && this.selectedObjects[0].parent.Is_Inline())
//{
// var parent_para = this.selectedObjects[0].parent.Get_ParentParagraph();
// if(parent_para)
// para_pr = parent_para.Get_CompiledPr2(true).ParaPr;
//}
}
if(para_pr)
{
var TextPr = this.getParagraphTextPr();
var theme = this.document.Get_Theme();
if(theme && theme.themeElements && theme.themeElements.fontScheme)
{
TextPr.ReplaceThemeFonts(theme.themeElements.fontScheme);
}
editor.UpdateParagraphProp(para_pr);
editor.UpdateTextPr(TextPr);
}
}
},
resetInterfaceTextPr: function()
{
// var oTextPr = new CTextPr();
// oTextPr.Set_FromObject(
// {
// Bold: false,
// Italic: false,
// Underline: false,
// Strikeout: false,
// FontFamily:{
// Name : "", Index : -1
// },
// FontSize: null,
// VertAlign: null,
// HighLight: highlight_None,
// Spacing: null,
// DStrikeout: false,
// Caps: null,
// SmallCaps: null,
// Position: null,
// Lang: null
// }
// );
// editor.UpdateTextPr(oTextPr);
editor.Update_ParaTab(AscCommonWord.Default_Tab_Stop, new CParaTabs());
editor.sync_ParaSpacingLine( new CParaSpacing() );
editor.Update_ParaInd(new CParaInd(), false);
editor.sync_PrAlignCallBack(null);
editor.sync_ParaStyleName(null);
},
isNeedUpdateRulers: function()
{
if(this.selectedObjects.length === 1 && this.selectedObjects[0].getDocContent && this.selectedObjects[0].getDocContent())
{
return true;
}
return false;
},
documentCreateFontCharMap: function( FontCharMap )
{
//ToDo
return;
},
documentCreateFontMap: function( FontCharMap )
{
//TODO
return;
},
tableCheckSplit: function()
{
var content = this.getTargetDocContent();
return content && content.CanSplitTableCells();
},
tableCheckMerge: function()
{
var content = this.getTargetDocContent();
return content && content.CanMergeTableCells();
},
tableSelect: function( Type )
{
var content = this.getTargetDocContent();
return content && content.SelectTable(Type);
},
tableRemoveTable: function()
{
var content = this.getTargetDocContent();
return content && content.RemoveTable();
},
tableSplitCell: function(Cols, Rows)
{
var content = this.getTargetDocContent();
return content && content.SplitTableCells(Cols, Rows);
},
tableMergeCells: function()
{
var content = this.getTargetDocContent();
return content && content.MergeTableCells();
},
tableRemoveCol: function()
{
var content = this.getTargetDocContent();
return content && content.RemoveTableColumn();
},
tableAddCol: function(bBefore, nCount)
{
var content = this.getTargetDocContent();
return content && content.AddTableColumn(bBefore, nCount);
},
tableRemoveRow: function()
{
var content = this.getTargetDocContent();
return content && content.RemoveTableRow();
},
tableRemoveCells : function()
{
var content = this.getTargetDocContent();
return content && content.RemoveTableCells();
},
tableAddRow: function(bBefore, nCount)
{
var content = this.getTargetDocContent();
return content && content.AddTableRow(bBefore, nCount);
},
distributeTableCells : function(isHorizontally)
{
var content = this.getTargetDocContent();
return content && content.DistributeTableCells(isHorizontally);
},
documentSearch: function( CurPage, String, search_Common )
{
if(this.graphicPages[CurPage])
{
this.graphicPages[CurPage].documentSearch(String, search_Common);
CGraphicPage.prototype.documentSearch.call(this.getHdrFtrObjectsByPageIndex(CurPage), String, search_Common);
}
},
getSelectedElementsInfo: function( Info )
{
if(this.selectedObjects.length === 0)
Info.SetDrawing(-1);
var content = this.getTargetDocContent();
if(content)
{
Info.SetDrawing(selected_DrawingObjectText);
content.GetSelectedElementsInfo(Info);
}
else
{
Info.SetDrawing(selected_DrawingObject);
}
return Info;
},
getAllObjectsOnPage: function(pageIndex, bHdrFtr)
{
var graphic_page;
if(bHdrFtr)
{
graphic_page = this.getHdrFtrObjectsByPageIndex(pageIndex);
}
else
{
graphic_page = this.graphicPages[pageIndex];
}
return graphic_page? graphic_page.behindDocObjects.concat(graphic_page.inlineObjects.concat(graphic_page.beforeTextObjects)) : [];
},
selectNextObject: DrawingObjectsController.prototype.selectNextObject,
getCurrentParagraph: function(bIgnoreSelection, arrSelectedParagraphs, oPr)
{
var content = this.getTargetDocContent(oPr && oPr.CheckDocContent, undefined);
if(content)
{
return content.GetCurrentParagraph(bIgnoreSelection, arrSelectedParagraphs, oPr);
}
else
{
var ParaDrawing = this.getMajorParaDrawing();
if (ParaDrawing && ParaDrawing.Parent instanceof Paragraph)
return ParaDrawing.Parent;
return null;
}
},
getCurrentTablesStack : function(arrTables)
{
var oContent = this.getTargetDocContent(false, undefined);
if (oContent)
return oContent.GetCurrentTablesStack(arrTables);
return arrTables ? arrTables : [];
},
GetSelectedText: DrawingObjectsController.prototype.GetSelectedText,
getCurPosXY: function()
{
var content = this.getTargetDocContent();
if(content)
{
return content.GetCurPosXY();
}
else
{
if(this.selectedObjects.length === 1)
{
return {X:this.selectedObjects[0].parent.X, Y: this.selectedObjects[0].parent.Y};
}
return {X: 0, Y: 0};
}
},
isTextSelectionUse: function()
{
var content = this.getTargetDocContent();
if(content)
{
return content.IsTextSelectionUse();
}
else
{
return false;
}
},
isSelectionUse: function()
{
var content = this.getTargetDocContent();
if(content)
{
return content.IsTextSelectionUse();
}
else
{
return this.selectedObjects.length > 0;
}
},
resetTracking: DrawingObjectsController.prototype.resetTracking,
getFormatPainterData: DrawingObjectsController.prototype.getFormatPainterData,
pasteFormatting: DrawingObjectsController.prototype.pasteFormatting,
checkFormatPainterOnMouseEvent: DrawingObjectsController.prototype.checkFormatPainterOnMouseEvent,
pasteFormattingWithPoint: DrawingObjectsController.prototype.pasteFormattingWithPoint,
getHdrFtrObjectsByPageIndex: function(pageIndex)
{
if(this.graphicPages[pageIndex])
{
return this.graphicPages[pageIndex].hdrFtrPage;
}
return null;
},
getNearestPos: function(x, y, pageIndex, drawing)
{
if(drawing && drawing.GraphicObj)
{
if(drawing.GraphicObj.getObjectType() !== AscDFH.historyitem_type_ImageShape && drawing.GraphicObj.getObjectType() !== AscDFH.historyitem_type_OleObject && drawing.GraphicObj.getObjectType() !== AscDFH.historyitem_type_ChartSpace)
return null;
}
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
var cursor_type = this.nullState.onMouseDown(global_mouseEvent, x, y, pageIndex);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
var object;
if(cursor_type )
{
object = AscCommon.g_oTableId.Get_ById(cursor_type.objectId);
if(object)
{
if(cursor_type.cursorType === "text")
{
if(object.getNearestPos)
{
return object.getNearestPos(x, y, pageIndex, drawing);
}
}
else
{
if((object.getObjectType() === AscDFH.historyitem_type_ImageShape || object.getObjectType() === AscDFH.historyitem_type_OleObject) && object.parent)
{
var oShape = object.parent.isShapeChild(true);
if(oShape)
{
return oShape.getNearestPos(x, y, pageIndex, drawing);
}
}
else if(object.getObjectType() === AscDFH.historyitem_type_Shape)
{
if(object.hitInTextRect(x, y))
{
return object.getNearestPos(x, y, pageIndex, drawing);
}
}
}
}
}
return null;
},
selectionCheck: function( X, Y, Page_Abs, NearPos )
{
var text_object = AscFormat.getTargetTextObject(this);
if(text_object)
return text_object.selectionCheck( X, Y, Page_Abs, NearPos );
return false;
},
checkTextObject: function(x, y, pageIndex)
{
var text_object = AscFormat.getTargetTextObject(this);
if(text_object && text_object.hitInTextRect)
{
if(text_object.selectStartPage === pageIndex)
{
if(text_object.hitInTextRect(x, y))
{
return true;
}
}
}
return false;
},
getParagraphParaPrCopy: function()
{
return this.getParagraphParaPr();
},
getParagraphTextPrCopy: function()
{
return this.getParagraphTextPr();
},
getParagraphParaPr: function()
{
var ret = DrawingObjectsController.prototype.getParagraphParaPr.call(this);
if(ret && ret.Shd && ret.Shd.Unifill)
{
ret.Shd.Unifill.check(this.document.theme, this.document.Get_ColorMap());
}
return ret ? ret : new CParaPr();
},
getColorMap: function()
{
return this.document.Get_ColorMap();
},
GetStyleFromFormatting: function()
{
var oContent = this.getTargetDocContent();
if(oContent)
{
var oStyleFormatting = oContent.GetStyleFromFormatting();
var oTextPr = oStyleFormatting.TextPr;
if(oTextPr.TextFill)
{
oTextPr.TextFill = undefined;
}
if(oTextPr.TextOutline)
{
oTextPr.TextOutline = undefined;
}
return oStyleFormatting;
}
return null;
},
getParagraphTextPr: function()
{
var ret = DrawingObjectsController.prototype.getParagraphTextPr.call(this);
if(ret)
{
var ret_;
if(ret.Unifill && ret.Unifill.canConvertPPTXModsToWord())
{
ret_ = ret.Copy();
ret_.Unifill.convertToWordMods();
}
else
{
ret_ = ret;
}
if(ret_.Unifill)
{
ret_.Unifill.check(this.document.theme, this.document.Get_ColorMap());
}
return ret_;
}
else
{
return new CTextPr();
}
},
isSelectedText: function()
{
return isRealObject(/*this.selection.textSelection || this.selection.groupSelection && this.selection.groupSelection.selection.textSelection*/this.getTargetDocContent());
},
selectAll: DrawingObjectsController.prototype.selectAll,
startEditTextCurrentShape: DrawingObjectsController.prototype.startEditTextCurrentShape,
drawSelect: function(pageIndex)
{
DrawingObjectsController.prototype.drawSelect.call(this, pageIndex, this.drawingDocument);
},
drawBehindDoc: function(pageIndex, graphics)
{
if(this.graphicPages[pageIndex])
{
graphics.shapePageIndex = pageIndex;
this.graphicPages[pageIndex].drawBehindDoc(graphics);
graphics.shapePageIndex = null;
}
},
drawBehindObjectsByContent: function(pageIndex, graphics, content)
{
var page;
if(content.IsHdrFtr())
{
//we draw objects from header/footer in drawBehindDocHdrFtr
return;
}
page = this.graphicPages[pageIndex];
page && page.drawBehindObjectsByContent(graphics, content)
},
drawBeforeObjectsByContent: function(pageIndex, graphics, content)
{
var page;
if(content.IsHdrFtr())
{
//we draw objects from header/footer in drawBeforeDocHdrFtr
return;
}
page = this.graphicPages[pageIndex];
page && page.drawBeforeObjectsByContent(graphics, content)
},
endTrackShape: function()
{
},
drawBeforeObjects: function(pageIndex, graphics)
{
if(this.graphicPages[pageIndex])
{
graphics.shapePageIndex = pageIndex;
this.graphicPages[pageIndex].drawBeforeObjects(graphics);
graphics.shapePageIndex = null;
}
},
drawBehindDocHdrFtr: function(pageIndex, graphics)
{
graphics.shapePageIndex = pageIndex;
var hdr_footer_objects = this.getHdrFtrObjectsByPageIndex(pageIndex);
if(hdr_footer_objects != null)
{
var behind_doc = hdr_footer_objects.behindDocObjects;
for(var i = 0; i < behind_doc.length; ++i)
{
behind_doc[i].draw(graphics);
}
}
graphics.shapePageIndex = null;
},
drawBeforeObjectsHdrFtr: function(pageIndex, graphics)
{
graphics.shapePageIndex = pageIndex;
var hdr_footer_objects = this.getHdrFtrObjectsByPageIndex(pageIndex);
if(hdr_footer_objects != null)
{
var bef_arr = hdr_footer_objects.beforeTextObjects;
for(var i = 0; i < bef_arr.length; ++i)
{
bef_arr[i].draw(graphics);
}
}
graphics.shapePageIndex = null;
},
setStartTrackPos: function(x, y, pageIndex)
{
this.startTrackPos.x = x;
this.startTrackPos.y = y;
this.startTrackPos.pageIndex = pageIndex;
},
needUpdateOverlay: function()
{
return (this.arrTrackObjects.length > 0) || this.curState.InlinePos;
},
changeCurrentState: function(state)
{
this.curState = state;
},
handleDblClickEmptyShape: function(oShape){
if(!oShape.getDocContent() && oShape.canEditText()){
if(false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsBringBackward);
if(!oShape.bWordShape){
oShape.createTextBody();
}
else{
oShape.createTextBoxContent();
}
this.document.Recalculate();
var oContent = oShape.getDocContent();
oContent.Set_CurrentElement(0, true);
oContent.MoveCursorToStartPos(false);
this.updateSelectionState();
this.document.FinalizeAction();
}
this.clearTrackObjects();
this.clearPreTrackObjects();
this.changeCurrentState(new AscFormat.NullState(this));
}
},
canGroup: function(bGetArray)
{
var selection_array = this.selectedObjects;
if(selection_array.length < 2)
return bGetArray ? [] :false;
if(!selection_array[0].canGroup())
return bGetArray ? [] : false;
var first_page_index = selection_array[0].parent.pageIndex;
for(var index = 1; index < selection_array.length; ++index)
{
if(!selection_array[index].canGroup())
return bGetArray ? [] : false;
if(first_page_index !== selection_array[index].parent.pageIndex)
return bGetArray ? [] : false;
}
if(bGetArray)
{
var ret = selection_array.concat([]);
ret.sort(ComparisonByZIndexSimpleParent);
return ret;
}
return true;
},
canUnGroup: DrawingObjectsController.prototype.canUnGroup,
getBoundsForGroup: DrawingObjectsController.prototype.getBoundsForGroup,
getArrayForGrouping: function()
{
return this.canGroup(true);
},
startSelectionFromCurPos: function()
{
var content = this.getTargetDocContent();
if(content)
{
content.StartSelectionFromCurPos();
}
},
Check_TrackObjects: function()
{
return this.arrTrackObjects.length > 0;
},
getGroup: DrawingObjectsController.prototype.getGroup,
addObjectOnPage : function(pageIndex, object)
{
if (!this.graphicPages[pageIndex])
{
this.graphicPages[pageIndex] = new CGraphicPage(pageIndex, this);
for (var z = 0; z < pageIndex; ++z)
{
if (!this.graphicPages[z])
this.graphicPages[z] = new CGraphicPage(z, this);
}
}
if (!object.parent.isHdrFtrChild(false))
{
this.graphicPages[pageIndex].addObject(object);
}
else
{
this.graphicPages[pageIndex].hdrFtrPage.addObject(object);
}
},
cursorGetPos: function()
{
var oTargetDocContent = this.getTargetDocContent();
if(oTargetDocContent){
var oPos = oTargetDocContent.GetCursorPosXY();
var oTransform = oTargetDocContent.Get_ParentTextTransform();
if(oTransform){
var _x = oTransform.TransformPointX(oPos.X, oPos.Y);
var _y = oTransform.TransformPointY(oPos.X, oPos.Y);
return {X: _x, Y: _y};
}
return oPos;
}
return {X: 0, Y: 0};
},
GetSelectionBounds: DrawingObjectsController.prototype.GetSelectionBounds,
groupSelectedObjects: function()
{
var objects_for_grouping = this.canGroup(true);
if(objects_for_grouping.length < 2)
return;
let anchorPara = objects_for_grouping[0].parent.Get_ParentParagraph();
if (!anchorPara)
return;
var bTrackRevisions = false;
if (this.document.IsTrackRevisions())
{
bTrackRevisions = this.document.GetLocalTrackRevisions();
this.document.SetLocalTrackRevisions(false);
}
var i;
var para_drawing = new ParaDrawing(5, 5, null, this.drawingDocument, null, null);
para_drawing.Set_WrappingType(WRAPPING_TYPE_NONE);
para_drawing.Set_DrawingType(drawing_Anchor);
for(i = 0; i < objects_for_grouping.length; ++i)
{
if(objects_for_grouping[i].checkExtentsByDocContent && objects_for_grouping[i].checkExtentsByDocContent(true))
{
objects_for_grouping[i].updatePosition(objects_for_grouping[i].posX, objects_for_grouping[i].posY)
}
}
var group = this.getGroup(objects_for_grouping);
var dOffX = group.spPr.xfrm.offX;
var dOffY = group.spPr.xfrm.offY;
group.spPr.xfrm.setOffX(0);
group.spPr.xfrm.setOffY(0);
group.setParent(para_drawing);
para_drawing.Set_GraphicObject(group);
para_drawing.setExtent(group.spPr.xfrm.extX, group.spPr.xfrm.extY);
var page_index = objects_for_grouping[0].parent.pageIndex;
let anchorPos = this.document.Get_NearestPos(objects_for_grouping[0].parent.pageIndex, dOffX, dOffY, true, para_drawing);
var nPageIndex = objects_for_grouping[0].parent.pageIndex;
for(i = 0; i < objects_for_grouping.length; ++i)
{
objects_for_grouping[i].parent.bNotPreDelete = true;
objects_for_grouping[i].parent.Remove_FromDocument(false);
objects_for_grouping[i].parent.bNotPreDelete = undefined;
if(objects_for_grouping[i].setParent){
objects_for_grouping[i].setParent(null);
}
}
para_drawing.Set_Props(new asc_CImgProperty(
{
PositionH:
{
RelativeFrom: Asc.c_oAscRelativeFromH.Page,
UseAlign : false,
Align : undefined,
Value : dOffX
},
PositionV:
{
RelativeFrom: Asc.c_oAscRelativeFromV.Page,
UseAlign : false,
Align : undefined,
Value : dOffY
}
}));
if (anchorPos && anchorPos.Paragraph)
{
anchorPos.Paragraph.Check_NearestPos(anchorPos);
para_drawing.Set_XYForAdd(dOffX, dOffY, anchorPos, nPageIndex);
}
para_drawing.AddToParagraph(anchorPara);
para_drawing.Parent = anchorPara;
this.addGraphicObject(para_drawing);
this.resetSelection();
this.selectObject(group, page_index);
this.document.Recalculate();
this.document.UpdateInterface();
this.document.UpdateSelection();
if (false !== bTrackRevisions)
{
this.document.SetLocalTrackRevisions(bTrackRevisions);
}
return para_drawing;
},
unGroupSelectedObjects: function()
{
if(!(this.isViewMode() === false))
return;
var bTrackRevisions = false;
if (this.document.IsTrackRevisions())
{
bTrackRevisions = this.document.GetLocalTrackRevisions();
this.document.SetLocalTrackRevisions(false);
}
var ungroup_arr = this.canUnGroup(true);
if(ungroup_arr.length > 0)
{
this.resetSelection();
var i, j, anchorPos, cur_group, sp_tree, sp, parent_paragraph, page_num;
var arrCenterPos = [], aPos;
for(i = 0; i < ungroup_arr.length; ++i)
{
cur_group = ungroup_arr[i];
if(cur_group.getObjectType() === AscDFH.historyitem_type_SmartArt)
{
sp_tree = cur_group.drawing.spTree;
}
else
{
sp_tree = cur_group.spTree;
}
aPos = [];
for(j = 0; j < sp_tree.length; ++j)
{
sp = sp_tree[j];
xc = sp.transform.TransformPointX(sp.extX/2, sp.extY/2);
yc = sp.transform.TransformPointY(sp.extX/2, sp.extY/2);
aPos.push({xc: xc, yc: yc});
}
arrCenterPos.push(aPos);
}
for(i = 0; i < ungroup_arr.length; ++i)
{
cur_group = ungroup_arr[i];
parent_paragraph = cur_group.parent.Get_ParentParagraph();
page_num = cur_group.selectStartPage;
cur_group.normalize();
cur_group.parent.bNotPreDelete = true;
cur_group.parent.Remove_FromDocument(false);
cur_group.parent.bNotPreDelete = undefined;
cur_group.setBDeleted(true);
if(cur_group.getObjectType() === AscDFH.historyitem_type_SmartArt)
{
sp_tree = cur_group.drawing.spTree;
}
else
{
sp_tree = cur_group.spTree;
}
aPos = arrCenterPos[i];
var aDrawings = [];
var drawing;
this.document.Recalculate(true);
for(j = 0; j < sp_tree.length; ++j)
{
sp = sp_tree[j];
drawing = new ParaDrawing(0, 0, sp_tree[j], this.drawingDocument, null, null);
var xc, yc, hc = sp.extX/2, vc = sp.extY/2;
if(aPos && aPos[j]){
xc = aPos[j].xc;
yc = aPos[j].yc;
}
else {
xc = sp.transform.TransformPointX(hc, vc);
yc = sp.transform.TransformPointY(hc, vc);
}
drawing.Set_GraphicObject(sp);
sp.setParent(drawing);
drawing.Set_DrawingType(drawing_Anchor);
drawing.Set_WrappingType(cur_group.parent.wrappingType);
drawing.Set_BehindDoc(cur_group.parent.behindDoc);
drawing.CheckWH();
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(sp.rot + cur_group.rot));
sp.spPr.xfrm.setOffX(0);
sp.spPr.xfrm.setOffY(0);
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(null);
if(sp.spPr.Fill && sp.spPr.Fill.fill && sp.spPr.Fill.fill.type === Asc.c_oAscFill.FILL_TYPE_GRP && cur_group.spPr && cur_group.spPr.Fill)
{
sp.spPr.setFill(cur_group.spPr.Fill.createDuplicate());
}
anchorPos = this.document.Get_NearestPos(page_num, sp.bounds.x + sp.posX, sp.bounds.y + sp.posY, true, drawing);
var fPosX = xc - hc;
var fPosY = yc - vc;
drawing.Set_Props(new asc_CImgProperty(
{
PositionH:
{
RelativeFrom: Asc.c_oAscRelativeFromH.Page,
UseAlign : false,
Align : undefined,
Value : 0
},
PositionV:
{
RelativeFrom: Asc.c_oAscRelativeFromV.Page,
UseAlign : false,
Align : undefined,
Value : 0
}
}));
if (anchorPos && anchorPos.Paragraph)
{
anchorPos.Paragraph.Check_NearestPos(anchorPos);
drawing.Set_XYForAdd(fPosX, fPosY, anchorPos, page_num);
}
sp.convertFromSmartArt(true);
var oSm = sp.hasSmartArt && sp.hasSmartArt(true);
if (oSm && oSm.group) {
oSm.group.updateCoordinatesAfterInternalResize();
}
aDrawings.push(drawing);
}
for(j = 0; j < aDrawings.length; ++j)
{
drawing = aDrawings[j];
drawing.AddToParagraph(parent_paragraph);
this.selectObject(drawing.GraphicObj, page_num);
}
}
this.document.Recalculate();
this.document.UpdateInterface();
this.document.UpdateSelection();
}
if (false !== bTrackRevisions)
{
this.document.SetLocalTrackRevisions(bTrackRevisions);
}
},
setTableProps: function(Props)
{
var content = this.getTargetDocContent();
if(content)
{
content.SetTableProps(Props);
}
},
selectionIsEmpty: function(bCheckHidden)
{
var content = this.getTargetDocContent();
if(content)
{
content.IsSelectionEmpty(bCheckHidden);
}
return false;
},
moveSelectedObjects: DrawingObjectsController.prototype.moveSelectedObjects,
moveSelectedObjectsByDir: DrawingObjectsController.prototype.moveSelectedObjectsByDir,
cursorMoveLeft: DrawingObjectsController.prototype.cursorMoveLeft,
cursorMoveRight: DrawingObjectsController.prototype.cursorMoveRight,
cursorMoveUp: DrawingObjectsController.prototype.cursorMoveUp,
cursorMoveDown: DrawingObjectsController.prototype.cursorMoveDown,
cursorMoveEndOfLine: DrawingObjectsController.prototype.cursorMoveEndOfLine,
getMoveDist: DrawingObjectsController.prototype.getMoveDist,
cursorMoveStartOfLine: DrawingObjectsController.prototype.cursorMoveStartOfLine,
cursorMoveAt: DrawingObjectsController.prototype.cursorMoveAt,
getAllConnectors: DrawingObjectsController.prototype.getAllConnectors,
getAllConnectorsByDrawings: DrawingObjectsController.prototype.getAllConnectorsByDrawings,
cursorMoveToCell: function(bNext )
{
var content = this.getTargetDocContent();
if(content)
{
content.MoveCursorToCell(bNext);
}
},
updateAnchorPos: function()
{
//TODO
},
resetSelection: DrawingObjectsController.prototype.resetSelection,
deselectObject: DrawingObjectsController.prototype.deselectObject,
resetSelection2: function()
{
if(this.selectedObjects.length > 0)
{
let oTopDrawing = this.selectedObjects[0];
for(let nDrawing = 1; nDrawing < this.selectedObjects.length; ++nDrawing)
{
let oCurDrawing = this.selectedObjects[nDrawing];
if(oCurDrawing.selectStartPage < oTopDrawing.selectStartPage)
{
oTopDrawing = oCurDrawing;
}
else if(oCurDrawing.selectStartPage === oTopDrawing.selectStartPage)
{
if(oCurDrawing.parent.Get_ParentParagraph().Y < oTopDrawing.parent.Get_ParentParagraph().Y)
oTopDrawing = oCurDrawing;
}
}
this.resetSelection();
oTopDrawing.parent.GoToText();
}
else
{
if(this.lastSelectedObject)
{
let oParaDrawing = this.lastSelectedObject.parent;
if(oParaDrawing && oParaDrawing.IsUseInDocument())
{
oParaDrawing.GoToText();
}
}
}
},
goToSignature: function(sGuid)
{
if(!this.document)
{
return;
}
var oDrawingDocument = this.document.GetDrawingDocument();
if(!oDrawingDocument)
{
return;
}
var oWordControl = oDrawingDocument.m_oWordControl;
if(!oWordControl)
{
return;
}
var aSignatureShapes = this.getAllSignatures2([], this.getDrawingArray());
var oShape;
for(var i = 0; i < aSignatureShapes.length; ++i)
{
oShape = aSignatureShapes[i];
if(oShape && !oShape.group && oShape.signatureLine && oShape.signatureLine.id === sGuid && oShape.parent)
{
oWordControl.ScrollToPosition(oShape.x, oShape.y, oShape.parent.PageNum, oShape.extY);
oShape.Set_CurrentElement(false, oShape.parent.PageNum);
this.selection.textSelection = null;
this.document.Document_UpdateInterfaceState();
this.document.Document_UpdateRulersState();
this.document.Document_UpdateSelectionState();
return;
}
}
},
recalculateCurPos: function(bUpdateX, bUpdateY)
{
var oTargetDocContent = this.getTargetDocContent(undefined, true);
if (oTargetDocContent)
return oTargetDocContent.RecalculateCurPos(bUpdateX, bUpdateY);
if (!window["NATIVE_EDITOR_ENJINE"]) {
var oParaDrawing = this.getMajorParaDrawing();
if (oParaDrawing)
{
var oLogicDocument = editor.WordControl.m_oLogicDocument;
if (oLogicDocument && !oLogicDocument.Selection.Start)
{
// Обновляем позицию курсора, чтобы проскроллиться к заданной позиции
var oDrawingDocument = oLogicDocument.GetDrawingDocument();
oDrawingDocument.m_oWordControl.ScrollToPosition(oParaDrawing.GraphicObj.transform.tx, oParaDrawing.GraphicObj.transform.ty, oParaDrawing.PageNum, oParaDrawing.GraphicObj.extY);
return {
X : oParaDrawing.GraphicObj.x,
Y : oParaDrawing.GraphicObj.y,
Height : 0,
PageNum : oParaDrawing.PageNum,
Internal : {
Line : 0,
Page : 0,
Range : 0
},
Transform : null
};
}
}
}
return {
X : 0,
Y : 0,
Height : 0,
PageNum : 0,
Internal : {Line : 0, Page : 0, Range : 0},
Transform : null
};
},
removeFromGroup: function(oMainGroup, arrShapes) {
if(oMainGroup.getObjectType() === AscDFH.historyitem_type_GroupShape)
{
var group_map = {}, group_arr = [], i, cur_group, sp, xc, yc, hc, vc, rel_xc, rel_yc, j;
for(i = 0; i < arrShapes.length; ++i)
{
arrShapes[i].group.removeFromSpTree(arrShapes[i].Get_Id());
group_map[arrShapes[i].group.Get_Id()+""] = arrShapes[i].group;
}
group_map[oMainGroup.Get_Id()] = oMainGroup;
for(var key in group_map)
{
if(group_map.hasOwnProperty(key))
group_arr.push(group_map[key]);
}
group_arr.sort(AscFormat.CompareGroups);
for(i = 0; i < group_arr.length; ++i)
{
cur_group = group_arr[i];
if(isRealObject(cur_group.group))
{
if(cur_group.spTree.length === 0)
{
cur_group.group.removeFromSpTree(cur_group.Get_Id());
}
else if(cur_group.spTree.length === 1)
{
sp = cur_group.spTree[0];
hc = sp.spPr.xfrm.extX/2;
vc = sp.spPr.xfrm.extY/2;
xc = sp.transform.TransformPointX(hc, vc);
yc = sp.transform.TransformPointY(hc, vc);
rel_xc = cur_group.group.invertTransform.TransformPointX(xc, yc);
rel_yc = cur_group.group.invertTransform.TransformPointY(xc, yc);
sp.spPr.xfrm.setOffX(rel_xc - hc);
sp.spPr.xfrm.setOffY(rel_yc - vc);
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(cur_group.rot + sp.rot));
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(cur_group.group);
for(j = 0; j < cur_group.group.spTree.length; ++j)
{
if(cur_group.group.spTree[j] === cur_group)
{
cur_group.group.addToSpTree(j, sp);
cur_group.group.removeFromSpTree(cur_group.Get_Id());
}
}
}
}
else
{
var para_drawing = cur_group.parent;
if(cur_group.spTree.length === 0)
{
para_drawing.GoToText();
para_drawing.PreDelete();
para_drawing.Remove_FromDocument(false);
if (this.selection.groupSelection === cur_group) {
this.resetSelection();
}
return true;
}
else if(cur_group.spTree.length === 1)
{
sp = cur_group.spTree[0];
sp.spPr.xfrm.setOffX(0);
sp.spPr.xfrm.setOffY(0);
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(cur_group.rot + sp.rot));
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(null);
para_drawing.Set_GraphicObject(sp);
sp.setParent(para_drawing);
if (cur_group.selected || sp.selected) {
this.resetSelection();
this.selectObject(sp, cur_group.selectStartPage);
}
new_x = sp.transform.tx;
new_y = sp.transform.ty;
para_drawing.CheckWH();
if(!para_drawing.Is_Inline())
{
para_drawing.Set_XY(new_x, new_y, para_drawing.Get_ParentParagraph(), para_drawing.GraphicObj.selectStartPage, true);
}
return true;
}
else
{
if (this.selection.groupSelection === cur_group) {
this.resetInternalSelection();
}
var new_x, new_y;
// var pos = cur_group.getBoundsPos();
var oPos = cur_group.updateCoordinatesAfterInternalResize();
var g_pos_x = 0, g_pos_y = 0;
if(oPos)
{
if(AscFormat.isRealNumber(oPos.posX))
{
g_pos_x = oPos.posX;
}
if(AscFormat.isRealNumber(oPos.posY))
{
g_pos_y = oPos.posY;
}
}
new_x = cur_group.x + g_pos_x;
new_y = cur_group.y + g_pos_y;
cur_group.spPr.xfrm.setOffX(0);
cur_group.spPr.xfrm.setOffY(0);
para_drawing.CheckWH();
para_drawing.Set_XY(new_x, new_y, cur_group.parent.Get_ParentParagraph(), cur_group.selectStartPage, false);//X, Y, Paragraph, PageNum, bResetAlign
return true;
}
}
}
}
},
remove: function(Count, bOnlyText, bRemoveOnlySelection, bOnTextAdd, isWord)
{
var content = this.getTargetDocContent(true);
if(content)
{
content.Remove(Count, bOnlyText, bRemoveOnlySelection, bOnTextAdd, isWord);
var oTargetTextObject = AscFormat.getTargetTextObject(this);
oTargetTextObject && oTargetTextObject.checkExtentsByDocContent && oTargetTextObject.checkExtentsByDocContent();
this.document.Recalculate();
}
else if(this.selectedObjects.length > 0)
{
if(this.selection.groupSelection)
{
if(this.selection.groupSelection.selection.chartSelection)
{
this.selection.groupSelection.selection.chartSelection.remove();
this.document.Recalculate();
}
else if (this.removeFromGroup(this.selection.groupSelection, this.selection.groupSelection.selectedObjects))
{
this.document.Recalculate();
}
}
else if(this.selection.chartSelection)
{
this.selection.chartSelection.remove();
this.document.Recalculate();
}
else
{
let aSelectedObjects = [].concat(this.selectedObjects);
let oFirstSelected = aSelectedObjects[0];
let oFirstParaDrawing = oFirstSelected.parent;
this.resetSelection();
if(oFirstParaDrawing)
{
oFirstParaDrawing.GoToText();
}
for(let nDrawing = 0; nDrawing < aSelectedObjects.length; ++nDrawing)
{
let oSp = aSelectedObjects[nDrawing];
let oParaDrawing = oSp.parent;
if(oParaDrawing)
{
oParaDrawing.PreDelete();
oParaDrawing.Remove_FromDocument(false);
}
}
this.document.Recalculate();
}
}
},
addGraphicObject: function(paraDrawing)
{
this.drawingObjects.push(paraDrawing);
},
getZIndex: function()
{
this.maximalGraphicObjectZIndex+=1024;
return this.maximalGraphicObjectZIndex;
},
IsInDrawingObject: function(X, Y, nPageIndex, oContent){
var _X, _Y, oTransform, oInvertTransform;
if(oContent){
oTransform = oContent.Get_ParentTextTransform();
if(oTransform){
oInvertTransform = AscCommon.global_MatrixTransformer.Invert(oTransform);
_X = oInvertTransform.TransformPointX(X, Y);
_Y = oInvertTransform.TransformPointY(X, Y);
}
else{
_X = X;
_Y = Y;
}
}
else{
_X = X;
_Y = Y;
}
return this.isPointInDrawingObjects(_X, _Y, nPageIndex);
},
isPointInDrawingObjects: function(x, y, pageIndex, bSelected, bNoText)
{
var ret;
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
ret = this.curState.onMouseDown(global_mouseEvent, x, y, pageIndex);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(isRealObject(ret))
{
if(bNoText === true)
{
if(ret.cursorType === "text")
{
return -1;
}
}
var object = AscCommon.g_oTableId.Get_ById(ret.objectId);
if(isRealObject(object) && (!(bSelected === true) || bSelected && object.selected) )
{
if(object.group)
object = object.getMainGroup();
if(isRealObject(object) && isRealObject(object.parent))
{
if(ret.bMarker)
{
return DRAWING_ARRAY_TYPE_BEFORE;
}
else
{
if(object.parent.getDrawingArrayType)
{
return object.parent.getDrawingArrayType();
}
return DRAWING_ARRAY_TYPE_BEFORE;
}
}
}
else
{
if(!(bSelected === true))
{
return DRAWING_ARRAY_TYPE_BEFORE;
}
return -1;
}
}
return -1;
},
isPointInDrawingObjects2: function(x, y, pageIndex, bSelected)
{
return this.isPointInDrawingObjects(x, y, pageIndex, bSelected, true) > -1;
},
isPointInDrawingObjects3: function(x, y, pageIndex, bSelected, bText)
{
if(bText){
var ret;
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
ret = this.curState.onMouseDown(global_mouseEvent, x, y, pageIndex);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(isRealObject(ret)){
if(ret.cursorType === "text")
{
return true;
}
}
return false;
}
var oOldState = this.curState;
this.changeCurrentState(new AscFormat.NullState(this));
var bRet = this.isPointInDrawingObjects(x, y, pageIndex, bSelected, true) > -1;
this.changeCurrentState(oOldState);
return bRet;
},
pointInObjInDocContent: function( docContent, X, Y, pageIndex )
{
var ret;
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
ret = this.curState.onMouseDown(global_mouseEvent, X, Y, pageIndex);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(ret)
{
var object = AscCommon.g_oTableId.Get_ById(ret.objectId);
if(object)
{
var parent_drawing;
if(!object.group && object.parent)
{
parent_drawing = object;
}
else if(object.group)
{
parent_drawing = object.group;
while(parent_drawing.group)
parent_drawing = parent_drawing.group;
}
if(parent_drawing && parent_drawing.parent)
return docContent === parent_drawing.parent.isInTopDocument(true);
}
}
return false;
},
pointInSelectedObject: function(x, y, pageIndex)
{
var ret;
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
ret = this.curState.onMouseDown(global_mouseEvent, x, y, pageIndex);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(ret)
{
var object = AscCommon.g_oTableId.Get_ById(ret.objectId);
if(object && object.selected /*&& object.selectStartPage === pageIndex*/)
return true;
}
return false;
},
getParagraphByXY: DrawingObjectsController.prototype.getParagraphByXY,
checkTargetSelection: function()
{
return false;
},
getSelectedDrawingObjectsCount: function()
{
if(this.selection.groupSelection)
{
return this.selection.groupSelection.selectedObjects.length;
}
return this.selectedObjects.length;
},
putShapesAlign: function(type, alignType)
{
var Bounds;
if(this.selectedObjects.length < 1)
{
return;
}
if(!this.selection.groupSelection)
{
if(alignType === Asc.c_oAscObjectsAlignType.Page || alignType === Asc.c_oAscObjectsAlignType.Margin || this.selectedObjects.length < 2)
{
var oApi = this.getEditorApi();
if(!oApi)
{
return;
}
var oImageProperties = new Asc.asc_CImgProperty();
var oPosition;
if(alignType === Asc.c_oAscObjectsAlignType.Page)
{
if(type === c_oAscAlignShapeType.ALIGN_LEFT
|| type === c_oAscAlignShapeType.ALIGN_RIGHT
|| type === c_oAscAlignShapeType.ALIGN_CENTER)
{
oPosition = new Asc.CImagePositionH();
oImageProperties.asc_putPositionH(oPosition);
oPosition.put_UseAlign(true);
oPosition.put_RelativeFrom(Asc.c_oAscRelativeFromH.Page);
}
else
{
oPosition = new Asc.CImagePositionV();
oImageProperties.asc_putPositionV(oPosition);
oPosition.put_UseAlign(true);
oPosition.put_RelativeFrom(Asc.c_oAscRelativeFromV.Page);
}
}
else
{
if(type === c_oAscAlignShapeType.ALIGN_LEFT
|| type === c_oAscAlignShapeType.ALIGN_RIGHT
|| type === c_oAscAlignShapeType.ALIGN_CENTER)
{
oPosition = new Asc.CImagePositionH();
oImageProperties.asc_putPositionH(oPosition);
oPosition.put_UseAlign(true);
oPosition.put_RelativeFrom(Asc.c_oAscRelativeFromH.Margin);
}
else
{
oPosition = new Asc.CImagePositionV();
oImageProperties.asc_putPositionV(oPosition);
oPosition.put_UseAlign(true);
oPosition.put_RelativeFrom(Asc.c_oAscRelativeFromV.Margin);
}
}
switch (type)
{
case c_oAscAlignShapeType.ALIGN_LEFT:
{
oPosition.put_Align(c_oAscAlignH.Left);
break;
}
case c_oAscAlignShapeType.ALIGN_RIGHT:
{
oPosition.put_Align(c_oAscAlignH.Right);
break;
}
case c_oAscAlignShapeType.ALIGN_TOP:
{
oPosition.put_Align(c_oAscAlignV.Top);
break;
}
case c_oAscAlignShapeType.ALIGN_BOTTOM:
{
oPosition.put_Align(c_oAscAlignV.Bottom);
break;
}
case c_oAscAlignShapeType.ALIGN_CENTER:
{
oPosition.put_Align(c_oAscAlignH.Center);
break;
}
case c_oAscAlignShapeType.ALIGN_MIDDLE:
{
oPosition.put_Align(c_oAscAlignV.Center);
break;
}
default:
break;
}
oApi.ImgApply(oImageProperties);
}
else
{
Bounds = AscFormat.getAbsoluteRectBoundsArr(this.selectedObjects);
switch (type)
{
case c_oAscAlignShapeType.ALIGN_LEFT:
{
this.alignLeft(Bounds.minX, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_RIGHT:
{
this.alignRight(Bounds.maxX, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_TOP:
{
this.alignTop(Bounds.minY, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_BOTTOM:
{
this.alignBottom(Bounds.maxY, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_CENTER:
{
this.alignCenter((Bounds.maxX + Bounds.minX)/2, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_MIDDLE:
{
this.alignMiddle((Bounds.maxY + Bounds.minY)/2, Bounds.arrBounds);
break;
}
default:
break;
}
}
}
else
{
var selectedObjects = this.selection.groupSelection.selectedObjects;
if(selectedObjects.length < 1)
{
return;
}
Bounds = AscFormat.getAbsoluteRectBoundsArr(selectedObjects);
if(alignType === Asc.c_oAscObjectsAlignType.Page || alignType === Asc.c_oAscObjectsAlignType.Margin || selectedObjects.length < 2)
{
var oFirstDrawing = selectedObjects[0];
while(oFirstDrawing.group)
{
oFirstDrawing = oFirstDrawing.group;
}
if(!oFirstDrawing.parent)
{
return;
}
var oParentParagraph = oFirstDrawing.parent.Get_ParentParagraph();
var oSectPr = oParentParagraph.Get_SectPr();
if(!oSectPr)
{
return;
}
if(alignType === Asc.c_oAscObjectsAlignType.Page)
{
switch (type)
{
case c_oAscAlignShapeType.ALIGN_LEFT:
{
this.alignLeft(0, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_RIGHT:
{
this.alignRight(oSectPr.GetPageWidth(), Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_TOP:
{
this.alignTop(0, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_BOTTOM:
{
this.alignBottom(oSectPr.GetPageHeight(), Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_CENTER:
{
this.alignCenter(oSectPr.GetPageWidth()/2, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_MIDDLE:
{
this.alignMiddle(oSectPr.GetPageHeight()/2, Bounds.arrBounds);
break;
}
default:
break;
}
}
else
{
var oFrame = oSectPr.GetContentFrame(this.selection.groupSelection.parent.PageNum);
switch (type)
{
case c_oAscAlignShapeType.ALIGN_LEFT:
{
this.alignLeft(oFrame.Left, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_RIGHT:
{
this.alignRight(oFrame.Right, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_TOP:
{
this.alignTop(oFrame.Top, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_BOTTOM:
{
this.alignBottom(oFrame.Bottom, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_CENTER:
{
this.alignCenter((oFrame.Left + oFrame.Right) / 2, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_MIDDLE:
{
this.alignMiddle((oFrame.Top + oFrame.Bottom) / 2, Bounds.arrBounds);
break;
}
default:
break;
}
}
}
else
{
switch (type)
{
case c_oAscAlignShapeType.ALIGN_LEFT:
{
this.alignLeft(Bounds.minX, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_RIGHT:
{
this.alignRight(Bounds.maxX, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_TOP:
{
this.alignTop(Bounds.minY, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_BOTTOM:
{
this.alignBottom(Bounds.maxY, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_CENTER:
{
this.alignCenter((Bounds.maxX + Bounds.minX)/2, Bounds.arrBounds);
break;
}
case c_oAscAlignShapeType.ALIGN_MIDDLE:
{
this.alignMiddle((Bounds.maxY + Bounds.minY)/2, Bounds.arrBounds);
break;
}
default:
break;
}
}
}
},
alignLeft: function(Pos, arrBounds)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i, boundsObject, leftPos;
if(selected_objects.length > 0)
{
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
for(i = 0; i < this.arrTrackObjects.length; ++i)
this.arrTrackObjects[i].track(Pos - arrBounds[i].minX, 0, this.arrTrackObjects[i].originalObject.selectStartPage);
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
alignRight: function(Pos, arrBounds)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i, boundsObject, leftPos;
if(selected_objects.length > 0)
{
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
for(i = 0; i < this.arrTrackObjects.length; ++i)
this.arrTrackObjects[i].track(Pos - arrBounds[i].maxX, 0, this.arrTrackObjects[i].originalObject.selectStartPage);
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
alignTop: function(Pos, arrBounds)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i, boundsObject, leftPos;
if(selected_objects.length > 0)
{
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
for(i = 0; i < this.arrTrackObjects.length; ++i)
this.arrTrackObjects[i].track(0, Pos - arrBounds[i].minY, this.arrTrackObjects[i].originalObject.selectStartPage);
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
alignBottom: function(Pos, arrBounds)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i, boundsObject, leftPos;
if(selected_objects.length > 0)
{
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
for(i = 0; i < this.arrTrackObjects.length; ++i)
this.arrTrackObjects[i].track(0, Pos - arrBounds[i].maxY, this.arrTrackObjects[i].originalObject.selectStartPage);
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
alignCenter : function(Pos, arrBounds)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i;
if(selected_objects.length > 0)
{
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
for(i = 0; i < this.arrTrackObjects.length; ++i)
this.arrTrackObjects[i].track(Pos - (arrBounds[i].maxX - arrBounds[i].minX)/2 - arrBounds[i].minX, 0, this.arrTrackObjects[i].originalObject.selectStartPage);
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
alignMiddle : function(Pos, arrBounds)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i;
if(selected_objects.length > 0)
{
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
for(i = 0; i < this.arrTrackObjects.length; ++i)
this.arrTrackObjects[i].track(0, Pos - (arrBounds[i].maxY - arrBounds[i].minY)/2 - arrBounds[i].minY, this.arrTrackObjects[i].originalObject.selectStartPage);
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
distributeHor : function(alignType)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i, boundsObject, arrBounds, pos1, pos2, gap, sortObjects, lastPos;
if(selected_objects.length > 0)
{
boundsObject = AscFormat.getAbsoluteRectBoundsArr(selected_objects);
arrBounds = boundsObject.arrBounds;
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
sortObjects = [];
for(i = 0; i < selected_objects.length; ++i)
{
sortObjects.push({trackObject: this.arrTrackObjects[i], boundsObject: arrBounds[i]});
}
sortObjects.sort(function(obj1, obj2){return (obj1.boundsObject.maxX + obj1.boundsObject.minX)/2 - (obj2.boundsObject.maxX + obj2.boundsObject.minX)/2});
if(alignType === Asc.c_oAscObjectsAlignType.Selected && selected_objects.length > 2)
{
pos1 = sortObjects[0].boundsObject.minX;
pos2 = sortObjects[sortObjects.length - 1].boundsObject.maxX;
}
else
{
var oFirstDrawing = selected_objects[0];
while(oFirstDrawing.group)
{
oFirstDrawing = oFirstDrawing.group;
}
if(!oFirstDrawing.parent)
{
return;
}
var oParentParagraph = oFirstDrawing.parent.Get_ParentParagraph();
var oSectPr = oParentParagraph.Get_SectPr();
if(!oSectPr)
{
return;
}
if(alignType === Asc.c_oAscObjectsAlignType.Page)
{
pos1 = 0;
pos2 = oSectPr.GetPageWidth();
}
else
{
var oFrame = oSectPr.GetContentFrame(sortObjects[0].trackObject.originalObject.selectStartPage);
pos1 = oFrame.Left;
pos2 = oFrame.Right;
}
}
var summ_width = boundsObject.summWidth;
gap = (pos2 - pos1 - summ_width)/(sortObjects.length - 1);
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
lastPos = pos1;
for(i = 0; i < sortObjects.length; ++i)
{
sortObjects[i].trackObject.track(lastPos - sortObjects[i].trackObject.originalObject.x, 0, sortObjects[i].trackObject.originalObject.selectStartPage);
lastPos += (gap + (sortObjects[i].boundsObject.maxX - sortObjects[i].boundsObject.minX));
}
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
distributeVer : function(alignType)
{
var selected_objects = this.selection.groupSelection ? this.selection.groupSelection.selectedObjects : this.selectedObjects, i, boundsObject, arrBounds, pos1, pos2, gap, sortObjects, lastPos;
if(selected_objects.length > 0)
{
boundsObject = AscFormat.getAbsoluteRectBoundsArr(selected_objects);
arrBounds = boundsObject.arrBounds;
this.checkSelectedObjectsForMove();
this.swapTrackObjects();
sortObjects = [];
for(i = 0; i < selected_objects.length; ++i)
{
sortObjects.push({trackObject: this.arrTrackObjects[i], boundsObject: arrBounds[i]});
}
sortObjects.sort(function(obj1, obj2){return (obj1.boundsObject.maxY + obj1.boundsObject.minY)/2 - (obj2.boundsObject.maxY + obj2.boundsObject.minY)/2});
if(alignType === Asc.c_oAscObjectsAlignType.Selected && selected_objects.length > 2)
{
pos1 = sortObjects[0].boundsObject.minY;
pos2 = sortObjects[sortObjects.length - 1].boundsObject.maxY;
}
else
{
var oFirstDrawing = selected_objects[0];
while(oFirstDrawing.group)
{
oFirstDrawing = oFirstDrawing.group;
}
if(!oFirstDrawing.parent)
{
return;
}
var oParentParagraph = oFirstDrawing.parent.Get_ParentParagraph();
var oSectPr = oParentParagraph.Get_SectPr();
if(!oSectPr)
{
return;
}
if(alignType === Asc.c_oAscObjectsAlignType.Page)
{
pos1 = 0;
pos2 = oSectPr.GetPageHeight();
}
else
{
var oFrame = oSectPr.GetContentFrame(sortObjects[0].trackObject.originalObject.selectStartPage);
pos1 = oFrame.Top;
pos2 = oFrame.Bottom;
}
}
var summ_height = boundsObject.summHeight;
gap = (pos2 - pos1 - summ_height)/(sortObjects.length - 1);
var move_state;
if(!this.selection.groupSelection)
move_state = new AscFormat.MoveState(this, this.selectedObjects[0], 0, 0);
else
move_state = new AscFormat.MoveInGroupState(this, this.selection.groupSelection.selectedObjects[0], this.selection.groupSelection, 0, 0);
lastPos = pos1;
for(i = 0; i < sortObjects.length; ++i)
{
sortObjects[i].trackObject.track(0, lastPos - sortObjects[i].trackObject.originalObject.y, sortObjects[i].trackObject.originalObject.selectStartPage);
lastPos += (gap + (sortObjects[i].boundsObject.maxY - sortObjects[i].boundsObject.minY));
}
move_state.bSamePos = false;
move_state.onMouseUp({}, 0, 0, 0);
}
},
Save_DocumentStateBeforeLoadChanges: function(oState)
{
var oTargetDocContent = this.getTargetDocContent(undefined, true);
if(oTargetDocContent)
{
oState.Pos = oTargetDocContent.GetContentPosition(false, false, undefined);
oState.StartPos = oTargetDocContent.GetContentPosition(true, true, undefined);
oState.EndPos = oTargetDocContent.GetContentPosition(true, false, undefined);
oState.DrawingSelection = oTargetDocContent.Selection.Use;
}
oState.DrawingsSelectionState = this.getSelectionState()[0];
var oPos = this.getLeftTopSelectedObject2();
oState.X = oPos.X;
oState.Y = oPos.Y;
},
Load_DocumentStateAfterLoadChanges: function(oState)
{
this.clearPreTrackObjects();
this.clearTrackObjects();
this.resetSelection(undefined, undefined, true);
this.changeCurrentState(new AscFormat.NullState(this));
return this.loadDocumentStateAfterLoadChanges(oState);
},
loadDocumentStateAfterLoadChanges: DrawingObjectsController.prototype.loadDocumentStateAfterLoadChanges,
checkTrackDrawings: DrawingObjectsController.prototype.checkTrackDrawings,
isTrackingDrawings: DrawingObjectsController.prototype.isTrackingDrawings,
canChangeWrapPolygon: function()
{
return !this.selection.groupSelection && !this.selection.textSelection && !this.selection.chartSelection
&& this.selectedObjects.length === 1 && this.selectedObjects[0].canChangeWrapPolygon && this.selectedObjects[0].canChangeWrapPolygon() && !this.selectedObjects[0].parent.Is_Inline();
},
startChangeWrapPolygon: function()
{
if(this.canChangeWrapPolygon())
{
var bNeedBehindDoc = this.getCompatibilityMode() < AscCommon.document_compatibility_mode_Word15;
if(this.selectedObjects[0].parent.wrappingType !== WRAPPING_TYPE_THROUGH
|| this.selectedObjects[0].parent.wrappingType !== WRAPPING_TYPE_TIGHT
|| this.selectedObjects[0].parent.behindDoc !== bNeedBehindDoc)
{
if(false === this.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : AscCommon.changestype_2_Element_and_Type , Element : this.selectedObjects[0].parent.Get_ParentParagraph(), CheckType : AscCommon.changestype_Paragraph_Content} ))
{
this.document.StartAction(AscDFH.historydescription_Document_GrObjectsChangeWrapPolygon);
this.selectedObjects[0].parent.Set_WrappingType(WRAPPING_TYPE_TIGHT);
this.selectedObjects[0].parent.Set_BehindDoc(bNeedBehindDoc);
this.selectedObjects[0].parent.Check_WrapPolygon();
this.document.Recalculate();
this.document.UpdateInterface();
this.document.FinalizeAction();
}
}
this.resetInternalSelection();
this.selection.wrapPolygonSelection = this.selectedObjects[0];
this.updateOverlay();
}
},
removeById: function(nPageIdx, sId)
{
const oDrawing = AscCommon.g_oTableId.Get_ById(sId);
if(isRealObject(oDrawing))
{
let bHdrFtr = oDrawing.isHdrFtrChild(false);
if(!bHdrFtr)
{
let oPage = this.graphicPages[nPageIdx];
if(isRealObject(oPage))
{
oPage.delObjectById(sId);
}
}
}
},
Remove_ById: function(id)
{
for(var i = 0; i < this.graphicPages.length; ++i)
{
this.removeById(i, id)
}
},
selectById: function(id, pageIndex)
{
this.resetSelection();
var obj = AscCommon.g_oTableId.Get_ById(id), nPageIndex = pageIndex;
if(obj && obj.GraphicObj)
{
if(obj.isHdrFtrChild(false))
{
const oDocContent = obj.GetDocumentContent();
if(oDocContent && oDocContent.GetAbsoluteStartPage() !== obj.PageNum)
{
nPageIndex = obj.PageNum;
}
}
else
{
if(AscFormat.isRealNumber(obj.PageNum))
{
nPageIndex = obj.PageNum;
}
}
obj.GraphicObj.select(this, nPageIndex);
}
},
onChangeDrawingsSelection: function()
{
},
calculateAfterChangeTheme: function()
{
/*todo*/
for(var i = 0; i < this.drawingObjects.length; ++i)
{
this.drawingObjects[i].calculateAfterChangeTheme();
}
editor.SyncLoadImages(this.urlMap);
this.urlMap = [];
},
updateSelectionState: function()
{
return;
},
isChartSelection: function ()
{
var oSelectedor = this.selection.groupSelection ? this.selection.groupSelection : this;
return AscCommon.isRealObject(oSelectedor.chartSelection);
},
getSmartArtSelection: function () {
var groupSelection = this.selection.groupSelection;
if (groupSelection && groupSelection.getObjectType() === AscDFH.historyitem_type_SmartArt) {
return groupSelection;
}
},
isTextSelectionInSmartArt: function ()
{
return !!this.getSmartArtSelection() && this.isTextSelectionUse();
},
drawSelectionPage: function(pageIndex)
{
var oMatrix = null;
if(this.selection.textSelection)
{
if(this.selection.textSelection.selectStartPage === pageIndex)
{
if(this.selection.textSelection.transformText)
{
oMatrix = this.selection.textSelection.transformText.CreateDublicate();
}
this.drawingDocument.UpdateTargetTransform(oMatrix);
this.selection.textSelection.getDocContent().DrawSelectionOnPage(0);
}
}
else if(this.selection.groupSelection)
{
if(this.selection.groupSelection.selectStartPage === pageIndex)
{
this.selection.groupSelection.drawSelectionPage(0);
}
}
else if(this.selection.chartSelection && this.selection.chartSelection.selectStartPage === pageIndex && this.selection.chartSelection.selection.textSelection)
{
if(this.selection.chartSelection.selection.textSelection.transformText)
{
oMatrix = this.selection.chartSelection.selection.textSelection.transformText.CreateDublicate();
}
this.drawingDocument.UpdateTargetTransform(oMatrix);
this.selection.chartSelection.selection.textSelection.getDocContent().DrawSelectionOnPage(0);
}
},
getAllRasterImagesOnPage: function(pageIndex)
{
var ret = [];
if(this.graphicPages[pageIndex])
{
var graphic_page = this.graphicPages[pageIndex];
var hdr_ftr_page = this.getHdrFtrObjectsByPageIndex(pageIndex);
var graphic_array = graphic_page.beforeTextObjects.concat(graphic_page.inlineObjects).concat(graphic_page.behindDocObjects);
graphic_array = graphic_array.concat(hdr_ftr_page.beforeTextObjects).concat(hdr_ftr_page.inlineObjects).concat(hdr_ftr_page.behindDocObjects);
for(var i = 0; i < graphic_array.length; ++i)
{
if(graphic_array[i].getAllRasterImages)
graphic_array[i].getAllRasterImages(ret);
}
}
let oPageBg = this.document.Background;
if(oPageBg && oPageBg.shape)
{
oPageBg.shape.getAllRasterImages(ret);
}
return ret;
},
checkChartTextSelection: DrawingObjectsController.prototype.checkChartTextSelection,
checkNeedResetChartSelection: DrawingObjectsController.prototype.checkNeedResetChartSelection,
addNewParagraph: DrawingObjectsController.prototype.addNewParagraph,
paragraphClearFormatting: function(isClearParaPr, isClearTextPr)
{
this.applyDocContentFunction(CDocumentContent.prototype.ClearParagraphFormatting, [isClearParaPr, isClearTextPr], CTable.prototype.ClearParagraphFormatting);
},
applyDocContentFunction: DrawingObjectsController.prototype.applyDocContentFunction,
applyTextFunction: DrawingObjectsController.prototype.applyTextFunction,
setParagraphSpacing: DrawingObjectsController.prototype.setParagraphSpacing,
setParagraphTabs: DrawingObjectsController.prototype.setParagraphTabs,
setParagraphNumbering: DrawingObjectsController.prototype.setParagraphNumbering,
setParagraphShd: DrawingObjectsController.prototype.setParagraphShd,
setParagraphStyle: DrawingObjectsController.prototype.setParagraphStyle,
setParagraphContextualSpacing: DrawingObjectsController.prototype.setParagraphContextualSpacing,
setParagraphPageBreakBefore: DrawingObjectsController.prototype.setParagraphPageBreakBefore,
setParagraphKeepLines: DrawingObjectsController.prototype.setParagraphKeepLines,
setParagraphKeepNext: DrawingObjectsController.prototype.setParagraphKeepNext,
setParagraphWidowControl: DrawingObjectsController.prototype.setParagraphWidowControl,
setParagraphBorders: DrawingObjectsController.prototype.setParagraphBorders,
paragraphAdd: DrawingObjectsController.prototype.paragraphAdd,
paragraphIncDecFontSize: DrawingObjectsController.prototype.paragraphIncDecFontSize,
paragraphIncDecIndent: DrawingObjectsController.prototype.paragraphIncDecIndent,
setParagraphAlign: DrawingObjectsController.prototype.setParagraphAlign,
setParagraphIndent: DrawingObjectsController.prototype.setParagraphIndent,
getSelectedObjectsBounds: DrawingObjectsController.prototype.getSelectedObjectsBounds,
getContextMenuPosition: DrawingObjectsController.prototype.getContextMenuPosition,
getLeftTopSelectedFromArray: DrawingObjectsController.prototype.getLeftTopSelectedFromArray,
getObjectForCrop: DrawingObjectsController.prototype.getObjectForCrop,
canStartImageCrop: DrawingObjectsController.prototype.canStartImageCrop,
startImageCrop: DrawingObjectsController.prototype.startImageCrop,
endImageCrop: DrawingObjectsController.prototype.endImageCrop,
cropFit: DrawingObjectsController.prototype.cropFit,
cropFill: DrawingObjectsController.prototype.cropFill,
checkRedrawOnChangeCursorPosition: DrawingObjectsController.prototype.checkRedrawOnChangeCursorPosition,
getFromTargetTextObjectContextMenuPosition: function(oTargetTextObject, pageIndex)
{
var dPosX = this.document.TargetPos.X, dPosY = this.document.TargetPos.Y, oTransform = oTargetTextObject.transformText;
return {X: oTransform.TransformPointX(dPosX, dPosY), Y: oTransform.TransformPointY(dPosX, dPosY), PageIndex: this.document.TargetPos.PageNum};
},
getLeftTopSelectedObject: function(pageIndex)
{
if(this.selectedObjects.length > 0)
{
var oRes = this.getLeftTopSelectedObjectByPage(pageIndex);
if(oRes.bSelected === true)
{
return oRes;
}
var aSelectedObjectsCopy = [].concat(this.selectedObjects);
aSelectedObjectsCopy.sort(function(a, b){return a.selectStartPage - b.selectStartPage});
return this.getLeftTopSelectedObjectByPage(aSelectedObjectsCopy[0].selectStartPage);
}
return {X: 0, Y: 0, PageIndex: pageIndex};
},
getLeftTopSelectedObject2: function()
{
if(this.selectedObjects.length > 0)
{
var aSelectedObjectsCopy = [].concat(this.selectedObjects);
aSelectedObjectsCopy.sort(function(a, b){return a.selectStartPage - b.selectStartPage});
return this.getLeftTopSelectedObjectByPage(aSelectedObjectsCopy[0].selectStartPage);
}
return {X: 0, Y: 0, PageIndex: 0};
},
getLeftTopSelectedObjectByPage: function(pageIndex)
{
var oDrawingPage, oRes;
if(this.document.GetDocPosType() === docpostype_HdrFtr)
{
if(this.graphicPages[pageIndex])
{
oDrawingPage = this.graphicPages[pageIndex].hdrFtrPage;
}
}
else
{
if(this.graphicPages[pageIndex])
{
oDrawingPage = this.graphicPages[pageIndex];
}
}
if(oDrawingPage)
{
oRes = this.getLeftTopSelectedFromArray(oDrawingPage.beforeTextObjects, pageIndex);
if(oRes.bSelected)
{
return oRes;
}
oRes = this.getLeftTopSelectedFromArray(oDrawingPage.inlineObjects, pageIndex);
if(oRes.bSelected)
{
return oRes;
}
oRes = this.getLeftTopSelectedFromArray(oDrawingPage.behindDocObjects, pageIndex);
if(oRes.bSelected)
{
return oRes;
}
}
return {X: 0, Y: 0, PageIndex: pageIndex};
},
CheckRange: function(X0, Y0, X1, Y1, Y0Sp, Y1Sp, LeftField, RightField, PageNum, HdrFtrRanges, docContent, bMathWrap)
{
if(isRealObject(this.graphicPages[PageNum]))
{
var Ranges = this.graphicPages[PageNum].CheckRange(X0, Y0, X1, Y1, Y0Sp, Y1Sp, LeftField, RightField, HdrFtrRanges, docContent, bMathWrap);
var ResultRanges = [];
// Уберем лишние отрезки
var Count = Ranges.length;
for ( var Index = 0; Index < Count; Index++ )
{
var Range = Ranges[Index];
if ( Range.X1 > X0 && Range.X0 < X1 )
{
Range.X0 = Math.max( X0, Range.X0 );
Range.X1 = Math.min( X1, Range.X1 );
ResultRanges.push( Range );
}
}
return ResultRanges;
}
return HdrFtrRanges;
},
getTableProps: function()
{
var content = this.getTargetDocContent();
if(content)
return content.Interface_Update_TablePr( true );
return null;
},
startAddShape: function(preset)
{
switch(preset)
{
case "spline":
{
this.changeCurrentState(new AscFormat.SplineBezierState(this));
break;
}
case "polyline1":
{
this.changeCurrentState(new AscFormat.PolyLineAddState(this));
break;
}
case "polyline2":
{
this.changeCurrentState(new AscFormat.AddPolyLine2State(this));
break;
}
default :
{
this.changeCurrentState(new AscFormat.StartAddNewShape(this, preset));
break;
}
}
this.saveDocumentState();
},
endTrackNewShape: DrawingObjectsController.prototype.endTrackNewShape
};
CGraphicObjects.prototype.constructor = CGraphicObjects;
CGraphicObjects.prototype.saveDocumentState = function() {
this.startDocState = null;
if(!this.document) {
return;
}
this.startDocState = this.document.SaveDocumentState(false);
};
CGraphicObjects.prototype.Document_Is_SelectionLocked = function(CheckType)
{
if(CheckType === AscCommon.changestype_ColorScheme)
{
this.Lock.Check(this.Get_Id());
}
};
CGraphicObjects.prototype.documentIsSelectionLocked = function(CheckType)
{
var oDocContent = this.getTargetDocContent();
var oDrawing, i;
var bDelete = (AscCommon.changestype_Delete === CheckType || AscCommon.changestype_Remove === CheckType);
if(AscCommon.changestype_Drawing_Props === CheckType
|| AscCommon.changestype_Image_Properties === CheckType
|| AscCommon.changestype_Delete === CheckType
|| AscCommon.changestype_Remove === CheckType
|| AscCommon.changestype_Paragraph_Content === CheckType
|| AscCommon.changestype_Paragraph_TextProperties === CheckType
|| AscCommon.changestype_Paragraph_AddText === CheckType
|| AscCommon.changestype_ContentControl_Add === CheckType
|| AscCommon.changestype_Paragraph_Properties === CheckType
|| AscCommon.changestype_Document_Content_Add === CheckType)
{
for(i = 0; i < this.selectedObjects.length; ++i)
{
oDrawing = this.selectedObjects[i].parent;
if(bDelete && !oDocContent)
{
oDrawing.CheckDeletingLock();
}
oDrawing.Lock.Check(oDrawing.Get_Id());
}
}
if (oDocContent)
oDocContent.Document_Is_SelectionLocked(CheckType);
};
CGraphicObjects.prototype.getAnimationPlayer = function()
{
return null;
};
CGraphicObjects.prototype.getImageDataFromSelection = DrawingObjectsController.prototype.getImageDataFromSelection;
CGraphicObjects.prototype.putImageToSelection = function(sImageUrl, nWidth, nHeight, replaceMode)
{
let aSelectedObjects = this.getSelectedArray();
if(aSelectedObjects.length > 0 && aSelectedObjects[0].isImage())
{
let oController = this;
this.checkSelectedObjectsAndCallback(function() {
let dWidth = nWidth * AscCommon.g_dKoef_pix_to_mm;
let dHeight = nHeight * AscCommon.g_dKoef_pix_to_mm;
let oSp = aSelectedObjects[0];
oSp.replacePictureData(sImageUrl, dWidth, dHeight, true, replaceMode);
if(oSp.group)
{
oController.selection.groupSelection.resetInternalSelection();
oSp.group.selectObject(oSp, 0);
}
else
{
oController.resetSelection();
oController.selectObject(oSp, 0);
}
}, [], false, 0, []);
}
else
{
if (false === this.document.Document_Is_SelectionLocked(AscCommon.changestype_Paragraph_Content))
{
let oImageData =
{
src: sImageUrl,
Image:
{
width: nWidth,
height: nHeight
}
};
this.document.StartAction();
if(aSelectedObjects.length > 0)
{
this.document.Remove(-1)
}
this.document.AddImages([oImageData]);
this.document.FinalizeAction();
}
}
};
CGraphicObjects.prototype.getPluginSelectionInfo = function()
{
return DrawingObjectsController.prototype.getPluginSelectionInfo.call(this);
};
CGraphicObjects.prototype.getSelectionImageData = DrawingObjectsController.prototype.getSelectionImageData;
CGraphicObjects.prototype.getImageDataForSaving = DrawingObjectsController.prototype.getImageDataForSaving;
CGraphicObjects.prototype.getPresentation = DrawingObjectsController.prototype.getPresentation;
CGraphicObjects.prototype.getHorGuidesPos = function() {
return [];
}
CGraphicObjects.prototype.getVertGuidesPos = function() {
return [];
};
CGraphicObjects.prototype.hitInGuide = function(x, y) {
return null;
};
CGraphicObjects.prototype.onInkDrawerChangeState = DrawingObjectsController.prototype.onInkDrawerChangeState;
CGraphicObjects.prototype.setDrawingDocPosType = function() {
const oDoc = this.document;
if(oDoc && false == this.api.isDocumentRenderer()) {
if (AscCommonWord.docpostype_HdrFtr !== oDoc.CurPos.Type) {
oDoc.SetDocPosType(AscCommonWord.docpostype_DrawingObjects);
oDoc.Selection.Use = true;
oDoc.Selection.Start = true;
}
else {
oDoc.Selection.Use = true;
oDoc.Selection.Start = true;
const CurHdrFtr = oDoc.HdrFtr.CurHdrFtr;
const DocContent = CurHdrFtr.Content;
DocContent.SetDocPosType(AscCommonWord.docpostype_DrawingObjects);
DocContent.Selection.Use = true;
DocContent.Selection.Start = true;
}
}
};
CGraphicObjects.prototype.checkInkState = function() {
if(!this.document) {
return;
}
// if(AscCommonWord.docpostype_HdrFtr === this.document.CurPos.Type) {
// return;
// }
DrawingObjectsController.prototype.checkInkState.call(this);
const oAPI = this.getEditorApi();
if(oAPI.isInkDrawerOn()) {
this.setDrawingDocPosType();
}
};
CGraphicObjects.prototype.saveStartDocState = function() {
if(this.document) {
}
};
function ComparisonByZIndexSimpleParent(obj1, obj2)
{
if(obj1.parent && obj2.parent)
return ComparisonByZIndexSimple(obj1.parent, obj2.parent);
return 0;
}
function ComparisonByZIndexSimple(obj1, obj2)
{
if(AscFormat.isRealNumber(obj1.RelativeHeight) && AscFormat.isRealNumber(obj2.RelativeHeight))
{
if(obj1.RelativeHeight === obj2.RelativeHeight)
{
if(editor && editor.WordControl && editor.WordControl.m_oLogicDocument)
{
return editor.WordControl.m_oLogicDocument.CompareDrawingsLogicPositions(obj2, obj1);
}
}
return obj1.RelativeHeight - obj2.RelativeHeight;
}
if(!AscFormat.isRealNumber(obj1.RelativeHeight) && AscFormat.isRealNumber(obj2.RelativeHeight))
return -1;
if(AscFormat.isRealNumber(obj1.RelativeHeight) && !AscFormat.isRealNumber(obj2.RelativeHeight))
return 1;
return 0;
}
//--------------------------------------------------------export----------------------------------------------------
window['AscCommonWord'] = window['AscCommonWord'] || {};
window['AscCommonWord'].CGraphicObjects = CGraphicObjects;