xref: /AOO41X/main/oox/inc/oox/drawingml/diagram/diagramlayoutatoms.hxx (revision e35081216278e1848f1c12af2e117a766f306f4b)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 
26 
27 
28 #ifndef OOX_DRAWINGML_DIAGRAMLAYOUTATOMS_HXX
29 #define OOX_DRAWINGML_DIAGRAMLAYOUTATOMS_HXX
30 
31 #include <map>
32 #include <string>
33 
34 #include <boost/shared_ptr.hpp>
35 #include <boost/array.hpp>
36 
37 #include <com/sun/star/uno/Any.hxx>
38 #include <com/sun/star/xml/sax/XFastAttributeList.hpp>
39 
40 #include "oox/drawingml/shape.hxx"
41 
42 
43 namespace oox { namespace drawingml {
44 
45 
46 // AG_IteratorAttributes
47 class IteratorAttr
48 {
49 public:
50     IteratorAttr();
51 
52     // not sure this belong here, but wth
53     void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
54 
55 private:
56     sal_Int32 mnAxis;
57     sal_Int32 mnCnt;
58     sal_Bool  mbHideLastTrans;
59     sal_Int32 mnPtType;
60     sal_Int32 mnSt;
61     sal_Int32 mnStep;
62 };
63 
64 class ConditionAttr
65 {
66 public:
67     ConditionAttr();
68 
69     // not sure this belong here, but wth
70     void loadFromXAttr( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& xAttributes );
71 
72 private:
73     sal_Int32 mnFunc;
74     sal_Int32 mnArg;
75     sal_Int32 mnOp;
76     ::rtl::OUString msVal;
77 };
78 
79 class LayoutAtom;
80 
81 typedef boost::shared_ptr< LayoutAtom > LayoutAtomPtr;
82 
83 /** abstract Atom for the layout */
84 class LayoutAtom
85 {
86 public:
~LayoutAtom()87     virtual ~LayoutAtom()
88         {}
89     // TODO change signature to the proper one
90     virtual void processAtom() = 0;
setName(const::rtl::OUString & sName)91     void setName( const ::rtl::OUString & sName )
92         { msName = sName; }
addChild(const LayoutAtomPtr & pNode)93     void addChild( const LayoutAtomPtr & pNode )
94         { mpChildNodes.push_back( pNode ); }
95 
96     // dump for debug
97     virtual void dump(int level = 0);
98 protected:
99     std::vector< LayoutAtomPtr > mpChildNodes;
100     ::rtl::OUString msName;
101 };
102 
103 class AlgAtom
104     : public LayoutAtom
105 {
106 public:
~AlgAtom()107     virtual ~AlgAtom()
108         {}
109     typedef std::map< std::string, ::com::sun::star::uno::Any > ParamMap;
110 
processAtom()111     virtual void processAtom()
112         {}
113 private:
114     ParamMap mParams;
115 };
116 
117 
118 class ForEachAtom
119     : public LayoutAtom
120 {
121 public:
~ForEachAtom()122     virtual ~ForEachAtom()
123         {}
124 
iterator()125     IteratorAttr & iterator()
126         { return maIter; }
127     virtual void processAtom();
128 private:
129     IteratorAttr maIter;
130 };
131 
132 typedef boost::shared_ptr< ForEachAtom > ForEachAtomPtr;
133 
134 
135 class ConditionAtom
136     : public LayoutAtom
137 {
138 public:
ConditionAtom(bool bElse=false)139     ConditionAtom( bool bElse = false )
140         : LayoutAtom( )
141         , mbElse( bElse )
142         {}
~ConditionAtom()143     virtual ~ConditionAtom()
144         {}
145     bool test();
processAtom()146     virtual void processAtom()
147         {}
iterator()148     IteratorAttr & iterator()
149         { return maIter; }
cond()150     ConditionAttr & cond()
151         { return maCond; }
152 private:
153     bool          mbElse;
154     IteratorAttr  maIter;
155     ConditionAttr maCond;
156 };
157 
158 typedef boost::shared_ptr< ConditionAtom > ConditionAtomPtr;
159 
160 
161 /** "choose" statements. Atoms will be tested in order. */
162 class ChooseAtom
163     : public LayoutAtom
164 {
165 public:
~ChooseAtom()166     virtual ~ChooseAtom()
167         {}
168     virtual void processAtom();
169 };
170 
171 class LayoutNode
172     : public LayoutAtom
173 {
174 public:
175     enum {
176         VAR_animLvl = 0,
177         VAR_animOne,
178         VAR_bulletEnabled,
179         VAR_chMax,
180         VAR_chPref,
181         VAR_dir,
182         VAR_hierBranch,
183         VAR_orgChart,
184         VAR_resizeHandles
185     };
186     // we know that the array is of fixed size
187     // the use of Any allow having empty values
188     typedef boost::array< ::com::sun::star::uno::Any, 9 > VarMap;
189 
~LayoutNode()190     virtual ~LayoutNode()
191         {}
processAtom()192     virtual void processAtom()
193         {}
variables()194     VarMap & variables()
195         { return mVariables; }
196 private:
197     VarMap                       mVariables;
198     std::vector< ShapePtr >      mpShapes;
199 };
200 
201 typedef boost::shared_ptr< LayoutNode > LayoutNodePtr;
202 
203 } }
204 
205 #endif
206