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 = ...@@ -810,6 +810,106 @@ ParaHyperlink.prototype =
return; 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;
},
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// Функции пересчета // Функции пересчета
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
...@@ -1117,7 +1217,7 @@ ParaHyperlink.prototype = ...@@ -1117,7 +1217,7 @@ ParaHyperlink.prototype =
{ {
this.Content[CurPos].Shift_Range(Dx, Dy, _CurLine, _CurRange); this.Content[CurPos].Shift_Range(Dx, Dy, _CurLine, _CurRange);
} }
}, },
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// Функции отрисовки // Функции отрисовки
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
......
...@@ -5243,6 +5243,11 @@ Paragraph.prototype = ...@@ -5243,6 +5243,11 @@ Paragraph.prototype =
var Line = ParaPos.Line; var Line = ParaPos.Line;
var Range = ParaPos.Range; var Range = ParaPos.Range;
// TODO: Отключаем это ускорение в таблицах, т.к. в таблицах и так есть свое ускорение. Но можно и это ускорение
// подключить, для этого надо проверять изменились ли MinMax ширины и набираем ли мы в строке заголовков.
if ( undefined === this.Parent || true === this.Parent.Is_TableCellContent() )
return -1;
// Если мы находимся в строке, которая была полностью перенесена из-за обтекания, и мы добавляем пробел, или // Если мы находимся в строке, которая была полностью перенесена из-за обтекания, и мы добавляем пробел, или
// удаляем символ, тогда нам запускать обычный пересчет, т.к. первое слово может начать убираться в промежутках // удаляем символ, тогда нам запускать обычный пересчет, т.к. первое слово может начать убираться в промежутках
...@@ -8258,7 +8263,7 @@ Paragraph.prototype = ...@@ -8258,7 +8263,7 @@ Paragraph.prototype =
for ( var CurPos = 0; CurPos < ContentLen; CurPos++ ) for ( var CurPos = 0; CurPos < ContentLen; CurPos++ )
{ {
this.Content[CurPos].Apply_TextPr( undefined, bIncrease, false ); this.Content[CurPos].Apply_TextPr( undefined, bIncrease, true );
} }
} }
else else
...@@ -16978,121 +16983,68 @@ Paragraph.prototype = ...@@ -16978,121 +16983,68 @@ Paragraph.prototype =
// Разделяем данный параграф // Разделяем данный параграф
Split : function(NewParagraph, Pos) Split : function(NewParagraph, Pos)
{ {
if ( true !== Debug_ParaRunMode ) NewParagraph.DeleteCommentOnRemove = false;
{ this.DeleteCommentOnRemove = false;
if ( "undefined" === typeof(Pos) || null === Pos )
Pos = this.CurPos.ContentPos;
// Копируем контент, начиная с текущей позиции в параграфе до конца параграфа,
// в новый параграф (первым элементом выставляем настройки текста, рассчитанные
// для текущей позиции). Проверим, находится ли данная позиция внутри гиперссылки,
// если да, тогда в текущем параграфе закрываем гиперссылку, а в новом создаем ее копию.
var Hyperlink = this.Check_Hyperlink2( Pos, false );
var TextPr = this.Internal_CalculateTextPr( Pos ); // Обнулим селект и курсор
this.Selection_Remove();
NewParagraph.DeleteCommentOnRemove = false; NewParagraph.Selection_Remove();
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 ) var ContentPos = this.Get_ParaContentPos(false, false);
{ var CurPos = ContentPos.Get(0);
// Добавляем конец гиперссылки и пустые текстовые настройки
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() ); var TextPr = this.Get_TextPr(ContentPos);
this.Internal_Content_Add( this.Content.length, new ParaEmpty() );
// Копируем все настройки в новый параграф. Делаем это после того как определили контент параграфов. // Разделяем текущий элемент (возвращается правая, отделившаяся часть, если она null, тогда заменяем
this.CopyPr( NewParagraph ); // ее на пустой ран с заданными настройками).
var NewElement = this.Content[CurPos].Split( ContentPos, 1 );
this.RecalcInfo.Set_Type_0(pararecalc_0_All); if ( null === NewElement )
NewParagraph.RecalcInfo.Set_Type_0(pararecalc_0_All);
}
else
{ {
// TODO: Обработать здесь гиперссылки NewElement = new ParaRun( NewParagraph );
NewElement.Set_Pr( TextPr.Copy() );
NewParagraph.DeleteCommentOnRemove = false; }
this.DeleteCommentOnRemove = false;
// Обнулим селект и курсор
this.Selection_Remove();
NewParagraph.Selection_Remove();
// Переносим контент, идущий с текущей позиции в параграфе и до конца параграфа,
// в новый параграф.
var ContentPos = this.Get_ParaContentPos(false, false);
var CurPos = ContentPos.Get(0);
var TextPr = this.Get_TextPr(ContentPos);
// Разделяем текущий элемент (возвращается правая, отделившаяся часть, если она null, тогда заменяем
// ее на пустой ран с заданными настройками).
var NewElement = this.Content[CurPos].Split( ContentPos, 1 );
if ( null === NewElement )
{
NewElement = new ParaRun( NewParagraph );
NewElement.Set_Pr( TextPr.Copy() );
}
// Теперь делим наш параграф на три части: // Теперь делим наш параграф на три части:
// 1. До элемента с номером CurPos включительно (оставляем эту часть в исходном параграфе) // 1. До элемента с номером CurPos включительно (оставляем эту часть в исходном параграфе)
// 2. После элемента с номером CurPos (добавляем эту часть в новый параграф) // 2. После элемента с номером CurPos (добавляем эту часть в новый параграф)
// 3. Новый элемент, полученный после разделения элемента с номером CurPos, который мы // 3. Новый элемент, полученный после разделения элемента с номером CurPos, который мы
// добавляем в начало нового параграфа. // добавляем в начало нового параграфа.
var NewContent = this.Content.slice( CurPos + 1 ); var NewContent = this.Content.slice( CurPos + 1 );
this.Internal_Content_Remove2( CurPos + 1, this.Content.length - CurPos - 1 ); this.Internal_Content_Remove2( CurPos + 1, this.Content.length - CurPos - 1 );
// В старый параграф добавим ран с концом параграфа // В старый параграф добавим ран с концом параграфа
var EndRun = new ParaRun( this ); var EndRun = new ParaRun( this );
EndRun.Add_ToContent( 0, new ParaEnd() ); EndRun.Add_ToContent( 0, new ParaEnd() );
this.Internal_Content_Add( this.Content.length, EndRun ); this.Internal_Content_Add( this.Content.length, EndRun );
// Очищаем новый параграф и добавляем в него Right элемент и NewContent // Очищаем новый параграф и добавляем в него Right элемент и NewContent
NewParagraph.Internal_Content_Remove2( 0, NewParagraph.Content.length ); NewParagraph.Internal_Content_Remove2( 0, NewParagraph.Content.length );
NewParagraph.Internal_Content_Concat( NewContent ); NewParagraph.Internal_Content_Concat( NewContent );
NewParagraph.Internal_Content_Add( 0, NewElement ); NewParagraph.Internal_Content_Add( 0, NewElement );
// Копируем все настройки в новый параграф. Делаем это после того как определили контент параграфов. // Копируем все настройки в новый параграф. Делаем это после того как определили контент параграфов.
NewParagraph.TextPr.Value = this.TextPr.Value.Copy(); NewParagraph.TextPr.Value = this.TextPr.Value.Copy();
this.CopyPr( NewParagraph ); this.CopyPr( NewParagraph );
// Если на данном параграфе заканчивалась секция, тогда переносим конец секции на новый параграф // Если на данном параграфе заканчивалась секция, тогда переносим конец секции на новый параграф
var SectPr = this.Get_SectionPr(); var SectPr = this.Get_SectionPr();
if ( undefined !== SectPr ) if ( undefined !== SectPr )
{ {
this.Set_SectionPr( undefined ); this.Set_SectionPr( undefined );
NewParagraph.Set_SectionPr( SectPr ); NewParagraph.Set_SectionPr( SectPr );
} }
this.Cursor_MoveToEndPos( false, false ); this.Cursor_MoveToEndPos( false, false );
NewParagraph.Cursor_MoveToStartPos( false ); NewParagraph.Cursor_MoveToStartPos( false );
NewParagraph.DeleteCommentOnRemove = true; NewParagraph.DeleteCommentOnRemove = true;
this.DeleteCommentOnRemove = true; this.DeleteCommentOnRemove = true;
}
}, },
// Присоединяем контент параграфа Para к текущему параграфу // Присоединяем контент параграфа Para к текущему параграфу
......
...@@ -4334,6 +4334,40 @@ ParaRun.prototype = ...@@ -4334,6 +4334,40 @@ ParaRun.prototype =
this.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, CurTextPr.FontSize ) ); 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 else
{ {
......
...@@ -8385,7 +8385,20 @@ CTable.prototype = ...@@ -8385,7 +8385,20 @@ CTable.prototype =
} }
} }
else else
{
this.CurCell.Content.Remove(Count, bOnlyText, bRemoveOnlySelection, bOnTextAdd); 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() 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