summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadek Doulik <rodo@novell.com>2013-01-31 12:05:50 +0100
committerRadek Doulik <rodo@novell.com>2013-01-31 12:08:54 +0100
commitdc173b7f2a550185404aacbc6da744cb6d1880fc (patch)
treecf97638cc352b3223b256b185a6e41001c4c6a55
parenteb96e4325278f31b9e6fbc1d5c6a01543204ded6 (diff)
export subpath sizes (these are for example in pptx custom shape presets)
Change-Id: Iab21d0845d0cb6e4dadeffb5f7b9ebab1e4b955a
-rw-r--r--xmloff/inc/EnhancedCustomShapeToken.hxx2
-rw-r--r--xmloff/inc/xmloff/xmltoken.hxx1
-rw-r--r--xmloff/source/core/xmltoken.cxx1
-rw-r--r--xmloff/source/draw/EnhancedCustomShapeToken.cxx2
-rw-r--r--xmloff/source/draw/shapeexport4.cxx18
-rw-r--r--xmloff/source/draw/ximpcustomshape.cxx40
6 files changed, 64 insertions, 0 deletions
diff --git a/xmloff/inc/EnhancedCustomShapeToken.hxx b/xmloff/inc/EnhancedCustomShapeToken.hxx
index 39a5faf355fe..42d95abca597 100644
--- a/xmloff/inc/EnhancedCustomShapeToken.hxx
+++ b/xmloff/inc/EnhancedCustomShapeToken.hxx
@@ -84,6 +84,7 @@ namespace xmloff { namespace EnhancedCustomShapeToken {
EAS_handle_polar,
EAS_handle_radius_range_minimum,
EAS_handle_radius_range_maximum,
+ EAS_sub_view_size,
EAS_CustomShapeEngine,
EAS_CustomShapeData,
@@ -145,6 +146,7 @@ namespace xmloff { namespace EnhancedCustomShapeToken {
EAS_SameLetterHeights,
EAS_Position,
EAS_AdjustmentValues,
+ EAS_SubViewSize,
EAS_Last,
EAS_NotFound
diff --git a/xmloff/inc/xmloff/xmltoken.hxx b/xmloff/inc/xmloff/xmltoken.hxx
index 238d0c36b3d5..c4dff1c69ae8 100644
--- a/xmloff/inc/xmloff/xmltoken.hxx
+++ b/xmloff/inc/xmloff/xmltoken.hxx
@@ -1740,6 +1740,7 @@ namespace xmloff { namespace token {
XML_SUBTOTAL_FIELD,
XML_SUBTOTAL_RULE,
XML_SUBTOTAL_RULES,
+ XML_SUB_VIEW_SIZE,
XML_SUFFIX,
XML_SUM,
XML_SVGLINEARGRADIENT,
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 6a28cfce16ef..4011f4963c2e 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -1745,6 +1745,7 @@ namespace xmloff { namespace token {
TOKEN( "subtotal-field", XML_SUBTOTAL_FIELD ),
TOKEN( "subtotal-rule", XML_SUBTOTAL_RULE ),
TOKEN( "subtotal-rules", XML_SUBTOTAL_RULES ),
+ TOKEN( "sub-view-size", XML_SUB_VIEW_SIZE ),
TOKEN( "suffix", XML_SUFFIX ),
TOKEN( "sum", XML_SUM ),
TOKEN( "linearGradient", XML_SVGLINEARGRADIENT ),
diff --git a/xmloff/source/draw/EnhancedCustomShapeToken.cxx b/xmloff/source/draw/EnhancedCustomShapeToken.cxx
index 1e12ee2fe697..ba70abd924c5 100644
--- a/xmloff/source/draw/EnhancedCustomShapeToken.cxx
+++ b/xmloff/source/draw/EnhancedCustomShapeToken.cxx
@@ -112,6 +112,7 @@ static const TokenTable pTokenTableArray[] =
{ "handle-polar", EAS_handle_polar },
{ "handle-radius-range-minimum", EAS_handle_radius_range_minimum },
{ "handle-radius-range-maximum", EAS_handle_radius_range_maximum },
+ { "sub-view-size", EAS_sub_view_size },
{ "CustomShapeEngine", EAS_CustomShapeEngine },
{ "CustomShapeData", EAS_CustomShapeData },
@@ -173,6 +174,7 @@ static const TokenTable pTokenTableArray[] =
{ "SameLetterHeights", EAS_SameLetterHeights },
{ "Position", EAS_Position },
{ "AdjustmentValues", EAS_AdjustmentValues },
+ { "SubViewSize", EAS_SubViewSize },
{ "Last", EAS_Last },
{ "NotFound", EAS_NotFound }
diff --git a/xmloff/source/draw/shapeexport4.cxx b/xmloff/source/draw/shapeexport4.cxx
index d47b6bbd1a86..1bb54812714d 100644
--- a/xmloff/source/draw/shapeexport4.cxx
+++ b/xmloff/source/draw/shapeexport4.cxx
@@ -908,8 +908,26 @@ void ImpExportEnhancedGeometry( SvXMLExport& rExport, const uno::Reference< bean
for ( i = 0; i < nCount; i++ )
{
const beans::PropertyValue& rProp = aPathPropSeq[ i ];
+
switch( EASGet( rProp.Name ) )
{
+ case EAS_SubViewSize:
+ {
+ uno::Sequence< awt::Size > aSubViewSizes;
+ rProp.Value >>= aSubViewSizes;
+
+ for ( int nIdx = 0; nIdx < aSubViewSizes.getLength(); nIdx++ )
+ {
+ if ( nIdx )
+ aStrBuffer.append(' ');
+ ::sax::Converter::convertNumber( aStrBuffer, aSubViewSizes[nIdx].Width );
+ aStrBuffer.append(' ');
+ ::sax::Converter::convertNumber( aStrBuffer, aSubViewSizes[nIdx].Height );
+ }
+ aStr = aStrBuffer.makeStringAndClear();
+ rExport.AddAttribute( XML_NAMESPACE_DRAW_EXT, XML_SUB_VIEW_SIZE, aStr );
+ }
+ break;
case EAS_ExtrusionAllowed :
{
sal_Bool bExtrusionAllowed = sal_Bool();
diff --git a/xmloff/source/draw/ximpcustomshape.cxx b/xmloff/source/draw/ximpcustomshape.cxx
index 3b145ca526fc..a3406ed9ea9c 100644
--- a/xmloff/source/draw/ximpcustomshape.cxx
+++ b/xmloff/source/draw/ximpcustomshape.cxx
@@ -472,6 +472,43 @@ void GetDoubleSequence( std::vector< com::sun::star::beans::PropertyValue >& rDe
}
}
+void GetSizeSequence( std::vector< com::sun::star::beans::PropertyValue >& rDest,
+ const rtl::OUString& rValue, const EnhancedCustomShapeTokenEnum eDestProp )
+{
+ std::vector< sal_Int32 > vNum;
+ sal_Int32 nIndex = 0;
+ do
+ {
+ sal_Int32 n;
+ rtl::OUString aToken( rValue.getToken( 0, ' ', nIndex ) );
+ if (!::sax::Converter::convertNumber( n, aToken ))
+ break;
+ else
+ vNum.push_back( n );
+ }
+ while ( nIndex >= 0 );
+
+ if ( !vNum.empty() )
+ {
+ uno::Sequence< awt::Size > aSizeSeq( vNum.size() / 2 );
+ std::vector< sal_Int32 >::const_iterator aIter = vNum.begin();
+ std::vector< sal_Int32 >::const_iterator aEnd = vNum.end();
+ awt::Size* pValues = aSizeSeq.getArray();
+
+ while ( aIter != aEnd ) {
+ pValues->Width = *aIter++;
+ if ( aIter != aEnd )
+ pValues->Height = *aIter++;
+ pValues ++;
+ }
+
+ beans::PropertyValue aProp;
+ aProp.Name = EASGet( eDestProp );
+ aProp.Value <<= aSizeSeq;
+ rDest.push_back( aProp );
+ }
+}
+
void GetEnhancedParameter( std::vector< com::sun::star::beans::PropertyValue >& rDest, // e.g. draw:handle-position
const rtl::OUString& rValue, const EnhancedCustomShapeTokenEnum eDestProp )
{
@@ -860,6 +897,9 @@ void XMLEnhancedCustomShapeContext::StartElement( const uno::Reference< xml::sax
mrCustomShapeGeometry.push_back( aProp );
}
break;
+ case EAS_sub_view_size:
+ GetSizeSequence( maPath, rValue, EAS_SubViewSize );
+ break;
case EAS_text_rotate_angle :
GetDouble( mrCustomShapeGeometry, rValue, EAS_TextRotateAngle );
break;