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