Commit 17b6e6f6 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Перешел от замены prototype на добавление методов в него (скорость должна...

Перешел от замены prototype на добавление методов в него (скорость должна возрасти судя по тестам http://jsperf.com/createoraddproto)

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@53523 954022d7-b5bf-4e40-9824-e11837661b57
parent 58ebb6df
...@@ -286,6 +286,7 @@ ...@@ -286,6 +286,7 @@
return new WorksheetView(model, handlers, buffers, stringRender, maxDigitWidth, collaborativeEditing, settings); return new WorksheetView(model, handlers, buffers, stringRender, maxDigitWidth, collaborativeEditing, settings);
} }
this.defaults = new WorksheetViewSettings();
this.settings = $.extend(true, {}, this.defaults, settings); this.settings = $.extend(true, {}, this.defaults, settings);
var cells = this.settings.cells; var cells = this.settings.cells;
...@@ -401,134 +402,127 @@ ...@@ -401,134 +402,127 @@
return this; return this;
} }
WorksheetView.prototype = { WorksheetView.prototype.getVisibleRange = function () {
/** @type WorksheetView */
constructor: WorksheetView,
defaults: WorksheetViewSettings(),
getVisibleRange: function () {
return this.visibleRange; return this.visibleRange;
}, };
updateVisibleRange: function () { WorksheetView.prototype.updateVisibleRange = function () {
return this._updateCellsRange(this.getVisibleRange()); return this._updateCellsRange(this.getVisibleRange());
}, };
getFirstVisibleCol: function (allowPane) { WorksheetView.prototype.getFirstVisibleCol = function (allowPane) {
var tmp = 0; var tmp = 0;
if (allowPane && this.topLeftFrozenCell) if (allowPane && this.topLeftFrozenCell)
tmp = this.topLeftFrozenCell.getCol0(); tmp = this.topLeftFrozenCell.getCol0();
return this.visibleRange.c1 - tmp; return this.visibleRange.c1 - tmp;
}, };
getLastVisibleCol: function () { WorksheetView.prototype.getLastVisibleCol = function () {
return this.visibleRange.c2; return this.visibleRange.c2;
}, };
getFirstVisibleRow: function (allowPane) { WorksheetView.prototype.getFirstVisibleRow = function (allowPane) {
var tmp = 0; var tmp = 0;
if (allowPane && this.topLeftFrozenCell) if (allowPane && this.topLeftFrozenCell)
tmp = this.topLeftFrozenCell.getRow0(); tmp = this.topLeftFrozenCell.getRow0();
return this.visibleRange.r1 - tmp; return this.visibleRange.r1 - tmp;
}, };
getLastVisibleRow: function () { WorksheetView.prototype.getLastVisibleRow = function () {
return this.visibleRange.r2; return this.visibleRange.r2;
}, };
getHorizontalScrollRange: function () { WorksheetView.prototype.getHorizontalScrollRange = function () {
var ctxW = this.drawingCtx.getWidth() - this.cellsLeft; var ctxW = this.drawingCtx.getWidth() - this.cellsLeft;
for (var w = 0, i = this.cols.length - 1; i >= 0; --i) { for (var w = 0, i = this.cols.length - 1; i >= 0; --i) {
w += this.cols[i].width; w += this.cols[i].width;
if (w > ctxW) {break;} if (w > ctxW) {break;}
} }
return i; // Диапазон скрола должен быть меньше количества столбцов, чтобы не было прибавления столбцов при перетаскивании бегунка return i; // Диапазон скрола должен быть меньше количества столбцов, чтобы не было прибавления столбцов при перетаскивании бегунка
}, };
getVerticalScrollRange: function () { WorksheetView.prototype.getVerticalScrollRange = function () {
var ctxH = this.drawingCtx.getHeight() - this.cellsTop; var ctxH = this.drawingCtx.getHeight() - this.cellsTop;
for (var h = 0, i = this.rows.length - 1; i >= 0; --i) { for (var h = 0, i = this.rows.length - 1; i >= 0; --i) {
h += this.rows[i].height; h += this.rows[i].height;
if (h > ctxH) {break;} if (h > ctxH) {break;}
} }
return i; // Диапазон скрола должен быть меньше количества строк, чтобы не было прибавления строк при перетаскивании бегунка return i; // Диапазон скрола должен быть меньше количества строк, чтобы не было прибавления строк при перетаскивании бегунка
}, };
getCellsOffset: function (units) { WorksheetView.prototype.getCellsOffset = function (units) {
var u = units >= 0 && units <= 3 ? units : 0; var u = units >= 0 && units <= 3 ? units : 0;
return { return {
left: this.cellsLeft * asc_getcvt( 1/*pt*/, u, this._getPPIX() ), left: this.cellsLeft * asc_getcvt( 1/*pt*/, u, this._getPPIX() ),
top: this.cellsTop * asc_getcvt( 1/*pt*/, u, this._getPPIY() ) top: this.cellsTop * asc_getcvt( 1/*pt*/, u, this._getPPIY() )
}; };
}, };
getCellLeft: function (column, units) { WorksheetView.prototype.getCellLeft = function (column, units) {
if (column >= 0 && column < this.cols.length) { if (column >= 0 && column < this.cols.length) {
var u = units >= 0 && units <= 3 ? units : 0; var u = units >= 0 && units <= 3 ? units : 0;
return this.cols[column].left * asc_getcvt( 1/*pt*/, u, this._getPPIX() ); return this.cols[column].left * asc_getcvt( 1/*pt*/, u, this._getPPIX() );
} }
return null; return null;
}, };
getCellTop: function (row, units) { WorksheetView.prototype.getCellTop = function (row, units) {
if (row >= 0 && row < this.rows.length) { if (row >= 0 && row < this.rows.length) {
var u = units >= 0 && units <= 3 ? units : 0; var u = units >= 0 && units <= 3 ? units : 0;
return this.rows[row].top * asc_getcvt( 1/*pt*/, u, this._getPPIY() ); return this.rows[row].top * asc_getcvt( 1/*pt*/, u, this._getPPIY() );
} }
return null; return null;
}, };
getColumnWidth: function (index, units) { WorksheetView.prototype.getColumnWidth = function (index, units) {
if (index >= 0 && index < this.cols.length) { if (index >= 0 && index < this.cols.length) {
var u = units >= 0 && units <= 3 ? units : 0; var u = units >= 0 && units <= 3 ? units : 0;
return this.cols[index].width * asc_getcvt( 1/*pt*/, u, this._getPPIX() ); return this.cols[index].width * asc_getcvt( 1/*pt*/, u, this._getPPIX() );
} }
return null; return null;
}, };
getColumnWidthInSymbols: function (index) { WorksheetView.prototype.getColumnWidthInSymbols = function (index) {
if (index >= 0 && index < this.cols.length) { if (index >= 0 && index < this.cols.length) {
return this.cols[index].charCount; return this.cols[index].charCount;
} }
return null; return null;
}, };
getRowHeight: function (index, units, isHeightReal) { WorksheetView.prototype.getRowHeight = function (index, units, isHeightReal) {
if (index >= 0 && index < this.rows.length) { if (index >= 0 && index < this.rows.length) {
var u = units >= 0 && units <= 3 ? units : 0; var u = units >= 0 && units <= 3 ? units : 0;
var h = isHeightReal ? this.rows[index].heightReal : this.rows[index].height; var h = isHeightReal ? this.rows[index].heightReal : this.rows[index].height;
return h * asc_getcvt(1/*pt*/, u, this._getPPIY()); return h * asc_getcvt(1/*pt*/, u, this._getPPIY());
} }
return null; return null;
}, };
getSelectedColumnIndex: function () { WorksheetView.prototype.getSelectedColumnIndex = function () {
return this.activeRange.startCol; return this.activeRange.startCol;
}, };
getSelectedRowIndex: function () { WorksheetView.prototype.getSelectedRowIndex = function () {
return this.activeRange.startRow; return this.activeRange.startRow;
}, };
getSelectedRange: function () { WorksheetView.prototype.getSelectedRange = function () {
return this._getRange(this.activeRange.c1, this.activeRange.r1, this.activeRange.c2, this.activeRange.r2); return this._getRange(this.activeRange.c1, this.activeRange.r1, this.activeRange.c2, this.activeRange.r2);
}, };
resize: function () { WorksheetView.prototype.resize = function () {
this._initCellsArea(true); this._initCellsArea(true);
this._normalizeViewRange(); this._normalizeViewRange();
this._cleanCellsTextMetricsCache(); this._cleanCellsTextMetricsCache();
this._prepareCellTextMetricsCache(this.visibleRange); this._prepareCellTextMetricsCache(this.visibleRange);
return this; return this;
}, };
getZoom: function () { WorksheetView.prototype.getZoom = function () {
return this.drawingCtx.getZoom(); return this.drawingCtx.getZoom();
}, };
changeZoom: function (isUpdate) { WorksheetView.prototype.changeZoom = function (isUpdate) {
if (isUpdate) { if (isUpdate) {
this.cleanSelection(); this.cleanSelection();
this._initConstValues(); this._initConstValues();
...@@ -544,18 +538,18 @@ ...@@ -544,18 +538,18 @@
this.updateZoom = true; this.updateZoom = true;
} }
return this; return this;
}, };
getCellTextMetrics: function (col, row) { WorksheetView.prototype.getCellTextMetrics = function (col, row) {
var ct = this._getCellTextCache(col, row); var ct = this._getCellTextCache(col, row);
return ct ? $.extend({}, ct.metrics) : undefined; return ct ? $.extend({}, ct.metrics) : undefined;
}, };
getSheetViewSettings: function () { WorksheetView.prototype.getSheetViewSettings = function () {
return this.model.getSheetViewSettings(); return this.model.getSheetViewSettings();
}, };
getFrozenPaneOffset: function (noX, noY) { WorksheetView.prototype.getFrozenPaneOffset = function (noX, noY) {
var offsetX = 0, offsetY = 0, var offsetX = 0, offsetY = 0,
c = this.cols, r = this.rows; c = this.cols, r = this.rows;
if (this.topLeftFrozenCell) { if (this.topLeftFrozenCell) {
...@@ -569,11 +563,11 @@ ...@@ -569,11 +563,11 @@
} }
} }
return {offsetX: offsetX, offsetY: offsetY}; return {offsetX: offsetX, offsetY: offsetY};
}, };
// mouseX - это разница стартовых координат от мыши при нажатии и границы // mouseX - это разница стартовых координат от мыши при нажатии и границы
changeColumnWidth: function (col, x2, mouseX) { WorksheetView.prototype.changeColumnWidth = function (col, x2, mouseX) {
var t = this; var t = this;
x2 *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIX() ); x2 *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIX() );
...@@ -599,10 +593,10 @@ ...@@ -599,10 +593,10 @@
t._updateVisibleColsCount(); t._updateVisibleColsCount();
}; };
return this._isLockedAll (onChangeWidthCallback); return this._isLockedAll (onChangeWidthCallback);
}, };
// mouseY - это разница стартовых координат от мыши при нажатии и границы // mouseY - это разница стартовых координат от мыши при нажатии и границы
changeRowHeight: function (row, y2, mouseY) { WorksheetView.prototype.changeRowHeight = function (row, y2, mouseY) {
var t = this; var t = this;
y2 *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIY() ); y2 *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIY() );
...@@ -625,11 +619,11 @@ ...@@ -625,11 +619,11 @@
t._updateVisibleRowsCount(); t._updateVisibleRowsCount();
}; };
return this._isLockedAll (onChangeHeightCallback); return this._isLockedAll (onChangeHeightCallback);
}, };
// Проверяет, есть ли числовые значения в диапазоне // Проверяет, есть ли числовые значения в диапазоне
_hasNumberValueInActiveRange: function() { WorksheetView.prototype._hasNumberValueInActiveRange = function () {
var cell, cellType, isNumberFormat; var cell, cellType, isNumberFormat;
var result = null; var result = null;
if (this._rangeIsSingleCell(this.activeRange)) { if (this._rangeIsSingleCell(this.activeRange)) {
...@@ -670,10 +664,10 @@ ...@@ -670,10 +664,10 @@
result.arrRows = result.arrRows.sort(cmpNum); result.arrRows = result.arrRows.sort(cmpNum);
} }
return result; return result;
}, };
// Автодополняет формулу диапазоном, если это возможно // Автодополняет формулу диапазоном, если это возможно
autoCompletFormula: function (functionName) { WorksheetView.prototype.autoCompletFormula = function (functionName) {
var t = this; var t = this;
this.activeRange.normalize(); this.activeRange.normalize();
var ar = this.activeRange; var ar = this.activeRange;
...@@ -967,17 +961,17 @@ ...@@ -967,17 +961,17 @@
result.text = this._getCellTitle(result.c1, result.r1) + ":" + this._getCellTitle(result.c2, result.r2); result.text = this._getCellTitle(result.c1, result.r1) + ":" + this._getCellTitle(result.c2, result.r2);
return result; return result;
} }
}, };
// ToDo переделать на полную отрисовку на нашем контексте // ToDo переделать на полную отрисовку на нашем контексте
getDrawingContextCharts: function () { WorksheetView.prototype.getDrawingContextCharts = function () {
return this.handlers.trigger("getDCForCharts"); return this.handlers.trigger("getDCForCharts");
}, };
// ----- Initialization ----- // ----- Initialization -----
_init: function () { WorksheetView.prototype._init = function () {
this._initConstValues(); this._initConstValues();
this._initWorksheetDefaultWidth(); this._initWorksheetDefaultWidth();
this._initPane(); this._initPane();
...@@ -989,9 +983,9 @@ ...@@ -989,9 +983,9 @@
// initializing is completed // initializing is completed
this.handlers.trigger("initialized"); this.handlers.trigger("initialized");
}, };
_initConditionalFormatting: function () { WorksheetView.prototype._initConditionalFormatting = function () {
var oGradient = null; var oGradient = null;
var aCFs = this.model.aConditionalFormatting; var aCFs = this.model.aConditionalFormatting;
var aRules, oRule; var aRules, oRule;
...@@ -1055,9 +1049,9 @@ ...@@ -1055,9 +1049,9 @@
} }
} }
} }
}, };
_prepareComments: function () { WorksheetView.prototype._prepareComments = function () {
// Теперь получение всех комментариев через asc_getWorkbookComments // Теперь получение всех комментариев через asc_getWorkbookComments
var commentList = []; var commentList = [];
for (var i = 0; i < this.model.aComments.length; i++) { for (var i = 0; i < this.model.aComments.length; i++) {
...@@ -1067,14 +1061,14 @@ ...@@ -1067,14 +1061,14 @@
} }
if ( commentList.length ) if ( commentList.length )
this.model.workbook.handlers.trigger("asc_onAddComments", commentList); this.model.workbook.handlers.trigger("asc_onAddComments", commentList);
}, };
_prepareDrawingObjects: function () { WorksheetView.prototype._prepareDrawingObjects = function () {
this.objectRender = new DrawingObjects(); this.objectRender = new DrawingObjects();
this.objectRender.init(this); this.objectRender.init(this);
}, };
_initWorksheetDefaultWidth: function () { WorksheetView.prototype._initWorksheetDefaultWidth = function () {
this.nBaseColWidth = this.model.nBaseColWidth || this.nBaseColWidth; this.nBaseColWidth = this.model.nBaseColWidth || this.nBaseColWidth;
// Теперь рассчитываем число px // Теперь рассчитываем число px
var defaultColWidthChars = this._charCountToModelColWidth(this.nBaseColWidth); var defaultColWidthChars = this._charCountToModelColWidth(this.nBaseColWidth);
...@@ -1097,9 +1091,9 @@ ...@@ -1097,9 +1091,9 @@
var sr = this.stringRender; var sr = this.stringRender;
var tm = this._roundTextMetrics(sr.measureString("A")); var tm = this._roundTextMetrics(sr.measureString("A"));
this.headersHeightByFont = tm.height; this.headersHeightByFont = tm.height;
}, };
_initConstValues: function () { WorksheetView.prototype._initConstValues = function () {
var ppiX = this._getPPIX(); var ppiX = this._getPPIX();
var ppiY = this._getPPIY(); var ppiY = this._getPPIY();
this.width_1px = asc_calcnpt(0, ppiX, 1/*px*/); this.width_1px = asc_calcnpt(0, ppiX, 1/*px*/);
...@@ -1112,9 +1106,9 @@ ...@@ -1112,9 +1106,9 @@
this.height_2px = asc_calcnpt(0, ppiY, 2/*px*/); this.height_2px = asc_calcnpt(0, ppiY, 2/*px*/);
this.height_3px = asc_calcnpt(0, ppiY, 3/*px*/); this.height_3px = asc_calcnpt(0, ppiY, 3/*px*/);
this.height_4px = asc_calcnpt(0, ppiY, 4/*px*/); this.height_4px = asc_calcnpt(0, ppiY, 4/*px*/);
}, };
_initCellsArea: function (fullRecalc) { WorksheetView.prototype._initCellsArea = function (fullRecalc) {
// calculate rows heights and visible rows // calculate rows heights and visible rows
this._calcHeaderRowHeight(); this._calcHeaderRowHeight();
this._calcRowHeights(fullRecalc ? 1 : 0); this._calcRowHeights(fullRecalc ? 1 : 0);
...@@ -1128,9 +1122,9 @@ ...@@ -1128,9 +1122,9 @@
this.visibleRange.c2 = 0; this.visibleRange.c2 = 0;
this._calcVisibleColumns(); this._calcVisibleColumns();
this._updateVisibleColsCount(/*skipScrolReinit*/true); this._updateVisibleColsCount(/*skipScrolReinit*/true);
}, };
_initPane: function () { WorksheetView.prototype._initPane = function () {
var pane = this.model.sheetViews[0].pane; var pane = this.model.sheetViews[0].pane;
if (null !== pane) { if (null !== pane) {
// ToDo Обрабатываем пока только frozen и frozenSplit // ToDo Обрабатываем пока только frozen и frozenSplit
...@@ -1144,7 +1138,7 @@ ...@@ -1144,7 +1138,7 @@
} }
} }
} }
}, };
/** /**
* Вычисляет ширину столбца для заданного количества символов * Вычисляет ширину столбца для заданного количества символов
...@@ -1152,11 +1146,11 @@ ...@@ -1152,11 +1146,11 @@
* @param {Boolean} displayWidth При расчете использовать целое число пикселов * @param {Boolean} displayWidth При расчете использовать целое число пикселов
* @returns {Number} Ширина столбца в символах * @returns {Number} Ширина столбца в символах
*/ */
_charCountToModelColWidth: function (count, displayWidth) { WorksheetView.prototype._charCountToModelColWidth = function (count, displayWidth) {
if (count <= 0) { return 0; } if (count <= 0) { return 0; }
var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth; var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth;
return asc_floor((count * maxw + 5) / maxw * 256) / 256; // 5 - Это padding + border return asc_floor((count * maxw + 5) / maxw * 256) / 256; // 5 - Это padding + border
}, };
/** /**
* Вычисляет ширину столбца в пунктах * Вычисляет ширину столбца в пунктах
...@@ -1164,28 +1158,28 @@ ...@@ -1164,28 +1158,28 @@
* @param {Boolean} displayWidth При расчете использовать целое число пикселов * @param {Boolean} displayWidth При расчете использовать целое число пикселов
* @returns {Number} Ширина столбца в пунктах (pt) * @returns {Number} Ширина столбца в пунктах (pt)
*/ */
_modelColWidthToColWidth: function (mcw, displayWidth) { WorksheetView.prototype._modelColWidthToColWidth = function (mcw, displayWidth) {
var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth; var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth;
var px = asc_floor( (( 256 * mcw + asc_floor(128 / maxw) ) / 256) * maxw ); var px = asc_floor( (( 256 * mcw + asc_floor(128 / maxw) ) / 256) * maxw );
return px * asc_getcvt( 0/*px*/, 1/*pt*/, 96 ); return px * asc_getcvt( 0/*px*/, 1/*pt*/, 96 );
}, };
/** /**
* Вычисляет количество символов по ширине столбца * Вычисляет количество символов по ширине столбца
* @param {Number} w Ширина столбца в пунктах * @param {Number} w Ширина столбца в пунктах
* @returns {Number} Количество символов * @returns {Number} Количество символов
*/ */
_colWidthToCharCount: function (w) { WorksheetView.prototype._colWidthToCharCount = function (w) {
var px = w * asc_getcvt( 1/*pt*/, 0/*px*/, 96 ); var px = w * asc_getcvt( 1/*pt*/, 0/*px*/, 96 );
return px <= 5 ? 0 : asc_floor( (px - 5) / asc_round(this.maxDigitWidth) * 100 + 0.5 ) / 100; return px <= 5 ? 0 : asc_floor( (px - 5) / asc_round(this.maxDigitWidth) * 100 + 0.5 ) / 100;
}, };
/** /**
* Вычисляет ширину столбца для отрисовки * Вычисляет ширину столбца для отрисовки
* @param {Number} w Ширина столбца в символах * @param {Number} w Ширина столбца в символах
* @returns {Number} Ширина столбца в пунктах (pt) * @returns {Number} Ширина столбца в пунктах (pt)
*/ */
_calcColWidth: function (w) { WorksheetView.prototype._calcColWidth = function (w) {
var t = this; var t = this;
var res = {}; var res = {};
var useDefault = w === undefined || w === null || w === -1; var useDefault = w === undefined || w === null || w === -1;
...@@ -1194,19 +1188,19 @@ ...@@ -1194,19 +1188,19 @@
res.innerWidth = Math.max(res.width - this.width_padding * 2 - this.width_1px, 0); res.innerWidth = Math.max(res.width - this.width_padding * 2 - this.width_1px, 0);
res.charCount = t._colWidthToCharCount(res.width); res.charCount = t._colWidthToCharCount(res.width);
return res; return res;
}, };
/** /**
* Вычисляет Descender строки * Вычисляет Descender строки
* @param {Number} fontSize * @param {Number} fontSize
* @returns {Number} * @returns {Number}
*/ */
_calcRowDescender: function (fontSize) { WorksheetView.prototype._calcRowDescender = function (fontSize) {
return asc_calcnpt(fontSize * (this.vspRatio - 1), this._getPPIY()); return asc_calcnpt(fontSize * (this.vspRatio - 1), this._getPPIY());
}, };
/** Вычисляет ширину колонки заголовков (в pt) */ /** Вычисляет ширину колонки заголовков (в pt) */
_calcHeaderColumnWidth: function () { WorksheetView.prototype._calcHeaderColumnWidth = function () {
if (false === this.model.sheetViews[0].asc_getShowRowColHeaders()) if (false === this.model.sheetViews[0].asc_getShowRowColHeaders())
this.headersWidth = 0; this.headersWidth = 0;
else { else {
...@@ -1220,10 +1214,10 @@ ...@@ -1220,10 +1214,10 @@
//this.headersWidth = asc_calcnpt(w, this._getPPIX()); //this.headersWidth = asc_calcnpt(w, this._getPPIX());
this.cellsLeft = this.headersLeft + this.headersWidth; this.cellsLeft = this.headersLeft + this.headersWidth;
}, };
/** Вычисляет высоту строки заголовков (в pt) */ /** Вычисляет высоту строки заголовков (в pt) */
_calcHeaderRowHeight: function () { WorksheetView.prototype._calcHeaderRowHeight = function () {
if (false === this.model.sheetViews[0].asc_getShowRowColHeaders()) if (false === this.model.sheetViews[0].asc_getShowRowColHeaders())
this.headersHeight = 0; this.headersHeight = 0;
else else
...@@ -1232,13 +1226,13 @@ ...@@ -1232,13 +1226,13 @@
//this.headersHeight = asc_calcnpt( this.settings.header.fontSize * this.vspRatio, this._getPPIY() ); //this.headersHeight = asc_calcnpt( this.settings.header.fontSize * this.vspRatio, this._getPPIY() );
this.cellsTop = this.headersTop + this.headersHeight; this.cellsTop = this.headersTop + this.headersHeight;
}, };
/** /**
* Вычисляет ширину и позицию колонок (в pt) * Вычисляет ширину и позицию колонок (в pt)
* @param {Number} fullRecalc 0 - без пересчета; 1 - пересчитываем все; 2 - пересчитываем новые строки * @param {Number} fullRecalc 0 - без пересчета; 1 - пересчитываем все; 2 - пересчитываем новые строки
*/ */
_calcColumnWidths: function (fullRecalc) { WorksheetView.prototype._calcColumnWidths = function (fullRecalc) {
var x = this.cellsLeft; var x = this.cellsLeft;
var visibleW = this.drawingCtx.getWidth(); var visibleW = this.drawingCtx.getWidth();
var obr = this.objectRender ? this.objectRender.getDrawingAreaMetrics() : {maxCol: 0, maxRow: 0}; var obr = this.objectRender ? this.objectRender.getDrawingAreaMetrics() : {maxCol: 0, maxRow: 0};
...@@ -1275,13 +1269,13 @@ ...@@ -1275,13 +1269,13 @@
this.cols[i].left = x; this.cols[i].left = x;
x += this.cols[i].width; x += this.cols[i].width;
} }
}, };
/** /**
* Вычисляет высоту и позицию строк (в pt) * Вычисляет высоту и позицию строк (в pt)
* @param {Number} fullRecalc 0 - без пересчета; 1 - пересчитываем все; 2 - пересчитываем новые строки * @param {Number} fullRecalc 0 - без пересчета; 1 - пересчитываем все; 2 - пересчитываем новые строки
*/ */
_calcRowHeights: function (fullRecalc) { WorksheetView.prototype._calcRowHeights = function (fullRecalc) {
var y = this.cellsTop; var y = this.cellsTop;
var visibleH = this.drawingCtx.getHeight(); var visibleH = this.drawingCtx.getHeight();
var obr = this.objectRender ? this.objectRender.getDrawingAreaMetrics() : {maxCol: 0, maxRow: 0}; var obr = this.objectRender ? this.objectRender.getDrawingAreaMetrics() : {maxCol: 0, maxRow: 0};
...@@ -1324,10 +1318,10 @@ ...@@ -1324,10 +1318,10 @@
}; };
y += this.rows[i].height; y += this.rows[i].height;
} }
}, };
/** Вычисляет диапазон индексов видимых колонок */ /** Вычисляет диапазон индексов видимых колонок */
_calcVisibleColumns: function () { WorksheetView.prototype._calcVisibleColumns = function () {
var l = this.cols.length; var l = this.cols.length;
var w = this.drawingCtx.getWidth(); var w = this.drawingCtx.getWidth();
var sumW = this.topLeftFrozenCell ? this.cols[this.topLeftFrozenCell.getCol0()].left : this.cellsLeft; var sumW = this.topLeftFrozenCell ? this.cols[this.topLeftFrozenCell.getCol0()].left : this.cellsLeft;
...@@ -1336,10 +1330,10 @@ ...@@ -1336,10 +1330,10 @@
f = true; f = true;
} }
this.visibleRange.c2 = i - (f ? 1 : 0); this.visibleRange.c2 = i - (f ? 1 : 0);
}, };
/** Вычисляет диапазон индексов видимых строк */ /** Вычисляет диапазон индексов видимых строк */
_calcVisibleRows: function () { WorksheetView.prototype._calcVisibleRows = function () {
var l = this.rows.length; var l = this.rows.length;
var h = this.drawingCtx.getHeight(); var h = this.drawingCtx.getHeight();
var sumH = this.topLeftFrozenCell ? this.rows[this.topLeftFrozenCell.getRow0()].top : this.cellsTop; var sumH = this.topLeftFrozenCell ? this.rows[this.topLeftFrozenCell.getRow0()].top : this.cellsTop;
...@@ -1348,31 +1342,31 @@ ...@@ -1348,31 +1342,31 @@
f = true; f = true;
} }
this.visibleRange.r2 = i - (f ? 1 : 0); this.visibleRange.r2 = i - (f ? 1 : 0);
}, };
/** Обновляет позицию колонок (в pt) */ /** Обновляет позицию колонок (в pt) */
_updateColumnPositions: function () { WorksheetView.prototype._updateColumnPositions = function () {
var x = this.cellsLeft; var x = this.cellsLeft;
for (var l = this.cols.length, i = 0; i < l; ++i) { for (var l = this.cols.length, i = 0; i < l; ++i) {
this.cols[i].left = x; this.cols[i].left = x;
x += this.cols[i].width; x += this.cols[i].width;
} }
}, };
/** Обновляет позицию строк (в pt) */ /** Обновляет позицию строк (в pt) */
_updateRowPositions: function () { WorksheetView.prototype._updateRowPositions = function () {
var y = this.cellsTop; var y = this.cellsTop;
for (var l = this.rows.length, i = 0; i < l; ++i) { for (var l = this.rows.length, i = 0; i < l; ++i) {
this.rows[i].top = y; this.rows[i].top = y;
y += this.rows[i].height; y += this.rows[i].height;
} }
}, };
/** /**
* Добавляет колонки, пока общая ширина листа не превысит rightSide * Добавляет колонки, пока общая ширина листа не превысит rightSide
* @param {Number} rightSide Правая граница * @param {Number} rightSide Правая граница
*/ */
_appendColumns: function (rightSide) { WorksheetView.prototype._appendColumns = function (rightSide) {
var i = this.cols.length; var i = this.cols.length;
var lc = this.cols[i - 1]; var lc = this.cols[i - 1];
var done = false; var done = false;
...@@ -1387,10 +1381,10 @@ ...@@ -1387,10 +1381,10 @@
x += this.cols[i].width; x += this.cols[i].width;
this.isChanged = true; this.isChanged = true;
} }
}, };
/** Устанаваливает видимый диапазон ячеек максимально возможным */ /** Устанаваливает видимый диапазон ячеек максимально возможным */
_normalizeViewRange: function () { WorksheetView.prototype._normalizeViewRange = function () {
var t = this; var t = this;
var vr = t.visibleRange; var vr = t.visibleRange;
var w = t.drawingCtx.getWidth() - t.cellsLeft; var w = t.drawingCtx.getWidth() - t.cellsLeft;
...@@ -1424,9 +1418,9 @@ ...@@ -1424,9 +1418,9 @@
if (vr.r1 >= vr.r2) {vr.r1 = vr.r2 - 1;} if (vr.r1 >= vr.r2) {vr.r1 = vr.r2 - 1;}
if (vr.r1 < 0) {vr.r1 = 0;} if (vr.r1 < 0) {vr.r1 = 0;}
} }
}, };
_shiftVisibleRange: function () { WorksheetView.prototype._shiftVisibleRange = function () {
var t = this; var t = this;
var vr = t.visibleRange; var vr = t.visibleRange;
var arn = t.activeRange.clone(true); var arn = t.activeRange.clone(true);
...@@ -1474,10 +1468,10 @@ ...@@ -1474,10 +1468,10 @@
} }
break; break;
} while (1); } while (1);
}, };
// ----- Drawing for print ----- // ----- Drawing for print -----
calcPagesPrint: function (pageOptions, printOnlySelection, indexWorksheet, layoutPageType) { WorksheetView.prototype.calcPagesPrint = function (pageOptions, printOnlySelection, indexWorksheet, layoutPageType) {
var range; var range;
var maxCols = this.model.getColsCount(); var maxCols = this.model.getColsCount();
var maxRows = this.model.getRowsCount(); var maxRows = this.model.getRowsCount();
...@@ -1711,8 +1705,8 @@ ...@@ -1711,8 +1705,8 @@
} }
return arrResult; return arrResult;
}, };
drawForPrint: function (drawingCtx, printPagesData) { WorksheetView.prototype.drawForPrint = function (drawingCtx, printPagesData) {
var isAppBridge = (undefined != window['appBridge']); var isAppBridge = (undefined != window['appBridge']);
if (null === printPagesData) { if (null === printPagesData) {
...@@ -1777,11 +1771,11 @@ ...@@ -1777,11 +1771,11 @@
drawingCtx.RemoveClipRect(); drawingCtx.RemoveClipRect();
drawingCtx.EndPage(); drawingCtx.EndPage();
} }
}, };
// ----- Drawing ----- // ----- Drawing -----
draw: function (lockDraw) { WorksheetView.prototype.draw = function (lockDraw) {
if( lockDraw ) return this; if( lockDraw ) return this;
this._clean(); this._clean();
this._drawCorner(); this._drawCorner();
...@@ -1801,18 +1795,18 @@ ...@@ -1801,18 +1795,18 @@
} }
return this; return this;
}, };
_clean: function () { WorksheetView.prototype._clean = function () {
this.drawingCtx this.drawingCtx
.setFillStyle(this.settings.cells.defaultState.background) .setFillStyle(this.settings.cells.defaultState.background)
.fillRect(0, 0, this.drawingCtx.getWidth(), this.drawingCtx.getHeight()); .fillRect(0, 0, this.drawingCtx.getWidth(), this.drawingCtx.getHeight());
if (this.overlayCtx) { if (this.overlayCtx) {
this.overlayCtx.clear(); this.overlayCtx.clear();
} }
}, };
drawHighlightedHeaders: function (col, row) { WorksheetView.prototype.drawHighlightedHeaders = function (col, row) {
this._activateOverlayCtx(); this._activateOverlayCtx();
if (col >= 0 && col !== this.highlightedCol) { if (col >= 0 && col !== this.highlightedCol) {
this._doCleanHighlightedHeaders(); this._doCleanHighlightedHeaders();
...@@ -1825,24 +1819,24 @@ ...@@ -1825,24 +1819,24 @@
} }
this._deactivateOverlayCtx(); this._deactivateOverlayCtx();
return this; return this;
}, };
cleanHighlightedHeaders: function () { WorksheetView.prototype.cleanHighlightedHeaders = function () {
this._activateOverlayCtx(); this._activateOverlayCtx();
this._doCleanHighlightedHeaders(); this._doCleanHighlightedHeaders();
this._deactivateOverlayCtx(); this._deactivateOverlayCtx();
return this; return this;
}, };
_activateOverlayCtx: function () { WorksheetView.prototype._activateOverlayCtx = function () {
this.drawingCtx = this.buffers.overlay; this.drawingCtx = this.buffers.overlay;
}, };
_deactivateOverlayCtx: function () { WorksheetView.prototype._deactivateOverlayCtx = function () {
this.drawingCtx = this.buffers.main; this.drawingCtx = this.buffers.main;
}, };
_doCleanHighlightedHeaders: function () { WorksheetView.prototype._doCleanHighlightedHeaders = function () {
var hlc = this.highlightedCol, var hlc = this.highlightedCol,
hlr = this.highlightedRow, hlr = this.highlightedRow,
arn = this.activeRange.clone(true); arn = this.activeRange.clone(true);
...@@ -1873,9 +1867,9 @@ ...@@ -1873,9 +1867,9 @@
} }
this.highlightedRow = -1; this.highlightedRow = -1;
} }
}, };
_drawActiveHeaders: function () { WorksheetView.prototype._drawActiveHeaders = function () {
var arn = this.activeRange.clone(true), var arn = this.activeRange.clone(true),
vr = this.visibleRange, vr = this.visibleRange,
c1 = Math.max(vr.c1, arn.c1), c1 = Math.max(vr.c1, arn.c1),
...@@ -1900,9 +1894,9 @@ ...@@ -1900,9 +1894,9 @@
} }
} }
this._deactivateOverlayCtx(); this._deactivateOverlayCtx();
}, };
_drawCorner: function () { WorksheetView.prototype._drawCorner = function () {
if (false === this.model.sheetViews[0].asc_getShowRowColHeaders()) if (false === this.model.sheetViews[0].asc_getShowRowColHeaders())
return; return;
var x2 = this.headersLeft + this.headersWidth; var x2 = this.headersLeft + this.headersWidth;
...@@ -1922,10 +1916,10 @@ ...@@ -1922,10 +1916,10 @@
.lineTo(x2 - dx, y1 + dy) .lineTo(x2 - dx, y1 + dy)
.setFillStyle(this.settings.header.cornerColor) .setFillStyle(this.settings.header.cornerColor)
.fill(); .fill();
}, };
/** Рисует заголовки видимых колонок */ /** Рисует заголовки видимых колонок */
_drawColumnHeaders: function (drawingCtx, start, end, style, offsetXForDraw, offsetYForDraw) { WorksheetView.prototype._drawColumnHeaders = function (drawingCtx, start, end, style, offsetXForDraw, offsetYForDraw) {
if (undefined === drawingCtx && false === this.model.sheetViews[0].asc_getShowRowColHeaders()) if (undefined === drawingCtx && false === this.model.sheetViews[0].asc_getShowRowColHeaders())
return; return;
var cells = this.settings.cells; var cells = this.settings.cells;
...@@ -1952,10 +1946,10 @@ ...@@ -1952,10 +1946,10 @@
this._drawHeader(drawingCtx, c[i].left - offsetX, offsetY, this._drawHeader(drawingCtx, c[i].left - offsetX, offsetY,
c[i].width, this.headersHeight, style, true, i); c[i].width, this.headersHeight, style, true, i);
} }
}, };
/** Рисует заголовки видимых строк */ /** Рисует заголовки видимых строк */
_drawRowHeaders: function (drawingCtx, start, end, style, offsetXForDraw, offsetYForDraw) { WorksheetView.prototype._drawRowHeaders = function (drawingCtx, start, end, style, offsetXForDraw, offsetYForDraw) {
if (undefined === drawingCtx && false === this.model.sheetViews[0].asc_getShowRowColHeaders()) if (undefined === drawingCtx && false === this.model.sheetViews[0].asc_getShowRowColHeaders())
return; return;
var cells = this.settings.cells; var cells = this.settings.cells;
...@@ -1982,7 +1976,7 @@ ...@@ -1982,7 +1976,7 @@
this._drawHeader(drawingCtx, offsetX, r[i].top - offsetY, this._drawHeader(drawingCtx, offsetX, r[i].top - offsetY,
this.headersWidth, r[i].height, style, false, i); this.headersWidth, r[i].height, style, false, i);
} }
}, };
/** /**
* Рисует заголовок, принимает координаты и размеры в pt * Рисует заголовок, принимает координаты и размеры в pt
...@@ -1995,7 +1989,7 @@ ...@@ -1995,7 +1989,7 @@
* @param {Boolean} isColHeader Тип заголовка: true - колонка, false - строка * @param {Boolean} isColHeader Тип заголовка: true - колонка, false - строка
* @param {Number} index Индекс столбца/строки или -1 * @param {Number} index Индекс столбца/строки или -1
*/ */
_drawHeader: function (drawingCtx, x, y, w, h, style, isColHeader, index) { WorksheetView.prototype._drawHeader = function (drawingCtx, x, y, w, h, style, isColHeader, index) {
// Для отрисовки невидимого столбца/строки // Для отрисовки невидимого столбца/строки
var isZeroHeader = false; var isZeroHeader = false;
if (-1 !== index) { if (-1 !== index) {
...@@ -2089,9 +2083,9 @@ ...@@ -2089,9 +2083,9 @@
.fillText(text, textX, textY + tm.baseline, undefined, sr.charWidths) .fillText(text, textX, textY + tm.baseline, undefined, sr.charWidths)
.restore(); .restore();
} }
}, };
_cleanColumnHeaders: function (colStart, colEnd) { WorksheetView.prototype._cleanColumnHeaders = function (colStart, colEnd) {
var offsetX = this.cols[this.visibleRange.c1].left - this.cellsLeft; var offsetX = this.cols[this.visibleRange.c1].left - this.cellsLeft;
var i, cFrozen = 0; var i, cFrozen = 0;
if (this.topLeftFrozenCell) { if (this.topLeftFrozenCell) {
...@@ -2118,9 +2112,9 @@ ...@@ -2118,9 +2112,9 @@
this.cols[i].width + this.width_1px, this.headersHeight); this.cols[i].width + this.width_1px, this.headersHeight);
} }
} }
}, };
_cleanRowHeades: function (rowStart, rowEnd) { WorksheetView.prototype._cleanRowHeades = function (rowStart, rowEnd) {
var offsetY = this.rows[this.visibleRange.r1].top - this.cellsTop; var offsetY = this.rows[this.visibleRange.r1].top - this.cellsTop;
var i, rFrozen = 0; var i, rFrozen = 0;
if (this.topLeftFrozenCell) { if (this.topLeftFrozenCell) {
...@@ -2151,16 +2145,16 @@ ...@@ -2151,16 +2145,16 @@
this.headersWidth, this.rows[i].height + this.height_1px); this.headersWidth, this.rows[i].height + this.height_1px);
} }
} }
}, };
_cleanColumnHeadersRect: function () { WorksheetView.prototype._cleanColumnHeadersRect = function () {
this.drawingCtx.clearRect( this.drawingCtx.clearRect(
this.cellsLeft, this.headersTop, this.cellsLeft, this.headersTop,
this.drawingCtx.getWidth() - this.cellsLeft, this.headersHeight); this.drawingCtx.getWidth() - this.cellsLeft, this.headersHeight);
}, };
/** Рисует сетку таблицы */ /** Рисует сетку таблицы */
_drawGrid: function (drawingCtx, range, leftFieldInPt, topFieldInPt, width, height) { WorksheetView.prototype._drawGrid = function (drawingCtx, range, leftFieldInPt, topFieldInPt, width, height) {
// Возможно сетку не нужно рисовать (при печати свои проверки) // Возможно сетку не нужно рисовать (при печати свои проверки)
if (undefined === drawingCtx && false === this.model.sheetViews[0].asc_getShowGridLines()) if (undefined === drawingCtx && false === this.model.sheetViews[0].asc_getShowGridLines())
return; return;
...@@ -2209,10 +2203,10 @@ ...@@ -2209,10 +2203,10 @@
} }
ctx.stroke(); ctx.stroke();
}, };
/** Рисует ячейки таблицы */ /** Рисует ячейки таблицы */
_drawCells: function (drawingCtx, range, offsetXForDraw, offsetYForDraw) { WorksheetView.prototype._drawCells = function (drawingCtx, range, offsetXForDraw, offsetYForDraw) {
if (range === undefined) { if (range === undefined) {
range = this.visibleRange; range = this.visibleRange;
} }
...@@ -2258,10 +2252,10 @@ ...@@ -2258,10 +2252,10 @@
// restore canvas' original clipping range // restore canvas' original clipping range
ctx.restore(); ctx.restore();
} }
}, };
/** Рисует фон ячеек в строке */ /** Рисует фон ячеек в строке */
_drawRowBG: function (drawingCtx, row, colStart, colEnd, offsetX, offsetY, oMergedCell) { WorksheetView.prototype._drawRowBG = function (drawingCtx, row, colStart, colEnd, offsetX, offsetY, oMergedCell) {
if (this.rows[row].height < this.height_1px && null === oMergedCell) {return {};} if (this.rows[row].height < this.height_1px && null === oMergedCell) {return {};}
var ctx = (undefined === drawingCtx) ? this.drawingCtx : drawingCtx; var ctx = (undefined === drawingCtx) ? this.drawingCtx : drawingCtx;
...@@ -2331,10 +2325,10 @@ ...@@ -2331,10 +2325,10 @@
.fillRect(x - offsetX, y - offsetY, w, h); .fillRect(x - offsetX, y - offsetY, w, h);
} }
return mergedCells; return mergedCells;
}, };
/** Рисует текст ячеек в строке */ /** Рисует текст ячеек в строке */
_drawRowText: function (drawingCtx, row, colStart, colEnd, offsetX, offsetY) { WorksheetView.prototype._drawRowText = function (drawingCtx, row, colStart, colEnd, offsetX, offsetY) {
if (this.rows[row].height < this.height_1px) {return {};} if (this.rows[row].height < this.height_1px) {return {};}
var dependentCells = {}, mergedCells = {}, i = undefined, mc; var dependentCells = {}, mergedCells = {}, i = undefined, mc;
...@@ -2360,10 +2354,10 @@ ...@@ -2360,10 +2354,10 @@
this._drawCellText(drawingCtx, col, row, arr[0], arr[j], offsetX, offsetY, false); this._drawCellText(drawingCtx, col, row, arr[0], arr[j], offsetX, offsetY, false);
} }
return mergedCells; return mergedCells;
}, };
/** Рисует текст ячейки */ /** Рисует текст ячейки */
_drawCellText: function (drawingCtx, col, row, colStart, colEnd, offsetX, offsetY, drawMergedCells) { WorksheetView.prototype._drawCellText = function (drawingCtx, col, row, colStart, colEnd, offsetX, offsetY, drawMergedCells) {
var ct = this._getCellTextCache(col, row); var ct = this._getCellTextCache(col, row);
if (ct === undefined) if (ct === undefined)
return null; return null;
...@@ -2577,10 +2571,10 @@ ...@@ -2577,10 +2571,10 @@
} }
return null; return null;
}, };
/** Удаляет вертикальные границы ячейки, если текст выходит за границы и соседние ячейки пусты */ /** Удаляет вертикальные границы ячейки, если текст выходит за границы и соседние ячейки пусты */
_eraseCellRightBorder: function (drawingCtx, colBeg, colEnd, row, offsetX, offsetY) { WorksheetView.prototype._eraseCellRightBorder = function (drawingCtx, colBeg, colEnd, row, offsetX, offsetY) {
if (colBeg >= colEnd) {return;} if (colBeg >= colEnd) {return;}
var ctx = (drawingCtx) ? drawingCtx : this.drawingCtx; var ctx = (drawingCtx) ? drawingCtx : this.drawingCtx;
ctx.setFillStyle(this.settings.cells.defaultState.background); ctx.setFillStyle(this.settings.cells.defaultState.background);
...@@ -2594,10 +2588,10 @@ ...@@ -2594,10 +2588,10 @@
this.width_1px, this.width_1px,
this.rows[row].height - this.height_1px); this.rows[row].height - this.height_1px);
} }
}, };
/** Рисует рамки для ячеек */ /** Рисует рамки для ячеек */
_drawCellsBorders: function (drawingCtx, range, mergedCellsStage, leftFieldInPt, topFieldInPt) { WorksheetView.prototype._drawCellsBorders = function (drawingCtx, range, mergedCellsStage, leftFieldInPt, topFieldInPt) {
//TODO: использовать стили линий при рисовании границ //TODO: использовать стили линий при рисовании границ
if (range === undefined) { if (range === undefined) {
range = this.visibleRange; range = this.visibleRange;
...@@ -2813,10 +2807,10 @@ ...@@ -2813,10 +2807,10 @@
if (!drawingCtx) { if (!drawingCtx) {
ctx.restore(); ctx.restore();
} }
}, };
/** Рисует закрепленные области областей */ /** Рисует закрепленные области областей */
_drawFrozenPane: function () { WorksheetView.prototype._drawFrozenPane = function () {
if (this.topLeftFrozenCell) { if (this.topLeftFrozenCell) {
var row = this.topLeftFrozenCell.getRow0(); var row = this.topLeftFrozenCell.getRow0();
var col = this.topLeftFrozenCell.getCol0(); var col = this.topLeftFrozenCell.getCol0();
...@@ -2851,10 +2845,10 @@ ...@@ -2851,10 +2845,10 @@
this._drawCellsBorders(/*drawingCtx*/undefined, tmpRange, offsetX, offsetY); this._drawCellsBorders(/*drawingCtx*/undefined, tmpRange, offsetX, offsetY);
} }
} }
}, };
/** Рисует закрепление областей */ /** Рисует закрепление областей */
_drawFrozenPaneLines: function () { WorksheetView.prototype._drawFrozenPaneLines = function () {
if (this.topLeftFrozenCell) { if (this.topLeftFrozenCell) {
var ctx = this.drawingCtx; var ctx = this.drawingCtx;
var row = this.topLeftFrozenCell.getRow0(); var row = this.topLeftFrozenCell.getRow0();
...@@ -2868,9 +2862,9 @@ ...@@ -2868,9 +2862,9 @@
} }
ctx.stroke(); ctx.stroke();
} }
}, };
_drawSelectionElement: function (visibleRange, offsetX, offsetY, args) { WorksheetView.prototype._drawSelectionElement = function (visibleRange, offsetX, offsetY, args) {
var range = args[0], isDashLine = args[1], lineWidth = args[2], strokeColor = args[3], var range = args[0], isDashLine = args[1], lineWidth = args[2], strokeColor = args[3],
fillColor = args[4], isAllRange = args[5]; fillColor = args[4], isAllRange = args[5];
var ctx = this.overlayCtx, c = this.cols, r = this.rows; var ctx = this.overlayCtx, c = this.cols, r = this.rows;
...@@ -2927,9 +2921,9 @@ ...@@ -2927,9 +2921,9 @@
} }
ctx.closePath().stroke(); ctx.closePath().stroke();
}, };
/**Отрисовывает диапазон с заданными параметрами*/ /**Отрисовывает диапазон с заданными параметрами*/
_drawElements: function (thisArg, drawFunction) { WorksheetView.prototype._drawElements = function (thisArg, drawFunction) {
var cFrozen = 0, rFrozen = 0, args = Array.prototype.slice.call(arguments, 2), var cFrozen = 0, rFrozen = 0, args = Array.prototype.slice.call(arguments, 2),
c = this.cols, r = this.rows, c = this.cols, r = this.rows,
offsetX = c[this.visibleRange.c1].left - this.cellsLeft, offsetX = c[this.visibleRange.c1].left - this.cellsLeft,
...@@ -2958,13 +2952,13 @@ ...@@ -2958,13 +2952,13 @@
// Можно вместо call попользовать apply, но тогда нужно каждый раз соединять массив аргументов и 3 объекта // Можно вместо call попользовать apply, но тогда нужно каждый раз соединять массив аргументов и 3 объекта
drawFunction.call(thisArg, this.visibleRange, offsetX, offsetY, args); drawFunction.call(thisArg, this.visibleRange, offsetX, offsetY, args);
}, };
/** /**
* Рисует выделение вокруг ячеек * Рисует выделение вокруг ячеек
* @param {Asc.Range} range * @param {Asc.Range} range
*/ */
_drawSelection: function (range) { WorksheetView.prototype._drawSelection = function (range) {
if (!this.isSelectionDialogMode) { if (!this.isSelectionDialogMode) {
this._drawCollaborativeElements(/*bIsDrawObjects*/true); this._drawCollaborativeElements(/*bIsDrawObjects*/true);
this._drawSelectionRange(range); this._drawSelectionRange(range);
...@@ -2973,9 +2967,9 @@ ...@@ -2973,9 +2967,9 @@
} else { } else {
this._drawSelectionRange(range); this._drawSelectionRange(range);
} }
}, };
_drawSelectionRange: function (range, isFrozen) { WorksheetView.prototype._drawSelectionRange = function (range, isFrozen) {
isFrozen = !!isFrozen; isFrozen = !!isFrozen;
if (asc["editor"].isStartAddShape || this.objectRender.selectedGraphicObjectsExists()) { if (asc["editor"].isStartAddShape || this.objectRender.selectedGraphicObjectsExists()) {
if (this.isChartAreaEditMode) { if (this.isChartAreaEditMode) {
...@@ -3290,9 +3284,9 @@ ...@@ -3290,9 +3284,9 @@
if (!isFrozen) { if (!isFrozen) {
this._drawActiveHeaders(); this._drawActiveHeaders();
} }
}, };
_drawFormulaRanges: function(arrRanges){ WorksheetView.prototype._drawFormulaRanges = function (arrRanges){
var lineWidth = 1, isDashLine = false, var lineWidth = 1, isDashLine = false,
opt = this.settings, lengthColors = opt.formulaRangeBorderColor.length; opt = this.settings, lengthColors = opt.formulaRangeBorderColor.length;
var strokeColor, fillColor; var strokeColor, fillColor;
...@@ -3304,22 +3298,22 @@ ...@@ -3304,22 +3298,22 @@
this._drawElements(this, this._drawSelectionElement, oFormulaRange, isDashLine, lineWidth, this._drawElements(this, this._drawSelectionElement, oFormulaRange, isDashLine, lineWidth,
strokeColor, fillColor); strokeColor, fillColor);
} }
}, };
_drawSelectRange: function (oSelectRange) { WorksheetView.prototype._drawSelectRange = function (oSelectRange) {
var lineWidth = 1, isDashLine = true, strokeColor = c_oAscCoAuthoringOtherBorderColor; var lineWidth = 1, isDashLine = true, strokeColor = c_oAscCoAuthoringOtherBorderColor;
this._drawElements(this, this._drawSelectionElement, oSelectRange, isDashLine, lineWidth, strokeColor); this._drawElements(this, this._drawSelectionElement, oSelectRange, isDashLine, lineWidth, strokeColor);
}, };
_drawCollaborativeElements: function (bIsDrawObjects) { WorksheetView.prototype._drawCollaborativeElements = function (bIsDrawObjects) {
if (this.collaborativeEditing.getCollaborativeEditing()) { if (this.collaborativeEditing.getCollaborativeEditing()) {
this._drawCollaborativeElementsMeOther (c_oAscLockTypes.kLockTypeMine, bIsDrawObjects); this._drawCollaborativeElementsMeOther (c_oAscLockTypes.kLockTypeMine, bIsDrawObjects);
this._drawCollaborativeElementsMeOther (c_oAscLockTypes.kLockTypeOther, bIsDrawObjects); this._drawCollaborativeElementsMeOther (c_oAscLockTypes.kLockTypeOther, bIsDrawObjects);
this._drawCollaborativeElementsAllLock (); this._drawCollaborativeElementsAllLock ();
} }
}, };
_drawCollaborativeElementsAllLock: function () { WorksheetView.prototype._drawCollaborativeElementsAllLock = function () {
var currentSheetId = this.model.getId(); var currentSheetId = this.model.getId();
var nLockAllType = this.collaborativeEditing.isLockAllOther(currentSheetId); var nLockAllType = this.collaborativeEditing.isLockAllOther(currentSheetId);
if (c_oAscMouseMoveLockedObjectType.None !== nLockAllType) { if (c_oAscMouseMoveLockedObjectType.None !== nLockAllType) {
...@@ -3329,9 +3323,9 @@ ...@@ -3329,9 +3323,9 @@
oAllRange = asc_Range (0, 0, gc_nMaxCol0, gc_nMaxRow0); oAllRange = asc_Range (0, 0, gc_nMaxCol0, gc_nMaxRow0);
this._drawElements(this, this._drawSelectionElement, oAllRange, isDashLine, lineWidth, strokeColor, null, isAllRange); this._drawElements(this, this._drawSelectionElement, oAllRange, isDashLine, lineWidth, strokeColor, null, isAllRange);
} }
}, };
_drawCollaborativeElementsMeOther: function (type, bIsDrawObjects) { WorksheetView.prototype._drawCollaborativeElementsMeOther = function (type, bIsDrawObjects) {
var currentSheetId = this.model.getId(), var currentSheetId = this.model.getId(),
i, lineWidth = 1, isDashLine = true, strokeColor, arrayCells, oCellTmp; i, lineWidth = 1, isDashLine = true, strokeColor, arrayCells, oCellTmp;
if (c_oAscLockTypes.kLockTypeMine === type) { if (c_oAscLockTypes.kLockTypeMine === type) {
...@@ -3358,18 +3352,18 @@ ...@@ -3358,18 +3352,18 @@
oCellTmp = asc_Range (arrayCells[i].c1, arrayCells[i].r1, arrayCells[i].c2, arrayCells[i].r2); oCellTmp = asc_Range (arrayCells[i].c1, arrayCells[i].r1, arrayCells[i].c2, arrayCells[i].r2);
this._drawElements(this, this._drawSelectionElement, oCellTmp, isDashLine, lineWidth, strokeColor); this._drawElements(this, this._drawSelectionElement, oCellTmp, isDashLine, lineWidth, strokeColor);
} }
}, };
_drawGraphic: function(updatedRange, offsetX, offsetY) { WorksheetView.prototype._drawGraphic = function (updatedRange, offsetX, offsetY) {
if (updatedRange) { if (updatedRange) {
this.autoFilters.drawAutoF(updatedRange, offsetX, offsetY); this.autoFilters.drawAutoF(updatedRange, offsetX, offsetY);
this.cellCommentator.drawCommentCells(updatedRange, offsetX, offsetY); this.cellCommentator.drawCommentCells(updatedRange, offsetX, offsetY);
} else { } else {
this._drawElements(this, this._drawGraphic); this._drawElements(this, this._drawGraphic);
} }
}, };
cleanSelection: function (range, isFrozen) { WorksheetView.prototype.cleanSelection = function (range, isFrozen) {
isFrozen = !!isFrozen; isFrozen = !!isFrozen;
var ctx = this.overlayCtx; var ctx = this.overlayCtx;
var arn = this.activeRange.clone(true); var arn = this.activeRange.clone(true);
...@@ -3592,15 +3586,15 @@ ...@@ -3592,15 +3586,15 @@
.restore(); .restore();
} }
return this; return this;
}, };
updateSelection: function () { WorksheetView.prototype.updateSelection = function () {
this.cleanSelection(); this.cleanSelection();
this._drawSelection(); this._drawSelection();
}, };
// mouseX - это разница стартовых координат от мыши при нажатии и границы // mouseX - это разница стартовых координат от мыши при нажатии и границы
drawColumnGuides: function (col, x, y, mouseX) { WorksheetView.prototype.drawColumnGuides = function (col, x, y, mouseX) {
var t = this; var t = this;
x *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIX() ); x *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIX() );
...@@ -3624,10 +3618,10 @@ ...@@ -3624,10 +3618,10 @@
ctx.setFillPattern(t.ptrnLineDotted1) ctx.setFillPattern(t.ptrnLineDotted1)
.fillRect(x1, 0, this.width_1px, h) .fillRect(x1, 0, this.width_1px, h)
.fillRect(x, 0, this.width_1px, h); .fillRect(x, 0, this.width_1px, h);
}, };
// mouseY - это разница стартовых координат от мыши при нажатии и границы // mouseY - это разница стартовых координат от мыши при нажатии и границы
drawRowGuides: function (row, x, y, mouseY) { WorksheetView.prototype.drawRowGuides = function (row, x, y, mouseY) {
var t = this; var t = this;
y *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIY() ); y *= asc_getcvt( 0/*px*/, 1/*pt*/, t._getPPIY() );
...@@ -3650,12 +3644,12 @@ ...@@ -3650,12 +3644,12 @@
ctx.setFillPattern(t.ptrnLineDotted1) ctx.setFillPattern(t.ptrnLineDotted1)
.fillRect(0, y1, w, this.height_1px) .fillRect(0, y1, w, this.height_1px)
.fillRect(0, y, w, this.height_1px); .fillRect(0, y, w, this.height_1px);
}, };
// --- Cache --- // --- Cache ---
_cleanCache: function (range) { WorksheetView.prototype._cleanCache = function (range) {
var t = this, r, c, row; var t = this, r, c, row;
if (range === undefined) {range = t.activeRange.clone(true);} if (range === undefined) {range = t.activeRange.clone(true);}
...@@ -3693,13 +3687,13 @@ ...@@ -3693,13 +3687,13 @@
if (row.columns[c] && row.columns[c].borders) {delete row.columns[c].borders.t;} if (row.columns[c] && row.columns[c].borders) {delete row.columns[c].borders.t;}
} }
} }
}, };
// ----- Cell text cache ----- // ----- Cell text cache -----
/** Очищает кэш метрик текста ячеек */ /** Очищает кэш метрик текста ячеек */
_cleanCellsTextMetricsCache: function () { WorksheetView.prototype._cleanCellsTextMetricsCache = function () {
var s = this.cache.sectors = []; var s = this.cache.sectors = [];
var vr = this.visibleRange; var vr = this.visibleRange;
var h = vr.r2 + 1 - vr.r1; var h = vr.r2 + 1 - vr.r1;
...@@ -3713,13 +3707,13 @@ ...@@ -3713,13 +3707,13 @@
} }
s.push(range.clone()); s.push(range.clone());
} }
}, };
/** /**
* Обновляет общий кэш и кэширует метрики текста ячеек для указанного диапазона * Обновляет общий кэш и кэширует метрики текста ячеек для указанного диапазона
* @param {Asc.Range} range Диапазон кэширования текта * @param {Asc.Range} range Диапазон кэширования текта
*/ */
_prepareCellTextMetricsCache: function (range) { WorksheetView.prototype._prepareCellTextMetricsCache = function (range) {
var self = this; var self = this;
var s = this.cache.sectors; var s = this.cache.sectors;
var isUpdateRows = false; var isUpdateRows = false;
...@@ -3741,13 +3735,13 @@ ...@@ -3741,13 +3735,13 @@
this._updateRowPositions(); this._updateRowPositions();
this._calcVisibleRows(); this._calcVisibleRows();
} }
}, };
/** /**
* Кэширует метрики текста для диапазона ячеек * Кэширует метрики текста для диапазона ячеек
* @param {Asc.Range} range description * @param {Asc.Range} range description
*/ */
_calcCellsTextMetrics: function (range) { WorksheetView.prototype._calcCellsTextMetrics = function (range) {
if (range === undefined) { if (range === undefined) {
range = asc_Range(0, 0, this.cols.length - 1, this.rows.length - 1); range = asc_Range(0, 0, this.cols.length - 1, this.rows.length - 1);
} }
...@@ -3769,33 +3763,33 @@ ...@@ -3769,33 +3763,33 @@
} }
} }
this.isChanged = false; this.isChanged = false;
}, };
_fetchRowCache: function (row) { WorksheetView.prototype._fetchRowCache = function (row) {
var rc = this.cache.rows[row] = ( this.cache.rows[row] || new CacheElement() ); var rc = this.cache.rows[row] = ( this.cache.rows[row] || new CacheElement() );
return rc; return rc;
}, };
_fetchCellCache: function (col, row) { WorksheetView.prototype._fetchCellCache = function (col, row) {
var r = this._fetchRowCache(row), c = r.columns[col] = ( r.columns[col] || {} ); var r = this._fetchRowCache(row), c = r.columns[col] = ( r.columns[col] || {} );
return c; return c;
}, };
_fetchCellCacheText: function (col, row) { WorksheetView.prototype._fetchCellCacheText = function (col, row) {
var r = this._fetchRowCache(row), cwt = r.columnsWithText[col] = ( r.columnsWithText[col] || {} ); var r = this._fetchRowCache(row), cwt = r.columnsWithText[col] = ( r.columnsWithText[col] || {} );
return cwt; return cwt;
}, };
_getRowCache: function (row) { WorksheetView.prototype._getRowCache = function (row) {
return this.cache.rows[row]; return this.cache.rows[row];
}, };
_getCellCache: function (col, row) { WorksheetView.prototype._getCellCache = function (col, row) {
var r = this.cache.rows[row]; var r = this.cache.rows[row];
return r ? r.columns[col] : undefined; return r ? r.columns[col] : undefined;
}, };
_getCellTextCache: function (col, row, dontLookupMergedCells) { WorksheetView.prototype._getCellTextCache = function (col, row, dontLookupMergedCells) {
var r = this.cache.rows[row], c = r ? r.columns[col] : undefined; var r = this.cache.rows[row], c = r ? r.columns[col] : undefined;
if (c && c.text) { if (c && c.text) {
return c.text; return c.text;
...@@ -3805,9 +3799,9 @@ ...@@ -3805,9 +3799,9 @@
return null !== range ? this._getCellTextCache(range.c1, range.r1, true) : undefined; return null !== range ? this._getCellTextCache(range.c1, range.r1, true) : undefined;
} }
return undefined; return undefined;
}, };
_addCellTextToCache: function (col, row, canChangeColWidth) { WorksheetView.prototype._addCellTextToCache = function (col, row, canChangeColWidth) {
var self = this; var self = this;
function isFixedWidthCell(frag) { function isFixedWidthCell(frag) {
...@@ -4065,9 +4059,9 @@ ...@@ -4065,9 +4059,9 @@
} }
return mc ? mc.c2 : col; return mc ? mc.c2 : col;
}, };
_calcMaxWidth: function (col, row, mc) { WorksheetView.prototype._calcMaxWidth = function (col, row, mc) {
if (null === mc) {return this.cols[col].innerWidth;} if (null === mc) {return this.cols[col].innerWidth;}
var width = this.cols[mc.c1].innerWidth; var width = this.cols[mc.c1].innerWidth;
...@@ -4075,9 +4069,9 @@ ...@@ -4075,9 +4069,9 @@
width += this.cols[c].width; width += this.cols[c].width;
} }
return width; return width;
}, };
_calcCellTextOffset: function (col, row, textAlign, textWidth) { WorksheetView.prototype._calcCellTextOffset = function (col, row, textAlign, textWidth) {
var sideL = [0], sideR = [0], i; var sideL = [0], sideR = [0], i;
var maxWidth = this.cols[col].width; var maxWidth = this.cols[col].width;
var ls = 0, rs = 0; var ls = 0, rs = 0;
...@@ -4109,9 +4103,9 @@ ...@@ -4109,9 +4103,9 @@
leftSide: ls, leftSide: ls,
rightSide: rs rightSide: rs
}; };
}, };
_calcCellsWidth: function (colBeg, colEnd, row) { WorksheetView.prototype._calcCellsWidth = function (colBeg, colEnd, row) {
var inc = colBeg <= colEnd ? 1 : -1, res = []; var inc = colBeg <= colEnd ? 1 : -1, res = [];
for (var i = colBeg; (colEnd - i) * inc >= 0; i += inc) { for (var i = colBeg; (colEnd - i) * inc >= 0; i += inc) {
if ( i !== colBeg && !this._isCellEmptyOrMerged(i, row) ) {break;} if ( i !== colBeg && !this._isCellEmptyOrMerged(i, row) ) {break;}
...@@ -4119,10 +4113,10 @@ ...@@ -4119,10 +4113,10 @@
if (res.length > 1) {res[res.length - 1] += res[res.length - 2];} if (res.length > 1) {res[res.length - 1] += res[res.length - 2];}
} }
return res; return res;
}, };
// Ищет текст в строке (columnsWithText - это колонки, в которых есть текст) // Ищет текст в строке (columnsWithText - это колонки, в которых есть текст)
_findSourceOfCellText: function (col, row) { WorksheetView.prototype._findSourceOfCellText = function (col, row) {
var r = this._getRowCache(row); var r = this._getRowCache(row);
if (r) { if (r) {
for (var i in r.columnsWithText) { for (var i in r.columnsWithText) {
...@@ -4136,34 +4130,34 @@ ...@@ -4136,34 +4130,34 @@
} }
} }
return -1; return -1;
}, };
// ----- Merged cells cache ----- // ----- Merged cells cache -----
_isMergedCells: function (range) { WorksheetView.prototype._isMergedCells = function (range) {
return range.isEqual(this.model.getMergedByCell(range.r1, range.c1)); return range.isEqual(this.model.getMergedByCell(range.r1, range.c1));
}, };
// ----- Cell borders cache ----- // ----- Cell borders cache -----
_addErasedBordersToCache: function (colBeg, colEnd, row) { WorksheetView.prototype._addErasedBordersToCache = function (colBeg, colEnd, row) {
var rc = this._fetchRowCache(row); var rc = this._fetchRowCache(row);
for (var col = colBeg; col < colEnd; ++col) { for (var col = colBeg; col < colEnd; ++col) {
rc.erasedRB[col] = true; rc.erasedRB[col] = true;
rc.erasedLB[col + 1] = true; rc.erasedLB[col + 1] = true;
} }
}, };
_isLeftBorderErased: function (col, row) { WorksheetView.prototype._isLeftBorderErased = function (col, row) {
return this._fetchRowCache(row).erasedLB[col] === true; return this._fetchRowCache(row).erasedLB[col] === true;
}, };
_isRightBorderErased: function (col, row) { WorksheetView.prototype._isRightBorderErased = function (col, row) {
return this._fetchRowCache(row).erasedRB[col] === true; return this._fetchRowCache(row).erasedRB[col] === true;
}, };
_getBorderPropById: function (border, border_id) { WorksheetView.prototype._getBorderPropById = function (border, border_id) {
var border_prop = undefined; var border_prop = undefined;
switch (border_id) { switch (border_id) {
case kcbidLeft: case kcbidLeft:
...@@ -4195,9 +4189,9 @@ ...@@ -4195,9 +4189,9 @@
break; break;
} }
return border_prop; return border_prop;
}, };
_getBordersCache: function (col, row) { WorksheetView.prototype._getBordersCache = function (col, row) {
var self = this; var self = this;
if(col < 0 || row < 0) { if(col < 0 || row < 0) {
...@@ -4241,9 +4235,9 @@ ...@@ -4241,9 +4235,9 @@
} }
} }
return cb; return cb;
}, };
_getActiveBorder: function (col, row, type) { WorksheetView.prototype._getActiveBorder = function (col, row, type) {
var bor = this._getBordersCache(col, row); var bor = this._getBordersCache(col, row);
var border = this._getBorderPropById(bor, type); var border = this._getBorderPropById(bor, type);
...@@ -4288,11 +4282,11 @@ ...@@ -4288,11 +4282,11 @@
} }
return this._getBorderPropById(bor, type); return this._getBorderPropById(bor, type);
}, };
_calcMaxBorderWidth: function (b1, b2) { WorksheetView.prototype._calcMaxBorderWidth = function (b1, b2) {
return Math.max(b1.isErased ? 0 : b1.w, b2.isErased ? 0 : b2.w); return Math.max(b1.isErased ? 0 : b1.w, b2.isErased ? 0 : b2.w);
}, };
// ----- Cells utilities ----- // ----- Cells utilities -----
...@@ -4302,21 +4296,21 @@ ...@@ -4302,21 +4296,21 @@
* @param {Number} col Индекс колонки * @param {Number} col Индекс колонки
* @return {String} * @return {String}
*/ */
_getColumnTitle: function (col) { WorksheetView.prototype._getColumnTitle = function (col) {
var q = col < 26 ? undefined : asc_floor(col / 26) - 1; var q = col < 26 ? undefined : asc_floor(col / 26) - 1;
var r = col % 26; var r = col % 26;
var text = String.fromCharCode( ("A").charCodeAt(0) + r ); var text = String.fromCharCode( ("A").charCodeAt(0) + r );
return col < 26 ? text : this._getColumnTitle(q) + text; return col < 26 ? text : this._getColumnTitle(q) + text;
}, };
/** /**
* Возвращает заголовок строки по индексу * Возвращает заголовок строки по индексу
* @param {Number} row Индекс строки * @param {Number} row Индекс строки
* @return {String} * @return {String}
*/ */
_getRowTitle: function (row) { WorksheetView.prototype._getRowTitle = function (row) {
return "" + (row + 1); return "" + (row + 1);
}, };
/** /**
* Возвращает заголовок ячейки по индексу * Возвращает заголовок ячейки по индексу
...@@ -4324,9 +4318,9 @@ ...@@ -4324,9 +4318,9 @@
* @param {Number} row Индекс строки * @param {Number} row Индекс строки
* @return {String} * @return {String}
*/ */
_getCellTitle: function (col, row) { WorksheetView.prototype._getCellTitle = function (col, row) {
return this._getColumnTitle(col) + this._getRowTitle(row); return this._getColumnTitle(col) + this._getRowTitle(row);
}, };
/** /**
* Возвращает ячейку таблицы (из Worksheet) * Возвращает ячейку таблицы (из Worksheet)
...@@ -4334,20 +4328,20 @@ ...@@ -4334,20 +4328,20 @@
* @param {Number} row Индекс строки * @param {Number} row Индекс строки
* @return {Range} * @return {Range}
*/ */
_getCell: function (col, row) { WorksheetView.prototype._getCell = function (col, row) {
this.nRowsCount = Math.max(this.model.getRowsCount() , this.rows.length); this.nRowsCount = Math.max(this.model.getRowsCount() , this.rows.length);
this.nColsCount = Math.max(this.model.getColsCount(), this.cols.length); this.nColsCount = Math.max(this.model.getColsCount(), this.cols.length);
if ( col < 0 || col >= this.nColsCount || row < 0 || row >= this.nRowsCount ) { if ( col < 0 || col >= this.nColsCount || row < 0 || row >= this.nRowsCount ) {
return undefined; return undefined;
} }
return this.model.getCell3(row, col); return this.model.getCell3(row, col);
}, };
_getVisibleCell: function (col, row) { WorksheetView.prototype._getVisibleCell = function (col, row) {
return this.model.getCell3(row, col); return this.model.getCell3(row, col);
}, };
_getCellFlags: function (col, row) { WorksheetView.prototype._getCellFlags = function (col, row) {
var c = row !== undefined ? this._getCell(col, row) : col; var c = row !== undefined ? this._getCell(col, row) : col;
var fl = {wrapText: false, shrinkToFit: false, isMerged: false, textAlign: kNone}; var fl = {wrapText: false, shrinkToFit: false, isMerged: false, textAlign: kNone};
if (c !== undefined) { if (c !== undefined) {
...@@ -4357,14 +4351,14 @@ ...@@ -4357,14 +4351,14 @@
fl.textAlign = c.getAlignHorizontalByValue().toLowerCase(); fl.textAlign = c.getAlignHorizontalByValue().toLowerCase();
} }
return fl; return fl;
}, };
_isCellEmpty: function (col, row) { WorksheetView.prototype._isCellEmpty = function (col, row) {
var c = row !== undefined ? this._getCell(col, row) : col; var c = row !== undefined ? this._getCell(col, row) : col;
return c === undefined || c.getValue().search(/[^ ]/) < 0; return c === undefined || c.getValue().search(/[^ ]/) < 0;
}, };
_isCellEmptyOrMerged: function (col, row) { WorksheetView.prototype._isCellEmptyOrMerged = function (col, row) {
var c = row !== undefined ? this._getCell(col, row) : col; var c = row !== undefined ? this._getCell(col, row) : col;
if (undefined === c) if (undefined === c)
return true; return true;
...@@ -4372,9 +4366,9 @@ ...@@ -4372,9 +4366,9 @@
if (fl.isMerged) if (fl.isMerged)
return false; return false;
return c.getValue().search(/[^ ]/) < 0; return c.getValue().search(/[^ ]/) < 0;
}, };
_isCellEmptyOrMergedOrBackgroundColorOrBorders: function (col, row) { WorksheetView.prototype._isCellEmptyOrMergedOrBackgroundColorOrBorders = function (col, row) {
var c = row !== undefined ? this._getCell(col, row) : col; var c = row !== undefined ? this._getCell(col, row) : col;
if (undefined === c) if (undefined === c)
return true; return true;
...@@ -4390,13 +4384,13 @@ ...@@ -4390,13 +4384,13 @@
(cb.dd && c_oAscBorderStyles.None !== cb.dd.s) || (cb.du && c_oAscBorderStyles.None !== cb.du.s)) (cb.dd && c_oAscBorderStyles.None !== cb.dd.s) || (cb.du && c_oAscBorderStyles.None !== cb.du.s))
return false; return false;
return c.getValue().search(/[^ ]/) < 0; return c.getValue().search(/[^ ]/) < 0;
}, };
_getRange: function (c1, r1, c2, r2) { WorksheetView.prototype._getRange = function (c1, r1, c2, r2) {
return this.model.getRange3(r1, c1, r2, c2); return this.model.getRange3(r1, c1, r2, c2);
}, };
_selectColumnsByRange: function () { WorksheetView.prototype._selectColumnsByRange = function () {
var ar = this.activeRange; var ar = this.activeRange;
if (c_oAscSelectionType.RangeMax === ar.type) if (c_oAscSelectionType.RangeMax === ar.type)
return; return;
...@@ -4412,9 +4406,9 @@ ...@@ -4412,9 +4406,9 @@
} }
this._drawSelection(); this._drawSelection();
} }
}, };
_selectRowsByRange: function () { WorksheetView.prototype._selectRowsByRange = function () {
var ar = this.activeRange; var ar = this.activeRange;
if (c_oAscSelectionType.RangeMax === ar.type) if (c_oAscSelectionType.RangeMax === ar.type)
return; return;
...@@ -4432,29 +4426,29 @@ ...@@ -4432,29 +4426,29 @@
this._drawSelection(); this._drawSelection();
} }
}, };
/** /**
* Возвращает true, если диапазон больше видимой области, и операции над ним могут привести к задержкам * Возвращает true, если диапазон больше видимой области, и операции над ним могут привести к задержкам
* @param {Asc.Range} range Диапазон для проверки * @param {Asc.Range} range Диапазон для проверки
* @returns {Boolean} * @returns {Boolean}
*/ */
_isLargeRange: function (range) { WorksheetView.prototype._isLargeRange = function (range) {
var vr = this.visibleRange; var vr = this.visibleRange;
return range.c2 - range.c1 + 1 > (vr.c2 - vr.c1 + 1) * 3 || return range.c2 - range.c1 + 1 > (vr.c2 - vr.c1 + 1) * 3 ||
range.r2 - range.r1 + 1 > (vr.r2 - vr.r1 + 1) * 3; range.r2 - range.r1 + 1 > (vr.r2 - vr.r1 + 1) * 3;
}, };
/** /**
* Возвращает true, если диапазон состоит из одной ячейки * Возвращает true, если диапазон состоит из одной ячейки
* @param {Asc.Range} range Диапазон * @param {Asc.Range} range Диапазон
* @returns {Boolean} * @returns {Boolean}
*/ */
_rangeIsSingleCell: function (range) { WorksheetView.prototype._rangeIsSingleCell = function (range) {
return range.c1 === range.c2 && range.r1 === range.r2; return range.c1 === range.c2 && range.r1 === range.r2;
}, };
drawDepCells : function(){ WorksheetView.prototype.drawDepCells = function (){
var ctx = this.overlayCtx, var ctx = this.overlayCtx,
_cc = this.cellCommentator, _cc = this.cellCommentator,
c,node, that = this; c,node, that = this;
...@@ -4630,9 +4624,9 @@ ...@@ -4630,9 +4624,9 @@
} }
} }
}, };
prepareDepCells: function(se){ WorksheetView.prototype.prepareDepCells = function (se){
var activeCell = this.activeRange, var activeCell = this.activeRange,
mc = this.model.getMergedByCell(activeCell.startRow, activeCell.startCol), mc = this.model.getMergedByCell(activeCell.startRow, activeCell.startCol),
c1 = mc ? mc.c1 : activeCell.startCol, c1 = mc ? mc.c1 : activeCell.startCol,
...@@ -4669,33 +4663,33 @@ ...@@ -4669,33 +4663,33 @@
} }
this.drawDepCells(); this.drawDepCells();
}, };
cleanDepCells: function(){ WorksheetView.prototype.cleanDepCells = function (){
this.depDrawCells = null; this.depDrawCells = null;
this.drawDepCells(); this.drawDepCells();
}, };
// ----- Text drawing ----- // ----- Text drawing -----
_getPPIX: function () { WorksheetView.prototype._getPPIX = function () {
return this.drawingCtx.getPPIX(); return this.drawingCtx.getPPIX();
}, };
_getPPIY: function () { WorksheetView.prototype._getPPIY = function () {
return this.drawingCtx.getPPIY(); return this.drawingCtx.getPPIY();
}, };
_setFont: function (drawingCtx, name, size) { WorksheetView.prototype._setFont = function (drawingCtx, name, size) {
var ctx = (drawingCtx) ? drawingCtx : this.drawingCtx; var ctx = (drawingCtx) ? drawingCtx : this.drawingCtx;
ctx.setFont( new asc_FP(name, size) ); ctx.setFont( new asc_FP(name, size) );
}, };
/** /**
* @param {TextMetrics} tm * @param {TextMetrics} tm
* @return {TextMetrics} * @return {TextMetrics}
*/ */
_roundTextMetrics: function (tm) { WorksheetView.prototype._roundTextMetrics = function (tm) {
tm.width = asc_calcnpt( tm.width, this._getPPIX() ); tm.width = asc_calcnpt( tm.width, this._getPPIX() );
tm.height = asc_calcnpt( tm.height, this._getPPIY() ); tm.height = asc_calcnpt( tm.height, this._getPPIY() );
tm.baseline = asc_calcnpt( tm.baseline, this._getPPIY() ); tm.baseline = asc_calcnpt( tm.baseline, this._getPPIY() );
...@@ -4703,9 +4697,9 @@ ...@@ -4703,9 +4697,9 @@
tm.centerline = asc_calcnpt( tm.centerline, this._getPPIY() ); tm.centerline = asc_calcnpt( tm.centerline, this._getPPIY() );
} }
return tm; return tm;
}, };
_calcTextHorizPos: function (x1, x2, tm, halign) { WorksheetView.prototype._calcTextHorizPos = function (x1, x2, tm, halign) {
switch (halign) { switch (halign) {
case khaCenter: case khaCenter:
return asc_calcnpt(0.5 * (x1 + x2 + this.width_1px - tm.width), this._getPPIX()); return asc_calcnpt(0.5 * (x1 + x2 + this.width_1px - tm.width), this._getPPIX());
...@@ -4715,9 +4709,9 @@ ...@@ -4715,9 +4709,9 @@
default: default:
return x1 + this.width_padding; return x1 + this.width_padding;
} }
}, };
_calcTextVertPos: function (y1, y2, baseline, tm, valign) { WorksheetView.prototype._calcTextVertPos = function (y1, y2, baseline, tm, valign) {
switch (valign) { switch (valign) {
case kvaCenter: case kvaCenter:
return asc_calcnpt(0.5 * (y1 + y2 - tm.height), this._getPPIY()) - this.height_1px; return asc_calcnpt(0.5 * (y1 + y2 - tm.height), this._getPPIY()) - this.height_1px;
...@@ -4726,20 +4720,20 @@ ...@@ -4726,20 +4720,20 @@
default: default:
return baseline - tm.baseline; return baseline - tm.baseline;
} }
}, };
_calcTextWidth: function (x1, x2, tm, halign) { WorksheetView.prototype._calcTextWidth = function (x1, x2, tm, halign) {
switch (halign) { switch (halign) {
case khaJustify: case khaJustify:
return x2 + this.width_1px - this.width_padding * 2 - x1; return x2 + this.width_1px - this.width_padding * 2 - x1;
default: default:
return tm.width; return tm.width;
} }
}, };
// ----- Scrolling ----- // ----- Scrolling -----
_calcCellPosition: function (c, r, dc, dr) { WorksheetView.prototype._calcCellPosition = function (c, r, dc, dr) {
var t = this; var t = this;
var vr = t.visibleRange; var vr = t.visibleRange;
...@@ -4827,43 +4821,43 @@ ...@@ -4827,43 +4821,43 @@
col: newCol < 0 ? 0 : Math.min(newCol, t.cols.length - 1), col: newCol < 0 ? 0 : Math.min(newCol, t.cols.length - 1),
row: newRow < 0 ? 0 : Math.min(newRow, t.rows.length - 1) row: newRow < 0 ? 0 : Math.min(newRow, t.rows.length - 1)
}; };
}, };
_isColDrawnPartially: function (col, leftCol, diffWidth) { WorksheetView.prototype._isColDrawnPartially = function (col, leftCol, diffWidth) {
if (col <= leftCol || col >= this.nColsCount) if (col <= leftCol || col >= this.nColsCount)
return false; return false;
diffWidth = diffWidth ? diffWidth : 0; diffWidth = diffWidth ? diffWidth : 0;
var c = this.cols; var c = this.cols;
return c[col].left + c[col].width - c[leftCol].left + this.cellsLeft + diffWidth > this.drawingCtx.getWidth(); return c[col].left + c[col].width - c[leftCol].left + this.cellsLeft + diffWidth > this.drawingCtx.getWidth();
}, };
_isRowDrawnPartially: function (row, topRow, diffHeight) { WorksheetView.prototype._isRowDrawnPartially = function (row, topRow, diffHeight) {
if (row <= topRow || row >= this.nRowsCount) if (row <= topRow || row >= this.nRowsCount)
return false; return false;
diffHeight = diffHeight ? diffHeight : 0; diffHeight = diffHeight ? diffHeight : 0;
var r = this.rows; var r = this.rows;
return r[row].top + r[row].height - r[topRow].top + this.cellsTop + diffHeight > this.drawingCtx.getHeight(); return r[row].top + r[row].height - r[topRow].top + this.cellsTop + diffHeight > this.drawingCtx.getHeight();
}, };
_isVisibleX: function () { WorksheetView.prototype._isVisibleX = function () {
var vr = this.visibleRange; var vr = this.visibleRange;
var c = this.cols; var c = this.cols;
var x = c[vr.c2].left + c[vr.c2].width; var x = c[vr.c2].left + c[vr.c2].width;
var offsetFrozen = this.getFrozenPaneOffset(false, true); var offsetFrozen = this.getFrozenPaneOffset(false, true);
x += offsetFrozen.offsetX; x += offsetFrozen.offsetX;
return x - c[vr.c1].left + this.cellsLeft < this.drawingCtx.getWidth(); return x - c[vr.c1].left + this.cellsLeft < this.drawingCtx.getWidth();
}, };
_isVisibleY: function () { WorksheetView.prototype._isVisibleY = function () {
var vr = this.visibleRange; var vr = this.visibleRange;
var r = this.rows; var r = this.rows;
var y = r[vr.r2].top + r[vr.r2].height; var y = r[vr.r2].top + r[vr.r2].height;
var offsetFrozen = this.getFrozenPaneOffset(true, false); var offsetFrozen = this.getFrozenPaneOffset(true, false);
y += offsetFrozen.offsetY; y += offsetFrozen.offsetY;
return y - r[vr.r1].top + this.cellsTop < this.drawingCtx.getHeight(); return y - r[vr.r1].top + this.cellsTop < this.drawingCtx.getHeight();
}, };
_updateVisibleRowsCount: function (skipScrolReinit) { WorksheetView.prototype._updateVisibleRowsCount = function (skipScrolReinit) {
this._calcVisibleRows(); this._calcVisibleRows();
if (this._isVisibleY()) { if (this._isVisibleY()) {
do { // Добавим еще строки, чтоб не было видно фон под таблицей do { // Добавим еще строки, чтоб не было видно фон под таблицей
...@@ -4875,9 +4869,9 @@ ...@@ -4875,9 +4869,9 @@
this.handlers.trigger("reinitializeScrollY"); this.handlers.trigger("reinitializeScrollY");
} }
} }
}, };
_updateVisibleColsCount: function (skipScrolReinit) { WorksheetView.prototype._updateVisibleColsCount = function (skipScrolReinit) {
this._calcVisibleColumns(); this._calcVisibleColumns();
if (this._isVisibleX()) { if (this._isVisibleX()) {
do { // Добавим еще столбцы, чтоб не было видно фон под таблицей do { // Добавим еще столбцы, чтоб не было видно фон под таблицей
...@@ -4889,9 +4883,9 @@ ...@@ -4889,9 +4883,9 @@
this.handlers.trigger("reinitializeScrollX"); this.handlers.trigger("reinitializeScrollX");
} }
} }
}, };
scrollVertical: function (delta, editor) { WorksheetView.prototype.scrollVertical = function (delta, editor) {
var vr = this.visibleRange; var vr = this.visibleRange;
var start = this._calcCellPosition(vr.c1, vr.r1, 0, delta).row; var start = this._calcCellPosition(vr.c1, vr.r1, 0, delta).row;
var fixStartRow = asc_Range(vr.c1, start, vr.c2, start); var fixStartRow = asc_Range(vr.c1, start, vr.c2, start);
...@@ -5018,9 +5012,9 @@ ...@@ -5018,9 +5012,9 @@
//ToDo this.drawDepCells(); //ToDo this.drawDepCells();
this.objectRender.showDrawingObjects(false, new GraphicOption(this, c_oAscGraphicOption.ScrollVertical, rangeGraphic)); this.objectRender.showDrawingObjects(false, new GraphicOption(this, c_oAscGraphicOption.ScrollVertical, rangeGraphic));
return this; return this;
}, };
scrollHorizontal: function (delta, editor) { WorksheetView.prototype.scrollHorizontal = function (delta, editor) {
var vr = this.visibleRange; var vr = this.visibleRange;
var start = this._calcCellPosition(vr.c1, vr.r1, delta, 0).col; var start = this._calcCellPosition(vr.c1, vr.r1, delta, 0).col;
var fixStartCol = asc_Range(start, vr.r1, start, vr.r2); var fixStartCol = asc_Range(start, vr.r1, start, vr.r2);
...@@ -5109,12 +5103,12 @@ ...@@ -5109,12 +5103,12 @@
//ToDo this.drawDepCells(); //ToDo this.drawDepCells();
this.objectRender.showDrawingObjects(false, new GraphicOption(this, c_oAscGraphicOption.ScrollHorizontal, rangeGraphic)); this.objectRender.showDrawingObjects(false, new GraphicOption(this, c_oAscGraphicOption.ScrollHorizontal, rangeGraphic));
return this; return this;
}, };
// ----- Selection ----- // ----- Selection -----
// dX = true - считать с половиной следующей ячейки // dX = true - считать с половиной следующей ячейки
_findColUnderCursor: function (x, canReturnNull, dX) { WorksheetView.prototype._findColUnderCursor = function (x, canReturnNull, dX) {
var c = this.visibleRange.c1, var c = this.visibleRange.c1,
offset = this.cols[c].left - this.cellsLeft, offset = this.cols[c].left - this.cellsLeft,
c2, x1, x2, cFrozen, widthDiff = 0; c2, x1, x2, cFrozen, widthDiff = 0;
...@@ -5168,10 +5162,10 @@ ...@@ -5168,10 +5162,10 @@
} }
} }
return null; return null;
}, };
// dY = true - считать с половиной следующей ячейки // dY = true - считать с половиной следующей ячейки
_findRowUnderCursor: function (y, canReturnNull, dY) { WorksheetView.prototype._findRowUnderCursor = function (y, canReturnNull, dY) {
var r = this.visibleRange.r1, var r = this.visibleRange.r1,
offset = this.rows[r].top - this.cellsTop, offset = this.rows[r].top - this.cellsTop,
r2, y1, y2, rFrozen, heightDiff = 0; r2, y1, y2, rFrozen, heightDiff = 0;
...@@ -5225,9 +5219,9 @@ ...@@ -5225,9 +5219,9 @@
} }
} }
return null; return null;
}, };
_getCursorFormulaOrChart: function (x, y, offsetX, offsetY) { WorksheetView.prototype._getCursorFormulaOrChart = function (x, y, offsetX, offsetY) {
var i; var i;
if (this.isFormulaEditMode || this.isChartAreaEditMode) { if (this.isFormulaEditMode || this.isChartAreaEditMode) {
var cursor, oFormulaRange, oFormulaIn, xFormula1, xFormula2, yFormula1, yFormula2; var cursor, oFormulaRange, oFormulaIn, xFormula1, xFormula2, yFormula1, yFormula2;
...@@ -5282,9 +5276,9 @@ ...@@ -5282,9 +5276,9 @@
} }
} }
return null; return null;
}, };
getCursorTypeFromXY: function (x, y, isViewerMode) { WorksheetView.prototype.getCursorTypeFromXY = function (x, y, isViewerMode) {
var c, r, f, i, offsetX, offsetY, arIntersection, left, top, right, bottom, cellCursor, var c, r, f, i, offsetX, offsetY, arIntersection, left, top, right, bottom, cellCursor,
sheetId = this.model.getId(), userId, lockRangePosLeft, lockRangePosTop, lockInfo, oHyperlink, sheetId = this.model.getId(), userId, lockRangePosLeft, lockRangePosTop, lockInfo, oHyperlink,
widthDiff = 0, heightDiff = 0, isLocked = false, ar = this.activeRange; widthDiff = 0, heightDiff = 0, isLocked = false, ar = this.activeRange;
...@@ -5522,9 +5516,9 @@ ...@@ -5522,9 +5516,9 @@
} }
return oResDefault; return oResDefault;
}, };
_fixSelectionOfMergedCells: function (fixedRange) { WorksheetView.prototype._fixSelectionOfMergedCells = function (fixedRange) {
var t = this; var t = this;
var ar = fixedRange ? fixedRange : ((this.isFormulaEditMode) ? var ar = fixedRange ? fixedRange : ((this.isFormulaEditMode) ?
...@@ -5540,9 +5534,9 @@ ...@@ -5540,9 +5534,9 @@
ar.c2 = ar.c1 === res.c1 ? res.c2 : (res.c1); ar.c2 = ar.c1 === res.c1 ? res.c2 : (res.c1);
if (ar.r1 !== res.r1 && ar.r1 !== res.r2) {ar.r1 = ar.r1 <= ar.r2 ? res.r1 : res.r2;} if (ar.r1 !== res.r1 && ar.r1 !== res.r2) {ar.r1 = ar.r1 <= ar.r2 ? res.r1 : res.r2;}
ar.r2 = ar.r1 === res.r1 ? res.r2 : res.r1; ar.r2 = ar.r1 === res.r1 ? res.r2 : res.r1;
}, };
_fixSelectionOfHiddenCells: function (dc, dr, range) { WorksheetView.prototype._fixSelectionOfHiddenCells = function (dc, dr, range) {
var t = this, ar = (range) ? range : t.activeRange, c1, c2, r1, r2, mc, i, arn = ar.clone(true); var t = this, ar = (range) ? range : t.activeRange, c1, c2, r1, r2, mc, i, arn = ar.clone(true);
if (dc === undefined) {dc = +1;} if (dc === undefined) {dc = +1;}
...@@ -5613,9 +5607,9 @@ ...@@ -5613,9 +5607,9 @@
r1 = findVisibleRow(ar.startRow, dr); r1 = findVisibleRow(ar.startRow, dr);
if (r1 >= 0) {ar.startRow = r1;} if (r1 >= 0) {ar.startRow = r1;}
} }
}, };
_moveActiveCellToXY: function (x, y) { WorksheetView.prototype._moveActiveCellToXY = function (x, y) {
var c, r; var c, r;
var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange; var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange;
...@@ -5651,9 +5645,9 @@ ...@@ -5651,9 +5645,9 @@
ar.type = c_oAscSelectionType.RangeCells; ar.type = c_oAscSelectionType.RangeCells;
this._fixSelectionOfMergedCells(); this._fixSelectionOfMergedCells();
} }
}, };
_moveActiveCellToOffset: function (dc, dr) { WorksheetView.prototype._moveActiveCellToOffset = function (dc, dr) {
var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange; var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange;
var mc = this.model.getMergedByCell(ar.startRow, ar.startCol); var mc = this.model.getMergedByCell(ar.startRow, ar.startCol);
var c = mc ? ( dc < 0 ? mc.c1 : dc > 0 ? Math.min(mc.c2, this.nColsCount - 1 - dc) : ar.startCol) : ar.startCol; var c = mc ? ( dc < 0 ? mc.c1 : dc > 0 ? Math.min(mc.c2, this.nColsCount - 1 - dc) : ar.startCol) : ar.startCol;
...@@ -5666,10 +5660,10 @@ ...@@ -5666,10 +5660,10 @@
this._fixSelectionOfMergedCells(); this._fixSelectionOfMergedCells();
ar.normalize(); ar.normalize();
this._fixSelectionOfHiddenCells(dc>=0?+1:-1, dr>=0?+1:-1); this._fixSelectionOfHiddenCells(dc>=0?+1:-1, dr>=0?+1:-1);
}, };
// Движение активной ячейки в выделенной области // Движение активной ячейки в выделенной области
_moveActivePointInSelection: function (dc, dr) { WorksheetView.prototype._moveActivePointInSelection = function (dc, dr) {
var ar = this.activeRange; var ar = this.activeRange;
var arn = this.activeRange.clone(true); var arn = this.activeRange.clone(true);
...@@ -5737,9 +5731,9 @@ ...@@ -5737,9 +5731,9 @@
done = false; done = false;
} }
} while (!done); } while (!done);
}, };
_calcSelectionEndPointByXY: function (x, y) { WorksheetView.prototype._calcSelectionEndPointByXY = function (x, y) {
var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange; var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange;
x *= asc_getcvt( 0/*px*/, 1/*pt*/, this._getPPIX() ); x *= asc_getcvt( 0/*px*/, 1/*pt*/, this._getPPIX() );
y *= asc_getcvt( 0/*px*/, 1/*pt*/, this._getPPIY() ); y *= asc_getcvt( 0/*px*/, 1/*pt*/, this._getPPIY() );
...@@ -5747,18 +5741,18 @@ ...@@ -5747,18 +5741,18 @@
c2: ar.type === c_oAscSelectionType.RangeCol || ar.type === c_oAscSelectionType.RangeCells ? this._findColUnderCursor(x).col : ar.c2, c2: ar.type === c_oAscSelectionType.RangeCol || ar.type === c_oAscSelectionType.RangeCells ? this._findColUnderCursor(x).col : ar.c2,
r2: ar.type === c_oAscSelectionType.RangeRow || ar.type === c_oAscSelectionType.RangeCells ? this._findRowUnderCursor(y).row : ar.r2 r2: ar.type === c_oAscSelectionType.RangeRow || ar.type === c_oAscSelectionType.RangeCells ? this._findRowUnderCursor(y).row : ar.r2
}; };
}, };
_calcSelectionEndPointByOffset: function (dc, dr) { WorksheetView.prototype._calcSelectionEndPointByOffset = function (dc, dr) {
var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange; var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange;
var mc = this.model.getMergedByCell(ar.r2, ar.c2); var mc = this.model.getMergedByCell(ar.r2, ar.c2);
var c = mc ? ( dc <= 0 ? mc.c1 : mc.c2 ) : ar.c2; var c = mc ? ( dc <= 0 ? mc.c1 : mc.c2 ) : ar.c2;
var r = mc ? ( dr <= 0 ? mc.r1 : mc.r2 ) : ar.r2; var r = mc ? ( dr <= 0 ? mc.r1 : mc.r2 ) : ar.r2;
var p = this._calcCellPosition(c, r, dc, dr); var p = this._calcCellPosition(c, r, dc, dr);
return {c2: p.col, r2: p.row}; return {c2: p.col, r2: p.row};
}, };
_calcActiveRangeOffset: function () { WorksheetView.prototype._calcActiveRangeOffset = function () {
var vr = this.visibleRange; var vr = this.visibleRange;
var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange; var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1] : this.activeRange;
if (this.isFormulaEditMode) { if (this.isFormulaEditMode) {
...@@ -5786,9 +5780,9 @@ ...@@ -5786,9 +5780,9 @@
deltaX: ar.type === c_oAscSelectionType.RangeCol || ar.type === c_oAscSelectionType.RangeCells ? incX : 0, deltaX: ar.type === c_oAscSelectionType.RangeCol || ar.type === c_oAscSelectionType.RangeCells ? incX : 0,
deltaY: ar.type === c_oAscSelectionType.RangeRow || ar.type === c_oAscSelectionType.RangeCells ? incY : 0 deltaY: ar.type === c_oAscSelectionType.RangeRow || ar.type === c_oAscSelectionType.RangeCells ? incY : 0
}; };
}, };
_calcActiveCellOffset: function () { WorksheetView.prototype._calcActiveCellOffset = function () {
var vr = this.visibleRange; var vr = this.visibleRange;
var ar = this.activeRange; var ar = this.activeRange;
var arn = ar.clone(true); var arn = ar.clone(true);
...@@ -5808,9 +5802,9 @@ ...@@ -5808,9 +5802,9 @@
deltaX: ar.type === c_oAscSelectionType.RangeCol || ar.type === c_oAscSelectionType.RangeCells ? incX : 0, deltaX: ar.type === c_oAscSelectionType.RangeCol || ar.type === c_oAscSelectionType.RangeCells ? incX : 0,
deltaY: ar.type === c_oAscSelectionType.RangeRow || ar.type === c_oAscSelectionType.RangeCells ? incY : 0 deltaY: ar.type === c_oAscSelectionType.RangeRow || ar.type === c_oAscSelectionType.RangeCells ? incY : 0
}; };
}, };
_calcFillHandleOffset: function (range) { WorksheetView.prototype._calcFillHandleOffset = function (range) {
var vr = this.visibleRange; var vr = this.visibleRange;
var ar = range ? range : this.activeFillHandle; var ar = range ? range : this.activeFillHandle;
var arn = ar.clone(true); var arn = ar.clone(true);
...@@ -5842,10 +5836,10 @@ ...@@ -5842,10 +5836,10 @@
deltaX: incX, deltaX: incX,
deltaY: incY deltaY: incY
}; };
}, };
// Потеряем ли мы что-то при merge ячеек // Потеряем ли мы что-то при merge ячеек
getSelectionMergeInfo: function (options) { WorksheetView.prototype.getSelectionMergeInfo = function (options) {
var t = this; var t = this;
var arn = t.activeRange.clone(true); var arn = t.activeRange.clone(true);
var notEmpty = false; var notEmpty = false;
...@@ -5879,9 +5873,9 @@ ...@@ -5879,9 +5873,9 @@
} }
return false; return false;
}, };
getSelectionMathInfo: function () { WorksheetView.prototype.getSelectionMathInfo = function () {
var ar = this.activeRange; var ar = this.activeRange;
var range = this.model.getRange3(ar.r1, ar.c1, ar.r2, ar.c2); var range = this.model.getRange3(ar.r1, ar.c1, ar.r2, ar.c2);
var tmp; var tmp;
...@@ -5902,9 +5896,9 @@ ...@@ -5902,9 +5896,9 @@
oSelectionMathInfo.average = sum / countNumbers; oSelectionMathInfo.average = sum / countNumbers;
} }
return oSelectionMathInfo; return oSelectionMathInfo;
}, };
getSelectionName: function (bRangeText) { WorksheetView.prototype.getSelectionName = function (bRangeText) {
if (this.isSelectOnShape) if (this.isSelectOnShape)
return " "; // Пока отправим пустое имя(с пробелом, пустое не воспринимаем в меню..) ToDo return " "; // Пока отправим пустое имя(с пробелом, пустое не воспринимаем в меню..) ToDo
...@@ -5927,19 +5921,19 @@ ...@@ -5927,19 +5921,19 @@
var cellName = this._getColumnTitle(c1) + this._getRowTitle(r1); var cellName = this._getColumnTitle(c1) + this._getRowTitle(r1);
return selectionSize || cellName; return selectionSize || cellName;
}, };
getSelectionRangeValue: function () { WorksheetView.prototype.getSelectionRangeValue = function () {
var sListName = this.model.getName(); var sListName = this.model.getName();
return sListName + "!" + this.getActiveRange(this.activeRange.clone(true)); return sListName + "!" + this.getActiveRange(this.activeRange.clone(true));
}, };
getSelectionInfo: function (bExt) { WorksheetView.prototype.getSelectionInfo = function (bExt) {
return this.objectRender.selectedGraphicObjectsExists() ? return this.objectRender.selectedGraphicObjectsExists() ?
this._getSelectionInfoObject(bExt) : this._getSelectionInfoCell(bExt); this._getSelectionInfoObject(bExt) : this._getSelectionInfoCell(bExt);
}, };
_getSelectionInfoCell: function (bExt) { WorksheetView.prototype._getSelectionInfoCell = function (bExt) {
var c_opt = this.settings.cells; var c_opt = this.settings.cells;
var activeCell = this.activeRange; var activeCell = this.activeRange;
var mc = this.model.getMergedByCell(activeCell.startRow, activeCell.startCol); var mc = this.model.getMergedByCell(activeCell.startRow, activeCell.startCol);
...@@ -6041,9 +6035,9 @@ ...@@ -6041,9 +6035,9 @@
} }
return cell_info; return cell_info;
}, };
_getSelectionInfoObject: function (bExt) { WorksheetView.prototype._getSelectionInfoObject = function (bExt) {
var objectInfo = new asc_CCellInfo(); var objectInfo = new asc_CCellInfo();
var defaults = this.settings.cells; var defaults = this.settings.cells;
var selectionType = c_oAscSelectionType.RangeShape; var selectionType = c_oAscSelectionType.RangeShape;
...@@ -6117,10 +6111,10 @@ ...@@ -6117,10 +6111,10 @@
// ToDo locks // ToDo locks
return objectInfo; return objectInfo;
}, };
// Получаем координаты активной ячейки // Получаем координаты активной ячейки
getActiveCellCoord: function () { WorksheetView.prototype.getActiveCellCoord = function () {
var xL = this.getCellLeft(this.activeRange.startCol, /*pt*/1); var xL = this.getCellLeft(this.activeRange.startCol, /*pt*/1);
var yL = this.getCellTop(this.activeRange.startRow, /*pt*/1); var yL = this.getCellTop(this.activeRange.startRow, /*pt*/1);
// Пересчитываем X и Y относительно видимой области // Пересчитываем X и Y относительно видимой области
...@@ -6132,40 +6126,40 @@ ...@@ -6132,40 +6126,40 @@
var width = this.getColumnWidth (this.activeRange.startCol, /*px*/0); var width = this.getColumnWidth (this.activeRange.startCol, /*px*/0);
var height = this.getRowHeight(this.activeRange.startRow, /*px*/0); var height = this.getRowHeight(this.activeRange.startRow, /*px*/0);
return new asc_CCellRect (xL, yL, width, height); return new asc_CCellRect (xL, yL, width, height);
}, };
_checkSelectionShape: function () { WorksheetView.prototype._checkSelectionShape = function () {
var isSelectOnShape = this.isSelectOnShape; var isSelectOnShape = this.isSelectOnShape;
if (this.isSelectOnShape) { if (this.isSelectOnShape) {
this.isSelectOnShape = false; this.isSelectOnShape = false;
this.objectRender.unselectDrawingObjects(); this.objectRender.unselectDrawingObjects();
} }
return isSelectOnShape; return isSelectOnShape;
}, };
_updateSelectionNameAndInfo: function () { WorksheetView.prototype._updateSelectionNameAndInfo = function () {
this.handlers.trigger("selectionNameChanged", this.getSelectionName(/*bRangeText*/false)); this.handlers.trigger("selectionNameChanged", this.getSelectionName(/*bRangeText*/false));
this.handlers.trigger("selectionChanged", this.getSelectionInfo()); this.handlers.trigger("selectionChanged", this.getSelectionInfo());
this.handlers.trigger("selectionMathInfoChanged", this.getSelectionMathInfo()); this.handlers.trigger("selectionMathInfoChanged", this.getSelectionMathInfo());
}, };
getSelectionShape: function () { WorksheetView.prototype.getSelectionShape = function () {
return this.isSelectOnShape; return this.isSelectOnShape;
}, };
setSelectionShape: function (isSelectOnShape) { WorksheetView.prototype.setSelectionShape = function (isSelectOnShape) {
this.isSelectOnShape = isSelectOnShape; this.isSelectOnShape = isSelectOnShape;
// отправляем евент для получения свойств картинки, шейпа или группы // отправляем евент для получения свойств картинки, шейпа или группы
this.handlers.trigger("selectionNameChanged", this.getSelectionName()); this.handlers.trigger("selectionNameChanged", this.getSelectionName());
this.handlers.trigger("selectionChanged", this.getSelectionInfo()); this.handlers.trigger("selectionChanged", this.getSelectionInfo());
this.handlers.trigger("selectionMathInfoChanged", this.getSelectionMathInfo()); this.handlers.trigger("selectionMathInfoChanged", this.getSelectionMathInfo());
}, };
getActiveRangeObj: function(){ WorksheetView.prototype.getActiveRangeObj = function (){
return this.activeRange.clone(true); return this.activeRange.clone(true);
}, };
setActiveRangeObj: function(val){ WorksheetView.prototype.setActiveRangeObj = function (val){
this.activeRange = val.clone(); this.activeRange = val.clone();
}, };
setSelection: function (range, validRange) { WorksheetView.prototype.setSelection = function (range, validRange) {
// Проверка на валидность range. // Проверка на валидность range.
if (validRange && (range.c2 >= this.nColsCount || range.r2 >= this.nRowsCount)) { if (validRange && (range.c2 >= this.nColsCount || range.r2 >= this.nRowsCount)) {
if (range.c2 >= this.nColsCount) if (range.c2 >= this.nColsCount)
...@@ -6202,9 +6196,9 @@ ...@@ -6202,9 +6196,9 @@
this.handlers.trigger("selectionMathInfoChanged", this.getSelectionMathInfo()); this.handlers.trigger("selectionMathInfoChanged", this.getSelectionMathInfo());
return this._calcActiveCellOffset(); return this._calcActiveCellOffset();
}, };
setSelectionUndoRedo: function (range, validRange) { WorksheetView.prototype.setSelectionUndoRedo = function (range, validRange) {
// Проверка на валидность range. // Проверка на валидность range.
if (validRange && (range.c2 >= this.nColsCount || range.r2 >= this.nRowsCount)) { if (validRange && (range.c2 >= this.nColsCount || range.r2 >= this.nRowsCount)) {
if (range.c2 >= this.nColsCount) if (range.c2 >= this.nColsCount)
...@@ -6228,9 +6222,9 @@ ...@@ -6228,9 +6222,9 @@
oRes = this._calcActiveCellOffset(); oRes = this._calcActiveCellOffset();
} }
return oRes; return oRes;
}, };
changeSelectionStartPoint: function (x, y, isCoord, isSelectMode) { WorksheetView.prototype.changeSelectionStartPoint = function (x, y, isCoord, isSelectMode) {
var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1]: this.activeRange; var ar = (this.isFormulaEditMode) ? this.arrActiveFormulaRanges[this.arrActiveFormulaRanges.length - 1]: this.activeRange;
var sc = ar.startCol, sr = ar.startRow, ret = {}; var sc = ar.startCol, sr = ar.startRow, ret = {};
var isChangeSelectionShape = false; var isChangeSelectionShape = false;
...@@ -6272,10 +6266,10 @@ ...@@ -6272,10 +6266,10 @@
//ToDo this.drawDepCells(); //ToDo this.drawDepCells();
return ret; return ret;
}, };
// Смена селекта по нажатию правой кнопки мыши // Смена селекта по нажатию правой кнопки мыши
changeSelectionStartPointRightClick: function (x, y) { WorksheetView.prototype.changeSelectionStartPointRightClick = function (x, y) {
var ar = this.activeRange; var ar = this.activeRange;
var isChangeSelectionShape = this._checkSelectionShape(); var isChangeSelectionShape = this._checkSelectionShape();
this.model.workbook.handlers.trigger("asc_onHideComment"); this.model.workbook.handlers.trigger("asc_onHideComment");
...@@ -6347,9 +6341,9 @@ ...@@ -6347,9 +6341,9 @@
} }
return true; return true;
}, };
changeSelectionEndPoint: function (x, y, isCoord, isSelectMode) { WorksheetView.prototype.changeSelectionEndPoint = function (x, y, isCoord, isSelectMode) {
var isChangeSelectionShape = false; var isChangeSelectionShape = false;
if (isCoord) if (isCoord)
isChangeSelectionShape = this._checkSelectionShape(); isChangeSelectionShape = this._checkSelectionShape();
...@@ -6396,10 +6390,10 @@ ...@@ -6396,10 +6390,10 @@
} }
return ret; return ret;
}, };
// Окончание выделения // Окончание выделения
changeSelectionDone: function () { WorksheetView.prototype.changeSelectionDone = function () {
if (this.isFormulaEditMode && this.arrActiveFormulaRanges.length > 0) { if (this.isFormulaEditMode && this.arrActiveFormulaRanges.length > 0) {
// Нормализуем range // Нормализуем range
...@@ -6408,10 +6402,10 @@ ...@@ -6408,10 +6402,10 @@
// Нормализуем range // Нормализуем range
this.activeRange.normalize(); this.activeRange.normalize();
} }
}, };
// Обработка движения в выделенной области // Обработка движения в выделенной области
changeSelectionActivePoint: function (dc, dr) { WorksheetView.prototype.changeSelectionActivePoint = function (dc, dr) {
var ret; var ret;
var ar = this.activeRange; var ar = this.activeRange;
var mc = this.model.getMergedByCell (ar.r1, ar.c1); var mc = this.model.getMergedByCell (ar.r1, ar.c1);
...@@ -6435,13 +6429,13 @@ ...@@ -6435,13 +6429,13 @@
this.handlers.trigger("selectionChanged", this.getSelectionInfo()); this.handlers.trigger("selectionChanged", this.getSelectionInfo());
return ret; return ret;
}, };
// ----- Changing cells ----- // ----- Changing cells -----
/* Функция для работы автозаполнения (selection). (x, y) - координаты точки мыши на области */ /* Функция для работы автозаполнения (selection). (x, y) - координаты точки мыши на области */
changeSelectionFillHandle: function (x, y) { WorksheetView.prototype.changeSelectionFillHandle = function (x, y) {
// Возвращаемый результат // Возвращаемый результат
var ret = null; var ret = null;
// Если мы только первый раз попали сюда, то копируем выделенную область // Если мы только первый раз попали сюда, то копируем выделенную область
...@@ -6805,10 +6799,10 @@ ...@@ -6805,10 +6799,10 @@
// Смотрим, ушли ли мы за границу видимой области // Смотрим, ушли ли мы за границу видимой области
ret = this._calcFillHandleOffset(activeFillHandleCopy); ret = this._calcFillHandleOffset(activeFillHandleCopy);
return ret; return ret;
}, };
/* Функция для применения автозаполнения */ /* Функция для применения автозаполнения */
applyFillHandle: function (x, y, ctrlPress) { WorksheetView.prototype.applyFillHandle = function (x, y, ctrlPress) {
var t = this; var t = this;
// Текущее выделение (к нему применится автозаполнение) // Текущее выделение (к нему применится автозаполнение)
...@@ -6944,12 +6938,12 @@ ...@@ -6944,12 +6938,12 @@
// Перерисовываем // Перерисовываем
this._drawSelection(); this._drawSelection();
} }
}, };
/* Функция для работы перемещения диапазона (selection). (x, y) - координаты точки мыши на области /* Функция для работы перемещения диапазона (selection). (x, y) - координаты точки мыши на области
* ToDo нужно переделать, чтобы moveRange появлялся только после сдвига от текущей ячейки * ToDo нужно переделать, чтобы moveRange появлялся только после сдвига от текущей ячейки
*/ */
changeSelectionMoveRangeHandle: function (x, y, ctrlKey) { WorksheetView.prototype.changeSelectionMoveRangeHandle = function (x, y, ctrlKey) {
// Возвращаемый результат // Возвращаемый результат
var ret = null; var ret = null;
// Пересчитываем координаты // Пересчитываем координаты
...@@ -7026,9 +7020,9 @@ ...@@ -7026,9 +7020,9 @@
while ( this._isColDrawnPartially( this.activeMoveRange.c2, this.visibleRange.c1 + d.deltaX) ) {++d.deltaX;} while ( this._isColDrawnPartially( this.activeMoveRange.c2, this.visibleRange.c1 + d.deltaX) ) {++d.deltaX;}
while ( this._isRowDrawnPartially( this.activeMoveRange.r2, this.visibleRange.r1 + d.deltaY) ) {++d.deltaY;} while ( this._isRowDrawnPartially( this.activeMoveRange.r2, this.visibleRange.r1 + d.deltaY) ) {++d.deltaY;}
return d; return d;
}, };
changeSelectionMoveResizeRangeHandle: function (x, y, targetInfo) { WorksheetView.prototype.changeSelectionMoveResizeRangeHandle = function (x, y, targetInfo) {
// Возвращаемый результат // Возвращаемый результат
if( !targetInfo ) if( !targetInfo )
return null; return null;
...@@ -7141,10 +7135,10 @@ ...@@ -7141,10 +7135,10 @@
this.objectRender.raiseLayerDrawingObjects(); this.objectRender.raiseLayerDrawingObjects();
return { ar: ret, d:d }; return { ar: ret, d:d };
}, };
/* Функция для применения перемещения диапазона */ /* Функция для применения перемещения диапазона */
applyMoveRangeHandle: function (ctrlKey) { WorksheetView.prototype.applyMoveRangeHandle = function (ctrlKey) {
var t = this; var t = this;
if (null === t.activeMoveRange) { if (null === t.activeMoveRange) {
...@@ -7180,17 +7174,17 @@ ...@@ -7180,17 +7174,17 @@
t.moveRangeHandle(arnFrom, arnTo, true, ctrlKey) t.moveRangeHandle(arnFrom, arnTo, true, ctrlKey)
} }
}, };
applyMoveResizeRangeHandle:function(target){ WorksheetView.prototype.applyMoveResizeRangeHandle = function (target){
if( -1 == target.targetArr ) if( -1 == target.targetArr )
this.objectRender.moveRangeDrawingObject(this.startCellMoveResizeRange, this.moveRangeDrawingObjectTo, true); this.objectRender.moveRangeDrawingObject(this.startCellMoveResizeRange, this.moveRangeDrawingObjectTo, true);
this.startCellMoveResizeRange = null; this.startCellMoveResizeRange = null;
this.startCellMoveResizeRange2 = null; this.startCellMoveResizeRange2 = null;
}, };
moveRangeHandle: function(arnFrom, arnTo, can, copyRange){ WorksheetView.prototype.moveRangeHandle = function (arnFrom, arnTo, can, copyRange){
var t = this; var t = this;
var onApplyMoveRangeHandleCallback = function (isSuccess) { var onApplyMoveRangeHandleCallback = function (isSuccess) {
// Очищаем выделение // Очищаем выделение
...@@ -7231,9 +7225,9 @@ ...@@ -7231,9 +7225,9 @@
}; };
this._isLockedCells ([arnFrom, arnTo], null, onApplyMoveRangeHandleCallback); this._isLockedCells ([arnFrom, arnTo], null, onApplyMoveRangeHandleCallback);
}, };
setSelectionInfo: function (prop, val, onlyActive, isLocal) { WorksheetView.prototype.setSelectionInfo = function (prop, val, onlyActive, isLocal) {
// Проверка глобального лока // Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock()) if (this.collaborativeEditing.getGlobalLock())
return; return;
...@@ -7659,9 +7653,9 @@ ...@@ -7659,9 +7653,9 @@
checkRange = t._setInfoAfterPaste(val, onlyActive, true); checkRange = t._setInfoAfterPaste(val, onlyActive, true);
} }
this._isLockedCells (checkRange, /*subType*/null, onSelectionCallback); this._isLockedCells (checkRange, /*subType*/null, onSelectionCallback);
}, };
_setInfoAfterPaste: function (values,clipboard,isCheckSelection) { WorksheetView.prototype._setInfoAfterPaste = function (values,clipboard,isCheckSelection) {
var t = this; var t = this;
var arn = t.activeRange.clone(true); var arn = t.activeRange.clone(true);
var arrFormula = []; var arrFormula = [];
...@@ -7914,9 +7908,9 @@ ...@@ -7914,9 +7908,9 @@
arnFor[0] = arn; arnFor[0] = arn;
arnFor[1] = arrFormula; arnFor[1] = arrFormula;
return arnFor; return arnFor;
}, };
_pasteFromLS: function(val,isCheckSelection){ WorksheetView.prototype._pasteFromLS = function (val,isCheckSelection){
var t = this; var t = this;
var arn = t.activeRange.clone(true); var arn = t.activeRange.clone(true);
var arrFormula = []; var arrFormula = [];
...@@ -8227,9 +8221,9 @@ ...@@ -8227,9 +8221,9 @@
arnFor[0] = arn; arnFor[0] = arn;
arnFor[1] = arrFormula; arnFor[1] = arrFormula;
return arnFor; return arnFor;
}, };
_pasteFromBinary: function(val,isCheckSelection){ WorksheetView.prototype._pasteFromBinary = function (val,isCheckSelection){
var t = this; var t = this;
var arn = t.activeRange.clone(true); var arn = t.activeRange.clone(true);
var arrFormula = []; var arrFormula = [];
...@@ -8552,10 +8546,10 @@ ...@@ -8552,10 +8546,10 @@
arnFor[0] = arn; arnFor[0] = arn;
arnFor[1] = arrFormula; arnFor[1] = arrFormula;
return arnFor; return arnFor;
}, };
// Залочен ли весь лист // Залочен ли весь лист
_isLockedAll: function (callback) { WorksheetView.prototype._isLockedAll = function (callback) {
if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) { if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) {
// Запрещено совместное редактирование // Запрещено совместное редактирование
asc_applyFunction(callback, true); asc_applyFunction(callback, true);
...@@ -8588,9 +8582,9 @@ ...@@ -8588,9 +8582,9 @@
this.collaborativeEditing.onStartCheckLock(); this.collaborativeEditing.onStartCheckLock();
this.collaborativeEditing.addCheckLock(lockInfo); this.collaborativeEditing.addCheckLock(lockInfo);
this.collaborativeEditing.onEndCheckLock(callback); this.collaborativeEditing.onEndCheckLock(callback);
}, };
// Пересчет для входящих ячеек в добавленные строки/столбцы // Пересчет для входящих ячеек в добавленные строки/столбцы
_recalcRangeByInsertRowsAndColumns: function (sheetId, ar) { WorksheetView.prototype._recalcRangeByInsertRowsAndColumns = function (sheetId, ar) {
var isIntersection = false, isIntersectionC1 = true, isIntersectionC2 = true, var isIntersection = false, isIntersectionC1 = true, isIntersectionC2 = true,
isIntersectionR1 = true, isIntersectionR2 = true; isIntersectionR1 = true, isIntersectionR2 = true;
do { do {
...@@ -8631,9 +8625,9 @@ ...@@ -8631,9 +8625,9 @@
} }
return isIntersection; return isIntersection;
}, };
// Функция проверки lock (возвращаемый результат нельзя использовать в качестве ответа, он нужен только для редактирования ячейки) // Функция проверки lock (возвращаемый результат нельзя использовать в качестве ответа, он нужен только для редактирования ячейки)
_isLockedCells: function (range, subType, callback) { WorksheetView.prototype._isLockedCells = function (range, subType, callback) {
if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) { if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) {
// Запрещено совместное редактирование // Запрещено совместное редактирование
asc_applyFunction(callback, true); asc_applyFunction(callback, true);
...@@ -8725,9 +8719,9 @@ ...@@ -8725,9 +8719,9 @@
} }
this.collaborativeEditing.onEndCheckLock(newCallback); this.collaborativeEditing.onEndCheckLock(newCallback);
return true; return true;
}, };
changeWorksheet: function (prop, val) { WorksheetView.prototype.changeWorksheet = function (prop, val) {
// Проверка глобального лока // Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock()) if (this.collaborativeEditing.getGlobalLock())
return; return;
...@@ -9123,9 +9117,9 @@ ...@@ -9123,9 +9117,9 @@
if (false === lockDraw) if (false === lockDraw)
t.objectRender.showDrawingObjects(true); t.objectRender.showDrawingObjects(true);
}, };
expandColsOnScroll: function (isNotActive, updateColsCount, newColsCount) { WorksheetView.prototype.expandColsOnScroll = function (isNotActive, updateColsCount, newColsCount) {
var t = this; var t = this;
var arn; var arn;
var bIsMaxCols = false; var bIsMaxCols = false;
...@@ -9159,9 +9153,9 @@ ...@@ -9159,9 +9153,9 @@
t._calcColumnWidths(/*fullRecalc*/2); t._calcColumnWidths(/*fullRecalc*/2);
return (nLastCols !== this.nColsCount || bIsMaxCols); return (nLastCols !== this.nColsCount || bIsMaxCols);
}, };
expandRowsOnScroll: function (isNotActive, updateRowsCount, newRowsCount) { WorksheetView.prototype.expandRowsOnScroll = function (isNotActive, updateRowsCount, newRowsCount) {
var t = this; var t = this;
var arn; var arn;
var bIsMaxRows = false; var bIsMaxRows = false;
...@@ -9195,9 +9189,9 @@ ...@@ -9195,9 +9189,9 @@
t._calcRowHeights(/*fullRecalc*/2); t._calcRowHeights(/*fullRecalc*/2);
return (nLastRows !== this.nRowsCount || bIsMaxRows); return (nLastRows !== this.nRowsCount || bIsMaxRows);
}, };
optimizeColWidth: function (col) { WorksheetView.prototype.optimizeColWidth = function (col) {
var t = this; var t = this;
var onChangeWidthCallback = function (isSuccess) { var onChangeWidthCallback = function (isSuccess) {
...@@ -9285,9 +9279,9 @@ ...@@ -9285,9 +9279,9 @@
t.changeWorksheet("update"); t.changeWorksheet("update");
}; };
return this._isLockedAll (onChangeWidthCallback); return this._isLockedAll (onChangeWidthCallback);
}, };
optimizeRowHeight: function (row) { WorksheetView.prototype.optimizeRowHeight = function (row) {
var t = this; var t = this;
var onChangeHeightCallback = function (isSuccess) { var onChangeHeightCallback = function (isSuccess) {
...@@ -9332,12 +9326,12 @@ ...@@ -9332,12 +9326,12 @@
t.changeWorksheet("update"); t.changeWorksheet("update");
}; };
return this._isLockedAll (onChangeHeightCallback); return this._isLockedAll (onChangeHeightCallback);
}, };
// ----- Search ----- // ----- Search -----
_setActiveCell: function (col, row) { WorksheetView.prototype._setActiveCell = function (col, row) {
var ar = this.activeRange, sc = ar.startCol, sr = ar.startRow, offs; var ar = this.activeRange, sc = ar.startCol, sr = ar.startRow, offs;
this.cleanSelection(); this.cleanSelection();
...@@ -9357,9 +9351,9 @@ ...@@ -9357,9 +9351,9 @@
this.handlers.trigger("selectionChanged", this.getSelectionInfo()); this.handlers.trigger("selectionChanged", this.getSelectionInfo());
} }
return offs; return offs;
}, };
findCellText: function (options) { WorksheetView.prototype.findCellText = function (options) {
var self = this; var self = this;
if (true !== options.isMatchCase) if (true !== options.isMatchCase)
options.text = options.text.toLowerCase(); options.text = options.text.toLowerCase();
...@@ -9470,9 +9464,9 @@ ...@@ -9470,9 +9464,9 @@
} }
} }
return undefined; return undefined;
}, };
replaceCellText: function (options) { WorksheetView.prototype.replaceCellText = function (options) {
var findFlags = "g"; // Заменяем все вхождения var findFlags = "g"; // Заменяем все вхождения
if (true !== options.isMatchCase) if (true !== options.isMatchCase)
findFlags += "i"; // Не чувствителен к регистру findFlags += "i"; // Не чувствителен к регистру
...@@ -9542,9 +9536,9 @@ ...@@ -9542,9 +9536,9 @@
return; return;
} }
this._replaceCellsText(aReplaceCells, valueForSearching, options); this._replaceCellsText(aReplaceCells, valueForSearching, options);
}, };
_replaceCellsText: function (aReplaceCells, valueForSearching, options) { WorksheetView.prototype._replaceCellsText = function (aReplaceCells, valueForSearching, options) {
var oSelectionHistory = this.activeRange.clone(); var oSelectionHistory = this.activeRange.clone();
History.Create_NewPoint(); History.Create_NewPoint();
History.StartTransaction(); History.StartTransaction();
...@@ -9553,9 +9547,9 @@ ...@@ -9553,9 +9547,9 @@
options.countFind = aReplaceCells.length; options.countFind = aReplaceCells.length;
options.countReplace = 0; options.countReplace = 0;
this._replaceCellText(aReplaceCells, valueForSearching, options); this._replaceCellText(aReplaceCells, valueForSearching, options);
}, };
_replaceCellText: function (aReplaceCells, valueForSearching, options) { WorksheetView.prototype._replaceCellText = function (aReplaceCells, valueForSearching, options) {
var t = this; var t = this;
if (options.indexInArray >= aReplaceCells.length) { if (options.indexInArray >= aReplaceCells.length) {
History.EndTransaction(); History.EndTransaction();
...@@ -9599,9 +9593,9 @@ ...@@ -9599,9 +9593,9 @@
}; };
this._isLockedCells (aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback); this._isLockedCells (aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback);
}, };
findCell: function(reference) { WorksheetView.prototype.findCell = function (reference) {
var t = this; var t = this;
var match = (/(?:R(\d+)C(\d+)|([A-Z]+[0-9]+))(?::(?:R(\d+)C(\d+)|([A-Z]+[0-9]+)))?/i).exec(reference); var match = (/(?:R(\d+)C(\d+)|([A-Z]+[0-9]+))(?::(?:R(\d+)C(\d+)|([A-Z]+[0-9]+)))?/i).exec(reference);
if (!match) {return null;} if (!match) {return null;}
...@@ -9630,24 +9624,24 @@ ...@@ -9630,24 +9624,24 @@
return !addr2 ? delta : return !addr2 ? delta :
t.changeSelectionEndPoint(addr2.getCol0() - addr1.getCol0(), addr2.getRow0() - addr1.getRow0(), t.changeSelectionEndPoint(addr2.getCol0() - addr1.getCol0(), addr2.getRow0() - addr1.getRow0(),
/*isCoord*/false, /*isSelectMode*/false); /*isCoord*/false, /*isSelectMode*/false);
}, };
// ----- Cell Editor ----- // ----- Cell Editor -----
setCellEditMode: function (isCellEditMode) { WorksheetView.prototype.setCellEditMode = function (isCellEditMode) {
this.isCellEditMode = isCellEditMode; this.isCellEditMode = isCellEditMode;
}, };
setFormulaEditMode: function (isFormulaEditMode) { WorksheetView.prototype.setFormulaEditMode = function (isFormulaEditMode) {
this.isFormulaEditMode = isFormulaEditMode; this.isFormulaEditMode = isFormulaEditMode;
}, };
getFormulaEditMode: function () { WorksheetView.prototype.getFormulaEditMode = function () {
return this.isFormulaEditMode; return this.isFormulaEditMode;
}, };
setSelectionDialogMode: function (isSelectionDialogMode, selectRange) { WorksheetView.prototype.setSelectionDialogMode = function (isSelectionDialogMode, selectRange) {
if (isSelectionDialogMode === this.isSelectionDialogMode) if (isSelectionDialogMode === this.isSelectionDialogMode)
return; return;
this.isSelectionDialogMode = isSelectionDialogMode; this.isSelectionDialogMode = isSelectionDialogMode;
...@@ -9675,18 +9669,18 @@ ...@@ -9675,18 +9669,18 @@
} }
this._drawSelection(); this._drawSelection();
}, };
// Получаем свойство: редактируем мы сейчас или нет // Получаем свойство: редактируем мы сейчас или нет
getCellEditMode: function () { WorksheetView.prototype.getCellEditMode = function () {
return this.isCellEditMode; return this.isCellEditMode;
}, };
_isFormula: function (val) { WorksheetView.prototype._isFormula = function (val) {
return val.length > 0 && val[0].text.length > 1 && val[0].text.charAt(0) === "=" ? true : false; return val.length > 0 && val[0].text.length > 1 && val[0].text.charAt(0) === "=" ? true : false;
}, };
getActiveCell: function (x, y, isCoord) { WorksheetView.prototype.getActiveCell = function (x, y, isCoord) {
var t = this; var t = this;
var col, row; var col, row;
if (isCoord) { if (isCoord) {
...@@ -9705,9 +9699,9 @@ ...@@ -9705,9 +9699,9 @@
// Проверим замерженность // Проверим замерженность
var mergedRange = this.model.getMergedByCell(row, col); var mergedRange = this.model.getMergedByCell(row, col);
return mergedRange ? mergedRange : asc_Range(col, row, col, row); return mergedRange ? mergedRange : asc_Range(col, row, col, row);
}, };
_saveCellValueAfterEdit: function (oCellEdit, c, val, flags, skipNLCheck, isNotHistory) { WorksheetView.prototype._saveCellValueAfterEdit = function (oCellEdit, c, val, flags, skipNLCheck, isNotHistory) {
var t = this; var t = this;
var oldMode = t.isFormulaEditMode; var oldMode = t.isFormulaEditMode;
t.isFormulaEditMode = false; t.isFormulaEditMode = false;
...@@ -9760,9 +9754,9 @@ ...@@ -9760,9 +9754,9 @@
// если вернуть false, то редактор не закроется // если вернуть false, то редактор не закроется
return true; return true;
}, };
openCellEditor: function (editor, x, y, isCoord, fragments, cursorPos, isFocus, isClearCell, WorksheetView.prototype.openCellEditor = function (editor, x, y, isCoord, fragments, cursorPos, isFocus, isClearCell,
isHideCursor, activeRange) { isHideCursor, activeRange) {
var t = this, vr = t.visibleRange, tc = t.cols, tr = t.rows, col, row, c, fl, mc, bg; var t = this, vr = t.visibleRange, tc = t.cols, tr = t.rows, col, row, c, fl, mc, bg;
var offsetFrozen = t.getFrozenPaneOffset(); var offsetFrozen = t.getFrozenPaneOffset();
...@@ -9906,9 +9900,9 @@ ...@@ -9906,9 +9900,9 @@
} }
}); });
return true; return true;
}, };
openCellEditorWithText: function (editor, text, cursorPos, isFocus, activeRange) { WorksheetView.prototype.openCellEditorWithText = function (editor, text, cursorPos, isFocus, activeRange) {
var t = this; var t = this;
var ar = (activeRange) ? activeRange : t.activeRange; var ar = (activeRange) ? activeRange : t.activeRange;
var c = t._getVisibleCell(ar.startCol, ar.startRow); var c = t._getVisibleCell(ar.startCol, ar.startRow);
...@@ -9928,9 +9922,9 @@ ...@@ -9928,9 +9922,9 @@
editor.paste(copyValue, cursorPos); editor.paste(copyValue, cursorPos);
} }
return bSuccess; return bSuccess;
}, };
_updateCellsRange: function (range, canChangeColWidth, lockDraw) { WorksheetView.prototype._updateCellsRange = function (range, canChangeColWidth, lockDraw) {
var t = this, r, c, h, d, ct; var t = this, r, c, h, d, ct;
var mergedRange, bUpdateRowHeight; var mergedRange, bUpdateRowHeight;
...@@ -10005,9 +9999,9 @@ ...@@ -10005,9 +9999,9 @@
t.objectRender.rebuildChartGraphicObjects(t.activeRange.clone(true)); t.objectRender.rebuildChartGraphicObjects(t.activeRange.clone(true));
t.cellCommentator.updateCommentPosition(); t.cellCommentator.updateCommentPosition();
t.draw(lockDraw); t.draw(lockDraw);
}, };
enterCellRange: function (editor) { WorksheetView.prototype.enterCellRange = function (editor) {
var t = this; var t = this;
if (!t.isFormulaEditMode) if (!t.isFormulaEditMode)
...@@ -10019,9 +10013,9 @@ ...@@ -10019,9 +10013,9 @@
editor.enterCellRange(s); editor.enterCellRange(s);
return true; return true;
}, };
changeCellRange: function(editor,range){ WorksheetView.prototype.changeCellRange = function (editor,range){
var s = this.getActiveRange(range); var s = this.getActiveRange(range);
if( range.isAbsolute ){ if( range.isAbsolute ){
var ra = range.isAbsolute.split(":"), _s; var ra = range.isAbsolute.split(":"), _s;
...@@ -10050,27 +10044,27 @@ ...@@ -10050,27 +10044,27 @@
} }
editor.changeCellRange(range,s); editor.changeCellRange(range,s);
return true; return true;
}, };
getActiveRange: function (ar) { WorksheetView.prototype.getActiveRange = function (ar) {
if (ar.c1 === ar.c2 && ar.r1 === ar.r2) {return this._getCellTitle(ar.c1, ar.r1);} if (ar.c1 === ar.c2 && ar.r1 === ar.r2) {return this._getCellTitle(ar.c1, ar.r1);}
if (ar.c1 === ar.c2 && ar.r1 === 0 && ar.r2 === this.rows.length -1) {var ct = this._getColumnTitle(ar.c1); return ct + ":" + ct;} if (ar.c1 === ar.c2 && ar.r1 === 0 && ar.r2 === this.rows.length -1) {var ct = this._getColumnTitle(ar.c1); return ct + ":" + ct;}
if (ar.r1 === ar.r2 && ar.c1 === 0 && ar.c2 === this.cols.length -1) {var rt = this._getRowTitle(ar.r1); return rt + ":" + rt;} if (ar.r1 === ar.r2 && ar.c1 === 0 && ar.c2 === this.cols.length -1) {var rt = this._getRowTitle(ar.r1); return rt + ":" + rt;}
if (ar.r1 === 0 && ar.r2 === gc_nMaxRow0 || ar.r1 === 1 && ar.r2 === gc_nMaxRow ){return this._getColumnTitle(ar.c1) + ":" + this._getColumnTitle(ar.c2);} if (ar.r1 === 0 && ar.r2 === gc_nMaxRow0 || ar.r1 === 1 && ar.r2 === gc_nMaxRow ){return this._getColumnTitle(ar.c1) + ":" + this._getColumnTitle(ar.c2);}
if (ar.c1 === 0 && ar.c2 === gc_nMaxCol0 || ar.c1 === 1 && ar.c2 === gc_nMaxCol ){return this._getRowTitle(ar.r1) + ":" + this._getRowTitle(ar.r2);} if (ar.c1 === 0 && ar.c2 === gc_nMaxCol0 || ar.c1 === 1 && ar.c2 === gc_nMaxCol ){return this._getRowTitle(ar.r1) + ":" + this._getRowTitle(ar.r2);}
return this._getCellTitle(ar.c1, ar.r1) + ":" + this._getCellTitle(ar.c2, ar.r2); return this._getCellTitle(ar.c1, ar.r1) + ":" + this._getCellTitle(ar.c2, ar.r2);
}, };
addFormulaRange: function (range) { WorksheetView.prototype.addFormulaRange = function (range) {
var r = range !== undefined ? range : this.activeRange.clone(true); var r = range !== undefined ? range : this.activeRange.clone(true);
if (r.startCol === undefined || r.startRow === undefined) { if (r.startCol === undefined || r.startRow === undefined) {
r.startCol = r.c1; r.startCol = r.c1;
r.startRow = r.r1; r.startRow = r.r1;
} }
this.arrActiveFormulaRanges.push(r); this.arrActiveFormulaRanges.push(r);
}, };
changeFormulaRange: function (range) { WorksheetView.prototype.changeFormulaRange = function (range) {
for (var i = 0; i < this.arrActiveFormulaRanges.length; ++i) { for (var i = 0; i < this.arrActiveFormulaRanges.length; ++i) {
if (this.arrActiveFormulaRanges[i].isEqual(range)) { if (this.arrActiveFormulaRanges[i].isEqual(range)) {
var r = this.arrActiveFormulaRanges[i]; var r = this.arrActiveFormulaRanges[i];
...@@ -10079,14 +10073,14 @@ ...@@ -10079,14 +10073,14 @@
return; return;
} }
} }
}, };
cleanFormulaRanges: function () { WorksheetView.prototype.cleanFormulaRanges = function () {
// Очищаем массив ячеек для текущей формулы // Очищаем массив ячеек для текущей формулы
this.arrActiveFormulaRanges = []; this.arrActiveFormulaRanges = [];
}, };
addAutoFilter: function (lTable, addFormatTableOptionsObj) { WorksheetView.prototype.addAutoFilter = function (lTable, addFormatTableOptionsObj) {
var t = this; var t = this;
var ar = t.activeRange.clone(true); var ar = t.activeRange.clone(true);
var onChangeAutoFilterCallback = function (isSuccess) { var onChangeAutoFilterCallback = function (isSuccess) {
...@@ -10096,9 +10090,9 @@ ...@@ -10096,9 +10090,9 @@
t.autoFilters.addAutoFilter(lTable, ar, undefined, false, addFormatTableOptionsObj); t.autoFilters.addAutoFilter(lTable, ar, undefined, false, addFormatTableOptionsObj);
}; };
this._isLockedAll (onChangeAutoFilterCallback); this._isLockedAll (onChangeAutoFilterCallback);
}, };
applyAutoFilter: function (type, autoFilterObject) { WorksheetView.prototype.applyAutoFilter = function (type, autoFilterObject) {
var t = this; var t = this;
var ar = t.activeRange.clone(true); var ar = t.activeRange.clone(true);
var onChangeAutoFilterCallback = function (isSuccess) { var onChangeAutoFilterCallback = function (isSuccess) {
...@@ -10108,9 +10102,9 @@ ...@@ -10108,9 +10102,9 @@
t.autoFilters.applyAutoFilter(type, autoFilterObject, ar); t.autoFilters.applyAutoFilter(type, autoFilterObject, ar);
}; };
this._isLockedAll (onChangeAutoFilterCallback); this._isLockedAll (onChangeAutoFilterCallback);
}, };
sortColFilter: function (type,cellId) { WorksheetView.prototype.sortColFilter = function (type,cellId) {
var t = this; var t = this;
var ar = this.activeRange.clone(true); var ar = this.activeRange.clone(true);
var onChangeAutoFilterCallback = function (isSuccess) { var onChangeAutoFilterCallback = function (isSuccess) {
...@@ -10120,14 +10114,14 @@ ...@@ -10120,14 +10114,14 @@
t.autoFilters.sortColFilter(type, cellId, ar); t.autoFilters.sortColFilter(type, cellId, ar);
}; };
this._isLockedAll (onChangeAutoFilterCallback); this._isLockedAll (onChangeAutoFilterCallback);
}, };
getAddFormatTableOptions: function () { WorksheetView.prototype.getAddFormatTableOptions = function () {
var ar = this.activeRange.clone(true); var ar = this.activeRange.clone(true);
return this.autoFilters.getAddFormatTableOptions(ar); return this.autoFilters.getAddFormatTableOptions(ar);
}, };
_loadFonts: function (fontArr, callback) { WorksheetView.prototype._loadFonts = function (fontArr, callback) {
var originFonts = []; var originFonts = [];
var i, n, k = 0; var i, n, k = 0;
for (i = 0; i < fontArr.length ;++i) { for (i = 0; i < fontArr.length ;++i) {
...@@ -10140,11 +10134,8 @@ ...@@ -10140,11 +10134,8 @@
} }
var api = window["Asc"]["editor"]; var api = window["Asc"]["editor"];
api._loadFonts(originFonts, callback); api._loadFonts(originFonts, callback);
}
}; };
/* /*
* Export * Export
* ----------------------------------------------------------------------------- * -----------------------------------------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment