Commit be268e1d authored by Ilya Kirillov's avatar Ilya Kirillov

Various embeddings of the content classes of the paragraph in others have been worked out.

parent 1a8664ae
......@@ -123,92 +123,33 @@ ParaField.prototype.Remove_FromContent = function(Pos, Count, UpdatePosition)
};
ParaField.prototype.Add = function(Item)
{
switch (Item.Type)
{
case para_Run :
case para_Hyperlink:
{
var TextPr = this.Get_FirstTextPr();
Item.SelectAll();
Item.Apply_TextPr(TextPr);
Item.RemoveSelection();
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
if (para_Run === CurItem.Type)
{
var NewRun = CurItem.Split2(CurItem.State.ContentPos);
this.Add_ToContent(CurPos + 1, Item);
this.Add_ToContent(CurPos + 2, NewRun);
this.State.ContentPos = CurPos + 2;
this.Content[this.State.ContentPos].MoveCursorToStartPos();
}
else
CurItem.Add(Item);
break;
}
case para_Math :
{
var ContentPos = new CParagraphContentPos();
this.Get_ParaContentPos(false, false, ContentPos);
var CurPos = ContentPos.Get(0);
// Ран формула делит на части, а в остальные элементы добавляется целиком
if (para_Run === this.Content[CurPos].Type)
{
// Разделяем текущий элемент (возвращается правая часть)
var NewElement = this.Content[CurPos].Split(ContentPos, 1);
if (null !== NewElement)
this.Add_ToContent(CurPos + 1, NewElement, true);
var Elem = new ParaMath();
Elem.Root.Load_FromMenu(Item.Menu, this.Get_Paragraph());
Elem.Root.Correct_Content(true);
this.Add_ToContent(CurPos + 1, Elem, true);
// Перемещаем кусор в конец формулы
this.State.ContentPos = CurPos + 1;
this.Content[this.State.ContentPos].MoveCursorToEndPos(false);
}
else
this.Content[CurPos].Add(Item);
break;
}
case para_Field:
{
// Вместо добавления самого элемента добавляем его содержимое
var Count = Item.Content.length;
if (Count > 0)
{
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
var CurContentPos = new CParagraphContentPos();
CurItem.Get_ParaContentPos(false, false, CurContentPos);
var NewItem = CurItem.Split(CurContentPos, 0);
for (var Index = 0; Index < Count; Index++)
{
this.Add_ToContent(CurPos + Index + 1, Item.Content[Index], false);
}
this.Add_ToContent(CurPos + Count + 1, NewItem, false);
this.State.ContentPos = CurPos + Count;
this.Content[this.State.ContentPos].MoveCursorToEndPos();
}
break;
}
default :
{
this.Content[this.State.ContentPos].Add(Item);
break;
}
}
if (para_Field === Item.Type)
{
// Вместо добавления самого элемента добавляем его содержимое
var Count = Item.Content.length;
if (Count > 0)
{
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
var CurContentPos = new CParagraphContentPos();
CurItem.Get_ParaContentPos(false, false, CurContentPos);
var NewItem = CurItem.Split(CurContentPos, 0);
for (var Index = 0; Index < Count; Index++)
{
this.Add_ToContent(CurPos + Index + 1, Item.Content[Index], false);
}
this.Add_ToContent(CurPos + Count + 1, NewItem, false);
this.State.ContentPos = CurPos + Count;
this.Content[this.State.ContentPos].MoveCursorToEndPos();
}
}
else
{
CParagraphContentWithParagraphLikeContent.prototype.Add.apply(this, arguments);
}
};
ParaField.prototype.Split = function (ContentPos, Depth)
{
......
......@@ -108,108 +108,33 @@ ParaHyperlink.prototype.Remove_FromContent = function(Pos, Count, UpdatePosition
ParaHyperlink.prototype.Add = function(Item)
{
switch (Item.Type)
{
case para_Run :
case para_Field:
case para_InlineLevelSdt:
{
var TextPr = this.Get_FirstTextPr();
Item.SelectAll();
Item.Apply_TextPr(TextPr);
Item.RemoveSelection();
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
if (para_Run === CurItem.Type || para_Math === CurItem.Type)
{
var ContentPos = new CParagraphContentPos();
this.Content[CurPos].Get_ParaContentPos(false, false, ContentPos);
// Разделяем текущий элемент (возвращается правая часть)
var NewElement = this.Content[CurPos].Split(ContentPos, 0);
if (null !== NewElement)
this.Add_ToContent(CurPos + 1, NewElement);
this.Add_ToContent(CurPos + 1, Item);
if (para_Field === Item.Type)
{
this.State.ContentPos = CurPos + 2;
this.Content[this.State.ContentPos].MoveCursorToStartPos(false);
}
else
{
this.State.ContentPos = CurPos + 1;
this.Content[this.State.ContentPos].MoveCursorToEndPos(false);
}
}
else
CurItem.Add(Item);
break;
}
case para_Math :
{
var ContentPos = new CParagraphContentPos();
this.Get_ParaContentPos(false, false, ContentPos);
var CurPos = ContentPos.Get(0);
// Ран формула делит на части, а в остальные элементы добавляется целиком
if (para_Run === this.Content[CurPos].Type)
{
// Разделяем текущий элемент (возвращается правая часть)
var NewElement = this.Content[CurPos].Split(ContentPos, 1);
if (null !== NewElement)
this.Add_ToContent(CurPos + 1, NewElement, true);
var Elem = new ParaMath();
Elem.Root.Load_FromMenu(Item.Menu, this.Get_Paragraph());
Elem.Root.Correct_Content(true);
this.Add_ToContent(CurPos + 1, Elem, true);
// Перемещаем кусор в конец формулы
this.State.ContentPos = CurPos + 1;
this.Content[this.State.ContentPos].MoveCursorToEndPos(false);
}
else
this.Content[CurPos].Add(Item);
break;
}
case para_Hyperlink:
{
// Вместо добавления самого элемента добавляем его содержимое
var Count = Item.Content.length;
if (Count > 0)
{
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
var CurContentPos = new CParagraphContentPos();
CurItem.Get_ParaContentPos(false, false, CurContentPos);
var NewItem = CurItem.Split(CurContentPos, 0);
for (var Index = 0; Index < Count; Index++)
{
this.Add_ToContent(CurPos + Index + 1, Item.Content[Index], false);
}
this.Add_ToContent(CurPos + Count + 1, NewItem, false);
this.State.ContentPos = CurPos + Count;
this.Content[this.State.ContentPos].MoveCursorToEndPos();
}
break;
}
default :
{
this.Content[this.State.ContentPos].Add(Item);
break;
}
}
if (para_Hyperlink === Item.Type)
{
// Вместо добавления самого элемента добавляем его содержимое
var Count = Item.Content.length;
if (Count > 0)
{
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
var CurContentPos = new CParagraphContentPos();
CurItem.Get_ParaContentPos(false, false, CurContentPos);
var NewItem = CurItem.Split(CurContentPos, 0);
for (var Index = 0; Index < Count; Index++)
{
this.Add_ToContent(CurPos + Index + 1, Item.Content[Index], false);
}
this.Add_ToContent(CurPos + Count + 1, NewItem, false);
this.State.ContentPos = CurPos + Count;
this.Content[this.State.ContentPos].MoveCursorToEndPos();
}
}
else
{
CParagraphContentWithParagraphLikeContent.prototype.Add.apply(this, arguments);
}
};
ParaHyperlink.prototype.Clear_TextPr = function()
......
......@@ -3074,6 +3074,7 @@ Paragraph.prototype.Add = function(Item)
}
case para_Field:
case para_InlineLevelSdt:
case para_Hyperlink:
{
var ContentPos = this.Get_ParaContentPos(false, false);
var CurPos = ContentPos.Get(0);
......@@ -12057,6 +12058,7 @@ Paragraph.prototype.AddContentControl = function(nContentControlType)
var oContentControl = new CInlineLevelSdt();
oContentControl.Add_ToContent(0, new ParaRun());
this.Add(oContentControl);
oContentControl.MoveCursorToStartPos();
return oContentControl;
};
......
......@@ -2763,7 +2763,76 @@ CParagraphContentWithParagraphLikeContent.prototype.GetSelectedContentControls =
//----------------------------------------------------------------------------------------------------------------------
// Функции, которые должны быть реализованы в классах наследниках
//----------------------------------------------------------------------------------------------------------------------
CParagraphContentWithParagraphLikeContent.prototype.Add = function(Item){};
CParagraphContentWithParagraphLikeContent.prototype.Add = function(Item)
{
switch (Item.Type)
{
case para_Run:
case para_Hyperlink:
case para_InlineLevelSdt:
case para_Field:
{
var TextPr = this.Get_FirstTextPr();
Item.SelectAll();
Item.Apply_TextPr(TextPr);
Item.RemoveSelection();
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
if (para_Run === CurItem.Type)
{
var NewRun = CurItem.Split2(CurItem.State.ContentPos);
this.Add_ToContent(CurPos + 1, Item);
this.Add_ToContent(CurPos + 2, NewRun);
this.State.ContentPos = CurPos + 2;
this.Content[this.State.ContentPos].MoveCursorToStartPos();
}
else
{
CurItem.Add(Item);
}
break;
}
case para_Math :
{
var ContentPos = new CParagraphContentPos();
this.Get_ParaContentPos(false, false, ContentPos);
var CurPos = ContentPos.Get(0);
// Ран формула делит на части, а в остальные элементы добавляется целиком
if (para_Run === this.Content[CurPos].Type)
{
// Разделяем текущий элемент (возвращается правая часть)
var NewElement = this.Content[CurPos].Split(ContentPos, 1);
if (null !== NewElement)
this.Add_ToContent(CurPos + 1, NewElement, true);
var Elem = new ParaMath();
Elem.Root.Load_FromMenu(Item.Menu, this.Get_Paragraph());
Elem.Root.Correct_Content(true);
this.Add_ToContent(CurPos + 1, Elem, true);
// Перемещаем кусор в конец формулы
this.State.ContentPos = CurPos + 1;
this.Content[this.State.ContentPos].MoveCursorToEndPos(false);
}
else
{
this.Content[CurPos].Add(Item);
}
break;
}
default:
{
this.Content[this.State.ContentPos].Add(Item);
break;
}
}
};
CParagraphContentWithParagraphLikeContent.prototype.Undo = function(Data){};
CParagraphContentWithParagraphLikeContent.prototype.Redo = function(Data){};
CParagraphContentWithParagraphLikeContent.prototype.Save_Changes = function(Data, Writer){};
......
......@@ -94,72 +94,6 @@ CInlineLevelSdt.prototype.Remove_FromContent = function(Pos, Count, UpdatePositi
CParagraphContentWithParagraphLikeContent.prototype.Remove_FromContent.apply(this, arguments);
};
CInlineLevelSdt.prototype.Add = function(Item)
{
switch (Item.Type)
{
case para_Run:
case para_Hyperlink:
case para_InlineLevelSdt:
case para_Field:
{
var TextPr = this.Get_FirstTextPr();
Item.SelectAll();
Item.Apply_TextPr(TextPr);
Item.RemoveSelection();
var CurPos = this.State.ContentPos;
var CurItem = this.Content[CurPos];
if (para_Run === CurItem.Type)
{
var NewRun = CurItem.Split2(CurItem.State.ContentPos);
this.Add_ToContent(CurPos + 1, Item);
this.Add_ToContent(CurPos + 2, NewRun);
this.State.ContentPos = CurPos + 2;
this.Content[this.State.ContentPos].MoveCursorToStartPos();
}
else
CurItem.Add(Item);
break;
}
case para_Math :
{
var ContentPos = new CParagraphContentPos();
this.Get_ParaContentPos(false, false, ContentPos);
var CurPos = ContentPos.Get(0);
// Ран формула делит на части, а в остальные элементы добавляется целиком
if (para_Run === this.Content[CurPos].Type)
{
// Разделяем текущий элемент (возвращается правая часть)
var NewElement = this.Content[CurPos].Split(ContentPos, 1);
if (null !== NewElement)
this.Add_ToContent(CurPos + 1, NewElement, true);
var Elem = new ParaMath();
Elem.Root.Load_FromMenu(Item.Menu, this.Get_Paragraph());
Elem.Root.Correct_Content(true);
this.Add_ToContent(CurPos + 1, Elem, true);
// Перемещаем кусор в конец формулы
this.State.ContentPos = CurPos + 1;
this.Content[this.State.ContentPos].MoveCursorToEndPos(false);
}
else
this.Content[CurPos].Add(Item);
break;
}
default :
{
this.Content[this.State.ContentPos].Add(Item);
break;
}
}
};
CInlineLevelSdt.prototype.Split = function (ContentPos, Depth)
{
// Не даем разделять
......@@ -453,21 +387,10 @@ function TEST_ADD_SDT()
oLogicDocument.Create_NewHistoryPoint();
var oRun = new ParaRun();
oRun.Add(new ParaText("S"));
oRun.Add(new ParaText("d"));
oRun.Add(new ParaText("t"));
var oInlineContentControl = oLogicDocument.AddContentControl(AscCommonWord.sdttype_InlineLevel);
// var oInlineContentControl = new CInlineLevelSdt();
oInlineContentControl.Add_ToContent(0, oRun);
// var oPara = oLogicDocument.GetCurrentParagraph();
// oPara.Add_ToContent(0, new ParaRun());
// oPara.Add_ToContent(1, oInlineContentControl);
oInlineContentControl.Add(new ParaText("S"));
oInlineContentControl.Add(new ParaText("d"));
oInlineContentControl.Add(new ParaText("t"));
oLogicDocument.Recalculate();
oLogicDocument.Document_UpdateSelectionState();
......@@ -483,13 +406,11 @@ function TEST_ADD_SDT2()
oLogicDocument.Create_NewHistoryPoint();
var oSdt = oLogicDocument.AddContentControl(AscCommonWord.sdttype_BlockLevel);
oSdt.AddToParagraph(new ParaText("S"));
oSdt.AddToParagraph(new ParaText("d"));
oSdt.AddToParagraph(new ParaText("t"));
oLogicDocument.Recalculate();
oLogicDocument.Document_UpdateSelectionState();
oLogicDocument.Document_UpdateInterfaceState();
......
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