Commit ce119bed authored by konovalovsergey's avatar konovalovsergey

corrected tests, simplify shift and move, add F9 calcAll

parent 4d0c2412
......@@ -14,7 +14,7 @@
<script type="text/javascript" src="../../../web-apps/apps/spreadsheeteditor/sdk_dev_scripts.js"></script>
<script>
window.sdk_dev_scrpipts.forEach(function(item){
document.write('<script type="text/javascript" src="' + item + '"><\/script>');
document.write('<script type="text/javascript" src="' + item.substring('../'.length) + '"><\/script>');
});
</script>
......
......@@ -862,15 +862,15 @@ $( function () {
oParser = new parserFormula( "Лист2!A2", "A1", ws );
ok( oParser.parse() );
// strictEqual( oParser.parse(), true)
strictEqual( oParser.changeSheet( "Лист2", "Лист3" ).assemble(), "Лист3!A2" );
strictEqual( oParser.renameSheet( "Лист2", "Лист3" ).assemble(), "Лист3!A2" );
oParser = new parserFormula( "Лист2:Лист3!A2", "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.changeSheet( "Лист2", "Лист1" ).assemble(), "Лист1:Лист3!A2" );
strictEqual( oParser.renameSheet( "Лист2", "Лист1" ).assemble(), "Лист1:Лист3!A2" );
oParser = new parserFormula( "Лист2!A2:A5", "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.changeSheet( "Лист2", "Лист3" ).assemble(), "Лист3!A2:A5" );
strictEqual( oParser.renameSheet( "Лист2", "Лист3" ).assemble(), "Лист3!A2:A5" );
ws = wb.getWorksheet( 0 );
ws.getRange2( "S95" ).setValue( "2" );
......@@ -1268,8 +1268,6 @@ $( function () {
test( "Test: \"TEXT\"", function () {
wb.dependencyFormulas = new AscCommonExcel.DependencyGraph( wb );
oParser = new parserFormula( "TEXT(1234.567,\"$0.00\")", "A2", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), "$1234.57" );
......@@ -1282,8 +1280,6 @@ $( function () {
test( "Test: \"WORKDAY\"", function () {
wb.dependencyFormulas = new AscCommonExcel.DependencyGraph( wb );
oParser = new parserFormula( "WORKDAY(DATE(2006,1,1),0)", "A2", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), 38718 );
......
......@@ -12,16 +12,12 @@
<script type="text/javascript" src="../../../web-apps/vendor/xregexp/xregexp-all-min.js"></script>
<script type="text/javascript" src="../utils/utils.js"></script>
<script type="text/javascript" src="../model/Workbook.js"></script>
<script type="text/javascript" src="../model/WorkbookElems.js"></script>
<script type="text/javascript" src="../model/Serialize.js"></script>
<script type="text/javascript" >
AscCommonExcel.g_oDefaultFormat.FontAbs = {};
</script>
<script type="text/javascript" src="../model/FormulaObjects/parserFormula.js"></script>
<script type="text/javascript" src="../../Common/commonDefines.js"></script>
<script type="text/javascript" src="../../Common/NumFormat.js"></script>
<script type="text/javascript" src="../../../web-apps/apps/spreadsheeteditor/sdk_dev_scripts.js"></script>
<script>
window.sdk_dev_scrpipts.forEach(function(item){
document.write('<script type="text/javascript" src="' + item.substring('../'.length) + '"><\/script>');
});
</script>
<script type="text/javascript" src="CellFormatTests.js"></script>
......
......@@ -10,9 +10,14 @@
<link rel="stylesheet" href="qunit/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="qunit/qunit.js"></script>
<script type="text/javascript" src="../utils/utils.js"></script>
<script type="text/javascript" src="../../../web-apps/vendor/xregexp/xregexp-all-min.js"></script>
<script type="text/javascript" src="../../../web-apps/apps/spreadsheeteditor/sdk_dev_scripts.js"></script>
<script>
window.sdk_dev_scrpipts.forEach(function(item){
document.write('<script type="text/javascript" src="' + item.substring('../'.length) + '"><\/script>');
});
</script>
<script type="text/javascript" src="tests.js"></script>
</head>
......
......@@ -12,16 +12,12 @@
<script type="text/javascript" src="../../../web-apps/vendor/xregexp/xregexp-all-min.js"></script>
<script type="text/javascript" src="../utils/utils.js"></script>
<script type="text/javascript" src="../model/Workbook.js"></script>
<script type="text/javascript" src="../model/WorkbookElems.js"></script>
<script type="text/javascript" src="../model/Serialize.js"></script>
<script type="text/javascript" >
AscCommonExcel.g_oDefaultFormat.FontAbs = {};
</script>
<script type="text/javascript" src="../model/FormulaObjects/parserFormula.js"></script>
<script type="text/javascript" src="../../Common/commonDefines.js"></script>
<script type="text/javascript" src="../../Common/NumFormat.js"></script>
<script type="text/javascript" src="../../../web-apps/apps/spreadsheeteditor/sdk_dev_scripts.js"></script>
<script>
window.sdk_dev_scrpipts.forEach(function(item){
document.write('<script type="text/javascript" src="' + item.substring('../'.length) + '"><\/script>');
});
</script>
<script type="text/javascript" src="testsForFWB.html.js"></script>
......
......@@ -3540,7 +3540,7 @@ _func[cElementType.cell][cElementType.cell] = function ( arg0, arg1, what, cellA
_func[cElementType.cellsRange3D] = _func[cElementType.cellsRange];
_func[cElementType.cell3D] = _func[cElementType.cell];
var lastListenerId = 0;
/** класс отвечающий за парсинг строки с формулой, подсчета формулы, перестройки формулы при манипуляции с ячейкой*/
/** @constructor */
function parserFormula( formula, parent, _ws ) {
......@@ -3566,7 +3566,7 @@ function parserFormula( formula, parent, _ws ) {
this.regSpace = /\$/g;
this.countRef = 0;
this.listenerId = null;
this.listenerId = lastListenerId++;
this.isDirty = false;
this.isCalculate = false;
this.parent = parent;
......@@ -3577,9 +3577,6 @@ function parserFormula( formula, parent, _ws ) {
parserFormula.prototype.getListenerId = function() {
return this.listenerId;
};
parserFormula.prototype.setListenerId = function(listenerId) {
this.listenerId = listenerId;
};
parserFormula.prototype.getIsDirty = function() {
return this.isDirty;
};
......@@ -3612,14 +3609,15 @@ function parserFormula( formula, parent, _ws ) {
this.Formula = this.assemble();
} else if (AscCommon.c_oNotifyType.ChangeSheet === data.type) {
if (this.is3D) {
if (data.insert) {
this.insertSheet(data.insert);
} else if (data.replace) {
this.moveSheet(data.replace);
} else if (data.rename) {
this.renameSheet(data.rename.from, data.rename.to);
} else if (data.remove) {
this.removeSheet(data.remove);
var changeData = data.data;
if (changeData.insert) {
this.insertSheet(changeData.insert);
} else if (changeData.replace) {
this.moveSheet(changeData.replace);
} else if (changeData.rename) {
this.renameSheet(changeData.rename.from, changeData.rename.to);
} else if (changeData.remove) {
this.removeSheet(changeData.remove);
}
}
}
......@@ -4409,6 +4407,7 @@ parserFormula.prototype.getRef = function() {
this.Formula = this.assemble();
};
parserFormula.prototype.shiftCells2 = function(notifyType, sheetId, bbox, offset) {
this.removeDependencies();
var isHor = 0 != offset.offsetCol;
var oShiftGetBBox;
if (AscCommon.c_oNotifyType.Shift == notifyType) {
......@@ -4464,6 +4463,7 @@ parserFormula.prototype.getRef = function() {
}
}
}
this.buildDependencies();
this.Formula = this.assemble();
};
parserFormula.prototype.renameSheet = function(lastName, newName) {
......@@ -4476,6 +4476,7 @@ parserFormula.prototype.getRef = function() {
}
}
this.Formula = this.assemble();
return this;
};
parserFormula.prototype.removeSheet = function(sheetId) {
var ws = this.wb.getWorksheetById(sheetId);
......
......@@ -177,8 +177,6 @@ function getRangeType(oBBox){
}
}
var lastListenerId = 0;
function DefName(wb, name, ref, sheetId, hidden, isTable) {
this.wb = wb;
this.name = name;
......@@ -268,10 +266,6 @@ function getRangeType(oBBox){
startListeningRange: function(sheetId, bbox, listener) {
//todo bbox clone or bbox immutable
var listenerId = listener.getListenerId();
if (!listenerId) {
listenerId = lastListenerId++;
listener.setListenerId(listenerId);
}
var sheetContainer = this.sheetListeners[sheetId];
if (!sheetContainer) {
sheetContainer = {cellMap: {}, areaMap: {}, areaTree: new RangeTree()};
......@@ -334,10 +328,6 @@ function getRangeType(oBBox){
},
startListeningVolatile: function(listener) {
var listenerId = listener.getListenerId();
if (!listenerId) {
listenerId = lastListenerId++;
listener.setListenerId(listenerId);
}
this.volatileListeners[listenerId] = listener;
},
endListeningVolatile: function(listener) {
......@@ -348,10 +338,6 @@ function getRangeType(oBBox){
},
startListeningDefName: function(name, listener) {
var listenerId = listener.getListenerId();
if (!listenerId) {
listenerId = lastListenerId++;
listener.setListenerId(listenerId);
}
var nameIndex = getDefNameIndex(name);
var container = this.defNameListeners[nameIndex];
if (!container) {
......@@ -847,6 +833,29 @@ function getRangeType(oBBox){
console.timeEnd('cleanCellCache');
console.timeEnd('all');
},
calcAll: function(sheetId){
var worksheets = [];
if (sheetId) {
worksheets.push(this.wb.getWorksheetById(sheetId));
} else {
var wsCount = this.wb.getWorksheetCount();
for (var i = 0; i < wsCount; ++i) {
worksheets.push(this.wb.getWorksheet(i));
}
}
for (var i = 0; i < worksheets.length; ++i) {
var ws = worksheets[i];
if (ws) {
var cwf = ws.getCWF();
for (var i in cwf) {
var ca = g_oCellAddressUtils.getCellAddress(i);
var c = ws._getCellNoEmpty(ca.getRow0(), ca.getCol0());
this.addToChangedCell(c);
}
}
}
this.calcTree();
},
//internal
_delDefName: function(name, sheetId) {
var res = null;
......@@ -988,38 +997,24 @@ function getRangeType(oBBox){
},
_shiftMoveDelete: function(notifyType, sheetId, bbox, offset) {
var isHor = offset && 0 != offset.offsetCol;
var toDelete;
var oShiftGetBBox;
if (AscCommon.c_oNotifyType.Shift == notifyType) {
toDelete = (offset.offsetCol < 0 || offset.offsetRow < 0);
oShiftGetBBox = AscCommonExcel.shiftGetBBox(bbox, isHor);
} else if (AscCommon.c_oNotifyType.Move == notifyType) {
toDelete = false;
oShiftGetBBox = bbox;
} else if (AscCommon.c_oNotifyType.Delete == notifyType) {
toDelete = true;
} else if (AscCommon.c_oNotifyType.Move == notifyType || AscCommon.c_oNotifyType.Delete == notifyType) {
oShiftGetBBox = bbox;
}
var sheetContainer = this.sheetListeners[sheetId];
if (sheetContainer) {
var listeners = {};
var changeCellMap = {};
for (var cellIndex in sheetContainer.cellMap) {
getFromCellIndex(cellIndex);
if (oShiftGetBBox.contains(g_FCI.col, g_FCI.row)) {
var cellMapElem = sheetContainer.cellMap[cellIndex];
delete sheetContainer.cellMap[cellIndex];
if (AscCommon.c_oNotifyType.Delete != notifyType &&
!(toDelete && bbox.contains(g_FCI.col, g_FCI.row))) {
changeCellMap[getCellIndex(g_FCI.row + offset.offsetRow, g_FCI.col + offset.offsetCol)] =
cellMapElem;
}
for (var listenerId in cellMapElem.listeners) {
listeners[listenerId] = cellMapElem.listeners[listenerId];
}
}
}
var changeAreaMap = {};
for (var areaIndex in sheetContainer.areaMap) {
var areaMapElem = sheetContainer.areaMap[areaIndex];
var isIntersect;
......@@ -1029,76 +1024,16 @@ function getRangeType(oBBox){
isIntersect = oShiftGetBBox.containsRange(areaMapElem.bbox);
}
if (isIntersect) {
sheetContainer.areaTree.remove(areaMapElem.bbox, areaMapElem);
delete sheetContainer.areaMap[areaIndex];
var isNoDelete;
if (AscCommon.c_oNotifyType.Shift == notifyType) {
isNoDelete = areaMapElem.bbox.forShift(bbox, offset);
} else if (AscCommon.c_oNotifyType.Move == notifyType) {
isNoDelete = true;
areaMapElem.bbox.setOffset(offset);
} else if (AscCommon.c_oNotifyType.Delete == notifyType) {
isNoDelete = false;
}
if (isNoDelete) {
if (areaMapElem.bbox.isOneCell()) {
var cellIndex = getCellIndex(areaMapElem.bbox.r1, areaMapElem.bbox.c1);
var changeCellMapElem = changeCellMap[cellIndex];
if (changeCellMapElem) {
this._mergeListeners(areaMapElem, changeCellMapElem);
} else {
changeCellMap[cellIndex] =
{count: areaMapElem.count, listeners: areaMapElem.listeners};
}
} else {
var newAreaIndex = getVertexIndex(areaMapElem.bbox);
var changeAreaMapElem = changeAreaMap[newAreaIndex];
if (changeAreaMapElem) {
this._mergeListeners(areaMapElem, changeAreaMapElem);
} else {
changeAreaMap[newAreaIndex] = areaMapElem;
}
}
}
for (var listenerId in areaMapElem.listeners) {
listeners[listenerId] = areaMapElem.listeners[listenerId];
}
}
}
for (var cellIndex in changeCellMap) {
var changeCellMapElem = changeCellMap[cellIndex];
var cellMapElem = sheetContainer.cellMap[cellIndex];
if (cellMapElem) {
this._mergeListeners(changeCellMapElem, cellMapElem);
} else {
sheetContainer.cellMap[cellIndex] = changeCellMapElem;
}
}
for (var areaIndex in changeAreaMap) {
var changeAreaMapElem = changeAreaMap[areaIndex];
var areaMapElem = sheetContainer.areaMap[areaIndex];
if (areaMapElem) {
this._mergeListeners(changeAreaMapElem, areaMapElem);
} else {
sheetContainer.areaMap[areaIndex] = changeAreaMapElem;
sheetContainer.areaTree.add(changeAreaMapElem.bbox, changeAreaMapElem);
}
}
var notifyData = {type: notifyType, sheetId: sheetId, bbox: bbox, offset: offset};
for (var listenerId in listeners) {
listeners[listenerId].notify(notifyData);
}
}
},
_mergeListeners: function(from, to) {
//обьединяем listener
for (var listenerId in from.listeners) {
if (!to.listeners[listenerId]) {
to.listeners[listenerId] = from.listeners[listenerId];
to.count++;
}
}
}
};
......@@ -8182,7 +8117,7 @@ function _promoteFromTo(from, wsFrom, to, wsTo, bIsPromote, oCanPromote, bCtrl,
oCopyCell.formulaParsed = oFromCell.formulaParsed.clone(null, oCopyCell, this);
oCopyCell.formulaParsed.changeOffset(oCopyCell.getOffset2(oFromCell.getName()));
oCopyCell.formulaParsed.Formula = oCopyCell.formulaParsed.assemble();
this.worksheet.workbook.dependencyFormulas.addToChangedCell(oCopyCell);
wb.dependencyFormulas.addToChangedCell(oCopyCell);
}
}
}
......
......@@ -729,6 +729,9 @@
t.skipKeyPress = true;
switch (event.which) {
case 120: // F9
t.handlers.trigger("calcAll", shiftKey);
return result;
case 113: // F2
if (isViewerMode || t.handlers.trigger("getCellEditMode") || t.isSelectionDialogMode || graphicObjects.length) {return true;}
......
......@@ -463,7 +463,17 @@
// FormatPainter
'isFormatPainter': function () {
return self.stateFormatPainter;
}
},
//calcAll
'calcAll': function (shiftKey) {
if(shiftKey){
var ws = self.model.getActiveWs();
self.model.dependencyFormulas.calcAll(ws.getId());
} else {
self.model.dependencyFormulas.calcAll();
}
},
});
if (this.input && this.input.addEventListener) {
......
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