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

Реализована обработка двойного нажатия на пустом месте документа (баг 18713).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48140 954022d7-b5bf-4e40-9824-e11837661b57
parent 931a0178
......@@ -1225,6 +1225,86 @@ CDocument.prototype =
}
},
// Расширяем документ до точки (X,Y) с помощью новых параграфов
// Y0 - низ последнего параграфа, YLimit - предел страницы
Extend_ToPos : function(X, Y)
{
var LastPara = this.Content[this.Content.length - 1];
var LastPara2 = LastPara;
this.Create_NewHistoryPoint();
this.History.Set_Additional_ExtendDocumentToPos();
while ( true )
{
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, X_Left_Field, Y_Bottom_Field );
var StyleId = LastPara.Style_Get();
var NextId = undefined;
if ( undefined != StyleId )
{
NextId = this.Styles.Get_Next( StyleId );
if ( null === NextId || undefined === NextId )
NextId = StyleId;
}
// Простое добавление стиля, без дополнительных действий
if ( NextId === this.Styles.Get_Default_Paragraph() )
NewParagraph.Style_Remove();
else
NewParagraph.Style_Add_Open( NextId );
if ( undefined != LastPara.TextPr.Value.FontSize )
{
NewParagraph.TextPr.Set_FontSize(LastPara.TextPr.Value.FontSize);
NewParagraph.Internal_Content_Add( 0, new ParaTextPr( { FontSize : LastPara.TextPr.Value.FontSize, FontSizeCS : LastPara.TextPr.Value.FontSize } ) );
}
LastPara.Set_DocumentNext( NewParagraph );
NewParagraph.Set_DocumentPrev( LastPara );
NewParagraph.Set_DocumentIndex( LastPara.Index + 1 );
var CurPage = LastPara.Pages.length - 1;
var X0 = LastPara.Pages[CurPage].X;
var Y0 = LastPara.Pages[CurPage].Bounds.Bottom;
var XLimit = LastPara.Pages[CurPage].XLimit;
var YLimit = LastPara.Pages[CurPage].YLimit;
var PageNum = LastPara.PageNum;
NewParagraph.Reset( X0, Y0, XLimit, YLimit, PageNum );
var RecalcResult = NewParagraph.Recalculate_Page( PageNum );
if ( recalcresult_NextElement != RecalcResult )
{
LastPara.Next = null;
break;
}
this.Internal_Content_Add( this.Content.length, NewParagraph );
if ( NewParagraph.Pages[0].Bounds.Bottom > Y )
break;
LastPara = NewParagraph;
}
LastPara = this.Content[this.Content.length - 1];
if ( LastPara != LastPara2 || false === this.Document_Is_SelectionLocked( changestype_None, { Type : changestype_2_Element_and_Type, Element : LastPara, CheckType : changestype_Paragraph_Content } ) )
{
// Теперь нам нужно вставить таб по X
LastPara.Extend_ToPos(X);
}
LastPara.Cursor_MoveToEndPos();
LastPara.Document_SetThisElementCurrent();
this.Recalculate();
},
GroupGraphicObjects: function()
{
if(this.CanGroup())
......@@ -6699,6 +6779,10 @@ CDocument.prototype =
OnKeyDown : function(e)
{
// Если мы только что расширяли документ двойным щелчком, то сохраняем это действие
if ( true === this.History.Is_ExtendDocumentToPos() )
this.History.Clear_Additional();
var bUpdateSelection = true;
var bRetValue = false;
......@@ -7525,6 +7609,10 @@ CDocument.prototype =
if ( g_mouse_button_right === e.Button )
return;
// Если мы только что расширяли документ двойным щелчком, то отменяем это действие
if ( true === this.History.Is_ExtendDocumentToPos() )
this.Document_Undo();
// Если мы двигаем границу таблицы, тогда создаем новую точку для отката.
var Table = this.Is_TableBorder( X, Y, PageIndex );
if ( null != Table )
......
......@@ -1518,6 +1518,86 @@ CDocumentContent.prototype =
}
},
// Расширяем документ до точки (X,Y) с помощью новых параграфов
// Y0 - низ последнего параграфа, YLimit - предел страницы
Extend_ToPos : function(X, Y)
{
var LastPara = this.Content[this.Content.length - 1];
var LastPara2 = LastPara;
History.Create_NewPoint();
History.Set_Additional_ExtendDocumentToPos();
while ( true )
{
var NewParagraph = new Paragraph( this.DrawingDocument, this, 0, 0, 0, X_Left_Field, Y_Bottom_Field );
var StyleId = LastPara.Style_Get();
var NextId = undefined;
if ( undefined != StyleId )
{
NextId = this.Styles.Get_Next( StyleId );
if ( null === NextId || undefined === NextId )
NextId = StyleId;
}
// Простое добавление стиля, без дополнительных действий
if ( NextId === this.Styles.Get_Default_Paragraph() )
NewParagraph.Style_Remove();
else
NewParagraph.Style_Add_Open( NextId );
if ( undefined != LastPara.TextPr.Value.FontSize )
{
NewParagraph.TextPr.Set_FontSize(LastPara.TextPr.Value.FontSize);
NewParagraph.Internal_Content_Add( 0, new ParaTextPr( { FontSize : LastPara.TextPr.Value.FontSize, FontSizeCS : LastPara.TextPr.Value.FontSize } ) );
}
LastPara.Set_DocumentNext( NewParagraph );
NewParagraph.Set_DocumentPrev( LastPara );
NewParagraph.Set_DocumentIndex( LastPara.Index + 1 );
var CurPage = LastPara.Pages.length - 1;
var X0 = LastPara.Pages[CurPage].X;
var Y0 = LastPara.Pages[CurPage].Bounds.Bottom;
var XLimit = LastPara.Pages[CurPage].XLimit;
var YLimit = LastPara.Pages[CurPage].YLimit;
var PageNum = LastPara.PageNum;
NewParagraph.Reset( X0, Y0, XLimit, YLimit, PageNum );
var RecalcResult = NewParagraph.Recalculate_Page( PageNum );
if ( recalcresult_NextElement != RecalcResult )
{
LastPara.Next = null;
break;
}
this.Internal_Content_Add( this.Content.length, NewParagraph );
if ( NewParagraph.Pages[0].Bounds.Bottom > Y )
break;
LastPara = NewParagraph;
}
LastPara = this.Content[this.Content.length - 1];
if ( LastPara != LastPara2 || false === this.LogicDocument.Document_Is_SelectionLocked( changestype_None, { Type : changestype_2_Element_and_Type, Element : LastPara, CheckType : changestype_Paragraph_Content } ) )
{
// Теперь нам нужно вставить таб по X
LastPara.Extend_ToPos(X);
}
LastPara.Cursor_MoveToEndPos();
LastPara.Document_SetThisElementCurrent();
this.LogicDocument.Recalculate();
},
Add_InlineImage : function(W, H, Img, Chart, bFlow)
{
if ( docpostype_DrawingObjects === this.CurPos.Type )
......
......@@ -420,6 +420,8 @@ CHistory.prototype =
Create_NewPoint : function()
{
this.Clear_Additional();
this.Check_UninonLastPoints();
var State = this.Document.Get_SelectionState();
......@@ -429,9 +431,10 @@ CHistory.prototype =
// Создаем новую точку
this.Points[++this.Index] =
{
State : State, // Текущее состояние документа (курсор, селект)
Items : Items, // Массив изменений, начиная с текущего момента
Time : Time // Текущее время
State : State, // Текущее состояние документа (курсор, селект)
Items : Items, // Массив изменений, начиная с текущего момента
Time : Time, // Текущее время
Additional : {} // Дополнительная информация
};
// Удаляем ненужные точки
......@@ -664,5 +667,30 @@ CHistory.prototype =
}
return this.RecalculateData;
},
Set_Additional_ExtendDocumentToPos : function()
{
if ( this.Index >= 0 )
{
this.Points[this.Index].Additional.ExtendDocumentToPos = true;
}
},
Is_ExtendDocumentToPos : function()
{
if ( undefined === this.Points[this.Index] || undefined === this.Points[this.Index].Additional.ExtendDocumentToPos )
return false;
return true;
},
Clear_Additional : function()
{
if ( this.Index >= 0 )
{
this.Points[this.Index].Additional = new Object();
}
}
};
......@@ -211,7 +211,8 @@ Paragraph.prototype =
Get_EmptyHeight : function()
{
var EndTextPr = this.Get_CompiledPr2(false).TextPr.Copy();
var Pr = this.Get_CompiledPr();
var EndTextPr = Pr.TextPr.Copy();
EndTextPr.Merge( this.TextPr.Value );
g_oTextMeasurer.SetTextPr( EndTextPr );
......@@ -5412,6 +5413,39 @@ Paragraph.prototype =
}
},
// Расширяем параграф до позиции X
Extend_ToPos : function(_X)
{
var Page = this.Pages[this.Pages.length - 1];
var X0 = Page.X;
var X1 = Page.XLimit - X0;
var X = _X - X0;
if ( true === this.IsEmpty() )
{
if ( Math.abs(X - X1 / 2) < 12.5 )
return this.Set_Align( align_Center );
else if ( X > X1 - 12.5 )
return this.Set_Align( align_Right );
else if ( X < 12.5 )
return this.Set_Ind( { FirstLine : 12.5 }, false );
}
var Tabs = this.Get_CompiledPr2(false).ParaPr.Tabs.Copy();
var CurPos = this.Internal_GetEndPos();
if ( Math.abs(X - X1 / 2) < 12.5 )
Tabs.Add( new CParaTab( tab_Center, X1 / 2 ) );
else if ( X > X1 - 12.5 )
Tabs.Add( new CParaTab( tab_Right, X1 - 0.001 ) );
else
Tabs.Add( new CParaTab( tab_Left, X ) );
this.Set_Tabs( Tabs );
this.Internal_Content_Add( CurPos, new ParaTab() );
},
Internal_IncDecFontSize : function(bIncrease, Value)
{
// Закон изменения размеров :
......@@ -7675,6 +7709,10 @@ Paragraph.prototype =
// Если bEnd = true, тогда это конец селекта.
Selection_SetEnd : function(X,Y,PageNum, MouseEvent, bTableBorder)
{
var PagesCount = this.Pages.length;
if ( null == this.Get_DocumentNext() && PageNum - this.PageNum >= PagesCount - 1 && Y > this.Pages[PagesCount - 1].Bounds.Bottom && MouseEvent.ClickCount >= 2 )
return this.Parent.Extend_ToPos( X, Y );
this.CurPos.RealX = X;
this.CurPos.RealY = Y;
var Temp = this.Internal_GetContentPosByXY( X, Y, false, PageNum );
......@@ -7685,7 +7723,24 @@ Paragraph.prototype =
this.CurPos.Line = Temp.Line;
if ( true === Temp.End )
{
if ( PageNum - this.PageNum >= PagesCount - 1 && X > this.Lines[this.Lines.length - 1].Ranges[this.Lines[this.Lines.length - 1].Ranges.length - 1].W && MouseEvent.ClickCount >= 2 )
{
if ( false === editor.WordControl.m_oLogicDocument.Document_Is_SelectionLocked(changestype_None, { Type : changestype_2_Element_and_Type, Element : this, CheckType : changestype_Paragraph_Content } ) )
{
History.Create_NewPoint();
History.Set_Additional_ExtendDocumentToPos();
this.Extend_ToPos( X );
this.Cursor_MoveToEndPos();
this.Document_SetThisElementCurrent();
editor.WordControl.m_oLogicDocument.Recalculate();
return;
}
}
this.Selection.EndPos = Pos + 1;
}
else
this.Selection.EndPos = Pos;
......
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