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

Сделано, чтобы при добавлении новых параграфов по двойному клику мыши...

Сделано, чтобы при добавлении новых параграфов по двойному клику мыши копировался не только размер текста, но и сам шрифт(баг 25472), также устранено падение в такой ситуации (25468). Улучшен алгоритм drag-n-drop (баг 25474). Улучшена обработка двойного клика в пустом месте документа (баги 25458, 25464, 25460, 25459). Исправлен баг с увеличением размера текста (баг 25473). Исправлен баг с селектом (баг 25471). Исправлен баг с постановкой курсора (баг 25480).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57353 954022d7-b5bf-4e40-9824-e11837661b57
parent a3041045
...@@ -2358,6 +2358,7 @@ CDocument.prototype = ...@@ -2358,6 +2358,7 @@ CDocument.prototype =
while ( true ) while ( true )
{ {
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 ); var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, 0, 0 );
var NewRun = new ParaRun( NewParagraph, false );
var StyleId = LastPara.Style_Get(); var StyleId = LastPara.Style_Get();
var NextId = undefined; var NextId = undefined;
...@@ -2376,10 +2377,14 @@ CDocument.prototype = ...@@ -2376,10 +2377,14 @@ CDocument.prototype =
else else
NewParagraph.Style_Add_Open( NextId ); NewParagraph.Style_Add_Open( NextId );
if ( undefined != LastPara.TextPr.Value.FontSize ) if ( undefined != LastPara.TextPr.Value.FontSize || undefined !== LastPara.TextPr.Value.RFonts.Ascii )
{ {
NewParagraph.TextPr.Set_FontSize(LastPara.TextPr.Value.FontSize); var TextPr = new CTextPr();
NewParagraph.Internal_Content_Add( 0, new ParaTextPr( { FontSize : LastPara.TextPr.Value.FontSize, FontSizeCS : LastPara.TextPr.Value.FontSize } ) ); TextPr.FontSize = LastPara.TextPr.Value.FontSize;
TextPr.FontSizeCS = LastPara.TextPr.Value.FontSize;
TextPr.RFonts = LastPara.TextPr.Value.RFonts.Copy();
NewParagraph.Select_All();
NewParagraph.Apply_TextPr( TextPr );
} }
LastPara.Set_DocumentNext( NewParagraph ); LastPara.Set_DocumentNext( NewParagraph );
...@@ -8607,10 +8612,12 @@ CDocument.prototype = ...@@ -8607,10 +8612,12 @@ CDocument.prototype =
{ {
bConcatE = false; bConcatE = false;
if ( 1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && true === FirstElement.Element.Is_Empty() ) if ( 1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && ( true === FirstElement.Element.Is_Empty() || true == FirstElement.SelectedAll ) )
{ {
bConcatS = false; bConcatS = false;
DstIndex++;
if ( true === FirstElement.Element.Is_Empty() )
DstIndex++;
} }
} }
else if ( true === Para.Cursor_IsStart() ) else if ( true === Para.Cursor_IsStart() )
......
...@@ -3968,10 +3968,12 @@ CDocumentContent.prototype = ...@@ -3968,10 +3968,12 @@ CDocumentContent.prototype =
{ {
bConcatE = false; bConcatE = false;
if ( 1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && true === FirstElement.Element.Is_Empty() ) if ( 1 === ElementsCount && type_Paragraph === FirstElement.Element.GetType() && ( true === FirstElement.Element.Is_Empty() || true == FirstElement.SelectedAll ) )
{ {
bConcatS = false; bConcatS = false;
DstIndex++;
if ( true === FirstElement.Element.Is_Empty() )
DstIndex++;
} }
} }
else if ( true === Para.Cursor_IsStart() ) else if ( true === Para.Cursor_IsStart() )
......
...@@ -4272,26 +4272,43 @@ Paragraph.prototype = ...@@ -4272,26 +4272,43 @@ Paragraph.prototype =
// Расширяем параграф до позиции X // Расширяем параграф до позиции X
Extend_ToPos : function(_X) Extend_ToPos : function(_X)
{ {
var CompiledPr = this.Get_CompiledPr2(false).ParaPr;
var Page = this.Pages[this.Pages.length - 1]; var Page = this.Pages[this.Pages.length - 1];
var X0 = Page.X; var X0 = Page.X;
var X1 = Page.XLimit - X0; var X1 = Page.XLimit - X0;
var X = _X - X0; var X = _X - X0;
if ( X < 10 ) var Align = CompiledPr.Jc;
if ( X < 0 || X > X1 || ( X < 7.5 && align_Left === Align ) || ( X > X1 - 10 && align_Right === Align ) || ( Math.abs( X1 / 2 - X ) < 10 && align_Center === Align ) )
return false; return false;
if ( true === this.IsEmpty() ) if ( true === this.IsEmpty() )
{ {
if ( Math.abs(X - X1 / 2) < 12.5 ) if ( align_Left !== Align )
return this.Set_Align( align_Center ); {
this.Set_Align( align_Left );
}
if ( Math.abs(X - X1 / 2) < 12.5 )
{
this.Set_Align( align_Center );
return true;
}
else if ( X > X1 - 12.5 ) else if ( X > X1 - 12.5 )
return this.Set_Align( align_Right ); {
else if ( X < 12.5 ) this.Set_Align( align_Right );
return this.Set_Ind( { FirstLine : 12.5 }, false ); return true;
}
else if ( X < 17.5 )
{
this.Set_Ind( { FirstLine : 12.5 }, false );
return true;
}
} }
var Tabs = this.Get_CompiledPr2(false).ParaPr.Tabs.Copy(); var Tabs = CompiledPr.Tabs.Copy();
if ( Math.abs(X - X1 / 2) < 12.5 ) if ( Math.abs(X - X1 / 2) < 12.5 )
Tabs.Add( new CParaTab( tab_Center, X1 / 2 ) ); Tabs.Add( new CParaTab( tab_Center, X1 / 2 ) );
...@@ -4347,14 +4364,8 @@ Paragraph.prototype = ...@@ -4347,14 +4364,8 @@ Paragraph.prototype =
if ( null === RItem || para_End === RItem.Type ) if ( null === RItem || para_End === RItem.Type )
{ {
// Изменение настройки для символа параграфа делается внутри
this.Apply_TextPr( undefined, bIncrease, false ); this.Apply_TextPr( undefined, bIncrease, false );
// Выставляем настройки для символа параграфа
var EndTextPr = this.Get_CompiledPr2( false).TextPr.Copy();
EndTextPr.Merge( this.TextPr.Value );
// TODO: Как только перенесем историю изменений TextPr в сам класс CTextPr, переделать тут
this.TextPr.Set_FontSize( FontSize_IncreaseDecreaseValue( bIncrease, EndTextPr.FontSize ) );
} }
else if ( null !== RItem && null !== LItem && para_Text === RItem.Type && para_Text === LItem.Type && false === RItem.Is_Punctuation() && false === LItem.Is_Punctuation() ) else if ( null !== RItem && null !== LItem && para_Text === RItem.Type && para_Text === LItem.Type && false === RItem.Is_Punctuation() && false === LItem.Is_Punctuation() )
{ {
...@@ -6144,23 +6155,15 @@ Paragraph.prototype = ...@@ -6144,23 +6155,15 @@ Paragraph.prototype =
var NewElements = this.Content[EndPos].Apply_TextPr( TextPr, IncFontSize, false ); var NewElements = this.Content[EndPos].Apply_TextPr( TextPr, IncFontSize, false );
if ( para_Run === this.Content[EndPos].Type ) if ( para_Run === this.Content[EndPos].Type )
{
this.Internal_ReplaceRun( EndPos, NewElements ); this.Internal_ReplaceRun( EndPos, NewElements );
}
var NewElements = this.Content[StartPos].Apply_TextPr( TextPr, IncFontSize, false ); var NewElements = this.Content[StartPos].Apply_TextPr( TextPr, IncFontSize, false );
if ( para_Run === this.Content[StartPos].Type ) if ( para_Run === this.Content[StartPos].Type )
{
this.Internal_ReplaceRun( StartPos, NewElements ); this.Internal_ReplaceRun( StartPos, NewElements );
}
// Подправим селект. Заметим, что метки выделения изменяются внутри функции Internal_Content_Add
// за счет того, что EndPos - StartPos > 1.
if ( this.Selection.StartPos < this.Selection.EndPos && true === this.Content[this.Selection.StartPos].Selection_IsEmpty(true) )
this.Selection.StartPos++;
else if ( this.Selection.EndPos < this.Selection.StartPos && true === this.Content[this.Selection.EndPos].Selection_IsEmpty(true) )
this.Selection.EndPos++;
if ( this.Selection.StartPos < this.Selection.EndPos && true === this.Content[this.Selection.EndPos].Selection_IsEmpty(true) )
this.Selection.EndPos--;
else if ( this.Selection.EndPos < this.Selection.StartPos && true === this.Content[this.Selection.StartPos].Selection_IsEmpty(true) )
this.Selection.StartPos--;
} }
} }
else else
...@@ -6728,10 +6731,10 @@ Paragraph.prototype = ...@@ -6728,10 +6731,10 @@ Paragraph.prototype =
// Выставим в полученном месте текущую позицию курсора // Выставим в полученном месте текущую позицию курсора
this.Set_ParaContentPos( SearchPosXY2.Pos, true, SearchPosXY2.Line, SearchPosXY2.Range ); this.Set_ParaContentPos( SearchPosXY2.Pos, true, SearchPosXY2.Line, SearchPosXY2.Range );
if ( true === SearchPosXY.End ) if ( true === SearchPosXY.End || true === this.Is_Empty() )
{ {
var LastRange = this.Lines[this.Lines.length - 1].Ranges[this.Lines[this.Lines.length - 1].Ranges.length - 1]; var LastRange = this.Lines[this.Lines.length - 1].Ranges[this.Lines[this.Lines.length - 1].Ranges.length - 1];
if ( PageNum - this.PageNum >= PagesCount - 1 && X > LastRange.W && MouseEvent.ClickCount >= 2 && Y <= this.Pages[PagesCount - 1].Bounds.Bottom && X > LastRange.X + 10 && X > LastRange.XVisible + 10 ) if ( PageNum - this.PageNum >= PagesCount - 1 && X > LastRange.W && MouseEvent.ClickCount >= 2 && Y <= this.Pages[PagesCount - 1].Bounds.Bottom )
{ {
if ( this.bFromDocument && false === editor.isViewMode && false === editor.WordControl.m_oLogicDocument.Document_Is_SelectionLocked(changestype_None, { Type : changestype_2_Element_and_Type, Element : this, CheckType : changestype_Paragraph_Content } ) ) if ( this.bFromDocument && false === editor.isViewMode && false === editor.WordControl.m_oLogicDocument.Document_Is_SelectionLocked(changestype_None, { Type : changestype_2_Element_and_Type, Element : this, CheckType : changestype_Paragraph_Content } ) )
{ {
......
...@@ -3697,13 +3697,26 @@ ParaRun.prototype = ...@@ -3697,13 +3697,26 @@ ParaRun.prototype =
{ {
var Pos = ContentPos.Get(Depth); var Pos = ContentPos.Get(Depth);
if ( Pos > this.Content.length ) var Count = this.Content.length;
Pos = this.Content.length; if ( Pos > Count )
Pos = Count;
// TODO: Как только переделаем работу c Para_End переделать здесь
for ( var TempPos = 0; TempPos < Pos; TempPos++ )
{
if ( para_End === this.Content[TempPos].Type )
{
Pos = TempPos;
break;
}
}
if ( Pos < 0 ) if ( Pos < 0 )
Pos = 0; Pos = 0;
this.State.ContentPos = Pos; this.State.ContentPos = Pos;
}, },
Get_PosByElement : function(Class, ContentPos, Depth, UseRange, Range, Line) Get_PosByElement : function(Class, ContentPos, Depth, UseRange, Range, Line)
......
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