Commit 1fa15bbc authored by Ilya Kirillov's avatar Ilya Kirillov

Bug #32093 Доработан алогритм автоподбора в таблицах, в случае, когда задана ширина таблицы.

parent 91465430
...@@ -634,6 +634,7 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -634,6 +634,7 @@ CTable.prototype.private_RecalculateGrid = function()
MaxTableW += 2 * TableSpacing; MaxTableW += 2 * TableSpacing;
// 4. Рассчитаем желаемую ширину таблицы таблицы // 4. Рассчитаем желаемую ширину таблицы таблицы
// Цифра 2 означает добавочная разница
var MaxContent2 = []; var MaxContent2 = [];
var SumMin = 0, SumMinMargin = 0, SumMinContent = 0, SumMax = 0, SumMaxContent2 = 0; var SumMin = 0, SumMinMargin = 0, SumMinContent = 0, SumMax = 0, SumMaxContent2 = 0;
var TableGrid2 = []; var TableGrid2 = [];
...@@ -665,9 +666,30 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -665,9 +666,30 @@ CTable.prototype.private_RecalculateGrid = function()
if ( SumMin < MaxTableW ) if ( SumMin < MaxTableW )
{ {
// SumMin < MaxTableW, значит у нас есть свободное пространство для распределения // SumMin < MaxTableW, значит у нас есть свободное пространство для распределения
// Если SumMax < MaxTableW, тогда все колонки делаем по ширине MaxContent[CurCol] + MinMargin[CurCol], // У нас есть три типа ширины: Min < Preffered < Max
// в противном случаем значение (MaxTableW - SumMin) распределяем между колонками в отношении
// MaxContent[CurCol] / SumMaxContent var SumMin = 0, SumPreffered = 0, SumMax = 0;
var PreffOverMin = [], MaxOverPreff = [];
var SumPreffOverMin = 0, SumMaxOverPreff = 0;
var PreffContent = [];
for (var CurCol = 0; CurCol < GridCount; ++CurCol)
{
var MinW = MinMargin[CurCol] + MinContent[CurCol];
var MaxW = MinMargin[CurCol] + MaxContent[CurCol];
var PreffW = (true === MaxFlags[CurCol] ? MaxW : MinW);
SumMin += MinW;
SumPreffered += PreffW;
SumMax += MaxW;
PreffContent[CurCol] = PreffW - MinMargin[CurCol];
PreffOverMin[CurCol] = Math.max(0, PreffW - MinW);
MaxOverPreff[CurCol] = Math.max(0, MaxW - PreffW);
SumPreffOverMin += PreffOverMin[CurCol];
SumMaxOverPreff += MaxOverPreff[CurCol];
}
if ( SumMax <= MaxTableW || SumMaxContent2 < 0.001 ) if ( SumMax <= MaxTableW || SumMaxContent2 < 0.001 )
{ {
...@@ -688,28 +710,50 @@ CTable.prototype.private_RecalculateGrid = function() ...@@ -688,28 +710,50 @@ CTable.prototype.private_RecalculateGrid = function()
// максимальным значениям. // максимальным значениям.
if (tblwidth_Mm === TablePr.TableW.Type || tblwidth_Pct === TablePr.TableW.Type) if (tblwidth_Mm === TablePr.TableW.Type || tblwidth_Pct === TablePr.TableW.Type)
{ {
if (SumMin < TableW) if (SumMin >= TableW)
{ {
if (SumMax < TableW) // Выставляем минимальные значения
for (var CurCol = 0; CurCol < GridCount; ++CurCol)
{ {
for ( var CurCol = 0; CurCol < GridCount; CurCol++ ) this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol];
{
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MaxContent[CurCol] + (TableW - SumMax) * (MinMargin[CurCol] + MaxContent[CurCol]) / SumMax;
}
} }
else }
else if (SumPreffered >= TableW && SumPreffOverMin > 0.001)
{
// Растягиваем только те колонки, в которых заданы предпочитаемые ширины
for (var CurCol = 0; CurCol < GridCount; ++CurCol)
{ {
for ( var CurCol = 0; CurCol < GridCount; CurCol++ ) this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol] + (TableW - SumMin) * PreffOverMin[CurCol] / SumPreffOverMin;
{
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol] + (TableW - SumMin) * MaxContent2[CurCol] / SumMaxContent2;
}
} }
} }
else else
{ {
for ( var CurCol = 0; CurCol < GridCount; CurCol++ ) // Если данное условие выполняется, значит у нас все ячейки с предпочитаемыми значениями, тогда
// мы растягиваем все ячейки равномерно. Если не выполняется, значит есть ячейки, в которых
// предпочитаемое значение не задано, и тогда растягиваем только такие ячейки.
if (Math.abs(SumMax - SumPreffered) < 0.001)
{ {
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol]; if (SumMax >= TableW)
{
for (var CurCol = 0; CurCol < GridCount; ++CurCol)
{
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol] + (TableW - SumMin) * MaxContent2[CurCol] / SumMaxContent2;
}
}
else
{
for (var CurCol = 0; CurCol < GridCount; CurCol++)
{
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MaxContent[CurCol] + (TableW - SumMax) * (MinMargin[CurCol] + MaxContent[CurCol]) / SumMax;
}
}
}
else
{
for (var CurCol = 0; CurCol < GridCount; ++CurCol)
{
this.TableGridCalc[CurCol] = MinMargin[CurCol] + PreffContent[CurCol] + (TableW - SumPreffered) * MaxOverPreff[CurCol] / SumMaxOverPreff;
}
} }
} }
} }
......
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