Commit 50cd3804 authored by Ilya Kirillov's avatar Ilya Kirillov

Working on moving the cursor in the new class CInlineLevelSdt.

parent b13152a7
...@@ -1168,6 +1168,10 @@ ParaComment.prototype.IsCommentStart = function() ...@@ -1168,6 +1168,10 @@ ParaComment.prototype.IsCommentStart = function()
{ {
return this.Start; return this.Start;
}; };
ParaComment.prototype.IsStopCursorOnEntryExit = function()
{
return false;
};
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// Разное // Разное
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
......
...@@ -618,7 +618,11 @@ ParaField.prototype.Read_FromBinary2 = function(Reader) ...@@ -618,7 +618,11 @@ ParaField.prototype.Read_FromBinary2 = function(Reader)
if (editor) if (editor)
editor.WordControl.m_oLogicDocument.Register_Field(this); editor.WordControl.m_oLogicDocument.Register_Field(this);
}; };
//----------------------------------------------------------------------------------------------------------------------
ParaField.prototype.IsStopCursorOnEntryExit = function()
{
return true;
};
//--------------------------------------------------------export---------------------------------------------------- //--------------------------------------------------------export----------------------------------------------------
window['AscCommonWord'] = window['AscCommonWord'] || {}; window['AscCommonWord'] = window['AscCommonWord'] || {};
window['AscCommonWord'].ParaField = ParaField; window['AscCommonWord'].ParaField = ParaField;
...@@ -3357,6 +3357,10 @@ ParaMath.prototype.SetContentPosition = function(DocPos, Depth, Flag) ...@@ -3357,6 +3357,10 @@ ParaMath.prototype.SetContentPosition = function(DocPos, Depth, Flag)
{ {
return this.Root.SetContentPosition(DocPos, Depth, Flag); return this.Root.SetContentPosition(DocPos, Depth, Flag);
}; };
ParaMath.prototype.IsStopCursorOnEntryExit = function()
{
return true;
};
function MatGetKoeffArgSize(FontSize, ArgSize) function MatGetKoeffArgSize(FontSize, ArgSize)
{ {
......
...@@ -3637,7 +3637,7 @@ Paragraph.prototype.Correct_ContentPos2 = function() ...@@ -3637,7 +3637,7 @@ Paragraph.prototype.Correct_ContentPos2 = function()
} }
// Если курсор находится в начале или конце гиперссылки, тогда выводим его из гиперссылки // Если курсор находится в начале или конце гиперссылки, тогда выводим его из гиперссылки
while (CurPos > 0 && para_Run !== this.Content[CurPos].Type && para_Math !== this.Content[CurPos].Type && para_Field !== this.Content[CurPos].Type && true === this.Content[CurPos].Cursor_Is_Start()) while (CurPos > 0 && para_Run !== this.Content[CurPos].Type && para_Math !== this.Content[CurPos].Type && para_Field !== this.Content[CurPos].Type && para_InlineLevelSdt !== this.Content[CurPos].Type && true === this.Content[CurPos].Cursor_Is_Start())
{ {
if (false === this.Content[CurPos - 1].Is_CursorPlaceable()) if (false === this.Content[CurPos - 1].Is_CursorPlaceable())
break; break;
...@@ -3646,7 +3646,7 @@ Paragraph.prototype.Correct_ContentPos2 = function() ...@@ -3646,7 +3646,7 @@ Paragraph.prototype.Correct_ContentPos2 = function()
this.Content[CurPos].MoveCursorToEndPos(); this.Content[CurPos].MoveCursorToEndPos();
} }
while (CurPos < Count && para_Run !== this.Content[CurPos].Type && para_Math !== this.Content[CurPos].Type && para_Field !== this.Content[CurPos].Type && true === this.Content[CurPos].Cursor_Is_End()) while (CurPos < Count && para_Run !== this.Content[CurPos].Type && para_Math !== this.Content[CurPos].Type && para_Field !== this.Content[CurPos].Type && para_InlineLevelSdt !== this.Content[CurPos].Type && true === this.Content[CurPos].Cursor_Is_End())
{ {
if (false === this.Content[CurPos + 1].Is_CursorPlaceable()) if (false === this.Content[CurPos + 1].Is_CursorPlaceable())
break; break;
...@@ -4335,7 +4335,7 @@ Paragraph.prototype.Get_LeftPos = function(SearchPos, ContentPos) ...@@ -4335,7 +4335,7 @@ Paragraph.prototype.Get_LeftPos = function(SearchPos, ContentPos)
CurPos--; CurPos--;
if (CurPos >= 0 && (para_Math === this.Content[CurPos + 1].Type || para_Field === this.Content[CurPos + 1].Type)) if (CurPos >= 0 && this.Content[CurPos + 1].IsStopCursorOnEntryExit())
{ {
// При выходе из формулы встаем в конец рана // При выходе из формулы встаем в конец рана
this.Content[CurPos].Get_EndPos(false, SearchPos.Pos, Depth + 1); this.Content[CurPos].Get_EndPos(false, SearchPos.Pos, Depth + 1);
...@@ -4371,7 +4371,7 @@ Paragraph.prototype.Get_RightPos = function(SearchPos, ContentPos, StepEnd) ...@@ -4371,7 +4371,7 @@ Paragraph.prototype.Get_RightPos = function(SearchPos, ContentPos, StepEnd)
CurPos++; CurPos++;
var Count = this.Content.length; var Count = this.Content.length;
if (CurPos < Count && (para_Math === this.Content[CurPos - 1].Type || para_Field === this.Content[CurPos - 1].Type)) if (CurPos < Count && this.Content[CurPos - 1].IsStopCursorOnEntryExit())
{ {
// При выходе из формулы встаем в конец рана // При выходе из формулы встаем в конец рана
this.Content[CurPos].Get_StartPos(SearchPos.Pos, Depth + 1); this.Content[CurPos].Get_StartPos(SearchPos.Pos, Depth + 1);
...@@ -5101,87 +5101,6 @@ Paragraph.prototype.Cursor_MoveTo_Drawing = function(Id, bBefore) ...@@ -5101,87 +5101,6 @@ Paragraph.prototype.Cursor_MoveTo_Drawing = function(Id, bBefore)
this.CurPos.RealX = this.CurPos.X; this.CurPos.RealX = this.CurPos.X;
this.CurPos.RealY = this.CurPos.Y; this.CurPos.RealY = this.CurPos.Y;
}; };
Paragraph.prototype.Set_ContentPos = function(Pos, bCorrectPos, Line)
{
this.CurPos.ContentPos = Math.max(0, Math.min(this.Content.length - 1, Pos));
this.CurPos.Line = ( undefined === Line ? -1 : Line );
if (false != bCorrectPos)
this.Internal_Correct_ContentPos();
};
Paragraph.prototype.Internal_Correct_ContentPos = function()
{
// 1. Ищем ближайший справа элемент
// Это делается для того, чтобы если мы находимся в конце гиперссылки выйти из нее.
var Count = this.Content.length;
var CurPos = this.CurPos.ContentPos;
var TempPos = CurPos;
while (TempPos >= 0 && TempPos < Count && undefined === this.Content[TempPos].CurLine)
TempPos--;
var CurLine = ( this.CurPos.Line === -1 ? ( TempPos >= 0 && TempPos < Count ? this.Content[TempPos].CurLine : -1 ) : this.CurPos.Line );
while (CurPos < Count - 1)
{
var Item = this.Content[CurPos];
var ItemType = Item.Type;
if (para_Text === ItemType || para_Space === ItemType || para_End === ItemType || para_Tab === ItemType || (para_Drawing === ItemType && true === Item.Is_Inline() ) || para_PageNum === ItemType || para_NewLine === ItemType || para_HyperlinkStart === ItemType || para_Math === ItemType)
break;
CurPos++;
}
// 2. Ищем ближайший слева (текcт, пробел, картинку, нумерацию и т.д.)
// Смещаемся к концу ближайшего левого элемента, чтобы продолжался набор с
// настройками левого ближайшего элемента.
while (CurPos > 0)
{
CurPos--;
var Item = this.Content[CurPos];
var ItemType = Item.Type;
var bEnd = false;
if (para_Text === ItemType || para_Space === ItemType || para_End === ItemType || para_Tab === ItemType || (para_Drawing === ItemType && true === Item.Is_Inline() ) || para_PageNum === ItemType || para_NewLine === ItemType || para_Math === ItemType)
{
this.CurPos.ContentPos = CurPos + 1;
bEnd = true;
}
else if (para_HyperlinkEnd === ItemType)
{
while (CurPos < Count - 1 && para_TextPr === this.Content[CurPos + 1].Type)
CurPos++;
this.CurPos.ContentPos = CurPos + 1;
bEnd = true;
}
if (true === bEnd)
{
TempPos = CurPos;
while (TempPos >= 0 && TempPos < Count && undefined === this.Content[TempPos].CurLine)
TempPos--;
var NewLine = ( TempPos >= 0 && TempPos < Count ? this.Content[TempPos].CurLine : -1 );
if (NewLine != CurLine && -1 != CurLine)
this.CurPos.Line = CurLine;
return;
}
}
// 3. Если мы попали в начало параграфа, тогда пропускаем все TextPr
if (CurPos <= 0)
{
CurPos = 0;
while (para_TextPr === this.Content[CurPos].Type || para_CollaborativeChangesEnd === this.Content[CurPos].Type || para_CollaborativeChangesStart === this.Content[CurPos].Type)
CurPos++;
this.CurPos.ContentPos = CurPos;
}
};
Paragraph.prototype.GetCurPosXY = function() Paragraph.prototype.GetCurPosXY = function()
{ {
return {X : this.CurPos.RealX, Y : this.CurPos.RealY}; return {X : this.CurPos.RealX, Y : this.CurPos.RealY};
......
...@@ -42,6 +42,10 @@ CParagraphContentBase.prototype.IsParagraphContentElement = function() ...@@ -42,6 +42,10 @@ CParagraphContentBase.prototype.IsParagraphContentElement = function()
{ {
return true; return true;
}; };
CParagraphContentBase.prototype.IsStopCursorOnEntryExit = function()
{
return false;
};
/** /**
* Это базовый класс для элементов содержимого(контент) параграфа, у которых есть свое содержимое. * Это базовый класс для элементов содержимого(контент) параграфа, у которых есть свое содержимое.
......
...@@ -273,37 +273,11 @@ CInlineLevelSdt.prototype.Shift_Range = function(Dx, Dy, _CurLine, _CurRange) ...@@ -273,37 +273,11 @@ CInlineLevelSdt.prototype.Shift_Range = function(Dx, Dy, _CurLine, _CurRange)
oRangeBounds.Y1 += Dy; oRangeBounds.Y1 += Dy;
} }
}; };
CInlineLevelSdt.prototype.Get_LeftPos = function(SearchPos, ContentPos, Depth, UseContentPos)
{
var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_LeftPos.call(this, SearchPos, ContentPos, Depth, UseContentPos);
if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
this.Get_StartPos(SearchPos.Pos, Depth);
SearchPos.Found = true;
return true;
}
return bResult;
};
CInlineLevelSdt.prototype.Get_RightPos = function(SearchPos, ContentPos, Depth, UseContentPos, StepEnd)
{
var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_RightPos.call(this, SearchPos, ContentPos, Depth, UseContentPos, StepEnd);
if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode())
{
this.Get_EndPos(false, SearchPos.Pos, Depth);
SearchPos.Found = true;
return true;
}
return bResult;
};
CInlineLevelSdt.prototype.Get_WordStartPos = function(SearchPos, ContentPos, Depth, UseContentPos) CInlineLevelSdt.prototype.Get_WordStartPos = function(SearchPos, ContentPos, Depth, UseContentPos)
{ {
var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_WordStartPos.call(this, SearchPos, ContentPos, Depth, UseContentPos); var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_WordStartPos.call(this, SearchPos, ContentPos, Depth, UseContentPos);
if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode()) if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument)
{ {
this.Get_StartPos(SearchPos.Pos, Depth); this.Get_StartPos(SearchPos.Pos, Depth);
SearchPos.Found = true; SearchPos.Found = true;
...@@ -316,7 +290,7 @@ CInlineLevelSdt.prototype.Get_WordEndPos = function(SearchPos, ContentPos, Depth ...@@ -316,7 +290,7 @@ CInlineLevelSdt.prototype.Get_WordEndPos = function(SearchPos, ContentPos, Depth
{ {
var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_WordEndPos.call(this, SearchPos, ContentPos, Depth, UseContentPos, StepEnd); var bResult = CParagraphContentWithParagraphLikeContent.prototype.Get_WordEndPos.call(this, SearchPos, ContentPos, Depth, UseContentPos, StepEnd);
if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument && true === this.Paragraph.LogicDocument.IsFillingFormMode()) if (true !== bResult && this.Paragraph && this.Paragraph.LogicDocument)
{ {
this.Get_EndPos(false, SearchPos.Pos, Depth); this.Get_EndPos(false, SearchPos.Pos, Depth);
SearchPos.Found = true; SearchPos.Found = true;
...@@ -478,6 +452,11 @@ CInlineLevelSdt.prototype.Write_ToBinary = function(Writer) ...@@ -478,6 +452,11 @@ CInlineLevelSdt.prototype.Write_ToBinary = function(Writer)
Writer.WriteLong(this.Type); Writer.WriteLong(this.Type);
Writer.WriteString2(this.Id); Writer.WriteString2(this.Id);
}; };
//----------------------------------------------------------------------------------------------------------------------
CInlineLevelSdt.prototype.IsStopCursorOnEntryExit = function()
{
return true;
};
//--------------------------------------------------------export-------------------------------------------------------- //--------------------------------------------------------export--------------------------------------------------------
window['AscCommonWord'] = window['AscCommonWord'] || {}; window['AscCommonWord'] = window['AscCommonWord'] || {};
window['AscCommonWord'].CInlineLevelSdt = CInlineLevelSdt; window['AscCommonWord'].CInlineLevelSdt = CInlineLevelSdt;
......
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