summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/BorderHandler.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source/dmapper/BorderHandler.cxx')
-rw-r--r--writerfilter/source/dmapper/BorderHandler.cxx66
1 files changed, 64 insertions, 2 deletions
diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx
index a5d8560f70f0..c010c13b5c37 100644
--- a/writerfilter/source/dmapper/BorderHandler.cxx
+++ b/writerfilter/source/dmapper/BorderHandler.cxx
@@ -17,6 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <BorderHandler.hxx>
+#include <TDefTableHandler.hxx>
#include <PropertyMap.hxx>
#include <resourcemodel/QNameToString.hxx>
#include <doctok/resourceids.hxx>
@@ -24,6 +25,7 @@
#include <com/sun/star/table/BorderLine2.hpp>
#include <ooxml/resourceids.hxx>
#include <dmapperLoggers.hxx>
+#include <filter/msfilter/util.hxx>
namespace writerfilter {
@@ -72,16 +74,20 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal)
case NS_rtf::LN_DPTLINEWIDTH: // 0x2871
// width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
m_nLineWidth = nIntValue * 5 / 2;
+ appendGrabBag("sz", OUString::number(nIntValue));
break;
case NS_rtf::LN_BRCTYPE: // 0x2872
m_nLineType = nIntValue;
+ appendGrabBag("val", TDefTableHandler::getBorderTypeString(nIntValue));
break;
case NS_ooxml::LN_CT_Border_color:
case NS_rtf::LN_ICO: // 0x2873
m_nLineColor = nIntValue;
+ appendGrabBag("color", OStringToOUString(msfilter::util::ConvertColor(nIntValue), RTL_TEXTENCODING_UTF8));
break;
case NS_rtf::LN_DPTSPACE: // border distance in points
m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 );
+ appendGrabBag("space", OUString::number(nIntValue));
break;
case NS_rtf::LN_FSHADOW: // 0x2875
m_bShadow = nIntValue;
@@ -90,8 +96,12 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal)
case NS_rtf::LN_UNUSED2_15: // 0x2877
// ignored
break;
- case NS_ooxml::LN_CT_Border_themeTint: break;
- case NS_ooxml::LN_CT_Border_themeColor: break;
+ case NS_ooxml::LN_CT_Border_themeTint:
+ appendGrabBag("themeTint", OUString::number(nIntValue, 16));
+ break;
+ case NS_ooxml::LN_CT_Border_themeColor:
+ appendGrabBag("themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
+ break;
default:
OSL_FAIL( "unknown attribute");
}
@@ -101,31 +111,40 @@ void BorderHandler::lcl_sprm(Sprm & rSprm)
{
BorderPosition pos = BORDER_COUNT; // invalid pos
bool rtl = false; // TODO detect
+ OUString aBorderPos;
switch( rSprm.getId())
{
case NS_ooxml::LN_CT_TblBorders_top:
pos = BORDER_TOP;
+ aBorderPos = "top";
break;
case NS_ooxml::LN_CT_TblBorders_start:
pos = rtl ? BORDER_RIGHT : BORDER_LEFT;
+ aBorderPos = "start";
break;
case NS_ooxml::LN_CT_TblBorders_left:
pos = BORDER_LEFT;
+ aBorderPos = "left";
break;
case NS_ooxml::LN_CT_TblBorders_bottom:
pos = BORDER_BOTTOM;
+ aBorderPos = "bottom";
break;
case NS_ooxml::LN_CT_TblBorders_end:
pos = rtl ? BORDER_LEFT : BORDER_RIGHT;
+ aBorderPos = "end";
break;
case NS_ooxml::LN_CT_TblBorders_right:
pos = BORDER_RIGHT;
+ aBorderPos = "right";
break;
case NS_ooxml::LN_CT_TblBorders_insideH:
pos = BORDER_HORIZONTAL;
+ aBorderPos = "insideH";
break;
case NS_ooxml::LN_CT_TblBorders_insideV:
pos = BORDER_VERTICAL;
+ aBorderPos = "insideV";
break;
default:
break;
@@ -134,7 +153,20 @@ void BorderHandler::lcl_sprm(Sprm & rSprm)
{
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
if( pProperties.get())
+ {
+ std::vector<beans::PropertyValue> aSavedGrabBag;
+ if (!m_aInteropGrabBagName.isEmpty())
+ {
+ aSavedGrabBag = m_aInteropGrabBag;
+ m_aInteropGrabBag.clear();
+ }
pProperties->resolve(*this);
+ if (!m_aInteropGrabBagName.isEmpty())
+ {
+ aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos));
+ m_aInteropGrabBag = aSavedGrabBag;
+ }
+ }
ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
m_aBorderLines[ pos ], m_bOOXML );
m_aFilledLines[ pos ] = true;
@@ -180,6 +212,36 @@ bool BorderHandler::getShadow()
return m_bShadow;
}
+void BorderHandler::enableInteropGrabBag(OUString aName)
+{
+ m_aInteropGrabBagName = aName;
+}
+
+beans::PropertyValue BorderHandler::getInteropGrabBag(OUString aName)
+{
+ beans::PropertyValue aRet;
+ if (aName.isEmpty())
+ aRet.Name = m_aInteropGrabBagName;
+ else
+ aRet.Name = aName;
+
+ uno::Sequence<beans::PropertyValue> aSeq(m_aInteropGrabBag.size());
+ beans::PropertyValue* pSeq = aSeq.getArray();
+ for (std::vector<beans::PropertyValue>::iterator i = m_aInteropGrabBag.begin(); i != m_aInteropGrabBag.end(); ++i)
+ *pSeq++ = *i;
+
+ aRet.Value = uno::makeAny(aSeq);
+ return aRet;
+}
+
+void BorderHandler::appendGrabBag(OUString aKey, OUString aValue)
+{
+ beans::PropertyValue aProperty;
+ aProperty.Name = aKey;
+ aProperty.Value = uno::makeAny(aValue);
+ m_aInteropGrabBag.push_back(aProperty);
+}
+
} //namespace dmapper
} //namespace writerfilter