diff options
Diffstat (limited to 'oox/source/drawingml/diagram/diagramfragmenthandler.cxx')
-rw-r--r-- | oox/source/drawingml/diagram/diagramfragmenthandler.cxx | 177 |
1 files changed, 115 insertions, 62 deletions
diff --git a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx index 5d905bcbf384..6361f07f23d9 100644 --- a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx +++ b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx @@ -28,9 +28,10 @@ #include <osl/diagnose.h> -#include "oox/drawingml/diagram/diagramfragmenthandler.hxx" -#include "oox/drawingml/diagram/datamodelcontext.hxx" #include "diagramdefinitioncontext.hxx" +#include "diagramfragmenthandler.hxx" +#include "datamodelcontext.hxx" +#include "oox/drawingml/colorchoicecontext.hxx" using namespace ::oox::core; using namespace ::com::sun::star::xml::sax; @@ -130,94 +131,146 @@ DiagramLayoutFragmentHandler::createFastChildContext( ::sal_Int32 aElement, /////////////////////// DiagramQStylesFragmentHandler::DiagramQStylesFragmentHandler( XmlFilterBase& rFilter, - const OUString& rFragmentPath, - const DiagramQStylesPtr pDataPtr ) - throw( ) - : FragmentHandler( rFilter, rFragmentPath ) - , mpDataPtr( pDataPtr ) -{ -} - -DiagramQStylesFragmentHandler::~DiagramQStylesFragmentHandler( ) throw () + const OUString& rFragmentPath, + DiagramQStyleMap& rStylesMap ) : + FragmentHandler2( rFilter, rFragmentPath ), + maStyleName(), + maStyleEntry(), + mrStylesMap( rStylesMap ) +{} + +::oox::core::ContextHandlerRef DiagramQStylesFragmentHandler::createStyleMatrixContext( + sal_Int32 nElement, + const AttributeList& rAttribs, + ShapeStyleRef& o_rStyle ) { - + o_rStyle.mnThemedIdx = (nElement == DGM_TOKEN(fontRef)) ? + rAttribs.getToken( XML_idx, XML_none ) : rAttribs.getInteger( XML_idx, 0 ); + return new ColorContext( *this, o_rStyle.maPhClr ); } -void SAL_CALL DiagramQStylesFragmentHandler::endDocument() - throw (SAXException, RuntimeException) +::oox::core::ContextHandlerRef DiagramQStylesFragmentHandler::onCreateContext( sal_Int32 nElement, + const AttributeList& rAttribs ) { + // state-table like way of navigating the color fragment. we + // currently ignore everything except styleLbl in the colorsDef + // element + switch( getCurrentElement() ) + { + case XML_ROOT_CONTEXT: + return nElement == DGM_TOKEN(styleDef) ? this : NULL; + case DGM_TOKEN(styleDef): + return nElement == DGM_TOKEN(styleLbl) ? this : NULL; + case DGM_TOKEN(styleLbl): + return nElement == DGM_TOKEN(style) ? this : NULL; + case DGM_TOKEN(style): + { + switch( nElement ) + { + case DGM_TOKEN(lnRef) : // CT_StyleMatrixReference + return createStyleMatrixContext(nElement,rAttribs, + maStyleEntry.maLineStyle); + case DGM_TOKEN(fillRef) : // CT_StyleMatrixReference + return createStyleMatrixContext(nElement,rAttribs, + maStyleEntry.maFillStyle); + case DGM_TOKEN(effectRef) : // CT_StyleMatrixReference + return createStyleMatrixContext(nElement,rAttribs, + maStyleEntry.maEffectStyle); + case DGM_TOKEN(fontRef) : // CT_FontRe ference + return createStyleMatrixContext(nElement,rAttribs, + maStyleEntry.maTextStyle); + } + return 0; + } + } + return 0; } -Reference< XFastContextHandler > SAL_CALL -DiagramQStylesFragmentHandler::createFastChildContext( ::sal_Int32 aElement, - const Reference< XFastAttributeList >& ) - throw ( SAXException, RuntimeException) +void DiagramQStylesFragmentHandler::onStartElement( const AttributeList& rAttribs ) { - Reference< XFastContextHandler > xRet; - - switch( aElement ) + if( getCurrentElement() == DGM_TOKEN( styleDef ) ) { - case DGM_TOKEN( styleDef ): - // TODO - break; - default: - break; + maStyleName = rAttribs.getString( XML_name, OUString() ); + maStyleEntry = mrStylesMap[maStyleName]; } - - if( !xRet.is() ) - xRet = getFastContextHandler(); - - return xRet; } ///////////////////// -DiagramColorsFragmentHandler::DiagramColorsFragmentHandler( XmlFilterBase& rFilter, - const OUString& rFragmentPath, - const DiagramColorsPtr pDataPtr ) - throw( ) - : FragmentHandler( rFilter, rFragmentPath ) - , mpDataPtr( pDataPtr ) +void DiagramQStylesFragmentHandler::onEndElement( ) { + if( getCurrentElement() == DGM_TOKEN(styleLbl) ) + mrStylesMap[maStyleName] = maStyleEntry; } -DiagramColorsFragmentHandler::~DiagramColorsFragmentHandler( ) throw () -{ - -} - -void SAL_CALL DiagramColorsFragmentHandler::endDocument() - throw (SAXException, RuntimeException) +ColorFragmentHandler::ColorFragmentHandler( ::oox::core::XmlFilterBase& rFilter, + const ::rtl::OUString& rFragmentPath, + DiagramColorMap& rColorsMap ) : + FragmentHandler2(rFilter,rFragmentPath), + maColorName(), + maColorEntry(), + mrColorsMap(rColorsMap) +{} + +::oox::core::ContextHandlerRef ColorFragmentHandler::onCreateContext( sal_Int32 nElement, + const AttributeList& /*rAttribs*/ ) { + // state-table like way of navigating the color fragment. we + // currently ignore everything except styleLbl in the colorsDef + // element + switch( getCurrentElement() ) + { + case XML_ROOT_CONTEXT: + return nElement == DGM_TOKEN(colorsDef) ? this : NULL;; + case DGM_TOKEN(colorsDef): + return nElement == DGM_TOKEN(styleLbl) ? this : NULL;; + case DGM_TOKEN(styleLbl): + return ((nElement == DGM_TOKEN(fillClrLst)) || + (nElement == DGM_TOKEN(linClrLst)) || + (nElement == DGM_TOKEN(effectClrLst)) || + (nElement == DGM_TOKEN(txLinClrLst)) || + (nElement == DGM_TOKEN(txFillClrLst)) || + (nElement == DGM_TOKEN(txEffectClrLst))) ? this : NULL;; + + // the actual colors - defer to color fragment handlers. + + // TODO(F1): well, actually, there might be *several* color + // definitions in it, after all it's called list. but + // apparently colorChoiceContext doesn't handle that anyway... + case DGM_TOKEN(fillClrLst): + return new ColorContext( *this, maColorEntry.maFillColor ); + case DGM_TOKEN(linClrLst): + return new ColorContext( *this, maColorEntry.maLineColor ); + case DGM_TOKEN(effectClrLst): + return new ColorContext( *this, maColorEntry.maEffectColor ); + case DGM_TOKEN(txFillClrLst): + return new ColorContext( *this, maColorEntry.maTextFillColor ); + case DGM_TOKEN(txLinClrLst): + return new ColorContext( *this, maColorEntry.maTextLineColor ); + case DGM_TOKEN(txEffectClrLst): + return new ColorContext( *this, maColorEntry.maTextEffectColor ); + } + return 0; } -Reference< XFastContextHandler > SAL_CALL -DiagramColorsFragmentHandler::createFastChildContext( ::sal_Int32 aElement, - const Reference< XFastAttributeList >& ) - throw ( SAXException, RuntimeException) +void ColorFragmentHandler::onStartElement( const AttributeList& rAttribs ) { - Reference< XFastContextHandler > xRet; - - switch( aElement ) + if( getCurrentElement() == DGM_TOKEN(styleLbl) ) { - case DGM_TOKEN( colorsDef ): - // TODO - break; - default: - break; + maColorName = rAttribs.getString( XML_name, OUString() ); + maColorEntry = mrColorsMap[maColorName]; } - - if( !xRet.is() ) - xRet = getFastContextHandler(); - - return xRet; } - +void ColorFragmentHandler::onEndElement( ) +{ + if( getCurrentElement() == DGM_TOKEN(styleLbl) ) + mrColorsMap[maColorName] = maColorEntry; +} } } |