Commit a293eda5 authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander.Trofimov

в SerializeHistory в конце каждого History.Point пишем historyitem_Workbook_SheetPositions

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62049 954022d7-b5bf-4e40-9824-e11837661b57
parent e2f1f2ca
......@@ -189,7 +189,7 @@ CHistory.prototype.UndoRedoPrepare = function (oRedoObjectParam, bUndo) {
if (wsViews[i] && wsViews[i].objectRender && wsViews[i].objectRender.controller) {
wsViews[i].objectRender.controller.resetSelection();
}
if ( wsViews[i].isChartAreaEditMode ) {
if (wsViews[i] && wsViews[i].isChartAreaEditMode ) {
wsViews[i].isChartAreaEditMode = false;
wsViews[i].arrActiveChartsRanges = [];
}
......
......@@ -2687,67 +2687,69 @@ UndoRedoWorkbook.prototype = {
}
else if(historyitem_Workbook_SheetPositions == Type)
{
var wsActive = this.wb.getActiveWs();
//делаем вспомогательным map из sheetid
var oTempSheetMap = {};
for(var i = 0, length = Data.positions.length; i < length; ++i)
oTempSheetMap[Data.positions[i]] = 1;
//находим sheet уникальные для данного пользователя и запоминаем перед каким sheetid они идут
var oUniqueSheetId = {};
var nLastId = null;
for(var i = 0, length = this.wb.aWorksheets.length; i < length; ++i)
{
var ws = this.wb.aWorksheets[i];
var id = ws.getId();
if(null == oTempSheetMap[id])
{
if(i < length - 1)
oUniqueSheetId[this.wb.aWorksheets[i + 1].getId()] = id;
else
nLastId = id;
}
}
//расставляем в соответствии с изменениями
this.wb.aWorksheets = [];
for(var i = 0, length = Data.positions.length; i < length; ++i)
{
var sheetId = Data.positions[i];
var ws = this.wb.aWorksheetsById[sheetId];
if(null != ws)
this.wb.aWorksheets.push(ws);
}
if(null != nLastId)
{
var ws = this.wb.aWorksheetsById[nLastId];
if(null != ws)
this.wb.aWorksheets.push(ws);
}
//не стал оптимизировать по скорости, потому что много добавленых sheet быть не может
while(true)
{
if(Data.positions){
var wsActive = this.wb.getActiveWs();
//делаем вспомогательным map из sheetid
var oTempSheetMap = {};
for(var i = 0, length = Data.positions.length; i < length; ++i)
oTempSheetMap[Data.positions[i]] = 1;
//находим sheet уникальные для данного пользователя и запоминаем перед каким sheetid они идут
var oUniqueSheetId = {};
var nLastId = null;
for(var i = 0, length = this.wb.aWorksheets.length; i < length; ++i)
{
var ws = this.wb.aWorksheets[i];
var insertId = oUniqueSheetId[ws.getId()];
if(null != insertId)
var id = ws.getId();
if(null == oTempSheetMap[id])
{
var insertWs = this.wb.aWorksheetsById[insertId];
if(null != insertWs)
this.wb.aWorksheets.splice(i, 0, insertWs);
delete oUniqueSheetId[ws.getId()];
if(i < length - 1)
oUniqueSheetId[this.wb.aWorksheets[i + 1].getId()] = id;
else
nLastId = id;
}
}
var bEmpty = true;
for(var i in oUniqueSheetId)
//расставляем в соответствии с изменениями
this.wb.aWorksheets = [];
for(var i = 0, length = Data.positions.length; i < length; ++i)
{
bEmpty = false;
break;
var sheetId = Data.positions[i];
var ws = this.wb.aWorksheetsById[sheetId];
if(null != ws)
this.wb.aWorksheets.push(ws);
}
if(bEmpty)
break;
if(null != nLastId)
{
var ws = this.wb.aWorksheetsById[nLastId];
if(null != ws)
this.wb.aWorksheets.push(ws);
}
//не стал оптимизировать по скорости, потому что много добавленых sheet быть не может
while(true)
{
for(var i = 0, length = this.wb.aWorksheets.length; i < length; ++i)
{
var ws = this.wb.aWorksheets[i];
var insertId = oUniqueSheetId[ws.getId()];
if(null != insertId)
{
var insertWs = this.wb.aWorksheetsById[insertId];
if(null != insertWs)
this.wb.aWorksheets.splice(i, 0, insertWs);
delete oUniqueSheetId[ws.getId()];
}
}
var bEmpty = true;
for(var i in oUniqueSheetId)
{
bEmpty = false;
break;
}
if(bEmpty)
break;
}
this.wb._updateWorksheetIndexes(wsActive);
this.wb.handlers.trigger("updateWorksheetByModel");
}
this.wb._updateWorksheetIndexes(wsActive);
this.wb.handlers.trigger("updateWorksheetByModel");
}
else if(historyitem_Workbook_ChangeColorScheme == Type)
{
......
......@@ -1850,14 +1850,18 @@ Workbook.prototype.SerializeHistory = function(){
}
this._SerializeHistoryBase64(oMemory, item, aPointChangesBase64);
}
var oUndoRedoData_SheetPositions;
if (bChangeSheetPlace) {
//создаем еще один элемент в undo/redo - взаимное расположение Sheet, чтобы не запутываться в add, move событиях
//добавляем не после конца aActions, чтобы можно было делать undo/redo и просто удалять хвост изменений.
var oSheetPlaceData = [];
for (var j = 0, length2 = this.aWorksheets.length; j < length2; ++j)
oSheetPlaceData.push(this.aWorksheets[j].getId());
this._SerializeHistoryBase64(oMemory, new UndoRedoItemSerializable(g_oUndoRedoWorkbook, historyitem_Workbook_SheetPositions, null, null, new UndoRedoData_SheetPositions(oSheetPlaceData)), aPointChangesBase64);
oUndoRedoData_SheetPositions = new UndoRedoData_SheetPositions(oSheetPlaceData);
}
else
oUndoRedoData_SheetPositions = new UndoRedoData_SheetPositions();
this._SerializeHistoryBase64(oMemory, new UndoRedoItemSerializable(g_oUndoRedoWorkbook, historyitem_Workbook_SheetPositions, null, null, oUndoRedoData_SheetPositions), aPointChangesBase64);
aRes.push(aPointChangesBase64);
}
this.aCollaborativeActions = [];
......
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