Commit f7f4b81d authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Исправлен баг с обновлением интерфейса после добавления секции и созданием 2...

Исправлен баг с обновлением интерфейса после добавления секции и созданием 2 точек в истории (25140). Исправлен баг с зацикливанием при пересчете (баг 25140). Исправлен баг с набором текста и автосохранением (баг 25085).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57109 954022d7-b5bf-4e40-9824-e11837661b57
parent 4451b9fb
......@@ -985,42 +985,45 @@ function CCollaborativeEditing()
this.OnCallback_AskLock = function(result)
{
// Снимаем глобальный лок
oThis.m_bGlobalLock = false;
if (result["lock"])
if (true === oThis.m_bGlobalLock)
{
// Пробегаемся по массиву и проставляем, что залочено нами
// Снимаем глобальный лок
oThis.m_bGlobalLock = false;
var Count = oThis.m_aCheckLocks.length;
for ( var Index = 0; Index < Count; Index++ )
if (result["lock"])
{
var oItem = oThis.m_aCheckLocks[Index];
// Пробегаемся по массиву и проставляем, что залочено нами
if ( true !== oItem && false !== oItem ) // сравниваем по значению и типу обязательно
var Count = oThis.m_aCheckLocks.length;
for ( var Index = 0; Index < Count; Index++ )
{
var Class = g_oTableId.Get_ById( oItem );
if ( null != Class )
var oItem = oThis.m_aCheckLocks[Index];
if ( true !== oItem && false !== oItem ) // сравниваем по значению и типу обязательно
{
Class.Lock.Set_Type( locktype_Mine );
oThis.Add_Unlock2( Class );
var Class = g_oTableId.Get_ById( oItem );
if ( null != Class )
{
Class.Lock.Set_Type( locktype_Mine );
oThis.Add_Unlock2( Class );
}
}
}
}
}
else if (result["error"])
{
// Если у нас началось редактирование диаграммы, а вернулось, что ее редактировать нельзя,
// посылаем сообщение о закрытии редактора диаграмм.
if ( true === editor.isChartEditor )
editor.sync_closeChartEditor();
else if (result["error"])
{
// Если у нас началось редактирование диаграммы, а вернулось, что ее редактировать нельзя,
// посылаем сообщение о закрытии редактора диаграмм.
if ( true === editor.isChartEditor )
editor.sync_closeChartEditor();
// Делаем откат на 1 шаг назад и удаляем из Undo/Redo эту последнюю точку
editor.WordControl.m_oLogicDocument.Document_Undo();
History.Clear_Redo();
}
// Делаем откат на 1 шаг назад и удаляем из Undo/Redo эту последнюю точку
editor.WordControl.m_oLogicDocument.Document_Undo();
History.Clear_Redo();
editor.isChartEditor = false;
}
editor.isChartEditor = false;
};
//-----------------------------------------------------------------------------------
// Функции для работы с залоченными объектами, которые еще не были добавлены
......
......@@ -1141,6 +1141,8 @@ CDocument.prototype =
this.Pages[PageIndex].Margins.Top = SectPr.PageMargins.Top;
this.Pages[PageIndex].Margins.Right = SectPr.PageSize.W - SectPr.PageMargins.Right;
this.Pages[PageIndex].Margins.Bottom = SectPr.PageSize.H - SectPr.PageMargins.Bottom;
this.RecalcInfo.Reset();
}
var Count = this.Content.length;
......@@ -12751,83 +12753,79 @@ CDocument.prototype =
this.Cursor_MoveLeft(false, false);
}
if ( false === this.Document_Is_SelectionLocked(changestype_Paragraph_Content) )
var Element = this.Content[this.CurPos.ContentPos];
var CurSectPr = this.SectionsInfo.Get_SectPr(this.CurPos.ContentPos).SectPr;
if ( type_Paragraph === Element.GetType() )
{
History.Create_NewPoint();
// Если мы стоим в параграфе, тогда делим данный параграф на 2 в текущей точке(даже если мы стоим в начале
// или в конце параграфа) и к первому параграфу приписываем конец секкции.
var Element = this.Content[this.CurPos.ContentPos];
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 );
var CurSectPr = this.SectionsInfo.Get_SectPr(this.CurPos.ContentPos).SectPr;
Element.Split( NewParagraph );
if ( type_Paragraph === Element.GetType() )
{
// Если мы стоим в параграфе, тогда делим данный параграф на 2 в текущей точке(даже если мы стоим в начале
// или в конце параграфа) и к первому параграфу приписываем конец секкции.
this.CurPos.ContentPos++;
NewParagraph.Cursor_MoveToStartPos(false);
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 );
this.Internal_Content_Add( this.CurPos.ContentPos, NewParagraph );
Element.Split( NewParagraph );
// Заметим, что после функции Split, у параграфа Element не может быть окончания секции, т.к. если она
// была в нем изначально, тогда после функции Split, окончание секции перенеслось в новый параграф.
}
else
{
// Если мы стоим в таблице, тогда делим данную таблицу на 2 по текущему ряду(текущий ряд попадает во
// вторую таблицу). Вставляем между таблицами параграф, и к этому параграфу приписываем окончание
// секции. Если мы стоим в первой строке таблицы, таблицу делить не надо, достаточно добавить новый
// параграф перед ней.
this.CurPos.ContentPos++;
NewParagraph.Cursor_MoveToStartPos(false);
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 );
var NewTable = Element.Split_Table();
if ( null === NewTable )
{
this.Internal_Content_Add( this.CurPos.ContentPos, NewParagraph );
// Заметим, что после функции Split, у параграфа Element не может быть окончания секции, т.к. если она
// была в нем изначально, тогда после функции Split, окончание секции перенеслось в новый параграф.
this.CurPos.ContentPos++;
}
else
{
// Если мы стоим в таблице, тогда делим данную таблицу на 2 по текущему ряду(текущий ряд попадает во
// вторую таблицу). Вставляем между таблицами параграф, и к этому параграфу приписываем окончание
// секции. Если мы стоим в первой строке таблицы, таблицу делить не надо, достаточно добавить новый
// параграф перед ней.
this.Internal_Content_Add( this.CurPos.ContentPos + 1, NewParagraph );
this.Internal_Content_Add( this.CurPos.ContentPos + 2, NewTable );
this.CurPos.ContentPos += 2;
}
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 );
var NewTable = Element.Split_Table();
this.Content[this.CurPos.ContentPos].Cursor_MoveToStartPos( false );
if ( null === NewTable )
{
this.Internal_Content_Add( this.CurPos.ContentPos, NewParagraph );
this.CurPos.ContentPos++;
}
else
{
this.Internal_Content_Add( this.CurPos.ContentPos + 1, NewParagraph );
this.Internal_Content_Add( this.CurPos.ContentPos + 2, NewTable );
this.CurPos.ContentPos += 2;
}
Element = NewParagraph;
}
this.Content[this.CurPos.ContentPos].Cursor_MoveToStartPos( false );
var SectPr = new CSectionPr(this);
Element = NewParagraph;
}
// В данном месте мы ставим разрыв секции. Чтобы до текущего места ничего не изменилось, мы у новой
// для новой секции копируем все настройки из старой, а в старую секцию выставляем приходящий тип
// разрыва секций. Заметим, что поскольку мы делаем все так, чтобы до текущей страницы ничего не
// изменилось, надо сохранить эту информацию для пересчета, для этого мы помечаем все следующие изменения
// как не влияющие на пересчет.
var SectPr = new CSectionPr(this);
History.MinorChanges = true;
// В данном месте мы ставим разрыв секции. Чтобы до текущего места ничего не изменилось, мы у новой
// для новой секции копируем все настройки из старой, а в старую секцию выставляем приходящий тип
// разрыва секций. Заметим, что поскольку мы делаем все так, чтобы до текущей страницы ничего не
// изменилось, надо сохранить эту информацию для пересчета, для этого мы помечаем все следующие изменения
// как не влияющие на пересчет.
History.MinorChanges = true;
SectPr.Copy( CurSectPr );
CurSectPr.Set_Type( SectionBreakType );
CurSectPr.Set_PageNum_Start( -1 );
CurSectPr.Clear_AllHdrFtr();
SectPr.Copy( CurSectPr );
CurSectPr.Set_Type( SectionBreakType );
CurSectPr.Set_PageNum_Start( -1 );
CurSectPr.Clear_AllHdrFtr();
History.MinorChanges = false;
History.MinorChanges = false;
Element.Set_SectionPr(SectPr);
Element.Refresh_RecalcData2(0, 0);
Element.Set_SectionPr(SectPr);
Element.Refresh_RecalcData2(0, 0);
this.Recalculate();
this.Document_UpdateSelectionState();
this.Recalculate();
this.Document_UpdateInterfaceState();
this.Document_UpdateSelectionState();
return true;
}
return true;
}
return false;
......
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