Commit ce119bed authored by konovalovsergey's avatar konovalovsergey

corrected tests, simplify shift and move, add F9 calcAll

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