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

Сделано, чтобы ссылку можно было разбить на 2(баг 24423). Исправлен баг со...

Сделано, чтобы ссылку можно было разбить на 2(баг 24423). Исправлен баг со снятием выделения с таблицы (баг 24450). Исправлен баг с работой функции IncDecFontSize в таблицах (баг 24448). Исправлен баг с пересчетом заголовока в таблицах (баг 24446).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@56458 954022d7-b5bf-4e40-9824-e11837661b57
parent c2550a7d
......@@ -810,6 +810,106 @@ ParaHyperlink.prototype =
return;
}
},
Split : function (ContentPos, Depth)
{
var NewHyperlink = new ParaHyperlink();
NewHyperlink.Set_Value( this.Value );
NewHyperlink.Set_ToolTip( this.ToolTip );
var CurPos = ContentPos.Get(Depth);
var TextPr = this.Get_TextPr(ContentPos, Depth);
// Разделяем текущий элемент (возвращается правая, отделившаяся часть, если она null, тогда заменяем
// ее на пустой ран с заданными настройками).
var NewElement = this.Content[CurPos].Split( ContentPos, Depth + 1 );
if ( null === NewElement )
{
NewElement = new ParaRun();
NewElement.Set_Pr( TextPr.Copy() );
}
// Теперь делим на три части:
// 1. До элемента с номером CurPos включительно (оставляем эту часть в исходном параграфе)
// 2. После элемента с номером CurPos (добавляем эту часть в новый параграф)
// 3. Новый элемент, полученный после разделения элемента с номером CurPos, который мы
// добавляем в начало нового параграфа.
var NewContent = this.Content.slice( CurPos + 1 );
this.Remove_FromContent( CurPos + 1, this.Content.length - CurPos - 1, false );
// Добавляем в новую гиперссылку Right элемент и NewContent
var Count = NewContent.length;
for ( var Pos = 0; Pos < Count; Pos++ )
NewHyperlink.Add_ToContent( Pos, NewContent[Pos], false );
NewHyperlink.Add_ToContent( 0, NewElement, false );
return NewHyperlink;
},
Split2 : function(CurPos)
{
// Создаем новый ран
var NewRun = new ParaRun(this.Paragraph);
// Копируем настройки
NewRun.Set_Pr( this.Pr.Copy() );
// TODO: Как только избавимся от para_End переделать тут
// Проверим, если наш ран содержит para_End, тогда мы должны para_End переметить в правый ран
var CheckEndPos = -1;
var CheckEndPos2 = Math.min( CurPos, this.Content.length );
for ( var Pos = 0; Pos < CheckEndPos2; Pos++ )
{
if ( para_End === this.Content[Pos].Type )
{
CheckEndPos = Pos;
break;
}
}
if ( -1 !== CheckEndPos )
CurPos = CheckEndPos;
// Разделяем содержимое по ранам
NewRun.Concat_ToContent( this.Content.slice(CurPos) );
this.Remove_FromContent( CurPos, this.Content.length - CurPos, true );
// Если были точки орфографии, тогда переместим их в новый ран
var SpellingMarksCount = this.SpellingMarks.length;
for ( var Index = 0; Index < SpellingMarksCount; Index++ )
{
var Mark = this.SpellingMarks[Index];
var MarkPos = ( true === Mark.Start ? Mark.Element.StartPos.Get(Mark.Depth) : Mark.Element.EndPos.Get(Mark.Depth) );
if ( MarkPos >= CurPos )
{
var MarkElement = Mark.Element;
if ( true === Mark.Start )
{
MarkElement.ClassesS[Mark.Depth] = NewRun;
MarkElement.StartPos.Data[Mark.Depth] -= CurPos;
}
else
{
MarkElement.ClassesE[Mark.Depth] = NewRun;
MarkElement.EndPos.Data[Mark.Depth] -= CurPos;
}
NewRun.SpellingMarks.push( Mark );
this.SpellingMarks.splice( Index, 1 );
SpellingMarksCount--;
Index--;
}
}
return NewRun;
},
//-----------------------------------------------------------------------------------
// Функции пересчета
//-----------------------------------------------------------------------------------
......
......@@ -5244,6 +5244,11 @@ Paragraph.prototype =
var Line = ParaPos.Line;
var Range = ParaPos.Range;
// TODO: Отключаем это ускорение в таблицах, т.к. в таблицах и так есть свое ускорение. Но можно и это ускорение
// подключить, для этого надо проверять изменились ли MinMax ширины и набираем ли мы в строке заголовков.
if ( undefined === this.Parent || true === this.Parent.Is_TableCellContent() )
return -1;
// Если мы находимся в строке, которая была полностью перенесена из-за обтекания, и мы добавляем пробел, или
// удаляем символ, тогда нам запускать обычный пересчет, т.к. первое слово может начать убираться в промежутках
// обтекания, которых у нас нет в отрезках строки
......@@ -8258,7 +8263,7 @@ Paragraph.prototype =
for ( var CurPos = 0; CurPos < ContentLen; CurPos++ )
{
this.Content[CurPos].Apply_TextPr( undefined, bIncrease, false );
this.Content[CurPos].Apply_TextPr( undefined, bIncrease, true );
}
}
else
......@@ -16978,58 +16983,6 @@ Paragraph.prototype =
// Разделяем данный параграф
Split : function(NewParagraph, Pos)
{
if ( true !== Debug_ParaRunMode )
{
if ( "undefined" === typeof(Pos) || null === Pos )
Pos = this.CurPos.ContentPos;
// Копируем контент, начиная с текущей позиции в параграфе до конца параграфа,
// в новый параграф (первым элементом выставляем настройки текста, рассчитанные
// для текущей позиции). Проверим, находится ли данная позиция внутри гиперссылки,
// если да, тогда в текущем параграфе закрываем гиперссылку, а в новом создаем ее копию.
var Hyperlink = this.Check_Hyperlink2( Pos, false );
var TextPr = this.Internal_CalculateTextPr( Pos );
NewParagraph.DeleteCommentOnRemove = false;
NewParagraph.Internal_Content_Remove2(0, NewParagraph.Content.length);
NewParagraph.Internal_Content_Concat( this.Content.slice( Pos ) );
NewParagraph.Internal_Content_Add( 0, new ParaTextPr( TextPr ) );
NewParagraph.Set_ContentPos( 0 );
NewParagraph.DeleteCommentOnRemove = true;
NewParagraph.TextPr.Value = this.TextPr.Value.Copy();
if ( null != Hyperlink )
NewParagraph.Internal_Content_Add( 1, Hyperlink.Copy() );
// Удаляем все элементы после текущей позиции и добавляем признак окончания параграфа.
this.DeleteCommentOnRemove = false;
this.Internal_Content_Remove2( Pos, this.Content.length - Pos );
this.Internal_Remove_CollaborativeMarks(false);
this.DeleteCommentOnRemove = true;
if ( null != Hyperlink )
{
// Добавляем конец гиперссылки и пустые текстовые настройки
this.Internal_Content_Add( this.Content.length, new ParaHyperlinkEnd() );
this.Internal_Content_Add( this.Content.length, new ParaTextPr() );
}
this.Internal_Content_Add( this.Content.length, new ParaEnd() );
this.Internal_Content_Add( this.Content.length, new ParaEmpty() );
// Копируем все настройки в новый параграф. Делаем это после того как определили контент параграфов.
this.CopyPr( NewParagraph );
this.RecalcInfo.Set_Type_0(pararecalc_0_All);
NewParagraph.RecalcInfo.Set_Type_0(pararecalc_0_All);
}
else
{
// TODO: Обработать здесь гиперссылки
NewParagraph.DeleteCommentOnRemove = false;
this.DeleteCommentOnRemove = false;
......@@ -17092,7 +17045,6 @@ Paragraph.prototype =
NewParagraph.DeleteCommentOnRemove = true;
this.DeleteCommentOnRemove = true;
}
},
// Присоединяем контент параграфа Para к текущему параграфу
......
......@@ -4334,6 +4334,40 @@ ParaRun.prototype =
this.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, CurTextPr.FontSize ) );
}
// Дополнительно проверим, если у нас para_End лежит в данном ране и попадает в выделение, тогда
// применим заданные настроки к символу конца параграфа
// TODO: Возможно, стоит на этапе пересчета запонимать, лежит ли para_End в данном ране. Чтобы в каждом
// ране потом не бегать каждый раз по всему массиву в поисках para_End.
var bEnd = false;
var Count = this.Content.length;
for ( var Pos = 0; Pos < Count; Pos++ )
{
if ( para_End === this.Content[Pos].Type )
{
bEnd = true;
break;
}
}
if ( true === bEnd )
{
if ( undefined === IncFontSize )
this.Paragraph.TextPr.Apply_TextPr( TextPr );
else
{
var Para = this.Paragraph;
// Выставляем настройки для символа параграфа
var EndTextPr = Para.Get_CompiledPr2(false).TextPr.Copy();
EndTextPr.Merge( Para.TextPr.Value );
// TODO: Как только перенесем историю изменений TextPr в сам класс CTextPr, переделать тут
Para.TextPr.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, EndTextPr.FontSize ) );
}
}
}
else
{
......
......@@ -8385,7 +8385,20 @@ CTable.prototype =
}
}
else
{
this.CurCell.Content.Remove(Count, bOnlyText, bRemoveOnlySelection, bOnTextAdd);
if ( false === this.CurCell.Content.Is_SelectionUse() )
{
var Cell = this.CurCell;
this.Selection.Use = false;
this.Selection.Start = false;
this.Selection.StartPos.Pos = { Row : Cell.Row.Index, Cell : Cell.Index };
this.Selection.EndPos.Pos = { Row : Cell.Row.Index, Cell : Cell.Index };
}
}
},
Cursor_GetPos : function()
......
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