Files
DocumentServer-v-9.2.0/sdkjs/common/Charts/DrawingObjects.js
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

4781 lines
174 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";
(
/**
* @param {Window} window
* @param {undefined} undefined
*/
function (window, undefined) {
// Import
var c_oAscCellAnchorType = AscCommon.c_oAscCellAnchorType;
var c_oAscLockTypes = AscCommon.c_oAscLockTypes;
var parserHelp = AscCommon.parserHelp;
var gc_nMaxRow = AscCommon.gc_nMaxRow;
var gc_nMaxCol = AscCommon.gc_nMaxCol;
var History = AscCommon.History;
var MOVE_DELTA = AscFormat.MOVE_DELTA;
var c_oAscError = Asc.c_oAscError;
var c_oAscChartTypeSettings = Asc.c_oAscChartTypeSettings;
var c_oAscChartTitleShowSettings = Asc.c_oAscChartTitleShowSettings;
var c_oAscGridLinesSettings = Asc.c_oAscGridLinesSettings;
var c_oAscValAxisRule = Asc.c_oAscValAxisRule;
var c_oAscInsertOptions = Asc.c_oAscInsertOptions;
var c_oAscDeleteOptions = Asc.c_oAscDeleteOptions;
var c_oAscSelectionType = Asc.c_oAscSelectionType;
var global_mouseEvent = AscCommon.global_mouseEvent;
var aSparklinesStyles =
[
[
[4, -0.499984740745262],
[5, 0],
[4, -0.499984740745262],
[4, 0.39997558519241921],
[4, 0.39997558519241921],
[4, 0],
[4, 0]
],
[
[5, -0.499984740745262],
[6, 0],
[5, -0.499984740745262],
[5, 0.39997558519241921],
[5, 0.39997558519241921],
[5, 0],
[5, 0]
],
[
[6, -0.499984740745262],
[7, 0],
[6, -0.499984740745262],
[6, 0.39997558519241921],
[6, 0.39997558519241921],
[6, 0],
[6, 0]
],
[
[7, -0.499984740745262],
[8, 0],
[7, -0.499984740745262],
[7, 0.39997558519241921],
[7, 0.39997558519241921],
[7, 0],
[7, 0]
],
[
[8, -0.499984740745262],
[9, 0],
[8, -0.499984740745262],
[8, 0.39997558519241921],
[8, 0.39997558519241921],
[8, 0],
[8, 0]
],
[
[9, -0.499984740745262],
[4, 0],
[9, -0.499984740745262],
[9, 0.39997558519241921],
[9, 0.39997558519241921],
[9, 0],
[9, 0]
],
[
[4, -0.249977111117893],
[5, 0],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.249977111117893]
],
[
[5, -0.249977111117893],
[6, 0],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.249977111117893]
],
[
[6, -0.249977111117893],
[7, 0],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.249977111117893]
],
[
[7, -0.249977111117893],
[8, 0],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.249977111117893]
],
[
[8, -0.249977111117893],
[9, 0],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.249977111117893]
],
[
[9, -0.249977111117893],
[4, 0],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.249977111117893]
],
[
[4, 0],
[5, 0],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.249977111117893]
],
[
[5, 0],
[6, 0],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.249977111117893]
],
[
[6, 0],
[7, 0],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.249977111117893]
],
[
[7, 0],
[8, 0],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.249977111117893]
],
[
[8, 0],
[9, 0],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.249977111117893]
],
[
[9, 0],
[4, 0],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.249977111117893]
],
[
[4, 0.39997558519241921],
[0, -0.499984740745262],
[4, 0.79998168889431442],
[4, -0.249977111117893],
[4, -0.249977111117893],
[4, -0.499984740745262],
[4, -0.499984740745262]
],
[
[5, 0.39997558519241921],
[0, -0.499984740745262],
[5, 0.79998168889431442],
[5, -0.249977111117893],
[5, -0.249977111117893],
[5, -0.499984740745262],
[5, -0.499984740745262]
],
[
[6, 0.39997558519241921],
[0, -0.499984740745262],
[6, 0.79998168889431442],
[6, -0.249977111117893],
[6, -0.249977111117893],
[6, -0.499984740745262],
[6, -0.499984740745262]
],
[
[7, 0.39997558519241921],
[0, -0.499984740745262],
[7, 0.79998168889431442],
[7, -0.249977111117893],
[7, -0.249977111117893],
[7, -0.499984740745262],
[7, -0.499984740745262]
],
[
[8, 0.39997558519241921],
[0, -0.499984740745262],
[8, 0.79998168889431442],
[8, -0.249977111117893],
[8, -0.249977111117893],
[8, -0.499984740745262],
[8, -0.499984740745262]
],
[
[9, 0.39997558519241921],
[0, -0.499984740745262],
[9, 0.79998168889431442],
[9, -0.249977111117893],
[9, -0.249977111117893],
[9, -0.499984740745262],
[9, -0.499984740745262]
],
[
[1, 0.499984740745262],
[1, 0.249977111117893],
[1, 0.249977111117893],
[1, 0.249977111117893],
[1, 0.249977111117893],
[1, 0.249977111117893],
[1, 0.249977111117893]
],
[
[1, 0.34998626667073579],
[0, -0.249977111117893],
[0, -0.249977111117893],
[0, -0.249977111117893],
[0, -0.249977111117893],
[0, -0.249977111117893],
[0, -0.249977111117893]
],
[
[0xFF323232],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000]
],
[
[0xFF000000],
[0xFF0070C0],
[0xFF0070C0],
[0xFF0070C0],
[0xFF0070C0],
[0xFF0070C0],
[0xFF0070C0]
],
[
[0xFF376092],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000],
[0xFFD00000]
],
[
[0xFF0070C0],
[0xFF000000],
[0xFF000000],
[0xFF000000],
[0xFF000000],
[0xFF000000],
[0xFF000000]
],
[
[0xFF5F5F5F],
[0xFFFFB620],
[0xFFD70077],
[0xFF5687C2],
[0xFF359CEB],
[0xFF56BE79],
[0xFFFF5055]
],
[
[0xFF5687C2],
[0xFFFFB620],
[0xFFD70077],
[0xFF777777],
[0xFF359CEB],
[0xFF56BE79],
[0xFFFF5055]
],
[
[0xFFC6EFCE],
[0xFFFFC7CE],
[0xFF8CADD6],
[0xFFFFDC47],
[0xFFFFEB9C],
[0xFF60D276],
[0xFFFF5367]
],
[
[0xFF00B050],
[0xFFFF0000],
[0xFF0070C0],
[0xFFFFC000],
[0xFFFFC000],
[0xFF00B050],
[0xFFFF0000]
],
[
[3, 0],
[9, 0],
[8, 0],
[4, 0],
[5, 0],
[6, 0],
[7, 0]
],
[
[1, 0],
[9, 0],
[8, 0],
[4, 0],
[5, 0],
[6, 0],
[7, 0]
]
];
function isObject(what) {
return ( (what != null) && (typeof(what) == "object") );
}
function DrawingBounds(minX, maxX, minY, maxY)
{
this.minX = minX;
this.maxX = maxX;
this.minY = minY;
this.maxY = maxY;
}
function getCurrentTime() {
var currDate = new Date();
return currDate.getTime();
}
function roundPlus(x, n) { //x - число, n - количество знаков
if ( isNaN(x) || isNaN(n) ) return false;
var m = Math.pow(10,n);
return Math.round(x * m) / m;
}
function CCellObjectInfo () {
this.col = 0;
this.row = 0;
this.colOff = 0;
this.rowOff = 0;
}
CCellObjectInfo.prototype.initAfterSerialize = function() {
this.row = Math.max(0, this.row);
this.col = Math.max(0, this.col);
};
/** @constructor */
function asc_CChartBinary(chart) {
this["binary"] = null;
if (chart) {
if (chart.getObjectType() === AscDFH.historyitem_type_ChartSpace)
{
this["IsChartEx"] = chart.isChartEx();
const writer = new AscCommon.BinaryChartWriter(new AscCommon.CMemory(false));
if(this["IsChartEx"])
{
writer.WriteCT_ChartExSpace(chart);
}
else
{
writer.WriteCT_ChartSpace(chart);
}
this["binary"] = writer.memory.pos + ";" + writer.memory.GetBase64Memory();
this["documentImageUrls"] = AscCommon.g_oDocumentUrls.urls;
}
else if (chart.getObjectType() === AscDFH.historyitem_type_Chart)
{
this["IsChartEx"] = chart.isChartEx();
const chartWriter = new AscCommon.BinaryChartWriter(new AscCommon.CMemory(false));
if (this["IsChartEx"]) {
chartWriter.WriteCT_ChartEx(chart);
if (chart.parent && chart.parent.chartData) {
const chartDataWriter = new AscCommon.BinaryChartWriter(new AscCommon.CMemory(false));
chartDataWriter.WriteCT_ChartData(chart.parent.chartData);
this["binaryChartData"] = chartDataWriter.memory.GetBase64Memory();
}
} else {
chartWriter.WriteCT_Chart(chart);
}
this["binary"] = chartWriter.memory.GetBase64Memory();
this["documentImageUrls"] = AscCommon.g_oDocumentUrls.urls;
}
if (window['IS_NATIVE_EDITOR']) {
if(chart.theme) {
let pptx_writer = new AscCommon.CBinaryFileWriter();
pptx_writer.WriteTheme(chart.theme);
this["themeBinary"] = pptx_writer.pos + ";" + pptx_writer.GetBase64Memory();
}
if(chart.colorMapOverride) {
let pptx_writer = new AscCommon.CBinaryFileWriter();
pptx_writer.WriteRecord1(1, chart.colorMapOverride, pptx_writer.WriteClrMap);
this["colorMapBinary"] = pptx_writer.pos + ";" + pptx_writer.GetBase64Memory();
}
this["urls"] = JSON.stringify(AscCommon.g_oDocumentUrls.getUrls());
if(chart.parent && chart.parent.docPr){
this["cTitle"] = chart.parent.docPr.title;
this["cDescription"] = chart.parent.docPr.descr;
}
else{
this["cTitle"] = chart.getTitle();
this["cDescription"] = chart.getDescription();
}
}
}
}
asc_CChartBinary.prototype = {
asc_getBinary: function() { return this["binary"]; },
asc_setBinary: function(val) { this["binary"] = val; },
asc_getBinaryChartData: function() { return this["binaryChartData"]; },
asc_setBinaryChartData: function(val) { this["binaryChartData"] = val; },
asc_setIsChartEx: function(val){this["IsChartEx"] = val;},
asc_getIsChartEx: function(){return this["IsChartEx"];},
getChartSpace: function(workSheet)
{
const binary = this["binary"];
const stream = AscFormat.CreateBinaryReader(binary, 0, binary.length);
//надо сбросить то, что остался после открытия документа
AscCommon.pptx_content_loader.Clear();
const oNewChartSpace = Asc.editor.isPdfEditor() ? new AscPDF.CPdfChartSpace() : new AscFormat.CChartSpace();
const oBinaryChartReader = new AscCommon.BinaryChartReader(stream);
if(this["IsChartEx"]) {
oBinaryChartReader.ExternalReadCT_ChartExSpace(stream.size , oNewChartSpace, workSheet);
}
else {
oBinaryChartReader.ExternalReadCT_ChartSpace(stream.size , oNewChartSpace, workSheet);
}
return oNewChartSpace;
},
getChart: function()
{
const binary = this["binary"];
const isChartEx = this["IsChartEx"];
const stream = AscFormat.CreateBinaryReader(binary, 0, binary.length);
//надо сбросить то, что остался после открытия документа
AscCommon.pptx_content_loader.Clear();
const oNewChart = new AscFormat.CChart();
const oBinaryChartReader = new AscCommon.BinaryChartReader(stream);
oBinaryChartReader.curChart = {};
oBinaryChartReader.bcr.Read1(stream.size, function (t, l) {
if (isChartEx) {
return oBinaryChartReader.ReadCT_ChartEx(t, l, oNewChart);
} else {
return oBinaryChartReader.ReadCT_Chart(t, l, oNewChart);
}
});
return oNewChart;
},
getChartData: function()
{
const binary = this["binaryChartData"];
if (!binary) {
return null;
}
const stream = AscFormat.CreateBinaryReader(binary, 0, binary.length);
//надо сбросить то, что остался после открытия документа
AscCommon.pptx_content_loader.Clear();
const oChartData = new AscFormat.CChartData();
const oBinaryChartReader = new AscCommon.BinaryChartReader(stream);
oBinaryChartReader.curChart = {};
oBinaryChartReader.bcr.Read1(stream.size, function (t, l) {
return oBinaryChartReader.ReadCT_ChartData(t, l, oChartData);
});
return oChartData;
},
getWorkbookBinary: function() { return this["workbookBinary"]; },
setWorkbookBinary: function(val) { this["workbookBinary"] = val; },
asc_getThemeBinary: function() { return this["themeBinary"]; },
asc_setThemeBinary: function(val) { this["themeBinary"] = val; },
asc_setColorMapBinary: function(val){this["colorMapBinary"] = val;},
asc_getColorMapBinary: function(){return this["colorMapBinary"];},
getTheme: function()
{
var binary = this["themeBinary"];
if(binary)
{
let oBinaryReader = AscFormat.CreatePPTYLoader(binary, 0, binary.length);
return oBinaryReader.ReadTheme();
}
return null;
},
getColorMap: function()
{
var binary = this["colorMapBinary"];
if(binary)
{
let oBinaryReader = AscFormat.CreatePPTYLoader(binary, 0, binary.length);
let _rec = oBinaryReader.stream.GetUChar();
let ret = new AscFormat.ClrMap();
oBinaryReader.ReadClrMap(ret);
return ret;
}
return null;
}
};
/** @constructor */
function asc_CChartSeria() {
this.Val = { Formula: "", NumCache: [] };
this.xVal = { Formula: "", NumCache: [] };
this.Cat = { Formula: "", NumCache: [] };
this.TxCache = { Formula: "", NumCache: [] };
this.Marker = { Size: 0, Symbol: "" };
this.FormatCode = "";
this.isHidden = false;
}
asc_CChartSeria.prototype = {
asc_getValFormula: function() { return this.Val.Formula; },
asc_setValFormula: function(formula) { this.Val.Formula = formula; },
asc_getxValFormula: function() { return this.xVal.Formula; },
asc_setxValFormula: function(formula) { this.xVal.Formula = formula; },
asc_getCatFormula: function() { return this.Cat.Formula; },
asc_setCatFormula: function(formula) { this.Cat.Formula = formula; },
asc_getTitle: function() { return this.TxCache.NumCache.length > 0 ? this.TxCache.NumCache[0].val : ""; },
asc_setTitle: function(title) { this.TxCache.NumCache = [{ numFormatStr: "General", isDateTimeFormat: false, val: title, isHidden: false }] ; },
asc_getTitleFormula: function() { return this.TxCache.Formula; },
asc_setTitleFormula: function(val) { this.TxCache.Formula = val; },
asc_getMarkerSize: function() { return this.Marker.Size; },
asc_setMarkerSize: function(size) { this.Marker.Size = size; },
asc_getMarkerSymbol: function() { return this.Marker.Symbol; },
asc_setMarkerSymbol: function(symbol) { this.Marker.Symbol = symbol; },
asc_getFormatCode: function() { return this.FormatCode; },
asc_setFormatCode: function(format) { this.FormatCode = format; }
};
var nSparklineMultiplier = 3.75;
function CSparklineView()
{
this.col = null;
this.row = null;
this.ws = null;
this.extX = null;
this.extY = null;
this.chartSpace = null;
}
function CreateSparklineMarker(oUniFill, bPreview)
{
var oMarker = new AscFormat.CMarker();
oMarker.symbol = AscFormat.SYMBOL_DIAMOND;
oMarker.size = 10;
if(bPreview){
oMarker.size = 30;
}
oMarker.spPr = new AscFormat.CSpPr();
oMarker.spPr.Fill = oUniFill;
oMarker.spPr.ln = AscFormat.CreateNoFillLine();
return oMarker;
}
function CreateUniFillFromExcelColor(oExcelColor)
{
var oUnifill;
/*if(oExcelColor instanceof AscCommonExcel.ThemeColor)
{
oUnifill = AscFormat.CreateUnifillSolidFillSchemeColorByIndex(AscCommonExcel.map_themeExcel_to_themePresentation[oExcelColor.theme]);
if(oExcelColor.tint != null)
{
var unicolor = oUnifill.fill.color;
if(!unicolor.Mods)
unicolor.setMods(new AscFormat.CColorModifiers());
var mod = new AscFormat.CColorMod();
if(oExcelColor.tint > 0)
{
mod.setName("wordTint");
mod.setVal(Math.round(oExcelColor.tint*255));
}
else
{
mod.setName("wordShade");
mod.setVal(Math.round(255 + oExcelColor.tint*255));
}
unicolor.Mods.addMod(mod);
}
//oUnifill = AscFormat.CreateUniFillSchemeColorWidthTint(map_themeExcel_to_themePresentation[oExcelColor.theme], oExcelColor.tint != null ? oExcelColor.tint : 0);
}
else*/
{
oUnifill = AscFormat.CreateUnfilFromRGB(oExcelColor.getR(), oExcelColor.getG(), oExcelColor.getB())
}
return oUnifill;
}
CSparklineView.prototype.initFromSparkline = function(oSparkline, oSparklineGroup, worksheetView, bForPreview)
{
AscFormat.ExecuteNoHistory(function(){
this.ws = worksheetView;
var settings = new Asc.asc_ChartSettings();
var nSparklineType = oSparklineGroup.asc_getType();
switch(nSparklineType)
{
case Asc.c_oAscSparklineType.Column:
{
settings.type = c_oAscChartTypeSettings.barNormal;
break;
}
case Asc.c_oAscSparklineType.Stacked:
{
settings.type = c_oAscChartTypeSettings.barStackedPer;
break;
}
default:
{
settings.type = c_oAscChartTypeSettings.lineNormal;
break;
}
}
var ser = new asc_CChartSeria();
ser.Val.Formula = oSparkline.f;
if(oSparkline.oCache){
ser.Val.NumCache = oSparkline.oCache;
}
var chartSeries = [ser];
var chart_space = AscFormat.DrawingObjectsController.prototype._getChartSpace(chartSeries, settings, true);
chart_space.isSparkline = true;
chart_space.setBDeleted(false);
if(worksheetView){
chart_space.setWorksheet(worksheetView.model);
}
chart_space.displayHidden = oSparklineGroup.asc_getDisplayHidden();
chart_space.displayEmptyCellsAs = oSparklineGroup.asc_getDisplayEmpty();
settings.putTitle(c_oAscChartTitleShowSettings.none);
settings.putLegendPos(Asc.c_oAscChartLegendShowSettings.none);
chart_space.recalculateReferences();
chart_space.recalcInfo.recalculateReferences = false;
var oSerie = chart_space.chart.plotArea.charts[0].series[0];
var aSeriesPoints = oSerie.getNumPts();
var val_ax_props = new AscCommon.asc_ValAxisSettings();
var i, fMinVal = null, fMaxVal = null;
if(settings.type !== c_oAscChartTypeSettings.barStackedPer) {
if (oSparklineGroup.asc_getMinAxisType() === Asc.c_oAscSparklineAxisMinMax.Custom && oSparklineGroup.asc_getManualMin() !== null) {
val_ax_props.putMinValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMinVal(oSparklineGroup.asc_getManualMin());
}
else {
val_ax_props.putMinValRule(c_oAscValAxisRule.auto);
for (i = 0; i < aSeriesPoints.length; ++i) {
if (fMinVal === null) {
fMinVal = aSeriesPoints[i].val;
}
else {
if (fMinVal > aSeriesPoints[i].val) {
fMinVal = aSeriesPoints[i].val;
}
}
}
}
if (oSparklineGroup.asc_getMaxAxisType() === Asc.c_oAscSparklineAxisMinMax.Custom && oSparklineGroup.asc_getManualMax() !== null) {
val_ax_props.putMinValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMinVal(oSparklineGroup.asc_getManualMax());
}
else {
val_ax_props.putMaxValRule(c_oAscValAxisRule.auto);
for (i = 0; i < aSeriesPoints.length; ++i) {
if (fMaxVal === null) {
fMaxVal = aSeriesPoints[i].val;
} else {
if (fMaxVal < aSeriesPoints[i].val) {
fMaxVal = aSeriesPoints[i].val;
}
}
}
}
if (fMinVal !== null && fMaxVal !== null) {
if (fMinVal !== fMaxVal) {
val_ax_props.putMinValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMinVal(fMinVal);
val_ax_props.putMaxValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMaxVal(fMaxVal);
}
}
else if (fMinVal !== null) {
val_ax_props.putMinValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMinVal(fMinVal);
}
else if (fMaxVal !== null) {
val_ax_props.putMaxValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMaxVal(fMaxVal);
}
}
else
{
val_ax_props.putMinValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMinVal(-1);
val_ax_props.putMaxValRule(c_oAscValAxisRule.fixed);
val_ax_props.putMaxVal(1);
}
val_ax_props.putTickLabelsPos(Asc.c_oAscTickLabelsPos.TICK_LABEL_POSITION_NONE);
val_ax_props.putInvertValOrder(false);
val_ax_props.putDispUnitsRule(Asc.c_oAscValAxUnits.none);
val_ax_props.putMajorTickMark(Asc.c_oAscTickMark.TICK_MARK_NONE);
val_ax_props.putMinorTickMark(Asc.c_oAscTickMark.TICK_MARK_NONE);
val_ax_props.putCrossesRule(Asc.c_oAscCrossesRule.auto);
val_ax_props.putLabel(c_oAscChartTitleShowSettings.none);
val_ax_props.putGridlines(c_oAscGridLinesSettings.none);
var cat_ax_props = new AscCommon.asc_CatAxisSettings();
cat_ax_props.putIntervalBetweenLabelsRule(Asc.c_oAscBetweenLabelsRule.auto);
cat_ax_props.putLabelsPosition(Asc.c_oAscLabelsPosition.betweenDivisions);
cat_ax_props.putTickLabelsPos(Asc.c_oAscTickLabelsPos.TICK_LABEL_POSITION_NONE);
cat_ax_props.putLabelsAxisDistance(100);
cat_ax_props.putMajorTickMark(Asc.c_oAscTickMark.TICK_MARK_NONE);
cat_ax_props.putMinorTickMark(Asc.c_oAscTickMark.TICK_MARK_NONE);
cat_ax_props.putIntervalBetweenTick(1);
cat_ax_props.putCrossesRule(Asc.c_oAscCrossesRule.auto);
cat_ax_props.putLabel(c_oAscChartTitleShowSettings.none);
cat_ax_props.putGridlines(c_oAscGridLinesSettings.none);
if(oSparklineGroup.rightToLeft)
{
cat_ax_props.putInvertCatOrder(true);
}
settings.addVertAxesProps(val_ax_props);
settings.addHorAxesProps(cat_ax_props);
AscFormat.DrawingObjectsController.prototype.applyPropsToChartSpace(settings, chart_space);
oSerie = chart_space.chart.plotArea.charts[0].series[0];
aSeriesPoints = oSerie.getNumPts();
if(!chart_space.spPr)
chart_space.setSpPr(new AscFormat.CSpPr());
var new_line = new AscFormat.CLn();
new_line.setFill(AscFormat.CreateNoFillUniFill());
chart_space.spPr.setLn(new_line);
chart_space.spPr.setFill(AscFormat.CreateNoFillUniFill());
var dLineWidthSpaces = 500;
if(!chart_space.chart.plotArea.spPr)
{
chart_space.chart.plotArea.setSpPr(new AscFormat.CSpPr());
chart_space.chart.plotArea.spPr.setFill(AscFormat.CreateNoFillUniFill());
}
var oAxis = chart_space.chart.plotArea.getAxisByTypes();
oAxis.valAx[0].setDelete(true);
if(!oSerie.spPr)
{
oSerie.setSpPr(new AscFormat.CSpPr());
}
var fCallbackSeries = null;
if(nSparklineType === Asc.c_oAscSparklineType.Line)
{
var oLn = new AscFormat.CLn();
oLn.setW(36000*nSparklineMultiplier*25.4*(bForPreview ? 2.25 : oSparklineGroup.asc_getLineWeight())/72);
oSerie.spPr.setLn(oLn);
if(oSparklineGroup.markers && oSparklineGroup.colorMarkers)
{
chart_space.chart.plotArea.charts[0].setMarker(true);
chart_space.recalcInfo.recalculateReferences = false;
oSerie.marker = CreateSparklineMarker(CreateUniFillFromExcelColor(oSparklineGroup.colorMarkers), bForPreview);
}
fCallbackSeries = function(oSeries, nIdx, oExcelColor)
{
for(var t = 0; t < oSeries.dPt.length; ++t)
{
if(oSeries.dPt[t].idx === nIdx)
{
if(oSeries.dPt[t].marker && oSeries.dPt[t].marker.spPr)
{
oSeries.dPt[t].marker.spPr.Fill = CreateUniFillFromExcelColor(oExcelColor);
}
return;
}
}
var oDPt = new AscFormat.CDPt();
oDPt.idx = nIdx;
oDPt.marker = CreateSparklineMarker(CreateUniFillFromExcelColor(oExcelColor), bForPreview);
oSeries.addDPt(oDPt);
}
}
else
{
chart_space.chart.plotArea.charts[0].setGapWidth(30);
chart_space.chart.plotArea.charts[0].setOverlap(50);
fCallbackSeries = function(oSeries, nIdx, oExcelColor)
{
for(var t = 0; t < oSeries.dPt.length; ++t)
{
if(oSeries.dPt[t].idx === nIdx)
{
if(oSeries.dPt[t].spPr)
{
if(oExcelColor){
oSeries.dPt[t].spPr.Fill = CreateUniFillFromExcelColor(oExcelColor);
oSeries.dPt[t].spPr.ln = new AscFormat.CLn();
oSeries.dPt[t].spPr.ln.Fill = oSeries.dPt[t].spPr.Fill.createDuplicate();
oSeries.dPt[t].spPr.ln.w = dLineWidthSpaces;
}
else{
oSeries.dPt[t].spPr.Fill = AscFormat.CreateNoFillUniFill();
oSeries.dPt[t].spPr.ln = AscFormat.CreateNoFillLine();
}
}
return;
}
}
var oDPt = new AscFormat.CDPt();
oDPt.idx = nIdx;
oDPt.spPr = new AscFormat.CSpPr();
if(oExcelColor ) {
oDPt.spPr.Fill = CreateUniFillFromExcelColor(oExcelColor);
oDPt.spPr.ln = new AscFormat.CLn();
oDPt.spPr.ln.Fill = oDPt.spPr.Fill.createDuplicate();
oDPt.spPr.ln.w = dLineWidthSpaces;
}
else{
oDPt.spPr.Fill = AscFormat.CreateNoFillUniFill();
oDPt.spPr.ln = AscFormat.CreateNoFillLine();
}
oSeries.addDPt(oDPt);
}
}
var aMaxPoints = null, aMinPoints = null;
if(aSeriesPoints.length > 0)
{
if(fCallbackSeries)
{
if(oSparklineGroup.negative && oSparklineGroup.colorNegative)
{
for(i = 0; i < aSeriesPoints.length; ++i)
{
if(aSeriesPoints[i].val < 0)
{
fCallbackSeries(oSerie, aSeriesPoints[i].idx, oSparklineGroup.colorNegative);
}
}
}
if(oSparklineGroup.last && oSparklineGroup.colorLast)
{
fCallbackSeries(oSerie, aSeriesPoints[aSeriesPoints.length - 1].idx, oSparklineGroup.colorLast);
}
if(oSparklineGroup.first && oSparklineGroup.colorFirst)
{
fCallbackSeries(oSerie, aSeriesPoints[0].idx, oSparklineGroup.colorFirst);
}
if(oSparklineGroup.high && oSparklineGroup.colorHigh)
{
aMaxPoints = [aSeriesPoints[0]];
for(i = 1; i < aSeriesPoints.length; ++i)
{
if(aSeriesPoints[i].val > aMaxPoints[0].val)
{
aMaxPoints.length = 0;
aMaxPoints.push(aSeriesPoints[i]);
}
else if(aSeriesPoints[i].val === aMaxPoints[0].val)
{
aMaxPoints.push(aSeriesPoints[i]);
}
}
for(i = 0; i < aMaxPoints.length; ++i)
{
fCallbackSeries(oSerie, aMaxPoints[i].idx, oSparklineGroup.colorHigh);
}
}
if(oSparklineGroup.low && oSparklineGroup.colorLow)
{
aMinPoints = [aSeriesPoints[0]];
for(i = 1; i < aSeriesPoints.length; ++i)
{
if(aSeriesPoints[i].val < aMinPoints[0].val)
{
aMinPoints.length = 0;
aMinPoints.push(aSeriesPoints[i]);
}
else if(aSeriesPoints[i].val === aMinPoints[0].val)
{
aMinPoints.push(aSeriesPoints[i]);
}
}
for(i = 0; i < aMinPoints.length; ++i)
{
fCallbackSeries(oSerie, aMinPoints[i].idx, oSparklineGroup.colorLow);
}
}
if(nSparklineType !== Asc.c_oAscSparklineType.Line){
for(i = 0; i < aSeriesPoints.length; ++i)
{
if(AscFormat.fApproxEqual(aSeriesPoints[i].val, 0))
{
fCallbackSeries(oSerie, aSeriesPoints[i].idx, null);
}
}
}
}
}
if(!oSparklineGroup.displayXAxis)
{
oAxis.catAx[0].setDelete(true);
}
else if(aSeriesPoints.length > 1)
{
aSeriesPoints = [].concat(aSeriesPoints);
var dMinVal, dMaxVal, bSorted = false;
if(val_ax_props.minVal == null)
{
if(aMinPoints)
{
dMinVal = aMinPoints[0].val;
}
else
{
aSeriesPoints.sort(function(a, b){return a.val - b.val;});
bSorted = true;
dMinVal = aSeriesPoints[0].val;
}
}
else
{
dMinVal = val_ax_props.minVal;
}
if(val_ax_props.maxVal == null)
{
if(aMaxPoints)
{
dMaxVal = aMaxPoints[0].val;
}
else
{
if(!bSorted)
{
aSeriesPoints.sort(function(a, b){return a.val - b.val;});
bSorted = true;
}
dMaxVal = aSeriesPoints[aSeriesPoints.length - 1].val;
}
}
else
{
dMaxVal = val_ax_props.maxVal;
}
if((dMaxVal !== dMinVal) && (dMaxVal < 0 || dMinVal > 0))
{
oAxis.catAx[0].setDelete(true);
}
}
if(oSparklineGroup.colorSeries)
{
var oUnifill = CreateUniFillFromExcelColor(oSparklineGroup.colorSeries);
var oSerie = chart_space.chart.plotArea.charts[0].series[0];
//oSerie.setSpPr(new AscFormat.CSpPr());
if(nSparklineType === Asc.c_oAscSparklineType.Line)
{
var oLn = oSerie.spPr.ln;
oLn.setFill(oUnifill);
oSerie.spPr.setLn(oLn);
}
else
{
oSerie.spPr.setFill(oUnifill);
oSerie.spPr.ln = new AscFormat.CLn();
oSerie.spPr.ln.Fill = oSerie.spPr.Fill.createDuplicate();
oSerie.spPr.ln.w = dLineWidthSpaces;
}
}
this.chartSpace = chart_space;
if(worksheetView)
{
var oBBox = oSparkline.sqRef;
this.col = oBBox.c1;
this.row = oBBox.r1;
this.x = worksheetView.getCellLeft(oBBox.c1, 3);
this.y = worksheetView.getCellTop(oBBox.r1, 3);
var oMergeInfo = worksheetView.model.getMergedByCell( oBBox.r1, oBBox.c1 );
if(oMergeInfo)
{
this.extX = 0;
for(i = oMergeInfo.c1; i <= oMergeInfo.c2; ++i)
{
this.extX += worksheetView.getColumnWidth(i, 3)
}
this.extY = 0;
for(i = oMergeInfo.r1; i <= oMergeInfo.r2; ++i)
{
this.extY = worksheetView.getRowHeight(i, 3);
}
}
else
{
this.extX = worksheetView.getColumnWidth(oBBox.c1, 3);
this.extY = worksheetView.getRowHeight(oBBox.r1, 3);
}
AscFormat.CheckSpPrXfrm(this.chartSpace);
this.updatePlotAreaLayout();
this.chartSpace.recalculate();
}
}, this, []);
};
CSparklineView.prototype.updatePlotAreaLayout = function()
{
if(!this.chartSpace)
{
return;
}
var offX = this.x*nSparklineMultiplier;
var offY = this.y*nSparklineMultiplier;
var extX = this.extX*nSparklineMultiplier;
var extY = this.extY*nSparklineMultiplier;
this.chartSpace.spPr.xfrm.setOffX(offX);
this.chartSpace.spPr.xfrm.setOffY(offY);
this.chartSpace.spPr.xfrm.setExtX(extX);
this.chartSpace.spPr.xfrm.setExtY(extY);
var oLayout = new AscFormat.CLayout();
oLayout.setXMode(AscFormat.LAYOUT_MODE_EDGE);
oLayout.setYMode(AscFormat.LAYOUT_MODE_EDGE);
oLayout.setLayoutTarget(AscFormat.LAYOUT_TARGET_INNER);
var fInset = 2.0;
var fPosX, fPosY, fExtX, fExtY;
fExtX = extX - 2*fInset;
fExtY = extY - 2*fInset;
this.chartSpace.bEmptySeries = false;
if(fExtX <= 0.0 || fExtY <= 0.0)
{
this.chartSpace.bEmptySeries = true;
return;
}
fPosX = (extX - fExtX) / 2.0;
fPosY = (extY - fExtY) / 2.0;
var fLayoutX = this.chartSpace.calculateLayoutByPos(0, oLayout.xMode, fPosX, extX);
var fLayoutY = this.chartSpace.calculateLayoutByPos(0, oLayout.yMode, fPosY, extY);
var fLayoutW = this.chartSpace.calculateLayoutBySize(fPosX, oLayout.wMode, extX, fExtX);
var fLayoutH = this.chartSpace.calculateLayoutBySize(fPosY, oLayout.hMode, extY, fExtY);
oLayout.setX(fLayoutX);
oLayout.setY(fLayoutY);
oLayout.setW(fLayoutW);
oLayout.setH(fLayoutH);
this.chartSpace.chart.plotArea.setLayout(oLayout);
};
CSparklineView.prototype.draw = function(graphics, offX, offY)
{
var x = this.ws.getCellLeft(this.col, 3) - offX;
var y = this.ws.getCellTop(this.row, 3) - offY;
x = this.ws.checkRtl(x, undefined, 3);
var i;
var extX;
var extY;
var oMergeInfo = this.ws.model.getMergedByCell( this.row, this.col );
if(oMergeInfo){
extX = 0;
for(i = oMergeInfo.c1; i <= oMergeInfo.c2; ++i){
extX += this.ws.getColumnWidth(i, 3);
}
extY = 0;
for(i = oMergeInfo.r1; i <= oMergeInfo.r2; ++i){
extY = this.ws.getRowHeight(i, 3);
}
}
else{
extX = this.ws.getColumnWidth(this.col, 3);
extY = this.ws.getRowHeight(this.row, 3);
}
if (this.ws.getRightToLeft()) {
x -= extX;
}
var bExtent = Math.abs(this.extX - extX) > 0.01 || Math.abs(this.extY - extY) > 0.01;
var bPosition = Math.abs(this.x - x) > 0.01 || Math.abs(this.y - y) > 0.01;
if(bExtent || bPosition)
{
this.x = x;
this.y = y;
this.extX = extX;
this.extY = extY;
AscFormat.ExecuteNoHistory(function(){
if(bPosition)
{
this.chartSpace.spPr.xfrm.setOffX(x*nSparklineMultiplier);
this.chartSpace.spPr.xfrm.setOffY(y*nSparklineMultiplier);
}
if(bExtent)
{
this.chartSpace.spPr.xfrm.setExtX(extX*nSparklineMultiplier);
this.chartSpace.spPr.xfrm.setExtY(extY*nSparklineMultiplier);
this.updatePlotAreaLayout();
}
}, this, []);
if(bExtent)
{
this.chartSpace.handleUpdateExtents();
this.chartSpace.recalculate();
}
else
{
this.chartSpace.x = x*nSparklineMultiplier;
this.chartSpace.y = y*nSparklineMultiplier;
this.chartSpace.transform.tx = this.chartSpace.x;
this.chartSpace.transform.ty = this.chartSpace.y;
}
}
var _true_height = this.chartSpace.chartObj.calcProp.trueHeight;
var _true_width = this.chartSpace.chartObj.calcProp.trueWidth;
this.chartSpace.chartObj.calcProp.trueWidth = this.chartSpace.extX * this.chartSpace.chartObj.calcProp.pxToMM;
this.chartSpace.chartObj.calcProp.trueHeight = this.chartSpace.extY * this.chartSpace.chartObj.calcProp.pxToMM;
this.chartSpace.draw(graphics);
this.chartSpace.chartObj.calcProp.trueWidth = _true_width;
this.chartSpace.chartObj.calcProp.trueHeight = _true_height;
};
CSparklineView.prototype.setMinMaxValAx = function(minVal, maxVal, oSparklineGroup)
{
var oAxis = this.chartSpace.chart.plotArea.getAxisByTypes();
var oValAx = oAxis.valAx[0];
if(oValAx)
{
if(minVal !== null)
{
if(!oValAx.scaling)
{
oValAx.setScaling(new AscFormat.CScaling());
}
if(oValAx.scaling.min === null || !AscFormat.fApproxEqual(oValAx.scaling.min, minVal))
{
oValAx.scaling.setMin(minVal);
}
}
if(maxVal !== null)
{
if(!oValAx.scaling)
{
oValAx.setScaling(new AscFormat.CScaling());
}
if(oValAx.scaling.max === null || !AscFormat.fApproxEqual(oValAx.scaling.max, maxVal))
{
oValAx.scaling.setMax(maxVal);
}
}
if(oSparklineGroup.displayXAxis)
{
var aSeriesPoints = this.chartSpace.chart.plotArea.charts[0].series[0].getNumPts();
if(aSeriesPoints.length > 1)
{
aSeriesPoints = [].concat(aSeriesPoints);
var dMinVal, dMaxVal, bSorted = false;
if(minVal == null)
{
aSeriesPoints.sort(function(a, b){return a.val - b.val;});
bSorted = true;
dMinVal = aSeriesPoints[0].val;
}
else
{
dMinVal = minVal;
}
if(maxVal == null)
{
if(!bSorted)
{
aSeriesPoints.sort(function(a, b){return a.val - b.val;});
bSorted = true;
}
dMaxVal = aSeriesPoints[aSeriesPoints.length - 1].val;
}
else
{
dMaxVal = maxVal;
}
if(dMaxVal < 0 || dMinVal > 0)
{
oAxis.catAx[0].setDelete(true);
}
else
{
oAxis.catAx[0].setDelete(false);
}
}
}
this.chartSpace.recalculate();
}
};
//-----------------------------------------------------------------------------------
// Manager
//-----------------------------------------------------------------------------------
var rAF = (function() {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) { return setTimeout(callback, 1000/ 60); };
})();
var cAF = (function () {
return window.cancelAnimationFrame ||
window.cancelRequestAnimationFrame ||
window.webkitCancelAnimationFrame ||
window.webkitCancelRequestAnimationFrame ||
window.mozCancelRequestAnimationFrame ||
window.oCancelRequestAnimationFrame ||
window.msCancelRequestAnimationFrame ||
clearTimeout;
})();
function DrawingBase(ws) {
this.worksheet = ws;
this.Type = c_oAscCellAnchorType.cellanchorTwoCell;
this.Pos = { X: 0, Y: 0 };
this.editAs = c_oAscCellAnchorType.cellanchorTwoCell;
this.from = new CCellObjectInfo();
this.to = new CCellObjectInfo();
this.ext = { cx: 0, cy: 0 };
this.graphicObject = null; // CImage, CShape, GroupShape or CChartAsGroup
this.boundsFromTo =
{
from: new CCellObjectInfo(),
to : new CCellObjectInfo()
};
}
//{ prototype
DrawingBase.prototype.isUseInDocument = function() {
if(this.worksheet && this.worksheet.model){
var aDrawings = this.worksheet.model.Drawings;
for(var i = 0; i < aDrawings.length; ++i){
if(aDrawings[i] === this){
return true;
}
}
}
return false;
};
DrawingBase.prototype.getAllFonts = function(AllFonts) {
var _t = this;
_t.graphicObject && _t.graphicObject.documentGetAllFontNames && _t.graphicObject.documentGetAllFontNames(AllFonts);
};
DrawingBase.prototype.isImage = function() {
var _t = this;
return _t.graphicObject ? _t.graphicObject.isImage() : false;
};
DrawingBase.prototype.isShape = function() {
var _t = this;
return _t.graphicObject ? _t.graphicObject.isShape() : false;
};
DrawingBase.prototype.isGroup = function() {
var _t = this;
return _t.graphicObject ? _t.graphicObject.isGroup() : false;
};
DrawingBase.prototype.isChart = function() {
var _t = this;
return _t.graphicObject ? _t.graphicObject.isChart() : false;
};
DrawingBase.prototype.isGraphicObject = function() {
var _t = this;
return _t.graphicObject != null;
};
DrawingBase.prototype.isLocked = function() {
var _t = this;
return ( (_t.graphicObject.lockType != c_oAscLockTypes.kLockTypeNone) && (_t.graphicObject.lockType != c_oAscLockTypes.kLockTypeMine) )
};
DrawingBase.prototype.getCanvasContext = function() {
return this.getDrawingObjects().drawingDocument.CanvasHitContext;
};
DrawingBase.prototype.pxToMm = function(val) {
let oDrawingObjects = this.getDrawingObjects();
if(oDrawingObjects) {
return oDrawingObjects.pxToMm(val);
}
return 0;
};
DrawingBase.prototype.mmToPx = function(val) {
let oDrawingObjects = this.getDrawingObjects();
if(oDrawingObjects) {
return oDrawingObjects.mmToPx(val);
}
return 0;
};
// GraphicObject: x, y, extX, extY
DrawingBase.prototype.getGraphicObjectMetrics = function() {
var _t = this;
var metrics = { x: 0, y: 0, extX: 0, extY: 0 };
var coordsFrom, coordsTo;
switch(_t.Type)
{
case c_oAscCellAnchorType.cellanchorAbsolute:
{
metrics.x = this.Pos.X;
metrics.y = this.Pos.Y;
metrics.extX = this.ext.cx;
metrics.extY = this.ext.cy;
break;
}
case c_oAscCellAnchorType.cellanchorOneCell:
{
if (this.worksheet) {
coordsFrom = this.getDrawingObjects().calculateCoords(_t.from);
metrics.x = this.pxToMm( coordsFrom.x );
metrics.y = this.pxToMm( coordsFrom.y );
metrics.extX = this.ext.cx;
metrics.extY = this.ext.cy;
if (this.worksheet.getRightToLeft()) {
metrics.x -= metrics.extX;
}
}
break;
}
case c_oAscCellAnchorType.cellanchorTwoCell:
{
if (this.worksheet) {
coordsFrom = this.getDrawingObjects().calculateCoords(_t.from);
if (!this.worksheet.getRightToLeft()) {
metrics.x = this.pxToMm( coordsFrom.x );
metrics.y = this.pxToMm( coordsFrom.y );
coordsTo = this.getDrawingObjects().calculateCoords(_t.to);
metrics.extX = this.pxToMm( coordsTo.x - coordsFrom.x );
metrics.extY = this.pxToMm( coordsTo.y - coordsFrom.y );
} else {
metrics.y = this.pxToMm( coordsFrom.y );
coordsTo = this.getDrawingObjects().calculateCoords(_t.to);
metrics.extX = this.pxToMm( coordsFrom.x - coordsTo.x );
metrics.extY = this.pxToMm( coordsTo.y - coordsFrom.y );
metrics.x = this.pxToMm( coordsTo.x );
}
}
break;
}
}
if(metrics.extX < 0)
{
metrics.extX = 0;
}
if(metrics.extY < 0)
{
metrics.extY = 0;
}
return metrics;
};
// Считаем From/To исходя из graphicObject
DrawingBase.prototype._getGraphicObjectCoords = function()
{
var _t = this;
if ( _t.isGraphicObject() ) {
var ret = {Pos:{}, ext: {}, from: {}, to: {}};
var rot = AscFormat.isRealNumber(_t.graphicObject.rot) ? _t.graphicObject.rot : 0;
rot = AscFormat.normalizeRotate(rot);
var fromX, fromY, toX, toY;
if (AscFormat.checkNormalRotate(rot))
{
fromX = this.mmToPx(_t.graphicObject.x);
fromY = this.mmToPx(_t.graphicObject.y);
toX = this.mmToPx(_t.graphicObject.x + _t.graphicObject.extX);
toY = this.mmToPx(_t.graphicObject.y + _t.graphicObject.extY);
ret.Pos.X = _t.graphicObject.x;
ret.Pos.Y = _t.graphicObject.y;
ret.ext.cx = _t.graphicObject.extX;
ret.ext.cy = _t.graphicObject.extY;
}
else
{
var _xc, _yc;
_xc = _t.graphicObject.x + _t.graphicObject.extX/2;
_yc = _t.graphicObject.y + _t.graphicObject.extY/2;
fromX = this.mmToPx(_xc - _t.graphicObject.extY/2);
fromY = this.mmToPx(_yc - _t.graphicObject.extX/2);
toX = this.mmToPx(_xc + _t.graphicObject.extY/2);
toY = this.mmToPx(_yc + _t.graphicObject.extX/2);
ret.Pos.X = _xc - _t.graphicObject.extY/2;
ret.Pos.Y = _yc - _t.graphicObject.extX/2;
ret.ext.cx = _t.graphicObject.extY;
ret.ext.cy = _t.graphicObject.extX;
}
if (this.worksheet.getRightToLeft()) {
let temp = fromX;
fromX = toX;
toX = temp;
}
var fromColCell = this.worksheet.findCellByXY(fromX, fromY, true, false, true);
var fromRowCell = this.worksheet.findCellByXY(fromX, fromY, true, true, false);
var toColCell = this.worksheet.findCellByXY(toX, toY, true, false, true);
var toRowCell = this.worksheet.findCellByXY(toX, toY, true, true, false);
ret.from.col = fromColCell.col;
ret.from.colOff = this.pxToMm(fromColCell.colOff);
ret.from.row = fromRowCell.row;
ret.from.rowOff = this.pxToMm(fromRowCell.rowOff);
ret.to.col = toColCell.col;
ret.to.colOff = this.pxToMm(toColCell.colOff);
ret.to.row = toRowCell.row;
ret.to.rowOff = this.pxToMm(toRowCell.rowOff);
return ret;
}
return null;
};
DrawingBase.prototype.setGraphicObjectCoords = function() {
var _t = this;
var oCoords = this._getGraphicObjectCoords();
if(oCoords)
{
this.Pos.X = oCoords.Pos.X;
this.Pos.Y = oCoords.Pos.Y;
this.ext.cx = oCoords.ext.cx;
this.ext.cy = oCoords.ext.cy;
this.from.col = oCoords.from.col;
this.from.colOff = oCoords.from.colOff;
this.from.row = oCoords.from.row;
this.from.rowOff = oCoords.from.rowOff;
this.to.col = oCoords.to.col;
this.to.colOff = oCoords.to.colOff;
this.to.row = oCoords.to.row;
this.to.rowOff = oCoords.to.rowOff;
}
if ( _t.isGraphicObject() ) {
var rot = AscFormat.isRealNumber(_t.graphicObject.rot) ? _t.graphicObject.rot : 0;
rot = AscFormat.normalizeRotate(rot);
var fromX, fromY, toX, toY;
if (AscFormat.checkNormalRotate(rot))
{
fromX = this.mmToPx(_t.graphicObject.x);
fromY = this.mmToPx(_t.graphicObject.y);
toX = this.mmToPx(_t.graphicObject.x + _t.graphicObject.extX);
toY = this.mmToPx(_t.graphicObject.y + _t.graphicObject.extY);
this.Pos.X = _t.graphicObject.x;
this.Pos.Y = _t.graphicObject.y;
this.ext.cx = _t.graphicObject.extX;
this.ext.cy = _t.graphicObject.extY;
}
else
{
var _xc, _yc;
_xc = _t.graphicObject.x + _t.graphicObject.extX/2;
_yc = _t.graphicObject.y + _t.graphicObject.extY/2;
fromX = this.mmToPx(_xc - _t.graphicObject.extY/2);
fromY = this.mmToPx(_yc - _t.graphicObject.extX/2);
toX = this.mmToPx(_xc + _t.graphicObject.extY/2);
toY = this.mmToPx(_yc + _t.graphicObject.extX/2);
this.Pos.X = _xc - _t.graphicObject.extY/2;
this.Pos.Y = _yc - _t.graphicObject.extX/2;
this.ext.cx = _t.graphicObject.extY;
this.ext.cy = _t.graphicObject.extX;
}
if (this.worksheet.getRightToLeft()) {
let temp = fromX;
fromX = toX;
toX = temp;
}
var fromColCell = this.worksheet.findCellByXY(fromX, fromY, true, false, true);
var fromRowCell = this.worksheet.findCellByXY(fromX, fromY, true, true, false);
var toColCell = this.worksheet.findCellByXY(toX, toY, true, false, true);
var toRowCell = this.worksheet.findCellByXY(toX, toY, true, true, false);
_t.from.col = fromColCell.col;
_t.from.colOff = this.pxToMm(fromColCell.colOff);
_t.from.row = fromRowCell.row;
_t.from.rowOff = this.pxToMm(fromRowCell.rowOff);
_t.to.col = toColCell.col;
_t.to.colOff = this.pxToMm(toColCell.colOff);
_t.to.row = toRowCell.row;
_t.to.rowOff = this.pxToMm(toRowCell.rowOff);
}
};
DrawingBase.prototype.checkBoundsFromTo = function() {
var _t = this;
if ( _t.isGraphicObject() && _t.graphicObject.bounds) {
var bounds = _t.graphicObject.bounds;
var fromX = this.mmToPx(bounds.x > 0 ? bounds.x : 0), fromY = this.mmToPx(bounds.y > 0 ? bounds.y : 0),
toX = this.mmToPx(bounds.x + bounds.w), toY = this.mmToPx(bounds.y + bounds.h);
if(toX < 0)
{
toX = 0;
}
if(toY < 0)
{
toY = 0;
}
if (this.worksheet.getRightToLeft()) {
let temp = fromX;
fromX = toX;
toX = temp;
}
var fromColCell = this.worksheet.findCellByXY(fromX, fromY, true, false, true);
var fromRowCell = this.worksheet.findCellByXY(fromX, fromY, true, true, false);
var toColCell = this.worksheet.findCellByXY(toX, toY, true, false, true);
var toRowCell = this.worksheet.findCellByXY(toX, toY, true, true, false);
_t.boundsFromTo.from.col = fromColCell.col;
_t.boundsFromTo.from.colOff = this.pxToMm(fromColCell.colOff);
_t.boundsFromTo.from.row = fromRowCell.row;
_t.boundsFromTo.from.rowOff = this.pxToMm(fromRowCell.rowOff);
_t.boundsFromTo.to.col = toColCell.col;
_t.boundsFromTo.to.colOff = this.pxToMm(toColCell.colOff);
_t.boundsFromTo.to.row = toRowCell.row;
_t.boundsFromTo.to.rowOff = this.pxToMm(toRowCell.rowOff);
}
};
// Реальное смещение по высоте
DrawingBase.prototype.getRealTopOffset = function() {
var _t = this;
var val = _t.worksheet._getRowTop(_t.from.row) + this.mmToPx(_t.from.rowOff);
return window["Asc"].round(val);
};
// Реальное смещение по ширине
DrawingBase.prototype.getRealLeftOffset = function() {
var _t = this;
var val = _t.worksheet._getColLeft(_t.from.col) + this.mmToPx(_t.from.colOff);
return window["Asc"].round(val);
};
// Ширина по координатам
DrawingBase.prototype.getWidthFromTo = function() {
return (this.worksheet._getColLeft(this.to.col) + this.mmToPx(this.to.colOff) -
this.worksheet._getColLeft(this.from.col) - this.mmToPx(this.from.colOff));
};
// Высота по координатам
DrawingBase.prototype.getHeightFromTo = function() {
return this.worksheet._getRowTop(this.to.row) + this.mmToPx(this.to.rowOff) -
this.worksheet._getRowTop(this.from.row) - this.mmToPx(this.from.rowOff);
};
// Видимое смещение объекта от первой видимой строки
DrawingBase.prototype.getVisibleTopOffset = function(withHeader) {
var _t = this;
var headerRowOff = _t.worksheet._getRowTop(0);
var fvr = _t.worksheet._getRowTop(_t.worksheet.getFirstVisibleRow(true));
var off = _t.getRealTopOffset() - fvr;
off = (off > 0) ? off : 0;
return withHeader ? headerRowOff + off : off;
};
// Видимое смещение объекта от первой видимой колонки
DrawingBase.prototype.getVisibleLeftOffset = function(withHeader) {
var _t = this;
var headerColOff = _t.worksheet._getColLeft(0);
var fvc = _t.worksheet._getColLeft(_t.worksheet.getFirstVisibleCol(true));
var off = _t.getRealLeftOffset() - fvc;
off = (off > 0) ? off : 0;
return withHeader ? headerColOff + off : off;
};
DrawingBase.prototype.getDrawingObjects = function() {
return this.worksheet && this.worksheet.objectRender;
};
DrawingBase.prototype.checkTarget = function(target, bEdit) {
if(!this.graphicObject) {
return false;
}
if(AscCommon.isFileBuild()) {
return false;
}
var bUpdateExtents = false;
var nType = bEdit ? this.graphicObject.getDrawingBaseType() : this.Type;
if(target.target === AscCommonExcel.c_oTargetType.RowResize) {
if(nType === AscCommon.c_oAscCellAnchorType.cellanchorTwoCell ||
nType === AscCommon.c_oAscCellAnchorType.cellanchorOneCell) {
if(this.from.row >= target.row) {
bUpdateExtents = true;
}
else if(this.to.row >= target.row &&
nType === AscCommon.c_oAscCellAnchorType.cellanchorTwoCell) {
bUpdateExtents = true;
}
}
else {
this.checkBoundsFromTo();
if(this.boundsFromTo.to.row >= target.row) {
bUpdateExtents = true;
}
}
}
else {
if(nType === AscCommon.c_oAscCellAnchorType.cellanchorTwoCell ||
nType === AscCommon.c_oAscCellAnchorType.cellanchorOneCell) {
if(this.from.col >= target.col) {
bUpdateExtents = true;
}
else if(this.to.col >= target.col &&
nType === AscCommon.c_oAscCellAnchorType.cellanchorTwoCell) {
bUpdateExtents = true;
}
}
else {
this.checkBoundsFromTo();
if(this.boundsFromTo.to.col >= target.col) {
bUpdateExtents = true;
}
}
}
return bUpdateExtents;
};
DrawingBase.prototype.draw = function (graphics) {
if(this.graphicObject) {
this.graphicObject.draw(graphics);
}
};
DrawingBase.prototype.getBoundsFromTo = function() {
return this.boundsFromTo;
};
DrawingBase.prototype.onUpdate = function (oRect) {
if(AscCommon.isFileBuild()) {
return;
}
var oDO = this.getDrawingObjects();
if(!oDO) {
return;
}
var oRange, oClipRect = null;
if(this.isUseInDocument()) {
if(!oRect) {
var oB = this.getBoundsFromTo();
var c1 = oB.from.col;
var r1 = oB.from.row;
var c2 = oB.to.col;
var r2 = oB.to.row;
oRange = new Asc.Range(c1, r1, c2, r2, true);
oClipRect = this.worksheet.rangeToRectAbs(oRange, 3);
}
else {
oClipRect = oRect;
}
}
oDO.showDrawingObjects(new AscCommon.CDrawTask(oClipRect));
};
DrawingBase.prototype.onSlicerUpdate = function (sName) {
if(!this.graphicObject) {
return false;
}
return this.graphicObject.onSlicerUpdate(sName);
};
DrawingBase.prototype.onSlicerDelete = function (sName) {
if(!this.graphicObject) {
return false;
}
return this.graphicObject.onSlicerDelete(sName);
};
DrawingBase.prototype.onTimeSlicerDelete = function (sName) {
if(!this.graphicObject) {
return false;
}
return this.graphicObject.onTimeSlicerDelete(sName);
};
DrawingBase.prototype.onSlicerLock = function (sName, bLock) {
if(!this.graphicObject) {
return;
}
this.graphicObject.onSlicerLock(sName, bLock);
};
DrawingBase.prototype.onSlicerChangeName = function (sName, sNewName) {
if(!this.graphicObject) {
return;
}
this.graphicObject.onSlicerChangeName(sName, sNewName);
};
DrawingBase.prototype.getSlicerViewByName = function (name) {
if(!this.graphicObject) {
return;
}
return this.graphicObject.getSlicerViewByName(name);
};
DrawingBase.prototype.handleObject = function (fCallback) {
if(!this.graphicObject) {
return;
}
this.graphicObject.handleObject(fCallback);
};
DrawingBase.prototype.initAfterSerialize = function(ws) {
if(!this.graphicObject || !ws) {
return;
}
let bIsShape = this.graphicObject.isShape();
let bIsImage = this.graphicObject.isImage();
if((bIsShape || bIsImage) && !this.graphicObject.spPr) {
return;
}
if(AscCommon.IsHiddenObj(this.graphicObject)) {
return;
}
this.graphicObject.setBDeleted(false);
this.from.initAfterSerialize();
this.to.initAfterSerialize();
this.graphicObject.setDrawingBase(this);
this.graphicObject.setWorksheet(ws);
let oXfrm = this.graphicObject.spPr && this.graphicObject.spPr.xfrm;
this.graphicObject.checkEmptySpPrAndXfrm(oXfrm);
if(this.clientData) {
this.graphicObject.setClientData(this.clientData);
}
ws.Drawings.push(this);
};
function DrawingObjects() {
//-----------------------------------------------------------------------------------
// Scroll offset
//-----------------------------------------------------------------------------------
var ScrollOffset = function() {
this.getX = function() {
return 2 * worksheet._getColLeft(0) - worksheet._getColLeft(worksheet.getFirstVisibleCol(true));
};
this.getY = function() {
return 2 * worksheet._getRowTop(0) - worksheet._getRowTop(worksheet.getFirstVisibleRow(true));
}
};
//-----------------------------------------------------------------------------------
// Private
//-----------------------------------------------------------------------------------
var _this = this;
var asc = window["Asc"];
var api = asc["editor"];
var worksheet = null;
var drawingCtx = null;
var overlayCtx = null;
var scrollOffset = new ScrollOffset();
var aObjects = [];
var aImagesSync = [];
var oStateBeforeLoadChanges = null;
_this.zoom = { last: 1, current: 1 };
_this.canEdit = null;
_this.drawingArea = null;
_this.drawingDocument = null;
_this.asyncImageEndLoaded = null;
_this.CompositeInput = null;
_this.lastX = 0;
_this.lastY = 0;
_this.nCurPointItemsLength = -1;
_this.bUpdateMetrics = true;
_this.shiftMap = {};
// Task timer
_this.animId = null;
_this.drawTask = null;
function drawTaskFunction() {
_this.drawingDocument.CheckTargetShow();
if(_this.drawTask) {
_this.showDrawingObjectsEx(_this.drawTask.getRect());
_this.drawTask = null;
}
_this.animId = null;
}
//-----------------------------------------------------------------------------------
// Create drawing
//-----------------------------------------------------------------------------------
//}
//-----------------------------------------------------------------------------------
// Constructor
//-----------------------------------------------------------------------------------
_this.addShapeOnSheet = function(sType){
if(this.controller){
if (_this.canEdit()) {
_this.controller.resetSelection();
var activeCell = worksheet.model.selectionRange.activeCell;
var metrics = {};
metrics.col = activeCell.col;
metrics.colOff = 0;
metrics.row = activeCell.row;
metrics.rowOff = 0;
var coordsFrom = _this.calculateCoords(metrics);
var ext_x, ext_y;
var oExt = AscFormat.fGetDefaultShapeExtents(sType);
ext_x = oExt.x;
ext_y = oExt.y;
History.Create_NewPoint();
var posX = pxToMm(coordsFrom.x) + MOVE_DELTA;
var posY = pxToMm(coordsFrom.y) + MOVE_DELTA;
var oTrack = new AscFormat.NewShapeTrack(sType, posX, posY, _this.controller.getTheme(), null, null, null, 0);
oTrack.track({}, posX + ext_x, posY + ext_y);
var oShape = oTrack.getShape(false, _this.drawingDocument, null);
oShape.setWorksheet(worksheet.model);
oShape.addToDrawingObjects();
oShape.checkDrawingBaseCoords();
oShape.select(_this.controller, 0);
_this.controller.startRecalculate();
worksheet.setSelectionShape(true);
}
}
};
_this.getScrollOffset = function()
{
return scrollOffset;
};
_this.saveStateBeforeLoadChanges = function(){
if(this.controller){
oStateBeforeLoadChanges = {};
this.controller.Save_DocumentStateBeforeLoadChanges(oStateBeforeLoadChanges);
}
else{
oStateBeforeLoadChanges = null;
}
return oStateBeforeLoadChanges;
};
_this.loadStateAfterLoadChanges = function(){
if(_this.controller){
_this.controller.clearPreTrackObjects();
_this.controller.clearTrackObjects();
_this.controller.resetSelection();
_this.controller.changeCurrentState(new AscFormat.NullState(this.controller));
if(oStateBeforeLoadChanges){
_this.controller.loadDocumentStateAfterLoadChanges(oStateBeforeLoadChanges);
}
}
oStateBeforeLoadChanges = null;
return oStateBeforeLoadChanges;
};
_this.getStateBeforeLoadChanges = function(){
return oStateBeforeLoadChanges;
};
_this.createDrawingObject = function(type) {
var drawingBase = new DrawingBase(worksheet);
if(AscFormat.isRealNumber(type))
{
drawingBase.Type = type;
}
return drawingBase;
};
_this.cloneDrawingObject = function(object) {
var copyObject = _this.createDrawingObject();
copyObject.Type = object.Type;
copyObject.editAs = object.editAs;
copyObject.Pos.X = object.Pos.X;
copyObject.Pos.Y = object.Pos.Y;
copyObject.ext.cx = object.ext.cx;
copyObject.ext.cy = object.ext.cy;
copyObject.from.col = object.from.col;
copyObject.from.colOff = object.from.colOff;
copyObject.from.row = object.from.row;
copyObject.from.rowOff = object.from.rowOff;
copyObject.to.col = object.to.col;
copyObject.to.colOff = object.to.colOff;
copyObject.to.row = object.to.row;
copyObject.to.rowOff = object.to.rowOff;
copyObject.boundsFromTo.from.col = object.boundsFromTo.from.col;
copyObject.boundsFromTo.from.colOff = object.boundsFromTo.from.colOff;
copyObject.boundsFromTo.from.row = object.boundsFromTo.from.row;
copyObject.boundsFromTo.from.rowOff = object.boundsFromTo.from.rowOff;
copyObject.boundsFromTo.to.col = object.boundsFromTo.to.col;
copyObject.boundsFromTo.to.colOff = object.boundsFromTo.to.colOff;
copyObject.boundsFromTo.to.row = object.boundsFromTo.to.row;
copyObject.boundsFromTo.to.rowOff = object.boundsFromTo.to.rowOff;
copyObject.graphicObject = object.graphicObject;
return copyObject;
};
_this.pxToMm = function(val) {
return pxToMm(val);
};
_this.mmToPx = function(val) {
return mmToPx(val);
};
_this.createShapeAndInsertContent = function(oParaContent){
var track_object = new AscFormat.NewShapeTrack("textRect", 0, 0, Asc['editor'].wbModel.theme, null, null, null, 0);
track_object.track({}, 0, 0);
var shape = track_object.getShape(false, _this.drawingDocument, this);
shape.spPr.setFill(AscFormat.CreateNoFillUniFill());
//shape.setParent(this);
shape.txBody.content.Content[0].Add_ToContent(0, oParaContent.Copy());
var body_pr = shape.getBodyPr();
var w = shape.txBody.getMaxContentWidth(150, true) + body_pr.lIns + body_pr.rIns;
var h = shape.txBody.content.GetSummaryHeight() + body_pr.tIns + body_pr.bIns;
shape.spPr.xfrm.setExtX(w);
shape.spPr.xfrm.setExtY(h);
shape.spPr.xfrm.setOffX(0);
shape.spPr.xfrm.setOffY(0);
shape.spPr.setLn(AscFormat.CreateNoFillLine());
shape.setWorksheet(worksheet.model);
//shape.addToDrawingObjects();
return shape;
};
//-----------------------------------------------------------------------------------
// Public methods
//-----------------------------------------------------------------------------------
_this.init = function(currentSheet) {
const api = window["Asc"]["editor"];
worksheet = currentSheet;
drawingCtx = currentSheet.drawingGraphicCtx;
overlayCtx = currentSheet.overlayGraphicCtx;
_this.drawingArea = currentSheet.drawingArea;
_this.drawingArea.init();
_this.drawingDocument = currentSheet.getDrawingDocument();
_this.drawingDocument.drawingObjects = this;
_this.drawingDocument.AutoShapesTrack = api.wb.autoShapeTrack;
_this.drawingDocument.TargetHtmlElement = document.getElementById('id_target_cursor');
_this.drawingDocument.InitGuiCanvasShape(api.shapeElementId);
_this.controller = new AscFormat.DrawingObjectsController(_this);
_this.canEdit = function() { return api.canEdit(); };
aImagesSync = [];
const oWS = currentSheet.model;
aObjects = oWS.Drawings;
let oGraphic;
for (let i = 0; aObjects && (i < aObjects.length); i++)
{
aObjects[i] = _this.cloneDrawingObject(aObjects[i]);
const drawingObject = aObjects[i];
// Check drawing area
drawingObject.drawingArea = _this.drawingArea;
drawingObject.worksheet = currentSheet;
oGraphic = drawingObject.graphicObject;
oGraphic.setDrawingBase(drawingObject);
oGraphic.setDrawingObjects(_this);
oGraphic.generateLocalDrawingPart();
oGraphic.getAllRasterImages(aImagesSync);
}
aImagesSync = _this.checkImageBullets(currentSheet, aImagesSync);
const oLegacyDrawing = oWS.legacyDrawingHF;
if(oLegacyDrawing)
{
const aLegacyDrawings = oLegacyDrawing.drawings;
for(let nDrawing = 0; nDrawing < aLegacyDrawings.length; ++nDrawing)
{
let oLegacyDrawing = aLegacyDrawings[nDrawing];
let oGraphic = oLegacyDrawing.graphicObject;
oGraphic.getAllRasterImages(aImagesSync);
}
}
aImagesSync = _this.checkImageBullets(currentSheet, aImagesSync);
for(let i = 0; i < aImagesSync.length; ++i)
{
const localUrl = aImagesSync[i];
if(api.DocInfo && api.DocInfo.get_OfflineApp()) {
const urlWithMedia = AscCommon.g_oDocumentUrls.mediaPrefix + localUrl;
if (api.frameManager.isFrameEditor()) {
const sGeneralUrl = api.frameManager.getGeneralImageUrl(urlWithMedia);
if (sGeneralUrl)
{
AscCommon.g_oDocumentUrls.addImageUrl(localUrl, sGeneralUrl);
}
} else {
AscCommon.g_oDocumentUrls.addImageUrl(localUrl, api.documentUrl + urlWithMedia);
}
}
aImagesSync[i] = AscCommon.getFullImageSrc2(localUrl);
}
if(aImagesSync.length > 0)
{
const old_val = api.ImageLoader.bIsAsyncLoadDocumentImages;
api.ImageLoader.bIsAsyncLoadDocumentImages = true;
api.ImageLoader.LoadDocumentImages(aImagesSync);
api.ImageLoader.bIsAsyncLoadDocumentImages = old_val;
}
_this.recalculate(true);
worksheet.model.Drawings = aObjects;
};
_this.checkImageBullets = function (currentSheet, arrImages) {
const aObjects = currentSheet.model.Drawings;
const arrContentsWithImageBullet = [];
const oBulletImages = {};
const arrBulletImagesAsync = [];
for (let i = 0; aObjects && (i < aObjects.length); i += 1) {
const drawingObject = aObjects[i];
drawingObject.graphicObject.getDocContentsWithImageBullets(arrContentsWithImageBullet);
drawingObject.graphicObject.getImageFromBulletsMap(oBulletImages);
}
for (let localUrl in oBulletImages) {
if(api.DocInfo && api.DocInfo.get_OfflineApp()) {
const urlWithMedia = AscCommon.g_oDocumentUrls.mediaPrefix + localUrl;
if (api.frameManager.isFrameEditor()) {
const sGeneralUrl = api.frameManager.getGeneralImageUrl(urlWithMedia);
if (sGeneralUrl)
{
AscCommon.g_oDocumentUrls.addImageUrl(localUrl, sGeneralUrl);
}
} else {
AscCommon.g_oDocumentUrls.addImageUrl(localUrl, api.documentUrl + urlWithMedia);
}
}
const fullUrl = AscCommon.getFullImageSrc2(localUrl);
arrBulletImagesAsync.push(fullUrl);
}
api.ImageLoader.LoadImagesWithCallback(arrBulletImagesAsync, function () {
for (let i = 0; i < arrContentsWithImageBullet.length; i += 1) {
const oContent = arrContentsWithImageBullet[i];
oContent.Recalculate();
_this.showDrawingObjects();
}
});
const arrImagesWithoutImageBullets = arrImages.filter(function (sImageId) {
return !oBulletImages[sImageId];
});
return arrImagesWithoutImageBullets;
}
_this.getSelectedDrawingsRange = function()
{
var i, rmin=gc_nMaxRow, rmax = 0, cmin = gc_nMaxCol, cmax = 0, selectedObjects = this.controller.selectedObjects, drawingBase;
for(i = 0; i < selectedObjects.length; ++i)
{
drawingBase = selectedObjects[i].drawingBase;
if(drawingBase)
{
if(drawingBase.from.col < cmin)
{
cmin = drawingBase.from.col;
}
if(drawingBase.from.row < rmin)
{
rmin = drawingBase.from.row;
}
if(drawingBase.to.col > cmax)
{
cmax = drawingBase.to.col;
}
if(drawingBase.to.row > rmax)
{
rmax = drawingBase.to.row;
}
}
}
return new Asc.Range(cmin, rmin, cmax, rmax, true);
};
_this.getScreenPosition = function(X, Y) {
var _x = X * Asc.getCvtRatio(3, 0, worksheet._getPPIX()) + scrollOffset.getX();
var _y = Y * Asc.getCvtRatio(3, 0, worksheet._getPPIY()) + scrollOffset.getY();
return new AscCommon.asc_CRect(_x, _y, 0, 0 );
};
_this.convertCoordsToCursorWR = function(X, Y) {
return this.drawingArea.convertCoordsToCursorWR(X, Y);
};
_this.getContextMenuPosition = function(){
if(!worksheet){
return new AscCommon.asc_CRect( 0, 0, 5, 5 );
}
let oPos = this.controller.getContextMenuPosition(0);
return _this.getScreenPosition(oPos.X, oPos.Y);
};
_this.recalculate = function(all)
{
_this.controller.recalculate2(all);
};
_this.preCopy = function() {
_this.shiftMap = {};
var selected_objects = _this.controller.selectedObjects;
if(selected_objects.length > 0)
{
var min_x, min_y, i;
min_x = selected_objects[0].x;
min_y = selected_objects[0].y;
for(i = 1; i < selected_objects.length; ++i)
{
if(selected_objects[i].x < min_x)
min_x = selected_objects[i].x;
if(selected_objects[i].y < min_y)
min_y = selected_objects[i].y;
}
for(i = 0; i < selected_objects.length; ++i)
{
_this.shiftMap[selected_objects[i].Get_Id()] = {x: selected_objects[i].x - min_x, y: selected_objects[i].y - min_y};
}
}
};
_this.getAllFonts = function(AllFonts) {
};
_this.getOverlay = function() {
return api.wb.trackOverlay;
};
_this.OnUpdateOverlay = function() {
_this.drawingArea.drawSelection(_this.drawingDocument);
};
_this.changeZoom = function(factor) {
_this.zoom.last = _this.zoom.current;
_this.zoom.current = factor;
_this.resizeCanvas();
};
_this.resizeCanvas = function() {
_this.drawingArea.init();
};
_this.getCanvasContext = function() {
return _this.drawingDocument.CanvasHitContext;
};
_this.getDrawingObjects = function() {
return aObjects;
};
_this.getWorksheet = function() {
return worksheet;
};
_this.getContextWidth = function () {
return drawingCtx.getWidth();
};
_this.getContextHeight = function () {
return drawingCtx.getHeight();
};
_this.getContext = function () {
return drawingCtx;
};
_this.getWorksheetModel = function() {
return worksheet.model;
};
_this.callTrigger = function(triggerName, param) {
if ( triggerName )
worksheet.model.workbook.handlers.trigger(triggerName, param);
};
_this.getDrawingObjectsBounds = function()
{
var arr_x = [], arr_y = [], bounds;
for(var i = 0; i < aObjects.length; ++i)
{
bounds = aObjects[i].graphicObject.bounds;
arr_x.push(bounds.l);
arr_x.push(bounds.r);
arr_y.push(bounds.t);
arr_y.push(bounds.b);
}
return new DrawingBounds(Math.min.apply(Math, arr_x), Math.max.apply(Math, arr_x), Math.min.apply(Math, arr_y), Math.max.apply(Math, arr_y));
};
//-----------------------------------------------------------------------------------
// Drawing objects
//-----------------------------------------------------------------------------------
_this.showDrawingObjects = function(graphicOption) {
if(!worksheet || !worksheet.model ||
!api || !api.wb || !api.wb.model) {
return
}
if ( (worksheet.model.index !== api.wb.model.getActive()))
return;
var oNewTask;
if(graphicOption) {
oNewTask = graphicOption;
}
else {
oNewTask = new AscCommon.CDrawTask(null);
}
if(window["IS_NATIVE_EDITOR"]) {
_this.showDrawingObjectsEx(oNewTask.getRect());
return;
}
if(_this.drawTask === null) {
_this.drawTask = oNewTask;
}
else {
_this.drawTask = _this.drawTask.union(oNewTask);
}
if(_this.animId === null) {
_this.animId = rAF(drawTaskFunction);
}
};
_this.showDrawingObjectsEx = function(oUpdateRect) {
if(!drawingCtx) {
return;
}
if (worksheet.model !== api.wb.model.getActiveWs()) {
return;
}
if (!window['IS_NATIVE_EDITOR']) {
if (oUpdateRect) {
_this.drawingArea.clearRect(oUpdateRect);
} else {
_this.drawingArea.clear();
}
}
for (var nDrawing = 0; nDrawing < aObjects.length; nDrawing++) {
_this.drawingArea.drawObject(aObjects[nDrawing], oUpdateRect);
}
const aDropDowns = _this.controller.dropDowns;
for (var nDrawing = 0; nDrawing < aDropDowns.length; nDrawing++) {
_this.drawingArea.drawDropDown(aDropDowns[nDrawing], oUpdateRect);
}
_this.OnUpdateOverlay();
_this.controller.updateSelectionState(true);
AscCommon.CollaborativeEditing.Update_ForeignCursorsPositions();
};
_this.updateRange = function(oRange) {
if(!drawingCtx) {
return;
}
if (worksheet.model.index !== api.wb.model.getActive()) {
return;
}
for (var nDrawing = 0; nDrawing < aObjects.length; nDrawing++) {
_this.drawingArea.updateRange(aObjects[nDrawing], oRange);
}
_this.OnUpdateOverlay();
_this.controller.updateSelectionState(true);
AscCommon.CollaborativeEditing.Update_ForeignCursorsPositions();
Asc.editor.wbModel.mathTrackHandler.Update();
};
_this.print = function(oOptions) {
for(var nObject = 0; nObject < aObjects.length; ++nObject) {
var oDrawing = aObjects[nObject];
oDrawing.draw(oOptions.ctx.DocumentRenderer);
}
};
_this.getDrawingDocument = function()
{
return _this.drawingDocument;
};
_this.printGraphicObject = function(graphicObject, ctx) {
if ( graphicObject && ctx ) {
// Image
if ( graphicObject instanceof AscFormat.CImageShape )
printImage(graphicObject, ctx);
// Shape
else if ( graphicObject instanceof AscFormat.CShape )
printShape(graphicObject, ctx);
// Chart
else if (graphicObject instanceof AscFormat.CChartSpace)
printChart(graphicObject, ctx);
// Group
else if ( graphicObject instanceof AscFormat.CGroupShape )
printGroup(graphicObject, ctx);
}
// Print functions
function printImage(graphicObject, ctx) {
if ( (graphicObject instanceof AscFormat.CImageShape) && graphicObject && ctx ) {
// Save
graphicObject.draw( ctx );
}
}
function printShape(graphicObject, ctx) {
if ( (graphicObject instanceof AscFormat.CShape) && graphicObject && ctx ) {
graphicObject.draw( ctx );
}
}
function printChart(graphicObject, ctx) {
if ( (graphicObject instanceof AscFormat.CChartSpace) && graphicObject && ctx ) {
graphicObject.draw( ctx );
}
}
function printGroup(graphicObject, ctx) {
if ( (graphicObject instanceof AscFormat.CGroupShape) && graphicObject && ctx ) {
for ( var i = 0; i < graphicObject.arrGraphicObjects.length; i++ ) {
var graphicItem = graphicObject.arrGraphicObjects[i];
if ( graphicItem instanceof AscFormat.CImageShape )
printImage(graphicItem, ctx);
else if ( graphicItem instanceof AscFormat.CShape )
printShape(graphicItem, ctx);
else if (graphicItem instanceof AscFormat.CChartSpace )
printChart(graphicItem, ctx);
}
}
}
};
_this.getMaxColRow = function() {
var r = -1, c = -1;
aObjects.forEach(function (item) {
r = Math.max(r, item.boundsFromTo.to.row);
c = Math.max(c, item.boundsFromTo.to.col);
});
return new AscCommon.CellBase(r, c);
};
//-----------------------------------------------------------------------------------
// For object type
//-----------------------------------------------------------------------------------
_this.calculateObjectMetrics = function (object, width, height, opt_checkRtl) {
// Обработка картинок большого разрешения
var bCorrect = false;
var metricCoeff = 1;
var coordsFrom = _this.calculateCoords(object.from);
var realTopOffset = coordsFrom.y;
var realLeftOffset = coordsFrom.x;
var areaWidth = worksheet._getColLeft(worksheet.getLastVisibleCol()) - worksheet._getColLeft(worksheet.getFirstVisibleCol(true)); // по ширине
if (areaWidth < width) {
metricCoeff = width / areaWidth;
width = areaWidth;
height /= metricCoeff;
bCorrect = true;
}
var areaHeight = worksheet._getRowTop(worksheet.getLastVisibleRow()) - worksheet._getRowTop(worksheet.getFirstVisibleRow(true)); // по высоте
if (areaHeight < height) {
metricCoeff = height / areaHeight;
height = areaHeight;
width /= metricCoeff;
bCorrect = true;
}
if (opt_checkRtl && worksheet.getRightToLeft()) {
width *= -1;
}
var toCell = worksheet.findCellByXY(realLeftOffset + width, realTopOffset + height, true, false, false);
object.to.col = toCell.col;
object.to.colOff = pxToMm(toCell.colOff);
object.to.row = toCell.row;
object.to.rowOff = pxToMm(toCell.rowOff);
return bCorrect;
};
_this.addImageObjectCallback = function (_image, options, imageIndex) {
var isOption = options && options.cell;
if (!_image.Image) {
worksheet.model.workbook.handlers.trigger("asc_onError", c_oAscError.ID.UplImageUrl, c_oAscError.Level.NoCritical);
} else {
var drawingObject = _this.createDrawingObject();
drawingObject.worksheet = worksheet;
var activeCell = worksheet.model.selectionRange.activeCell;
drawingObject.from.col = isOption ? options.cell.col : activeCell.col;
drawingObject.from.row = isOption ? options.cell.row : activeCell.row;
var oSize;
if(!isOption) {
var oImgP = new Asc.asc_CImgProperty();
oImgP.ImageUrl = _image.src;
oSize = oImgP.asc_getOriginSize(api);
}
else {
oSize = new AscCommon.asc_CImageSize(Math.max((options.width * AscCommon.g_dKoef_pix_to_mm), 1),
Math.max((options.height * AscCommon.g_dKoef_pix_to_mm), 1), true);
}
var bCorrect = _this.calculateObjectMetrics(drawingObject, mmToPx(oSize.asc_getImageWidth()), mmToPx(oSize.asc_getImageHeight()), true);
const isRtl = worksheet.getRightToLeft();
const coordsFrom = _this.calculateCoords(drawingObject.from);
const coordsTo = _this.calculateCoords(drawingObject.to);
if (isRtl) {
let temp = coordsTo.x;
coordsTo.x = coordsFrom.x;
coordsFrom.x = temp;
}
// Offsets for case of multiple images added
const OFFSET_PIX = mmToPx(5);
if (!AscFormat.isRealNumber(imageIndex)) imageIndex = 0;
let offsetX = isRtl ? imageIndex * OFFSET_PIX * (-1) : imageIndex * OFFSET_PIX;
let offsetY = imageIndex * OFFSET_PIX;
coordsFrom.x += offsetX;
coordsTo.x += offsetX;
coordsFrom.y += offsetY;
coordsTo.y += offsetY;
worksheet.workbook.StartAction(AscDFH.historydescription_Spreadsheet_AddImageUrls, {
src: _image.src,
width: pxToMm(coordsTo.x - coordsFrom.x),
height: pxToMm(coordsTo.y - coordsFrom.y),
from: drawingObject.from
})
if(bCorrect) {
_this.controller.addImageFromParams(_image.src, pxToMm(coordsFrom.x) + MOVE_DELTA, pxToMm(coordsFrom.y) + MOVE_DELTA, pxToMm(coordsTo.x - coordsFrom.x), pxToMm(coordsTo.y - coordsFrom.y));
}
else {
_this.controller.addImageFromParams(_image.src, pxToMm(coordsFrom.x) + MOVE_DELTA, pxToMm(coordsFrom.y) + MOVE_DELTA, oSize.asc_getImageWidth(), oSize.asc_getImageHeight());
}
worksheet.workbook.FinalizeAction()
}
};
_this.addImageDrawingObject = function(imageUrls, options) {
if (imageUrls && _this.canEdit()) {
api.ImageLoader.LoadImagesWithCallback(imageUrls, function(){
// CImage
_this.controller.resetSelection();
History.Create_NewPoint();
for(var i = 0; i < imageUrls.length; ++i){
var sImageUrl = imageUrls[i];
var _image = api.ImageLoader.LoadImage(sImageUrl, 1);
if (null != _image) {
_this.addImageObjectCallback(_image, options, i);
} else {
worksheet.model.workbook.handlers.trigger("asc_onError", c_oAscError.ID.UplImageUrl, c_oAscError.Level.NoCritical);
break;
}
}
_this.controller.startRecalculate();
worksheet.setSelectionShape(true);
}, []);
}
};
_this.addTextArt = function(nStyle)
{
if (_this.canEdit()) {
var oVisibleRange = worksheet.getVisibleRange();
_this.controller.resetSelection();
var dLeft = worksheet.getCellLeft(oVisibleRange.c1, 3);
var dTop = worksheet.getCellTop(oVisibleRange.r1, 3);
var dRight = worksheet.getCellLeft(oVisibleRange.c2, 3) + worksheet.getColumnWidth(oVisibleRange.c2, 3);
var dBottom = worksheet.getCellTop(oVisibleRange.r2, 3) + worksheet.getRowHeight(oVisibleRange.r2, 3);
_this.controller.addTextArtFromParams(nStyle, dLeft, dTop, dRight - dLeft, dBottom - dTop, worksheet.model);
worksheet.setSelectionShape(true);
}
};
_this.addChartSpace = function (oChartSpace) {
if (!_this.canEdit())
return;
let aSelectedDrawings = _this.controller.getSelectedArray();
if(aSelectedDrawings.length === 1 && aSelectedDrawings[0].isChart()) {
_this.controller.checkSelectedObjectsAndCallback(function () {
let oSelectedChartSpace = aSelectedDrawings[0];
oSelectedChartSpace.fromOther(oChartSpace, true);
_this.controller.startRecalculate();
_this.sendGraphicObjectProps();
}, [], false, 0, [], false);
return;
}
History.Create_NewPoint();
worksheet.setSelectionShape(true);
worksheet.workbook.StartAction(AscDFH.historydescription_Document_AddChart)
let oCSForAdd = oChartSpace.copy();
let w, h, chartLeft, chartTop;
w = this.convertMetric(AscCommon.AscBrowser.convertToRetinaValue(AscCommon.c_oAscChartDefines.defaultChartWidth, true), 0, 3);
h = this.convertMetric(AscCommon.AscBrowser.convertToRetinaValue(AscCommon.c_oAscChartDefines.defaultChartHeight, true), 0, 3);
chartLeft = -this.convertMetric(this.getScrollOffset().getX(), 0, 3) + (this.convertMetric(this.getContextWidth(), 0, 3) - w) / 2;
if(chartLeft < 0)
{
chartLeft = 0;
}
chartTop = -this.convertMetric(this.getScrollOffset().getY(), 0, 3) + (this.convertMetric(this.getContextHeight(), 0, 3) - h) / 2;
if(chartTop < 0)
{
chartTop = 0;
}
oCSForAdd.setTransformParams(chartLeft, chartTop, w, h, 0, false, false);
oCSForAdd.setWorksheet(this.getWorksheetModel());
oCSForAdd.setBDeleted(false);
oCSForAdd.setDrawingObjects(this);
oCSForAdd.addToDrawingObjects();
_this.controller.resetSelection();
_this.controller.selectObject(oCSForAdd, 0);
oCSForAdd.addToRecalculate();
oCSForAdd.checkDrawingBaseCoords();
_this.controller.startRecalculate();
this.sendGraphicObjectProps();
worksheet.workbook.FinalizeAction(AscDFH.historydescription_Document_AddChart, [oCSForAdd.chart])
};
_this.addSlicers = function(aNames) {
if (_this.canEdit()) {
if(Array.isArray(aNames) && aNames.length > 0) {
var oVisibleRange = worksheet.getVisibleRange();
var nSlicerCount = aNames.length;
var dSlicerWidth = 2 * 25.4;//
var dSlicerHeight = 2.76 * 25.4;
var dSlicerInset = 10;
var dTotalWidth = dSlicerWidth + nSlicerCount * dSlicerInset;
var dTotalHeight = dSlicerHeight + nSlicerCount * dSlicerInset;
var dLeft = worksheet.getCellLeft(oVisibleRange.c1, 3);
var dTop = worksheet.getCellTop(oVisibleRange.r1, 3);
var dRight = worksheet.getCellLeft(oVisibleRange.c2, 3) + worksheet.getColumnWidth(oVisibleRange.c2, 3);
var dBottom = worksheet.getCellTop(oVisibleRange.r2, 3) + worksheet.getRowHeight(oVisibleRange.r2, 3);
_this.controller.resetSelection();
var dStartPosX = Math.max(0, (dLeft + dRight) / 2.0 - dTotalWidth / 2);
var dStartPosY = Math.max(0, (dTop + dBottom) / 2.0 - dTotalHeight / 2);
var oSlicer, x, y;
for(var nSlicerIndex = 0; nSlicerIndex < nSlicerCount; ++nSlicerIndex) {
oSlicer = new AscFormat.CSlicer();
oSlicer.setName(aNames[nSlicerIndex]);
x = dStartPosX + dSlicerInset * nSlicerIndex;
y = dStartPosY + dSlicerInset * nSlicerIndex;
oSlicer.setBDeleted(false);
oSlicer.setWorksheet(worksheet.model);
oSlicer.setTransformParams(x, y, dSlicerWidth, dSlicerHeight, 0, false, false);
oSlicer.addToDrawingObjects(undefined, AscCommon.c_oAscCellAnchorType.cellanchorAbsolute);
oSlicer.checkDrawingBaseCoords();
}
_this.controller.startRecalculate();
oSlicer.select(_this.controller, 0);
worksheet.setSelectionShape(true);
}
}
};
_this.addSignatureLine = function(oPr, Width, Height, sImgUrl)
{
var oApi = window["Asc"]["editor"];
var sGuid = oPr.asc_getGuid();
var oSpToEdit = null;
if(sGuid)
{
var oDrawingObjects = this.controller;
var ret = [], allSpr = [];
allSpr = allSpr.concat(allSpr.concat(oDrawingObjects.getAllSignatures2(ret, oDrawingObjects.getDrawingArray())));
for(var i = 0; i < allSpr.length; ++i)
{
if(allSpr[i].getSignatureLineGuid() === sGuid)
{
oSpToEdit = allSpr[i];
break;
}
}
}
History.Create_NewPoint();
if(!oSpToEdit)
{
_this.controller.resetSelection();
var dLeft = worksheet.getCellLeft(worksheet.model.selectionRange.activeCell.col, 3);
var dTop = worksheet.getCellTop(worksheet.model.selectionRange.activeCell.row, 3);
var oSignatureLine = AscFormat.fCreateSignatureShape(oPr, false, worksheet.model, Width, Height, sImgUrl);
oSignatureLine.spPr.xfrm.setOffX(dLeft);
oSignatureLine.spPr.xfrm.setOffY(dTop);
oSignatureLine.addToDrawingObjects();
oSignatureLine.checkDrawingBaseCoords();
_this.controller.selectObject(oSignatureLine, 0);
worksheet.setSelectionShape(true);
oApi.sendEvent("asc_onAddSignature", oSignatureLine.signatureLine.id);
}
else
{
oSpToEdit.setSignaturePr(oPr, sImgUrl);
oApi.sendEvent("asc_onAddSignature", sGuid);
}
_this.controller.startRecalculate();
};
_this.addMath = function(Type){
if (_this.canEdit() && _this.controller) {
var oTargetContent = _this.controller.getTargetDocContent();
if(oTargetContent){
_this.controller.checkSelectedObjectsAndCallback(function(){
var MathElement = new AscCommonWord.MathMenu(Type);
_this.controller.paragraphAdd(MathElement, false);
_this.controller.recalculate();
_this.controller.updateSelectionState();
}, [], false, AscDFH.historydescription_Spreadsheet_CreateGroup);
return;
}
_this.controller.resetSelection();
var activeCell = worksheet.model.selectionRange.activeCell;
var coordsFrom = _this.calculateCoords({col: activeCell.col, row: activeCell.row, colOff: 0, rowOff: 0});
History.Create_NewPoint();
var oSp = _this.controller.createTextArt(0, false, worksheet.model, "");
_this.controller.resetSelection();
oSp.setWorksheet(_this.controller.drawingObjects.getWorksheetModel());
oSp.setDrawingObjects(_this.controller.drawingObjects);
oSp.addToDrawingObjects();
var oContent = oSp.getDocContent();
if(oContent){
oContent.MoveCursorToStartPos(false);
oContent.AddToParagraph(new AscCommonWord.MathMenu(Type), false);
}
oSp.checkExtentsByDocContent();
oSp.spPr.xfrm.setOffX(pxToMm(coordsFrom.x) + MOVE_DELTA - ((worksheet.getRightToLeft() && oSp.spPr.xfrm.extX) ? oSp.spPr.xfrm.extX : 0));
oSp.spPr.xfrm.setOffY(pxToMm(coordsFrom.y) + MOVE_DELTA);
oSp.checkDrawingBaseCoords();
_this.controller.selectObject(oSp, 0);
_this.controller.selection.textSelection = oSp;
oSp.addToRecalculate();
_this.controller.startRecalculate();
worksheet.setSelectionShape(true);
}
};
_this.setMathProps = function(MathProps)
{
_this.controller.setMathProps(MathProps);
}
_this.convertMathView = function(isToLinear, isAll)
{
_this.controller.convertMathView(isToLinear, isAll);
_this.controller.updateSelectionState();
}
_this.setListType = function(type, subtype, custom)
{
if(_this.controller.checkSelectedObjectsProtectionText())
{
return;
}
var NumberInfo =
{
Type : 0,
SubType : -1
};
NumberInfo.Type = type;
NumberInfo.SubType = subtype;
NumberInfo.Custom = custom;
_this.controller.checkSelectedObjectsAndCallback(_this.controller.setParagraphNumbering, [AscFormat.fGetPresentationBulletByNumInfo(NumberInfo)], false, AscDFH.historydescription_Presentation_SetParagraphNumbering);
};
_this.editImageDrawingObject = function(imageUrl, obj) {
if ( imageUrl ) {
let _image = api.ImageLoader.LoadImage(imageUrl, 1);
let addImageObject = function (_image) {
if ( !_image.Image ) {
worksheet.model.workbook.handlers.trigger("asc_onError", c_oAscError.ID.UplImageUrl, c_oAscError.Level.NoCritical);
}
else {
if ( obj && obj.isImageChangeUrl ) {
let imageProp = new Asc.asc_CImgProperty();
imageProp.ImageUrl = _image.src;
_this.setGraphicObjectProps(imageProp);
}
else if ( obj && obj.isShapeImageChangeUrl ) {
let shapeProp = new Asc.asc_CShapeProperty();
shapeProp.fillBlipFill(_image.src, obj.textureType);
let imgProps = new Asc.asc_CImgProperty();
imgProps.ShapeProperties = shapeProp;
_this.setGraphicObjectProps(imgProps);
}
else if(obj && obj.isTextArtChangeUrl)
{
let AscShapeProp = new Asc.asc_CShapeProperty();
let oFill = new Asc.asc_CShapeFill();
oFill.fillBlipFill(imageUrl, obj.textureType);
AscShapeProp.textArtProperties = new Asc.asc_TextArtProperties();
AscShapeProp.textArtProperties.asc_putFill(oFill);
let imgProps = new Asc.asc_CImgProperty();
imgProps.ShapeProperties = AscShapeProp;
_this.setGraphicObjectProps(imgProps);
}
else if (obj && obj.fAfterUploadOleObjectImage) {
obj.fAfterUploadOleObjectImage(_image.src);
}
_this.showDrawingObjects();
}
};
if (null != _image) {
addImageObject(_image);
}
else {
_this.asyncImageEndLoaded = function(_image) {
addImageObject(_image);
_this.asyncImageEndLoaded = null;
}
}
}
};
_this.addChartDrawingObject = function(chart)
{
if (chart instanceof Asc.asc_ChartSettings)
{
if (!_this.canEdit())
return;
worksheet.setSelectionShape(true);
_this.controller.addChartDrawingObject(chart);
} else if (isObject(chart) && chart["binary"])
{
if (window["IS_NATIVE_EDITOR"])
{
var model = worksheet.model;
History.Clear();
for (var i = 0; i < aObjects.length; i++) {
aObjects[i].graphicObject.deleteDrawingBase();
}
aObjects.length = 0;
var oAllRange = new Asc.Range(0, 0, gc_nMaxCol, gc_nMaxRow);
worksheet.endEditChart();
//worksheet._clean();
var asc_chart_binary = new Asc.asc_CChartBinary();
asc_chart_binary.asc_setBinary(chart["binary"]);
asc_chart_binary.asc_setThemeBinary(chart["themeBinary"]);
asc_chart_binary.asc_setColorMapBinary(chart["colorMapBinary"]);
asc_chart_binary.asc_setIsChartEx(chart["IsChartEx"]);
var oNewChartSpace = asc_chart_binary.getChartSpace(model);
var theme = asc_chart_binary.getTheme();
if(theme)
{
model.workbook.theme = theme;
}
if(chart["cTitle"] || chart["cDescription"]){
if(!oNewChartSpace.nvGraphicFramePr){
var nv_sp_pr = new AscFormat.UniNvPr();
nv_sp_pr.cNvPr.setId(1024);
oNewChartSpace.setNvSpPr(nv_sp_pr);
}
oNewChartSpace.setTitle(chart["cTitle"]);
oNewChartSpace.setDescription(chart["cDescription"]);
}
var colorMapOverride = asc_chart_binary.getColorMap();
if(colorMapOverride)
{
AscFormat.DEFAULT_COLOR_MAP = colorMapOverride;
}
if(typeof chart["urls"] === "string") {
AscCommon.g_oDocumentUrls.addUrls(JSON.parse(chart["urls"]));
}
var font_map = {};
oNewChartSpace.documentGetAllFontNames(font_map);
AscFormat.checkThemeFonts(font_map, model.workbook.theme.themeElements.fontScheme);
window["Asc"]["editor"]._loadFonts(font_map,
function() {
AscCommonExcel.executeInR1C1Mode(false,
function()
{
oNewChartSpace.getWorksheetsFromCache(Asc['editor'].wbModel, true);
aImagesSync.length = 0;
oNewChartSpace.getAllRasterImages(aImagesSync);
oNewChartSpace.setBDeleted(false);
oNewChartSpace.setWorksheet(model);
oNewChartSpace.addToDrawingObjects();
oNewChartSpace.recalcInfo.recalculateReferences = false;
var oDrawingBase_ = oNewChartSpace.drawingBase;
oNewChartSpace.drawingBase = null;
oNewChartSpace.recalculate();
AscFormat.CheckSpPrXfrm(oNewChartSpace);
oNewChartSpace.drawingBase = oDrawingBase_;
var canvas_height = worksheet.drawingCtx.getHeight(3);
var pos_y = (canvas_height - oNewChartSpace.spPr.xfrm.extY)/2;
if(pos_y < 0)
{
pos_y = 0;
}
var canvas_width = worksheet.drawingCtx.getWidth(3);
var pos_x = (canvas_width - oNewChartSpace.spPr.xfrm.extX)/2;
if(pos_x < 0)
{
pos_x = 0;
}
oNewChartSpace.spPr.xfrm.setOffX(pos_x);
oNewChartSpace.spPr.xfrm.setOffY(pos_y);
oNewChartSpace.checkDrawingBaseCoords();
oNewChartSpace.recalculate();
worksheet._scrollToRange(_this.getSelectedDrawingsRange());
_this.showDrawingObjects();
_this.controller.resetSelection();
_this.controller.selectObject(oNewChartSpace, 0);
_this.controller.updateSelectionState();
_this.sendGraphicObjectProps();
worksheet._updateRange(oAllRange);
worksheet.draw();
if(aImagesSync.length > 0)
{
window["Asc"]["editor"].ImageLoader.LoadDocumentImages(aImagesSync);
}
History.Clear();
});
}
);
return;
}
const oApi = Asc.editor;
oApi.frameManager.preObtain(chart);
}
};
_this.editChartDrawingObject = function(chart)
{
if ( chart )
{
_this.controller.editChartDrawingObjects(chart);
//_this.showDrawingObjects();
}
};
_this.getRecommendedChartData = function () {
};
_this.checkSparklineGroupMinMaxVal = function(oSparklineGroup)
{
var maxVal = null, minVal = null, i, j, sparkline, nPtCount = 0;
if(oSparklineGroup.type !== Asc.c_oAscSparklineType.Stacked &&
(Asc.c_oAscSparklineAxisMinMax.Group === oSparklineGroup.minAxisType || Asc.c_oAscSparklineAxisMinMax.Group === oSparklineGroup.maxAxisType))
{
for(i = 0; i < oSparklineGroup.arrSparklines.length; ++i)
{
sparkline = oSparklineGroup.arrSparklines[i];
if (!sparkline.oCacheView) {
sparkline.oCacheView = new CSparklineView();
sparkline.oCacheView.initFromSparkline(sparkline, oSparklineGroup, worksheet);
}
var aPoints = sparkline.oCacheView.chartSpace.chart.plotArea.charts[0].series[0].getNumPts();
for(j = 0; j < aPoints.length; ++j)
{
++nPtCount;
if(Asc.c_oAscSparklineAxisMinMax.Group === oSparklineGroup.maxAxisType)
{
if(maxVal === null)
{
maxVal = aPoints[j].val;
}
else
{
if(maxVal < aPoints[j].val)
{
maxVal = aPoints[j].val;
}
}
}
if(Asc.c_oAscSparklineAxisMinMax.Group === oSparklineGroup.minAxisType)
{
if(minVal === null)
{
minVal = aPoints[j].val;
}
else
{
if(minVal > aPoints[j].val)
{
minVal = aPoints[j].val;
}
}
}
}
}
if((maxVal !== null || minVal !== null) )
{
if(maxVal !== null && minVal !== null && AscFormat.fApproxEqual(minVal, maxVal))
{
if(nPtCount > 1)
{
minVal -= 0.1;
maxVal += 0.1;
}
else
{
if(maxVal >= 0)
{
minVal = null;
}
else
{
maxVal = null;
}
}
}
if(maxVal !== null)
{
maxVal -= 0.01;
}
if(minVal !== null)
{
minVal += 0.01;
}
for(i = 0; i < oSparklineGroup.arrSparklines.length; ++i)
{
oSparklineGroup.arrSparklines[i].oCacheView.setMinMaxValAx(minVal, maxVal, oSparklineGroup);
}
}
}
};
_this.drawSparkLineGroups = function(oDrawingContext, aSparklineGroups, range, offsetX, offsetY)
{
var graphics, i, j, sparkline;
if(oDrawingContext instanceof AscCommonExcel.CPdfPrinter)
{
graphics = oDrawingContext.DocumentRenderer;
}
else
{
graphics = new AscCommon.CGraphics();
graphics.init(oDrawingContext.ctx, oDrawingContext.getWidth(0), oDrawingContext.getHeight(0),
oDrawingContext.getWidth(3)*nSparklineMultiplier, oDrawingContext.getHeight(3)*nSparklineMultiplier);
graphics.m_oFontManager = AscCommon.g_fontManager;
}
for(i = 0; i < aSparklineGroups.length; ++i) {
var oSparklineGroup = aSparklineGroups[i];
if(oSparklineGroup.type !== Asc.c_oAscSparklineType.Stacked &&
(Asc.c_oAscSparklineAxisMinMax.Group === oSparklineGroup.minAxisType || Asc.c_oAscSparklineAxisMinMax.Group === oSparklineGroup.maxAxisType))
{
AscFormat.ExecuteNoHistory(function(){
_this.checkSparklineGroupMinMaxVal(oSparklineGroup);
}, _this, []);
}
if(oDrawingContext instanceof AscCommonExcel.CPdfPrinter)
{
graphics.SaveGrState();
var _baseTransform;
if(!oDrawingContext.Transform)
{
_baseTransform = new AscCommon.CMatrix();
}
else
{
_baseTransform = oDrawingContext.Transform.CreateDublicate();
}
_baseTransform.sx /= nSparklineMultiplier;
_baseTransform.sy /= nSparklineMultiplier;
graphics.SetBaseTransform(_baseTransform);
}
for(j = 0; j < oSparklineGroup.arrSparklines.length; ++j) {
sparkline = oSparklineGroup.arrSparklines[j];
if (!sparkline.checkInRange(range)) {
continue;
}
if (!sparkline.oCacheView) {
sparkline.oCacheView = new CSparklineView();
sparkline.oCacheView.initFromSparkline(sparkline, oSparklineGroup, worksheet);
}
sparkline.oCacheView.draw(graphics, offsetX, offsetY);
}
if(oDrawingContext instanceof AscCommonExcel.CPdfPrinter)
{
graphics.SetBaseTransform(null);
graphics.RestoreGrState();
}
}
if(oDrawingContext instanceof AscCommonExcel.CPdfPrinter)
{
}
else
{
oDrawingContext.restore();
}
};
_this.pushToAObjects = function(aDrawing)
{
aObjects = [];
for(var i = 0; i < aDrawing.length; ++i)
{
aObjects.push(aDrawing[i]);
}
};
_this.updateDrawingObject = function(bInsert, operType, updateRange) {
if(!History.CanAddChanges() || History.CanNotAddChanges)
return;
var metrics = null;
var count, bNeedRedraw = false, offset;
for (var i = 0; i < aObjects.length; i++)
{
var obj = aObjects[i];
metrics = { from: {}, to: {} };
metrics.from.col = obj.from.col; metrics.to.col = obj.to.col;
metrics.from.colOff = obj.from.colOff; metrics.to.colOff = obj.to.colOff;
metrics.from.row = obj.from.row; metrics.to.row = obj.to.row;
metrics.from.rowOff = obj.from.rowOff; metrics.to.rowOff = obj.to.rowOff;
var bCanMove = false;
var bCanResize = false;
var oGraphicObject = obj.graphicObject;
var nDrawingBaseType = oGraphicObject.getDrawingBaseType();
switch (nDrawingBaseType)
{
case AscCommon.c_oAscCellAnchorType.cellanchorTwoCell:
{
bCanMove = true;
bCanResize = true;
break;
}
case AscCommon.c_oAscCellAnchorType.cellanchorOneCell:
{
bCanMove = true;
break;
}
}
if (bInsert)
{ // Insert
switch (operType)
{
case c_oAscInsertOptions.InsertColumns:
{
count = updateRange.c2 - updateRange.c1 + 1;
// Position
if (updateRange.c1 <= obj.from.col)
{
if(bCanMove)
{
metrics.from.col += count;
metrics.to.col += count;
}
else
{
metrics = null;
}
}
else if ((updateRange.c1 > obj.from.col) && (updateRange.c1 <= obj.to.col))
{
if(bCanResize)
{
metrics.to.col += count;
}
else
{
metrics = null;
}
}
else
{
metrics = null;
}
break;
}
case c_oAscInsertOptions.InsertCellsAndShiftRight:
{
break;
}
case c_oAscInsertOptions.InsertRows:
{
// Position
count = updateRange.r2 - updateRange.r1 + 1;
if (updateRange.r1 <= obj.from.row)
{
if(bCanMove)
{
metrics.from.row += count;
metrics.to.row += count;
}
else
{
metrics = null;
}
}
else if ((updateRange.r1 > obj.from.row) && (updateRange.r1 <= obj.to.row))
{
if(bCanResize)
{
metrics.to.row += count;
}
else
{
metrics = null;
}
}
else
{
metrics = null;
}
break;
}
case c_oAscInsertOptions.InsertCellsAndShiftDown:
{
break;
}
}
}
else
{ // Delete
switch (operType)
{
case c_oAscDeleteOptions.DeleteColumns:
{
// Position
count = updateRange.c2 - updateRange.c1 + 1;
if (updateRange.c1 <= obj.from.col)
{
// outside
if (updateRange.c2 < obj.from.col)
{
if(bCanMove)
{
metrics.from.col -= count;
metrics.to.col -= count;
}
else
{
metrics = null;
}
}
// inside
else
{
if(bCanResize)
{
metrics.from.col = updateRange.c1;
metrics.from.colOff = 0;
offset = 0;
if (obj.to.col - updateRange.c2 - 1 > 0)
{
offset = obj.to.col - updateRange.c2 - 1;
}
else
{
offset = 1;
metrics.to.colOff = 0;
}
metrics.to.col = metrics.from.col + offset;
}
else
{
metrics = null;
}
}
}
else if ((updateRange.c1 > obj.from.col) && (updateRange.c1 <= obj.to.col))
{
if(bCanResize)
{
// outside
if (updateRange.c2 >= obj.to.col)
{
metrics.to.col = updateRange.c1;
metrics.to.colOff = 0;
}
else
{
metrics.to.col -= count;
}
}
else
{
metrics = null;
}
}
else
{
metrics = null;
}
break;
}
case c_oAscDeleteOptions.DeleteCellsAndShiftLeft:
{
// Range
break;
}
case c_oAscDeleteOptions.DeleteRows:
{
// Position
count = updateRange.r2 - updateRange.r1 + 1;
if (updateRange.r1 <= obj.from.row)
{
// outside
if (updateRange.r2 < obj.from.row)
{
if(bCanMove)
{
metrics.from.row -= count;
metrics.to.row -= count;
}
else
{
metrics = null;
}
}
// inside
else
{
if(bCanResize)
{
metrics.from.row = updateRange.r1;
metrics.from.colOff = 0;
offset = 0;
if (obj.to.row - updateRange.r2 - 1 > 0)
offset = obj.to.row - updateRange.r2 - 1;
else {
offset = 1;
metrics.to.colOff = 0;
}
metrics.to.row = metrics.from.row + offset;
}
else
{
metrics = null;
}
}
}
else if ((updateRange.r1 > obj.from.row) && (updateRange.r1 <= obj.to.row))
{
if(bCanResize)
{
// outside
if (updateRange.r2 >= obj.to.row)
{
metrics.to.row = updateRange.r1;
metrics.to.colOff = 0;
}
else
{
metrics.to.row -= count;
}
}
else
{
metrics = null;
}
}
else
{
metrics = null;
}
break;
}
case c_oAscDeleteOptions.DeleteCellsAndShiftTop:
{
// Range
break;
}
}
}
// Normalize position
if (metrics)
{
var oFrom = metrics.from;
var oTo = metrics.to;
if (oFrom.col < 0)
{
oFrom.col = 0;
oFrom.colOff = 0;
}
if (oTo.col <= 0) {
oTo.col = 1;
oTo.colOff = 0;
}
if (oFrom.row < 0) {
oFrom.row = 0;
oFrom.rowOff = 0;
}
if (oTo.row <= 0) {
oTo.row = 1;
oTo.rowOff = 0;
}
if (oFrom.col === oTo.col) {
if(oFrom.colOff > oTo.colOff) {
oTo.colOff = oFrom.colOff;
}
}
if (oFrom.row === oTo.row) {
if(oFrom.rowOff > oTo.rowOff) {
oTo.rowOff = oFrom.rowOff;
}
}
oGraphicObject.setDrawingBaseCoords(oFrom.col, oFrom.colOff, oFrom.row, oFrom.rowOff,
oTo.col, oTo.colOff, oTo.row, oTo.rowOff, obj.Pos.X, obj.Pos.Y, obj.ext.cx, obj.ext.cy);
oGraphicObject.recalculate();
if(oGraphicObject.spPr && oGraphicObject.spPr.xfrm)
{
var oXfrm = oGraphicObject.spPr.xfrm;
oXfrm.setOffX(oGraphicObject.x);
oXfrm.setOffY(oGraphicObject.y);
oXfrm.setExtX(oGraphicObject.extX);
oXfrm.setExtY(oGraphicObject.extY);
}
oGraphicObject.recalculate();
bNeedRedraw = true;
}
}
bNeedRedraw && _this.showDrawingObjects();
};
_this.updateDrawingsTransform = function(target) {
if(false === _this.bUpdateMetrics) {
return;
}
if(!AscCommon.isRealObject(target)) {
return;
}
if (target.target === AscCommonExcel.c_oTargetType.RowResize ||
target.target === AscCommonExcel.c_oTargetType.ColumnResize) {
for(var i = 0; i < aObjects.length; ++i) {
var oDrawingBase = aObjects[i];
var oGraphicObject = oDrawingBase.graphicObject;
if(oDrawingBase.checkTarget(target, false)) {
oGraphicObject.handleUpdateExtents();
oGraphicObject.recalculate();
}
}
}
};
_this.updateSizeDrawingObjects = function(target) {
if(AscCommon.isFileBuild()) {
return;
}
var oGraphicObject;
var bCheck, bRecalculate;
if(!History.CanAddChanges() || History.CanNotAddChanges) {
_this.updateDrawingsTransform(target);
return;
}
var aObjectsForCheck = [], i, drawingObject, bDraw = false;
if (target.target === AscCommonExcel.c_oTargetType.RowResize ||
target.target === AscCommonExcel.c_oTargetType.ColumnResize) {
for (i = 0; i < aObjects.length; i++) {
drawingObject = aObjects[i];
bCheck = drawingObject.checkTarget(target, false);
if (bCheck) {
oGraphicObject = drawingObject.graphicObject;
bRecalculate = true;
if(oGraphicObject){
var oldX = oGraphicObject.x;
var oldY = oGraphicObject.y;
var oldExtX = oGraphicObject.extX;
var oldExtY = oGraphicObject.extY;
if(drawingObject.Type === AscCommon.c_oAscCellAnchorType.cellanchorTwoCell
&& drawingObject.editAs !== AscCommon.c_oAscCellAnchorType.cellanchorTwoCell) {
if(drawingObject.editAs === AscCommon.c_oAscCellAnchorType.cellanchorAbsolute) {
aObjectsForCheck.push({object: drawingObject, coords: drawingObject._getGraphicObjectCoords()});
}
else {
oGraphicObject.recalculateTransform();
oGraphicObject.extX = oldExtX;
oGraphicObject.extY = oldExtY;
aObjectsForCheck.push({object: drawingObject, coords: drawingObject._getGraphicObjectCoords()});
}
} else if (oGraphicObject.hasSmartArt && oGraphicObject.hasSmartArt()) { // fixme: this is a crutch for resizing columns and rows, fix after normal recalculate smartart
if (oGraphicObject.spPr.xfrm.isZeroCh()) {
oGraphicObject.updateCoordinatesAfterInternalResize();
}
oGraphicObject.recalculateTransform();
var coefficient = 1;
if (oldExtX !== oGraphicObject.extX) {
coefficient = oGraphicObject.extX / oldExtX;
oGraphicObject.extY *= oGraphicObject.extX / oldExtX;
} else if (oldExtY !== oGraphicObject.extY) {
coefficient = oGraphicObject.extY / oldExtY;
oGraphicObject.extX *= coefficient;
}
if (coefficient !== 1) {
oGraphicObject.changeSize(coefficient, coefficient);
oGraphicObject.spPr.xfrm.setChExtX(oGraphicObject.spPr.xfrm.extX);
oGraphicObject.spPr.xfrm.setChExtY(oGraphicObject.spPr.xfrm.extY);
}
aObjectsForCheck.push({object: drawingObject, coords: drawingObject._getGraphicObjectCoords()});
} else {
if(oGraphicObject.recalculateTransform) {
oGraphicObject.recalculateTransform();
var fDelta = 0.01;
bRecalculate = false;
if(!AscFormat.fApproxEqual(oldX, oGraphicObject.x, fDelta) || !AscFormat.fApproxEqual(oldY, oGraphicObject.y, fDelta)
|| !AscFormat.fApproxEqual(oldExtX, oGraphicObject.extX, fDelta) || !AscFormat.fApproxEqual(oldExtY, oGraphicObject.extY, fDelta)){
bRecalculate = true;
}
}
if(bRecalculate) {
oGraphicObject.handleUpdateExtents();
oGraphicObject.recalculate();
bDraw = true;
}
else {
drawingObject.checkBoundsFromTo();
}
}
}
}
else {
drawingObject.checkBoundsFromTo();
}
}
}
if(aObjectsForCheck.length > 0) {
var aId = [];
for(i = 0; i < aObjectsForCheck.length; ++i) {
aId.push(aObjectsForCheck[i].object.graphicObject.Get_Id());
}
Asc.editor.checkObjectsLock(aId, function (bLock) {
var i, oObjectToCheck, oGraphicObject;
var bUpdateDrawingBaseCoords = (bLock === true) && History.CanAddChanges() && !History.CanNotAddChanges;
for(i = 0; i < aObjectsForCheck.length; ++i) {
oObjectToCheck = aObjectsForCheck[i];
oGraphicObject = oObjectToCheck.object.graphicObject;
if(bUpdateDrawingBaseCoords) {
var oC = oObjectToCheck.coords;
oGraphicObject.setDrawingBaseCoords(oC.from.col, oC.from.colOff, oC.from.row, oC.from.rowOff,
oC.to.col, oC.to.colOff, oC.to.row, oC.to.rowOff,
oC.Pos.X, oC.Pos.Y, oC.ext.cx, oC.ext.cy);
}
oGraphicObject.handleUpdateExtents();
if (oGraphicObject.hasSmartArt && oGraphicObject.hasSmartArt()) {
oGraphicObject.checkExtentsByDocContent(true, true);
}
oGraphicObject.recalculate();
}
_this.showDrawingObjects();
});
}
else {
if(bDraw) {
_this.showDrawingObjects();
}
}
};
_this.applyMoveResizeRange = function(oRanges) {
var oChart = null;
var aSelectedObjects = _this.controller.selection.groupSelection ? _this.controller.selection.groupSelection.selectedObjects : _this.controller.selectedObjects;
if(aSelectedObjects.length === 1
&& aSelectedObjects[0].getObjectType() === AscDFH.historyitem_type_ChartSpace) {
oChart = aSelectedObjects[0];
}
else {
return;
}
_this.controller.checkSelectedObjectsAndCallback(function () {
oChart.fillDataFromTrack(oRanges);
}, [], false, AscDFH.historydescription_ChartDrawingObjects);
if (oChart.isFrameChart)
{
api.frameManager.sendUpdateDiagram();
}
};
//-----------------------------------------------------------------------------------
// Graphic object
//-----------------------------------------------------------------------------------
_this.addGraphicObject = function(graphic, position, lockByDefault) {
worksheet.cleanSelection();
var drawingObject = _this.createDrawingObject();
drawingObject.graphicObject = graphic;
graphic.setDrawingBase(drawingObject);
var ret;
if (AscFormat.isRealNumber(position)) {
aObjects.splice(position, 0, drawingObject);
ret = position;
}
else {
ret = aObjects.length;
aObjects.push(drawingObject);
}
if ( lockByDefault ) {
Asc.editor.checkObjectsLock([drawingObject.graphicObject.Id], function(result) {});
}
worksheet.setSelectionShape(true);
return ret;
};
_this.addOleObject = function(fWidth, fHeight, nWidthPix, nHeightPix, sLocalUrl, sData, sApplicationId, bSelect, arrImagesForAddToHistory){
var drawingObject = _this.createDrawingObject();
drawingObject.worksheet = worksheet;
var activeCell = worksheet.model.selectionRange.activeCell;
drawingObject.from.col = activeCell.col;
drawingObject.from.row = activeCell.row;
_this.calculateObjectMetrics(drawingObject, nWidthPix, nHeightPix);
var coordsFrom = _this.calculateCoords(drawingObject.from);
_this.controller.resetSelection();
_this.controller.addOleObjectFromParams(pxToMm(coordsFrom.x), pxToMm(coordsFrom.y), fWidth, fHeight, nWidthPix, nHeightPix, sLocalUrl, sData, sApplicationId, bSelect, arrImagesForAddToHistory);
worksheet.setSelectionShape(true);
};
_this.editOleObject = function(oOleObject, sData, sImageUrl, fWidth, fHeight, nPixWidth, nPixHeight, bResize, arrImagesForAddToHistory){
this.controller.editOleObjectFromParams(oOleObject, sData, sImageUrl, fWidth, fHeight, nPixWidth, nPixHeight, bResize, arrImagesForAddToHistory);
};
_this.startEditCurrentOleObject = function(){
this.controller.startEditCurrentOleObject();
};
_this.groupGraphicObjects = function() {
if ( _this.controller.canGroup() ) {
if(this.controller.checkSelectedObjectsProtection())
{
return;
}
_this.controller.checkSelectedObjectsAndCallback(_this.controller.createGroup, [], false, AscDFH.historydescription_Spreadsheet_CreateGroup);
worksheet.setSelectionShape(true);
}
};
_this.unGroupGraphicObjects = function() {
if ( _this.controller.canUnGroup() ) {
_this.controller.unGroup();
worksheet.setSelectionShape(true);
api.isStartAddShape = false;
}
};
_this.getDrawingBase = function(graphicId) {
var oDrawing = AscCommon.g_oTableId.Get_ById(graphicId);
if(oDrawing) {
if(oDrawing.chart
&& oDrawing.chart.getObjectType
&& oDrawing.chart.getObjectType() === AscDFH.historyitem_type_ChartSpace) {
oDrawing = oDrawing.chart;
}
while(oDrawing.group) {
oDrawing = oDrawing.group;
}
if(oDrawing.drawingBase) {
for (var i = 0; i < aObjects.length; i++) {
if ( aObjects[i] === oDrawing.drawingBase )
return aObjects[i];
}
}
}
return null;
};
_this.deleteDrawingBase = function(graphicId) {
var position = null;
var bRedraw = false;
for (var i = 0; i < aObjects.length; i++) {
if ( aObjects[i].graphicObject.Id == graphicId ) {
aObjects[i].graphicObject.deselect(_this.controller);
if ( aObjects[i].isChart() )
worksheet.endEditChart();
aObjects.splice(i, 1);
bRedraw = true;
position = i;
break;
}
}
/*if ( bRedraw ) {
worksheet._endSelectionShape();
_this.sendGraphicObjectProps();
_this.showDrawingObjects();
}*/
return position;
};
_this.checkGraphicObjectPosition = function(x, y, w, h) {
/* Принцип:
true - если перемещение в области или требуется увеличить лист вправо/вниз
false - наезд на хидеры
*/
var response = { result: true, x: 0, y: 0 };
// выход за границу слева или сверху
if ( y < 0 ) {
response.result = false;
response.y = Math.abs(y);
}
if ( x < 0 ) {
response.result = false;
response.x = Math.abs(x);
}
return response;
};
_this.resetLockedGraphicObjects = function() {
for (var i = 0; i < aObjects.length; i++) {
aObjects[i].graphicObject.lockType = c_oAscLockTypes.kLockTypeNone;
}
};
_this.tryResetLockedGraphicObject = function(id) {
var bObjectFound = false;
for (var i = 0; i < aObjects.length; i++) {
if ( aObjects[i].graphicObject.Id == id ) {
aObjects[i].graphicObject.lockType = c_oAscLockTypes.kLockTypeNone;
bObjectFound = true;
break;
}
}
return bObjectFound;
};
_this.getDrawingCanvas = function() {
return { shapeCtx: api.wb.shapeCtx, shapeOverlayCtx: api.wb.shapeOverlayCtx, autoShapeTrack: api.wb.autoShapeTrack, trackOverlay: api.wb.trackOverlay };
};
_this.convertMetric = function(val, from, to) {
/* Параметры конвертирования (from/to)
0 - px, 1 - pt, 2 - in, 3 - mm
*/
return val * ascCvtRatio(from, to);
};
_this.convertPixToMM = function(pix)
{
return _this.convertMetric(pix, 0, 3);
};
_this.getSelectedGraphicObjects = function() {
return _this.controller.selectedObjects;
};
_this.selectedGraphicObjectsExists = function() {
return _this.controller && _this.controller.selectedObjects.length > 0;
};
_this.loadImageRedraw = function(imageUrl) {
var _image = api.ImageLoader.LoadImage(imageUrl, 1);
if (null != _image) {
imageLoaded(_image);
}
else {
_this.asyncImageEndLoaded = function(_image) {
imageLoaded(_image);
_this.asyncImageEndLoaded = null;
}
}
function imageLoaded(_image) {
if ( !_image.Image ) {
worksheet.model.workbook.handlers.trigger("asc_onError", c_oAscError.ID.UplImageUrl, c_oAscError.Level.NoCritical);
}
else
_this.showDrawingObjects();
}
};
_this._getOriginalImageSize = function(isCrop) {
const selectedObjects = _this.controller.selectedObjects;
if ( (selectedObjects.length === 1) ) {
const oShape = selectedObjects[0];
if(oShape.isImage()){
const imageUrl = oShape.getImageUrl();
const oImagePr = new Asc.asc_CImgProperty();
oImagePr.asc_putImageUrl(imageUrl);
oImagePr.cropWidthCoefficient = oShape.getCropWidthCoefficient();
oImagePr.cropHeightCoefficient = oShape.getCropHeightCoefficient();
return isCrop ? oImagePr.asc_getCropOriginSize(api) : oImagePr.asc_getOriginSize(api);
}
}
return new AscCommon.asc_CImageSize( 50, 50, false );
};
_this.getOriginalImageSize = function() {
return this._getOriginalImageSize();
};
_this.getCropOriginalImageSize = function() {
return this._getOriginalImageSize(true);
};
_this.getSelectionImg = function() {
return _this.controller.getSelectionImage().asc_getImageUrl();
};
_this.sendGraphicObjectProps = function () {
if (worksheet) {
worksheet.handlers.trigger("selectionChanged");
}
};
_this.setGraphicObjectProps = function(props) {
var objectProperties = props;
var _img;
if ( !AscCommon.isNullOrEmptyString(objectProperties.ImageUrl) ) {
if (window['IS_NATIVE_EDITOR']) {
_this.controller.setGraphicObjectProps( objectProperties );
} else {
_img = api.ImageLoader.LoadImage(objectProperties.ImageUrl, 1);
if (null != _img) {
_this.controller.setGraphicObjectProps( objectProperties );
}
else {
_this.asyncImageEndLoaded = function(_image) {
_this.controller.setGraphicObjectProps( objectProperties );
_this.asyncImageEndLoaded = null;
}
}
}
}
else if ( objectProperties.ShapeProperties && objectProperties.ShapeProperties.fill && objectProperties.ShapeProperties.fill.fill &&
!AscCommon.isNullOrEmptyString(objectProperties.ShapeProperties.fill.fill.url) ) {
if (window['IS_NATIVE_EDITOR']) {
_this.controller.setGraphicObjectProps( objectProperties );
} else {
_img = api.ImageLoader.LoadImage(objectProperties.ShapeProperties.fill.fill.url, 1);
if ( null != _img ) {
_this.controller.setGraphicObjectProps( objectProperties );
}
else {
_this.asyncImageEndLoaded = function(_image) {
_this.controller.setGraphicObjectProps( objectProperties );
_this.asyncImageEndLoaded = null;
}
}
}
}
else if ( objectProperties.ShapeProperties && objectProperties.ShapeProperties.textArtProperties &&
objectProperties.ShapeProperties.textArtProperties.Fill && objectProperties.ShapeProperties.textArtProperties.Fill.fill &&
!AscCommon.isNullOrEmptyString(objectProperties.ShapeProperties.textArtProperties.Fill.fill.url) ) {
if (window['IS_NATIVE_EDITOR']) {
_this.controller.setGraphicObjectProps( objectProperties );
} else {
_img = api.ImageLoader.LoadImage(objectProperties.ShapeProperties.textArtProperties.Fill.fill.url, 1);
if ( null != _img ) {
_this.controller.setGraphicObjectProps( objectProperties );
}
else {
_this.asyncImageEndLoaded = function(_image) {
_this.controller.setGraphicObjectProps( objectProperties );
_this.asyncImageEndLoaded = null;
}
}
}
}
else if(AscFormat.isRealNumber(objectProperties.ChangeLevel)) {
this.setGraphicObjectLayer(objectProperties.ChangeLevel);
}
else {
objectProperties.ImageUrl = null;
_this.applySliderCallbacks(
function(){
_this.controller.setGraphicObjectProps(props);
},
function() {
_this.controller.setGraphicObjectPropsCallBack(props);
_this.controller.startRecalculate();
_this.sendGraphicObjectProps();
}
);
}
};
_this.applySliderCallbacks = function(fStartCallback, fApplyCallback) {
var Point = History.Points[History.Index];
if(!api.noCreatePoint || api.exucuteHistory) {
if( !api.noCreatePoint && !api.exucuteHistory && api.exucuteHistoryEnd) {
if(_this.nCurPointItemsLength === -1 && !(Point && Point.Items.length === 0)) {
fStartCallback();
}
else{
fApplyCallback();
}
api.exucuteHistoryEnd = false;
_this.nCurPointItemsLength = -1;
}
else {
fStartCallback();
}
if(api.exucuteHistory) {
Point = History.Points[History.Index];
if(Point) {
_this.nCurPointItemsLength = Point.Items.length;
}
else {
_this.nCurPointItemsLength = -1;
}
api.exucuteHistory = false;
}
if(api.exucuteHistoryEnd) {
api.exucuteHistoryEnd = false;
}
}
else {
if(Point && Point.Items.length > 0) {
if(this.nCurPointItemsLength > -1) {
var nBottomIndex = - 1;
for ( var Index = Point.Items.length - 1; Index > nBottomIndex; Index-- ) {
var Item = Point.Items[Index];
if(!Item.Class.Read_FromBinary2)
Item.Class.Undo( Item.Type, Item.Data, Item.SheetId );
else
Item.Class.Undo(Item.Data);
}
Point.Items.length = 0;
_this.controller.setSelectionState(Point.SelectionState);
fApplyCallback();
}
else {
fStartCallback();
var Point = History.Points[History.Index];
if(Point) {
_this.nCurPointItemsLength = Point.Items.length;
}
else {
_this.nCurPointItemsLength = -1;
}
}
}
}
api.exucuteHistoryEnd = false;
};
_this.showChartSettings = function() {
api.wb.handlers.trigger("asc_onShowChartDialog", true);
};
_this.setDrawImagePlaceParagraph = function(element_id, props) {
_this.drawingDocument.InitGuiCanvasTextProps(element_id);
_this.drawingDocument.DrawGuiCanvasTextProps(props);
};
//-----------------------------------------------------------------------------------
// Graphic object mouse & keyboard events
//-----------------------------------------------------------------------------------
_this.onStartUserAction = function() {
if(!AscCommon.SpeechWorker.isEnabled) {
return;
}
this.HistoryIndex = AscCommon.History.Index;
this.BeforeActionSelectionState = this.controller.getSelectionState();
};
_this.onEndUserAction = function() {
if(!this.BeforeActionSelectionState) {
return;
}
if(this.HistoryIndex !== AscCommon.History.Index) {
return;
}
const oEndSelectionState = this.controller.getSelectionState();
const oBeforeSelectionState = this.BeforeActionSelectionState;
this.BeforeActionSelectionState = null;
const oSpeechData = AscCommon.getSpeechDescription(oBeforeSelectionState, oEndSelectionState);
if(oSpeechData) {
AscCommon.SpeechWorker.speech(
oSpeechData.type,
oSpeechData.obj
);
}
};
_this.graphicObjectMouseDown = function(e, x, y) {
var offsets = _this.drawingArea.getOffsets(x, y, true);
if ( offsets )
_this.controller.onMouseDown( e, pxToMm(x - offsets.x), pxToMm(y - offsets.y) );
//_this.private_UpdateCursorXY();
};
_this.graphicObjectMouseMove = function(e, x, y) {
e.IsLocked = e.isLocked;
_this.lastX = x;
_this.lastY = y;
var offsets = _this.drawingArea.getOffsets(x, y, true);
if ( offsets ) {
var fX = pxToMm(x - offsets.x);
var fY = pxToMm(y - offsets.y);
_this.controller.onMouseMove( e, fX, fY );
if(worksheet && worksheet.model) {
AscCommon.CollaborativeEditing.Check_ForeignCursorsLabels(fX, fY, worksheet.model.Id);
}
}
};
_this.graphicObjectMouseUp = function(e, x, y) {
var offsets = _this.drawingArea.getOffsets(x, y, true);
if ( offsets )
_this.controller.onMouseUp( e, pxToMm(x - offsets.x), pxToMm(y - offsets.y) );
//_this.private_UpdateCursorXY();
};
_this.isPointInDrawingObjects3 = function(x, y, page, bSelected, bText) {
var offsets = _this.drawingArea.getOffsets(x, y, true);
if ( offsets )
return _this.controller.isPointInDrawingObjects3(pxToMm(x - offsets.x), pxToMm(y - offsets.y), page, bSelected, bText );
return false;
};
// keyboard
_this.private_UpdateCursorXY = function (bUpdateX, bUpdateY) {
let oController = _this.controller;
if(oController) {
let oContent = oController.getTargetDocContent();
if(oContent) {
if (true === oContent.Selection.Use && true !== oContent.Selection.Start)
Asc.editor.sendEvent("asc_onSelectionEnd");
else if (!oContent.Selection.Use)
Asc.editor.sendEvent("asc_onCursorMove");
return;
}
}
Asc.editor.sendEvent("asc_onSelectionEnd");
};
_this.graphicObjectKeyDown = function(e) {
return _this.controller.onKeyDown(e);
};
_this.graphicObjectKeyUp = function(e) {
return _this.controller.onKeyUp( e );
};
_this.graphicObjectKeyPress = function(e) {
this.onStartUserAction();
let ret = _this.controller.onKeyPress( e );
this.onEndUserAction();
return ret;
};
//-----------------------------------------------------------------------------------
// Asc
//-----------------------------------------------------------------------------------
_this.cleanWorksheet = function() {
if (worksheet) {
var model = worksheet.model;
History.Clear();
for (var i = 0; i < aObjects.length; i++) {
aObjects[i].graphicObject.deleteDrawingBase();
}
aObjects.length = 0;
var oAllRange = model.getRange3(0, 0, model.getRowsCount(), model.getColsCount());
oAllRange.cleanAll();
worksheet.endEditChart();
}
};
_this.getWordChartObject = function() {
for (var i = 0; i < aObjects.length; i++) {
var drawingObject = aObjects[i];
if ( drawingObject.isChart() ) {
var oChartSpace = drawingObject.graphicObject;
if(!oChartSpace.recalcInfo.recalculateTransform) {
if(oChartSpace.spPr && oChartSpace.spPr.xfrm) {
oChartSpace.spPr.xfrm.extX = oChartSpace.extX;
oChartSpace.spPr.xfrm.extY = oChartSpace.extY;
}
}
return new asc_CChartBinary(oChartSpace);
}
}
return null;
};
_this.getAscChartObject = function(bNoLock) {
var settings;
settings = _this.controller.getChartSettings();
if ( !settings )
{
settings = new Asc.asc_ChartSettings();
settings.putRanges(worksheet.getSelectionRangeValues(true, true));
settings.putStyle(2);
settings.putType(Asc.c_oAscChartTypeSettings.lineNormal);
settings.putTitle(Asc.c_oAscChartTitleShowSettings.noOverlay);
var vert_axis_settings = new AscCommon.asc_ValAxisSettings();
settings.addVertAxesProps(vert_axis_settings);
vert_axis_settings.setDefault();
vert_axis_settings.putLabel(Asc.c_oAscChartVertAxisLabelShowSettings.none);
vert_axis_settings.putGridlines(Asc.c_oAscGridLinesSettings.major);
var hor_axis_settings = new AscCommon.asc_CatAxisSettings();
settings.addHorAxesProps(hor_axis_settings);
hor_axis_settings.setDefault();
hor_axis_settings.putLabel(Asc.c_oAscChartHorAxisLabelShowSettings.none);
hor_axis_settings.putGridlines(Asc.c_oAscGridLinesSettings.none);
settings.putDataLabelsPos(Asc.c_oAscChartDataLabelsPos.none);
settings.putSeparator(",");
settings.putLine(true);
settings.putShowMarker(false);
settings.putView3d(null);
}
else{
if(true !== bNoLock){
this.controller.checkSelectedObjectsAndFireCallback(function(){});
}
}
return settings;
};
//-----------------------------------------------------------------------------------
// Selection
//-----------------------------------------------------------------------------------
_this.selectDrawingObjectRange = function(drawing) {
worksheet.cleanSelection();
worksheet.endEditChart();
drawing.fillSelectedRanges(worksheet);
if (worksheet.isChartAreaEditMode || (api && api.isShowVisibleAreaOleEditor)) {
worksheet._drawSelection();
}
};
_this.unselectDrawingObjects = function() {
worksheet.endEditChart();
_this.controller.resetSelectionState();
};
_this.getDrawingObject = function(id) {
for (var i = 0; i < aObjects.length; i++) {
if (aObjects[i].graphicObject.Id == id)
return aObjects[i];
}
return null;
};
_this.getGraphicSelectionType = function(id) {
var selected_objects, selection, controller = _this.controller;
if(controller.selection.groupSelection)
{
selected_objects = controller.selection.groupSelection.selectedObjects;
selection = controller.selection.groupSelection.selection;
}
else
{
selected_objects = controller.selectedObjects;
selection = controller.selection;
}
if(selection.chartSelection && selection.chartSelection.selection.textSelection)
{
return c_oAscSelectionType.RangeChartText;
}
if(selection.textSelection)
{
return c_oAscSelectionType.RangeShapeText;
}
if(selected_objects[0] )
{
if(selected_objects[0].getObjectType() === AscDFH.historyitem_type_ChartSpace && selected_objects.length === 1)
return c_oAscSelectionType.RangeChart;
if(selected_objects[0].getObjectType() === AscDFH.historyitem_type_ImageShape)
return c_oAscSelectionType.RangeImage;
if(selected_objects[0].getObjectType() === AscDFH.historyitem_type_SlicerView)
return c_oAscSelectionType.RangeSlicer;
return c_oAscSelectionType.RangeShape;
}
return undefined;
};
//-----------------------------------------------------------------------------------
// Position
//-----------------------------------------------------------------------------------
_this.getCurrentDrawingMacrosName = function() {
return _this.controller.getCurrentDrawingMacrosName();
};
_this.assignMacrosToCurrentDrawing = function(sGuid) {
_this.controller.assignMacrosToCurrentDrawing(sGuid);
};
_this.setGraphicObjectLayer = function(layerType) {
_this.controller.setGraphicObjectLayer(layerType);
};
_this.setGraphicObjectAlign = function(alignType) {
_this.controller.setGraphicObjectAlign(alignType);
};
_this.distributeGraphicObjectHor = function() {
_this.controller.distributeGraphicObjectHor();
};
_this.distributeGraphicObjectVer = function() {
_this.controller.distributeGraphicObjectVer();
};
_this.getSelectedDrawingObjectsCount = function() {
var selectedObjects = _this.controller.selection.groupSelection ? this.controller.selection.groupSelection.selectedObjects : this.controller.selectedObjects;
return selectedObjects.length;
};
_this.checkCursorPlaceholder = function (x, y) {
if (window["IS_NATIVE_EDITOR"]) {
return null;
}
const oWS = this.getWorksheet();
const oDrawingDocument = oWS.getDrawingDocument();
const nPage = oWS.workbook.model.nActive;
const oContext = oWS.workbook.trackOverlay.m_oContext;
const oRect = {};
const nLeft = 2 * oWS.cellsLeft - oWS._getColLeft(oWS.visibleRange.c1);
const nTop = 2 * oWS.cellsTop - oWS._getRowTop(oWS.visibleRange.r1);
oRect.left = nLeft;
oRect.right = nLeft + AscCommon.AscBrowser.convertToRetinaValue(oContext.canvas.width);
oRect.top = nTop;
oRect.bottom = nTop + AscCommon.AscBrowser.convertToRetinaValue(oContext.canvas.height);
const nPXtoMM = Asc.getCvtRatio(0/*mm*/, 3/*px*/, oWS._getPPIX());
const oOffsets = oWS.objectRender.drawingArea.getOffsets(x, y);
let nX = x;
let nY = y;
if (oOffsets) {
nX -= oOffsets.x;
nY -= oOffsets.y;
}
nX *= nPXtoMM;
nY *= nPXtoMM;
return oDrawingDocument.placeholders.onPointerMove({X: nX, Y: nY, Page: nPage}, oRect, oContext.canvas.width * nPXtoMM, oContext.canvas.height * nPXtoMM);
};
_this.checkCursorDrawingObject = function(x, y) {
let offsets = _this.drawingArea.getOffsets(x, y);
let objectInfo = null;
let oApi = Asc.editor || editor;
if ( offsets ) {
let graphicObjectInfo = _this.controller.isPointInDrawingObjects( pxToMm(x - offsets.x), pxToMm(y - offsets.y) );
if ( graphicObjectInfo && graphicObjectInfo.objectId ) {
objectInfo = { cursor: null, id: null, object: null };
objectInfo.object = _this.getDrawingBase(graphicObjectInfo.objectId);
if(objectInfo.object) {
objectInfo.id = graphicObjectInfo.objectId;
let sCursorType = graphicObjectInfo.cursorType;
if(oApi) {
if(!oApi.isShowShapeAdjustments()) {
if(sCursorType !== "text") {
sCursorType = "default";
}
}
}
objectInfo.cursor = sCursorType;
objectInfo.hyperlink = graphicObjectInfo.hyperlink;
objectInfo.macro = graphicObjectInfo.macro;
objectInfo.tooltip = graphicObjectInfo.tooltip;
}
}
}
if(oApi.isFormatPainterOn()) {
if(objectInfo) {
let oData = oApi.getFormatPainterData();
if(oData && oData.isDrawingData()) {
objectInfo.cursor = AscCommon.Cursors.ShapeCopy;
}
}
}
if(oApi.isInkDrawerOn()) {
if(objectInfo) {
objectInfo.cursor = "default";
}
}
return objectInfo;
};
_this.getPositionInfo = function(x, y) {
var info = new CCellObjectInfo();
var tmp = worksheet._findColUnderCursor(x, true);
if (tmp) {
info.col = tmp.col;
info.colOff = pxToMm(x - worksheet._getColLeft(info.col));
}
tmp = worksheet._findRowUnderCursor(y, true);
if (tmp) {
info.row = tmp.row;
info.rowOff = pxToMm(y - worksheet._getRowTop(info.row));
}
return info;
};
_this.checkCurrentTextObjectExtends = function()
{
var oController = this.controller;
if(oController)
{
var oTargetTextObject = AscFormat.getTargetTextObject(oController);
if(oTargetTextObject.checkExtentsByDocContent)
{
oTargetTextObject.checkExtentsByDocContent(true, true);
}
}
};
_this.beginCompositeInput = function(){
_this.controller.CreateDocContent();
_this.drawingDocument.TargetStart();
_this.drawingDocument.TargetShow();
var oContent = _this.controller.getTargetDocContent(true);
if (!oContent) {
return false;
}
var oPara = oContent.GetCurrentParagraph();
if (!oPara) {
return false;
}
if (true === oContent.IsSelectionUse())
oContent.Remove(1, true, false, true);
var oRun = oPara.Get_ElementByPos(oPara.Get_ParaContentPos(false, false));
if (!oRun || !(oRun instanceof ParaRun)) {
return false;
}
_this.CompositeInput = new AscWord.RunCompositeInput_Old(oRun);
oRun.Set_CompositeInput(_this.CompositeInput);
_this.controller.startRecalculate();
_this.sendGraphicObjectProps();
};
_this.Begin_CompositeInput = function(){
if(!_this.controller.canEdit()) {
return;
}
if(_this.controller.checkSelectedObjectsProtectionText()) {
return;
}
Asc.editor.sendEvent("asc_onUserActionStart");
History.Create_NewPoint(AscDFH.historydescription_Document_CompositeInput);
_this.beginCompositeInput();
_this.controller.recalculateCurPos(true, true);
Asc.editor.sendEvent("asc_onUserActionEnd");
};
_this.addCompositeText = function(nCharCode){
if (null === _this.CompositeInput)
return;
var oRun = _this.CompositeInput.Run;
var nPos = _this.CompositeInput.Pos + _this.CompositeInput.Length;
var oChar;
if (para_Math_Run === oRun.Type)
{
oChar = new CMathText();
oChar.add(nCharCode);
}
else
{
if (32 == nCharCode || 12288 == nCharCode)
oChar = new AscWord.CRunSpace();
else
oChar = new AscWord.CRunText(nCharCode);
}
oRun.Add_ToContent(nPos, oChar, true);
_this.CompositeInput.Length++;
};
_this.Add_CompositeText = function(nCharCode)
{
if (null === _this.CompositeInput)
return;
Asc.editor.sendEvent("asc_onUserActionStart");
History.Create_NewPoint(AscDFH.historydescription_Document_CompositeInputReplace);
_this.addCompositeText(nCharCode);
_this.checkCurrentTextObjectExtends();
_this.controller.recalculate();
_this.controller.recalculateCurPos(true, true);
_this.controller.updateSelectionState();
Asc.editor.sendEvent("asc_onUserActionEnd");
};
_this.removeCompositeText = function(nCount){
if (null === _this.CompositeInput)
return;
var oRun = _this.CompositeInput.Run;
var nPos = _this.CompositeInput.Pos + _this.CompositeInput.Length;
var nDelCount = Math.max(0, Math.min(nCount, _this.CompositeInput.Length, oRun.Content.length, nPos));
oRun.Remove_FromContent(nPos - nDelCount, nDelCount, true);
_this.CompositeInput.Length -= nDelCount;
};
_this.Remove_CompositeText = function(nCount){
_this.removeCompositeText(nCount);
_this.checkCurrentTextObjectExtends();
_this.controller.recalculate();
_this.controller.recalculateCurPos(true, true);
_this.controller.updateSelectionState();
};
_this.Replace_CompositeText = function(arrCharCodes)
{
if (null === _this.CompositeInput)
return;
Asc.editor.sendEvent("asc_onUserActionStart");
History.Create_NewPoint(AscDFH.historydescription_Document_CompositeInputReplace);
_this.removeCompositeText(_this.CompositeInput.Length);
for (var nIndex = 0, nCount = arrCharCodes.length; nIndex < nCount; ++nIndex)
{
_this.addCompositeText(arrCharCodes[nIndex]);
}
_this.checkCurrentTextObjectExtends();
_this.controller.startRecalculate();
_this.controller.recalculateCurPos(true, true);
_this.controller.updateSelectionState();
Asc.editor.sendEvent("asc_onUserActionEnd");
};
_this.Set_CursorPosInCompositeText = function(nPos)
{
if (null === _this.CompositeInput)
return;
var oRun = _this.CompositeInput.Run;
var nInRunPos = Math.max(Math.min(_this.CompositeInput.Pos + nPos, _this.CompositeInput.Pos + _this.CompositeInput.Length, oRun.Content.length), _this.CompositeInput.Pos);
oRun.State.ContentPos = nInRunPos;
_this.controller.recalculateCurPos(true, true);
_this.controller.updateSelectionState();
};
_this.Get_CursorPosInCompositeText = function()
{
if (null === _this.CompositeInput)
return 0;
var oRun = _this.CompositeInput.Run;
var nInRunPos = oRun.State.ContentPos;
var nPos = Math.min(_this.CompositeInput.Length, Math.max(0, nInRunPos - _this.CompositeInput.Pos));
return nPos;
};
_this.End_CompositeInput = function()
{
if (null === _this.CompositeInput)
return;
var oRun = _this.CompositeInput.Run;
oRun.Set_CompositeInput(null);
_this.CompositeInput = null;
var oController = _this.controller;
if(oController)
{
var oTargetTextObject = AscFormat.getTargetTextObject(oController);
if(oTargetTextObject && oTargetTextObject.txWarpStructNoTransform)
{
oTargetTextObject.recalculateContent();
}
}
_this.controller.recalculateCurPos(true, true);
_this.sendGraphicObjectProps();
_this.showDrawingObjects();
};
_this.Get_MaxCursorPosInCompositeText = function()
{
if (null === _this.CompositeInput)
return 0;
return _this.CompositeInput.Length;
};
//-----------------------------------------------------------------------------------
// Private Misc Methods
//-----------------------------------------------------------------------------------
function ascCvtRatio(fromUnits, toUnits) {
return asc.getCvtRatio( fromUnits, toUnits, drawingCtx.getPPIX() );
}
function mmToPx(val) {
return val * ascCvtRatio(3, 0);
}
function pxToMm(val) {
return val * ascCvtRatio(0, 3);
}
}
DrawingObjects.prototype.calculateCoords = function (cell) {
var ws = this.getWorksheet();
var coords = {x: 0, y: 0};
//0 - px, 1 - pt, 2 - in, 3 - mm
if (cell && ws) {
var rowHeight = ws.getRowHeight(cell.row, 3);
var colWidth = ws.getColumnWidth(cell.col, 3);
var resultRowOff = cell.rowOff > rowHeight ? rowHeight : cell.rowOff;
var resultColOff = cell.colOff > colWidth ? colWidth : cell.colOff;
coords.y = ws._getRowTop(cell.row) + ws.objectRender.convertMetric(resultRowOff, 3, 0) - ws._getRowTop(0);
coords.x = ws._getColLeft(cell.col) + ws.objectRender.convertMetric(resultColOff, 3, 0) - ws._getColLeft(0);
coords.x = ws.checkRtl(coords.x, undefined, undefined, true);
}
return coords;
};
DrawingObjects.prototype.getDocumentPositionBinary = function() {
if(this.controller) {
var oPosition = this.controller.getDocumentPositionForCollaborative();
if(!oPosition) {
return "";
}
//console.log("POSITION: " + oPosition.Position);
var oWriter = new AscCommon.CMemory(true);
oWriter.CheckSize(50);
return AscCommon.CollaborativeEditing.GetDocumentPositionBinary(oWriter, oPosition);
}
return "";
};
function ClickCounter() {
this.x = 0;
this.y = 0;
this.lastX = -1000;
this.lastY = -1000;
this.button = 0;
this.time = 0;
this.clickCount = 0;
this.log = false;
}
ClickCounter.prototype.mouseDownEvent = function(x, y, button) {
var currTime = getCurrentTime();
if (undefined === button)
button = 0;
var _eps = 3 * global_mouseEvent.KoefPixToMM;
var oApi = Asc && Asc.editor;
if(oApi && oApi.isMobileVersion && (!window["NATIVE_EDITOR_ENJINE"]))
{
_eps *= 2;
}
if ((Math.abs(global_mouseEvent.X - global_mouseEvent.LastX) > _eps) || (Math.abs(global_mouseEvent.Y - global_mouseEvent.LastY) > _eps))
{
// not only move!!! (touch - fast click in different places)
global_mouseEvent.LastClickTime = -1;
global_mouseEvent.ClickCount = 0;
}
this.x = x;
this.y = y;
if (this.button === button && Math.abs(this.x - this.lastX) <= _eps && Math.abs(this.y - this.lastY) <= _eps && (currTime - this.time < 500)) {
++this.clickCount;
} else {
this.clickCount = 1;
}
this.lastX = this.x;
this.lastY = this.y;
if (this.log) {
console.log("-----");
console.log("x-> " + this.x + " : " + x);
console.log("y-> " + this.y + " : " + y);
console.log("Time: " + (currTime - this.time));
console.log("Count: " + this.clickCount);
console.log("");
}
this.time = currTime;
};
ClickCounter.prototype.mouseMoveEvent = function(x, y) {
if (this.x !== x || this.y !== y) {
this.x = x;
this.y = y;
this.clickCount = 0;
if (this.log) {
console.log("Reset counter");
}
}
};
ClickCounter.prototype.getClickCount = function() {
return this.clickCount;
};
//--------------------------------------------------------export----------------------------------------------------
var prot;
window['AscFormat'] = window['AscFormat'] || {};
window['Asc'] = window['Asc'] || {};
window['AscFormat'].isObject = isObject;
window['AscFormat'].CCellObjectInfo = CCellObjectInfo;
window["Asc"]["asc_CChartBinary"] = window["Asc"].asc_CChartBinary = asc_CChartBinary;
prot = asc_CChartBinary.prototype;
prot["asc_getBinary"] = prot.asc_getBinary;
prot["asc_setBinary"] = prot.asc_setBinary;
prot["asc_getBinaryChartData"] = prot.asc_getBinaryChartData;
prot["asc_setBinaryChartData"] = prot.asc_setBinaryChartData;
prot["asc_setIsChartEx"] = prot.asc_setIsChartEx;
prot["asc_getIsChartEx"] = prot.asc_getIsChartEx;
prot["getChartSpace"] = prot.getChartSpace;
prot["getChart"] = prot.getChart;
prot["getWorkbookBinary"] = prot.getWorkbookBinary;
prot["setWorkbookBinary"] = prot.setWorkbookBinary;
prot["getChartData"] = prot.getChartData;
prot["asc_getThemeBinary"] = prot.asc_getThemeBinary;
prot["asc_setThemeBinary"] = prot.asc_setThemeBinary;
prot["asc_setColorMapBinary"] = prot.asc_setColorMapBinary;
prot["asc_getColorMapBinary"] = prot.asc_getColorMapBinary;
prot["getTheme"] = prot.getTheme;
prot["getColorMap"] = prot.getColorMap;
window["AscFormat"].asc_CChartSeria = asc_CChartSeria;
prot = asc_CChartSeria.prototype;
prot["asc_getValFormula"] = prot.asc_getValFormula;
prot["asc_setValFormula"] = prot.asc_setValFormula;
prot["asc_getxValFormula"] = prot.asc_getxValFormula;
prot["asc_setxValFormula"] = prot.asc_setxValFormula;
prot["asc_getCatFormula"] = prot.asc_getCatFormula;
prot["asc_setCatFormula"] = prot.asc_setCatFormula;
prot["asc_getTitle"] = prot.asc_getTitle;
prot["asc_setTitle"] = prot.asc_setTitle;
prot["asc_getTitleFormula"] = prot.asc_getTitleFormula;
prot["asc_setTitleFormula"] = prot.asc_setTitleFormula;
prot["asc_getMarkerSize"] = prot.asc_getMarkerSize;
prot["asc_setMarkerSize"] = prot.asc_setMarkerSize;
prot["asc_getMarkerSymbol"] = prot.asc_getMarkerSymbol;
prot["asc_setMarkerSymbol"] = prot.asc_setMarkerSymbol;
prot["asc_getFormatCode"] = prot.asc_getFormatCode;
prot["asc_setFormatCode"] = prot.asc_setFormatCode;
window["AscFormat"].DrawingObjects = DrawingObjects;
window["AscFormat"].DrawingBase = DrawingBase;
window["AscFormat"].ClickCounter = ClickCounter;
window["AscFormat"].aSparklinesStyles = aSparklinesStyles;
window["AscFormat"].CSparklineView = CSparklineView;
window["AscFormat"].CCellObjectInfo = CCellObjectInfo;
})(window);