Commit 715f65e5 authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander.Trofimov

paste параграфов в документ происходит через функцию Insert_Content, как в drag&drop

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@56684 954022d7-b5bf-4e40-9824-e11837661b57
parent d0f6b59d
......@@ -2667,6 +2667,7 @@ PasteProcessor.prototype =
{
//������� ���������
this.oRecalcDocument.Remove(1, true, true);
this.oLogicDocument.Document_UpdateSelectionState();
}
var nInsertLength = this.aContent.length;
......@@ -2686,6 +2687,7 @@ PasteProcessor.prototype =
if(false == this.bNested && nInsertLength > 0)
{
this.oRecalcDocument.Recalculate();
oDocument.Cursor_MoveRight(false, false);
this.oLogicDocument.Document_UpdateInterfaceState();
}
......@@ -2695,136 +2697,21 @@ PasteProcessor.prototype =
{
if(!g_bIsDocumentCopyPaste)
return;
var nNewContentLength = aNewContent.length;
//����� ���� �� Document.Add_NewParagraph
var Item = oDoc.Content[oDoc.CurPos.ContentPos];
if( type_Paragraph == Item.GetType() )
{
if(true != this.bInBlock && 1 == nNewContentLength && type_Paragraph == aNewContent[0].GetType())
{
//������� ������ � ��������
var oInsertPar = aNewContent[0];
// Убираем метку конца параграфа у данного параграфа
oInsertPar.Remove_ParaEnd();
//Ищем в глубину run который нужно разбить
var oCurContent = Item;
var nCurContentContentPos = oCurContent.CurPos.ContentPos;
var oCurRunToSplit = oCurContent.Content[nCurContentContentPos];
while(null != oCurRunToSplit && para_Run != oCurRunToSplit.Type ){
oCurContent = oCurRunToSplit;
if(null != oCurRunToSplit.CurPos && null != oCurRunToSplit.CurPos.ContentPos)
nCurContentContentPos = oCurRunToSplit.CurPos.ContentPos;
else if(null != oCurRunToSplit.State && null != oCurRunToSplit.State.ContentPos)
nCurContentContentPos = oCurRunToSplit.State.ContentPos;
oCurRunToSplit = oCurContent.Content[nCurContentContentPos];
}
if(null != oCurRunToSplit && null != oCurContent){
//разбиваем run, если находимся в середине
var bSplit = false;
if ( oCurRunToSplit.State.ContentPos > 0 && oCurRunToSplit.State.ContentPos < oCurRunToSplit.Content.length ){
var RRun = oCurRunToSplit.Split_Run( oCurRunToSplit.State.ContentPos );
oInsertPar.Content.push(RRun);
bSplit = true;
}
else if(0 == oCurRunToSplit.State.ContentPos)
nCurContentContentPos--;
for(var i = 0, length = oInsertPar.Content.length; i < length; ++i){
var run = oInsertPar.Content[i];
if(run.Content.length > 0){
if(null != oCurContent.Internal_Content_Add)
oCurContent.Internal_Content_Add(++nCurContentContentPos, run, false);
else if(null != oCurContent.Add_ToContent)
oCurContent.Add_ToContent(++nCurContentContentPos, run, false);
}
}
if (bSplit)
nCurContentContentPos--;
oCurContent.Content[nCurContentContentPos].Cursor_MoveToEndPos();
if (null != oCurContent.Set_ContentPos)
oCurContent.Set_ContentPos(nCurContentContentPos, false, -1);
else
oCurContent.State.ContentPos = nCurContentContentPos;
Item.RecalcInfo.Set_Type_0(pararecalc_0_All);
Item.RecalcInfo.Set_Type_0_Spell(pararecalc_0_Spell_All);
this.oRecalcDocument.ContentLastChangePos = this.oRecalcDocument.CurPos.ContentPos;
}
var NearPos = oDoc.Get_NearestPos(this.oLogicDocument.TargetPos.PageNum, this.oLogicDocument.TargetPos.X, this.oLogicDocument.TargetPos.Y);
var oSelectedContent = new CSelectedContent();
for (var i = 0, length = aNewContent.length; i < length; ++i) {
var oSelectedElement = new CSelectedElement();
oSelectedElement.Element = aNewContent[i];
if (i == length - 1 && true != this.bInBlock && type_Paragraph == oSelectedElement.Element.GetType()) {
oSelectedElement.SelectedAll = false;
if (null != NearPos.Paragraph)
NearPos.Paragraph.Check_NearestPos(NearPos);
}
else
{
var LastPos = this.oRecalcDocument.CurPos.ContentPos;
var LastPosCurDoc = oDoc.CurPos.ContentPos;
//����� ��������� ��������
var oSourceFirstPar = Item;
var oSourceLastPar = new Paragraph(oDoc.DrawingDocument, oDoc, 0, 50, 50, X_Right_Field, Y_Bottom_Field );
if(true !== oSourceFirstPar.Cursor_IsEnd())
oSourceFirstPar.Split(oSourceLastPar);
var oInsFirstPar = aNewContent[0];
var oInsLastPar = null;
if(nNewContentLength > 1)
oInsLastPar = aNewContent[nNewContentLength - 1];
var nStartIndex = 0;
var nEndIndex = nNewContentLength - 1;
if(type_Paragraph == oInsFirstPar.GetType())
{
//�������� �������� ������� ������������ ��������� � ������ �������� ��������
//CopyPr_Open - ������� � �������, �.�. ���� �������� ��� � ���������
oInsFirstPar.CopyPr_Open( oSourceFirstPar );
//�������� ���������� ������������ ���������
oSourceFirstPar.Concat(oInsFirstPar);
//�������� ��������� ������ ����� ������ �� ��������� ���� ��������
nStartIndex++;
oSelectedElement.SelectedAll = true;
oSelectedContent.Add(oSelectedElement);
}
else if(type_Table == oInsFirstPar.GetType())
{
//���� ��������� ������� � ������ ��������, �� �� ��������� ���
if(oSourceFirstPar.IsEmpty())
{
oSourceFirstPar = null;
}
}
//���� �� ���������� ������ ����� ���������, �� ��������� ���������� ���������� ��������� � ������ ������ �������� ��������� ���������
if(null != oInsLastPar && type_Paragraph == oInsLastPar.GetType() && true != this.bInBlock)
{
var nNewContentPos = oInsLastPar.Content.length - 2;
//�������� �������� ���������� ��������� ��������� � ��������� ����������� ��������
//CopyPr - �� ������� � �������, �.�. � ������� ��������� ������� ����� ��������� � ��������
if(null != oInsLastPar)
oSourceLastPar.CopyPr(oInsLastPar);
oInsLastPar.Cursor_MoveToEndPos(false, false);
oInsLastPar.Concat(oSourceLastPar);
oSourceLastPar = oInsLastPar;
nEndIndex--;
}
//���������
for(var i = nStartIndex; i <= nEndIndex; ++i )
{
var oElemToAdd = aNewContent[i];
LastPosCurDoc++;
oDoc.Internal_Content_Add(LastPosCurDoc, oElemToAdd);
}
if(null != oSourceLastPar)
{
//��������� ��������� ��������
LastPosCurDoc++;
oDoc.Internal_Content_Add(LastPosCurDoc, oSourceLastPar);
}
if(null == oSourceFirstPar)
{
//������� ������ ��������, ������ ��� ����� ������ ���� � ��������� �� ����� �� ������ ���������
oDoc.Internal_Content_Remove(LastPosCurDoc, 1);
LastPosCurDoc--;
}
this.oRecalcDocument.ContentLastChangePos = LastPos;
Item.RecalcInfo.Set_Type_0(pararecalc_0_All);
Item.RecalcInfo.Set_Type_0_Spell(pararecalc_0_Spell_All);
oDoc.CurPos.ContentPos = LastPosCurDoc;
}
}
oDoc.Insert_Content(oSelectedContent, NearPos);
},
......
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