DocumentServer/OfficeWeb/sdk/Excel/view/DrawingObjectsController.js
2015-04-28 17:59:00 +03:00

450 lines
18 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";
if (window.editor === "undefined" && window["Asc"]["editor"]) {
window.editor = window["Asc"]["editor"];
}
function CContentChangesElement(Type, Pos, Count, Data) {
this.m_nType = Type;
this.m_nPos = Pos;
this.m_nCount = Count;
this.m_pData = Data;
this.Refresh_BinaryData = function () {
this.m_pData.Pos = this.m_aPositions[0];
if (editor && editor.isPresentationEditor) {
var Binary_Writer = History.BinaryWriter;
var Binary_Pos = Binary_Writer.GetCurPosition();
this.m_pData.Data.UseArray = true;
this.m_pData.Data.PosArray = this.m_aPositions;
Binary_Writer.WriteString2(this.m_pData.Class.Get_Id());
this.m_pData.Class.Save_Changes(this.m_pData.Data, Binary_Writer);
var Binary_Len = Binary_Writer.GetCurPosition() - Binary_Pos;
this.m_pData.Binary.Pos = Binary_Pos;
this.m_pData.Binary.Len = Binary_Len;
}
};
this.Check_Changes = function (Type, Pos) {
var CurPos = Pos;
if (contentchanges_Add === Type) {
for (var Index = 0; Index < this.m_nCount; Index++) {
if (false !== this.m_aPositions[Index]) {
if (CurPos <= this.m_aPositions[Index]) {
this.m_aPositions[Index]++;
} else {
if (contentchanges_Add === this.m_nType) {
CurPos++;
} else {
CurPos--;
}
}
}
}
} else {
for (var Index = 0; Index < this.m_nCount; Index++) {
if (false !== this.m_aPositions[Index]) {
if (CurPos < this.m_aPositions[Index]) {
this.m_aPositions[Index]--;
} else {
if (CurPos > this.m_aPositions[Index]) {
if (contentchanges_Add === this.m_nType) {
CurPos++;
} else {
CurPos--;
}
} else {
if (contentchanges_Remove === this.m_nType) {
this.m_aPositions[Index] = false;
return false;
} else {
CurPos++;
}
}
}
}
}
}
return CurPos;
};
this.Make_ArrayOfSimpleActions = function (Type, Pos, Count) {
var Positions = [];
if (contentchanges_Add === Type) {
for (var Index = 0; Index < Count; Index++) {
Positions[Index] = Pos + Index;
}
} else {
for (var Index = 0; Index < Count; Index++) {
Positions[Index] = Pos;
}
}
return Positions;
};
this.m_aPositions = this.Make_ArrayOfSimpleActions(Type, Pos, Count);
}
function CContentChanges() {
this.m_aChanges = [];
this.Add = function (Changes) {
this.m_aChanges.push(Changes);
};
this.Clear = function () {
this.m_aChanges.length = 0;
};
this.Check = function (Type, Pos) {
var CurPos = Pos;
var Count = this.m_aChanges.length;
for (var Index = 0; Index < Count; Index++) {
var NewPos = this.m_aChanges[Index].Check_Changes(Type, CurPos);
if (false === NewPos) {
return false;
}
CurPos = NewPos;
}
return CurPos;
};
this.Refresh = function () {
var Count = this.m_aChanges.length;
for (var Index = 0; Index < Count; Index++) {
this.m_aChanges[Index].Refresh_BinaryData();
}
};
}
function CheckIdSatetShapeAdd(state) {
return ! (state instanceof NullState);
}
DrawingObjectsController.prototype.getTheme = function () {
return window["Asc"]["editor"].wbModel.theme;
};
DrawingObjectsController.prototype.getDrawingArray = function () {
var ret = [];
var drawing_bases = this.drawingObjects.getDrawingObjects();
for (var i = 0; i < drawing_bases.length; ++i) {
ret.push(drawing_bases[i].graphicObject);
}
return ret;
};
DrawingObjectsController.prototype.setTableProps = function (props) {
var by_type = this.getSelectedObjectsByTypes();
if (by_type.tables.length === 1) {
var target_text_object = getTargetTextObject(this);
if (target_text_object === by_type.tables[0]) {
by_type.tables[0].graphicObject.Set_Props(props);
} else {
by_type.tables[0].graphicObject.Select_All();
by_type.tables[0].graphicObject.Set_Props(props);
by_type.tables[0].graphicObject.Selection_Remove();
}
editor.WordControl.m_oLogicDocument.Check_GraphicFrameRowHeight(by_type.tables[0]);
}
};
DrawingObjectsController.prototype.RefreshAfterChangeColorScheme = function () {
var drawings = this.getDrawingArray();
for (var i = 0; i < drawings.length; ++i) {
if (drawings[i]) {
drawings[i].handleUpdateFill();
drawings[i].handleUpdateLn();
drawings[i].addToRecalculate();
}
}
};
DrawingObjectsController.prototype.getLayout = function () {
return null;
};
DrawingObjectsController.prototype.updateOverlay = function () {
this.drawingObjects.OnUpdateOverlay();
};
DrawingObjectsController.prototype.recalculate = function (bAll, Point) {
History.Get_RecalcData(Point);
if (bAll) {
var drawings = this.getDrawingObjects();
for (var i = 0; i < drawings.length; ++i) {
if (drawings[i].recalcText) {
drawings[i].recalcText();
}
drawings[i].recalculate();
}
} else {
for (var key in this.objectsForRecalculate) {
this.objectsForRecalculate[key].recalculate();
}
}
this.objectsForRecalculate = {};
};
DrawingObjectsController.prototype.recalculate2 = function (bAll) {
if (bAll) {
var drawings = this.getDrawingObjects();
for (var i = 0; i < drawings.length; ++i) {
if (drawings[i].recalcText) {
drawings[i].recalcText();
}
drawings[i].recalculate();
}
} else {
for (var key in this.objectsForRecalculate) {
this.objectsForRecalculate[key].recalculate();
}
}
this.objectsForRecalculate = {};
};
DrawingObjectsController.prototype.updateRecalcObjects = function () {};
DrawingObjectsController.prototype.getTheme = function () {
return window["Asc"]["editor"].wbModel.theme;
};
DrawingObjectsController.prototype.startRecalculate = function () {
this.recalculate();
this.drawingObjects.showDrawingObjects(true);
};
DrawingObjectsController.prototype.getDrawingObjects = function () {
var ret = [];
var drawing_bases = this.drawingObjects.getDrawingObjects();
for (var i = 0; i < drawing_bases.length; ++i) {
ret.push(drawing_bases[i].graphicObject);
}
return ret;
};
DrawingObjectsController.prototype.checkSelectedObjectsForMove = function (group) {
var selected_object = group ? group.selectedObjects : this.selectedObjects;
for (var i = 0; i < selected_object.length; ++i) {
if (selected_object[i].canMove()) {
this.arrPreTrackObjects.push(selected_object[i].createMoveTrack());
}
}
};
DrawingObjectsController.prototype.checkSelectedObjectsAndFireCallback = function (callback, args) {
var selection_state = this.getSelectionState();
this.drawingObjects.objectLocker.reset();
for (var i = 0; i < this.selectedObjects.length; ++i) {
this.drawingObjects.objectLocker.addObjectId(this.selectedObjects[i].Get_Id());
}
var _this = this;
var callback2 = function (bLock, bSync) {
if (bLock) {
if (bSync !== true) {
_this.setSelectionState(selection_state);
}
callback.apply(_this, args);
}
};
this.drawingObjects.objectLocker.checkObjects(callback2);
};
DrawingObjectsController.prototype.onMouseDown = function (e, x, y) {
e.ShiftKey = e.shiftKey;
e.CtrlKey = e.metaKey || e.ctrlKey;
e.Button = e.button;
e.Type = g_mouse_event_type_down;
var ret = this.curState.onMouseDown(e, x, y, 0);
if (e.ClickCount < 2) {
this.updateOverlay();
this.updateSelectionState();
}
return ret;
};
DrawingObjectsController.prototype.OnMouseDown = DrawingObjectsController.prototype.onMouseDown;
DrawingObjectsController.prototype.onMouseMove = function (e, x, y) {
e.ShiftKey = e.shiftKey;
e.CtrlKey = e.metaKey || e.ctrlKey;
e.Button = e.button;
e.Type = g_mouse_event_type_move;
this.curState.onMouseMove(e, x, y, 0);
};
DrawingObjectsController.prototype.OnMouseMove = DrawingObjectsController.prototype.onMouseMove;
DrawingObjectsController.prototype.onMouseUp = function (e, x, y) {
e.ShiftKey = e.shiftKey;
e.CtrlKey = e.metaKey || e.ctrlKey;
e.Button = e.button;
e.Type = g_mouse_event_type_up;
this.curState.onMouseUp(e, x, y, 0);
};
DrawingObjectsController.prototype.OnMouseUp = DrawingObjectsController.prototype.onMouseUp;
DrawingObjectsController.prototype.createGroup = function () {
var group = this.getGroup();
if (group) {
var group_array = this.getArrayForGrouping();
for (var i = group_array.length - 1; i > -1; --i) {
group_array[i].deleteDrawingBase();
}
this.resetSelection();
this.drawingObjects.getWorksheetModel && group.setWorksheet(this.drawingObjects.getWorksheetModel());
group.setDrawingObjects(this.drawingObjects);
if (this.drawingObjects && this.drawingObjects.cSld) {
group.setParent(this.drawingObjects);
}
group.addToDrawingObjects();
group.checkDrawingBaseCoords();
this.selectObject(group, 0);
group.addToRecalculate();
this.startRecalculate();
}
};
DrawingObjectsController.prototype.handleChartDoubleClick = function () {
var drawingObjects = this.drawingObjects;
this.checkSelectedObjectsAndFireCallback(function () {
drawingObjects.showChartSettings();
},
[]);
};
DrawingObjectsController.prototype.addChartDrawingObject = function (options) {
History.Create_NewPoint();
var chart = this.getChartSpace(this.drawingObjects.getWorksheetModel(), options);
if (chart) {
chart.setWorksheet(this.drawingObjects.getWorksheetModel());
chart.setStyle(2);
chart.setBDeleted(false);
this.resetSelection();
var w, h;
if (isRealObject(options) && isRealNumber(options.width) && isRealNumber(options.height)) {
w = this.drawingObjects.convertMetric(options.width, 0, 3);
h = this.drawingObjects.convertMetric(options.height, 0, 3);
} else {
w = this.drawingObjects.convertMetric(c_oAscChartDefines.defaultChartWidth, 0, 3);
h = this.drawingObjects.convertMetric(c_oAscChartDefines.defaultChartHeight, 0, 3);
}
var chartLeft, chartTop;
if (options && isRealNumber(options.left) && options.left >= 0 && isRealNumber(options.top) && options.top >= 0) {
chartLeft = this.drawingObjects.convertMetric(options.left, 0, 3);
chartTop = this.drawingObjects.convertMetric(options.top, 0, 3);
} else {
chartLeft = this.drawingObjects.convertMetric((this.drawingObjects.getContextWidth() - w) / 2, 0, 3);
if (chartLeft < 0) {
chartLeft = 0;
}
chartTop = this.drawingObjects.convertMetric((this.drawingObjects.getContextHeight() - h) / 2, 0, 3);
if (chartTop < 0) {
chartTop = 0;
}
}
chart.setSpPr(new CSpPr());
chart.spPr.setParent(chart);
chart.spPr.setXfrm(new CXfrm());
chart.spPr.xfrm.setParent(chart.spPr);
chart.spPr.xfrm.setOffX(chartLeft);
chart.spPr.xfrm.setOffY(chartTop);
chart.spPr.xfrm.setExtX(w);
chart.spPr.xfrm.setExtY(h);
chart.setDrawingObjects(this.drawingObjects);
chart.setWorksheet(this.drawingObjects.getWorksheetModel());
chart.addToDrawingObjects();
this.resetSelection();
this.selectObject(chart, 0);
if (options) {
var old_range = options.getRange();
options.putRange(null);
this.editChartCallback(options);
options.putRange(old_range);
}
chart.addToRecalculate();
chart.checkDrawingBaseCoords();
this.startRecalculate();
this.drawingObjects.sendGraphicObjectProps();
}
};
DrawingObjectsController.prototype.isPointInDrawingObjects = function (x, y, e) {
this.handleEventMode = HANDLE_EVENT_MODE_CURSOR;
var ret = this.curState.onMouseDown(e || {},
x, y, 0);
this.handleEventMode = HANDLE_EVENT_MODE_HANDLE;
return ret;
};
DrawingObjectsController.prototype.handleDoubleClickOnChart = function (chart) {
this.changeCurrentState(new NullState());
};
DrawingObjectsController.prototype.addImageFromParams = function (rasterImageId, x, y, extX, extY) {
History.Create_NewPoint();
var image = this.createImage(rasterImageId, x, y, extX, extY);
this.resetSelection();
image.setWorksheet(this.drawingObjects.getWorksheetModel());
image.setDrawingObjects(this.drawingObjects);
image.addToDrawingObjects();
image.checkDrawingBaseCoords();
this.selectObject(image, 0);
image.addToRecalculate();
this.startRecalculate();
};
DrawingObjectsController.prototype.isViewMode = function () {
return this.drawingObjects.isViewerMode();
};
DrawingObjectsController.prototype.getDrawingDocument = function () {
return this.drawingObjects.drawingDocument;
};
DrawingObjectsController.prototype.convertPixToMM = function (pix) {
return this.drawingObjects ? this.drawingObjects.convertMetric(pix, 0, 3) : 0;
};
DrawingObjectsController.prototype.setParagraphNumbering = function (Bullet) {
this.applyDocContentFunction(CDocumentContent.prototype.Set_ParagraphPresentationNumbering, [Bullet], CTable.prototype.Set_ParagraphPresentationNumbering);
};
DrawingObjectsController.prototype.setParagraphIndent = function (Indent) {
if (isRealObject(Indent) && isRealNumber(Indent.Left) && Indent.Left < 0) {
Indent.Left = 0;
}
this.applyDocContentFunction(CDocumentContent.prototype.Set_ParagraphIndent, [Indent], CTable.prototype.Set_ParagraphIndent);
};
DrawingObjectsController.prototype.paragraphIncDecIndent = function (bIncrease) {
this.applyDocContentFunction(CDocumentContent.prototype.Increase_ParagraphLevel, [bIncrease], CTable.prototype.Increase_ParagraphLevel);
};
DrawingObjectsController.prototype.canIncreaseParagraphLevel = function (bIncrease) {
var content = this.getTargetDocContent();
if (content) {
var target_text_object = getTargetTextObject(this);
if (target_text_object && target_text_object.getObjectType() === historyitem_type_Shape && (!target_text_object.isPlaceholder() || !target_text_object.getPhType() !== phType_title && target_text_object.getPhType() !== phType_ctrTitle)) {
return content.Can_IncreaseParagraphLevel(bIncrease);
}
}
return false;
};
DrawingObjectsController.prototype.onKeyPress = function (e) {
if (true === this.isViewMode()) {
return false;
}
if (e.CtrlKey || e.AltKey) {
return false;
}
var Code;
if (null != e.Which) {
Code = e.Which;
} else {
if (e.KeyCode) {
Code = e.KeyCode;
} else {
Code = 0;
}
}
var bRetValue = false;
if (Code > 32) {
this.checkSelectedObjectsAndCallback(function () {
this.paragraphAdd(new ParaText(String.fromCharCode(Code)));
},
[], false, historydescription_Spreadsheet_ParagraphAdd);
bRetValue = true;
}
return bRetValue;
};
function CheckRightButtonEvent(e) {
return e.button === 2;
}