handle css::table::BorderLine in addition to css::table::BorderLine2
That means that table cell properties are correctly set on OpenXML import again, whoo!
This commit is contained in:
@@ -109,6 +109,7 @@ public:
|
|||||||
USHORT CalcLineSpace( USHORT nLine, BOOL bIgnoreLine = FALSE ) const;
|
USHORT CalcLineSpace( USHORT nLine, BOOL bIgnoreLine = FALSE ) const;
|
||||||
static com::sun::star::table::BorderLine2 SvxLineToLine( const SvxBorderLine* pLine, sal_Bool bConvert );
|
static com::sun::star::table::BorderLine2 SvxLineToLine( const SvxBorderLine* pLine, sal_Bool bConvert );
|
||||||
static sal_Bool LineToSvxLine(const ::com::sun::star::table::BorderLine& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert);
|
static sal_Bool LineToSvxLine(const ::com::sun::star::table::BorderLine& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert);
|
||||||
|
static sal_Bool LineToSvxLine(const ::com::sun::star::table::BorderLine2& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void SvxBoxItem::SetDistance( USHORT nNew )
|
inline void SvxBoxItem::SetDistance( USHORT nNew )
|
||||||
|
@@ -1934,41 +1934,97 @@ bool SvxBoxItem::QueryValue( uno::Any& rVal, BYTE nMemberId ) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
namespace
|
||||||
sal_Bool SvxBoxItem::LineToSvxLine(const ::com::sun::star::table::BorderLine& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert)
|
{
|
||||||
|
|
||||||
|
sal_Bool
|
||||||
|
lcl_lineToSvxLine(const table::BorderLine& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert)
|
||||||
{
|
{
|
||||||
rSvxLine.SetColor( Color(rLine.Color));
|
rSvxLine.SetColor( Color(rLine.Color));
|
||||||
rSvxLine.SetInWidth( sal_uInt16( bConvert ? MM100_TO_TWIP(rLine.InnerLineWidth) : rLine.InnerLineWidth ));
|
rSvxLine.SetInWidth( sal_uInt16( bConvert ? MM100_TO_TWIP(rLine.InnerLineWidth) : rLine.InnerLineWidth ));
|
||||||
rSvxLine.SetOutWidth( sal_uInt16( bConvert ? MM100_TO_TWIP(rLine.OuterLineWidth) : rLine.OuterLineWidth ));
|
rSvxLine.SetOutWidth( sal_uInt16( bConvert ? MM100_TO_TWIP(rLine.OuterLineWidth) : rLine.OuterLineWidth ));
|
||||||
rSvxLine.SetDistance( sal_uInt16( bConvert ? MM100_TO_TWIP(rLine.LineDistance ) : rLine.LineDistance ));
|
rSvxLine.SetDistance( sal_uInt16( bConvert ? MM100_TO_TWIP(rLine.LineDistance ) : rLine.LineDistance ));
|
||||||
|
|
||||||
const table::BorderLine2* pLine2 = static_cast< const table::BorderLine2* >( &rLine );
|
|
||||||
|
|
||||||
if ( pLine2 )
|
|
||||||
{
|
|
||||||
switch ( pLine2->LineStyle )
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
case table::BorderLineStyle::SOLID:
|
|
||||||
rSvxLine.SetStyle( SOLID );
|
|
||||||
break;
|
|
||||||
case table::BorderLineStyle::DOTTED:
|
|
||||||
rSvxLine.SetStyle( DOTTED );
|
|
||||||
break;
|
|
||||||
case table::BorderLineStyle::DASHED:
|
|
||||||
rSvxLine.SetStyle( DASHED );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sal_Bool bRet = rLine.InnerLineWidth > 0 || rLine.OuterLineWidth > 0;
|
sal_Bool bRet = rLine.InnerLineWidth > 0 || rLine.OuterLineWidth > 0;
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------
|
||||||
|
sal_Bool SvxBoxItem::LineToSvxLine(const ::com::sun::star::table::BorderLine& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert)
|
||||||
|
{
|
||||||
|
return lcl_lineToSvxLine(rLine, rSvxLine, bConvert);
|
||||||
|
}
|
||||||
|
|
||||||
|
sal_Bool
|
||||||
|
SvxBoxItem::LineToSvxLine(const ::com::sun::star::table::BorderLine2& rLine, SvxBorderLine& rSvxLine, sal_Bool bConvert)
|
||||||
|
{
|
||||||
|
const bool bRet(lcl_lineToSvxLine(rLine, rSvxLine, bConvert));
|
||||||
|
|
||||||
|
switch ( rLine.LineStyle )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case table::BorderLineStyle::SOLID:
|
||||||
|
rSvxLine.SetStyle( SOLID );
|
||||||
|
break;
|
||||||
|
case table::BorderLineStyle::DOTTED:
|
||||||
|
rSvxLine.SetStyle( DOTTED );
|
||||||
|
break;
|
||||||
|
case table::BorderLineStyle::DASHED:
|
||||||
|
rSvxLine.SetStyle( DASHED );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
bool
|
||||||
|
lcl_extractBorderLine(const uno::Any& rAny, table::BorderLine2& rLine)
|
||||||
|
{
|
||||||
|
if (rAny >>= rLine)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
table::BorderLine aBorderLine;
|
||||||
|
if (rAny >>= aBorderLine)
|
||||||
|
{
|
||||||
|
rLine.Color = aBorderLine.Color;
|
||||||
|
rLine.InnerLineWidth = aBorderLine.InnerLineWidth;
|
||||||
|
rLine.OuterLineWidth = aBorderLine.OuterLineWidth;
|
||||||
|
rLine.LineDistance = aBorderLine.LineDistance;
|
||||||
|
rLine.LineStyle = table::BorderLineStyle::SOLID;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Item>
|
||||||
|
bool
|
||||||
|
lcl_setLine(const uno::Any& rAny, Item& rItem, USHORT nLine, const bool bConvert)
|
||||||
|
{
|
||||||
|
bool bSet(false);
|
||||||
|
table::BorderLine2 aBorderLine;
|
||||||
|
if (lcl_extractBorderLine(rAny, aBorderLine))
|
||||||
|
{
|
||||||
|
SvxBorderLine aLine;
|
||||||
|
bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
||||||
|
if (bSet)
|
||||||
|
rItem.SetLine(&aLine, nLine);
|
||||||
|
}
|
||||||
|
return bSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool SvxBoxItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
|
bool SvxBoxItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
|
||||||
{
|
{
|
||||||
sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
|
bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
|
||||||
sal_uInt16 nLine = BOX_LINE_TOP;
|
sal_uInt16 nLine = BOX_LINE_TOP;
|
||||||
sal_Bool bDistMember = sal_False;
|
sal_Bool bDistMember = sal_False;
|
||||||
nMemberId &= ~CONVERT_TWIPS;
|
nMemberId &= ~CONVERT_TWIPS;
|
||||||
@@ -1980,44 +2036,18 @@ bool SvxBoxItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
|
|||||||
if (( rVal >>= aSeq ) && ( aSeq.getLength() == 9 ))
|
if (( rVal >>= aSeq ) && ( aSeq.getLength() == 9 ))
|
||||||
{
|
{
|
||||||
// 4 Borders and 5 distances
|
// 4 Borders and 5 distances
|
||||||
sal_Int32 nDist = 0;
|
const sal_uInt16 aBorders[] = { BOX_LINE_LEFT, BOX_LINE_RIGHT, BOX_LINE_BOTTOM, BOX_LINE_TOP };
|
||||||
SvxBorderLine aLine;
|
for (int n(0); n != SAL_N_ELEMENTS(aBorders); ++n)
|
||||||
table::BorderLine2 aBorderLine;
|
|
||||||
if ( aSeq[0] >>= aBorderLine )
|
|
||||||
{
|
{
|
||||||
sal_Bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
if (!lcl_setLine(aSeq[n], *this, aBorders[n], bConvert))
|
||||||
SetLine(bSet ? &aLine : 0, BOX_LINE_LEFT );
|
return sal_False;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return sal_False;
|
|
||||||
|
|
||||||
if ( aSeq[1] >>= aBorderLine )
|
|
||||||
{
|
|
||||||
sal_Bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
|
||||||
SetLine(bSet ? &aLine : 0, BOX_LINE_RIGHT );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return sal_False;
|
|
||||||
|
|
||||||
if ( aSeq[2] >>= aBorderLine )
|
|
||||||
{
|
|
||||||
sal_Bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
|
||||||
SetLine(bSet ? &aLine : 0, BOX_LINE_BOTTOM );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return sal_False;
|
|
||||||
|
|
||||||
if ( aSeq[3] >>= aBorderLine )
|
|
||||||
{
|
|
||||||
sal_Bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
|
||||||
SetLine(bSet ? &aLine : 0, BOX_LINE_TOP );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return sal_False;
|
|
||||||
|
|
||||||
|
// WTH are the borders and the distances saved in different order?
|
||||||
sal_uInt16 nLines[4] = { BOX_LINE_TOP, BOX_LINE_BOTTOM, BOX_LINE_LEFT, BOX_LINE_RIGHT };
|
sal_uInt16 nLines[4] = { BOX_LINE_TOP, BOX_LINE_BOTTOM, BOX_LINE_LEFT, BOX_LINE_RIGHT };
|
||||||
for ( sal_Int32 n = 4; n < 9; n++ )
|
for ( sal_Int32 n = 4; n < 9; n++ )
|
||||||
{
|
{
|
||||||
|
sal_Int32 nDist = 0;
|
||||||
if ( aSeq[n] >>= nDist )
|
if ( aSeq[n] >>= nDist )
|
||||||
{
|
{
|
||||||
if( bConvert )
|
if( bConvert )
|
||||||
@@ -2085,7 +2115,7 @@ bool SvxBoxItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
|
|||||||
return sal_False;
|
return sal_False;
|
||||||
|
|
||||||
table::BorderLine2 aBorderLine;
|
table::BorderLine2 aBorderLine;
|
||||||
if( rVal >>= aBorderLine )
|
if( lcl_extractBorderLine(rVal, aBorderLine) )
|
||||||
{
|
{
|
||||||
// usual struct
|
// usual struct
|
||||||
}
|
}
|
||||||
@@ -2897,26 +2927,13 @@ bool SvxBoxInfoItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
|
|||||||
if (( rVal >>= aSeq ) && ( aSeq.getLength() == 5 ))
|
if (( rVal >>= aSeq ) && ( aSeq.getLength() == 5 ))
|
||||||
{
|
{
|
||||||
// 2 BorderLines, flags, valid flags and distance
|
// 2 BorderLines, flags, valid flags and distance
|
||||||
table::BorderLine2 aBorderLine;
|
if (!lcl_setLine(aSeq[0], *this, BOXINFO_LINE_HORI, bConvert))
|
||||||
SvxBorderLine aLine;
|
return sal_False;
|
||||||
|
if (!lcl_setLine(aSeq[1], *this, BOXINFO_LINE_VERT, bConvert))
|
||||||
|
return sal_False;
|
||||||
|
|
||||||
sal_Int16 nFlags( 0 );
|
sal_Int16 nFlags( 0 );
|
||||||
sal_Int32 nVal( 0 );
|
sal_Int32 nVal( 0 );
|
||||||
if ( aSeq[0] >>= aBorderLine )
|
|
||||||
{
|
|
||||||
sal_Bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
|
||||||
if ( bSet )
|
|
||||||
SetLine( &aLine, BOXINFO_LINE_HORI );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return sal_False;
|
|
||||||
if ( aSeq[1] >>= aBorderLine )
|
|
||||||
{
|
|
||||||
sal_Bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
|
|
||||||
if ( bSet )
|
|
||||||
SetLine( &aLine, BOXINFO_LINE_VERT );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return sal_False;
|
|
||||||
if ( aSeq[2] >>= nFlags )
|
if ( aSeq[2] >>= nFlags )
|
||||||
{
|
{
|
||||||
SetTable ( ( nFlags & 0x01 ) != 0 );
|
SetTable ( ( nFlags & 0x01 ) != 0 );
|
||||||
@@ -2946,7 +2963,7 @@ bool SvxBoxInfoItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
|
|||||||
return sal_False;
|
return sal_False;
|
||||||
|
|
||||||
table::BorderLine2 aBorderLine;
|
table::BorderLine2 aBorderLine;
|
||||||
if( rVal >>= aBorderLine )
|
if( lcl_extractBorderLine(rVal, aBorderLine) )
|
||||||
{
|
{
|
||||||
// usual struct
|
// usual struct
|
||||||
}
|
}
|
||||||
@@ -3323,7 +3340,7 @@ bool SvxLineItem::PutValue( const uno::Any& rVal, BYTE nMemId )
|
|||||||
if ( nMemId == 0 )
|
if ( nMemId == 0 )
|
||||||
{
|
{
|
||||||
table::BorderLine2 aLine;
|
table::BorderLine2 aLine;
|
||||||
if ( rVal >>= aLine )
|
if ( lcl_extractBorderLine(rVal, aLine) )
|
||||||
{
|
{
|
||||||
if ( !pLine )
|
if ( !pLine )
|
||||||
pLine = new SvxBorderLine;
|
pLine = new SvxBorderLine;
|
||||||
|
Reference in New Issue
Block a user