Commit 54ada507 authored by Ilya Kirillov's avatar Ilya Kirillov

Added functions for set/get global lock. New scheme with undo in fast...

Added functions for set/get global lock. New scheme with undo in fast collaboration were moved to standard shortcut Ctrl+Z.
parent 2ae01c88
......@@ -148,6 +148,19 @@ CCollaborativeEditing.prototype.Check_MergeData = function()
//-----------------------------------------------------------------------------------
CCollaborativeEditing.prototype.Get_GlobalLock = function()
{
return false;
};
CCollaborativeEditing.prototype.Set_GlobalLock = function(isLock)
{
};
CCollaborativeEditing.prototype.Get_GlobalLockSelection = function()
{
return false;
};
CCollaborativeEditing.prototype.Set_GlobalLockSelection = function(isLock)
{
};
CCollaborativeEditing.prototype.OnStart_CheckLock = function()
......
......@@ -219,8 +219,8 @@ function CCollaborativeEditingBase()
this.m_aEndActions = []; // Массив действий, которые надо выполнить после принятия чужих изменений
this.m_bGlobalLock = false; // Запрещаем производить любые "редактирующие" действия (т.е. то, что в историю запишется)
this.m_bGlobalLockSelection = false; // Запрещаем изменять селект и курсор
this.m_bGlobalLock = 0; // Запрещаем производить любые "редактирующие" действия (т.е. то, что в историю запишется)
this.m_bGlobalLockSelection = 0; // Запрещаем изменять селект и курсор
this.m_aCheckLocks = []; // Массив для проверки залоченности объектов, которые мы собираемся изменять
this.m_aNewObjects = []; // Массив со списком чужих новых объектов
......@@ -464,8 +464,8 @@ CCollaborativeEditingBase.prototype.Release_Locks = function()
};
CCollaborativeEditingBase.prototype.OnStart_Load_Objects = function()
{
AscCommon.CollaborativeEditing.m_bGlobalLock = true;
AscCommon.CollaborativeEditing.m_bGlobalLockSelection = true;
AscCommon.CollaborativeEditing.Set_GlobalLock(true);
AscCommon.CollaborativeEditing.Set_GlobalLockSelection(true);
// Вызываем функцию для загрузки необходимых элементов (новые картинки и шрифты)
editor.pre_Save(AscCommon.CollaborativeEditing.m_aNewImages);
};
......@@ -505,7 +505,25 @@ CCollaborativeEditingBase.prototype.Check_MergeData = function()
//-----------------------------------------------------------------------------------
CCollaborativeEditingBase.prototype.Get_GlobalLock = function()
{
return this.m_bGlobalLock;
return (0 === this.m_bGlobalLock ? false : true);
};
CCollaborativeEditingBase.prototype.Set_GlobalLock = function(isLock)
{
if (isLock)
this.m_bGlobalLock++;
else
this.m_bGlobalLock = Math.max(0, this.m_bGlobalLock - 1);
};
CCollaborativeEditingBase.prototype.Set_GlobalLockSelection = function(isLock)
{
if (isLock)
this.m_bGlobalLockSelection++;
else
this.m_bGlobalLockSelection = Math.max(0, this.m_bGlobalLockSelection - 1);
};
CCollaborativeEditingBase.prototype.Get_GlobalLockSelection = function()
{
return (0 === this.m_bGlobalLockSelection ? false : true);
};
CCollaborativeEditingBase.prototype.OnStart_CheckLock = function()
{
......
......@@ -5466,7 +5466,7 @@ Asc['asc_docs_api'].prototype["Native_Editor_Initialize_Settings"] = function(_p
if (_val === true)
{
this.ShowParaMarks = false;
AscCommon.CollaborativeEditing.m_bGlobalLock = true;
AscCommon.CollaborativeEditing.Set_GlobalLock(true);
this.isViewMode = true;
this.WordControl.m_oDrawingDocument.IsViewMode = true;
......
......@@ -290,8 +290,8 @@ CCollaborativeEditing.prototype.OnEnd_Load_Objects = function()
// Данная функция вызывается, когда загрузились внешние объекты (картинки и шрифты)
// Снимаем лок
AscCommon.CollaborativeEditing.m_bGlobalLock = false;
AscCommon.CollaborativeEditing.m_bGlobalLockSelection = false;
AscCommon.CollaborativeEditing.Set_GlobalLock(false);
AscCommon.CollaborativeEditing.Set_GlobalLockSelection(false);
// Запускаем полный пересчет документа
var LogicDocument = editor.WordControl.m_oLogicDocument;
......@@ -335,7 +335,9 @@ CCollaborativeEditing.prototype.OnEnd_CheckLock = function()
// Ставим глобальный лок, только во время совместного редактирования
if ( true === this.m_bUse )
this.m_bGlobalLock = true;
{
this.Set_GlobalLock(true);
}
else
{
// Пробегаемся по массиву и проставляем, что залочено нами
......@@ -389,13 +391,13 @@ CCollaborativeEditing.prototype.OnEnd_CheckLock = function()
CCollaborativeEditing.prototype.OnCallback_AskLock = function(result)
{
if (true === AscCommon.CollaborativeEditing.m_bGlobalLock)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLock())
{
if (false == editor.checkLongActionCallback(AscCommon.CollaborativeEditing.OnCallback_AskLock, result))
return;
// Снимаем глобальный лок
AscCommon.CollaborativeEditing.m_bGlobalLock = false;
AscCommon.CollaborativeEditing.Set_GlobalLock(false);
if (result["lock"])
{
......
......@@ -101,7 +101,7 @@ Asc['asc_docs_api'].prototype["Native_Editor_Initialize_Settings"] = function(_p
if (_val === true)
{
this.ShowParaMarks = false;
AscCommon.CollaborativeEditing.m_bGlobalLock = true;
AscCommon.CollaborativeEditing.Set_GlobalLock(true);
this.isViewMode = true;
this.WordControl.m_oDrawingDocument.IsViewMode = true;
......
......@@ -5684,7 +5684,7 @@ background-repeat: no-repeat;\
if (!this.isViewMode && this.WordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Theme) === false)
{
AscCommon.CollaborativeEditing.m_bGlobalLock = true;
AscCommon.CollaborativeEditing.Set_GlobalLock(true);
this.WordControl.m_oLogicDocument.Create_NewHistoryPoint(AscDFH.historydescription_Presentation_ChangeTheme);
this.ThemeLoader.StartLoadTheme(indexTheme);
}
......@@ -5695,7 +5695,7 @@ background-repeat: no-repeat;\
};
asc_docs_api.prototype.EndLoadTheme = function(theme_load_info)
{
AscCommon.CollaborativeEditing.m_bGlobalLock = false;
AscCommon.CollaborativeEditing.Set_GlobalLock(false);
// применение темы
var _array = this.WordControl.Thumbnails.GetSelectedArray();
......
......@@ -202,8 +202,8 @@ CWordCollaborativeEditing.prototype.OnEnd_Load_Objects = function()
// Данная функция вызывается, когда загрузились внешние объекты (картинки и шрифты)
// Снимаем лок
AscCommon.CollaborativeEditing.m_bGlobalLock = false;
AscCommon.CollaborativeEditing.m_bGlobalLockSelection = false;
AscCommon.CollaborativeEditing.Set_GlobalLock(false);
AscCommon.CollaborativeEditing.Set_GlobalLockSelection(false);
// Запускаем полный пересчет документа
var LogicDocument = editor.WordControl.m_oLogicDocument;
......@@ -265,7 +265,9 @@ CWordCollaborativeEditing.prototype.OnEnd_CheckLock = function(DontLockInFastMod
// Ставим глобальный лок, только во время совместного редактирования
if (-1 === this.m_nUseType)
this.m_bGlobalLock = true;
{
this.Set_GlobalLock(true);
}
else
{
// Пробегаемся по массиву и проставляем, что залочено нами
......@@ -296,7 +298,7 @@ CWordCollaborativeEditing.prototype.OnCallback_AskLock = function(result)
var oThis = AscCommon.CollaborativeEditing;
var oEditor = editor;
if (true === oThis.m_bGlobalLock)
if (true === oThis.Get_GlobalLock())
{
// Здесь проверяем есть ли длинная операция, если она есть, то до ее окончания нельзя делать
// Undo, иначе точка истории уберется, а изменения допишутся в предыдущую.
......@@ -304,7 +306,7 @@ CWordCollaborativeEditing.prototype.OnCallback_AskLock = function(result)
return;
// Снимаем глобальный лок
oThis.m_bGlobalLock = false;
oThis.Set_GlobalLock(false);
if (result["lock"])
{
......
......@@ -3510,7 +3510,7 @@ CDocument.prototype.RecalculateCurPos = function()
if (true === this.TurnOffRecalcCurPos)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
this.DrawingDocument.UpdateTargetTransform(null);
......@@ -3526,7 +3526,7 @@ CDocument.prototype.Internal_CheckCurPage = function()
if (true === this.TurnOffRecalcCurPos)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
var nCurPage = this.Controller.GetCurPage();
......@@ -6767,11 +6767,7 @@ CDocument.prototype.OnKeyDown = function(e)
}
else if (e.KeyCode == 90 && false === editor.isViewMode && true === e.CtrlKey) // Ctrl + Z - Undo
{
if (true === e.ShiftKey)
this.CollaborativeEditing.Undo();
else
this.Document_Undo();
bRetValue = keydownresult_PreventAll;
}
else if (e.KeyCode == 93 || 57351 == e.KeyCode /*в Opera такой код*/) // контекстное меню
......@@ -8027,7 +8023,7 @@ CDocument.prototype.Document_UpdateInterfaceState = function(bSaveCurRevisionCha
if (true === this.TurnOffInterfaceEvents)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
// Удаляем весь список
......@@ -8054,7 +8050,7 @@ CDocument.prototype.Document_UpdateRulersState = function()
if (true === this.TurnOffInterfaceEvents)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
this.DrawingDocument.Set_RulerState_Start();
......@@ -8095,7 +8091,7 @@ CDocument.prototype.Document_UpdateSelectionState = function()
if (true === this.TurnOffInterfaceEvents)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
this.DrawingDocument.UpdateTargetTransform(null);
......@@ -8140,7 +8136,7 @@ CDocument.prototype.Document_UpdateUndoRedoState = function()
if (true === this.TurnOffInterfaceEvents)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
// TODO: Возможно стоит перенсти эту проверку в класс CHistory и присылать
......@@ -8156,7 +8152,7 @@ CDocument.prototype.Document_UpdateCopyCutState = function()
if (true === this.TurnOffInterfaceEvents)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
// Во время работы селекта не обновляем состояние
......@@ -8170,7 +8166,7 @@ CDocument.prototype.Document_UpdateCanAddHyperlinkState = function()
if (true === this.TurnOffInterfaceEvents)
return;
if (true === AscCommon.CollaborativeEditing.m_bGlobalLockSelection)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLockSelection())
return;
// Проверяем можно ли добавить гиперссылку
......@@ -8181,7 +8177,7 @@ CDocument.prototype.Document_UpdateSectionPr = function()
if (true === this.TurnOffInterfaceEvents)
return;
if (true === this.CollaborativeEditing.m_bGlobalLockSelection)
if (true === this.CollaborativeEditing.Get_GlobalLockSelection())
return;
// Обновляем ориентацию страницы
......@@ -8363,6 +8359,16 @@ CDocument.prototype.Document_Undo = function(Options)
if (true === AscCommon.CollaborativeEditing.Get_GlobalLock())
return;
if (true !== this.History.Can_Undo() && this.Api && this.CollaborativeEditing && true === this.CollaborativeEditing.Is_Fast() && true !== this.CollaborativeEditing.Is_SingleUser())
{
if (this.CollaborativeEditing.CanUndo())
{
this.CollaborativeEditing.Set_GlobalLock(true);
this.Api.asc_Save(true, true);
}
}
else
{
this.DrawingDocument.EndTrackTable(null, true);
this.DrawingObjects.TurnOffCheckChartSelection();
......@@ -8373,6 +8379,7 @@ CDocument.prototype.Document_Undo = function(Options)
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
}
};
CDocument.prototype.Document_Redo = function()
{
......
......@@ -221,12 +221,7 @@ CHistory.prototype =
// Проверяем можно ли сделать Undo
if (true !== this.Can_Undo())
{
if (this.Api && this.CollaborativeEditing && true === this.CollaborativeEditing.Is_Fast() && true !== this.CollaborativeEditing.Is_SingleUser())
this.Api.sync_TryUndoInFastCollaborative();
return null;
}
// Запоминаем самое последнее состояние документа для Redo
if ( this.Index === this.Points.length - 1 )
......
......@@ -279,7 +279,7 @@ CDocument.prototype.Preview_MailMergeResult = function(Index)
{
this.MailMergePreview = true;
this.Selection_Remove();
AscCommon.CollaborativeEditing.m_bGlobalLock = true;
AscCommon.CollaborativeEditing.Set_GlobalLock(true);
}
this.FieldsManager.Update_MailMergeFields(this.MailMergeMap[Index]);
......@@ -293,7 +293,7 @@ CDocument.prototype.EndPreview_MailMergeResult = function()
return;
this.MailMergePreview = false;
AscCommon.CollaborativeEditing.m_bGlobalLock = false;
AscCommon.CollaborativeEditing.Set_GlobalLock(false);
this.FieldsManager.Restore_MailMergeTemplate();
this.Recalculate_FromStart(true);
......
......@@ -1999,7 +1999,7 @@ background-repeat: no-repeat;\
asc_docs_api.prototype.asc_SelectionCut = function()
{
if (AscCommon.CollaborativeEditing.m_bGlobalLock)
if (AscCommon.CollaborativeEditing.Get_GlobalLock())
return;
var _logicDoc = this.WordControl.m_oLogicDocument;
......@@ -2016,7 +2016,7 @@ background-repeat: no-repeat;\
asc_docs_api.prototype.asc_PasteData = function(_format, data1, data2)
{
if (AscCommon.CollaborativeEditing.m_bGlobalLock)
if (AscCommon.CollaborativeEditing.Get_GlobalLock())
return;
this.WordControl.m_oLogicDocument.Create_NewHistoryPoint(AscDFH.historydescription_Document_PasteHotKey);
......@@ -2033,7 +2033,7 @@ background-repeat: no-repeat;\
}
};
asc_docs_api.prototype.onSaveCallback = function(e)
asc_docs_api.prototype.onSaveCallback = function(e, isUndoRequest)
{
var t = this;
if (false == e["saveLock"])
......@@ -2086,6 +2086,13 @@ background-repeat: no-repeat;\
CursorInfo = History.Get_DocumentPositionBinary();
}
if (isUndoRequest)
{
AscCommon.CollaborativeEditing.Set_GlobalLock(false);
AscCommon.CollaborativeEditing.Undo();
}
else
{
// Пересылаем свои изменения
AscCommon.CollaborativeEditing.Send_Changes(this.IsUserSave, {
UserId : this.CoAuthoringApi.getUserConnectionId(),
......@@ -2093,6 +2100,7 @@ background-repeat: no-repeat;\
CursorInfo : CursorInfo
}, HaveOtherChanges);
}
}
else
{
var nState = this.CoAuthoringApi.get_state();
......@@ -2109,14 +2117,14 @@ background-repeat: no-repeat;\
{
t.CoAuthoringApi.askSaveChanges(function(event)
{
t.onSaveCallback(event);
t.onSaveCallback(event, isUndoRequest);
});
}, TimeoutInterval);
}
}
};
asc_docs_api.prototype.asc_Save = function(isAutoSave)
asc_docs_api.prototype.asc_Save = function(isAutoSave, isUndoRequest)
{
this.IsUserSave = !isAutoSave;
if (true === this.canSave && !this.isLongAction())
......@@ -2126,7 +2134,7 @@ background-repeat: no-repeat;\
var t = this;
this.CoAuthoringApi.askSaveChanges(function(e)
{
t.onSaveCallback(e);
t.onSaveCallback(e, isUndoRequest);
});
}
};
......@@ -7373,7 +7381,7 @@ background-repeat: no-repeat;\
this.asc_SpellCheckDisconnect();
this.ShowParaMarks = false;
AscCommon.CollaborativeEditing.m_bGlobalLock = true;
AscCommon.CollaborativeEditing.Set_GlobalLock(true);
//this.isShowTableEmptyLine = false;
//this.WordControl.m_bIsRuler = true;
......
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