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

ИСправлен баг с тем, что при добавлении картинки она сразу не выделялась (reop...

ИСправлен баг с тем, что при добавлении картинки она сразу не выделялась (reop баг 12695). Улучшен алгоритм рассчета ширины таблицы по содержимому.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48130 954022d7-b5bf-4e40-9824-e11837661b57
parent 8aa01499
...@@ -1305,6 +1305,7 @@ CDocument.prototype = ...@@ -1305,6 +1305,7 @@ CDocument.prototype =
Image.init( Img, W, H, Chart ); Image.init( Img, W, H, Chart );
this.Paragraph_Add( Drawing ); this.Paragraph_Add( Drawing );
this.Select_DrawingObject( Drawing.Get_Id() );
} }
else if ( type_Table == Item.GetType() ) else if ( type_Table == Item.GetType() )
{ {
......
...@@ -1548,6 +1548,7 @@ CDocumentContent.prototype = ...@@ -1548,6 +1548,7 @@ CDocumentContent.prototype =
Image.init( Img, W, H, Chart ); Image.init( Img, W, H, Chart );
this.Paragraph_Add( Drawing ); this.Paragraph_Add( Drawing );
this.Select_DrawingObject( Drawing.Get_Id() );
} }
else if ( type_Table == Item.GetType() ) else if ( type_Table == Item.GetType() )
{ {
......
...@@ -11701,9 +11701,62 @@ CTable.prototype = ...@@ -11701,9 +11701,62 @@ CTable.prototype =
{ {
var Row = this.Content[CurRow]; var Row = this.Content[CurRow];
var CurGridCol = 0;
// Смотрим на ширину пропущенных колонок сетки в начале строки // Смотрим на ширину пропущенных колонок сетки в начале строки
var BeforeInfo = Row.Get_Before(); var BeforeInfo = Row.Get_Before();
var CurGridCol = BeforeInfo.GridBefore; var GridBefore = BeforeInfo.GridBefore;
var WBefore = BeforeInfo.WBefore;
if ( 1 === GridBefore )
{
if ( WBefore.Type === tblwidth_Mm )
{
if ( MinContent[CurGridCol] < WBefore.W )
MinContent[CurGridCol] = WBefore.W;
if ( false === MaxFlags[CurGridCol] )
{
MaxFlags[CurGridCol] = true;
MaxContent[CurGridCol] = WBefore.W;
}
else if ( MaxContent[CurGridCol] < WBefore.W )
MaxContent[CurGridCol] = WBefore.W;
}
}
else if ( GridBefore > 1 )
{
var SumSpanMinContent = 0;
var SumSpanMaxContent = 0;
var SumSpanCurContent = 0;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridBefore; CurSpan++ )
{
SumSpanMinContent += MinContent[CurSpan];
SumSpanMaxContent += MaxContent[CurSpan];
SumSpanCurContent += this.TableGrid[CurSpan];
}
if ( SumSpanMinContent < WBefore.W )
{
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MinContent[CurSpan] = WBefore.W * this.TableGrid[CurSpan] / SumSpanCurContent;
}
// Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не
// перекрывает ширину ни одной из колонок, она всего лишь учавствует в определении
// максимальной ширины.
if ( WBefore.Type === tblwidth_Mm && WBefore.W > SumSpanMaxContent )
{
// TODO: На самом деле, распределение здесь идет в каком-то отношении.
// Неплохо было бы выяснить как именно.
var TempAdd = (WBefore.W - SumSpanMaxContent) / GridBefore;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridBefore; CurSpan++ )
MaxContent[CurSpan] = WBefore.W * this.TableGrid[CurSpan] / SumSpanCurContent;
}
}
CurGridCol = BeforeInfo.GridBefore;
var CellsCount = Row.Get_CellsCount(); var CellsCount = Row.Get_CellsCount();
for ( var CurCell = 0; CurCell < CellsCount; CurCell++ ) for ( var CurCell = 0; CurCell < CellsCount; CurCell++ )
...@@ -11746,17 +11799,18 @@ CTable.prototype = ...@@ -11746,17 +11799,18 @@ CTable.prototype =
{ {
var SumSpanMinContent = 0; var SumSpanMinContent = 0;
var SumSpanMaxContent = 0; var SumSpanMaxContent = 0;
var SumSpanCurContent = 0;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
{ {
SumSpanMinContent += MinContent[CurSpan]; SumSpanMinContent += MinContent[CurSpan];
SumSpanMaxContent += MaxContent[CurSpan]; SumSpanMaxContent += MaxContent[CurSpan];
SumSpanCurContent += this.TableGrid[CurSpan];
} }
if ( SumSpanMinContent < CellMin ) if ( SumSpanMinContent < CellMin )
{ {
var TempAdd = (CellMin - SumSpanMinContent) / GridSpan;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MinContent[CurSpan] += TempAdd; MinContent[CurSpan] = CellMin * this.TableGrid[CurSpan] / SumSpanCurContent;
} }
// Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не // Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не
...@@ -11771,7 +11825,7 @@ CTable.prototype = ...@@ -11771,7 +11825,7 @@ CTable.prototype =
// Неплохо было бы выяснить как именно. // Неплохо было бы выяснить как именно.
var TempAdd = (CellMax - SumSpanMaxContent) / GridSpan; var TempAdd = (CellMax - SumSpanMaxContent) / GridSpan;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ ) for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MaxContent[CurSpan] += TempAdd; MaxContent[CurSpan] = CellMax * this.TableGrid[CurSpan] / SumSpanCurContent;
} }
} }
...@@ -11783,6 +11837,57 @@ CTable.prototype = ...@@ -11783,6 +11837,57 @@ CTable.prototype =
CurGridCol += GridSpan; CurGridCol += GridSpan;
} }
var AfterInfo = Row.Get_After();
var GridAfter = AfterInfo.GridAfter;
var WAfter = AfterInfo.WAfter;
if ( 1 === GridAfter )
{
if ( WAfter.Type === tblwidth_Mm )
{
if ( MinContent[CurGridCol] < WAfter.W )
MinContent[CurGridCol] = WAfter.W;
if ( false === MaxFlags[CurGridCol] )
{
MaxFlags[CurGridCol] = true;
MaxContent[CurGridCol] = WAfter.W;
}
else if ( MaxContent[CurGridCol] < WAfter.W )
MaxContent[CurGridCol] = WAfter.W;
}
}
else if ( GridAfter > 1 )
{
var SumSpanMinContent = 0;
var SumSpanMaxContent = 0;
var SumSpanCurContent = 0;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridAfter; CurSpan++ )
{
SumSpanMinContent += MinContent[CurSpan];
SumSpanMaxContent += MaxContent[CurSpan];
SumSpanCurContent += this.TableGrid[CurSpan];
}
if ( SumSpanMinContent < WAfter.W )
{
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++ )
MinContent[CurSpan] = WAfter.W * this.TableGrid[CurSpan] / SumSpanCurContent;
}
// Если у нас в объединении несколько колонок, тогда явно записанная ширина ячейки не
// перекрывает ширину ни одной из колонок, она всего лишь учавствует в определении
// максимальной ширины.
if ( WAfter.Type === tblwidth_Mm && WAfter.W > SumSpanMaxContent )
{
// TODO: На самом деле, распределение здесь идет в каком-то отношении.
// Неплохо было бы выяснить как именно.
var TempAdd = (WAfter.W - SumSpanMaxContent) / GridAfter;
for ( var CurSpan = CurGridCol; CurSpan < CurGridCol + GridAfter; CurSpan++ )
MaxContent[CurSpan] = WAfter.W * this.TableGrid[CurSpan] / SumSpanCurContent;
}
}
} }
for ( var CurCol = 0; CurCol < GridCount; CurCol++ ) for ( var CurCol = 0; CurCol < GridCount; CurCol++ )
...@@ -11819,6 +11924,7 @@ CTable.prototype = ...@@ -11819,6 +11924,7 @@ CTable.prototype =
for ( var CurCol = 0; CurCol < GridCount; CurCol++ ) for ( var CurCol = 0; CurCol < GridCount; CurCol++ )
{ {
var Temp = MinMargin[CurCol] + MinContent[CurCol]; var Temp = MinMargin[CurCol] + MinContent[CurCol];
TableGrid2[CurCol] = this.TableGridCalc[CurCol];
if ( Temp < this.TableGridCalc[CurCol] ) if ( Temp < this.TableGridCalc[CurCol] )
{ {
TableGrid2[CurCol] = this.TableGridCalc[CurCol]; TableGrid2[CurCol] = this.TableGridCalc[CurCol];
......
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