Commit 9e84b5e7 authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Исправлены баги с вводом текста и селектом параграфа.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55863 954022d7-b5bf-4e40-9824-e11837661b57
parent b22aa8dc
...@@ -5547,7 +5547,7 @@ Paragraph.prototype = ...@@ -5547,7 +5547,7 @@ Paragraph.prototype =
var SavedLines = Item.Save_RecalculateObject(true); var SavedLines = Item.Save_RecalculateObject(true);
Item.Recalculate_Range( ParaPr, 1 ); Item.Recalculate_Range( PRS, ParaPr, 1 );
if ( ( true === PRS.NewRange && Pos !== EndPos ) || ( Pos === EndPos && true !== PRS.NewRange ) ) if ( ( true === PRS.NewRange && Pos !== EndPos ) || ( Pos === EndPos && true !== PRS.NewRange ) )
return -1; return -1;
...@@ -9523,7 +9523,7 @@ Paragraph.prototype = ...@@ -9523,7 +9523,7 @@ Paragraph.prototype =
this.CurPos.Range = Range; this.CurPos.Range = Range;
}, },
Set_SelectionContentPos : function(StartContentPos, EndContentPos) Set_SelectionContentPos : function(StartContentPos, EndContentPos, CorrectAnchor)
{ {
var Depth = 0; var Depth = 0;
...@@ -9598,77 +9598,90 @@ Paragraph.prototype = ...@@ -9598,77 +9598,90 @@ Paragraph.prototype =
// if ( para_Hyperlink === this.Content[EndPos].Type && true !== this.Content[EndPos].Selection_IsEmpty(true) ) // if ( para_Hyperlink === this.Content[EndPos].Type && true !== this.Content[EndPos].Selection_IsEmpty(true) )
// this.Content[EndPos].Select_All( StartPos > EndPos ? -1 : 1 ); // this.Content[EndPos].Select_All( StartPos > EndPos ? -1 : 1 );
} }
// Дополнительная проверка. Если у нас визуально выделен весь параграф (т.е. весь текст и знак параграфа if ( false !== CorrectAnchor )
// обязательно!), тогда выделяем весь параграф целиком, чтобы в селект попадали и все привязанные объекты.
// Но если у нас выделен параграф не целиком, тогда мы снимаем выделение с привязанных объектов, стоящих в
// начале параграфа.
if ( true === this.Selection_CheckParaEnd() )
{ {
// Эта ветка нужна для выделения плавающих объектов, стоящих в начале параграфа, когда параграф выделен весь // Дополнительная проверка. Если у нас визуально выделен весь параграф (т.е. весь текст и знак параграфа
// обязательно!), тогда выделяем весь параграф целиком, чтобы в селект попадали и все привязанные объекты.
// Но если у нас выделен параграф не целиком, тогда мы снимаем выделение с привязанных объектов, стоящих в
// начале параграфа.
var bNeedSelectAll = true; if ( true === this.Selection_CheckParaEnd() )
var StartPos = Math.min( this.Selection.StartPos, this.Selection.EndPos );
for ( var Pos = 0; Pos <= StartPos; Pos++ )
{ {
if ( false === this.Content[Pos].Is_SelectedAll( { SkipAnchor : true } ) ) // Эта ветка нужна для выделения плавающих объектов, стоящих в начале параграфа, когда параграф выделен весь
var bNeedSelectAll = true;
var StartPos = Math.min( this.Selection.StartPos, this.Selection.EndPos );
for ( var Pos = 0; Pos <= StartPos; Pos++ )
{ {
bNeedSelectAll = false; if ( false === this.Content[Pos].Is_SelectedAll( { SkipAnchor : true } ) )
break; {
bNeedSelectAll = false;
break;
}
} }
}
if ( true === bNeedSelectAll ) if ( true === bNeedSelectAll )
{
if ( 1 === Direction )
this.Selection.StartPos = 0;
else
this.Selection.EndPos = 0;
for ( var Pos = 0; Pos <= StartPos; Pos++ )
{ {
this.Content[Pos].Select_All( Direction ); if ( 1 === Direction )
this.Selection.StartPos = 0;
else
this.Selection.EndPos = 0;
for ( var Pos = 0; Pos <= StartPos; Pos++ )
{
this.Content[Pos].Select_All( Direction );
}
} }
} }
} else if ( true !== this.Selection_IsEmpty(true) )
else if ( true !== this.Selection_IsEmpty(true) )
{
// Эта ветка нужна для снятие выделения с плавающих объектов, стоящих в начале параграфа, когда параграф
// выделен не весь. Заметим, что это ветка имеет смысл, только при direction = 1, поэтому выделен весь
// параграф или нет, проверяется попаданием para_End в селект. Кроме того, ничего не делаем с селектом,
// если он пустой.
var bNeedCorrectLeftPos = true;
var _StartPos = Math.min( StartPos, EndPos );
var _EndPos = Math.max( StartPos, EndPos );
for ( var Pos = 0; Pos < StartPos; Pos++ )
{ {
if ( true !== this.Content[Pos].Is_Empty( { SkipAnchor : true } ) ) // Эта ветка нужна для снятие выделения с плавающих объектов, стоящих в начале параграфа, когда параграф
// выделен не весь. Заметим, что это ветка имеет смысл, только при direction = 1, поэтому выделен весь
// параграф или нет, проверяется попаданием para_End в селект. Кроме того, ничего не делаем с селектом,
// если он пустой.
var bNeedCorrectLeftPos = true;
var _StartPos = Math.min( StartPos, EndPos );
var _EndPos = Math.max( StartPos, EndPos );
for ( var Pos = 0; Pos < StartPos; Pos++ )
{ {
bNeedCorrectLeftPos = false; if ( true !== this.Content[Pos].Is_Empty( { SkipAnchor : true } ) )
break; {
bNeedCorrectLeftPos = false;
break;
}
} }
}
if ( true === bNeedCorrectLeftPos ) if ( true === bNeedCorrectLeftPos )
{
for ( var Pos = _StartPos; Pos <= EndPos; Pos++ )
{ {
if ( true === this.Content[Pos].Selection_CorrectLeftPos(Direction) ) for ( var Pos = _StartPos; Pos <= EndPos; Pos++ )
{ {
if ( 1 === Direction ) if ( true === this.Content[Pos].Selection_CorrectLeftPos(Direction) )
this.Selection.StartPos = Pos + 1; {
else if ( 1 === Direction )
this.Selection.EndPos = Pos + 1; {
if ( Pos + 1 > this.Selection.EndPos )
break;
this.Selection.StartPos = Pos + 1;
}
else
{
if ( Pos + 1 > this.Selection.StartPos )
break;
this.Content[Pos].Selection_Remove(); this.Selection.EndPos = Pos + 1;
}
this.Content[Pos].Selection_Remove();
}
else
break;
} }
else
break;
} }
}
}
} }
}, },
...@@ -14521,11 +14534,11 @@ Paragraph.prototype = ...@@ -14521,11 +14534,11 @@ Paragraph.prototype =
if ( true === StartSelection ) if ( true === StartSelection )
{ {
this.Set_SelectionContentPos( ContentPos, this.Get_ParaContentPos( true, false ) ); this.Set_SelectionContentPos( ContentPos, this.Get_ParaContentPos( true, false ), false );
} }
else else
{ {
this.Set_SelectionContentPos( this.Get_ParaContentPos( true, true ), ContentPos ); this.Set_SelectionContentPos( this.Get_ParaContentPos( true, true ), ContentPos, 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