summaryrefslogtreecommitdiff
path: root/sw/source/filter/html/htmltab.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/html/htmltab.cxx')
-rw-r--r--sw/source/filter/html/htmltab.cxx30
1 files changed, 26 insertions, 4 deletions
diff --git a/sw/source/filter/html/htmltab.cxx b/sw/source/filter/html/htmltab.cxx
index 06aa3bfd2957..c6a3c0914c35 100644
--- a/sw/source/filter/html/htmltab.cxx
+++ b/sw/source/filter/html/htmltab.cxx
@@ -220,6 +220,7 @@ class HTMLTableCell
HTMLTableCnts *pContents; // cell content
SvxBrushItem *pBGBrush; // cell background
// !!!ATTENTION!!!!!
+ ::boost::shared_ptr<SvxBoxItem> m_pBoxItem;
sal_uInt32 nNumFmt;
sal_uInt16 nRowSpan; // cell ROWSPAN
@@ -243,6 +244,7 @@ public:
// Fill a not empty cell
void Set( HTMLTableCnts *pCnts, sal_uInt16 nRSpan, sal_uInt16 nCSpan,
sal_Int16 eVertOri, SvxBrushItem *pBGBrush,
+ ::boost::shared_ptr<SvxBoxItem> const pBoxItem,
sal_Bool bHasNumFmt, sal_uInt32 nNumFmt,
sal_Bool bHasValue, double nValue, sal_Bool bNoWrap, sal_Bool bCovered );
@@ -264,6 +266,7 @@ public:
inline void SetWidth( sal_uInt16 nWidth, sal_Bool bRelWidth );
const SvxBrushItem *GetBGBrush() const { return pBGBrush; }
+ ::boost::shared_ptr<SvxBoxItem> GetBoxItem() const { return m_pBoxItem; }
inline sal_Bool GetNumFmt( sal_uInt32& rNumFmt ) const;
inline sal_Bool GetValue( double& rValue ) const;
@@ -592,6 +595,7 @@ public:
void InsertCell( HTMLTableCnts *pCnts, sal_uInt16 nRowSpan, sal_uInt16 nColSpan,
sal_uInt16 nWidth, sal_Bool bRelWidth, sal_uInt16 nHeight,
sal_Int16 eVertOri, SvxBrushItem *pBGBrush,
+ boost::shared_ptr<SvxBoxItem> const pBoxItem,
sal_Bool bHasNumFmt, sal_uInt32 nNumFmt,
sal_Bool bHasValue, double nValue, sal_Bool bNoWrap );
@@ -756,6 +760,7 @@ HTMLTableCell::~HTMLTableCell()
void HTMLTableCell::Set( HTMLTableCnts *pCnts, sal_uInt16 nRSpan, sal_uInt16 nCSpan,
sal_Int16 eVert, SvxBrushItem *pBrush,
+ ::boost::shared_ptr<SvxBoxItem> const pBoxItem,
sal_Bool bHasNF, sal_uInt32 nNF, sal_Bool bHasV, double nVal,
sal_Bool bNWrap, sal_Bool bCovered )
{
@@ -765,6 +770,7 @@ void HTMLTableCell::Set( HTMLTableCnts *pCnts, sal_uInt16 nRSpan, sal_uInt16 nCS
bProtected = sal_False;
eVertOri = eVert;
pBGBrush = pBrush;
+ m_pBoxItem = pBoxItem;
bHasNumFmt = bHasNF;
bHasValue = bHasV;
@@ -1388,6 +1394,7 @@ void HTMLTable::FixFrameFmt( SwTableBox *pBox,
SwFrmFmt *pFrmFmt = 0; // frame::Frame-Format
sal_Int16 eVOri = text::VertOrientation::NONE;
const SvxBrushItem *pBGBrushItem = 0; // Hintergrund
+ boost::shared_ptr<SvxBoxItem> pBoxItem;
sal_Bool bTopLine = sal_False, bBottomLine = sal_False, bLastBottomLine = sal_False;
sal_Bool bReUsable = sal_False; // Format nochmals verwendbar?
sal_uInt16 nEmptyRows = 0;
@@ -1402,6 +1409,7 @@ void HTMLTable::FixFrameFmt( SwTableBox *pBox,
{
// die Hintergrundfarbe/-grafik bestimmen
const HTMLTableCell *pCell = GetCell( nRow, nCol );
+ pBoxItem = pCell->GetBoxItem();
pBGBrushItem = pCell->GetBGBrush();
if( !pBGBrushItem )
{
@@ -1444,7 +1452,7 @@ void HTMLTable::FixFrameFmt( SwTableBox *pBox,
bHasValue = pCell->GetValue( nValue );
if( nColSpan==1 && !bTopLine && !bLastBottomLine && !nEmptyRows &&
- !pBGBrushItem && !bHasNumFmt )
+ !pBGBrushItem && !bHasNumFmt && !pBoxItem)
{
pFrmFmt = pColumn->GetFrmFmt( bBottomLine, eVOri );
bReUsable = !pFrmFmt;
@@ -1518,7 +1526,11 @@ void HTMLTable::FixFrameFmt( SwTableBox *pBox,
bSet = sal_True;
}
- if( bSet )
+ if (pBoxItem)
+ {
+ pFrmFmt->SetFmtAttr( *pBoxItem );
+ }
+ else if (bSet)
{
// BorderDist nicht mehr Bestandteil einer Zelle mit fixer Breite
sal_uInt16 nBDist = static_cast< sal_uInt16 >(
@@ -2124,6 +2136,7 @@ void HTMLTable::InsertCell( HTMLTableCnts *pCnts,
sal_uInt16 nRowSpan, sal_uInt16 nColSpan,
sal_uInt16 nCellWidth, sal_Bool bRelWidth, sal_uInt16 nCellHeight,
sal_Int16 eVertOrient, SvxBrushItem *pBGBrushItem,
+ boost::shared_ptr<SvxBoxItem> const pBoxItem,
sal_Bool bHasNumFmt, sal_uInt32 nNumFmt,
sal_Bool bHasValue, double nValue, sal_Bool bNoWrap )
{
@@ -2202,7 +2215,7 @@ void HTMLTable::InsertCell( HTMLTableCnts *pCnts,
{
const bool bCovered = i != nColSpan || j != nRowSpan;
GetCell( nRowsReq-j, nColsReq-i )
- ->Set( pCnts, j, i, eVertOrient, pBGBrushItem,
+ ->Set( pCnts, j, i, eVertOrient, pBGBrushItem, pBoxItem,
bHasNumFmt, nNumFmt, bHasValue, nValue, bNoWrap, bCovered );
}
}
@@ -3135,6 +3148,7 @@ class _CellSaveStruct : public _SectionSaveStruct
String aStyle, aId, aClass, aLang, aDir;
String aBGImage;
Color aBGColor;
+ boost::shared_ptr<SvxBoxItem> m_pBoxItem;
HTMLTableCnts* pCnts; // Liste aller Inhalte
HTMLTableCnts* pCurrCnts; // der aktuelle Inhalt oder 0
@@ -3320,7 +3334,15 @@ _CellSaveStruct::_CellSaveStruct( SwHTMLParser& rParser, HTMLTable *pCurTable,
if( rParser.ParseStyleOptions( aStyle, aId, aClass, aItemSet,
aPropInfo, &aLang, &aDir ) )
+ {
+ SfxPoolItem const* pItem;
+ if (SFX_ITEM_SET == aItemSet.GetItemState(RES_BOX, false, &pItem))
+ { // fdo#41796: steal box item to set it in FixFrameFmt later!
+ m_pBoxItem.reset(dynamic_cast<SvxBoxItem *>(pItem->Clone()));
+ aItemSet.ClearItem(RES_BOX);
+ }
rParser.InsertAttrs( aItemSet, aPropInfo, pCntxt );
+ }
}
rParser.SplitPREListingXMP( pCntxt );
@@ -3379,7 +3401,7 @@ void _CellSaveStruct::InsertCell( SwHTMLParser& rParser,
rParser.CreateBrushItem( bBGColor ? &aBGColor : 0, aBGImage,
aStyle, aId, aClass );
pCurTable->InsertCell( pCnts, nRowSpan, nColSpan, nWidth,
- bPrcWidth, nHeight, eVertOri, pBrushItem,
+ bPrcWidth, nHeight, eVertOri, pBrushItem, m_pBoxItem,
bHasNumFmt, nNumFmt, bHasValue, nValue,
bNoWrap );
Restore( rParser );