LCOV - code coverage report
Current view: top level - oox/source/drawingml/diagram - diagramlayoutatoms.hxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 73 73 100.0 %
Date: 2014-11-03 Functions: 48 51 94.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #ifndef INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DIAGRAMLAYOUTATOMS_HXX
      21             : #define INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DIAGRAMLAYOUTATOMS_HXX
      22             : 
      23             : #include <map>
      24             : #include <string>
      25             : 
      26             : #include <boost/shared_ptr.hpp>
      27             : #include <boost/array.hpp>
      28             : 
      29             : #include <com/sun/star/uno/Any.hxx>
      30             : #include <com/sun/star/xml/sax/XFastAttributeList.hpp>
      31             : 
      32             : #include "oox/drawingml/shape.hxx"
      33             : #include "diagram.hxx"
      34             : 
      35             : namespace oox { namespace drawingml {
      36             : 
      37             : class DiagramLayout;
      38             : typedef boost::shared_ptr< DiagramLayout > DiagramLayoutPtr;
      39             : 
      40             : // AG_IteratorAttributes
      41             : struct IteratorAttr
      42             : {
      43             :     IteratorAttr();
      44             : 
      45             :     // not sure this belong here, but wth
      46             :     void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
      47             : 
      48             :     sal_Int32 mnAxis;
      49             :     sal_Int32 mnCnt;
      50             :     bool  mbHideLastTrans;
      51             :     sal_Int32 mnPtType;
      52             :     sal_Int32 mnSt;
      53             :     sal_Int32 mnStep;
      54             : };
      55             : 
      56          38 : struct ConditionAttr
      57             : {
      58             :     ConditionAttr();
      59             : 
      60             :     // not sure this belong here, but wth
      61             :     void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
      62             : 
      63             :     sal_Int32 mnFunc;
      64             :     sal_Int32 mnArg;
      65             :     sal_Int32 mnOp;
      66             :     OUString msVal;
      67             : };
      68             : 
      69             : struct LayoutAtomVisitor;
      70             : class LayoutAtom;
      71             : 
      72             : typedef boost::shared_ptr< LayoutAtom > LayoutAtomPtr;
      73             : 
      74             : /** abstract Atom for the layout */
      75         778 : class LayoutAtom
      76             : {
      77             : public:
      78         778 :     virtual ~LayoutAtom() { }
      79             : 
      80             :     /** visitor acceptance
      81             :      */
      82             :     virtual void accept( LayoutAtomVisitor& ) = 0;
      83             : 
      84         230 :     void setName( const OUString& sName )
      85         230 :         { msName = sName; }
      86         392 :     const OUString& getName() const
      87         392 :         { return msName; }
      88             : 
      89         610 :     virtual void addChild( const LayoutAtomPtr & pNode )
      90         610 :         { mpChildNodes.push_back( pNode ); }
      91        1854 :     virtual const std::vector<LayoutAtomPtr>& getChildren() const
      92        1854 :         { return mpChildNodes; }
      93             : 
      94             :     // dump for debug
      95             :     void dump(int level = 0);
      96             : protected:
      97             :     std::vector< LayoutAtomPtr > mpChildNodes;
      98             :     OUString                     msName;
      99             : };
     100             : 
     101             : class ConstraintAtom
     102             :     : public LayoutAtom
     103             : {
     104             : public:
     105         414 :     ConstraintAtom() :
     106             :         mnFor(-1), msForName(), mnPointType(-1), mnType(-1), mnRefFor(-1), msRefForName(),
     107         414 :         mnRefType(-1), mnRefPointType(-1), mfFactor(1.0), mfValue(0.0), mnOperator(0)
     108         414 :     {}
     109             : 
     110         828 :     virtual ~ConstraintAtom() { }
     111             : 
     112             :     virtual void accept( LayoutAtomVisitor& ) SAL_OVERRIDE;
     113             : 
     114         414 :     void setFor( sal_Int32 nToken )
     115         414 :         { mnFor = nToken; }
     116         414 :     void setForName( const OUString & sName )
     117         414 :         { msForName = sName; }
     118         414 :     void setPointType( sal_Int32 nToken )
     119         414 :         { mnPointType = nToken; }
     120         414 :     void setType( sal_Int32 nToken )
     121         414 :         { mnType = nToken; }
     122         414 :     void setRefFor( sal_Int32 nToken )
     123         414 :         { mnRefFor = nToken; }
     124         414 :     void setRefForName( const OUString & sName )
     125         414 :         { msRefForName = sName; }
     126         414 :     void setRefType( sal_Int32 nToken )
     127         414 :         { mnRefType = nToken; }
     128         414 :     void setRefPointType( sal_Int32 nToken )
     129         414 :         { mnRefPointType = nToken; }
     130         414 :     void setFactor( const double& fVal )
     131         414 :         { mfFactor = fVal; }
     132         414 :     void setValue( const double& fVal )
     133         414 :         { mfValue = fVal; }
     134         414 :     void setOperator( sal_Int32 nToken )
     135         414 :         { mnOperator = nToken; }
     136             : private:
     137             :     sal_Int32 mnFor;
     138             :     OUString msForName;
     139             :     sal_Int32 mnPointType;
     140             :     sal_Int32 mnType;
     141             :     sal_Int32 mnRefFor;
     142             :     OUString msRefForName;
     143             :     sal_Int32 mnRefType;
     144             :     sal_Int32 mnRefPointType;
     145             :     double mfFactor;
     146             :     double mfValue;
     147             :     sal_Int32 mnOperator;
     148             : };
     149             : 
     150             : typedef boost::shared_ptr< ConstraintAtom > ConstraintAtomPtr;
     151             : 
     152             : class AlgAtom
     153             :     : public LayoutAtom
     154             : {
     155             : public:
     156         134 :     AlgAtom() : mnType(0), maMap() {}
     157             : 
     158         268 :     virtual ~AlgAtom() { }
     159             : 
     160             :     typedef std::map<sal_Int32,sal_Int32> ParamMap;
     161             : 
     162             :     virtual void accept( LayoutAtomVisitor& ) SAL_OVERRIDE;
     163             : 
     164         134 :     void setType( sal_Int32 nToken )
     165         134 :         { mnType = nToken; }
     166         160 :     void addParam( sal_Int32 nType, sal_Int32 nVal )
     167         160 :         { maMap[nType]=nVal; }
     168             :     void layoutShape( const ShapePtr& rShape,
     169             :                       const Diagram& rDgm,
     170             :                       const OUString& rName ) const;
     171             : private:
     172             :     sal_Int32 mnType;
     173             :     ParamMap  maMap;
     174             : };
     175             : 
     176             : typedef boost::shared_ptr< AlgAtom > AlgAtomPtr;
     177             : 
     178             : class ForEachAtom
     179             :     : public LayoutAtom
     180             : {
     181             : public:
     182             :     explicit ForEachAtom(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes);
     183             : 
     184          80 :     virtual ~ForEachAtom() { }
     185             : 
     186         524 :     IteratorAttr & iterator()
     187         524 :         { return maIter; }
     188             :     virtual void accept( LayoutAtomVisitor& ) SAL_OVERRIDE;
     189             : 
     190             : private:
     191             :     IteratorAttr maIter;
     192             : };
     193             : 
     194             : typedef boost::shared_ptr< ForEachAtom > ForEachAtomPtr;
     195             : 
     196             : class ConditionAtom
     197             :     : public LayoutAtom
     198             : {
     199             : public:
     200             :     explicit ConditionAtom(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes);
     201          76 :     virtual ~ConditionAtom()
     202          76 :         { }
     203             :     bool test();
     204             :     virtual void accept( LayoutAtomVisitor& ) SAL_OVERRIDE;
     205             :     IteratorAttr & iterator()
     206             :         { return maIter; }
     207             :     ConditionAttr & cond()
     208             :         { return maCond; }
     209          38 :     void readElseBranch()
     210          38 :         { mbElse=true; }
     211             :     virtual void addChild( const LayoutAtomPtr & pNode ) SAL_OVERRIDE;
     212             :     virtual const std::vector<LayoutAtomPtr>& getChildren() const SAL_OVERRIDE;
     213             : private:
     214             :     bool          mbElse;
     215             :     IteratorAttr  maIter;
     216             :     ConditionAttr maCond;
     217             :     std::vector< LayoutAtomPtr > mpElseChildNodes;
     218             : };
     219             : 
     220             : typedef boost::shared_ptr< ConditionAtom > ConditionAtomPtr;
     221             : 
     222             : /** "choose" statements. Atoms will be tested in order. */
     223          38 : class ChooseAtom
     224             :     : public LayoutAtom
     225             : {
     226             : public:
     227          76 :     virtual ~ChooseAtom()
     228          76 :         { }
     229             :     virtual void accept( LayoutAtomVisitor& ) SAL_OVERRIDE;
     230             : };
     231             : 
     232             : class LayoutNode
     233             :     : public LayoutAtom
     234             : {
     235             : public:
     236             :     enum {
     237             :         VAR_animLvl = 0,
     238             :         VAR_animOne,
     239             :         VAR_bulletEnabled,
     240             :         VAR_chMax,
     241             :         VAR_chPref,
     242             :         VAR_dir,
     243             :         VAR_hierBranch,
     244             :         VAR_orgChart,
     245             :         VAR_resizeHandles
     246             :     };
     247             :     // we know that the array is of fixed size
     248             :     // the use of Any allow having empty values
     249             :     typedef boost::array< ::com::sun::star::uno::Any, 9 > VarMap;
     250             : 
     251         114 :     LayoutNode() : mnChildOrder(0) {}
     252         228 :     virtual ~LayoutNode() { }
     253             :     virtual void accept( LayoutAtomVisitor& ) SAL_OVERRIDE;
     254          46 :     VarMap & variables()
     255          46 :         { return mVariables; }
     256         114 :     void setMoveWith( const OUString & sName )
     257         114 :         { msMoveWith = sName; }
     258         114 :     void setStyleLabel( const OUString & sLabel )
     259         114 :         { msStyleLabel = sLabel; }
     260         114 :     void setChildOrder( sal_Int32 nOrder )
     261         114 :         { mnChildOrder = nOrder; }
     262         108 :     void setShape( const ShapePtr& pShape )
     263         108 :         { mpShape = pShape; }
     264         352 :     const ShapePtr& getShape() const
     265         352 :         { return mpShape; }
     266             : 
     267             :     bool setupShape( const ShapePtr& rShape,
     268             :                      const Diagram& rDgm,
     269             :                      sal_uInt32 nIdx ) const;
     270             : 
     271             : private:
     272             :     VarMap                       mVariables;
     273             :     OUString                     msMoveWith;
     274             :     OUString                     msStyleLabel;
     275             :     ShapePtr                     mpShape;
     276             :     sal_Int32                    mnChildOrder;
     277             : };
     278             : 
     279             : typedef boost::shared_ptr< LayoutNode > LayoutNodePtr;
     280             : 
     281         460 : struct LayoutAtomVisitor
     282             : {
     283         460 :     virtual ~LayoutAtomVisitor() {}
     284             :     virtual void visit(ConstraintAtom& rAtom) = 0;
     285             :     virtual void visit(AlgAtom& rAtom) = 0;
     286             :     virtual void visit(ForEachAtom& rAtom) = 0;
     287             :     virtual void visit(ConditionAtom& rAtom) = 0;
     288             :     virtual void visit(ChooseAtom& rAtom) = 0;
     289             :     virtual void visit(LayoutNode& rAtom) = 0;
     290             : };
     291             : 
     292          88 : class ShapeCreationVisitor : public LayoutAtomVisitor
     293             : {
     294             :     ShapePtr mpParentShape;
     295             :     const Diagram& mrDgm;
     296             :     sal_Int32 mnCurrIdx;
     297             : 
     298             :     void defaultVisit(LayoutAtom& rAtom);
     299             :     virtual void visit(ConstraintAtom& rAtom) SAL_OVERRIDE;
     300             :     virtual void visit(AlgAtom& rAtom) SAL_OVERRIDE;
     301             :     virtual void visit(ForEachAtom& rAtom) SAL_OVERRIDE;
     302             :     virtual void visit(ConditionAtom& rAtom) SAL_OVERRIDE;
     303             :     virtual void visit(ChooseAtom& rAtom) SAL_OVERRIDE;
     304             :     virtual void visit(LayoutNode& rAtom) SAL_OVERRIDE;
     305             : 
     306             : public:
     307          88 :     ShapeCreationVisitor(const ShapePtr& rParentShape,
     308             :                          const Diagram& rDgm) :
     309             :         mpParentShape(rParentShape),
     310             :         mrDgm(rDgm),
     311          88 :         mnCurrIdx(0)
     312          88 :     {}
     313             : };
     314             : 
     315             : } }
     316             : 
     317             : #endif
     318             : 
     319             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10