DocumentServer/OfficeWeb/sdk/Common/Drawings/States.js
2015-04-28 17:59:00 +03:00

1518 lines
66 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2015
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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";
var MOVE_DELTA = 1 / 100000;
var SNAP_DISTANCE = 1.27;
function StartAddNewShape(drawingObjects, preset) {
this.drawingObjects = drawingObjects;
this.preset = preset;
this.bStart = false;
this.bMoved = false;
this.startX = null;
this.startY = null;
}
StartAddNewShape.prototype = {
onMouseDown: function (e, x, y) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
this.startX = x;
this.startY = y;
this.drawingObjects.arrPreTrackObjects.length = 0;
this.drawingObjects.arrPreTrackObjects.push(new NewShapeTrack(this.preset, x, y, this.drawingObjects.getTheme(), null, null, null, 0));
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;
}
this.drawingObjects.arrTrackObjects[0].track(e, x, y);
this.drawingObjects.updateOverlay();
}
},
onMouseUp: function (e, x, y) {
if (this.bStart) {
if (this.drawingObjects.drawingObjects.objectLocker) {
this.drawingObjects.drawingObjects.objectLocker.reset();
this.drawingObjects.drawingObjects.objectLocker.addObjectId(g_oIdCounter.Get_NewId());
}
var oThis = this;
var track = oThis.drawingObjects.arrTrackObjects[0];
if (!this.bMoved && this instanceof StartAddNewShape) {
var ext_x, ext_y;
if (typeof SHAPE_ASPECTS[this.preset] === "number") {
var _aspect = SHAPE_ASPECTS[this.preset];
if (_aspect >= 1) {
ext_y = 25.4;
ext_x = ext_y * _aspect;
} else {
ext_x = 25.4;
ext_y = ext_x / _aspect;
}
} else {
ext_x = 25.4;
ext_y = 25.4;
}
this.onMouseMove({
IsLocked: true
},
this.startX + ext_x, this.startY + ext_y);
}
var callback = function (bLock) {
if (bLock) {
History.Create_NewPoint(historydescription_CommonStatesAddNewShape);
var shape = track.getShape(false, oThis.drawingObjects.getDrawingDocument(), oThis.drawingObjects.drawingObjects);
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();
shape.checkDrawingBaseCoords();
oThis.drawingObjects.checkChartTextSelection();
oThis.drawingObjects.resetSelection();
shape.select(oThis.drawingObjects, 0);
if (oThis.preset === "textRect") {
oThis.drawingObjects.selection.textSelection = shape;
}
oThis.drawingObjects.startRecalculate();
oThis.drawingObjects.drawingObjects.sendGraphicObjectProps();
}
};
if (this.drawingObjects.drawingObjects.objectLocker) {
this.drawingObjects.drawingObjects.objectLocker.checkObjects(callback);
} else {
callback(true);
}
}
this.drawingObjects.clearTrackObjects();
this.drawingObjects.updateOverlay();
if (asc["editor"]) {
asc["editor"].asc_endAddShape();
} else {
if (editor && editor.sync_EndAddShape) {
editor.sync_EndAddShape();
}
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function checkEmptyPlaceholderContent(content) {
if (!content || content.Is_Empty() && content.Parent && content.Parent.parent && content.Parent.parent.isPlaceholder && content.Parent.parent.isPlaceholder()) {
return content;
}
return null;
}
function NullState(drawingObjects) {
this.drawingObjects = drawingObjects;
}
NullState.prototype = {
onMouseDown: function (e, x, y, pageIndex, bTextFlag) {
var start_target_doc_content, end_target_doc_content, selected_comment_index = -1;
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE) {
start_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
}
var ret;
ret = this.drawingObjects.handleSlideComments(e, x, y, pageIndex);
if (ret) {
if (ret.result) {
return ret.result;
}
selected_comment_index = ret.selectedIndex;
}
var selection = this.drawingObjects.selection;
var b_no_handle_selected = false;
if (selection.groupSelection) {
ret = handleSelectedObjects(this.drawingObjects, e, x, y, selection.groupSelection, pageIndex, false);
if (ret) {
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content)) {
this.drawingObjects.drawingObjects.showDrawingObjects(true);
}
return ret;
}
ret = handleFloatObjects(this.drawingObjects, selection.groupSelection.arrGraphicObjects, e, x, y, selection.groupSelection, pageIndex, false);
if (ret) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE) {
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content)) {
this.drawingObjects.drawingObjects.showDrawingObjects(true);
}
}
return ret;
}
} else {
if (selection.chartSelection) {}
}
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE) {
if (this.drawingObjects.checkNeedResetChartSelection(e, x, y, pageIndex, bTextFlag)) {
this.drawingObjects.checkChartTextSelection();
}
this.drawingObjects.resetInternalSelection(true);
}
if (!b_no_handle_selected) {
ret = handleSelectedObjects(this.drawingObjects, e, x, y, null, pageIndex, false);
if (ret) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE) {
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content)) {
this.drawingObjects.drawingObjects.showDrawingObjects(true);
}
}
return ret;
}
}
ret = handleFloatObjects(this.drawingObjects, this.drawingObjects.getDrawingArray(), e, x, y, null, pageIndex, false);
if (ret) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE) {
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content)) {
this.drawingObjects.drawingObjects.showDrawingObjects(true);
}
}
return ret;
}
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE) {
if (start_target_doc_content || selected_comment_index > -1) {
this.drawingObjects.drawingObjects.showDrawingObjects(true);
}
if (this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld) {
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));
}
}
return null;
},
onMouseMove: function (e, x, y, pageIndex) {},
onMouseUp: function (e, x, y, pageIndex) {}
};
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 = this.drawingObjects.getDrawingArray();
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 PreChangeAdjState(drawingObjects, majorObject) {
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
PreChangeAdjState.prototype = {
onMouseDown: function (e, x, y, pageIndex) {},
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) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
var t = CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.getDrawingDocument());
this.drawingObjects.arrTrackObjects[0].track(t.x, t.y);
this.drawingObjects.updateOverlay();
},
onMouseUp: function (e, x, y, pageIndex) {
if (this.drawingObjects.isViewMode() === false) {
var track = this.drawingObjects.arrTrackObjects[0];
var drawingObjects = this.drawingObjects;
this.drawingObjects.checkSelectedObjectsAndCallback(function () {
track.trackEnd();
drawingObjects.startRecalculate();
},
[], false, 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) {},
onMouseMove: function (e, x, y, pageIndex) {
if (!e.IsLocked) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
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) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
var coords = 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.isViewMode() === false) {
var tracks = [].concat(this.drawingObjects.arrTrackObjects);
var group = this.group;
var drawingObjects = this.drawingObjects;
var oThis = this;
if (e.CtrlKey && this instanceof MoveState && !(asc["editor"] && asc["editor"].isChartEditor === true)) {
var i, copy;
this.drawingObjects.resetSelection();
History.Create_NewPoint(historydescription_CommonStatesRotate);
for (i = 0; i < tracks.length; ++i) {
copy = tracks[i].originalObject.copy();
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() === historyitem_type_GroupShape && !copy.spPr.xfrm.isNotNullForGroup() || copy.getObjectType() !== historyitem_type_GroupShape && !copy.spPr.xfrm.isNotNull())) {
copy.recalculateTransform();
}
}
copy.addToDrawingObjects();
tracks[i].originalObject = copy;
tracks[i].trackEnd(false);
this.drawingObjects.selectObject(copy, 0);
if (! (this.drawingObjects.drawingObjects && this.drawingObjects.drawingObjects.cSld)) {
ExecuteNoHistory(function () {
drawingObjects.checkSelectedObjectsAndCallback(function () {},
[]);
},
this, []);
} else {
this.drawingObjects.startRecalculate();
this.drawingObjects.drawingObjects.sendGraphicObjectProps();
}
}
} else {
this.drawingObjects.checkSelectedObjectsAndCallback(function () {
var i;
if (e.CtrlKey && oThis instanceof MoveInGroupState) {
group.resetSelection();
for (i = 0; i < tracks.length; ++i) {
var copy = tracks[i].originalObject.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);
}
} else {
for (i = 0; i < tracks.length; ++i) {
tracks[i].trackEnd(false);
}
}
if (group) {
group.updateCoordinatesAfterInternalResize();
}
if (!oThis.drawingObjects.drawingObjects || !oThis.drawingObjects.drawingObjects.cSld) {
var arr_x = [],
arr_y = [],
transform,
min_x,
min_y,
drawing,
arr_x2 = [],
arr_y2 = [],
min_x2,
min_y2;
for (i = 0; i < oThis.drawingObjects.selectedObjects.length; ++i) {
arr_x.length = 0;
arr_y.length = 0;
drawing = oThis.drawingObjects.selectedObjects[i];
drawing.recalculateTransform();
transform = drawing.transform;
arr_x.push(transform.TransformPointX(0, 0));
arr_y.push(transform.TransformPointY(0, 0));
arr_x.push(transform.TransformPointX(drawing.spPr.xfrm.extX, 0));
arr_y.push(transform.TransformPointY(drawing.spPr.xfrm.extX, 0));
arr_x.push(transform.TransformPointX(drawing.spPr.xfrm.extX, drawing.spPr.xfrm.extY));
arr_y.push(transform.TransformPointY(drawing.spPr.xfrm.extX, drawing.spPr.xfrm.extY));
arr_x.push(transform.TransformPointX(0, drawing.spPr.xfrm.extY));
arr_y.push(transform.TransformPointY(0, drawing.spPr.xfrm.extY));
arr_x2.push(drawing.spPr.xfrm.offX + drawing.spPr.xfrm.extX);
arr_y2.push(drawing.spPr.xfrm.offY + drawing.spPr.xfrm.extY);
min_x = Math.min(Math.min.apply(Math, arr_x), drawing.spPr.xfrm.offX);
min_y = Math.min(Math.min.apply(Math, arr_y), drawing.spPr.xfrm.offY);
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();
}
oThis.drawingObjects.drawingObjects.checkGraphicObjectPosition(0, 0, Math.max.apply(Math, arr_x2), Math.max.apply(Math, arr_y2));
}
},
[], false, historydescription_CommonDrawings_EndTrack);
}
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
this.drawingObjects.clearTrackObjects();
this.drawingObjects.updateOverlay();
}
};
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) {},
onMouseMove: function (e, x, y, pageIndex) {
if (!e.IsLocked) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
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) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
var coords = CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.getDrawingDocument());
var resize_coef = this.majorObject.getResizeCoefficients(this.handleNum, coords.x, coords.y);
this.drawingObjects.trackResizeObjects(resize_coef.kd1, resize_coef.kd2, e);
this.drawingObjects.updateOverlay();
},
onMouseUp: RotateState.prototype.onMouseUp
};
function PreMoveState(drawingObjects, startX, startY, shift, ctrl, majorObject, majorObjectIsSelected, bInside) {
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = startX;
this.startY = startY;
this.shift = shift;
this.ctrl = ctrl;
this.majorObjectIsSelected = majorObjectIsSelected;
this.bInside = bInside;
}
PreMoveState.prototype = {
onMouseDown: function (e, x, y, pageIndex) {},
onMouseMove: function (e, x, y, pageIndex) {
if (!e.IsLocked) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
if (Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || pageIndex !== this.majorObject.selectStartPage) {
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 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;
}
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) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
var _arr_track_objects = this.drawingObjects.arrTrackObjects;
var _objects_count = _arr_track_objects.length;
var _object_index;
var result_x, result_y;
if (!e.ShiftKey) {
result_x = x;
result_y = y;
} else {
var abs_dist_x = Math.abs(this.startX - x);
var abs_dist_y = Math.abs(this.startY - y);
if (abs_dist_x > abs_dist_y) {
result_x = x;
result_y = this.startY;
} else {
result_x = this.startX;
result_y = y;
}
}
var tr_to_start_page_x;
var tr_to_start_page_y;
var t = CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.getDrawingDocument());
var startPos = {
x: this.startX,
y: this.startY
};
var start_arr = this.drawingObjects.getAllObjectsOnPage(0);
var min_dx = null,
min_dy = null;
var dx, dy;
var snap_x = null,
snap_y = null;
var snapHorArray = [],
snapVerArray = [];
if (result_x === this.startX) {
min_dx = 0;
} else {
for (var track_index = 0; track_index < _arr_track_objects.length; ++track_index) {
var cur_track_original_shape = _arr_track_objects[track_index].originalObject;
var trackSnapArrayX = cur_track_original_shape.snapArrayX;
var curDX = result_x - startPos.x;
for (snap_index = 0; snap_index < trackSnapArrayX.length; ++snap_index) {
var snap_obj = GetMinSnapDistanceXObjectByArrays(trackSnapArrayX[snap_index] + curDX, snapHorArray);
if (isRealObject(snap_obj)) {
dx = snap_obj.dist;
if (dx !== null) {
if (min_dx === null) {
min_dx = dx;
snap_x = snap_obj.pos;
} else {
if (Math.abs(min_dx) > Math.abs(dx)) {
min_dx = dx;
snap_x = snap_obj.pos;
}
}
}
}
}
if (start_arr.length > 0) {
for (var snap_index = 0; snap_index < trackSnapArrayX.length; ++snap_index) {
var snap_obj = GetMinSnapDistanceXObject(trackSnapArrayX[snap_index] + curDX, start_arr);
if (isRealObject(snap_obj)) {
dx = snap_obj.dist;
if (dx !== null) {
if (min_dx === null) {
snap_x = snap_obj.pos;
min_dx = dx;
} else {
if (Math.abs(min_dx) > Math.abs(dx)) {
min_dx = dx;
snap_x = snap_obj.pos;
}
}
}
}
}
}
}
}
if (result_y === this.startY) {
min_dy = 0;
} else {
for (track_index = 0; track_index < _arr_track_objects.length; ++track_index) {
cur_track_original_shape = _arr_track_objects[track_index].originalObject;
var trackSnapArrayY = cur_track_original_shape.snapArrayY;
var curDY = result_y - startPos.y;
for (snap_index = 0; snap_index < trackSnapArrayY.length; ++snap_index) {
var snap_obj = GetMinSnapDistanceYObjectByArrays(trackSnapArrayY[snap_index] + curDY, snapVerArray);
if (isRealObject(snap_obj)) {
dy = snap_obj.dist;
if (dy !== null) {
if (min_dy === null) {
min_dy = dy;
snap_y = snap_obj.pos;
} else {
if (Math.abs(min_dy) > Math.abs(dy)) {
min_dy = dy;
snap_y = snap_obj.pos;
}
}
}
}
}
if (start_arr.length > 0) {
for (snap_index = 0; snap_index < trackSnapArrayY.length; ++snap_index) {
var snap_obj = GetMinSnapDistanceYObject(trackSnapArrayY[snap_index] + curDY, start_arr);
if (isRealObject(snap_obj)) {
dy = snap_obj.dist;
if (dy !== null) {
if (min_dy === null) {
min_dy = dy;
snap_y = snap_obj.pos;
} else {
if (Math.abs(min_dy) > Math.abs(dy)) {
min_dy = dy;
snap_y = snap_obj.pos;
}
}
}
}
}
}
}
}
if (min_dx === null || Math.abs(min_dx) > SNAP_DISTANCE) {
min_dx = 0;
} else {
if (isRealNumber(snap_x) && this.drawingObjects.drawingObjects.cSld) {
this.drawingObjects.getDrawingDocument().DrawVerAnchor(pageIndex, snap_x);
}
}
if (min_dy === null || Math.abs(min_dy) > SNAP_DISTANCE) {
min_dy = 0;
} else {
if (isRealNumber(snap_y) && this.drawingObjects.drawingObjects.cSld) {
this.drawingObjects.getDrawingDocument().DrawHorAnchor(pageIndex, snap_y);
}
}
var tx = result_x - this.startX + min_dx,
ty = result_y - this.startY + min_dy;
var check_position = this.drawingObjects.drawingObjects.checkGraphicObjectPosition(this.rectX + tx, this.rectY + ty, this.rectW, this.rectH);
for (_object_index = 0; _object_index < _objects_count; ++_object_index) {
_arr_track_objects[_object_index].track(tx + check_position.x, ty + check_position.y, pageIndex);
}
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) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
if (Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || pageIndex !== this.majorObject.selectStartPage) {
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) {
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;
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.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) {},
onMouseMove: function (e, x, y, pageIndex) {
if (!e.IsLocked) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
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) {},
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) {},
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) {
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
TextAddState.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: this.majorObject.Id,
cursorType: "text"
};
}
},
onMouseMove: function (e, x, y, pageIndex) {
if (!e.IsLocked) {
this.onMouseUp(e, x, y, pageIndex);
return;
}
this.majorObject.selectionSetEnd(e, x, y, pageIndex);
if (! (this.majorObject.getObjectType() === historyitem_type_GraphicFrame && this.majorObject.graphicObject.Selection.Type2 === table_Selection_Border)) {
this.drawingObjects.updateSelectionState();
}
},
onMouseUp: function (e, x, y, pageIndex) {
this.majorObject.selectionSetEnd(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 cursor_type = this.drawingObjects.onMouseDown(e, x, y, pageIndex);
if (cursor_type && cursor_type.hyperlink) {
this.drawingObjects.drawingObjects.showDrawingObjects(true);
}
this.drawingObjects.noNeedUpdateCursorType = false;
this.drawingObjects.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
if (editor && editor.isPaintFormat) {
this.drawingObjects.paragraphFormatPaste2();
editor.sync_PaintFormatCallback(0);
}
}
};
function SplineBezierState(drawingObjects) {
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
}
SplineBezierState.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
this.drawingObjects.startTrackPos = {
x: x,
y: y,
pageIndex: pageIndex
};
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addTrackObject(new Spline(this.drawingObjects, this.drawingObjects.getTheme(), null, null, null, pageIndex));
this.drawingObjects.arrTrackObjects[0].path.push(new SplineCommandMoveTo(x, y));
this.drawingObjects.changeCurrentState(new SplineBezierState33(this.drawingObjects, x, y, pageIndex));
this.drawingObjects.checkChartTextSelection();
this.drawingObjects.resetSelection();
this.drawingObjects.updateOverlay();
},
onMouseMove: function (e, X, Y, pageIndex) {},
onMouseUp: function (e, X, Y, pageIndex) {
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
this.drawingObjects.curState.updateAnchorPos();
}
};
function SplineBezierState33(drawingObjects, startX, startY, pageIndex) {
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState33.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
},
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.arrTrackObjects[0].path.push(new SplineCommandLineTo(tr_x, tr_y));
this.drawingObjects.changeCurrentState(new SplineBezierState2(this.drawingObjects, this.pageIndex));
this.drawingObjects.updateOverlay();
},
onMouseUp: function (e, x, y, pageIndex) {}
};
function SplineBezierState2(drawingObjects, pageIndex) {
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState2.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
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.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));
}
}
};
function SplineBezierState3(drawingObjects, startX, startY, pageIndex) {
this.drawingObjects = drawingObjects;
this.startX = startX;
this.startY = startY;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState3.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
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 SplineCommandBezier(x1, y1, x2, y2, x3, y3));
spline.path.push(new SplineCommandBezier(x4, y4, x5, y5, x6, y6));
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new SplineBezierState4(this.drawingObjects, this.pageIndex));
},
onMouseUp: function (e, x, y, pageIndex) {
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) {
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState4.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
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.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));
}
}
};
function SplineBezierState5(drawingObjects, startX, startY, pageIndex) {
this.drawingObjects = drawingObjects;
this.startX = startX;
this.startY = startY;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState5.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
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 SplineCommandBezier(x4, y4, x5, y5, x6, y6));
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new SplineBezierState4(this.drawingObjects, this.pageIndex));
},
onMouseUp: function (e, x, y, pageIndex) {
if (e.ClickCount >= 2) {
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
function PolyLineAddState(drawingObjects) {
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
}
PolyLineAddState.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
this.drawingObjects.startTrackPos = {
x: x,
y: y,
pageIndex: pageIndex
};
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addTrackObject(new PolyLine(this.drawingObjects, this.drawingObjects.getTheme(), null, null, null, pageIndex));
this.drawingObjects.arrTrackObjects[0].arrPoint.push({
x: x,
y: y
});
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));
},
onMouseMove: function () {},
onMouseUp: function () {
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function PolyLineAddState2(drawingObjects, minDistance) {
this.drawingObjects = drawingObjects;
this.minDistance = minDistance;
this.polylineFlag = true;
}
PolyLineAddState2.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
},
onMouseMove: function (e, x, y, pageIndex) {
var _last_point = this.drawingObjects.arrTrackObjects[0].arrPoint[this.drawingObjects.arrTrackObjects[0].arrPoint.length - 1];
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 dx = tr_x - _last_point.x;
var dy = tr_y - _last_point.y;
if (Math.sqrt(dx * dx + dy * dy) >= this.minDistance) {
this.drawingObjects.arrTrackObjects[0].arrPoint.push({
x: tr_x,
y: tr_y
});
this.drawingObjects.updateOverlay();
}
},
onMouseUp: function (e, x, y, pageIndex) {
if (this.drawingObjects.arrTrackObjects[0].arrPoint.length > 1) {
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));
}
}
};
function AddPolyLine2State(drawingObjects) {
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
}
AddPolyLine2State.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
this.drawingObjects.startTrackPos = {
x: x,
y: y,
pageIndex: pageIndex
};
this.drawingObjects.checkChartTextSelection();
this.drawingObjects.resetSelection();
this.drawingObjects.updateOverlay();
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addTrackObject(new PolyLine(this.drawingObjects, this.drawingObjects.getTheme(), null, null, null, pageIndex));
this.drawingObjects.arrTrackObjects[0].arrPoint.push({
x: x,
y: y
});
this.drawingObjects.changeCurrentState(new AddPolyLine2State2(this.drawingObjects, x, y));
},
onMouseMove: function (e, x, y, pageIndex) {},
onMouseUp: function (e, x, y, pageIndex) {}
};
function AddPolyLine2State2(drawingObjects, x, y) {
this.drawingObjects = drawingObjects;
this.X = x;
this.Y = y;
this.polylineFlag = true;
}
AddPolyLine2State2.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
if (e.ClickCount > 1) {
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.arrTrackObjects[0].arrPoint.push({
x: tr_x,
y: tr_y
});
this.drawingObjects.changeCurrentState(new AddPolyLine2State3(this.drawingObjects));
}
},
onMouseUp: function (e, x, y, pageIndex) {}
};
function AddPolyLine2State3(drawingObjects) {
this.drawingObjects = drawingObjects;
this.minSize = drawingObjects.convertPixToMM(1);
this.polylineFlag = true;
}
AddPolyLine2State3.prototype = {
onMouseDown: function (e, x, y, pageIndex) {
if (this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR) {
return {
objectId: "1",
bMarker: true
};
}
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].arrPoint.push({
x: tr_x,
y: tr_y
});
if (e.ClickCount > 1) {
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 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.IsLocked) {
this.drawingObjects.arrTrackObjects[0].arrPoint[this.drawingObjects.arrTrackObjects[0].arrPoint.length - 1] = {
x: tr_x,
y: tr_y
};
} else {
var _last_point = this.drawingObjects.arrTrackObjects[0].arrPoint[this.drawingObjects.arrTrackObjects[0].arrPoint.length - 1];
var dx = tr_x - _last_point.x;
var dy = tr_y - _last_point.y;
if (Math.sqrt(dx * dx + dy * dy) >= this.minSize) {
this.drawingObjects.arrTrackObjects[0].arrPoint.push({
x: tr_x,
y: tr_y
});
}
}
this.drawingObjects.updateOverlay();
},
onMouseUp: function (e, x, y, pageIndex) {
if (e.ClickCount > 1) {
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};