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

Исправлен баг с определением первой страницы секции (баг 24102).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@56029 954022d7-b5bf-4e40-9824-e11837661b57
parent 3cc9e717
......@@ -12791,10 +12791,27 @@ CDocument.prototype =
var FP = PageNumInfo.FirstPage;
var CP = PageNumInfo.CurPage;
var bFirst = ( FP === CP ? true : false );
// Первая страница учитывается, только если параграф, идущий сразу за разрывом секции, начинается с новой страницы
var bCheckFP = true;
var SectIndex = PageNumInfo.SectIndex;
if ( SectIndex > 0 )
{
var CurSectInfo = this.SectionsInfo.Get_SectPr2( SectIndex );
var PrevSectInfo = this.SectionsInfo.Get_SectPr2( SectIndex - 1 );
if ( CurSectInfo !== PrevSectInfo && section_type_Continuous === CurSectInfo.SectPr.Get_Type() && true === CurSectInfo.SectPr.Compare_PageSize( PrevSectInfo.SectPr ) )
{
var ElementIndex = PrevSectInfo.Index;
if ( ElementIndex < this.Content.length - 1 && true !== this.Content[ElementIndex + 1].Is_StartFromNewPage() )
bCheckFP = false;
}
}
var bFirst = ( FP === CP && true === bCheckFP ? true : false );
var bEven = ( 0 === CP % 2 ? true : false ); // Четность/нечетность проверяется по текущему номеру страницы в секции, с учетом нумерации в секциях
return { FirstPage : FP, CurPage : CP, bFirst : bFirst, bEven : bEven };
return new CSectionPageNumInfo( FP, CP, bFirst, bEven, Page_abs );
},
Get_SectionPageNumInfo2 : function(Page_abs)
......@@ -12806,6 +12823,7 @@ CDocument.prototype =
StartIndex = this.Pages[Page_abs].Pos;
var SectIndex = this.SectionsInfo.Get_Index(StartIndex);
var StartSectIndex = SectIndex;
if ( 0 === SectIndex )
{
......@@ -12820,7 +12838,7 @@ CDocument.prototype =
if ( (section_type_OddPage === BT && 0 === PageNumStart % 2) || (section_type_EvenPage === BT && 1 === PageNumStart % 2) )
PageNumStart++;
return { FirstPage : PageNumStart, CurPage : Page_abs + PageNumStart };
return { FirstPage : PageNumStart, CurPage : Page_abs + PageNumStart, SectIndex : StartSectIndex };
}
var SectionFirstPage = this.Get_SectionFirstPage( SectIndex, Page_abs );
......@@ -12875,7 +12893,7 @@ CDocument.prototype =
var _FP = PageNumStart;
var _CP = PageNumStart + Page_abs - FP;
return { FirstPage : _FP, CurPage : _CP };
return { FirstPage : _FP, CurPage : _CP, SectIndex : StartSectIndex };
},
Get_SectionHdrFtr : function(Page_abs, _bFirst, _bEven)
......
......@@ -98,9 +98,9 @@ CHeaderFooter.prototype =
Is_NeedRecalculate : function(Page_abs)
{
var PageNum = this.LogicDocument.Get_SectionPageNumInfo2(Page_abs).CurPage;
var PageNumInfo = this.LogicDocument.Get_SectionPageNumInfo(Page_abs);
if ( PageNum === this.RecalcInfo.NeedRecalc[Page_abs] && undefined !== this.RecalcInfo.RecalcObj[Page_abs] )
if ( true === PageNumInfo.Compare( this.RecalcInfo.NeedRecalc[Page_abs] ) && undefined !== this.RecalcInfo.RecalcObj[Page_abs] )
return false;
return true;
......@@ -141,7 +141,7 @@ CHeaderFooter.prototype =
RecalcResult = this.Content.Recalculate_Page( CurPage++, true );
this.RecalcInfo.RecalcObj[Page_abs] = this.Content.Save_RecalculateObject();
this.RecalcInfo.NeedRecalc[Page_abs] = this.LogicDocument.Get_SectionPageNumInfo2(Page_abs).CurPage;
this.RecalcInfo.NeedRecalc[Page_abs] = this.LogicDocument.Get_SectionPageNumInfo(Page_abs);
this.RecalcInfo.SectPr[Page_abs] = false;
// Если у нас до этого был какой-то пересчет, тогда сравним его с текущим.
......@@ -205,7 +205,7 @@ CHeaderFooter.prototype =
// Ежели текущая страница не задана, тогда выставляем ту, которая оказалась пересчитанной первой. В противном
// случае, выставляем рассчет страницы, которая была до этого.
if ( -1 === this.RecalcInfo.CurPage || this.LogicDocument.Get_SectionPageNumInfo2(this.RecalcInfo.CurPage).CurPage !== this.RecalcInfo.NeedRecalc[this.RecalcInfo.CurPage] )
if ( -1 === this.RecalcInfo.CurPage || false === this.LogicDocument.Get_SectionPageNumInfo(this.RecalcInfo.CurPage).Compare( this.RecalcInfo.NeedRecalc[this.RecalcInfo.CurPage] ) )
{
this.RecalcInfo.CurPage = Page_abs;
......@@ -1282,7 +1282,6 @@ CHeaderFooterController.prototype =
Header.Set_Page(PageIndex);
}
HeaderDrawings = Header.Content.Get_AllDrawingObjects([]);
//HeaderTables = Header.Content
}
var bRecalcFooter = false;
......@@ -1313,7 +1312,6 @@ CHeaderFooterController.prototype =
Footer.Set_Page(PageIndex);
}
FooterDrawings = Footer.Content.Get_AllDrawingObjects([]);
//FooterTables = Footer
}
this.LogicDocument.DrawingObjects.mergeDrawings(PageIndex, HeaderDrawings, HeaderTables, FooterDrawings, FooterTables);
if ( true === bRecalcHeader || true === bRecalcFooter )
......
......@@ -15419,7 +15419,7 @@ Paragraph.prototype =
// TODO: пока здесь стоит простая проверка. В будущем надо будет данную проверку улучшить.
// Например, сейчас не учитывается случай, когда в начале параграфа стоит PageBreak.
if ( ( this.Pages.length > 1 && 0 === this.Pages[1].FirstLine ) || ( null === this.Get_DocumentPrev() ) )
if ( ( this.Pages.length > 1 && 0 === this.Pages[1].FirstLine ) || ( 1 === this.Pages.length && -1 === this.Pages[0].EndLine ) || ( null === this.Get_DocumentPrev() ) )
return true;
return false;
......
......@@ -1417,3 +1417,25 @@ CSectionPageNumType.prototype =
this.Start = Reader.GetLong();
}
}
function CSectionPageNumInfo(FP, CP, bFirst, bEven, PageNum)
{
this.FirstPage = FP;
this.CurPage = CP;
this.bFirst = bFirst;
this.bEven = bEven;
this.PageNum = PageNum;
}
CSectionPageNumInfo.prototype =
{
Compare : function(Other)
{
if ( undefined === Other || null === Other || this.CurPage !== Other.CurPage || this.bFirst !== Other.bFirst || this.bEven !== Other.bEven || this.PageNum !== Other.PageNum )
return false;
return true;
}
}
\ No newline at end of file
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