Commit 62313fe5 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Перенес функции добавления строк/столбцов (в массив листов с массивами списков...

Перенес функции добавления строк/столбцов (в массив листов с массивами списков добавленных /строк/столбцов) из добавления lock-а, в место обработки ответа от сервера (_isLockedCells)
Поправил undo/redo для добавления/удаления строк/столбцов (Баг http://bugzserver/show_bug.cgi?id=19612)

Порядок:
1) Добавление столбца:
	а) Undo
		- удалить из InsertCols
		- удалить пересчетные индексы
	b) Redo
		- добавить в InsertCols
		- добавить пересчетные индексы
2) Удаление столбца:
	а) Undo
		- добавить в InsertCols
		- удалить пересчетные индексы
	b) Redo
		- удалить из InsertCols
		- добавить пересчетные индексы

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48839 954022d7-b5bf-4e40-9824-e11837661b57
parent eb0a5384
......@@ -154,17 +154,6 @@
this.m_arrNeedUnlock.push (LockClass);
},
addUnlock2: function (Lock) {
// Если мы добавили или удалили строку/столбец, нужно добавить в пересчет
if (null !== Lock.Element["subType"]) {
switch (Lock.Element["subType"]) {
case c_oAscLockTypeElemSubType.InsertColumns:
this.addCols(Lock.Element["sheetId"], Lock.Element["rangeOrObjectId"]["c1"], Lock.Element["rangeOrObjectId"]["c2"] - Lock.Element["rangeOrObjectId"]["c1"] + 1);
break;
case c_oAscLockTypeElemSubType.InsertRows:
this.addRows(Lock.Element["sheetId"], Lock.Element["rangeOrObjectId"]["r1"], Lock.Element["rangeOrObjectId"]["r2"] - Lock.Element["rangeOrObjectId"]["r1"] + 1);
break;
}
}
this.m_arrNeedUnlock2.push (Lock);
},
......@@ -537,6 +526,25 @@
return oRecalcIndexResult;
},
// Undo для добавления/удаления столбцов
undoCols: function (sheetId, count) {
if (this.isCoAuthoringExcellEnable()) {
if (!this.m_oRecalcIndexColumns.hasOwnProperty(sheetId)) {
this.m_oRecalcIndexColumns[sheetId] = new CRecalcIndex();
}
this.m_oRecalcIndexColumns[sheetId].remove(count);
}
},
// Undo для добавления/удаления строк
undoRows: function (sheetId, count) {
if (this.isCoAuthoringExcellEnable()) {
if (!this.m_oRecalcIndexRows.hasOwnProperty(sheetId)) {
this.m_oRecalcIndexRows[sheetId] = new CRecalcIndex();
}
this.m_oRecalcIndexRows[sheetId].remove(count);
}
},
removeCols: function (sheetId, position, count) {
if (this.isCoAuthoringExcellEnable()) {
if (!this.m_oRecalcIndexColumns.hasOwnProperty(sheetId)) {
......@@ -882,7 +890,7 @@
else
return (position + inc);
}
}
};
function CRecalcIndex() {
if ( !(this instanceof CRecalcIndex) ) {
......@@ -900,6 +908,11 @@
for (var i = 0; i < count; ++i)
this._arrElements.push(new CRecalcIndexElement(recalcType, position, bIsSaveIndex));
},
// Удаляет из пересчета, для undo
remove: function (count) {
for (var i = 0; i < count; ++i)
this._arrElements.pop();
},
clear: function () {
this._arrElements.length = 0;
},
......@@ -952,7 +965,7 @@
return newPosition;
}
}
};
/*
* Export
......
......@@ -3007,10 +3007,15 @@ UndoRedoWoorksheet.prototype = {
this.wb.aCollaborativeChangeElements.push(oLockInfo);
}
}
var range = Asc.Range(0, from, gc_nMaxCol0, to);
if((true == bUndo && historyitem_Worksheet_AddRows == Type) || (false == bUndo && historyitem_Worksheet_RemoveRows == Type))
ws.workbook.handlers.trigger("deleteCell", nSheetId, c_oAscDeleteOptions.DeleteRows, Asc.Range(0, from, gc_nMaxCol0, to));
ws.workbook.handlers.trigger("deleteCell", nSheetId, c_oAscDeleteOptions.DeleteRows, range);
else
ws.workbook.handlers.trigger("insertCell", nSheetId, c_oAscInsertOptions.InsertRows, Asc.Range(0, from, gc_nMaxCol0, to));
ws.workbook.handlers.trigger("insertCell", nSheetId, c_oAscInsertOptions.InsertRows, range);
// Нужно поменять пересчетные индексы для совместного редактирования (lock-элементы), но только если это не изменения от другого пользователя
if (true !== this.wb.bCollaborativeChanges)
ws.workbook.handlers.trigger("undoRedoAddRemoveRowCols", nSheetId, Type, range, bUndo);
}
else if(historyitem_Worksheet_AddCols == Type || historyitem_Worksheet_RemoveCols == Type)
{
......@@ -3029,10 +3034,16 @@ UndoRedoWoorksheet.prototype = {
this.wb.aCollaborativeChangeElements.push(oLockInfo);
}
}
var range = Asc.Range(from, 0, to, gc_nMaxRow0);
if((true == bUndo && historyitem_Worksheet_AddCols == Type) || (false == bUndo && historyitem_Worksheet_RemoveCols == Type))
ws.workbook.handlers.trigger("deleteCell", nSheetId, c_oAscDeleteOptions.DeleteColumns, Asc.Range(from, 0, to, gc_nMaxRow0));
ws.workbook.handlers.trigger("deleteCell", nSheetId, c_oAscDeleteOptions.DeleteColumns, range);
else
ws.workbook.handlers.trigger("insertCell", nSheetId, c_oAscInsertOptions.InsertColumns, Asc.Range(from, 0, to, gc_nMaxRow0));
ws.workbook.handlers.trigger("insertCell", nSheetId, c_oAscInsertOptions.InsertColumns, range);
// Нужно поменять пересчетные индексы для совместного редактирования (lock-элементы), но только если это не изменения от другого пользователя
if (true !== this.wb.bCollaborativeChanges)
ws.workbook.handlers.trigger("undoRedoAddRemoveRowCols", nSheetId, Type, range, bUndo);
}
else if(historyitem_Worksheet_ShiftCellsLeft == Type || historyitem_Worksheet_ShiftCellsRight == Type)
{
......
......@@ -288,6 +288,37 @@
this.model.handlers.add("updateWorksheetByModel", function () {
self.updateWorksheetByModel.apply(self, arguments);
});
this.model.handlers.add("undoRedoAddRemoveRowCols", function (sheetId, type, range, bUndo) {
if (true === bUndo) {
if (historyitem_Worksheet_AddRows === type) {
self.collaborativeEditing.removeRowsRange(sheetId, range.clone(true));
self.collaborativeEditing.undoRows(sheetId, range.r2 - range.r1 + 1);
} else if (historyitem_Worksheet_RemoveRows === type) {
self.collaborativeEditing.addRowsRange(sheetId, range.clone(true));
self.collaborativeEditing.undoRows(sheetId, range.r2 - range.r1 + 1);
} else if (historyitem_Worksheet_AddCols === type) {
self.collaborativeEditing.removeColsRange(sheetId, range.clone(true));
self.collaborativeEditing.undoCols(sheetId, range.c2 - range.c1 + 1);
} else if (historyitem_Worksheet_RemoveCols === type) {
self.collaborativeEditing.addColsRange(sheetId, range.clone(true));
self.collaborativeEditing.undoCols(sheetId, range.c2 - range.c1 + 1);
}
} else {
if (historyitem_Worksheet_AddRows === type) {
self.collaborativeEditing.addRowsRange(sheetId, range.clone(true));
self.collaborativeEditing.addRows(sheetId, range.r1, range.r2 - range.r1 + 1);
} else if (historyitem_Worksheet_RemoveRows === type) {
self.collaborativeEditing.removeRowsRange(sheetId, range.clone(true));
self.collaborativeEditing.removeRows(sheetId, range.r1, range.r2 - range.r1 + 1);
} else if (historyitem_Worksheet_AddCols === type) {
self.collaborativeEditing.addColsRange(sheetId, range.clone(true));
self.collaborativeEditing.addCols(sheetId, range.c1, range.c2 - range.c1 + 1);
} else if (historyitem_Worksheet_RemoveCols === type) {
self.collaborativeEditing.removeColsRange(sheetId, range.clone(true));
self.collaborativeEditing.removeCols(sheetId, range.c1, range.c2 - range.c1 + 1);
}
}
});
this.input
......
......@@ -7916,14 +7916,18 @@
} else {
if (c_oAscLockTypeElemSubType.InsertColumns === subType) {
newCallback = function (isSuccess) {
if (isSuccess)
if (isSuccess) {
t.collaborativeEditing.addColsRange(sheetId, range.clone(true));
t.collaborativeEditing.addCols(sheetId, range.c1, range.c2 - range.c1 + 1);
}
callback(isSuccess);
};
} else if (c_oAscLockTypeElemSubType.InsertRows === subType) {
newCallback = function (isSuccess) {
if (isSuccess)
if (isSuccess) {
t.collaborativeEditing.addRowsRange(sheetId, range.clone(true));
t.collaborativeEditing.addRows(sheetId, range.r1, range.r2 - range.r1 + 1);
}
callback(isSuccess);
};
} else if (c_oAscLockTypeElemSubType.DeleteColumns === subType) {
......@@ -7948,8 +7952,10 @@
} else {
if (c_oAscLockTypeElemSubType.InsertColumns === subType) {
t.collaborativeEditing.addColsRange(sheetId, range.clone(true));
t.collaborativeEditing.addCols(sheetId, range.c1, range.c2 - range.c1 + 1);
} else if (c_oAscLockTypeElemSubType.InsertRows === subType) {
t.collaborativeEditing.addRowsRange(sheetId, range.clone(true));
t.collaborativeEditing.addRows(sheetId, range.r1, range.r2 - range.r1 + 1);
} else if (c_oAscLockTypeElemSubType.DeleteColumns === subType) {
t.collaborativeEditing.removeColsRange(sheetId, range.clone(true));
t.collaborativeEditing.removeCols(sheetId, range.c1, range.c2 - range.c1 + 1);
......
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