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

Исправлен баг с обработкой плохих таблиц.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@68005 954022d7-b5bf-4e40-9824-e11837661b57
parent f6a2b0a4
......@@ -696,15 +696,10 @@ CDocumentContent.prototype =
bFlow = true;
if ( true === this.RecalcInfo.Can_RecalcObject() )
{
if ( ( 0 === Index && 0 === PageIndex ) || Index != StartIndex || (1 == PageIndex && true === this.Is_TableCellContent() && false === this.Parent.Is_EmptyFirstPage()) )
{
Element.Set_DocumentIndex( Index );
Element.Reset( X, Y, XLimit, YLimit, PageIndex );
}
this.RecalcInfo.FlowObjectPage = 0;
this.RecalcInfo.FlowObject = Element;
this.RecalcInfo.RecalcResult = Element.Recalculate_Page( PageIndex );
Element.Set_DocumentIndex( Index );
Element.Reset(X, Y, XLimit, YLimit, PageIndex, 0, 1);
var TempRecalcResult = Element.Recalculate_Page(0);
this.RecalcInfo.Set_FlowObject(Element, 0, TempRecalcResult, -1, {X : X, Y : Y, XLimit: XLimit, YLimit : YLimit});
if(this.DrawingObjects)
this.DrawingObjects.addFloatTable(new CFlowTable(Element, PageIndex));
......@@ -719,61 +714,43 @@ CDocumentContent.prototype =
if ( true === this.RecalcInfo.FlowObjectPageBreakBefore )
{
// Добавляем начало таблицы в конец страницы так, чтобы не убралось ничего
Element.Set_DocumentIndex( Index );
Element.Reset( X, YLimit, XLimit, YLimit, PageIndex );
Element.Recalculate_Page( PageIndex );
Element.Set_DocumentIndex(Index);
Element.Reset(X, YLimit, XLimit, YLimit, PageIndex, 0, 1);
Element.Recalculate_Page(0);
this.RecalcInfo.FlowObjectPage++;
RecalcResult = recalcresult_NextPage;
}
else
{
if ( ( 0 === Index && 0 === PageIndex ) || Index != StartIndex )
{
Element.Set_DocumentIndex( Index );
Element.Reset( X, Y, XLimit, YLimit, PageIndex );
}
RecalcResult = Element.Recalculate_Page( PageIndex );
if ( (( 0 === Index && 0 === PageIndex ) || Index != StartIndex) && true != Element.Is_ContentOnFirstPage() )
{
if(this.DrawingObjects)
this.DrawingObjects.removeFloatTableById(PageIndex, Element.Get_Id());
this.RecalcInfo.FlowObjectPageBreakBefore = true;
RecalcResult = recalcresult_CurPage;
}
else
{
this.RecalcInfo.FlowObjectPage++;
X = this.RecalcInfo.AdditionalInfo.X;
Y = this.RecalcInfo.AdditionalInfo.Y;
XLimit = this.RecalcInfo.AdditionalInfo.XLimit;
YLimit = this.RecalcInfo.AdditionalInfo.YLimit;
// Пересчет нужнен для обновления номеров колонок и страниц
Element.Reset(X, Y, XLimit, YLimit, PageIndex, 0, 1);
RecalcResult = Element.Recalculate_Page(0);
this.RecalcInfo.FlowObjectPage++;
if (RecalcResult & recalcresult_NextElement)
{
this.RecalcInfo.FlowObject = null;
this.RecalcInfo.FlowObjectPageBreakBefore = false;
this.RecalcInfo.FlowObjectPage = 0;
this.RecalcInfo.RecalcResult = recalcresult_NextElement;
}
}
if (RecalcResult & recalcresult_NextElement)
this.RecalcInfo.Reset();
}
}
else
{
RecalcResult = Element.Recalculate_Page( PageIndex );
RecalcResult = Element.Recalculate_Page(PageIndex - Element.PageNum);
this.RecalcInfo.FlowObjectPage++;
if(this.DrawingObjects)
this.DrawingObjects.addFloatTable(new CFlowTable(Element, PageIndex));
if (RecalcResult & recalcresult_NextElement)
{
this.RecalcInfo.FlowObject = null;
this.RecalcInfo.FlowObjectPageBreakBefore = false;
this.RecalcInfo.RecalcResult = recalcresult_NextElement;
}
this.RecalcInfo.Reset();
}
}
else
{
// Пропускаем
RecalcResult = recalcresult_NextElement;
}
}
......
......@@ -7790,6 +7790,7 @@ function Binary_DocumentTableReader(doc, oReadResult, openParams, stream, bAllow
return oThis.ReadDocTable(t, l, oNewTable);
});
oNewTable.ReIndexing(0);
oNewTable.Correct_BadTable();
if(2 == g_nCurFileVersion && false == oNewTable.Inline)
{
//делаем смещение левой границы
......@@ -8249,6 +8250,7 @@ function Binary_DocumentTableReader(doc, oReadResult, openParams, stream, bAllow
return oThis.ReadDocTable(t, l, oNewTable);
});
oNewTable.ReIndexing(0);
oNewTable.Correct_BadTable();
if(2 == g_nCurFileVersion && false == oNewTable.Inline)
{
//делаем смещение левой границы
......
......@@ -9504,8 +9504,6 @@ CTable.prototype =
// Удаляем лишние строки
this.Internal_Check_TableRows(true);
//if ( true === this.Internal_Check_TableRows(true) )
//this.Content[Pos_tl.Row].Pr.Height = { Value : Summary_Height, HRule : heightrule_AtLeast };
var PageNum = 0;
for ( PageNum = 0; PageNum < this.Pages.length - 1; PageNum++ )
......@@ -12957,6 +12955,14 @@ CTable.prototype.private_StartTrackTable = function(CurPage)
}
this.DrawingDocument.StartTrackTable(NewOutline, Transform);
};
CTable.prototype.Correct_BadTable = function()
{
// TODO: Пока оставим эту заглушку на случай загрузки плохих таблиц. В будущем надо будет
// сделать нормальный обсчет для случая, когда у нас есть "пустые" строки (составленные
// из вертикально объединенных ячеек).
this.Internal_Check_TableRows(false);
};
//----------------------------------------------------------------------------------------------------------------------
// Класс CTableLook
//----------------------------------------------------------------------------------------------------------------------
......
......@@ -15,11 +15,6 @@ CTable.prototype.Recalculate_Page = function(PageIndex)
this.private_RecalculateGrid();
this.private_RecalculateBorders();
this.private_RecalculateHeader();
// TODO: Пока оставим эту заглушку на случай загрузки плохих таблиц. В будущем надо будет
// сделать нормальный обсчет для случая, когда у нас есть "пустые" строки (составленные
// из вертикально объединенных ячеек).
this.Internal_Check_TableRows(false);
}
this.private_RecalculatePageXY(PageIndex);
......@@ -2121,6 +2116,9 @@ CTable.prototype.private_RecalculatePage = function(CurPage)
CurGridCol += GridSpan;
}
if (undefined === this.TableRowsBottom[CurRow][CurPage])
this.TableRowsBottom[CurRow][CurPage] = Y;
var RowHValue = RowH.Value;
// В данном значении не учитываются маргины
RowHValue = RowH.Value + this.MaxBotMargin[CurRow] + MaxTopMargin;
......
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