summaryrefslogtreecommitdiff
path: root/oox/source/drawingml/diagram/datamodelcontext.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source/drawingml/diagram/datamodelcontext.cxx')
-rw-r--r--oox/source/drawingml/diagram/datamodelcontext.cxx237
1 files changed, 171 insertions, 66 deletions
diff --git a/oox/source/drawingml/diagram/datamodelcontext.cxx b/oox/source/drawingml/diagram/datamodelcontext.cxx
index 230edf59ea67..63065a85b701 100644
--- a/oox/source/drawingml/diagram/datamodelcontext.cxx
+++ b/oox/source/drawingml/diagram/datamodelcontext.cxx
@@ -26,7 +26,7 @@
*
************************************************************************/
-#include "oox/drawingml/diagram/datamodelcontext.hxx"
+#include "datamodelcontext.hxx"
#include "oox/helper/attributelist.hxx"
#include "oox/drawingml/fillpropertiesgroupcontext.hxx"
#include "oox/drawingml/shapepropertiescontext.hxx"
@@ -39,78 +39,184 @@ using ::rtl::OUString;
namespace oox { namespace drawingml {
-// CL_Cxn
-class CxnContext
+// CT_CxnList
+class CxnListContext
: public ContextHandler
{
public:
- CxnContext( ContextHandler& rParent,
- const Reference< XFastAttributeList >& xAttribs,
- const dgm::ConnectionPtr & pConnection )
+ CxnListContext( ContextHandler& rParent,
+ dgm::Connections & aConnections )
: ContextHandler( rParent )
- , mpConnection( pConnection )
+ , mrConnection( aConnections )
{
- sal_Int32 nType = xAttribs->getOptionalValueToken( XML_type, XML_parOf );
- pConnection->mnType = nType;
- pConnection->msModelId = xAttribs->getOptionalValue( XML_modelId );
- pConnection->msSourceId = xAttribs->getOptionalValue( XML_srcId );
- pConnection->msDestId = xAttribs->getOptionalValue( XML_destId );
- pConnection->msPresId = xAttribs->getOptionalValue( XML_presId );
- pConnection->msSibTransId = xAttribs->getOptionalValue( XML_sibTransId );
- AttributeList attribs( xAttribs );
- pConnection->mnSourceOrder = attribs.getInteger( XML_srcOrd, 0 );
- pConnection->mnDestOrder = attribs.getInteger( XML_destOrd, 0 );
}
virtual Reference< XFastContextHandler > SAL_CALL
createFastChildContext( sal_Int32 aElementToken,
- const Reference< XFastAttributeList >& /*xAttribs*/ )
+ const Reference< XFastAttributeList >& xAttribs )
throw (SAXException, RuntimeException)
{
Reference< XFastContextHandler > xRet;
switch( aElementToken )
{
- case DGM_TOKEN( extLst ):
- return xRet;
- default:
- break;
+ case DGM_TOKEN( cxn ):
+ {
+ mrConnection.push_back( dgm::Connection() );
+ dgm::Connection& rConnection=mrConnection.back();
+
+ const sal_Int32 nType = xAttribs->getOptionalValueToken( XML_type, XML_parOf );
+ rConnection.mnType = nType;
+ rConnection.msModelId = xAttribs->getOptionalValue( XML_modelId );
+ rConnection.msSourceId = xAttribs->getOptionalValue( XML_srcId );
+ rConnection.msDestId = xAttribs->getOptionalValue( XML_destId );
+ rConnection.msPresId = xAttribs->getOptionalValue( XML_presId );
+ rConnection.msSibTransId = xAttribs->getOptionalValue( XML_sibTransId );
+ rConnection.msParTransId = xAttribs->getOptionalValue( XML_parTransId );
+ const AttributeList attribs( xAttribs );
+ rConnection.mnSourceOrder = attribs.getInteger( XML_srcOrd, 0 );
+ rConnection.mnDestOrder = attribs.getInteger( XML_destOrd, 0 );
+
+ // skip CT_extLst
+ return xRet;
+ }
+ default:
+ break;
}
if( !xRet.is() )
xRet.set( this );
return xRet;
}
private:
- dgm::ConnectionPtr mpConnection;
+ dgm::Connections& mrConnection;
};
-// CT_CxnList
-class CxnListContext
+// CT_presLayoutVars
+class PresLayoutVarsContext
: public ContextHandler
{
public:
- CxnListContext( ContextHandler& rParent, dgm::Connections & aConnections )
- : ContextHandler( rParent )
- , maConnections( aConnections )
+ PresLayoutVarsContext( ContextHandler& rParent,
+ dgm::Point & rPoint ) :
+ ContextHandler( rParent ),
+ mrPoint( rPoint )
+ {
+ }
+ virtual Reference< XFastContextHandler > SAL_CALL
+ createFastChildContext( sal_Int32 aElementToken,
+ const Reference< XFastAttributeList >& xAttribs )
+ throw (SAXException, RuntimeException)
+ {
+ Reference< XFastContextHandler > xRet;
+ AttributeList aAttribs( xAttribs );
+
+ switch( aElementToken )
{
+ // TODO
+ case DGM_TOKEN( animLvl ):
+ case DGM_TOKEN( animOne ):
+ break;
+ case DGM_TOKEN( bulletEnabled ):
+ mrPoint.mbBulletEnabled = aAttribs.getBool( XML_val, false );
+ break;
+ case DGM_TOKEN( chMax ):
+ mrPoint.mnMaxChildren = aAttribs.getInteger( XML_val, -1 );
+ break;
+ case DGM_TOKEN( chPref ):
+ mrPoint.mnPreferredChildren = aAttribs.getInteger( XML_val, -1 );
+ break;
+ case DGM_TOKEN( dir ):
+ mrPoint.mnDirection = aAttribs.getToken( XML_val, XML_norm );
+ break;
+ case DGM_TOKEN( hierBranch ):
+ mrPoint.mnHierarchyBranch = aAttribs.getToken( XML_val, XML_std );
+ break;
+ case DGM_TOKEN( orgChart ):
+ mrPoint.mbOrgChartEnabled = aAttribs.getBool( XML_val, false );
+ break;
+ case DGM_TOKEN( resizeHandles ):
+ mrPoint.mnResizeHandles = aAttribs.getToken( XML_val, XML_rel );
+ break;
+ default:
+ break;
}
+ if( !xRet.is() )
+ xRet.set( this );
+ return xRet;
+ }
+
+private:
+ dgm::Point& mrPoint;
+};
+
+
+// CT_prSet
+class PropertiesContext
+ : public ContextHandler
+{
+public:
+ PropertiesContext( ContextHandler& rParent,
+ dgm::Point & rPoint,
+ const Reference< XFastAttributeList >& xAttribs ) :
+ ContextHandler( rParent ),
+ mrPoint( rPoint )
+ {
+ OUString aEmptyStr;
+ AttributeList aAttribs( xAttribs );
+
+ mrPoint.msColorTransformCategoryId = aAttribs.getString( XML_csCatId, aEmptyStr );
+ mrPoint.msColorTransformTypeId = aAttribs.getString( XML_csTypeId, aEmptyStr );
+ mrPoint.msLayoutCategoryId = aAttribs.getString( XML_loCatId, aEmptyStr );
+ mrPoint.msLayoutTypeId = aAttribs.getString( XML_loTypeId, aEmptyStr );
+ mrPoint.msPlaceholderText = aAttribs.getString( XML_phldrT, aEmptyStr );
+ mrPoint.msPresentationAssociationId = aAttribs.getString( XML_presAssocID, aEmptyStr );
+ mrPoint.msPresentationLayoutName = aAttribs.getString( XML_presName, aEmptyStr );
+ mrPoint.msPresentationLayoutStyleLabel = aAttribs.getString( XML_presStyleLbl, aEmptyStr );
+ mrPoint.msQuickStyleCategoryId = aAttribs.getString( XML_qsCatId, aEmptyStr );
+ mrPoint.msQuickStyleTypeId = aAttribs.getString( XML_qsTypeId, aEmptyStr );
+
+ mrPoint.mnCustomAngle = aAttribs.getInteger( XML_custAng, -1 );
+ mrPoint.mnPercentageNeighbourWidth = aAttribs.getInteger( XML_custLinFactNeighborX, -1 );
+ mrPoint.mnPercentageNeighbourHeight = aAttribs.getInteger( XML_custLinFactNeighborY, -1 );
+ mrPoint.mnPercentageOwnWidth = aAttribs.getInteger( XML_custLinFactX, -1 );
+ mrPoint.mnPercentageOwnHeight = aAttribs.getInteger( XML_custLinFactY, -1 );
+ mrPoint.mnIncludeAngleScale = aAttribs.getInteger( XML_custRadScaleInc, -1 );
+ mrPoint.mnRadiusScale = aAttribs.getInteger( XML_custRadScaleRad, -1 );
+ mrPoint.mnWidthScale = aAttribs.getInteger( XML_custScaleX, -1 );
+ mrPoint.mnHeightScale = aAttribs.getInteger( XML_custScaleY, -1 );
+ mrPoint.mnWidthOverride = aAttribs.getInteger( XML_custSzX, -1 );
+ mrPoint.mnHeightOverride = aAttribs.getInteger( XML_custSzY, -1 );
+ mrPoint.mnLayoutStyleCount = aAttribs.getInteger( XML_presStyleCnt, -1 );
+ mrPoint.mnLayoutStyleIndex = aAttribs.getInteger( XML_presStyleIdx, -1 );
+
+ mrPoint.mbCoherent3DOffset = aAttribs.getBool( XML_coherent3DOff, false );
+ mrPoint.mbCustomHorizontalFlip = aAttribs.getBool( XML_custFlipHor, false );
+ mrPoint.mbCustomVerticalFlip = aAttribs.getBool( XML_custFlipVert, false );
+ mrPoint.mbCustomText = aAttribs.getBool( XML_custT, false );
+ mrPoint.mbIsPlaceholder = aAttribs.getBool( XML_phldr, false );
+ }
+
virtual Reference< XFastContextHandler > SAL_CALL
createFastChildContext( sal_Int32 aElementToken,
- const Reference< XFastAttributeList >& xAttribs )
+ const Reference< XFastAttributeList >& )
throw (SAXException, RuntimeException)
{
Reference< XFastContextHandler > xRet;
switch( aElementToken )
{
- case DGM_TOKEN( cxn ):
+ case DGM_TOKEN( presLayoutVars ):
{
- dgm::ConnectionPtr pConnection( new dgm::Connection() );
- maConnections.push_back( pConnection );
- xRet.set( new CxnContext( *this, xAttribs, pConnection ) );
+ xRet.set( new PresLayoutVarsContext( *this, mrPoint ) );
break;
}
+ case DGM_TOKEN( style ):
+ {
+ // TODO
+ // skip CT_shapeStyle
+ return xRet;
+ }
default:
break;
}
@@ -120,11 +226,10 @@ public:
}
private:
- dgm::Connections & maConnections;
+ dgm::Point& mrPoint;
};
-
// CL_Pt
class PtContext
: public ContextHandler
@@ -132,27 +237,25 @@ class PtContext
public:
PtContext( ContextHandler& rParent,
const Reference< XFastAttributeList >& xAttribs,
- const dgm::PointPtr & pPoint)
- : ContextHandler( rParent )
- , mpPoint( pPoint )
- {
- mpPoint->setModelId( xAttribs->getOptionalValue( XML_modelId ) );
- //
- // the default type is XML_node
- sal_Int32 nType = xAttribs->getOptionalValueToken( XML_type, XML_node );
- mpPoint->setType( nType );
-
- // ignore the cxnId unless it is this type. See 5.15.3.1.3 in Primer
- if( ( nType == XML_parTrans ) || ( nType == XML_sibTrans ) )
- {
- mpPoint->setCnxId( xAttribs->getOptionalValue( XML_cxnId ) );
- }
- }
+ dgm::Point & rPoint):
+ ContextHandler( rParent ),
+ mrPoint( rPoint )
+ {
+ mrPoint.msModelId = xAttribs->getOptionalValue( XML_modelId );
+
+ // the default type is XML_node
+ const sal_Int32 nType = xAttribs->getOptionalValueToken( XML_type, XML_node );
+ mrPoint.mnType = nType;
+
+ // ignore the cxnId unless it is this type. See 5.15.3.1.3 in Primer
+ if( ( nType == XML_parTrans ) || ( nType == XML_sibTrans ) )
+ mrPoint.msCnxId = xAttribs->getOptionalValue( XML_cxnId );
+ }
virtual Reference< XFastContextHandler > SAL_CALL
createFastChildContext( sal_Int32 aElementToken,
- const Reference< XFastAttributeList >& /*xAttribs*/ )
+ const Reference< XFastAttributeList >& xAttribs )
throw (SAXException, RuntimeException)
{
Reference< XFastContextHandler > xRet;
@@ -162,18 +265,22 @@ public:
case DGM_TOKEN( extLst ):
return xRet;
case DGM_TOKEN( prSet ):
- // TODO
- // CT_ElemPropSet
+ OSL_TRACE( "diagram property set for point");
+ xRet = new PropertiesContext( *this, mrPoint, xAttribs );
break;
case DGM_TOKEN( spPr ):
OSL_TRACE( "shape props for point");
- xRet = new ShapePropertiesContext( *this, *mpPoint->getShape() );
+ if( !mrPoint.mpShape )
+ mrPoint.mpShape.reset( new Shape() );
+ xRet = new ShapePropertiesContext( *this, *(mrPoint.mpShape) );
break;
case DGM_TOKEN( t ):
{
OSL_TRACE( "shape text body for point");
TextBodyPtr xTextBody( new TextBody );
- mpPoint->getShape()->setTextBody( xTextBody );
+ if( !mrPoint.mpShape )
+ mrPoint.mpShape.reset( new Shape() );
+ mrPoint.mpShape->setTextBody( xTextBody );
xRet = new TextBodyContext( *this, *xTextBody );
break;
}
@@ -186,7 +293,7 @@ public:
}
private:
- dgm::PointPtr mpPoint;
+ dgm::Point& mrPoint;
};
@@ -196,11 +303,10 @@ class PtListContext
: public ContextHandler
{
public:
- PtListContext( ContextHandler& rParent, dgm::Points & aPoints)
- : ContextHandler( rParent )
- , maPoints( aPoints )
- {
- }
+ PtListContext( ContextHandler& rParent, dgm::Points& rPoints) :
+ ContextHandler( rParent ),
+ mrPoints( rPoints )
+ {}
virtual Reference< XFastContextHandler > SAL_CALL
createFastChildContext( sal_Int32 aElementToken,
const Reference< XFastAttributeList >& xAttribs )
@@ -213,9 +319,8 @@ public:
case DGM_TOKEN( pt ):
{
// CT_Pt
- dgm::PointPtr pPoint( new dgm::Point() );
- maPoints.push_back( pPoint );
- xRet.set( new PtContext( *this, xAttribs, pPoint ) );
+ mrPoints.push_back( dgm::Point() );
+ xRet.set( new PtContext( *this, xAttribs, mrPoints.back() ) );
break;
}
default:
@@ -227,7 +332,7 @@ public:
}
private:
- dgm::Points & maPoints;
+ dgm::Points& mrPoints;
};
// CT_BackgroundFormatting