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