Commit d51719cc authored by Ilya Kirillov's avatar Ilya Kirillov

Fixed a very important issue. Sometimes unnecessary changes could be saved in...

Fixed a very important issue. Sometimes unnecessary changes could be saved in time of calculating of table.
parent 172f53f3
...@@ -9425,8 +9425,7 @@ function Binary_DocumentTableReader(doc, oReadResult, openParams, stream, bAllow ...@@ -9425,8 +9425,7 @@ function Binary_DocumentTableReader(doc, oReadResult, openParams, stream, bAllow
res = this.bcr.Read2(length, function(t, l){ res = this.bcr.Read2(length, function(t, l){
return oThis.Read_tblGrid(t,l, aNewGrid); return oThis.Read_tblGrid(t,l, aNewGrid);
}); });
table.Internal_SaveTableGridInHistory(aNewGrid, table.TableGrid); table.SetTableGrid(aNewGrid);
table.TableGrid = aNewGrid;
} }
else if( c_oSerDocTableType.Content === type ) else if( c_oSerDocTableType.Content === type )
{ {
......
This diff is collapsed.
...@@ -233,14 +233,12 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -233,14 +233,12 @@ CTable.prototype.private_RecalculateGrid = function()
if ( this.Content.length <= 0 ) if ( this.Content.length <= 0 )
return; return;
this.private_RecalculateGridOpen();
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// 1 часть пересчета ширины таблицы : Рассчитываем фиксированную ширину // 1 часть пересчета ширины таблицы : Рассчитываем фиксированную ширину
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
var TablePr = this.Get_CompiledPr(false).TablePr; var TablePr = this.Get_CompiledPr(false).TablePr;
var Grid = this.TableGrid; var Grid = this.TableGrid;
var SumGrid = []; var SumGrid = [];
var TempSum = 0; var TempSum = 0;
...@@ -354,18 +352,11 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -354,18 +352,11 @@ CTable.prototype.private_RecalculateGrid = function()
else if ( MinWidth > SumGrid[SumGrid.length - 1] ) else if ( MinWidth > SumGrid[SumGrid.length - 1] )
SumGrid = this.Internal_ScaleTableWidth( SumGrid, SumGrid[SumGrid.length - 1] ); SumGrid = this.Internal_ScaleTableWidth( SumGrid, SumGrid[SumGrid.length - 1] );
var TableGrid_old = [];
for ( var Index = 0; Index < this.TableGrid.length; Index++ )
TableGrid_old[Index] = this.TableGrid[Index];
// По массиву SumGrid восстанавливаем ширины самих колонок // По массиву SumGrid восстанавливаем ширины самих колонок
this.TableGrid[0] = SumGrid[0]; this.TableGridCalc = [];
this.TableGridCalc[0] = SumGrid[0];
for ( var Index = 1; Index < SumGrid.length; Index++ ) for ( var Index = 1; Index < SumGrid.length; Index++ )
this.TableGrid[Index] = SumGrid[Index] - SumGrid[Index - 1]; this.TableGridCalc[Index] = SumGrid[Index] - SumGrid[Index - 1];
this.Internal_SaveTableGridInHistory( this.TableGrid, TableGrid_old );
this.TableGridCalc = this.Internal_Copy_Grid(this.TableGrid);
this.TableSumGrid = SumGrid; this.TableSumGrid = SumGrid;
...@@ -437,13 +428,13 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -437,13 +428,13 @@ CTable.prototype.private_RecalculateGrid = function()
{ {
SumSpanMinContent += MinContent[CurSpan]; SumSpanMinContent += MinContent[CurSpan];
SumSpanMaxContent += MaxContent[CurSpan]; SumSpanMaxContent += MaxContent[CurSpan];
SumSpanCurContent += this.TableGrid[CurSpan]; SumSpanCurContent += this.TableGridCalc[CurSpan];
} }
if (null !== WBeforeW && SumSpanMinContent < WBeforeW) if (null !== WBeforeW && SumSpanMinContent < WBeforeW)
{ {
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MinContent[CurSpan] = WBeforeW * this.TableGrid[CurSpan] / SumSpanCurContent; MinContent[CurSpan] = WBeforeW * this.TableGridCalc[CurSpan] / SumSpanCurContent;
} }
// Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не // Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не
...@@ -454,7 +445,7 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -454,7 +445,7 @@ CTable.prototype.private_RecalculateGrid = function()
// TODO: На самом деле, распределение здесь идет в каком-то отношении. // TODO: На самом деле, распределение здесь идет в каком-то отношении.
// Неплохо было бы выяснить как именно. // Неплохо было бы выяснить как именно.
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridBefore; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridBefore; CurSpan++ )
MaxContent[CurSpan] = WBeforeW * this.TableGrid[CurSpan] / SumSpanCurContent; MaxContent[CurSpan] = WBeforeW * this.TableGridCalc[CurSpan] / SumSpanCurContent;
} }
} }
...@@ -546,13 +537,13 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -546,13 +537,13 @@ CTable.prototype.private_RecalculateGrid = function()
{ {
SumSpanMinContent += MinContent[CurSpan]; SumSpanMinContent += MinContent[CurSpan];
SumSpanMaxContent += MaxContent[CurSpan]; SumSpanMaxContent += MaxContent[CurSpan];
SumSpanCurContent += this.TableGrid[CurSpan]; SumSpanCurContent += this.TableGridCalc[CurSpan];
} }
if ( SumSpanMinContent < CellMin ) if ( SumSpanMinContent < CellMin )
{ {
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MinContent[CurSpan] = CellMin * this.TableGrid[CurSpan] / SumSpanCurContent; MinContent[CurSpan] = CellMin * this.TableGridCalc[CurSpan] / SumSpanCurContent;
} }
// Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не // Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не
...@@ -566,7 +557,7 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -566,7 +557,7 @@ CTable.prototype.private_RecalculateGrid = function()
// TODO: На самом деле, распределение здесь идет в каком-то отношении. // TODO: На самом деле, распределение здесь идет в каком-то отношении.
// Неплохо было бы выяснить как именно. // Неплохо было бы выяснить как именно.
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MaxContent[CurSpan] = CellMax * this.TableGrid[CurSpan] / SumSpanCurContent; MaxContent[CurSpan] = CellMax * this.TableGridCalc[CurSpan] / SumSpanCurContent;
} }
} }
...@@ -616,13 +607,13 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -616,13 +607,13 @@ CTable.prototype.private_RecalculateGrid = function()
{ {
SumSpanMinContent += MinContent[CurSpan]; SumSpanMinContent += MinContent[CurSpan];
SumSpanMaxContent += MaxContent[CurSpan]; SumSpanMaxContent += MaxContent[CurSpan];
SumSpanCurContent += this.TableGrid[CurSpan]; SumSpanCurContent += this.TableGridCalc[CurSpan];
} }
if (null !== WAfterW && SumSpanMinContent < WAfterW) if (null !== WAfterW && SumSpanMinContent < WAfterW)
{ {
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MinContent[CurSpan] = WAfterW * this.TableGrid[CurSpan] / SumSpanCurContent; MinContent[CurSpan] = WAfterW * this.TableGridCalc[CurSpan] / SumSpanCurContent;
} }
// Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не // Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не
...@@ -633,7 +624,7 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -633,7 +624,7 @@ CTable.prototype.private_RecalculateGrid = function()
// TODO: На самом деле, распределение здесь идет в каком-то отношении. // TODO: На самом деле, распределение здесь идет в каком-то отношении.
// Неплохо было бы выяснить как именно. // Неплохо было бы выяснить как именно.
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridAfter; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridAfter; CurSpan++ )
MaxContent[CurSpan] = WAfterW * this.TableGrid[CurSpan] / SumSpanCurContent; MaxContent[CurSpan] = WAfterW * this.TableGridCalc[CurSpan] / SumSpanCurContent;
} }
} }
} }
...@@ -895,80 +886,6 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -895,80 +886,6 @@ CTable.prototype.private_RecalculateGrid = function()
this.RecalcInfo.TableGrid = false; this.RecalcInfo.TableGrid = false;
}; };
CTable.prototype.private_RecalculateGridOpen = function()
{
if ( true != this.RecalcInfo.TableGridOpen )
return;
// Сначала пробежимся по всем ячейкам и посмотрим, чтобы у них были корректные GridSpan (т.е. >= 1)
for ( var Index = 0; Index < this.Content.length; Index++ )
{
var Row = this.Content[Index];
var CellsCount = Row.Get_CellsCount();
for ( var CellIndex = 0; CellIndex < CellsCount; CellIndex++ )
{
var Cell = Row.Get_Cell( CellIndex );
var GridSpan = Cell.Get_GridSpan();
if ( GridSpan <= 0 )
Cell.Set_GridSpan( 1 );
}
}
var RowGrid = [];
var GridCount = 0;
for ( var Index = 0; Index < this.Content.length; Index++ )
{
var Row = this.Content[Index];
Row.Set_Index( Index );
// Смотрим на ширину пропущенных колонок сетки в начале строки
var BeforeInfo = Row.Get_Before();
var CurGridCol = BeforeInfo.GridBefore;
var CellsCount = Row.Get_CellsCount();
for ( var CellIndex = 0; CellIndex < CellsCount; CellIndex++ )
{
var Cell = Row.Get_Cell( CellIndex );
var GridSpan = Cell.Get_GridSpan();
CurGridCol += GridSpan;
}
// Смотрим на ширину пропущенных колонок сетки в конце строки
var AfterInfo = Row.Get_After();
CurGridCol += AfterInfo.GridAfter;
if ( GridCount < CurGridCol )
GridCount = CurGridCol;
RowGrid[Index] = CurGridCol;
}
for ( var Index = 0; Index < this.Content.length; Index++ )
{
var Row = this.Content[Index];
var AfterInfo = Row.Get_After();
if ( RowGrid[Index] < GridCount )
{
Row.Set_After( AfterInfo.GridAfter + GridCount - RowGrid[Index], AfterInfo.WAfter );
}
}
if ( this.TableGrid.length != GridCount )
{
if (this.TableGrid.length < GridCount)
{
for (var Index = 0; Index < GridCount; Index++)
this.TableGrid[Index] = 20;
}
else
{
this.TableGrid.splice(GridCount, this.TableGrid.length - GridCount);
}
}
this.RecalcInfo.TableGridOpen = false;
};
CTable.prototype.private_RecalculateBorders = function() CTable.prototype.private_RecalculateBorders = function()
{ {
if ( true != this.RecalcInfo.TableBorders ) if ( true != this.RecalcInfo.TableBorders )
...@@ -3094,7 +3011,6 @@ CTablePage.prototype.Shift = function(Dx, Dy) ...@@ -3094,7 +3011,6 @@ CTablePage.prototype.Shift = function(Dx, Dy)
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
function CTableRecalcInfo() function CTableRecalcInfo()
{ {
this.TableGridOpen = true;
this.TableGrid = true; this.TableGrid = true;
this.TableBorders = true; this.TableBorders = true;
......
...@@ -553,6 +553,7 @@ ...@@ -553,6 +553,7 @@
return null; return null;
var oTable = new CTable(private_GetDrawingDocument(), private_GetLogicDocument(), true, 0, 0, 0, 0, 0, nRows, nCols, [], false); var oTable = new CTable(private_GetDrawingDocument(), private_GetLogicDocument(), true, 0, 0, 0, 0, 0, nRows, nCols, [], false);
oTable.CorrectBadGrid();
oTable.Set_TableStyle2(undefined); oTable.Set_TableStyle2(undefined);
return new ApiTable(oTable); return new ApiTable(oTable);
}; };
......
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