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

3088 lines
118 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window, undefined){
// Import
var HANDLE_EVENT_MODE_HANDLE = AscFormat.HANDLE_EVENT_MODE_HANDLE;
var HANDLE_EVENT_MODE_CURSOR = AscFormat.HANDLE_EVENT_MODE_CURSOR;
var isRealObject = AscCommon.isRealObject;
var History = AscCommon.History;
var MOVE_DELTA = 1/100000;
var SNAP_DISTANCE = 1.27;
function StartAddNewShape(drawingObjects, preset, nPlaceholderType, bVertical)
{
this.drawingObjects = drawingObjects;
this.preset = preset;
this.bStart = false;
this.bMoved = false;//отошли ли мы от начальной точки
this.startX = null;
this.startY = null;
this.oldConnector = null;
this.placeholderType = nPlaceholderType;
this.bVertical = bVertical;
}
StartAddNewShape.prototype =
{
onMouseDown: function(e, x, y)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
let dStartX = x;
let dStartY = y;
let oNearestPos = this.drawingObjects.getSnapNearestPos(x, y);
if(oNearestPos)
{
dStartX = oNearestPos.x;
dStartY = oNearestPos.y;
}
this.startX = dStartX;
this.startY = dStartY;
this.drawingObjects.arrPreTrackObjects.length = 0;
var layout = null, master = null, slide = null;
if(this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld)
{
if(this.drawingObjects.drawingObjects.getParentObjects)
{
var oParentObjects = this.drawingObjects.drawingObjects.getParentObjects();
if(isRealObject(oParentObjects))
{
layout = oParentObjects.layout;
master = oParentObjects.master;
slide = oParentObjects.slide;
}
}
}
this.drawingObjects.arrPreTrackObjects.push(new AscFormat.NewShapeTrack(this.preset, dStartX, dStartY, this.drawingObjects.getTheme(), master, layout, slide, 0, this.drawingObjects, this.placeholderType, this.bVertical));
this.bStart = true;
this.drawingObjects.swapTrackObjects();
},
onMouseMove: function(e, x, y)
{
if(this.bStart && e.IsLocked)
{
if(!this.bMoved && (Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA ))
this.bMoved = true;
let oNearestPos = this.drawingObjects.getSnapNearestPos(x, y);
let dX = x;
let dY = y;
if(oNearestPos)
{
dX = oNearestPos.x;
dY = oNearestPos.y;
}
this.drawingObjects.arrTrackObjects[0].track(e, dX, dY);
this.drawingObjects.updateOverlay();
}
else
{
if(AscFormat.isConnectorPreset(this.preset)){
var oOldState = this.drawingObjects.curState;
this.drawingObjects.connector = null;
this.drawingObjects.changeCurrentState(new AscFormat.NullState(this.drawingObjects));
var oResult;
this.drawingObjects.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
oResult = this.drawingObjects.curState.onMouseDown(e, x, y, 0);
this.drawingObjects.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
this.drawingObjects.changeCurrentState(oOldState);
if(oResult) {
let oObject = AscCommon.g_oTableId.Get_ById(oResult.objectId);
if(oObject.canConnectTo && oObject.canConnectTo()) {
this.drawingObjects.connector = oObject;
}
}
if(this.drawingObjects.connector !== this.oldConnector){
this.oldConnector = this.drawingObjects.connector;
this.drawingObjects.updateOverlay();
}
else{
this.oldConnector = this.drawingObjects.connector;
}
}
}
},
onMouseUp: function(e, x, y)
{
var bRet = false;
if(this.bStart && (this.drawingObjects.canEdit() || Asc.editor.isDrawSlideshowAnnotations()) && this.drawingObjects.arrTrackObjects.length > 0)
{
bRet = true;
var oThis = this;
var track = oThis.drawingObjects.arrTrackObjects[0];
if(!this.bMoved && this instanceof StartAddNewShape)
{
var ext_x, ext_y;
var oExt = AscFormat.fGetDefaultShapeExtents(this.preset);
ext_x = oExt.x;
ext_y = oExt.y;
this.onMouseMove({IsLocked: true}, this.startX + ext_x, this.startY + ext_y);
}
var oTrack = this.drawingObjects.arrTrackObjects[0];
if(oTrack instanceof AscFormat.PolyLine)
{
if(!oTrack.canCreateShape())
{
this.drawingObjects.clearTrackObjects();
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.updateOverlay();
if(Asc["editor"] && Asc["editor"].wb)
{
if(!e.fromWindow || this.bStart)
{
Asc["editor"].asc_endAddShape();
}
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
return;
}
}
if(this.bAnimCustomPath) {
this.drawingObjects.clearTrackObjects();
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
let oApi = this.drawingObjects.getEditorApi();
let oPresentation = oApi.WordControl && oApi.WordControl.m_oLogicDocument;
if(oPresentation) {
let oCurSlide = oPresentation.GetCurrentSlide();
if(oCurSlide) {
if(oPresentation.IsSelectionLocked(AscCommon.changestype_Timing) === false) {
oPresentation.StartAction(0);
let oTiming;
let aAddedEffects;
aAddedEffects = oCurSlide.addAnimation(AscFormat.PRESET_CLASS_PATH, AscFormat.MOTION_SQUARE, 0, null, this.bReplace);
oTiming = oCurSlide.timing;
if(!oTiming) {
oPresentation.FinalizeAction();
return;
}
for(let nEffect = 0; nEffect < aAddedEffects.length; ++nEffect) {
let oEffect = aAddedEffects[nEffect];
if(!oEffect) {
continue;
}
let oPathShape = null;
oEffect.traverse(function(oChild) {
if(oChild.getObjectType() === AscDFH.historyitem_type_AnimMotion) {
oPathShape = oChild.createPathShape();
return true;
}
return false;
});
if(!oPathShape) {
continue;
}
let oPolylineShape = AscFormat.ExecuteNoHistory(function () {
return oTrack.getShape(false, oPresentation.drawingDocument, oCurSlide.graphicObjects);
}, this, []);
if(!oPolylineShape) {
continue;
}
let oSpPr = oPolylineShape.spPr;
let oXfrm = oSpPr.xfrm;
let oGeometry = null;
let oPath = null;
let dOffX = oXfrm.offX;
let dOffY = oXfrm.offY;
let oObjectBounds = oPathShape.objectBounds;
if(oSpPr.geometry) {
oGeometry = oSpPr.geometry.createDuplicate();
oGeometry.Recalculate(oXfrm.extX, oXfrm.extY);
if(aAddedEffects.length > 1) {
oPath = oGeometry.pathLst[0];
if(oPath && oObjectBounds) {
let oFirstCommand = oPath.ArrPathCommand[0];
if(oFirstCommand && oFirstCommand.id === AscFormat.moveTo) {
dOffX = oObjectBounds.x + oObjectBounds.w/2 - oFirstCommand.X;
dOffY = oObjectBounds.y + oObjectBounds.h/2 - oFirstCommand.Y;
}
}
}
}
oPathShape.updateAnimation(dOffX, dOffY, oXfrm.extX, oXfrm.extY, oXfrm.rot, oGeometry);
oEffect.cTn.setPresetID(AscFormat.MOTION_CUSTOM_PATH);
oEffect.cTn.setPresetSubtype(0);
}
oPresentation.FinalizeAction();
if(Asc["editor"] && Asc["editor"].wb)
{
if(!e.fromWindow || this.bStart)
{
Asc["editor"].asc_endAddShape();
}
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
oPresentation.Document_UpdateInterfaceState();
if(this.bPreview && aAddedEffects.length > 0) {
let oTiming = oCurSlide.timing;
if(oTiming) {
oCurSlide.graphicObjects.resetSelection();
oTiming.resetSelection();
for(let nEffect = 0; nEffect < aAddedEffects.length; ++nEffect) {
aAddedEffects[nEffect].select();
}
oPresentation.StartAnimationPreview();
oTiming.checkSelectedAnimMotionShapes();
}
}
else {
oPresentation.DrawingDocument.OnRecalculateSlide(oPresentation.CurPage);
}
}
}
}
return;
}
let callback = function(bLock, isClickMouseEvent)
{
if(bLock)
{
let oApi = oThis.drawingObjects.getEditorApi();
let oDoc = null;
if (oApi.editorId === AscCommon.c_oEditorId.Presentation)
{
oDoc = oApi.WordControl && oApi.WordControl.m_oLogicDocument;
oDoc.StartAction(AscDFH.historydescription_Presentation_AddShape);
}
else if (oApi.wb)
{
History.Create_NewPoint(AscDFH.historydescription_CommonStatesAddNewShape);
oDoc = oApi.wb;
oDoc.StartAction(AscDFH.historydescription_Spreadsheet_AddShape);
}
var shape = track.getShape(false, oThis.drawingObjects.getDrawingDocument(), oThis.drawingObjects.drawingObjects, isClickMouseEvent);
if(!(oThis.drawingObjects.drawingObjects && oThis.drawingObjects.drawingObjects.cSld))
{
if(shape.spPr.xfrm.offX < 0)
{
shape.spPr.xfrm.setOffX(0);
}
if(shape.spPr.xfrm.offY < 0)
{
shape.spPr.xfrm.setOffY(0);
}
}
oThis.drawingObjects.drawingObjects.getWorksheetModel && shape.setWorksheet(oThis.drawingObjects.drawingObjects.getWorksheetModel());
if(oThis.drawingObjects.drawingObjects && oThis.drawingObjects.drawingObjects.cSld)
{
shape.setParent(oThis.drawingObjects.drawingObjects);
shape.setRecalculateInfo();
}
shape.addToDrawingObjects(undefined, AscCommon.c_oAscCellAnchorType.cellanchorTwoCell);
shape.checkDrawingBaseCoords();
let oAPI = oThis.drawingObjects.getEditorApi();
if(!oAPI.isDrawInkMode())
{
oThis.drawingObjects.checkChartTextSelection();
oThis.drawingObjects.resetSelection();
shape.select(oThis.drawingObjects, 0);
if(oThis.preset === "textRect")
{
oThis.drawingObjects.selection.textSelection = shape;
shape.recalculate();
shape.selectionSetStart(e, x, y, 0);
shape.selectionSetEnd(e, x, y, 0);
}
}
oThis.drawingObjects.startRecalculate();
if(!oAPI.isDrawInkMode())
{
oThis.drawingObjects.drawingObjects.sendGraphicObjectProps();
}
if(oThis.preset && oThis.preset.startsWith("actionButton"))
{
let sHyperText = "", sHyperValue, sHyperTooltip;
switch (oThis.preset) {
case "actionButtonBackPrevious": {
sHyperValue = "ppaction://hlinkshowjump?jump=previousslide";
sHyperTooltip = AscCommon.translateManager.getValue("Previous Slide");
break;
}
case "actionButtonBeginning": {
sHyperValue = "ppaction://hlinkshowjump?jump=firstslide";
sHyperTooltip = AscCommon.translateManager.getValue("First Slide");
break;
}
case "actionButtonEnd": {
sHyperValue = "ppaction://hlinkshowjump?jump=lastslide";
sHyperTooltip = AscCommon.translateManager.getValue("Last Slide");
break;
}
case "actionButtonForwardNext": {
sHyperValue = "ppaction://hlinkshowjump?jump=nextslide";
sHyperTooltip = AscCommon.translateManager.getValue("Next Slide");
break;
}
case "actionButtonHome": {
sHyperValue = "ppaction://hlinkshowjump?jump=firstslide";
sHyperTooltip = AscCommon.translateManager.getValue("First Slide");
break;
}
case "actionButtonReturn": {
sHyperValue = "ppaction://hlinkshowjump?jump=previousslide";
sHyperTooltip = AscCommon.translateManager.getValue("Previous Slide");
break;
}
}
if(sHyperValue) {
oAPI.sendEvent("asc_onDialogAddHyperlink", new Asc.CHyperlinkProperty({Text: sHyperText, Value: sHyperValue, ToolTip: sHyperTooltip}));
}
}
let pos = (oAPI.editorId === AscCommon.c_oEditorId.Presentation)
? {x: shape.x, y: shape.y}
: {x: track.x, y: track.y};
// for now don't create macro for polyline
let macroData = (oThis instanceof PolyLineAddState2)
? undefined
: {
type: track.presetGeom,
pos: pos,
extX: track.extX,
extY: track.extY,
fill: track.overlayObject.brush,
border: track.overlayObject.pen,
base: shape.drawingBase ? shape.drawingBase : null
};
if (oAPI.editorId === AscCommon.c_oEditorId.Presentation)
oDoc.FinalizeAction(AscDFH.historydescription_Presentation_AddShape, undefined, macroData);
else
oDoc.FinalizeAction(AscDFH.historydescription_Spreadsheet_AddShape, macroData);
}
oThis.drawingObjects.updateOverlay();
};
if(Asc.editor.isDrawSlideshowAnnotations())
{
AscFormat.ExecuteNoHistory(function () {
callback(true, e.ClickCount);
}, this, []);
}
else if(Asc.editor.checkObjectsLock)
{
Asc.editor.checkObjectsLock([AscCommon.g_oIdCounter.Get_NewId()], callback);
}
else
{
callback(true, e.ClickCount);
}
}
this.drawingObjects.clearTrackObjects();
this.drawingObjects.clearPreTrackObjects();
if(Asc["editor"] && Asc["editor"].wb)
{
if(!e.fromWindow || this.bStart)
{
Asc["editor"].asc_endAddShape();
}
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
return bRet;
}
};
function checkEmptyPlaceholderContent(content)
{
if(!content){
return content;
}
var oShape = content.Parent && content.Parent.parent;
if (oShape) {
if(content.Is_Empty()){
if(oShape.isPlaceholder && oShape.isPlaceholder()) {
return content;
}
if(content.isDocumentContentInSmartArtShape && content.isDocumentContentInSmartArtShape()) {
return content;
}
}
if(oShape.txWarpStruct){
return content;
}
if(oShape.recalcInfo && oShape.recalcInfo.warpGeometry){
return content;
}
var oBodyPr;
if(oShape.getBodyPr){
oBodyPr = oShape.getBodyPr();
if(oBodyPr.vertOverflow !== AscFormat.nVOTOverflow){
return content;
}
}
var oParagraph = content.GetCurrentParagraph();
if(oParagraph && oParagraph.IsEmptyWithBullet()) {
return content;
}
}
return null;
}
function NullState(drawingObjects)
{
this.drawingObjects = drawingObjects;
this.startTargetTextObject = null;
this.lastMoveHandler = null;
}
NullState.prototype =
{
checkRedrawOnMouseDown: function(oStartContent, oStartPara)
{
this.drawingObjects.checkRedrawOnChangeCursorPosition(oStartContent, oStartPara);
},
onMouseDown: function(e, x, y, pageIndex)
{
let start_target_doc_content, end_target_doc_content, selected_comment_index = -1;
let oStartPara = null;
let bHandleMode = this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE;
let sHitGuideId = this.drawingObjects.hitInGuide(x, y);
let oAnimPlayer = this.drawingObjects.getAnimationPlayer && this.drawingObjects.getAnimationPlayer();
let oAPI = this.drawingObjects.getEditorApi();
if(bHandleMode)
{
start_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if(start_target_doc_content)
{
oStartPara = start_target_doc_content.GetCurrentParagraph();
if(!oStartPara.IsEmpty())
{
oStartPara = null;
}
}
this.startTargetTextObject = AscFormat.getTargetTextObject(this.drawingObjects);
}
else
{
if(oAPI.editorId === AscCommon.c_oEditorId.Presentation)
{
if(oAPI.isFormatPainterOn())
{
let oPainterData = oAPI.getFormatPainterData();
let sType = "default";
if(oPainterData)
{
if(oPainterData.isDrawingData())
{
sType = AscCommon.Cursors.ShapeCopy;
}
else
{
sType = AscCommon.Cursors.TextCopy;
}
}
return {cursorType: sType, objectId: "1"};
}
}
}
var ret;
ret = this.drawingObjects.handleSlideComments(e, x, y, pageIndex);
if(ret)
{
if(ret.result)
{
return ret.result;
}
selected_comment_index = ret.selectedIndex;
}
var handleAnimLables = null;
var oTiming = this.drawingObjects && this.drawingObjects.drawingObjects.timing;
if(oTiming)
{
handleAnimLables = oTiming.onMouseDown(e, x, y, bHandleMode);
}
var selection = this.drawingObjects.selection;
if(!handleAnimLables)
{
if(selection.groupSelection)
{
ret = AscFormat.handleSelectedObjects(this.drawingObjects, e, x, y, selection.groupSelection, pageIndex, false);
if(ret)
{
if(bHandleMode)
{
this.checkRedrawOnMouseDown(start_target_doc_content, oStartPara);
AscCommon.CollaborativeEditing.Update_ForeignCursorsPositions();
}
return ret;
}
ret = AscFormat.handleFloatObjects(this.drawingObjects, selection.groupSelection.arrGraphicObjects, e, x, y, selection.groupSelection, pageIndex, false);
if(ret)
{
if(bHandleMode)
{
this.checkRedrawOnMouseDown(start_target_doc_content, oStartPara);
AscCommon.CollaborativeEditing.Update_ForeignCursorsPositions();
}
return ret;
}
}
else if(selection.chartSelection)
{}
ret = AscFormat.handleSelectedObjects(this.drawingObjects, e, x, y, null, pageIndex, false);
if(ret)
{
if(bHandleMode)
{
this.checkRedrawOnMouseDown(start_target_doc_content, oStartPara);
AscCommon.CollaborativeEditing.Update_ForeignCursorsPositions();
}
return ret;
}
ret = AscFormat.handleFloatObjects(this.drawingObjects, this.drawingObjects.getDrawingArray(), e, x, y, null, pageIndex, false);
if(ret)
{
if(bHandleMode)
{
this.checkRedrawOnMouseDown(start_target_doc_content, oStartPara);
AscCommon.CollaborativeEditing.Update_ForeignCursorsPositions();
}
return ret;
}
}
if(bHandleMode)
{
let bRet = this.drawingObjects.checkChartTextSelection(true);
if(e.ClickCount < 2)
{
this.drawingObjects.resetSelection(undefined, undefined, undefined, !!handleAnimLables);
if(handleAnimLables)
{
if(oTiming)
{
oTiming.checkSelectedAnimMotionShapes();
}
}
}
if(start_target_doc_content ||
selected_comment_index > -1 ||
bRet ||
handleAnimLables)
{
this.drawingObjects.drawingObjects.showDrawingObjects();
}
if(this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld)
{
if(!this.drawingObjects.isSlideShow() && !handleAnimLables)
{
this.drawingObjects.stX = x;
this.drawingObjects.stY = y;
this.drawingObjects.selectionRect = {x : x, y : y, w: 0, h: 0};
this.drawingObjects.changeCurrentState(new TrackSelectionRect(this.drawingObjects));
}
}
if(oAnimPlayer)
{
if(oAnimPlayer.onClick())
{
return true;
}
}
if(handleAnimLables)
{
return handleAnimLables;
}
}
else
{
if(this.lastMoveHandler)
{
if(!this.drawingObjects.isSlideShow())
{
var oRet = {};
oRet.objectId = this.lastMoveHandler.Get_Id();
oRet.bMarker = false;
oRet.cursorType = "default";
oRet.tooltip = null;
return oRet;
}
if(handleAnimLables)
{
return handleAnimLables;
}
}
}
if(!oAnimPlayer)
{
let oGuide = AscCommon.g_oTableId.Get_ById(sHitGuideId);
if(oGuide)
{
if(!bHandleMode)
{
let bHor = oGuide.isHorizontal();
return {cursorType: bHor ? "ns-resize" : "ew-resize", objectId: "1"};
}
else
{
if(e.Button !== AscCommon.g_mouse_button_right)
{
this.drawingObjects.addPreTrackObject(new AscFormat.CGuideTrack(oGuide));
this.drawingObjects.changeCurrentState(new TrackGuideState(this.drawingObjects, oGuide, x, y))
}
return true;
}
}
}
return null;
},
onMouseMove: function(e, x, y, pageIndex)
{
let aDrawings = this.drawingObjects.getDrawingArray();
let _x = x, _y = y, oDrawing;
this.lastMoveHandler = null;
for(let nDrawing = aDrawings.length - 1; nDrawing > -1; --nDrawing) {
oDrawing = aDrawings[nDrawing];
if(oDrawing.onMouseMove(e, _x, _y)) {
this.lastMoveHandler = oDrawing;
_x = -1000;
}
}
this.drawingObjects.checkShowMediaControlOnHover(this.lastMoveHandler);
},
onMouseUp: function(e, x, y, pageIndex)
{
var oTiming = this.drawingObjects && this.drawingObjects.drawingObjects.timing;
if(oTiming)
{
if(oTiming.onMouseDown(e, x, y, false))
{
editor.WordControl.m_oLogicDocument.noShowContextMenu = true;
}
}
}
};
function SlicerState(drawingObjects, oSlicer) {
this.drawingObjects = drawingObjects;
this.slicer = oSlicer;
}
SlicerState.prototype.onMouseDown = function (e, x, y, pageIndex) {
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {cursorType: "default", objectId: this.slicer.Get_Id()};
}
return null;
};
SlicerState.prototype.onMouseMove = function (e, x, y, pageIndex) {
if(!e.IsLocked) {
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
this.slicer.onMouseMove(e, x, y, pageIndex);
};
SlicerState.prototype.onMouseUp = function (e, x, y, pageIndex) {
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {cursorType: "default", objectId: this.slicer.Get_Id()};
}
var bRet = this.slicer.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
return bRet;
};
function ControlState(drawingObjects, oControl) {
AscCommon.CDrawingControllerStateBase.call(this, drawingObjects);
this.control = oControl;
}
ControlState.prototype = Object.create(AscCommon.CDrawingControllerStateBase.prototype);
ControlState.prototype.constructor = ControlState;
ControlState.prototype.superclass = AscCommon.CDrawingControllerStateBase;
ControlState.prototype.onMouseDown = function (e, x, y, pageIndex) {
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {cursorType: "pointer", objectId: this.control.Get_Id()};
}
return this.control.onMouseDown(e, x, y, pageIndex, this.controller);
};
ControlState.prototype.onMouseMove = function (e, x, y, pageIndex) {
if(!e.IsLocked && this.control.isNeedResetState()) {
return this.emulateMouseUp(e, x, y, pageIndex);
}
this.control.onMouseMove(e, x, y, pageIndex, this.controller);
};
ControlState.prototype.onMouseUp = function (e, x, y, pageIndex) {
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {cursorType: "default", objectId: this.control.Get_Id()};
}
var bRet = this.control.onMouseUp(e, x, y, pageIndex, this.controller);
if (this.control.isNeedResetState()) {
this.changeControllerState(new NullState(this.drawingObjects));
}
return bRet;
};
ControlState.prototype.getCursorInfo = function () {
};
function TrackSelectionRect(drawingObjects)
{
this.drawingObjects = drawingObjects;
}
TrackSelectionRect.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {cursorType: "default", objectId: "1"};
}
return null;
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.selectionRect = {x : this.drawingObjects .stX, y : this.drawingObjects .stY, w : x - this.drawingObjects .stX, h : y - this.drawingObjects .stY};
editor.WordControl.m_oDrawingDocument.m_oWordControl.OnUpdateOverlay(true);
},
onMouseUp: function(e, x, y, pageIndex)
{
var _glyph_index;
var _glyphs_array;
if(this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld)
{
_glyphs_array = this.drawingObjects.drawingObjects.cSld.spTree;
}
if(_glyphs_array)
{
var _glyph, _glyph_transform;
var _xlt, _ylt, _xrt, _yrt, _xrb, _yrb, _xlb, _ylb;
var _rect_l = Math.min(this.drawingObjects.selectionRect.x, this.drawingObjects.selectionRect.x + this.drawingObjects.selectionRect.w);
var _rect_r = Math.max(this.drawingObjects.selectionRect.x, this.drawingObjects.selectionRect.x + this.drawingObjects.selectionRect.w);
var _rect_t = Math.min(this.drawingObjects.selectionRect.y, this.drawingObjects.selectionRect.y + this.drawingObjects.selectionRect.h);
var _rect_b = Math.max(this.drawingObjects.selectionRect.y, this.drawingObjects.selectionRect.y + this.drawingObjects.selectionRect.h);
for(_glyph_index = 0; _glyph_index < _glyphs_array.length; ++_glyph_index)
{
_glyph = _glyphs_array[_glyph_index];
_glyph_transform = _glyph.transform;
_xlt = _glyph_transform.TransformPointX(0, 0);
_ylt = _glyph_transform.TransformPointY(0, 0);
_xrt = _glyph_transform.TransformPointX( _glyph.extX, 0);
_yrt = _glyph_transform.TransformPointY( _glyph.extX, 0);
_xrb = _glyph_transform.TransformPointX( _glyph.extX, _glyph.extY);
_yrb = _glyph_transform.TransformPointY( _glyph.extX, _glyph.extY);
_xlb = _glyph_transform.TransformPointX(0, _glyph.extY);
_ylb = _glyph_transform.TransformPointY(0, _glyph.extY);
if((_xlb >= _rect_l && _xlb <= _rect_r) && (_xrb >= _rect_l && _xrb <= _rect_r)
&& (_xlt >= _rect_l && _xlt <= _rect_r) && (_xrt >= _rect_l && _xrt <= _rect_r) &&
(_ylb >= _rect_t && _ylb <= _rect_b) && (_yrb >= _rect_t && _yrb <= _rect_b)
&& (_ylt >= _rect_t && _ylt <= _rect_b) && (_yrt >= _rect_t && _yrt <= _rect_b))
{
this.drawingObjects.selectObject(_glyph, pageIndex);
}
}
}
this.drawingObjects.selectionRect = null;
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
editor.WordControl.m_oDrawingDocument.m_oWordControl.OnUpdateOverlay(true);
editor.WordControl.m_oLogicDocument.Document_UpdateInterfaceState();
}
};
function TrackGuideState(drawingObjects, oGuide, dStartX, dStartY) {
this.drawingObjects = drawingObjects;
this.guide = oGuide;
this.tracked = false;
this.startX = dStartX;
this.startY = dStartY;
let oTrack = this.drawingObjects.arrPreTrackObjects[0];
if(oTrack) {
let dPos = AscFormat.GdPosToMm(this.guide.pos);
dPos = (dPos * 10 + 0.5 >> 0) / 10;
let oConvertedPos = editor.WordControl.m_oDrawingDocument.ConvertCoordsToCursorWR(dStartX, dStartY, 0);
editor.sendEvent("asc_onTrackGuide", dPos, oConvertedPos.X, oConvertedPos.Y);
}
}
TrackGuideState.prototype.onMouseDown = function (e, x, y, pageIndex) {
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
let bHor = this.guide.isHorizontal();
return {cursorType: bHor ? "ns-resize" : "ew-resize" , objectId: "1"};
}
return null;
};
TrackGuideState.prototype.onMouseMove = function (e, x, y, pageIndex) {
if(!e.IsLocked) {
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
let bHor = this.guide.isHorizontal();
if(!this.tracked) {
if(bHor && Math.abs(y - this.startY) > MOVE_DELTA ||
!bHor && Math.abs(x - this.startX) > MOVE_DELTA) {
this.tracked = true;
this.drawingObjects.swapTrackObjects();
this.onMouseMove(e, x, y, pageIndex);
return;
}
}
else {
let oTrack = this.drawingObjects.arrTrackObjects[0];
if(oTrack) {
let oNearestPos = this.drawingObjects.getSnapNearestPos(x, y);
let dX = x;
let dY = y;
if(oNearestPos) {
dX = oNearestPos.x;
dY = oNearestPos.y;
}
oTrack.track(dX, dY);
let oConvertedPos = editor.WordControl.m_oDrawingDocument.ConvertCoordsToCursorWR(bHor ? x : dX, !bHor ? y : dY, 0);
let dGdPos = oTrack.getPos();
let dPos = AscFormat.GdPosToMm(dGdPos);
dPos = (dPos * 10 + 0.5 >> 0) / 10;
editor.sendEvent("asc_onTrackGuide", dPos, oConvertedPos.X, oConvertedPos.Y)
this.drawingObjects.updateOverlay();
}
}
};
TrackGuideState.prototype.onMouseUp = function (e, x, y, pageIndex) {
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
let bHor = this.guide.isHorizontal();
return {cursorType: bHor ? "ew-resize" : "ns-resize", objectId: "1"};
}
if(this.tracked) {
let oPresentation = editor.WordControl.m_oLogicDocument;
if(false === oPresentation.Document_Is_SelectionLocked(AscCommon.changestype_ViewPr, undefined, undefined, [])) {
this.drawingObjects.trackEnd();
oPresentation.Recalculate();
}
}
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.clearTrackObjects();
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
editor.sendEvent("asc_onTrackGuide");
};
function PreChangeAdjState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
PreChangeAdjState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject && this.majorObject.Get_Id(), bMarker: true, cursorType: "crosshair"};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ChangeAdjState(this.drawingObjects, this.majorObject));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function ChangeAdjState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
ChangeAdjState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject && this.majorObject.Get_Id(), bMarker: true, cursorType: "crosshair"};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
var t = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.getDrawingDocument());
for(var i = 0; i < this.drawingObjects.arrTrackObjects.length; ++i){
this.drawingObjects.arrTrackObjects[i].track(t.x, t.y);
}
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if(this.drawingObjects.canEdit())
{
if(!this.drawingObjects.checkSelectedObjectsProtection())
{
var trackObjects = [].concat(this.drawingObjects.arrTrackObjects);
var drawingObjects = this.drawingObjects;
this.drawingObjects.checkSelectedObjectsAndCallback(function()
{
var oOriginalObjects = [];
var oMapOriginalsIds = {};
for(var i = 0; i < trackObjects.length; ++i){
trackObjects[i].trackEnd();
if(trackObjects[i].originalObject && !trackObjects[i].processor3D){
oOriginalObjects.push(trackObjects[i].originalObject);
oMapOriginalsIds[trackObjects[i].originalObject.Get_Id()] = true;
}
}
var aAllConnectors = drawingObjects.getAllConnectorsByDrawings(oOriginalObjects, [], undefined, true);
for(i = 0; i < aAllConnectors.length; ++i){
if(!oMapOriginalsIds[aAllConnectors[i].Get_Id()]){
aAllConnectors[i].calculateTransform();
}
}
drawingObjects.startRecalculate();
},[], false, AscDFH.historydescription_CommonDrawings_ChangeAdj);
}
}
this.drawingObjects.clearTrackObjects();
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function PreRotateState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
PreRotateState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new RotateState(this.drawingObjects, this.majorObject));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function RotateState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
RotateState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject && this.majorObject.Get_Id(), bMarker: true, cursorType: "crosshair"};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.getDrawingDocument());
this.drawingObjects.handleRotateTrack(e, coords.x, coords.y);
},
onMouseUp: function(e, x, y, pageIndex)
{
if(this.drawingObjects.canEdit() && this.bSamePos !== true)
{
var tracks = [].concat(this.drawingObjects.arrTrackObjects);
var group = this.group;
var drawingObjects = this.drawingObjects;
var oThis = this;
var bIsMoveState = (this instanceof MoveState);
var bIsTrackInChart = (tracks.length > 0 && (tracks[0] instanceof AscFormat.MoveChartObjectTrack));
var bCopyOnMove = e.CtrlKey && bIsMoveState && !bIsTrackInChart;
var bCopyOnMoveInGroup = (e.CtrlKey && oThis instanceof MoveInGroupState && !oThis.hasObjectInSmartArt);
var i, j;
var copy;
if(bCopyOnMove)
{
this.drawingObjects.resetSelection();
var oIdMap = {};
var oCopyPr = new AscFormat.CCopyObjectProperties();
oCopyPr.idMap = oIdMap;
var aCopies = [];
History.Create_NewPoint(AscDFH.historydescription_CommonDrawings_CopyCtrl);
for(i = 0; i < tracks.length; ++i)
{
tracks[i].checkDrawingPartWithHistory();
copy = tracks[i].originalObject.copy(oCopyPr);
oIdMap[tracks[i].originalObject.Id] = copy.Id;
this.drawingObjects.drawingObjects.getWorksheetModel && copy.setWorksheet(this.drawingObjects.drawingObjects.getWorksheetModel());
if(this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld)
{
copy.setParent2(this.drawingObjects.drawingObjects);
if(!copy.spPr || !copy.spPr.xfrm
|| ((copy.getObjectType() === AscDFH.historyitem_type_GroupShape || copy.getObjectType() === AscDFH.historyitem_type_SmartArt) && !copy.spPr.xfrm.isNotNullForGroup() || copy.getObjectType() !== AscDFH.historyitem_type_GroupShape && !copy.spPr.xfrm.isNotNull()))
{
copy.recalculateTransform();
}
}
if(tracks[i].originalObject.drawingBase)
{
var drawingObject = tracks[i].originalObject.drawingBase;
var metrics = drawingObject.getGraphicObjectMetrics();
AscFormat.SetXfrmFromMetrics(copy, metrics);
copy.drawingBase = drawingObject;
}
copy.addToDrawingObjects();
aCopies.push(copy);
tracks[i].originalObject = copy;
tracks[i].trackEnd(false, true);
this.drawingObjects.selectObject(copy, 0);
}
if(!(this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld))
{
if(History.StartTransaction && History.EndTransaction)
{
History.StartTransaction();
}
AscFormat.ExecuteNoHistory(function(){drawingObjects.checkSelectedObjectsAndCallback(function(){}, []);}, this, []);
if(History.StartTransaction && History.EndTransaction)
{
History.EndTransaction();
}
if(this.drawingObjects.checkSlicerCopies)
{
this.drawingObjects.checkSlicerCopies(aCopies);
}
}
else
{
this.drawingObjects.startRecalculate();
this.drawingObjects.drawingObjects.sendGraphicObjectProps();
}
AscFormat.fResetConnectorsIds(aCopies, oIdMap);
}
else
{
if(bCopyOnMoveInGroup)
{
if(!this.drawingObjects.checkSelectedObjectsProtection())
{
this.drawingObjects.checkSelectedObjectsAndCallback(function(){
var oIdMap = {};
var aCopies = [];
var oCopyPr = new AscFormat.CCopyObjectProperties();
oCopyPr.idMap = oIdMap;
group.resetSelection();
for(i = 0; i < tracks.length; ++i)
{
copy = tracks[i].originalObject.copy(oCopyPr);
aCopies.push(copy);
oThis.drawingObjects.drawingObjects.getWorksheetModel && copy.setWorksheet(oThis.drawingObjects.drawingObjects.getWorksheetModel());
if(oThis.drawingObjects.drawingObjects && oThis.drawingObjects.drawingObjects.cSld)
{
copy.setParent2(oThis.drawingObjects.drawingObjects);
}
copy.setGroup(tracks[i].originalObject.group);
copy.group.addToSpTree(copy.group.length, copy);
tracks[i].originalObject = copy;
tracks[i].trackEnd(false);
group.selectObject(copy, 0);
}
AscFormat.fResetConnectorsIds(aCopies, oIdMap);
if(group)
{
group.updateCoordinatesAfterInternalResize();
}
if(!oThis.drawingObjects.drawingObjects || !oThis.drawingObjects.drawingObjects.cSld)
{
var min_x, min_y, drawing, arr_x2 = [], arr_y2 = [], oTransform;
for(i = 0; i < oThis.drawingObjects.selectedObjects.length; ++i)
{
drawing = oThis.drawingObjects.selectedObjects[i];
var rot = AscFormat.isRealNumber(drawing.spPr.xfrm.rot) ? drawing.spPr.xfrm.rot : 0;
rot = AscFormat.normalizeRotate(rot);
arr_x2.push(drawing.spPr.xfrm.offX);
arr_y2.push(drawing.spPr.xfrm.offY);
arr_x2.push(drawing.spPr.xfrm.offX + drawing.spPr.xfrm.extX);
arr_y2.push(drawing.spPr.xfrm.offY + drawing.spPr.xfrm.extY);
if (AscFormat.checkNormalRotate(rot))
{
min_x = drawing.spPr.xfrm.offX;
min_y = drawing.spPr.xfrm.offY;
}
else
{
min_x = drawing.spPr.xfrm.offX + drawing.spPr.xfrm.extX/2 - drawing.spPr.xfrm.extY/2;
min_y = drawing.spPr.xfrm.offY + drawing.spPr.xfrm.extY/2 - drawing.spPr.xfrm.extX/2;
arr_x2.push(min_x);
arr_y2.push(min_y);
arr_x2.push(min_x + drawing.spPr.xfrm.extY);
arr_y2.push(min_y + drawing.spPr.xfrm.extX);
}
if(min_x < 0)
{
drawing.spPr.xfrm.setOffX(drawing.spPr.xfrm.offX - min_x);
}
if(min_y < 0)
{
drawing.spPr.xfrm.setOffY(drawing.spPr.xfrm.offY - min_y);
}
drawing.checkDrawingBaseCoords();
drawing.recalculateTransform();
oTransform = drawing.transform;
arr_x2.push(oTransform.TransformPointX(0, 0));
arr_y2.push(oTransform.TransformPointY(0, 0));
arr_x2.push(oTransform.TransformPointX(drawing.extX, 0));
arr_y2.push(oTransform.TransformPointY(drawing.extX, 0));
arr_x2.push(oTransform.TransformPointX(drawing.extX, drawing.extY));
arr_y2.push(oTransform.TransformPointY(drawing.extX, drawing.extY));
arr_x2.push(oTransform.TransformPointX(0, drawing.extY));
arr_y2.push(oTransform.TransformPointY(0, drawing.extY));
}
oThis.drawingObjects.drawingObjects.checkGraphicObjectPosition(0, 0, Math.max.apply(Math, arr_x2), Math.max.apply(Math, arr_y2));
}
if(oThis.drawingObjects.checkSlicerCopies)
{
oThis.drawingObjects.checkSlicerCopies(aCopies);
}
}, [], false, AscDFH.historydescription_CommonDrawings_EndTrack);
}
}
else
{
var oOriginalObjects = [];
var oMapOriginalsId = {};
var oMapAdditionalForCheck = {};
for(i = 0; i < tracks.length; ++i)
{
var oOrigObject = tracks[i].originalObject && tracks[i].chartSpace ? tracks[i].chartSpace : tracks[i].originalObject;
if(tracks[i].originalObject && !tracks[i].processor3D){
oOriginalObjects.push(oOrigObject);
oMapOriginalsId[oOrigObject.Get_Id()] = true;
var oGroup = oOrigObject.getMainGroup && oOrigObject.getMainGroup();
if(oGroup){
if(!oGroup.selected){
oMapAdditionalForCheck[oGroup.Get_Id()] = oGroup;
}
}
else{
if(!oOrigObject.selected){
oMapAdditionalForCheck[oOrigObject.Get_Id()] = oOrigObject;
}
}
if(Array.isArray(oOrigObject.arrGraphicObjects)){
for(j = 0; j < oOrigObject.arrGraphicObjects.length; ++j){
oMapOriginalsId[oOrigObject.arrGraphicObjects[j].Get_Id()] = true;
}
}
}
}
var aAllConnectors = drawingObjects.getAllConnectorsByDrawings(oOriginalObjects, [], undefined, true);
var bFlag = ((oThis instanceof MoveInGroupState) || (oThis instanceof MoveState));
var aConnectors = [];
for(i = 0; i < aAllConnectors.length; ++i){
var stSp = AscCommon.g_oTableId.Get_ById(aAllConnectors[i].getStCxnId());
var endSp = AscCommon.g_oTableId.Get_ById(aAllConnectors[i].getEndCxnId());
if((stSp && !oMapOriginalsId[stSp.Get_Id()]) || (endSp && !oMapOriginalsId[endSp.Get_Id()]) || !oMapOriginalsId[aAllConnectors[i].Get_Id()]){
var oGroup = aAllConnectors[i].getMainGroup && aAllConnectors[i].getMainGroup();
aConnectors.push(aAllConnectors[i]);
if(oGroup){
oMapAdditionalForCheck[oGroup.Id] = oGroup;
}
else{
oMapAdditionalForCheck[aAllConnectors[i].Get_Id()] = aAllConnectors[i];
}
}
}
var aAdditionalForCheck = [];
for(i in oMapAdditionalForCheck){
if(oMapAdditionalForCheck.hasOwnProperty(i)){
if(!oMapAdditionalForCheck[i].selected){
aAdditionalForCheck.push(oMapAdditionalForCheck[i]);
}
}
}
if(!this.drawingObjects.checkSelectedObjectsProtection())
{
this.drawingObjects.checkSelectedObjectsAndCallback(function () {
for(i = 0; i < tracks.length; ++i){
tracks[i].checkDrawingPartWithHistory();
tracks[i].trackEnd(false, bFlag);
}
if(tracks.length === 1 && tracks[0].chartSpace){
return;
}
var oGroupMaps = {};
for(i = 0; i < aConnectors.length; ++i){
aConnectors[i].calculateTransform(bFlag);
var oGroup = aConnectors[i].getMainGroup && aConnectors[i].getMainGroup();
if(oGroup){
oGroupMaps[oGroup.Id] = oGroup;
}
}
for(var key in oGroupMaps){
if(oGroupMaps.hasOwnProperty(key)){
oGroupMaps[key].updateCoordinatesAfterInternalResize();
}
}
if(group)
{
group.updateCoordinatesAfterInternalResize();
}
if(!oThis.drawingObjects.drawingObjects || !oThis.drawingObjects.drawingObjects.cSld)
{
var min_x, min_y, drawing, arr_x2 = [], arr_y2 = [], oTransform;
for(i = 0; i < oThis.drawingObjects.selectedObjects.length; ++i)
{
drawing = oThis.drawingObjects.selectedObjects[i];
var rot = AscFormat.isRealNumber(drawing.spPr.xfrm.rot) ? drawing.spPr.xfrm.rot : 0;
rot = AscFormat.normalizeRotate(rot);
arr_x2.push(drawing.spPr.xfrm.offX);
arr_y2.push(drawing.spPr.xfrm.offY);
arr_x2.push(drawing.spPr.xfrm.offX + drawing.spPr.xfrm.extX);
arr_y2.push(drawing.spPr.xfrm.offY + drawing.spPr.xfrm.extY);
if (AscFormat.checkNormalRotate(rot))
{
min_x = drawing.spPr.xfrm.offX;
min_y = drawing.spPr.xfrm.offY;
}
else
{
min_x = drawing.spPr.xfrm.offX + drawing.spPr.xfrm.extX/2 - drawing.spPr.xfrm.extY/2;
min_y = drawing.spPr.xfrm.offY + drawing.spPr.xfrm.extY/2 - drawing.spPr.xfrm.extX/2;
arr_x2.push(min_x);
arr_y2.push(min_y);
arr_x2.push(min_x + drawing.spPr.xfrm.extY);
arr_y2.push(min_y + drawing.spPr.xfrm.extX);
}
if(min_x < 0)
{
drawing.spPr.xfrm.setOffX(drawing.spPr.xfrm.offX - min_x);
}
if(min_y < 0)
{
drawing.spPr.xfrm.setOffY(drawing.spPr.xfrm.offY - min_y);
}
drawing.checkDrawingBaseCoords && drawing.checkDrawingBaseCoords();
drawing.recalculateTransform && drawing.recalculateTransform();
oTransform = drawing.transform;
arr_x2.push(oTransform.TransformPointX(0, 0));
arr_y2.push(oTransform.TransformPointY(0, 0));
arr_x2.push(oTransform.TransformPointX(drawing.extX, 0));
arr_y2.push(oTransform.TransformPointY(drawing.extX, 0));
arr_x2.push(oTransform.TransformPointX(drawing.extX, drawing.extY));
arr_y2.push(oTransform.TransformPointY(drawing.extX, drawing.extY));
arr_x2.push(oTransform.TransformPointX(0, drawing.extY));
arr_y2.push(oTransform.TransformPointY(0, drawing.extY));
}
oThis.drawingObjects.drawingObjects.checkGraphicObjectPosition(0, 0, Math.max.apply(Math, arr_x2), Math.max.apply(Math, arr_y2));
}
}, [], false, AscDFH.historydescription_CommonDrawings_EndTrack, aAdditionalForCheck
);
}
}
}
}
this.drawingObjects.resetTracking();
}
};
function PreResizeState(drawingObjects, majorObject, cardDirection)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.cardDirection = cardDirection;
this.handleNum = this.majorObject.getNumByCardDirection(cardDirection);
}
PreResizeState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ResizeState(this.drawingObjects, this.majorObject, this.handleNum, this.cardDirection));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function ResizeState(drawingObjects, majorObject, handleNum, cardDirection)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.handleNum = handleNum;
this.cardDirection = cardDirection;
}
ResizeState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
var start_arr = this.drawingObjects.getDrawingArray();
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.getDrawingDocument());
let dX = coords.x;
let dY = coords.y;
let oNearestPos = this.drawingObjects.getSnapNearestPos(coords.x, coords.y);
if(oNearestPos)
{
dX = oNearestPos.x;
dY = oNearestPos.y;
}
var resize_coef = this.majorObject.getResizeCoefficients(this.handleNum, dX, dY, start_arr, this.drawingObjects);
this.drawingObjects.trackResizeObjects(resize_coef.kd1, resize_coef.kd2, e, dX, dY);
if(this.drawingObjects.drawingObjects.cSld)
{
if(AscFormat.isRealNumber(resize_coef.snapX) && !resize_coef.horGuideSnap)
{
this.drawingObjects.getDrawingDocument().DrawVerAnchor(pageIndex, resize_coef.snapX);
}
if(AscFormat.isRealNumber(resize_coef.snapY) && !resize_coef.vertGuideSnap)
{
this.drawingObjects.getDrawingDocument().DrawHorAnchor(pageIndex, resize_coef.snapY);
}
}
this.drawingObjects.updateOverlay();
},
onMouseUp: RotateState.prototype.onMouseUp
};
function PreMoveState(drawingObjects, startX, startY, shift, ctrl, majorObject, majorObjectIsSelected, bInside, bGroupSelection)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = startX;
this.startY = startY;
this.shift = shift;
this.ctrl = ctrl;
this.majorObjectIsSelected = majorObjectIsSelected;
this.bInside = bInside;
this.bGroupSelection = bGroupSelection;
}
PreMoveState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "move", bMarker: true};
}
else{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
if(Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || pageIndex !== this.majorObject.selectStartPage)
{
if(this.drawingObjects.isSlideShow())
{
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
return;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new MoveState(this.drawingObjects, this.majorObject, this.startX, this.startY));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
}
},
onMouseUp: function(e, x, y, pageIndex)
{
return AscFormat.handleMouseUpPreMoveState(this.drawingObjects, e, x, y, pageIndex, true)
}
};
function MoveState(drawingObjects, majorObject, startX, startY)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = startX;
this.startY = startY;
var arr_x = [], arr_y = [];
for(var i = 0; i < this.drawingObjects.arrTrackObjects.length; ++i)
{
var track = this.drawingObjects.arrTrackObjects[i];
var transform = track.originalObject.transform;
arr_x.push(transform.TransformPointX(0, 0));
arr_y.push(transform.TransformPointY(0, 0));
arr_x.push(transform.TransformPointX(track.originalObject.extX, 0));
arr_y.push(transform.TransformPointY(track.originalObject.extX, 0));
arr_x.push(transform.TransformPointX(track.originalObject.extX, track.originalObject.extY));
arr_y.push(transform.TransformPointY(track.originalObject.extX, track.originalObject.extY));
arr_x.push(transform.TransformPointX(0, track.originalObject.extY));
arr_y.push(transform.TransformPointY(0, track.originalObject.extY));
}
this.rectX = Math.min.apply(Math, arr_x);
this.rectY = Math.min.apply(Math, arr_y);
this.rectW = Math.max.apply(Math, arr_x) - this.rectX;
this.rectH = Math.max.apply(Math, arr_y) - this.rectY;
this.bSamePos = true;
}
MoveState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "move", bMarker: true};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
let aTracks = this.drawingObjects.arrTrackObjects;
let nTracksCount = aTracks.length;
let nTrack;
let bIsSlide = false;
if(this.drawingObjects &&
this.drawingObjects.drawingObjects &&
this.drawingObjects.drawingObjects.cSld)
{
bIsSlide = true;
}
let dResultX, dResultY;
if(!e.ShiftKey)
{
dResultX = x;
dResultY = y;
}
else
{
let dAbsDistX = Math.abs(this.startX - x);
let dAbsDistY = Math.abs(this.startY - y);
if(dAbsDistX > dAbsDistY)
{
dResultX = x;
dResultY = this.startY;
}
else
{
dResultX = this.startX;
dResultY = y;
}
}
let aDrawings = this.drawingObjects.getAllObjectsOnPage(0);
let dMinDx = null, dMinDy = null;
let dDx, dDy;
let dCurDx = dResultX - this.startX;
let dCurDy = dResultY - this.startY;
let aSnapX = [], aSnapY = [];
let oCurTrackOriginal;
let aTrackSnapX, aTrackSnapY;
let nSnapPos;
let oSnapData;
let aVertGuidesPos = this.drawingObjects.getVertGuidesPos();
let aHorGuidesPos = this.drawingObjects.getHorGuidesPos();
//-------------------------------------------------
for(nTrack = 0; nTrack < nTracksCount; ++nTrack)
{
oCurTrackOriginal = aTracks[nTrack].originalObject;
aTrackSnapX = oCurTrackOriginal.snapArrayX;
if(!aTrackSnapX)
{
continue;
}
if(aDrawings.length > 0)
{
for(nSnapPos = 0; nSnapPos < aTrackSnapX.length; ++nSnapPos)
{
oSnapData = AscFormat.GetMinSnapDistanceXObject(aTrackSnapX[nSnapPos] + dCurDx, aDrawings, undefined, aVertGuidesPos);
if(oSnapData)
{
dDx = oSnapData.dist;
if(dDx !== null)
{
if(dMinDx === null)
{
dMinDx = dDx;
!oSnapData.guide && aSnapX.push(oSnapData.pos);
}
else
{
if(AscFormat.fApproxEqual(dMinDx, dDx, 0.01))
{
!oSnapData.guide && aSnapX.push(oSnapData.pos);
}
else if(Math.abs(dMinDx) > Math.abs(dDx))
{
dMinDx = dDx;
aSnapX.length = 0;
!oSnapData.guide && aSnapX.push(oSnapData.pos);
}
}
}
}
}
}
}
if(AscFormat.fApproxEqual(dResultX, this.startX))
{
dMinDx = 0;
}
//-----------------------------
for(nTrack = 0; nTrack < aTracks.length; ++nTrack)
{
oCurTrackOriginal = aTracks[nTrack].originalObject;
aTrackSnapY = oCurTrackOriginal.snapArrayY;
if(!aTrackSnapY)
{
continue;
}
if(aDrawings.length > 0)
{
for(nSnapPos = 0; nSnapPos < aTrackSnapY.length; ++nSnapPos)
{
oSnapData = AscFormat.GetMinSnapDistanceYObject(aTrackSnapY[nSnapPos] + dCurDy, aDrawings, undefined, aHorGuidesPos);
if(oSnapData)
{
dDy = oSnapData.dist;
if(dDy !== null)
{
if(dMinDy === null)
{
dMinDy = dDy;
!oSnapData.guide && aSnapY.push(oSnapData.pos);
}
else
{
if(AscFormat.fApproxEqual(dMinDy, dDy, 0.01))
{
!oSnapData.guide && aSnapY.push(oSnapData.pos);
}
else if(Math.abs(dMinDy) > Math.abs(dDy))
{
dMinDy = dDy;
aSnapY.length = 0;
!oSnapData.guide && aSnapY.push(oSnapData.pos);
}
}
}
}
}
}
}
if(AscFormat.fApproxEqual(dResultY, this.startY))
{
dMinDy = 0;
}
let oMajorBounds = this.majorObject.getRectBounds();
let oNearestSnapPos = this.drawingObjects.getSnapNearestPos(oMajorBounds.l + dCurDx, oMajorBounds.t + dCurDy);
if(dMinDx === null || Math.abs(dMinDx) > SNAP_DISTANCE)
{
dMinDx = 0;
if(oNearestSnapPos)
{
if(!AscFormat.fApproxEqual(dResultX, this.startX))
{
let dDeltaX = oNearestSnapPos.x - oMajorBounds.x;
dMinDx = dDeltaX - dResultX + this.startX;
}
}
}
else
{
if(bIsSlide)
{
for(nSnapPos = 0; nSnapPos < aSnapX.length; ++nSnapPos)
{
this.drawingObjects.getDrawingDocument().DrawVerAnchor(pageIndex, aSnapX[nSnapPos]);
}
}
}
if(dMinDy === null || Math.abs(dMinDy) > SNAP_DISTANCE)
{
dMinDy = 0;
if(oNearestSnapPos)
{
if(!AscFormat.fApproxEqual(dResultY, this.startY))
{
let dDeltaY = oNearestSnapPos.y - oMajorBounds.y;
dMinDy = dDeltaY - dResultY + this.startY;
}
}
}
else
{
if(bIsSlide)
{
for(nSnapPos = 0; nSnapPos < aSnapY.length; ++nSnapPos)
{
this.drawingObjects.getDrawingDocument().DrawHorAnchor(pageIndex, aSnapY[nSnapPos]);
}
}
}
dDx = dResultX - this.startX + dMinDx;
dDy = dResultY - this.startY + dMinDy;
let oCheckPosition = this.drawingObjects.checkGraphicObjectPosition(this.rectX + dDx, this.rectY + dDy, this.rectW, this.rectH);
for(nTrack = 0; nTrack < nTracksCount; ++nTrack)
{
aTracks[nTrack].track(dDx + oCheckPosition.x, dDy + oCheckPosition.y, pageIndex);
}
this.bSamePos = (AscFormat.fApproxEqual(dDx + oCheckPosition.x, 0) && AscFormat.fApproxEqual(dDy + oCheckPosition.y, 0));
this.drawingObjects.updateOverlay();
},
onMouseUp: RotateState.prototype.onMouseUp
};
function PreMoveInGroupState(drawingObjects, group, startX, startY, ShiftKey, CtrlKey, majorObject, majorObjectIsSelected)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.startX = startX;
this.startY = startY;
this.ShiftKey = ShiftKey;
this.CtrlKey = CtrlKey;
this.majorObject = majorObject;
this.majorObjectIsSelected = majorObjectIsSelected;
}
PreMoveInGroupState.prototype =
{
onMouseDown: function(e, x,y,pageIndex)
{},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
if(Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || pageIndex !== this.majorObject.selectStartPage)
{
if(this.drawingObjects.isSlideShow())
{
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
return;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new MoveInGroupState(this.drawingObjects, this.majorObject, this.group, this.startX, this.startY));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
}
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.CtrlKey && this.majorObjectIsSelected)
{
this.group.deselectObject(this.majorObject);
if(this.group.selectedObjects.length === 0){
this.drawingObjects.resetInternalSelection();
}
this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.sendGraphicObjectProps && this.drawingObjects.drawingObjects.sendGraphicObjectProps();
this.drawingObjects.updateOverlay();
}
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function MoveInGroupState(drawingObjects, majorObject, group, startX, startY)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.group = group;
this.startX = startX;
this.startY = startY;
this.bSamePos = true;
this.hasObjectInSmartArt = false;
var arr_x = [], arr_y = [];
for(var i = 0; i < this.drawingObjects.arrTrackObjects.length; ++i)
{
var track = this.drawingObjects.arrTrackObjects[i];
const oOriginalObject = track.originalObject;
var transform = oOriginalObject.transform;
arr_x.push(transform.TransformPointX(0, 0));
arr_y.push(transform.TransformPointY(0, 0));
arr_x.push(transform.TransformPointX(oOriginalObject.extX, 0));
arr_y.push(transform.TransformPointY(oOriginalObject.extX, 0));
arr_x.push(transform.TransformPointX(oOriginalObject.extX, oOriginalObject.extY));
arr_y.push(transform.TransformPointY(oOriginalObject.extX, oOriginalObject.extY));
arr_x.push(transform.TransformPointX(0, oOriginalObject.extY));
arr_y.push(transform.TransformPointY(0, oOriginalObject.extY));
if (!this.hasObjectInSmartArt)
{
this.hasObjectInSmartArt = oOriginalObject.isObjectInSmartArt();
}
}
this.rectX = Math.min.apply(Math, arr_x);
this.rectY = Math.min.apply(Math, arr_y);
this.rectW = Math.max.apply(Math, arr_x);
this.rectH = Math.max.apply(Math, arr_y);
}
MoveInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "move", bMarker: true};
}
},
onMouseMove: MoveState.prototype.onMouseMove,
onMouseUp: MoveState.prototype.onMouseUp
};
function PreRotateInGroupState(drawingObjects, group, majorObject)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
}
PreRotateInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new RotateInGroupState(this.drawingObjects, this.group, this.majorObject))
},
onMouseUp: PreMoveInGroupState.prototype.onMouseUp
};
function RotateInGroupState(drawingObjects, group, majorObject)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
}
RotateInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: RotateState.prototype.onMouseMove,
onMouseUp: MoveInGroupState.prototype.onMouseUp
};
function PreResizeInGroupState(drawingObjects, group, majorObject, cardDirection)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
this.cardDirection = cardDirection;
}
PreResizeInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ResizeInGroupState(this.drawingObjects, this.group, this.majorObject, this.majorObject.getNumByCardDirection(this.cardDirection), this.cardDirection));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: PreMoveInGroupState.prototype.onMouseUp
};
function ResizeInGroupState(drawingObjects, group, majorObject, handleNum, cardDirection)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
this.handleNum = handleNum;
this.cardDirection = cardDirection;
}
ResizeInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: ResizeState.prototype.onMouseMove,
onMouseUp: MoveInGroupState.prototype.onMouseUp
};
function PreChangeAdjInGroupState(drawingObjects, group)
{
this.drawingObjects = drawingObjects;
this.group = group;
}
PreChangeAdjInGroupState.prototype =
{
onMouseDown: function(e, x, y,pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.group.Get_Id(), bMarker: true, cursorType: "crosshair"};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ChangeAdjInGroupState(this.drawingObjects, this.group));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: PreMoveInGroupState.prototype.onMouseUp
};
function ChangeAdjInGroupState(drawingObjects, group)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = drawingObjects.arrTrackObjects[0].originalShape;
}
ChangeAdjInGroupState.prototype =
{
onMouseDown: function(e, x, y,pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
return {objectId: this.majorObject.Get_Id(), cursorType: "crosshair", bMarker: true};
}
},
onMouseMove: ChangeAdjState.prototype.onMouseMove,
onMouseUp: MoveInGroupState.prototype.onMouseUp
};
function TextAddState(drawingObjects, majorObject, startX, startY, button)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = startX;
this.startY = startY;
this.button = button;
this.bIsSelectionEmpty = this.isSelectionEmpty();
}
TextAddState.prototype =
{
isSelectionEmpty: function()
{
if(this.majorObject.getObjectType() === AscDFH.historyitem_type_GraphicFrame)
{
if(this.majorObject.graphicObject)
{
return this.majorObject.graphicObject.IsSelectionEmpty();
}
return true;
}
var oContent = this.majorObject.getDocContent && this.majorObject.getDocContent();
if(oContent)
{
if(oContent.IsSelectionEmpty()) {
var oParagraph = oContent.GetCurrentParagraph();
if(oParagraph && oParagraph.IsEmptyWithBullet()) {
return true;
}
}
return false;
}
return true;
},
checkSelectionEmpty: function()
{
this.bIsSelectionEmpty = this.isSelectionEmpty();
},
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
{
var sId = this.majorObject.Id;
if(this.majorObject.chart
&& this.majorObject.chart.getObjectType
&& this.majorObject.chart.getObjectType() === AscDFH.historyitem_type_ChartSpace) {
sId = this.majorObject.chart.Id;
}
return {objectId: sId, cursorType: "text", content: this.majorObject.getDocContent && this.majorObject.getDocContent()};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
if(this.button === AscCommon.g_mouse_button_right)
{
return this.endState(e, x, y, pageIndex);
}
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
if(AscFormat.isRealNumber(this.startX) && AscFormat.isRealNumber(this.startY))
{
if(Math.abs(this.startX - x) < 0.001 && Math.abs(this.startY - y) < 0.001)
{
return;
}
this.startX = undefined;
this.startY = undefined;
}
this.majorObject.selectionSetEnd(e, x, y, pageIndex);
if(!(this.majorObject.getObjectType() === AscDFH.historyitem_type_GraphicFrame && this.majorObject.graphicObject.Selection.Type2 === table_Selection_Border))
this.drawingObjects.updateSelectionState();
if(this.bIsSelectionEmpty !== this.isSelectionEmpty())
{
this.drawingObjects.drawingObjects.showDrawingObjects();
}
this.checkSelectionEmpty();
},
onMouseUp: function(e, x, y, pageIndex)
{
var oldCtrl;
if(this.drawingObjects.isSlideShow())
{
oldCtrl = e.CtrlKey;
e.CtrlKey = true;
}
this.majorObject.selectionSetEnd(e, x, y, pageIndex);
if(this.drawingObjects.isSlideShow())
{
e.CtrlKey = oldCtrl;
}
return this.endState(e, x, y, pageIndex);
},
endState: function(e, x, y, pageIndex)
{
this.drawingObjects.updateSelectionState();
this.drawingObjects.drawingObjects.sendGraphicObjectProps();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
this.drawingObjects.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
this.drawingObjects.noNeedUpdateCursorType = true;
var oApi = this.drawingObjects.getEditorApi();
var cursor_type = this.drawingObjects.curState.onMouseDown(e, x, y, pageIndex);
if(cursor_type && cursor_type.hyperlink)
{
this.drawingObjects.drawingObjects.showDrawingObjects();
if(this.drawingObjects.isSlideShow())
{
cursor_type.hyperlink.Visited = true;
oApi.sync_HyperlinkClickCallback(cursor_type.hyperlink.Value);
}
}
this.drawingObjects.noNeedUpdateCursorType = false;
this.drawingObjects.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if(oApi)
{
if(oApi.editorId === AscCommon.c_oEditorId.Presentation)
{
let oPresentation = oApi.WordControl && oApi.WordControl.m_oLogicDocument;
if(oApi.isFormatPainterOn())
{
this.drawingObjects.paragraphFormatPaste2();
if (oApi.canTurnOffFormatPainter())
{
oApi.sync_PaintFormatCallback(c_oAscFormatPainterState.kOff);
if(oPresentation)
{
oPresentation.OnMouseMove(e, x, y, pageIndex)
}
}
}
else if(oApi.isMarkerFormat)
{
if(oPresentation)
{
if(oPresentation.HighlightColor)
{
var oC = oPresentation.HighlightColor;
oPresentation.SetParagraphHighlight(true, oC.r, oC.g, oC.b);
}
else
{
oPresentation.SetParagraphHighlight(false);
}
oApi.sync_MarkerFormatCallback(true);
}
}
}
else if(oApi.editorId === AscCommon.c_oEditorId.Spreadsheet)
{
this.drawingObjects.checkFormatPainterOnMouseEvent();
}
}
}
};
function SplineBezierState(drawingObjects, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
SplineBezierState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
this.drawingObjects.startTrackPos = {x: x, y: y, pageIndex: pageIndex};
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addPreTrackObject(new AscFormat.Spline(this.drawingObjects, this.drawingObjects.getTheme(), null, null, null, pageIndex));
this.drawingObjects.arrPreTrackObjects[0].path.push(new AscFormat.SplineCommandMoveTo(x, y));
this.drawingObjects.changeCurrentState(new SplineBezierState33(this.drawingObjects, x, y,pageIndex, this.bAnimCustomPath, this.bReplace, this.bPreview));
if(!this.bAnimCustomPath) {
this.drawingObjects.checkChartTextSelection();
this.drawingObjects.resetSelection();
}
this.drawingObjects.updateOverlay();
},
onMouseMove: function(e, X, Y, pageIndex)
{
},
onMouseUp: function(e, X, Y, pageIndex)
{
if(Asc["editor"] && Asc["editor"].wb)
{
Asc["editor"].asc_endAddShape();
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function SplineBezierState33(drawingObjects, startX, startY, pageIndex, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
SplineBezierState33.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
},
onMouseMove: function(e, x, y, pageIndex)
{
var startPos = this.drawingObjects.startTrackPos;
if(startPos.x === x && startPos.y === y && startPos.pageIndex === pageIndex)
return;
var tr_x, tr_y;
if(pageIndex === startPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, startPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.arrTrackObjects[0].path.push(new AscFormat.SplineCommandLineTo(tr_x, tr_y));
this.drawingObjects.changeCurrentState(new SplineBezierState2(this.drawingObjects, this.pageIndex, this.bAnimCustomPath, this.bReplace, this.bPreview));
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
}
};
function SplineBezierState2(drawingObjects,pageIndex, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
SplineBezierState2.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
var startPos = this.drawingObjects.startTrackPos;
var tr_x, tr_y;
if(pageIndex === startPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, startPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.arrTrackObjects[0].path[1].changeLastPoint(tr_x, tr_y);
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.fromWindow)
{
var nOldClickCount = e.ClickCount;
e.ClickCount = 2;
this.onMouseDown(e, x, y, pageIndex);
e.ClickCount = nOldClickCount;
return;
}
if( e.ClickCount < 2)
{
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.x;
tr_y = tr_point.y;
}
this.drawingObjects.changeCurrentState(new SplineBezierState3(this.drawingObjects,tr_x, tr_y, this.pageIndex, this.bAnimCustomPath, this.bReplace, this.bPreview));
}
}
};
function SplineBezierState3(drawingObjects, startX, startY, pageIndex, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.startX = startX;
this.startY = startY;
this.polylineFlag = true;
this.pageIndex = pageIndex;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
SplineBezierState3.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(x === this.startX && y === this.startY && pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
return;
}
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
var x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
var spline = this.drawingObjects.arrTrackObjects[0];
x0 = spline.path[0].x;
y0 = spline.path[0].y;
x3 = spline.path[1].x;
y3 = spline.path[1].y;
x6 = tr_x;
y6 = tr_y;
var vx = (x6 - x0)/6;
var vy = (y6 - y0)/6;
x2 = x3 - vx;
y2 = y3 - vy;
x4 = x3 + vx;
y4 = y3 + vy;
x1 = (x0 + x2)*0.5;
y1 = (y0 + y2)*0.5;
x5 = (x4 + x6)*0.5;
y5 = (y4 + y6)*0.5;
spline.path.length = 1;
spline.path.push(new AscFormat.SplineCommandBezier(x1, y1, x2, y2, x3, y3));
spline.path.push(new AscFormat.SplineCommandBezier(x4, y4, x5, y5, x6, y6));
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new SplineBezierState4(this.drawingObjects, this.pageIndex, this.bAnimCustomPath, this.bReplace, this.bPreview));
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.fromWindow)
{
var nOldClickCount = e.ClickCount;
e.ClickCount = 2;
this.onMouseDown(e, x, y, pageIndex);
e.ClickCount = nOldClickCount;
return;
}
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
function SplineBezierState4(drawingObjects, pageIndex, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
SplineBezierState4.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
var spline = this.drawingObjects.arrTrackObjects[0];
var lastCommand = spline.path[spline.path.length-1];
var preLastCommand = spline.path[spline.path.length-2];
var x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
if(spline.path[spline.path.length-3].id == 0)
{
x0 = spline.path[spline.path.length-3].x;
y0 = spline.path[spline.path.length-3].y;
}
else
{
x0 = spline.path[spline.path.length-3].x3;
y0 = spline.path[spline.path.length-3].y3;
}
x3 = preLastCommand.x3;
y3 = preLastCommand.y3;
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
x6 = tr_x;
y6 = tr_y;
var vx = (x6 - x0)/6;
var vy = (y6 - y0)/6;
x2 = x3 - vx;
y2 = y3 - vy;
x4 = x3 + vx;
y4 = y3 + vy;
x5 = (x4 + x6)*0.5;
y5 = (y4 + y6)*0.5;
if(spline.path[spline.path.length-3].id == 0)
{
preLastCommand.x1 = (x0 + x2)*0.5;
preLastCommand.y1 = (y0 + y2)*0.5;
}
preLastCommand.x2 = x2;
preLastCommand.y2 = y2;
preLastCommand.x3 = x3;
preLastCommand.y3 = y3;
lastCommand.x1 = x4;
lastCommand.y1 = y4;
lastCommand.x2 = x5;
lastCommand.y2 = y5;
lastCommand.x3 = x6;
lastCommand.y3 = y6;
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.fromWindow)
{
var nOldClickCount = e.ClickCount;
e.ClickCount = 2;
this.onMouseDown(e, x, y, pageIndex);
e.ClickCount = nOldClickCount;
return;
}
if(e.ClickCount < 2 )
{
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.changeCurrentState(new SplineBezierState5(this.drawingObjects, tr_x, tr_y, this.pageIndex, this.bAnimCustomPath, this.bReplace, this.bPreview));
}
}
};
function SplineBezierState5(drawingObjects, startX, startY,pageIndex, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.startX = startX;
this.startY = startY;
this.polylineFlag = true;
this.pageIndex = pageIndex;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
SplineBezierState5.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(x === this.startX && y === this.startY && pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
return;
}
var spline = this.drawingObjects.arrTrackObjects[0];
var lastCommand = spline.path[spline.path.length-1];
var x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
if(spline.path[spline.path.length-2].id == 0)
{
x0 = spline.path[spline.path.length-2].x;
y0 = spline.path[spline.path.length-2].y;
}
else
{
x0 = spline.path[spline.path.length-2].x3;
y0 = spline.path[spline.path.length-2].y3;
}
x3 = lastCommand.x3;
y3 = lastCommand.y3;
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
x6 = tr_x;
y6 = tr_y;
var vx = (x6 - x0)/6;
var vy = (y6 - y0)/6;
x2 = x3 - vx;
y2 = y3 - vy;
x1 = (x2+x1)*0.5;
y1 = (y2+y1)*0.5;
x4 = x3 + vx;
y4 = y3 + vy;
x5 = (x4 + x6)*0.5;
y5 = (y4 + y6)*0.5;
if(spline.path[spline.path.length-2].id == 0)
{
lastCommand.x1 = x1;
lastCommand.y1 = y1;
}
lastCommand.x2 = x2;
lastCommand.y2 = y2;
spline.path.push(new AscFormat.SplineCommandBezier(x4, y4, x5, y5, x6, y6));
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new SplineBezierState4(this.drawingObjects, this.pageIndex, this.bAnimCustomPath, this.bReplace, this.bPreview));
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.ClickCount >= 2 || e.fromWindow)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
function PolyLineAddState(drawingObjects, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
PolyLineAddState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
this.drawingObjects.startTrackPos = {x: x, y: y, pageIndex:pageIndex};
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addTrackObject(new AscFormat.PolyLine(this.drawingObjects, this.drawingObjects.getTheme(), null, null, null, pageIndex));
this.drawingObjects.arrTrackObjects[0].addPoint(x, y);
if(!this.bAnimCustomPath) {
this.drawingObjects.checkChartTextSelection();
this.drawingObjects.resetSelection();
}
this.drawingObjects.updateOverlay();
var _min_distance = this.drawingObjects.convertPixToMM(1);
this.drawingObjects.changeCurrentState(new PolyLineAddState2(this.drawingObjects, _min_distance, this.bAnimCustomPath, this.bReplace, this.bPreview));
},
onMouseMove: function()
{},
onMouseUp: function()
{
if(Asc["editor"] && Asc["editor"].wb)
{
Asc["editor"].asc_endAddShape();
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function PolyLineAddState2(drawingObjects, minDistance, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
PolyLineAddState2.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.arrTrackObjects[0].tryAddPoint(tr_x, tr_y);
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if(this.drawingObjects.arrTrackObjects[0].canCreateShape())
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
else
{
this.drawingObjects.clearTrackObjects();
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
if(Asc["editor"] && Asc["editor"].wb)
{
Asc["editor"].asc_endAddShape();
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
}
}
};
function AddPolyLine2State(drawingObjects, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
AddPolyLine2State.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
this.drawingObjects.startTrackPos = {x: x, y: y, pageIndex : pageIndex};
this.drawingObjects.checkChartTextSelection();
if(!this.bAnimCustomPath) {
this.drawingObjects.resetSelection();
}
this.drawingObjects.updateOverlay();
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addPreTrackObject(new AscFormat.PolyLine(this.drawingObjects, this.drawingObjects.getTheme(), null, null, null, pageIndex));
this.drawingObjects.arrPreTrackObjects[0].addPoint(x, y);
this.drawingObjects.changeCurrentState(new AddPolyLine2State2(this.drawingObjects, x, y, this.bAnimCustomPath, this.bReplace, this.bPreview));
},
onMouseMove: function(e, x, y, pageIndex)
{},
onMouseUp: function(e, x, y, pageIndex)
{
}
};
function AddPolyLine2State2(drawingObjects, x, y, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.X = x;
this.Y = y;
this.polylineFlag = true;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
AddPolyLine2State2.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
if(e.ClickCount > 1)
{
if(Asc["editor"] && Asc["editor"].wb)
{
Asc["editor"].asc_endAddShape();
}
else if(editor && editor.sync_EndAddShape)
{
editor.sync_EndAddShape();
}
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.clearTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(this.X !== x || this.Y !== y || this.drawingObjects.startTrackPos.pageIndex !== pageIndex)
{
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.arrTrackObjects[0].tryAddPoint(tr_x, tr_y);
this.drawingObjects.changeCurrentState(new AddPolyLine2State3(this.drawingObjects, this.bAnimCustomPath, this.bReplace, this.bPreview));
}
},
onMouseUp: function(e, x, y, pageIndex)
{
}
};
function AddPolyLine2State3(drawingObjects, bAnimCustomPath, bReplace, bPreview)
{
this.drawingObjects = drawingObjects;
this.lastX = -1000;
this.lastY = -1000;
this.polylineFlag = true;
this.bAnimCustomPath = bAnimCustomPath;
this.bReplace = bReplace;
this.bPreview = bPreview;
}
AddPolyLine2State3.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: "1", bMarker: true, cursorType: "crosshair"};
this.lastX = x;
this.lastY = y;
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
if(e.ClickCount > 1)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
else
{
var oTrack = this.drawingObjects.arrTrackObjects[0];
oTrack.replaceLastPoint(tr_x, tr_y, false);
oTrack.addPoint(tr_x, tr_y, true);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(AscFormat.fApproxEqual(x, this.lastX) && AscFormat.fApproxEqual(y, this.lastY)) {
return;
}
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
var oTrack = this.drawingObjects.arrTrackObjects[0];
if(!e.IsLocked && oTrack.getPointsCount() > 1)
{
oTrack.replaceLastPoint(tr_x, tr_y, true);
}
else
{
oTrack.tryAddPoint(tr_x, tr_y);
}
this.drawingObjects.updateOverlay();
this.lastX = x;
this.lastY = y;
},
onMouseUp: function(e, x, y, pageIndex)
{
this.lastX = x;
this.lastY = y;
if(e.fromWindow)
{
var nOldClickCount = e.ClickCount;
e.ClickCount = 2;
this.onMouseDown(e, x, y, pageIndex);
e.ClickCount = nOldClickCount;
return;
}
if(e.ClickCount > 1)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
function TrackTextState(drawingObjects, majorObject, x, y) {
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = x;
this.startY = y;
this.bMove = false;
}
TrackTextState.prototype.onMouseDown = function(e, x, y){
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: this.majorObject.Id, bMarker: true, cursorType: "default"};
return null;
};
TrackTextState.prototype.onMouseMove = function(e, x, y){
if(Math.abs(x - this.startX) > MOVE_DELTA || Math.abs(y - this.startY) > MOVE_DELTA)
{
this.bMove = true;
this.drawingObjects.getDrawingDocument().StartTrackText();
}
};
TrackTextState.prototype.onMouseUp = function(e, x, y, pageIndex){
if(!this.bMove)
{
this.majorObject.selectionSetStart(e, x, y, 0);
this.majorObject.selectionSetEnd(e, x, y, 0);
this.drawingObjects.updateSelectionState();
this.drawingObjects.drawingObjects.sendGraphicObjectProps();
}
this.drawingObjects.changeCurrentState(new AscFormat.NullState(this.drawingObjects));
};
//--------------------------------------------------------export----------------------------------------------------
window['AscFormat'] = window['AscFormat'] || {};
window['AscFormat'].MOVE_DELTA = MOVE_DELTA;
window['AscFormat'].SNAP_DISTANCE = SNAP_DISTANCE;
window['AscFormat'].StartAddNewShape = StartAddNewShape;
window['AscFormat'].NullState = NullState;
window['AscFormat'].SlicerState = SlicerState;
window['AscFormat'].ControlState = ControlState;
window['AscFormat'].PreChangeAdjState = PreChangeAdjState;
window['AscFormat'].PreRotateState = PreRotateState;
window['AscFormat'].RotateState = RotateState;
window['AscFormat'].PreResizeState = PreResizeState;
window['AscFormat'].PreMoveState = PreMoveState;
window['AscFormat'].MoveState = MoveState;
window['AscFormat'].PreMoveInGroupState = PreMoveInGroupState;
window['AscFormat'].MoveInGroupState = MoveInGroupState;
window['AscFormat'].PreRotateInGroupState = PreRotateInGroupState;
window['AscFormat'].PreResizeInGroupState = PreResizeInGroupState;
window['AscFormat'].PreChangeAdjInGroupState = PreChangeAdjInGroupState;
window['AscFormat'].TextAddState = TextAddState;
window['AscFormat'].SplineBezierState = SplineBezierState;
window['AscFormat'].PolyLineAddState = PolyLineAddState;
window['AscFormat'].AddPolyLine2State = AddPolyLine2State;
window['AscFormat'].TrackTextState = TrackTextState;
window['AscFormat'].checkEmptyPlaceholderContent = checkEmptyPlaceholderContent;
})(window);