Commit bfbb5ed1 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Поправил баг http://bugzserver/show_bug.cgi?id=25065 и http://bugzserver/show_bug.cgi?id=24645

Для merge ячейки не правильно рассчитывалось DigitsCount

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57332 954022d7-b5bf-4e40-9824-e11837661b57
parent 822822c0
...@@ -814,6 +814,29 @@ ...@@ -814,6 +814,29 @@
return result; return result;
} }
function isFixedWidthCell(frag) {
for (var i = 0; i < frag.length; ++i) {
var f = frag[i].format;
if (f && f.repeat) {return true;}
}
return false;
}
function truncFracPart(frag) {
var s = frag.reduce(function (prev,val) {return prev + val.text;}, "");
// Проверка scientific format
if (s.search(/E/i) >= 0) {
return frag;
}
// Поиск десятичной точки
var pos = s.search(/[,\.]/);
if (pos >= 0) {
frag[0].text = s.slice(0, pos);
frag.splice(1, frag.length - 1);
}
return frag;
}
//----------------------------------------------------------------- //-----------------------------------------------------------------
// События движения мыши // События движения мыши
//----------------------------------------------------------------- //-----------------------------------------------------------------
...@@ -1462,6 +1485,8 @@ ...@@ -1462,6 +1485,8 @@
window["Asc"].trim = trim; window["Asc"].trim = trim;
window["Asc"].extendClass = extendClass; window["Asc"].extendClass = extendClass;
window["Asc"].arrayToLowerCase = arrayToLowerCase; window["Asc"].arrayToLowerCase = arrayToLowerCase;
window["Asc"].isFixedWidthCell = isFixedWidthCell;
window["Asc"].truncFracPart = truncFracPart;
window["Asc"].Range = Range; window["Asc"].Range = Range;
window["Asc"].ActiveRange = ActiveRange; window["Asc"].ActiveRange = ActiveRange;
......
...@@ -455,7 +455,7 @@ ...@@ -455,7 +455,7 @@
* @param {String|Array} str A simple string or array of formatted strings {text:"", format:{}} * @param {String|Array} str A simple string or array of formatted strings {text:"", format:{}}
* @param {Object} flags Optional. Text flags {wrapText, shrinkToFit, isMerged, textAlign} * @param {Object} flags Optional. Text flags {wrapText, shrinkToFit, isMerged, textAlign}
* @param {Number} maxWidth Optional. Text width restriction * @param {Number} maxWidth Optional. Text width restriction
* @return {TextMetrics} Returns text metrics or null. @see Asc.TextMetrics * @return {Asc.TextMetrics} Returns text metrics or null. @see Asc.TextMetrics
*/ */
StringRender.prototype.measureString = function(str, flags, maxWidth) { StringRender.prototype.measureString = function(str, flags, maxWidth) {
if (str !== undefined) { if (str !== undefined) {
...@@ -936,7 +936,7 @@ ...@@ -936,7 +936,7 @@
/** /**
* @param {Number} maxWidth * @param {Number} maxWidth
* @return {TextMetrics} * @return {Asc.TextMetrics}
*/ */
StringRender.prototype._doMeasure = function(maxWidth) { StringRender.prototype._doMeasure = function(maxWidth) {
var tm = this._measureChars(maxWidth); var tm = this._measureChars(maxWidth);
......
...@@ -4229,31 +4229,29 @@ ...@@ -4229,31 +4229,29 @@
return undefined; return undefined;
}; };
WorksheetView.prototype._addCellTextToCache = function (col, row, canChangeColWidth) { WorksheetView.prototype._changeColWidth = function (col, width, pad) {
var self = this; var cc = Math.min(this._colWidthToCharCount(width + pad), /*max col width*/255);
var modelw = this._charCountToModelColWidth(cc, true);
var colw = this._calcColWidth(modelw);
function isFixedWidthCell(frag) { if (colw.width > this.cols[col].width) {
for (var i = 0; i < frag.length; ++i) { this.cols[col].width = colw.width;
var f = frag[i].format; this.cols[col].innerWidth = colw.innerWidth;
if (f && f.repeat) {return true;} this.cols[col].charCount = colw.charCount;
}
return false;
}
function truncFracPart(frag) { History.Create_NewPoint();
var s = frag.reduce(function (prev,val) {return prev + val.text;}, ""); History.StartTransaction();
// Проверка scientific format // Выставляем, что это bestFit
if (s.search(/E/i) >= 0) { this.model.setColBestFit (true, modelw, col, col);
return frag; History.EndTransaction();
}
// Поиск десятичной точки this._updateColumnPositions();
var pos = s.search(/[,\.]/); this.isChanged = true;
if (pos >= 0) { }
frag[0].text = s.slice(0, pos); };
frag.splice(1, frag.length - 1);
} WorksheetView.prototype._addCellTextToCache = function (col, row, canChangeColWidth) {
return frag; var self = this;
}
function makeFnIsGoodNumFormat(flags, width) { function makeFnIsGoodNumFormat(flags, width) {
return function (str) { return function (str) {
...@@ -4261,27 +4259,6 @@ ...@@ -4261,27 +4259,6 @@
}; };
} }
function changeColWidth(col, width, pad) {
var cc = Math.min(self._colWidthToCharCount(width + pad), /*max col width*/255);
var modelw = self._charCountToModelColWidth(cc, true);
var colw = self._calcColWidth(modelw);
if (colw.width > self.cols[col].width) {
self.cols[col].width = colw.width;
self.cols[col].innerWidth = colw.innerWidth;
self.cols[col].charCount = colw.charCount;
History.Create_NewPoint();
History.StartTransaction();
// Выставляем, что это bestFit
self.model.setColBestFit (true, modelw, col, col);
History.EndTransaction();
self._updateColumnPositions();
self.isChanged = true;
}
}
var c = this._getCell(col, row); var c = this._getCell(col, row);
if (null === c) {return col;} if (null === c) {return col;}
...@@ -4333,17 +4310,17 @@ ...@@ -4333,17 +4310,17 @@
// Измеряем целую часть числа // Измеряем целую часть числа
sstr = c.getValue2(gc_nMaxDigCountView, function(){return true;}); sstr = c.getValue2(gc_nMaxDigCountView, function(){return true;});
if ("General" === numFormatStr) { if ("General" === numFormatStr) {
// truncFracPart изменяет исходный массив, поэтому клонируем // asc.truncFracPart изменяет исходный массив, поэтому клонируем
var fragmentsTmp = []; var fragmentsTmp = [];
for (var k = 0; k < sstr.length; ++k) for (var k = 0; k < sstr.length; ++k)
fragmentsTmp.push(sstr[k].clone()); fragmentsTmp.push(sstr[k].clone());
sstr = truncFracPart(fragmentsTmp); sstr = asc.truncFracPart(fragmentsTmp);
} }
sfl = fl.clone(); sfl = fl.clone();
sfl.wrapText = false; sfl.wrapText = false;
stm = this._roundTextMetrics( this.stringRender.measureString(sstr, sfl, colWidth) ); stm = this._roundTextMetrics( this.stringRender.measureString(sstr, sfl, colWidth) );
// Если целая часть числа не убирается в ячейку, то расширяем столбец // Если целая часть числа не убирается в ячейку, то расширяем столбец
if (stm.width > colWidth) {changeColWidth(col, stm.width, pad);} if (stm.width > colWidth) {this._changeColWidth(col, stm.width, pad);}
// Обновленная ячейка // Обновленная ячейка
dDigitsCount = this.cols[col].charCount; dDigitsCount = this.cols[col].charCount;
colWidth = this.cols[col].innerWidth; colWidth = this.cols[col].innerWidth;
...@@ -4357,7 +4334,7 @@ ...@@ -4357,7 +4334,7 @@
sstr = c.getValue2(gc_nMaxDigCountView, function(){return true;}); sstr = c.getValue2(gc_nMaxDigCountView, function(){return true;});
stm = this._roundTextMetrics( this.stringRender.measureString(sstr, fl, colWidth) ); stm = this._roundTextMetrics( this.stringRender.measureString(sstr, fl, colWidth) );
if (stm.width > colWidth) { if (stm.width > colWidth) {
changeColWidth(col, stm.width, pad); this._changeColWidth(col, stm.width, pad);
// Обновленная ячейка // Обновленная ячейка
dDigitsCount = this.cols[col].charCount; dDigitsCount = this.cols[col].charCount;
colWidth = this.cols[col].innerWidth; colWidth = this.cols[col].innerWidth;
...@@ -4367,9 +4344,9 @@ ...@@ -4367,9 +4344,9 @@
// Замерженная ячейка, нужна сумма столбцов // Замерженная ячейка, нужна сумма столбцов
for (var i = mc.c1; i <= mc.c2 && i < this.nColsCount; ++i) { for (var i = mc.c1; i <= mc.c2 && i < this.nColsCount; ++i) {
colWidth += this.cols[i].width; colWidth += this.cols[i].width;
dDigitsCount += this.cols[i].charCount;
} }
colWidth -= pad; colWidth -= pad;
dDigitsCount = gc_nMaxDigCountView;
} }
// ToDo dDigitsCount нужно рассчитывать исходя не из дефалтового шрифта и размера, а исходя из текущего шрифта и размера ячейки // ToDo dDigitsCount нужно рассчитывать исходя не из дефалтового шрифта и размера, а исходя из текущего шрифта и размера ячейки
...@@ -4377,7 +4354,7 @@ ...@@ -4377,7 +4354,7 @@
var str = c.getValue2(dDigitsCount, makeFnIsGoodNumFormat(fl, colWidth)); var str = c.getValue2(dDigitsCount, makeFnIsGoodNumFormat(fl, colWidth));
var ha = c.getAlignHorizontalByValue().toLowerCase(); var ha = c.getAlignHorizontalByValue().toLowerCase();
var va = c.getAlignVertical().toLowerCase(); var va = c.getAlignVertical().toLowerCase();
var maxW = fl.wrapText || fl.shrinkToFit || isMerged || isFixedWidthCell(str) ? this._calcMaxWidth(col, row, mc) : undefined; var maxW = fl.wrapText || fl.shrinkToFit || isMerged || asc.isFixedWidthCell(str) ? this._calcMaxWidth(col, row, mc) : undefined;
var tm = this._roundTextMetrics( this.stringRender.measureString(str, fl, maxW) ); var tm = this._roundTextMetrics( this.stringRender.measureString(str, fl, maxW) );
var angle = c.getAngle(); var angle = c.getAngle();
var cto = (isMerged || fl.wrapText) ? var cto = (isMerged || fl.wrapText) ?
......
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