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

Сделано, чтобы можно было копировать из формулы в формулу (баг 27034)....

Сделано, чтобы можно было копировать из формулы в формулу (баг 27034). Сделано, чтобы при drag-n-drop формулы параграфы лочились (баг 27221).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@59355 954022d7-b5bf-4e40-9824-e11837661b57
parent ab009bea
......@@ -8576,35 +8576,15 @@ CDocument.prototype =
var DocContent = this.Get_SelectedContent();
var Para = NearPos.Paragraph;
// Автофигуры не вставляем в другие автофигуры
if ( true === Para.Parent.Is_DrawingShape() && true === DocContent.HaveShape )
{
History.Remove_LastPoint();
return;
}
// В формулу вставляем только формулу
var ParaNearPos = NearPos.Paragraph.Get_ParaNearestPos(NearPos);
if (null === ParaNearPos || ParaNearPos.Classes.length < 2)
{
if (false === this.Can_InsertContent(DocContent, NearPos))
History.Remove_LastPoint();
return;
}
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
if (para_Math_Run === LastClass.Type)
var Para = NearPos.Paragraph;
// Если мы копируем, тогда не надо проверять выделенные параграфы, а если переносим, тогда проверяем
var CheckChangesType = (true !== bCopy ? changestype_Document_Content : changestype_None);
if (false === this.Document_Is_SelectionLocked(CheckChangesType, {Type : changestype_2_ElementsArray_and_Type, Elements : [Para], CheckType : changestype_Paragraph_Content}))
{
// Проверяем, что вставляемый контент тоже формула
var Element = DocContent.Elements[0].Element;
var MathRun = LastClass;
if (1 !== DocContent.Elements.length || type_Paragraph !== Element.Get_Type() || 2 !== Element.Content.length || para_Math !== Element.Content[0].Type || null === MathRun.Parent)
{
History.Remove_LastPoint();
return;
}
// Если надо удаляем выделенную часть (пересчет отключаем на время удаления)
if ( true !== bCopy )
{
......@@ -8617,55 +8597,14 @@ CDocument.prototype =
this.Selection_Remove();
var NewMathRun = MathRun.Split(ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1);
var MathContent = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var MathContentPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
MathContent.Add_ToContent(MathContentPos + 1, NewMathRun);
MathContent.Insert_MathContent(Element.Content[0].Root, MathContentPos + 1, true);
// Выделение выставляется внутри функции Insert_Content
Para.Parent.Insert_Content( DocContent, NearPos );
this.Recalculate();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
return;
}
else if (para_Run !== LastClass.Type)
{
History.Remove_LastPoint();
return;
}
// Если мы копируем, тогда не надо проверять выделенные параграфы, а если переносим, тогда проверяем
var CheckChangesType = (true !== bCopy ? changestype_Document_Content : changestype_None);
if ( false === this.Document_Is_SelectionLocked( CheckChangesType, { Type : changestype_2_ElementsArray_and_Type, Elements : [Para], CheckType : changestype_Paragraph_Content } ) )
{
// Если надо удаляем выделенную часть (пересчет отключаем на время удаления)
if ( true !== bCopy )
{
this.TurnOff_Recalculate();
this.TurnOff_InterfaceEvents();
this.Remove(1, false, false, false);
this.TurnOn_Recalculate(false);
this.TurnOn_InterfaceEvents(false);
}
this.Selection_Remove();
// Выделение выставляется внутри функции Insert_Content
if ( undefined != Para.Parent )
{
Para.Parent.Insert_Content( DocContent, NearPos );
this.Recalculate();
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
this.Document_UpdateRulersState();
}
}
else
History.Remove_LastPoint();
......@@ -8705,187 +8644,238 @@ CDocument.prototype =
return SelectedContent;
},
Insert_Content : function(SelectedContent, NearPos)
Can_InsertContent : function(SelectedContent, NearPos)
{
var NearContentPos = NearPos.ContentPos;
// Проверяем, что вставка не пустая
if (SelectedContent.Elements.length <= 0)
return false;
var Elements = SelectedContent.Elements;
var Para = NearPos.Paragraph;
var ElementsCount = Elements.length;
if ( ElementsCount <= 0 )
return;
// Автофигуры не вставляем в другие автофигуры
if (true === Para.Parent.Is_DrawingShape() && true === SelectedContent.HaveShape)
return false;
// Проверяем корректность места, куда вставляем
var ParaNearPos = NearPos.Paragraph.Get_ParaNearestPos(NearPos);
if (null === ParaNearPos || ParaNearPos.Classes.length < 2)
return false;
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
if (para_Math_Run === LastClass.Type)
{
// Проверяем, что вставляемый контент тоже формула
var Element = SelectedContent.Elements[0].Element;
if (1 !== SelectedContent.Elements.length || type_Paragraph !== Element.Get_Type() || 2 !== Element.Content.length || para_Math !== Element.Content[0].Type || null === LastClass.Parent)
return false;
}
else if (para_Run !== LastClass.Type)
return false;
if (null === Para.Parent || undefined === Para.Parent)
return false;
return true;
},
Insert_Content : function(SelectedContent, NearPos)
{
var Para = NearPos.Paragraph;
// Сначала найдем номер элемента, начиная с которого мы будем производить вставку
var DstIndex = -1;
var Count = this.Content.length;
for ( var Index = 0; Index < Count; Index++ )
var ParaNearPos = Para.Get_ParaNearestPos(NearPos);
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
if (para_Math_Run === LastClass.Type)
{
if ( this.Content[Index] === Para )
var MathRun = LastClass;
var NewMathRun = MathRun.Split(ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1);
var MathContent = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var MathContentPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
var Element = SelectedContent.Elements[0].Element;
var InsertMathContent = null;
for (var nPos = 0, nParaLen = Element.Content.length; nPos < nParaLen; nPos++)
{
DstIndex = Index;
break;
if (para_Math === Element.Content[nPos].Type)
{
InsertMathContent = Element.Content[nPos];
break;
}
}
}
if ( -1 === DstIndex )
return;
var FirstElement = SelectedContent.Elements[0];
if ( 1 === ElementsCount && true !== FirstElement.SelectedAll && type_Paragraph === FirstElement.Element.GetType() && true !== FirstElement.Element.Is_Empty() )
if (null !== InsertMathContent)
{
MathContent.Add_ToContent(MathContentPos + 1, NewMathRun);
MathContent.Insert_MathContent(InsertMathContent.Root, MathContentPos + 1, true);
}
}
else if (para_Run === LastClass.Type)
{
// Нам нужно в заданный параграф вставить выделенный текст
var NewPara = FirstElement.Element;
var NewElementsCount = NewPara.Content.length - 1; // Последний ран с para_End не добавляем
var ParaNearPos = Para.Get_ParaNearestPos( NearPos );
if ( null === ParaNearPos || ParaNearPos.Classes.length < 2 )
return;
var NearContentPos = NearPos.ContentPos;
// Сначала найдем номер элемента, начиная с которого мы будем производить вставку
var DstIndex = -1;
var Count = this.Content.length;
for (var Index = 0; Index < Count; Index++)
{
if (this.Content[Index] === Para)
{
DstIndex = Index;
break;
}
}
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
if ( para_Run !== LastClass.Type )
return;
if (-1 === DstIndex)
return false;
var NewElement = LastClass.Split( ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1 );
var PrevClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var PrevPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
var Elements = SelectedContent.Elements;
var ElementsCount = Elements.length;
var FirstElement = SelectedContent.Elements[0];
if (1 === ElementsCount && true !== FirstElement.SelectedAll && type_Paragraph === FirstElement.Element.GetType() && true !== FirstElement.Element.Is_Empty())
{
// Нам нужно в заданный параграф вставить выделенный текст
var NewPara = FirstElement.Element;
var NewElementsCount = NewPara.Content.length - 1; // Последний ран с para_End не добавляем
PrevClass.Add_ToContent( PrevPos + 1, NewElement );
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
var NewElement = LastClass.Split(ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1);
var PrevClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var PrevPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
// TODO: Заглушка для переноса автофигур и картинок. Когда разрулим ситуацию так, чтобы когда у нас
// в текста была выделена автофигура выделение шло для автофигур, тогда здесь можно будет убрать.
var bNeedSelect = (true === SelectedContent.MoveDrawing ? false : true);
PrevClass.Add_ToContent(PrevPos + 1, NewElement);
for ( var Index = 0; Index < NewElementsCount; Index++ )
{
var Item = NewPara.Content[Index];
PrevClass.Add_ToContent( PrevPos + 1 + Index, Item );
// TODO: Заглушка для переноса автофигур и картинок. Когда разрулим ситуацию так, чтобы когда у нас
// в текста была выделена автофигура выделение шло для автофигур, тогда здесь можно будет убрать.
var bNeedSelect = (true === SelectedContent.MoveDrawing ? false : true);
if ( true === bNeedSelect )
Item.Select_All();
}
if ( true === bNeedSelect )
{
PrevClass.Selection.Use = true;
PrevClass.Selection.StartPos = PrevPos + 1;
PrevClass.Selection.EndPos = PrevPos + 1 + NewElementsCount - 1;
for (var Index = 0; Index < NewElementsCount; Index++)
{
var Item = NewPara.Content[Index];
PrevClass.Add_ToContent(PrevPos + 1 + Index, Item);
if (true === bNeedSelect)
Item.Select_All();
}
for ( var Index = 0; Index < ParaNearPos.Classes.length - 2; Index++ )
if (true === bNeedSelect)
{
var Class = ParaNearPos.Classes[Index];
var ClassPos = ParaNearPos.NearPos.ContentPos.Data[Index];
PrevClass.Selection.Use = true;
PrevClass.Selection.StartPos = PrevPos + 1;
PrevClass.Selection.EndPos = PrevPos + 1 + NewElementsCount - 1;
Class.Selection.Use = true;
Class.Selection.StartPos = ClassPos;
Class.Selection.EndPos = ClassPos;
for (var Index = 0; Index < ParaNearPos.Classes.length - 2; Index++)
{
var Class = ParaNearPos.Classes[Index];
var ClassPos = ParaNearPos.NearPos.ContentPos.Data[Index];
Class.Selection.Use = true;
Class.Selection.StartPos = ClassPos;
Class.Selection.EndPos = ClassPos;
}
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex;
}
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex;
if (PrevClass.Correct_Content)
{
PrevClass.Correct_Content();
}
}
if ( PrevClass.Correct_Content )
else
{
PrevClass.Correct_Content();
}
}
else
{
var bConcatS = ( type_Table === Elements[0].Element.GetType() ? false : true );
var bConcatE = ( type_Table === Elements[ElementsCount - 1].Element.GetType() || true === Elements[ElementsCount - 1].SelectedAll ? false : true );
var ParaS = Para;
var ParaE = Para;
var ParaEIndex = DstIndex;
// Нам надо разделить наш параграф в заданной позиции, если позиция в
// начале или конце параграфа, тогда делить не надо
Para.Cursor_MoveToNearPos( NearPos );
Para.Selection_Remove();
var bConcatS = ( type_Table === Elements[0].Element.GetType() ? false : true );
var bConcatE = ( type_Table === Elements[ElementsCount - 1].Element.GetType() || true === Elements[ElementsCount - 1].SelectedAll ? false : true );
var ParaS = Para;
var ParaE = Para;
var ParaEIndex = DstIndex;
if ( true === Para.Cursor_IsEnd() )
{
bConcatE = false;
// Нам надо разделить наш параграф в заданной позиции, если позиция в
// начале или конце параграфа, тогда делить не надо
Para.Cursor_MoveToNearPos(NearPos);
Para.Selection_Remove();
if (true === Para.Cursor_IsEnd())
{
bConcatE = false;
if ( 1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && ( true === FirstElement.Element.Is_Empty() || true == FirstElement.SelectedAll ) )
if (1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && ( true === FirstElement.Element.Is_Empty() || true == FirstElement.SelectedAll ))
{
bConcatS = false;
if (type_Paragraph !== this.Content[DstIndex].Get_Type() || true !== this.Content[DstIndex].Is_Empty())
DstIndex++;
}
}
else if (true === Para.Cursor_IsStart())
{
bConcatS = false;
}
else
{
// Создаем новый параграф
var NewParagraph = new Paragraph(this.DrawingDocument, this, 0, 0, 0, 0, 0);
Para.Split(NewParagraph);
this.Internal_Content_Add(DstIndex + 1, NewParagraph);
if (type_Paragraph !== this.Content[DstIndex].Get_Type() || true !== this.Content[DstIndex].Is_Empty())
DstIndex++;
ParaE = NewParagraph;
ParaEIndex = DstIndex + 1;
}
}
else if ( true === Para.Cursor_IsStart() )
{
bConcatS = false;
}
else
{
// Создаем новый параграф
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 );
Para.Split( NewParagraph );
this.Internal_Content_Add( DstIndex + 1, NewParagraph );
ParaE = NewParagraph;
ParaEIndex = DstIndex + 1;
}
var StartIndex = 0;
if (true === bConcatS)
{
// Если мы присоединяем новый параграф, то и копируем все настройки параграфа (так делает Word)
ParaS.Concat(Elements[0].Element);
ParaS.Set_Pr(Elements[0].Element.Pr);
var StartIndex = 0;
if ( true === bConcatS )
{
// Если мы присоединяем новый параграф, то и копируем все настройки параграфа (так делает Word)
ParaS.Concat( Elements[0].Element );
ParaS.Set_Pr( Elements[0].Element.Pr );
StartIndex++;
StartIndex++;
var TempPara = Elements[0].Element;
var TempPara = Elements[0].Element;
// Вызываем так, чтобы выделить все внутренние элементы
TempPara.Select_All();
// Вызываем так, чтобы выделить все внутренние элементы
TempPara.Select_All();
ParaS.Selection.Use = true;
ParaS.Selection.StartPos = ParaS.Content.length - TempPara.Content.length;
ParaS.Selection.EndPos = ParaS.Content.length - 1;
}
ParaS.Selection.Use = true;
ParaS.Selection.StartPos = ParaS.Content.length - TempPara.Content.length;
ParaS.Selection.EndPos = ParaS.Content.length - 1;
}
var EndIndex = ElementsCount - 1;
if ( true === bConcatE && StartIndex < EndIndex )
{
var _ParaE = Elements[ElementsCount - 1].Element;
var EndIndex = ElementsCount - 1;
if (true === bConcatE && StartIndex < EndIndex)
{
var _ParaE = Elements[ElementsCount - 1].Element;
var TempCount = _ParaE.Content.length - 1;
var TempCount = _ParaE.Content.length - 1;
_ParaE.Select_All();
_ParaE.Concat( ParaE );
_ParaE.Set_Pr( ParaE.Pr );
_ParaE.Select_All();
_ParaE.Concat(ParaE);
_ParaE.Set_Pr(ParaE.Pr);
this.Internal_Content_Add( ParaEIndex, _ParaE );
this.Internal_Content_Remove( ParaEIndex + 1, 1 );
this.Internal_Content_Add(ParaEIndex, _ParaE);
this.Internal_Content_Remove(ParaEIndex + 1, 1);
_ParaE.Selection.Use = true;
_ParaE.Selection.StartPos = 0;
_ParaE.Selection.EndPos = TempCount;
_ParaE.Selection.Use = true;
_ParaE.Selection.StartPos = 0;
_ParaE.Selection.EndPos = TempCount;
EndIndex--;
}
EndIndex--;
}
for ( var Index = StartIndex; Index <= EndIndex; Index++ )
{
this.Internal_Content_Add( DstIndex + Index, Elements[Index].Element );
this.Content[DstIndex + Index].Select_All();
for (var Index = StartIndex; Index <= EndIndex; Index++)
{
this.Internal_Content_Add(DstIndex + Index, Elements[Index].Element);
this.Content[DstIndex + Index].Select_All();
}
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex + ElementsCount - 1;
}
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex + ElementsCount - 1;
if (docpostype_DrawingObjects !== this.CurPos.Type)
this.CurPos.Type = docpostype_Content;
}
if ( docpostype_DrawingObjects !== this.CurPos.Type )
this.CurPos.Type = docpostype_Content;
},
Document_SelectNumbering : function(NumPr)
......
......@@ -3918,194 +3918,211 @@ CDocumentContent.prototype =
Insert_Content : function(SelectedContent, NearPos)
{
var NearContentPos = NearPos.ContentPos;
var Elements = SelectedContent.Elements;
var ElementsCount = Elements.length;
if ( ElementsCount <= 0 )
return;
var Para = NearPos.Paragraph;
// Сначала найдем номер элемента, начиная с которого мы будем производить вставку
var DstIndex = -1;
var Count = this.Content.length;
for ( var Index = 0; Index < Count; Index++ )
var ParaNearPos = Para.Get_ParaNearestPos(NearPos);
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
if (para_Math_Run === LastClass.Type)
{
if ( this.Content[Index] === Para )
var MathRun = LastClass;
var NewMathRun = MathRun.Split(ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1);
var MathContent = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var MathContentPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
var Element = SelectedContent.Elements[0].Element;
var InsertMathContent = null;
for (var nPos = 0, nParaLen = Element.Content.length; nPos < nParaLen; nPos++)
{
DstIndex = Index;
break;
if (para_Math === Element.Content[nPos].Type)
{
InsertMathContent = Element.Content[nPos];
break;
}
}
}
if ( -1 === DstIndex )
return;
var bNeedSelect = true;
var FirstElement = SelectedContent.Elements[0];
if ( 1 === ElementsCount && true !== FirstElement.SelectedAll && type_Paragraph === FirstElement.Element.GetType() )
if (null !== InsertMathContent)
{
MathContent.Add_ToContent(MathContentPos + 1, NewMathRun);
MathContent.Insert_MathContent(InsertMathContent.Root, MathContentPos + 1, true);
}
}
else if (para_Run === LastClass.Type)
{
// Нам нужно в заданный параграф вставить выделенный текст
var NewPara = FirstElement.Element;
var NewElementsCount = NewPara.Content.length - 1; // Последний ран с para_End не добавляем
var Elements = SelectedContent.Elements;
var ParaNearPos = Para.Get_ParaNearestPos( NearPos );
if ( null === ParaNearPos || ParaNearPos.Classes.length < 2 )
return;
var Para = NearPos.Paragraph;
// Сначала найдем номер элемента, начиная с которого мы будем производить вставку
var DstIndex = -1;
var Count = this.Content.length;
for (var Index = 0; Index < Count; Index++)
{
if (this.Content[Index] === Para)
{
DstIndex = Index;
break;
}
}
var LastClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 1];
if ( para_Run !== LastClass.Type )
if (-1 === DstIndex)
return;
var NewElement = LastClass.Split( ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1 );
var PrevClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var PrevPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
var bNeedSelect = true;
PrevClass.Add_ToContent( PrevPos + 1, NewElement );
var Elements = SelectedContent.Elements;
var ElementsCount = Elements.length;
var FirstElement = SelectedContent.Elements[0];
if (1 === ElementsCount && true !== FirstElement.SelectedAll && type_Paragraph === FirstElement.Element.GetType())
{
// Нам нужно в заданный параграф вставить выделенный текст
var NewPara = FirstElement.Element;
var NewElementsCount = NewPara.Content.length - 1; // Последний ран с para_End не добавляем
// TODO: Заглушка для переноса автофигур и картинок. Когда разрулим ситуацию так, чтобы когда у нас
// в текста была выделена автофигура выделение шло для автофигур, тогда здесь можно будет убрать.
var LogicDocument = this.LogicDocument;
bNeedSelect = (true === SelectedContent.MoveDrawing ? false : true);
var NewElement = LastClass.Split(ParaNearPos.NearPos.ContentPos, ParaNearPos.Classes.length - 1);
var PrevClass = ParaNearPos.Classes[ParaNearPos.Classes.length - 2];
var PrevPos = ParaNearPos.NearPos.ContentPos.Data[ParaNearPos.Classes.length - 2];
for ( var Index = 0; Index < NewElementsCount; Index++ )
{
var Item = NewPara.Content[Index];
PrevClass.Add_ToContent( PrevPos + 1 + Index, Item );
PrevClass.Add_ToContent(PrevPos + 1, NewElement);
if ( true === bNeedSelect )
Item.Select_All();
}
// TODO: Заглушка для переноса автофигур и картинок. Когда разрулим ситуацию так, чтобы когда у нас
// в текста была выделена автофигура выделение шло для автофигур, тогда здесь можно будет убрать.
bNeedSelect = (true === SelectedContent.MoveDrawing ? false : true);
if ( true === bNeedSelect )
{
PrevClass.Selection.Use = true;
PrevClass.Selection.StartPos = PrevPos + 1;
PrevClass.Selection.EndPos = PrevPos + 1 + NewElementsCount - 1;
for (var Index = 0; Index < NewElementsCount; Index++)
{
var Item = NewPara.Content[Index];
PrevClass.Add_ToContent(PrevPos + 1 + Index, Item);
if (true === bNeedSelect)
Item.Select_All();
}
for ( var Index = 0; Index < ParaNearPos.Classes.length - 2; Index++ )
if (true === bNeedSelect)
{
var Class = ParaNearPos.Classes[Index];
var ClassPos = ParaNearPos.NearPos.ContentPos.Data[Index];
PrevClass.Selection.Use = true;
PrevClass.Selection.StartPos = PrevPos + 1;
PrevClass.Selection.EndPos = PrevPos + 1 + NewElementsCount - 1;
for (var Index = 0; Index < ParaNearPos.Classes.length - 2; Index++)
{
var Class = ParaNearPos.Classes[Index];
var ClassPos = ParaNearPos.NearPos.ContentPos.Data[Index];
Class.Selection.Use = true;
Class.Selection.StartPos = ClassPos;
Class.Selection.EndPos = ClassPos;
Class.Selection.Use = true;
Class.Selection.StartPos = ClassPos;
Class.Selection.EndPos = ClassPos;
}
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex;
}
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex;
if (PrevClass.Correct_Content)
{
PrevClass.Correct_Content();
}
}
if ( PrevClass.Correct_Content )
else
{
PrevClass.Correct_Content();
}
}
else
{
var bConcatS = ( type_Table === Elements[0].Element.GetType() ? false : true );
var bConcatE = ( type_Table === Elements[ElementsCount - 1].Element.GetType() || true === Elements[ElementsCount - 1].SelectedAll ? false : true );
var ParaS = Para;
var ParaE = Para;
var ParaEIndex = DstIndex;
var bConcatS = ( type_Table === Elements[0].Element.GetType() ? false : true );
var bConcatE = ( type_Table === Elements[ElementsCount - 1].Element.GetType() || true === Elements[ElementsCount - 1].SelectedAll ? false : true );
var ParaS = Para;
var ParaE = Para;
var ParaEIndex = DstIndex;
// Нам надо разделить наш параграф в заданной позиции, если позиция в
// начале или конце параграфа, тогда делить не надо
Para.Cursor_MoveToNearPos( NearPos );
Para.Selection_Remove();
// Нам надо разделить наш параграф в заданной позиции, если позиция в
// начале или конце параграфа, тогда делить не надо
Para.Cursor_MoveToNearPos(NearPos);
Para.Selection_Remove();
if ( true === Para.Cursor_IsEnd() )
{
bConcatE = false;
if (true === Para.Cursor_IsEnd())
{
bConcatE = false;
if (1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && ( true === FirstElement.Element.Is_Empty() || true == FirstElement.SelectedAll ))
{
bConcatS = false;
if ( 1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && ( true === FirstElement.Element.Is_Empty() || true == FirstElement.SelectedAll ) )
if (type_Paragraph !== this.Content[DstIndex].Get_Type() || true !== this.Content[DstIndex].Is_Empty())
DstIndex++;
}
}
else if (true === Para.Cursor_IsStart())
{
bConcatS = false;
}
else
{
// Создаем новый параграф
var NewParagraph = new Paragraph(this.DrawingDocument, this, 0, 0, 0, 0, 0, this.bPresentation === true);
Para.Split(NewParagraph);
this.Internal_Content_Add(DstIndex + 1, NewParagraph);
if (type_Paragraph !== this.Content[DstIndex].Get_Type() || true !== this.Content[DstIndex].Is_Empty())
DstIndex++;
ParaE = NewParagraph;
ParaEIndex = DstIndex + 1;
}
}
else if ( true === Para.Cursor_IsStart() )
{
bConcatS = false;
}
else
{
// Создаем новый параграф
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0, this.bPresentation === true );
Para.Split( NewParagraph );
this.Internal_Content_Add( DstIndex + 1, NewParagraph );
ParaE = NewParagraph;
ParaEIndex = DstIndex + 1;
}
var StartIndex = 0;
if (true === bConcatS)
{
// Если мы присоединяем новый параграф, то и копируем все настройки параграфа (так делает Word)
ParaS.Concat(Elements[0].Element);
ParaS.Set_Pr(Elements[0].Element.Pr);
var StartIndex = 0;
if ( true === bConcatS )
{
// Если мы присоединяем новый параграф, то и копируем все настройки параграфа (так делает Word)
ParaS.Concat( Elements[0].Element );
ParaS.Set_Pr( Elements[0].Element.Pr );
StartIndex++;
StartIndex++;
var TempPara = Elements[0].Element;
var TempPara = Elements[0].Element;
// Вызываем так, чтобы выделить все внутренние элементы
TempPara.Select_All();
// Вызываем так, чтобы выделить все внутренние элементы
TempPara.Select_All();
ParaS.Selection.Use = true;
ParaS.Selection.StartPos = ParaS.Content.length - TempPara.Content.length;
ParaS.Selection.EndPos = ParaS.Content.length - 1;
}
ParaS.Selection.Use = true;
ParaS.Selection.StartPos = ParaS.Content.length - TempPara.Content.length;
ParaS.Selection.EndPos = ParaS.Content.length - 1;
}
var EndIndex = ElementsCount - 1;
if (true === bConcatE)
{
var _ParaE = Elements[ElementsCount - 1].Element;
var EndIndex = ElementsCount - 1;
if ( true === bConcatE )
{
var _ParaE = Elements[ElementsCount - 1].Element;
var TempCount = _ParaE.Content.length - 1;
var TempCount = _ParaE.Content.length - 1;
_ParaE.Select_All();
_ParaE.Concat( ParaE );
_ParaE.Set_Pr( ParaE.Pr );
_ParaE.Select_All();
_ParaE.Concat(ParaE);
_ParaE.Set_Pr(ParaE.Pr);
this.Internal_Content_Add( ParaEIndex, _ParaE );
this.Internal_Content_Remove( ParaEIndex + 1, 1 );
_ParaE.Selection.Use = true;
_ParaE.Selection.StartPos = 0;
_ParaE.Selection.EndPos = TempCount;
this.Internal_Content_Add(ParaEIndex, _ParaE);
this.Internal_Content_Remove(ParaEIndex + 1, 1);
EndIndex--;
}
_ParaE.Selection.Use = true;
_ParaE.Selection.StartPos = 0;
_ParaE.Selection.EndPos = TempCount;
EndIndex--;
}
for ( var Index = StartIndex; Index <= EndIndex; Index++ )
{
this.Internal_Content_Add( DstIndex + Index, Elements[Index].Element );
this.Content[DstIndex + Index].Select_All();
}
this.Selection.Start = false;
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex + ElementsCount - 1;
}
for (var Index = StartIndex; Index <= EndIndex; Index++)
{
this.Internal_Content_Add(DstIndex + Index, Elements[Index].Element);
this.Content[DstIndex + Index].Select_All();
}
if (true === bNeedSelect)
this.Parent.Set_CurrentElement(false, this.Get_StartPage_Absolute());
else if (null !== this.LogicDocument && docpostype_HdrFtr === this.LogicDocument.CurPos.Type)
{
this.Parent.Set_CurrentElement(false, this.Get_StartPage_Absolute());
this.CurPos.Type = docpostype_DrawingObjects;
this.Selection.Use = true;
this.Selection.Start = false;
this.Selection.Start = false;
this.Selection.Use = true;
this.Selection.StartPos = DstIndex;
this.Selection.EndPos = DstIndex + ElementsCount - 1;
}
if (true === bNeedSelect)
this.Parent.Set_CurrentElement(false, this.Get_StartPage_Absolute());
else if (null !== this.LogicDocument && docpostype_HdrFtr === this.LogicDocument.CurPos.Type)
{
this.Parent.Set_CurrentElement(false, this.Get_StartPage_Absolute());
this.CurPos.Type = docpostype_DrawingObjects;
this.Selection.Use = true;
this.Selection.Start = 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