Commit 609c5d79 authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Добавлены механизмы для обработки автозамены в формулах и обработки нажатия...

Добавлены механизмы для обработки автозамены в формулах и обработки нажатия Enter в формулах. Переделана обработка изменения формулы с Inline на не Inline.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58654 954022d7-b5bf-4e40-9824-e11837661b57
parent 5e14d2b1
......@@ -664,6 +664,7 @@ function CSelectedElementsInfo()
this.m_bMixedSelection = false; // Попадает ли в выделение одновременно несколько элементов
this.m_nDrawing = selected_None;
this.m_pParagraph = null; // Параграф, в котором находится выделение
this.m_oMath = null; // Формула, в которой находится выделение
this.Reset = function()
{
......@@ -678,11 +679,21 @@ function CSelectedElementsInfo()
this.m_pParagraph = Para;
};
this.Set_Math = function(Math)
{
this.m_oMath = Math;
};
this.Get_Paragraph = function()
{
return this.m_pParagraph;
};
this.Get_Math = function()
{
return this.m_oMath;
};
this.Set_Table = function()
{
this.m_bTable = true;
......@@ -9139,17 +9150,27 @@ CDocument.prototype =
if (false === this.Document_Is_SelectionLocked(CheckType))
{
this.Create_NewHistoryPoint();
if (e.ShiftKey)
{
this.Paragraph_Add(new ParaNewLine(break_Line));
}
else if (e.CtrlKey)
var oSelectedInfo = this.Get_SelectedElementsInfo();
var oMath = oSelectedInfo.Get_Math();
if (null !== oMath && oMath.Is_InInnerContent())
{
this.Paragraph_Add(new ParaNewLine(break_Page));
oMath.Handle_AddNewLine();
}
else
{
this.Add_NewParagraph();
if (e.ShiftKey)
{
this.Paragraph_Add(new ParaNewLine(break_Line));
}
else if (e.CtrlKey)
{
this.Paragraph_Add(new ParaNewLine(break_Page));
}
else
{
this.Add_NewParagraph();
}
}
}
}
......@@ -9190,23 +9211,36 @@ CDocument.prototype =
if ( false === this.Document_Is_SelectionLocked(changestype_Paragraph_Content) )
{
this.Create_NewHistoryPoint();
if ( true === e.ShiftKey && true === e.CtrlKey )
{
this.DrawingDocument.TargetStart();
this.DrawingDocument.TargetShow();
this.Paragraph_Add( new ParaText(String.fromCharCode(0x00A0)) );
}
else if ( true === e.CtrlKey )
// Если мы находимся в формуле, тогда пытаемся выполнить автозамену
var oSelectedInfo = this.Get_SelectedElementsInfo();
var oMath = oSelectedInfo.Get_Math();
if (null !== oMath && true === oMath.Make_AutoCorrect())
{
this.Paragraph_ClearFormatting();
// Ничего тут не делаем. Все делается в автозамене
}
else
{
this.DrawingDocument.TargetStart();
this.DrawingDocument.TargetShow();
if (true === e.ShiftKey && true === e.CtrlKey)
{
this.DrawingDocument.TargetStart();
this.DrawingDocument.TargetShow();
this.Paragraph_Add(new ParaText(String.fromCharCode(0x00A0)));
}
else if (true === e.CtrlKey)
{
this.Paragraph_ClearFormatting();
}
else
{
this.DrawingDocument.TargetStart();
this.DrawingDocument.TargetShow();
this.Paragraph_Add(new ParaSpace());
this.Paragraph_Add(new ParaSpace());
}
}
}
......
......@@ -1621,3 +1621,42 @@ ParaMath.prototype.Get_ContentSelection = function()
return {X : oContent.pos.x + this.X, Y : oContent.pos.y + this.Y, W : oContent.size.width, H : oContent.size.height};
};
/**
* Проверяем находимся ли мы во внутреннем (не самом верхнем) контенте формулы.
*/
ParaMath.prototype.Is_InInnerContent = function()
{
var oContent = this.GetSelectContent().Content;
if (oContent.bRoot)
return false;
return true;
};
/**
* Обработка нажатия Enter внутри формулы
*/
ParaMath.prototype.Handle_AddNewLine = function()
{
};
/**
* Разделение формулы на 2 части в заданной позиции. В текущем объекте остается левая часть формулы.
* @param ContentPos Позиция
* @param Depth
* @returns Возвращается правая часть формулы.
*/
ParaMath.prototype.Split = function (ContentPos, Depth)
{
return null;
};
/**
* Пытаемся выполнить автозамену в формуле.
* @returns {boolean} Выполнилась ли автозамена.
*/
ParaMath.prototype.Make_AutoCorrect = function()
{
return false;
};
......@@ -6130,6 +6130,11 @@ Paragraph.prototype =
Get_SelectedElementsInfo : function(Info)
{
Info.Set_Paragraph( this );
if (true === this.Selection.Use && this.Selection.StartPos === this.Selection.EndPos && para_Math === this.Content[this.Selection.EndPos].Type)
Info.Set_Math(this.Content[this.Selection.EndPos]);
else (false === this.Selection.Use && para_Math === this.Content[this.CurPos.ContentPos].Type)
Info.Set_Math(this.Content[this.CurPos.ContentPos]);
},
Get_SelectedContent : function(DocContent)
......
......@@ -415,7 +415,7 @@ Paragraph.prototype.private_RecalculateFastRange = function(CurRange, CurL
if ( para_Math === Item.Type )
{
// TODO: Надо бы перенести эту проверку на изменение контента параграфа
Item.MathPara = this.Check_MathPara(Pos);
Item.SetInline(true === this.Check_MathPara(Pos)? false : true);
}
PRS.Update_CurPos( Pos, 0 );
......@@ -1542,7 +1542,7 @@ Paragraph.prototype.private_RecalculateRange = function(CurRange, CurL
if ( para_Math === Item.Type )
{
// TODO: Надо бы перенести эту проверку на изменение контента параграфа
Item.MathPara = this.Check_MathPara(Pos);
Item.SetInline(true === this.Check_MathPara(Pos)? false : true);
}
if ( ( 0 === Pos && 0 === CurLine && 0 === CurRange ) || Pos !== StartPos )
......
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