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