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; // Пересчитываем заново ...@@ -59,6 +59,7 @@ var recalcresult_CurPage = 0x02; // Пересчитываем заново
var recalcresult_NextPage = 0x03; // Пересчитываем следующую страницу var recalcresult_NextPage = 0x03; // Пересчитываем следующую страницу
var recalcresult_NextLine = 0x04; // Пересчитываем следующую строку var recalcresult_NextLine = 0x04; // Пересчитываем следующую строку
var recalcresult_CurLine = 0x05; // Пересчитываем текущую строку var recalcresult_CurLine = 0x05; // Пересчитываем текущую строку
var recalcresult_CurPagePara = 0x06; // Специальный случай, когда мы встретили картинку в начале параграфа
// Типы которые возвращают классы CDocument и CDocumentContent после пересчета страницы // Типы которые возвращают классы CDocument и CDocumentContent после пересчета страницы
var recalcresult2_End = 0x00; // Документ рассчитан до конца var recalcresult2_End = 0x00; // Документ рассчитан до конца
...@@ -11678,51 +11679,14 @@ CDocument.prototype = ...@@ -11678,51 +11679,14 @@ CDocument.prototype =
if (true === this.TurnOffInterfaceEvents) if (true === this.TurnOffInterfaceEvents)
return; return;
// Во время работы селекта не обновляем состояние
if ( true === this.Selection.Start )
return;
if ( true === CollaborativeEditing.m_bGlobalLockSelection ) if ( true === CollaborativeEditing.m_bGlobalLockSelection )
return; return;
var bCanCopyCut = false; // Во время работы селекта не обновляем состояние
if ( true === this.Selection.Start )
var LogicDocument = null; return;
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();
editor.sync_CanCopyCutCallback( bCanCopyCut ); editor.sync_CanCopyCutCallback(this.Can_CopyCut());
}, },
Document_UpdateCanAddHyperlinkState : function() Document_UpdateCanAddHyperlinkState : function()
...@@ -11777,6 +11741,48 @@ CDocument.prototype = ...@@ -11777,6 +11741,48 @@ CDocument.prototype =
this.Document_UpdateRulersState(); 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 = ...@@ -12921,6 +12927,9 @@ CDocument.prototype =
CanAdd_Comment : function() CanAdd_Comment : function()
{ {
if (true !== this.Comments.Is_Use())
return false;
// Проверим можно ли добавлять гиперссылку // Проверим можно ли добавлять гиперссылку
if ( docpostype_HdrFtr === this.CurPos.Type ) if ( docpostype_HdrFtr === this.CurPos.Type )
return this.HdrFtr.CanAdd_Comment(); return this.HdrFtr.CanAdd_Comment();
......
...@@ -1023,6 +1023,9 @@ Paragraph.prototype = ...@@ -1023,6 +1023,9 @@ Paragraph.prototype =
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
var RecalcResultAlign = this.Recalculate_Lines_Align(PRS, CurPage, ParaPr, false); var RecalcResultAlign = this.Recalculate_Lines_Align(PRS, CurPage, ParaPr, false);
if (recalcresult_CurPagePara === RecalcResultAlign)
RecalcResultAlign = this.Recalculate_Page__(CurPage);
if ( recalcresult_NextElement !== RecalcResultAlign ) if ( recalcresult_NextElement !== RecalcResultAlign )
return RecalcResultAlign; return RecalcResultAlign;
...@@ -1473,7 +1476,7 @@ Paragraph.prototype = ...@@ -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 ); var Left = ( 0 !== CurLine ? this.X + ParaPr.Ind.Left : this.X + ParaPr.Ind.Left + ParaPr.Ind.FirstLine );
...@@ -1757,6 +1760,8 @@ Paragraph.prototype = ...@@ -1757,6 +1760,8 @@ Paragraph.prototype =
PRSA.Paragraph = this; PRSA.Paragraph = this;
PRSA.LastW = 0; PRSA.LastW = 0;
PRSA.RecalcFast = Fast; PRSA.RecalcFast = Fast;
PRSA.CurPage = CurPage;
PRSA.PageY = this.Pages[CurPage].Y;
for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ ) for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ )
{ {
...@@ -13400,9 +13405,17 @@ function CParaLineRange(X, XEnd) ...@@ -13400,9 +13405,17 @@ function CParaLineRange(X, XEnd)
this.XEnd = XEnd; this.XEnd = XEnd;
this.W = 0; this.W = 0;
this.Words = 0;
this.Spaces = 0;
this.Letters = 0;
this.SpacesSkip = 0;
this.LettersSkip = 0;
this.StartPos = 0; // Позиция в контенте параграфа, с которой начинается данный отрезок this.StartPos = 0; // Позиция в контенте параграфа, с которой начинается данный отрезок
this.EndPos = 0; // Позиция в контенте параграфа, на которой заканчиваетсяданный отрезок this.EndPos = 0; // Позиция в контенте параграфа, на которой заканчиваетсяданный отрезок
this.SpacePos = -1; // Позиция, с которой начинаем считать пробелы
} }
CParaLineRange.prototype = CParaLineRange.prototype =
...@@ -13417,6 +13430,11 @@ CParaLineRange.prototype = ...@@ -13417,6 +13430,11 @@ CParaLineRange.prototype =
Reset_Width : function() Reset_Width : function()
{ {
this.W = 0; this.W = 0;
this.Words = 0;
this.Spaces = 0;
this.Letters = 0;
this.SpacesSkip = 0;
this.LettersSkip = 0;
}, },
Copy : function() Copy : function()
...@@ -13428,10 +13446,18 @@ CParaLineRange.prototype = ...@@ -13428,10 +13446,18 @@ CParaLineRange.prototype =
NewRange.XEnd = this.XEnd; NewRange.XEnd = this.XEnd;
NewRange.W = this.W; 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.StartPos = this.StartPos;
NewRange.EndPos = this.EndPos; NewRange.EndPos = this.EndPos;
NewRange.SpacePos = this.SpacePos;
return NewRange; return NewRange;
} }
}; };
...@@ -14226,6 +14252,9 @@ function CParagraphRecalculateStateAlign() ...@@ -14226,6 +14252,9 @@ function CParagraphRecalculateStateAlign()
this.Paragraph = undefined; this.Paragraph = undefined;
this.RecalcResult = 0x00;//recalcresult_NextElement; this.RecalcResult = 0x00;//recalcresult_NextElement;
this.CurPage = 0;
this.PageY = 0;
this.RecalcFast = false; // Если пересчет быстрый, тогда все "плавающие" объекты мы не трогаем this.RecalcFast = false; // Если пересчет быстрый, тогда все "плавающие" объекты мы не трогаем
} }
...@@ -14289,6 +14318,7 @@ function CParagraphDrawStateHightlights() ...@@ -14289,6 +14318,7 @@ function CParagraphDrawStateHightlights()
this.Comm = new CParaDrawingRangeLines(); this.Comm = new CParaDrawingRangeLines();
this.Shd = new CParaDrawingRangeLines(); this.Shd = new CParaDrawingRangeLines();
this.DrawComments = true;
this.Comments = []; this.Comments = [];
this.CommentsFlag = comments_NoComment; this.CommentsFlag = comments_NoComment;
...@@ -14306,7 +14336,7 @@ function CParagraphDrawStateHightlights() ...@@ -14306,7 +14336,7 @@ function CParagraphDrawStateHightlights()
CParagraphDrawStateHightlights.prototype = CParagraphDrawStateHightlights.prototype =
{ {
Reset : function(Paragraph, Graphics, DrawColl, DrawFind, DrawComm, PageEndInfo) Reset : function(Paragraph, Graphics, DrawColl, DrawFind, DrawComments, PageEndInfo)
{ {
this.Paragraph = Paragraph; this.Paragraph = Paragraph;
this.Graphics = Graphics; this.Graphics = Graphics;
...@@ -14318,6 +14348,7 @@ CParagraphDrawStateHightlights.prototype = ...@@ -14318,6 +14348,7 @@ CParagraphDrawStateHightlights.prototype =
this.SearchCounter = 0; this.SearchCounter = 0;
this.DrawComments = DrawComments;
if ( null !== PageEndInfo ) if ( null !== PageEndInfo )
this.Comments = PageEndInfo.Comments; this.Comments = PageEndInfo.Comments;
else else
...@@ -14346,24 +14377,30 @@ CParagraphDrawStateHightlights.prototype = ...@@ -14346,24 +14377,30 @@ CParagraphDrawStateHightlights.prototype =
Add_Comment : function(Id) Add_Comment : function(Id)
{ {
this.Comments.push( Id ); if (true === this.DrawComments)
{
this.Comments.push(Id);
this.Check_CommentsFlag(); this.Check_CommentsFlag();
}
}, },
Remove_Comment : function(Id) Remove_Comment : function(Id)
{
if (true === this.DrawComments)
{ {
var CommentsLen = this.Comments.length; var CommentsLen = this.Comments.length;
for (var CurPos = 0; CurPos < CommentsLen; CurPos++) 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; break;
} }
} }
this.Check_CommentsFlag(); this.Check_CommentsFlag();
}
}, },
Check_CommentsFlag : function() Check_CommentsFlag : function()
......
...@@ -2367,7 +2367,12 @@ ParaRun.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange, ...@@ -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); 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 ); 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; PRSA.RecalcResult = recalcresult_CurPage;
return; return;
} }
else if ( true === LDRecalcInfo.Check_FlowObject(Item) ) else if ( true === LDRecalcInfo.Check_FlowObject(Item) )
...@@ -6243,6 +6248,7 @@ ParaRun.prototype.Check_HistoryUninon = function(Data1, Data2) ...@@ -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 ) 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 true;
} }
return false; return false;
}; };
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
......
...@@ -3023,6 +3023,11 @@ asc_docs_api.prototype.sync_CanRedoCallback = function(bCanRedo) ...@@ -3023,6 +3023,11 @@ asc_docs_api.prototype.sync_CanRedoCallback = function(bCanRedo)
this.asc_fireCallback("asc_onCanRedo", 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) asc_docs_api.prototype.sync_CanCopyCutCallback = function(bCanCopyCut)
{ {
this.asc_fireCallback("asc_onCanCopyCut", 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