/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef OOX_DRAWINGML_DIAGRAMLAYOUTATOMS_HXX #define OOX_DRAWINGML_DIAGRAMLAYOUTATOMS_HXX #include #include #include #include #include #include #include "oox/drawingml/shape.hxx" namespace oox { namespace drawingml { // AG_IteratorAttributes class IteratorAttr { public: IteratorAttr(); // not sure this belong here, but wth void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes ); private: sal_Int32 mnAxis; sal_Int32 mnCnt; sal_Bool mbHideLastTrans; sal_Int32 mnPtType; sal_Int32 mnSt; sal_Int32 mnStep; }; class ConditionAttr { public: ConditionAttr(); // not sure this belong here, but wth void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes ); private: sal_Int32 mnFunc; sal_Int32 mnArg; sal_Int32 mnOp; ::rtl::OUString msVal; }; class LayoutAtom; typedef boost::shared_ptr< LayoutAtom > LayoutAtomPtr; /** abstract Atom for the layout */ class LayoutAtom { public: virtual ~LayoutAtom() {} // TODO change signature to the proper one virtual void processAtom() = 0; void setName( const ::rtl::OUString & sName ) { msName = sName; } void addChild( const LayoutAtomPtr & pNode ) { mpChildNodes.push_back( pNode ); } // dump for debug virtual void dump(int level = 0); protected: std::vector< LayoutAtomPtr > mpChildNodes; ::rtl::OUString msName; }; class AlgAtom : public LayoutAtom { public: virtual ~AlgAtom() {} typedef std::map< std::string, ::com::sun::star::uno::Any > ParamMap; virtual void processAtom() {} private: ParamMap mParams; }; class ForEachAtom : public LayoutAtom { public: virtual ~ForEachAtom() {} IteratorAttr & iterator() { return maIter; } virtual void processAtom(); private: IteratorAttr maIter; }; typedef boost::shared_ptr< ForEachAtom > ForEachAtomPtr; class ConditionAtom : public LayoutAtom { public: ConditionAtom( bool bElse = false ) : LayoutAtom( ) , mbElse( bElse ) {} virtual ~ConditionAtom() {} bool test(); virtual void processAtom() {} IteratorAttr & iterator() { return maIter; } ConditionAttr & cond() { return maCond; } private: bool mbElse; IteratorAttr maIter; ConditionAttr maCond; }; typedef boost::shared_ptr< ConditionAtom > ConditionAtomPtr; /** "choose" statements. Atoms will be tested in order. */ class ChooseAtom : public LayoutAtom { public: virtual ~ChooseAtom() {} virtual void processAtom(); }; class LayoutNode : public LayoutAtom { public: enum { VAR_animLvl = 0, VAR_animOne, VAR_bulletEnabled, VAR_chMax, VAR_chPref, VAR_dir, VAR_hierBranch, VAR_orgChart, VAR_resizeHandles }; // we know that the array is of fixed size // the use of Any allow having empty values typedef boost::array< ::com::sun::star::uno::Any, 9 > VarMap; virtual ~LayoutNode() {} virtual void processAtom() {} VarMap & variables() { return mVariables; } private: VarMap mVariables; std::vector< ShapePtr > mpShapes; }; typedef boost::shared_ptr< LayoutNode > LayoutNodePtr; } } #endif