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

Сделана обработка клавиш PgUp, PgDn в колонтитулах (баг 25019). Исправлен баг...

Сделана обработка клавиш PgUp, PgDn в колонтитулах (баг 25019). Исправлен баг с необновлением скомпилированного стиля текста после Undo для добавления стиля к параграфу (баги 25042, 25039). Исправлен баг с заменой неправильно набранного слова(орфография), внутри которого был конец или начало комментария (баг 24915). 

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57015 954022d7-b5bf-4e40-9824-e11837661b57
parent d43f9b17
......@@ -8953,81 +8953,91 @@ CDocument.prototype =
MouseEvent.Type = g_mouse_event_type_up;
this.Selection_SetEnd( 0, 0, MouseEvent );
bRetValue = true;
}
else
{
var TempXY = this.Cursor_GetPos();
var X = TempXY.X;
var Y = TempXY.Y;
var Dy = this.DrawingDocument.GetVisibleMMHeight();
if ( Y - Dy < 0 )
if (docpostype_HdrFtr === this.CurPos.Type)
{
this.CurPage--;
var PageH = this.Get_PageLimits( this.CurPage).YLimit;
Dy -= Y;
Y = PageH;
while ( Dy > PageH )
{
Dy -= PageH;
this.CurPage--;
}
if ( this.CurPage < 0 )
if ( true === this.HdrFtr.GoTo_PrevHdrFtr() )
{
this.CurPage = 0;
Dy = PageH - this.Content[0].Pages[this.Content[0].Pages.length - 1].Bounds.Top;
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
}
}
else
{
// TODO: переделать данную проверку
if ( this.CurPage >= this.DrawingDocument.m_lPagesCount )
this.CurPage = this.DrawingDocument.m_lPagesCount;
var StartX = X;
var StartY = Y;
var CurY = Y;
var TempXY = this.Cursor_GetPos();
while ( Math.abs(StartY - Y) < 0.001 )
{
var bBreak = false;
CurY -= Dy;
var X = TempXY.X;
var Y = TempXY.Y;
if ( CurY < 0 )
var Dy = this.DrawingDocument.GetVisibleMMHeight();
if ( Y - Dy < 0 )
{
this.CurPage--;
var PageH = this.Get_PageLimits( this.CurPage).YLimit;
CurY = PageH;
// Эта проверка нужна для выполнения PgUp в начале документа
if ( this.CurPage < 0 )
Dy -= Y;
Y = PageH;
while ( Dy > PageH )
{
this.CurPage = this.DrawingDocument.m_lPagesCount - 1;
CurY = 0;
Dy -= PageH;
this.CurPage--;
}
// Поскольку мы перешли на другую страницу, то можно из цикла выходить
bBreak = true;
if ( this.CurPage < 0 )
{
this.CurPage = 0;
Dy = PageH - this.Content[0].Pages[this.Content[0].Pages.length - 1].Bounds.Top;
}
}
this.Cursor_MoveAt( StartX, CurY, false );
this.CurPos.RealX = StartX;
this.CurPos.RealY = CurY;
// TODO: переделать данную проверку
if ( this.CurPage >= this.DrawingDocument.m_lPagesCount )
this.CurPage = this.DrawingDocument.m_lPagesCount;
TempXY = this.Cursor_GetPos();
X = TempXY.X;
Y = TempXY.Y;
var StartX = X;
var StartY = Y;
var CurY = Y;
if ( true === bBreak )
break;
}
while ( Math.abs(StartY - Y) < 0.001 )
{
var bBreak = false;
CurY -= Dy;
bRetValue = true;
if ( CurY < 0 )
{
this.CurPage--;
var PageH = this.Get_PageLimits( this.CurPage).YLimit;
CurY = PageH;
// Эта проверка нужна для выполнения PgUp в начале документа
if ( this.CurPage < 0 )
{
this.CurPage = this.DrawingDocument.m_lPagesCount - 1;
CurY = 0;
}
// Поскольку мы перешли на другую страницу, то можно из цикла выходить
bBreak = true;
}
this.Cursor_MoveAt( StartX, CurY, false );
this.CurPos.RealX = StartX;
this.CurPos.RealY = CurY;
TempXY = this.Cursor_GetPos();
X = TempXY.X;
Y = TempXY.Y;
if ( true === bBreak )
break;
}
}
}
bRetValue = true;
}
else if ( e.KeyCode == 34 ) // PgDn
{
......@@ -9050,84 +9060,93 @@ CDocument.prototype =
MouseEvent.Type = g_mouse_event_type_up;
this.Selection_SetEnd( 0, 0, MouseEvent );
bRetValue = true;
}
else
{
if ( this.Pages.length > 0 )
if (docpostype_HdrFtr === this.CurPos.Type)
{
var TempXY = this.Cursor_GetPos();
if ( true === this.HdrFtr.GoTo_NextHdrFtr() )
{
this.Document_UpdateSelectionState();
this.Document_UpdateInterfaceState();
}
}
else
{
if ( this.Pages.length > 0 )
{
var TempXY = this.Cursor_GetPos();
var X = TempXY.X;
var Y = TempXY.Y;
var X = TempXY.X;
var Y = TempXY.Y;
var Dy = this.DrawingDocument.GetVisibleMMHeight();
if ( Y + Dy > this.Get_PageLimits(this.CurPage).YLimit )
{
this.CurPage++;
var PageH = this.Get_PageLimits(this.CurPage).YLimit;
Dy -= PageH - Y;
Y = 0;
while ( Dy > PageH )
var Dy = this.DrawingDocument.GetVisibleMMHeight();
if ( Y + Dy > this.Get_PageLimits(this.CurPage).YLimit )
{
Dy -= PageH;
this.CurPage++;
var PageH = this.Get_PageLimits(this.CurPage).YLimit;
Dy -= PageH - Y;
Y = 0;
while ( Dy > PageH )
{
Dy -= PageH;
this.CurPage++;
}
if ( this.CurPage >= this.Pages.length )
{
this.CurPage = this.Pages.length - 1;
var LastElement = this.Content[this.Pages[this.CurPage].EndPos];
Dy = LastElement.Pages[LastElement.Pages.length - 1].Bounds.Bottom;
}
}
if ( this.CurPage >= this.Pages.length )
{
this.CurPage = this.Pages.length - 1;
var LastElement = this.Content[this.Pages[this.CurPage].EndPos];
Dy = LastElement.Pages[LastElement.Pages.length - 1].Bounds.Bottom;
}
}
if ( this.CurPage >= this.Pages.length )
this.CurPage = this.Pages.length - 1;
var StartX = X;
var StartY = Y;
var CurY = Y;
while ( Math.abs(StartY - Y) < 0.001 )
{
var bBreak = false;
CurY += Dy;
var StartX = X;
var StartY = Y;
var CurY = Y;
var PageH = this.Get_PageLimits(this.CurPage).YLimit;
if ( CurY > PageH )
while ( Math.abs(StartY - Y) < 0.001 )
{
this.CurPage++;
CurY = 0;
var bBreak = false;
CurY += Dy;
// Эта проверка нужна для выполнения PgDn в конце документа
if ( this.CurPage >= this.Pages.length )
var PageH = this.Get_PageLimits(this.CurPage).YLimit;
if ( CurY > PageH )
{
this.CurPage = this.Pages.length - 1;
var LastElement = this.Content[this.Pages[this.CurPage].EndPos];
CurY = LastElement.Pages[LastElement.Pages.length - 1].Bounds.Bottom;
}
this.CurPage++;
CurY = 0;
// Поскольку мы перешли на другую страницу, то можно из цикла выходить
bBreak = true;
}
// Эта проверка нужна для выполнения PgDn в конце документа
if ( this.CurPage >= this.Pages.length )
{
this.CurPage = this.Pages.length - 1;
var LastElement = this.Content[this.Pages[this.CurPage].EndPos];
CurY = LastElement.Pages[LastElement.Pages.length - 1].Bounds.Bottom;
}
this.Cursor_MoveAt( StartX, CurY, false );
this.CurPos.RealX = StartX;
this.CurPos.RealY = CurY;
// Поскольку мы перешли на другую страницу, то можно из цикла выходить
bBreak = true;
}
TempXY = this.Cursor_GetPos();
X = TempXY.X;
Y = TempXY.Y;
this.Cursor_MoveAt( StartX, CurY, false );
this.CurPos.RealX = StartX;
this.CurPos.RealY = CurY;
if ( true === bBreak )
break;
TempXY = this.Cursor_GetPos();
X = TempXY.X;
Y = TempXY.Y;
if ( true === bBreak )
break;
}
}
}
bRetValue = true;
}
bRetValue = true;
}
else if ( e.KeyCode == 35 ) // клавиша End
{
......
......@@ -1155,6 +1155,82 @@ CHeaderFooterController.prototype =
//-----------------------------------------------------------------------------------
// Функции для работы с колонтитулами
//-----------------------------------------------------------------------------------
GoTo_NextHdrFtr : function()
{
var CurHdrFtr = this.CurHdrFtr;
if (null === CurHdrFtr || -1 === CurHdrFtr.RecalcInfo.CurPage)
return;
var CurPage = CurHdrFtr.RecalcInfo.CurPage;
var Pages = this.Pages;
if (hdrftr_Header === CurHdrFtr.Type && undefined !== Pages[CurPage].Footer)
CurHdrFtr = Pages[CurPage].Footer;
else
CurHdrFtr = null;
while (null === CurHdrFtr)
{
CurPage++;
if (undefined === Pages[CurPage])
break;
else if (undefined !== Pages[CurPage].Header && null !== Pages[CurPage].Header)
CurHdrFtr = Pages[CurPage].Header;
else if (undefined !== Pages[CurPage].Footer && null !== Pages[CurPage].Footer)
CurHdrFtr = Pages[CurPage].Footer;
}
if (null !== CurHdrFtr)
{
this.CurHdrFtr = CurHdrFtr;
CurHdrFtr.Set_Page(CurPage);
CurHdrFtr.Content.Cursor_MoveToStartPos(false);
return true;
}
return false;
},
GoTo_PrevHdrFtr : function()
{
var CurHdrFtr = this.CurHdrFtr;
if (null === CurHdrFtr || -1 === CurHdrFtr.RecalcInfo.CurPage)
return;
var CurPage = CurHdrFtr.RecalcInfo.CurPage;
var Pages = this.Pages;
if (hdrftr_Footer === CurHdrFtr.Type && undefined !== Pages[CurPage].Header)
CurHdrFtr = Pages[CurPage].Header;
else
CurHdrFtr = null;
while (null === CurHdrFtr)
{
CurPage--;
if (undefined === Pages[CurPage])
return;
else if (undefined !== Pages[CurPage].Footer && null !== Pages[CurPage].Footer)
CurHdrFtr = Pages[CurPage].Footer;
else if (undefined !== Pages[CurPage].Header && null !== Pages[CurPage].Header)
CurHdrFtr = Pages[CurPage].Header;
}
if (null !== CurHdrFtr)
{
this.CurHdrFtr = CurHdrFtr;
CurHdrFtr.Set_Page(CurPage);
CurHdrFtr.Content.Cursor_MoveToStartPos(false);
return true;
}
return false;
},
Get_CurPage : function()
{
if ( null != this.CurHdrFtr )
......
......@@ -93,6 +93,18 @@ ParaHyperlink.prototype =
return NewHyperlink;
},
Recalc_RunsCompiledPr : function()
{
var Count = this.Content.length;
for (var Pos = 0; Pos < Count; Pos++)
{
var Element = this.Content[Pos];
if (Element.Recalc_RunsCompiledPr)
Element.Recalc_RunsCompiledPr();
}
},
Get_AllDrawingObjects : function(DrawingObjs)
{
......
......@@ -4468,8 +4468,8 @@ Paragraph.prototype =
if ( StartContentPos.Compare( EndContentPos ) > 0 )
Direction = -1;
var OldStartPos = Math.min( this.Selection.StartPos, this.Content.length - 1 );
var OldEndPos = Math.min( this.Selection.EndPos, this.Content.length - 1 );
var OldStartPos = Math.max(0, Math.min( this.Selection.StartPos, this.Content.length - 1 ));
var OldEndPos = Math.max(0, Math.min( this.Selection.EndPos, this.Content.length - 1 ));
if ( OldStartPos > OldEndPos )
{
......@@ -7837,6 +7837,18 @@ Paragraph.prototype =
{
this.CompiledPr.NeedRecalc = true;
},
Recalc_RunsCompiledPr : function()
{
var Count = this.Content.length;
for (var Pos = 0; Pos < Count; Pos++)
{
var Element = this.Content[Pos];
if (Element.Recalc_RunsCompiledPr)
Element.Recalc_RunsCompiledPr();
}
},
// Формируем конечные свойства параграфа на основе стиля, возможной нумерации и прямых настроек.
// Без пересчета расстояния между параграфами.
......@@ -8152,8 +8164,9 @@ Paragraph.prototype =
this.Pr.PStyle = Id;
}
// Надо пересчитать конечный стиль
// Надо пересчитать конечный стиль самого параграфа и всех текстовых блоков
this.CompiledPr.NeedRecalc = true;
this.Recalc_RunsCompiledPr();
if ( true === bDoNotDeleteProps )
return;
......@@ -8189,7 +8202,7 @@ Paragraph.prototype =
{
this.Content[Index].Clear_TextPr();
}
}
}
},
// Добавление стиля в параграф при открытии и копировании
......@@ -8211,6 +8224,7 @@ Paragraph.prototype =
// Надо пересчитать конечный стиль
this.CompiledPr.NeedRecalc = true;
this.Recalc_RunsCompiledPr();
},
// Проверяем находится ли курсор в конце параграфа
......@@ -10314,6 +10328,7 @@ Paragraph.prototype =
this.Pr.PStyle = undefined;
this.CompiledPr.NeedRecalc = true;
this.Recalc_RunsCompiledPr();
break;
}
......@@ -10695,6 +10710,7 @@ Paragraph.prototype =
this.Pr.PStyle = undefined;
this.CompiledPr.NeedRecalc = true;
this.Recalc_RunsCompiledPr();
break;
}
......@@ -11915,6 +11931,7 @@ Paragraph.prototype =
this.Pr.PStyle = undefined;
this.CompiledPr.NeedRecalc = true;
this.Recalc_RunsCompiledPr();
break;
}
......@@ -12489,6 +12506,22 @@ Paragraph.prototype =
// Удалим старое слово
var StartPos = Element.StartPos;
var EndPos = Element.EndPos;
// Если комментарии попадают в текст, тогда сначала их надо отдельно удалить
var CommentsToDelete = {};
var EPos = EndPos.Get(0);
var SPos = StartPos.Get(0);
for (var Pos = SPos; Pos <= EPos; Pos++)
{
var Item = this.Content[Pos];
if (para_Comment === Item.Type)
CommentsToDelete[Item.CommentId] = true;
}
for (var CommentId in CommentsToDelete)
{
this.LogicDocument.Remove_Comment( CommentId, true );
}
this.Set_SelectionContentPos( StartPos, EndPos );
this.Selection.Use = true;
......
......@@ -4316,6 +4316,11 @@ ParaRun.prototype =
this.RecalcInfo.Measure = true;
},
Recalc_RunsCompiledPr : function()
{
this.Recalc_CompiledPr(true);
},
Get_CompiledPr : function(bCopy)
{
if ( true === this.RecalcInfo.TextPr )
......
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