Commit ec499dcd authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Поправил перерисовку при приходе lock-объекта (делаем только если он на том же листе).

Для комментариев полностью переделал lock (баг http://bugzserver/show_bug.cgi?id=25770)
Теперь он не накладывается на lock от range (вместо добавления нового c_oAscLockTypeElem, поменяем имя листа

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57871 954022d7-b5bf-4e40-9824-e11837661b57
parent 316c0243
......@@ -1492,13 +1492,10 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
"drawFrozenPaneLines": function () {t._onDrawFrozenPaneLines.apply(t, arguments);},
"updateAllSheetsLock": function () {t._onUpdateAllSheetsLock.apply(t, arguments);},
"showDrawingObjects": function () {t._onShowDrawingObjects.apply(t, arguments);},
"resetLockedGraphicObjects": function () {t._onResetLockedGraphicObjects.apply(t, arguments);},
"tryResetLockedGraphicObject": function () {return t._onTryResetLockedGraphicObject.apply(t, arguments);},
"showComments": function () {t._onShowComments.apply(t, arguments);},
"unlockComments": function () {t._onUnlockComments.apply(t);},
"tryUnlockComment": function () {t._onTryUnlockComment.apply(t, arguments);},
"cleanSelection": function () {t._onCleanSelection.apply(t, arguments);},
"updateDocumentCanSave": function () {t._onUpdateDocumentCanSave();}
"updateDocumentCanSave": function () {t._onUpdateDocumentCanSave();},
"checkCommentRemoveLock": function (lockElem) {return t._onCheckCommentRemoveLock(lockElem);}
}, this.asc_getViewerMode());
if (!this.CoAuthoringApi) {
......@@ -1518,8 +1515,7 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
t.collaborativeEditing.addUnlock(lockElem);
}
var drawing;
if (null != lockElem) {
var drawing, lockType = lockElem.Element["type"];
var oldType = lockElem.getType();
if (c_oAscLockTypes.kLockTypeOther2 === oldType || c_oAscLockTypes.kLockTypeOther3 === oldType)
lockElem.setType(c_oAscLockTypes.kLockTypeOther3, true);
......@@ -1529,12 +1525,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
// Выставляем ID пользователя, залочившего данный элемент
lockElem.setUserId(e["user"]);
if (lockElem.Element["type"] === c_oAscLockTypeElem.Object) {
if (lockType === c_oAscLockTypeElem.Object) {
drawing = g_oTableId.Get_ById(lockElem.Element["rangeOrObjectId"]);
if (drawing)
drawing.lockType = lockElem.Type;
}
}
if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
......@@ -1544,15 +1539,21 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
t._onUpdateSheetsLock(lockElem);
var ws = t.wb.getWorksheet();
var lockSheetId = lockElem.Element["sheetId"];
if (lockSheetId === ws.model.getId()) {
if (lockType === c_oAscLockTypeElem.Object) {
// Нужно ли обновлять закрепление областей
if (t._onUpdateFrozenPane(lockElem, ws.model.getId()))
if (t._onUpdateFrozenPane(lockElem))
ws.draw();
else
ws.updateSelection();
if (drawing && ws.model === drawing.worksheet)
else if (drawing && ws.model === drawing.worksheet)
ws.objectRender.showDrawingObjects(true);
} else if (lockType === c_oAscLockTypeElem.Range) {
ws.updateSelection();
}
} else if (0 === lockSheetId.indexOf(CCellCommentator.sStartCommentId)) {
// Коммментарий
t.handlers.trigger("asc_onLockComment", lockElem.Element["rangeOrObjectId"], e["user"]);
}
}
}
};
......@@ -1585,12 +1586,14 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
else {
// Удаляем из lock-ов, тот, кто правил ушел и не сохранил
t.collaborativeEditing.removeUnlock (lockElem);
if (!t._onCheckCommentRemoveLock(lockElem.Element)) {
if (lockElem.Element["type"] === c_oAscLockTypeElem.Object) {
drawing = g_oTableId.Get_ById(lockElem.Element["rangeOrObjectId"]);
if (drawing)
drawing.lockType = c_oAscLockTypes.kLockTypeNone;
}
}
}
if (t.wb) {
// Шлем update для листов
t._onUpdateSheetsLock(lockElem);
......@@ -1606,7 +1609,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
worksheet._drawSelection();
worksheet._drawFrozenPaneLines();
worksheet.objectRender.showDrawingObjects(true);
worksheet.cellCommentator.unlockComments();
}
};
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent) {
......@@ -1735,7 +1737,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}
if (this.wb) {
this.wb.getWorksheet().cellCommentator.unlockComments();
// Нужно послать обновить свойства (иначе для удаления данных не обновится строка формул).
// ToDo Возможно стоит обновлять только строку формул
this.wb._onWSSelectionChanged(null);
......@@ -1779,41 +1780,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}
};
spreadsheet_api.prototype._onResetLockedGraphicObjects = function () {
if (this.wb) {
this.wb.getWorksheet().objectRender.resetLockedGraphicObjects();
}
};
spreadsheet_api.prototype._onTryResetLockedGraphicObject = function (id) {
if (this.wb) {
for (var key in this.wb.wsViews) {
var ws = this.wb.wsViews[key];
ws.objectRender.tryResetLockedGraphicObject(id);
}
}
};
spreadsheet_api.prototype._onShowComments = function () {
if (this.wb) {
this.wb.getWorksheet().cellCommentator.drawCommentCells();
}
};
spreadsheet_api.prototype._onUnlockComments = function () {
if (this.wb) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.unlockComments();
}
};
spreadsheet_api.prototype._onTryUnlockComment = function (id) {
if (this.wb) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.tryUnlockComment(id);
}
};
spreadsheet_api.prototype._onUpdateSheetsLock = function (lockElem) {
var t = this;
// Шлем update для листов, т.к. нужно залочить лист
......@@ -1828,10 +1800,9 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}
};
spreadsheet_api.prototype._onUpdateFrozenPane = function (lockElem, sheetId) {
spreadsheet_api.prototype._onUpdateFrozenPane = function (lockElem) {
return (c_oAscLockTypeElem.Object === lockElem.Element["type"] &&
lockElem.Element["rangeOrObjectId"] === c_oAscLockNameFrozenPane &&
lockElem.Element["sheetId"] === sheetId);
lockElem.Element["rangeOrObjectId"] === c_oAscLockNameFrozenPane);
};
spreadsheet_api.prototype._sendWorkbookStyles = function () {
......@@ -3221,6 +3192,16 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}
};
spreadsheet_api.prototype._onCheckCommentRemoveLock = function (lockElem) {
var res = false;
if (0 === lockElem["sheetId"].indexOf(CCellCommentator.sStartCommentId)) {
// Коммментарий
res = true;
this.handlers.trigger("asc_onUnLockComment", lockElem["rangeOrObjectId"]);
}
return res;
};
// offline mode
spreadsheet_api.prototype.offlineModeInit = function() {
......
......@@ -448,6 +448,7 @@ function CCellCommentator(currentSheet) {
this.lastSelectedId = null;
this.bSaveHistory = true;
}
CCellCommentator.sStartCommentId = 'comment_';
//-----------------------------------------------------------------------------------
// Public methods
......@@ -457,92 +458,44 @@ CCellCommentator.prototype.isViewerMode = function () {
return this.worksheet.handlers.trigger("getViewerMode");
};
CCellCommentator.prototype.isLockedComment = function(oComment, lockByDefault, callbackFunc) {
var lockInfo;
var model = this.worksheet.model;
var sheetId = model.getId();
var objectGuid = oComment.asc_getId();
if (objectGuid) {
CCellCommentator.prototype.isLockedComment = function(oComment, callbackFunc) {
if (false === this.worksheet.collaborativeEditing.isCoAuthoringExcellEnable()) {
// Запрещено совместное редактирование
Asc.applyFunction(callbackFunc, true);
return;
}
if ( lockByDefault )
this.worksheet.collaborativeEditing.onStartCheckLock();
// Комментарий к документу блокируем как Range
if ( !oComment.asc_getDocumentFlag() ) {
var c = oComment.asc_getCol();
var r = oComment.asc_getRow();
var c1, r1, c2, r2;
var mergedRange = model.getMergedByCell(r, c);
if (mergedRange) {
c1 = mergedRange.c1;
r1 = mergedRange.r1;
c2 = mergedRange.c2;
r2 = mergedRange.r2;
} else {
c1 = c2 = c;
r1 = r2 = r;
}
var objectGuid = oComment.asc_getId();
if (objectGuid) {
// Комментарии не должны влиять на lock-листа, поэтому вместо добавления нового c_oAscLockTypeElem, поменяем имя листа
var sheetId = CCellCommentator.sStartCommentId;
if (!oComment.bDocument)
sheetId += this.worksheet.model.getId();
lockInfo = this.worksheet.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Range, /*subType*/null, sheetId, new Asc.asc_CCollaborativeRange(c1, r1, c2, r2));
} else
lockInfo = this.worksheet.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId, objectGuid);
var lockInfo = this.worksheet.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null,
sheetId, objectGuid);
if (false === this.worksheet.collaborativeEditing.getCollaborativeEditing()) {
// Пользователь редактирует один: не ждем ответа, а сразу продолжаем редактирование
Asc.applyFunction(callbackFunc, true);
callbackFunc = undefined;
}
if (false !== this.worksheet.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeMine, /*bCheckOnlyLockAll*/false)) {
if (false !== this.worksheet.collaborativeEditing.getLockIntersection(lockInfo,
c_oAscLockTypes.kLockTypeMine, /*bCheckOnlyLockAll*/false)) {
// Редактируем сами
Asc.applyFunction(callbackFunc, true);
return;
}
else if (false !== this.worksheet.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false)) {
} else if (false !== this.worksheet.collaborativeEditing.getLockIntersection(lockInfo,
c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false)) {
// Уже ячейку кто-то редактирует
Asc.applyFunction(callbackFunc, false);
return;
}
// Блокируем
if ( lockByDefault ) {
this.worksheet.collaborativeEditing.onStartCheckLock();
this.worksheet.collaborativeEditing.addCheckLock(lockInfo);
this.worksheet.collaborativeEditing.onEndCheckLock(callbackFunc);
}
else
Asc.applyFunction(callbackFunc, true);
}
};
CCellCommentator.prototype.callLockComments = function(range) {
if ( range ) {
for (var i = 0; i < this.aComments.length; i++) {
var comment = this.aComments[i];
if ( (comment.nCol >= range.c1) && (comment.nCol <= range.c2) && (comment.nRow >= range.r1) && (comment.nRow <= range.r2) )
this.worksheet.model.workbook.handlers.trigger("asc_onLockComment", comment.asc_getId(), comment.asc_getUserId());
}
}
};
CCellCommentator.prototype.unlockComments = function() {
for (var i = 0; i < this.aComments.length; i++) {
this.worksheet.model.workbook.handlers.trigger("asc_onUnLockComment", this.aComments[i].asc_getId());
}
};
CCellCommentator.prototype.tryUnlockComment = function(id) {
for (var i = 0; i < this.aComments.length; i++) {
if ( this.aComments[i].asc_getId() == id ) {
this.worksheet.model.workbook.handlers.trigger("asc_onUnLockComment", id);
break;
}
}
};
CCellCommentator.prototype.moveRangeComments = function(rangeFrom, rangeTo) {
......@@ -919,43 +872,6 @@ CCellCommentator.prototype.updateCommentsDependencies = function(bInsert, operTy
}
};
CCellCommentator.prototype.showHideComments = function(bHide, bColumn, start, stop) {
var t = this;
var aChangedComments = [];
function updateCommentsList(aComments) {
if ( aComments.length ) {
History.StartTransaction();
for (var i = 0; i < aComments.length; i++) {
this.asc_changeComment(aComments[i].asc_getId(), aComments[i]);
}
History.EndTransaction();
t.drawCommentCells();
}
}
for (var i = 0; i < this.aComments.length; i++) {
var comment = new asc_CCommentData(this.aComments[i]);
if ( bColumn ) {
if ( (comment.nCol >= start) && (comment.nCol <= stop) ) {
comment.asc_putHiddenFlag(bHide);
aChangedComments.push(comment);
}
}
else {
if ( (comment.nRow >= start) && (comment.nRow <= stop) ) {
comment.asc_putHiddenFlag(bHide);
aChangedComments.push(comment);
}
}
}
updateCommentsList(aChangedComments);
};
CCellCommentator.prototype.sortComments = function(activeRange, changes) {
var t = this;
......@@ -1246,21 +1162,10 @@ CCellCommentator.prototype.asc_hideComments = function() {
// Main
CCellCommentator.prototype.asc_showComment = function(id, bNew) {
var t = this;
var comment = this.asc_findComment(id);
if (comment) {
var callbackFunc = function(result) {
if ( !result )
t.worksheet.model.workbook.handlers.trigger("asc_onLockComment", comment.asc_getId(), comment.asc_getUserId());
else
t.worksheet.model.workbook.handlers.trigger("asc_onUnLockComment", comment.asc_getId());
var commentList = t.asc_getComments(comment.asc_getCol(), comment.asc_getRow());
var coords = t.getCommentsCoords(commentList);
var commentList = this.asc_getComments(comment.asc_getCol(), comment.asc_getRow());
var coords = this.getCommentsCoords(commentList);
var indexes = [];
for (var i = 0; i < commentList.length; i++) {
......@@ -1269,19 +1174,13 @@ CCellCommentator.prototype.asc_showComment = function(id, bNew) {
// Second click - hide comment
if (indexes.length) {
if ( t.lastSelectedId != id )
t.worksheet.model.workbook.handlers.trigger("asc_onHideComment");
t.worksheet.model.workbook.handlers.trigger("asc_onShowComment", indexes, coords.asc_getLeftPX(), coords.asc_getTopPX(), coords.asc_getReverseLeftPX(), bNew);
t.drawCommentCells();
}
t.lastSelectedId = id;
};
t.isLockedComment(comment, false, callbackFunc);
this.worksheet.model.workbook.handlers.trigger("asc_onShowComment", indexes, coords.asc_getLeftPX(),
coords.asc_getTopPX(), coords.asc_getReverseLeftPX(), bNew);
this.drawCommentCells();
}
else
t.lastSelectedId = null;
this.lastSelectedId = id;
} else
this.lastSelectedId = null;
};
CCellCommentator.prototype.asc_selectComment = function(id, bMove) {
......@@ -1353,7 +1252,6 @@ CCellCommentator.prototype.asc_findComment = function(id) {
};
CCellCommentator.prototype.asc_addComment = function(comment, bIsNotUpdate) {
var t = this;
var oComment = comment;
var bChange = false;
......@@ -1367,11 +1265,10 @@ CCellCommentator.prototype.asc_addComment = function(comment, bIsNotUpdate) {
}
var existComments = this.asc_getComments(oComment.nCol, oComment.nRow);
if ( existComments.length ) {
if (existComments.length) {
oComment = existComments[0];
bChange = true;
}
else {
} else {
if ((oComment.nCol != null) && (oComment.nRow != null)) {
var cellAddress = new CellAddress(oComment.nRow, oComment.nCol, 0);
oComment.sQuoteText = cellAddress.getID() + " : " + this.worksheet.model.getCell(cellAddress).getValueWithFormat();
......@@ -1379,33 +1276,23 @@ CCellCommentator.prototype.asc_addComment = function(comment, bIsNotUpdate) {
}
}
function callbackFunc(result) {
if ( !result ) {
t.worksheet.model.workbook.handlers.trigger("asc_onLockComment", oComment.asc_getId(), oComment.asc_getUserId());
}
else {
var onAddCommentCallback = function (isSuccess) {
if (false === isSuccess)
return;
t._addComment(oComment, bChange, bIsNotUpdate);
}
}
if (bIsNotUpdate)
callbackFunc(true);
else
this.isLockedComment(oComment, true, callbackFunc);
};
this.isLockedComment(oComment, onAddCommentCallback);
};
CCellCommentator.prototype.asc_changeComment = function(id, oComment, bChangeCoords, bNoEvent) {
var t = this;
var comment = this.asc_findComment(id);
if (null === comment)
return;
function callbackFunc(result) {
if ( !result ) {
t.worksheet.model.workbook.handlers.trigger("asc_onLockComment", comment.asc_getId(), comment.asc_getUserId());
} else {
t.worksheet.model.workbook.handlers.trigger("asc_onUnLockComment", comment.asc_getId());
var onChangeCommentCallback = function (isSuccess) {
if (false === isSuccess)
return;
var commentBefore = new asc_CCommentData(comment);
if (comment) {
......@@ -1447,30 +1334,25 @@ CCellCommentator.prototype.asc_changeComment = function(id, oComment, bChangeCoo
}
t.drawCommentCells();
}
}
};
this.isLockedComment(comment, true, callbackFunc);
this.isLockedComment(comment, onChangeCommentCallback);
};
CCellCommentator.prototype.asc_removeComment = function(id, bNoEvent) {
var t = this;
var comment = this.asc_findComment(id);
if (null === comment)
return;
function callbackFunc(result) {
if ( !result ) {
t.worksheet.model.workbook.handlers.trigger("asc_onLockComment", comment.asc_getId(), comment.asc_getUserId());
} else {
t.worksheet.model.workbook.handlers.trigger("asc_onUnLockComment", comment.asc_getId());
}
var onRemoveCommentCallback = function (isSuccess) {
if (false === isSuccess)
return;
t._removeComment(comment, bNoEvent, true);
}
};
this.isLockedComment(comment, true, callbackFunc);
this.isLockedComment(comment, onRemoveCommentCallback);
};
// Extra functions
......@@ -1526,8 +1408,6 @@ CCellCommentator.prototype.asc_getDocumentComments = function() {
};
CCellCommentator.prototype._addComment = function (oComment, bChange, bIsNotUpdate) {
this.worksheet.model.workbook.handlers.trigger("asc_onUnLockComment", oComment.asc_getId());
// Add new comment
if (!bChange) {
History.Create_NewPoint();
......
......@@ -240,11 +240,14 @@
for (;bIsCollaborative && nIndex < nCount; ++nIndex) {
oLock = this.m_arrNeedUnlock[nIndex];
if (c_oAscLockTypes.kLockTypeOther2 === oLock.getType()) {
if (!this.handlers.trigger("checkCommentRemoveLock", oLock.Element)) {
drawing = g_oTableId.Get_ById(oLock.Element["rangeOrObjectId"]);
if(drawing && drawing.lockType !== c_oAscLockTypes.kLockTypeNone) {
drawing.lockType = c_oAscLockTypes.kLockTypeNone;
bRedrawGraphicObjects = true;
}
}
this.m_arrNeedUnlock.splice(nIndex, 1);
--nIndex;
--nCount;
......@@ -275,7 +278,6 @@
this.handlers.trigger("drawSelection");
this.handlers.trigger("drawFrozenPaneLines");
this.handlers.trigger("updateAllSheetsLock");
this.handlers.trigger("unlockComments");
this.handlers.trigger("showComments");
}
......
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