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

Добавлена функция в апи can_CopyCut. Сделано ускорение пересчета для картинок...

Добавлена функция в апи can_CopyCut. Сделано ускорение пересчета для картинок с обтеканием. Исправлен баг с неправильным рассчетом текста по ширине (баг 26517). Исправлен баг с неправильной работой флага "Turn on live commenting" (баг 26507).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58284 954022d7-b5bf-4e40-9824-e11837661b57
parent 01615ec0
......@@ -59,6 +59,7 @@ var recalcresult_CurPage = 0x02; // Пересчитываем заново
var recalcresult_NextPage = 0x03; // Пересчитываем следующую страницу
var recalcresult_NextLine = 0x04; // Пересчитываем следующую строку
var recalcresult_CurLine = 0x05; // Пересчитываем текущую строку
var recalcresult_CurPagePara = 0x06; // Специальный случай, когда мы встретили картинку в начале параграфа
// Типы которые возвращают классы CDocument и CDocumentContent после пересчета страницы
var recalcresult2_End = 0x00; // Документ рассчитан до конца
......@@ -11678,51 +11679,14 @@ CDocument.prototype =
if (true === this.TurnOffInterfaceEvents)
return;
// Во время работы селекта не обновляем состояние
if ( true === this.Selection.Start )
return;
if ( true === CollaborativeEditing.m_bGlobalLockSelection )
return;
var bCanCopyCut = false;
var LogicDocument = null;
var DrawingObjects = null;
// Работаем с колонтитулом
if ( docpostype_HdrFtr === this.CurPos.Type )
{
var CurHdrFtr = this.HdrFtr.CurHdrFtr;
if ( null !== CurHdrFtr )
{
if ( docpostype_DrawingObjects === CurHdrFtr.Content.CurPos.Type )
DrawingObjects = this.DrawingObjects;
else
LogicDocument = CurHdrFtr.Content;
}
}
else if ( docpostype_DrawingObjects === this.CurPos.Type )
{
DrawingObjects = this.DrawingObjects;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
LogicDocument = this;
}
if ( null !== DrawingObjects )
{
if ( true === DrawingObjects.isSelectedText() )
LogicDocument = DrawingObjects.getTargetDocContent();
else
bCanCopyCut = true;
}
if ( null !== LogicDocument )
bCanCopyCut = LogicDocument.Is_SelectionUse();
// Во время работы селекта не обновляем состояние
if ( true === this.Selection.Start )
return;
editor.sync_CanCopyCutCallback( bCanCopyCut );
editor.sync_CanCopyCutCallback(this.Can_CopyCut());
},
Document_UpdateCanAddHyperlinkState : function()
......@@ -11777,6 +11741,48 @@ CDocument.prototype =
this.Document_UpdateRulersState();
}
},
Can_CopyCut : function()
{
var bCanCopyCut = false;
var LogicDocument = null;
var DrawingObjects = null;
// Работаем с колонтитулом
if ( docpostype_HdrFtr === this.CurPos.Type )
{
var CurHdrFtr = this.HdrFtr.CurHdrFtr;
if ( null !== CurHdrFtr )
{
if ( docpostype_DrawingObjects === CurHdrFtr.Content.CurPos.Type )
DrawingObjects = this.DrawingObjects;
else
LogicDocument = CurHdrFtr.Content;
}
}
else if ( docpostype_DrawingObjects === this.CurPos.Type )
{
DrawingObjects = this.DrawingObjects;
}
else //if ( docpostype_Content === this.CurPos.Type )
{
LogicDocument = this;
}
if ( null !== DrawingObjects )
{
if ( true === DrawingObjects.isSelectedText() )
LogicDocument = DrawingObjects.getTargetDocContent();
else
bCanCopyCut = true;
}
if ( null !== LogicDocument )
bCanCopyCut = LogicDocument.Is_SelectionUse();
return bCanCopyCut;
},
//-----------------------------------------------------------------------------------
// Функции для работы с номерами страниц
//-----------------------------------------------------------------------------------
......@@ -12921,6 +12927,9 @@ CDocument.prototype =
CanAdd_Comment : function()
{
if (true !== this.Comments.Is_Use())
return false;
// Проверим можно ли добавлять гиперссылку
if ( docpostype_HdrFtr === this.CurPos.Type )
return this.HdrFtr.CanAdd_Comment();
......
......@@ -1023,6 +1023,9 @@ Paragraph.prototype =
//-------------------------------------------------------------------------------------------------------------
var RecalcResultAlign = this.Recalculate_Lines_Align(PRS, CurPage, ParaPr, false);
if (recalcresult_CurPagePara === RecalcResultAlign)
RecalcResultAlign = this.Recalculate_Page__(CurPage);
if ( recalcresult_NextElement !== RecalcResultAlign )
return RecalcResultAlign;
......@@ -1473,7 +1476,7 @@ Paragraph.prototype =
}
//-------------------------------------------------------------------------------------------------------------
// 4. Проверяем обтекание данной строки относитально плавающих объектов
// 4. Проверяем обтекание данной строки относительно плавающих объектов
//-------------------------------------------------------------------------------------------------------------
var Left = ( 0 !== CurLine ? this.X + ParaPr.Ind.Left : this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine );
......@@ -1757,6 +1760,8 @@ Paragraph.prototype =
PRSA.Paragraph = this;
PRSA.LastW = 0;
PRSA.RecalcFast = Fast;
PRSA.CurPage = CurPage;
PRSA.PageY = this.Pages[CurPage].Y;
for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ )
{
......@@ -13400,9 +13405,17 @@ function CParaLineRange(X, XEnd)
this.XEnd = XEnd;
this.W = 0;
this.Words = 0;
this.Spaces = 0;
this.Letters = 0;
this.SpacesSkip = 0;
this.LettersSkip = 0;
this.StartPos = 0; // Позиция в контенте параграфа, с которой начинается данный отрезок
this.EndPos = 0; // Позиция в контенте параграфа, на которой заканчиваетсяданный отрезок
this.SpacePos = -1; // Позиция, с которой начинаем считать пробелы
}
CParaLineRange.prototype =
......@@ -13417,6 +13430,11 @@ CParaLineRange.prototype =
Reset_Width : function()
{
this.W = 0;
this.Words = 0;
this.Spaces = 0;
this.Letters = 0;
this.SpacesSkip = 0;
this.LettersSkip = 0;
},
Copy : function()
......@@ -13428,10 +13446,18 @@ CParaLineRange.prototype =
NewRange.XEnd = this.XEnd;
NewRange.W = this.W;
NewRange.Words = this.Words;
NewRange.Spaces = this.Spaces;
NewRange.Letters = this.Letters;
NewRange.SpacesSkip = this.SpacesSkip;
NewRange.LettersSkip = this.LettersSkip;
NewRange.StartPos = this.StartPos;
NewRange.EndPos = this.EndPos;
NewRange.SpacePos = this.SpacePos;
return NewRange;
}
};
......@@ -14226,6 +14252,9 @@ function CParagraphRecalculateStateAlign()
this.Paragraph = undefined;
this.RecalcResult = 0x00;//recalcresult_NextElement;
this.CurPage = 0;
this.PageY = 0;
this.RecalcFast = false; // Если пересчет быстрый, тогда все "плавающие" объекты мы не трогаем
}
......@@ -14289,6 +14318,7 @@ function CParagraphDrawStateHightlights()
this.Comm = new CParaDrawingRangeLines();
this.Shd = new CParaDrawingRangeLines();
this.DrawComments = true;
this.Comments = [];
this.CommentsFlag = comments_NoComment;
......@@ -14306,7 +14336,7 @@ function CParagraphDrawStateHightlights()
CParagraphDrawStateHightlights.prototype =
{
Reset : function(Paragraph, Graphics, DrawColl, DrawFind, DrawComm, PageEndInfo)
Reset : function(Paragraph, Graphics, DrawColl, DrawFind, DrawComments, PageEndInfo)
{
this.Paragraph = Paragraph;
this.Graphics = Graphics;
......@@ -14318,6 +14348,7 @@ CParagraphDrawStateHightlights.prototype =
this.SearchCounter = 0;
this.DrawComments = DrawComments;
if ( null !== PageEndInfo )
this.Comments = PageEndInfo.Comments;
else
......@@ -14346,24 +14377,30 @@ CParagraphDrawStateHightlights.prototype =
Add_Comment : function(Id)
{
this.Comments.push( Id );
if (true === this.DrawComments)
{
this.Comments.push(Id);
this.Check_CommentsFlag();
}
},
Remove_Comment : function(Id)
{
if (true === this.DrawComments)
{
var CommentsLen = this.Comments.length;
for (var CurPos = 0; CurPos < CommentsLen; CurPos++)
{
if ( this.Comments[CurPos] === Id )
if (this.Comments[CurPos] === Id)
{
this.Comments.splice( CurPos, 1 );
this.Comments.splice(CurPos, 1);
break;
}
}
this.Check_CommentsFlag();
}
},
Check_CommentsFlag : function()
......
......@@ -2367,7 +2367,12 @@ ParaRun.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange,
// Обновляем позицию объекта
Item.Update_Position( new CParagraphLayout( PRSA.X, PRSA.Y , Page_abs, PRSA.LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, Para.Pages[CurPage].Y + Para.Lines[CurLine].Y - Para.Lines[CurLine].Metrics.Ascent, Para.Pages[CurPage].Y), PageLimits);
LDRecalcInfo.Set_FlowObject( Item, 0, recalcresult_NextElement, -1 );
if (0 === PRSA.CurPage && Item.Y > PRSA.PageY + 0.001)
PRSA.RecalcResult = recalcresult_CurPagePara;
else
PRSA.RecalcResult = recalcresult_CurPage;
return;
}
else if ( true === LDRecalcInfo.Check_FlowObject(Item) )
......@@ -6243,6 +6248,7 @@ ParaRun.prototype.Check_HistoryUninon = function(Data1, Data2)
if ( 1 === Data1.Items.length && 1 === Data2.Items.length && Data1.Pos === Data2.Pos - 1 && para_Text === Data1.Items[0].Type && para_Text === Data2.Items[0].Type )
return true;
}
return false;
};
//-----------------------------------------------------------------------------------
......
......@@ -3023,6 +3023,11 @@ asc_docs_api.prototype.sync_CanRedoCallback = function(bCanRedo)
this.asc_fireCallback("asc_onCanRedo", bCanRedo);
}
asc_docs_api.prototype.can_CopyCut = function()
{
return this.WordControl.m_oLogicDocument.Can_CopyCut();
};
asc_docs_api.prototype.sync_CanCopyCutCallback = function(bCanCopyCut)
{
this.asc_fireCallback("asc_onCanCopyCut", bCanCopyCut);
......
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