7747b49eee4be7056c392c726131b4e85c7fadcd
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / builder / builder-impl.h
1 #ifndef __DALI_TOOLKIT_INTERNAL_BUILDER_H__
2 #define __DALI_TOOLKIT_INTERNAL_BUILDER_H__
3
4 //
5 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
6 //
7 // Licensed under the Flora License, Version 1.0 (the License);
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //     http://floralicense.org/license/
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an AS IS BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19
20 // EXTERNAL INCLUDES
21 #include <string>
22 #include <list>
23 #include <map>
24 #include <boost/property_tree/ptree.hpp>
25 #include <dali/dali.h>
26 #include <dali/integration-api/debug.h>
27
28 // INTERNAL INCLUDES
29 #include <dali-toolkit/public-api/builder/json-parser.h>
30 #include <dali-toolkit/public-api/builder/builder.h>
31 #include <dali-toolkit/internal/builder/builder-declarations.h>
32
33 // Warning messages usually displayed
34 #define DALI_SCRIPT_WARNING(format, args...) \
35   DALI_LOG_WARNING("Script:" format, ## args)
36
37 // Info messages are usually debug build
38 #define DALI_SCRIPT_INFO(format, args...) \
39   DALI_LOG_INFO(Dali::Toolkit::Internal::gFilterScript, Debug::General, "Script:" format, ## args)
40
41 // Info Verbose need to be swiched on in gFilterScript filter constructor (by default set to General)
42 #define DALI_SCRIPT_VERBOSE(format, args...) \
43   DALI_LOG_INFO(Dali::Toolkit::Internal::gFilterScript, Debug::Verbose, "Script:" format, ## args)
44
45 namespace Dali
46 {
47
48 namespace Toolkit
49 {
50   class TreeNode;
51 }
52
53 namespace Toolkit
54 {
55
56 namespace Internal
57 {
58
59 #if defined(DEBUG_ENABLED)
60 extern Dali::Integration::Log::Filter* gFilterScript;
61 #endif
62
63 class Builder;
64 class Replacement;
65
66 /**
67  * @copydoc Toolkit::Builder
68  */
69 class Builder : public Dali::BaseObject
70 {
71 public:
72
73   Builder();
74
75   /**
76    * @copydoc Toolkit::Builder::LoadFromString
77    */
78   void LoadFromString( const std::string &data,
79                        Dali::Toolkit::Builder::UIFormat rep = Dali::Toolkit::Builder::JSON );
80
81   /**
82    * @copydoc Toolkit::Builder::AddConstants
83    */
84   void AddConstants( const PropertyValueMap& map );
85
86   /**
87    * @copydoc Toolkit::Builder::CreateAnimation( const std::string& animationName );
88    */
89   Animation CreateAnimation( const std::string& animationName );
90
91   /**
92    * @copydoc Toolkit::Builder::CreateAnimation( const std::string& animationName, const PropertyValueMap& map );
93    */
94   Animation CreateAnimation( const std::string& animationName, const PropertyValueMap& map );
95
96   /**
97    * @copydoc Toolkit::Builder::CreateAnimation( const std::string& animationName, Dali::Actor searchRoot );
98    */
99   Animation CreateAnimation( const std::string& animationName, Dali::Actor searchRoot );
100
101   /**
102    * @copydoc Toolkit::Builder::CreateAnimation( const std::string& animationName, const PropertyValueMap& map, Dali::Actor searchRoot );
103    */
104   Animation CreateAnimation( const std::string& animationName, const PropertyValueMap& map, Dali::Actor searchRoot );
105
106   /**
107    * @copydoc Toolkit::Builder::CreateFromStyle( const std::string& styleName );
108    */
109   BaseHandle CreateFromStyle( const std::string& styleName );
110
111   /**
112    * @copydoc Toolkit::Builder::CreateFromStyle( const std::string& styleName, const PropertyValueMap& map );
113    */
114   BaseHandle CreateFromStyle( const std::string& styleName, const PropertyValueMap& map );
115
116   /**
117    * @copydoc Toolkit::Builder::GetFont
118    */
119   Font GetFont(const std::string &name) const;
120
121   /**
122    * @copydoc Toolkit::Builder::GetTextStyle
123    */
124   TextStyle GetTextStyle(const std::string &name) const;
125
126   /**
127    * @copydoc Toolkit::Builder::GetImage
128    */
129   Image GetImage(const std::string &name) const;
130
131   /**
132    * @copydoc Toolkit::Builder::GetActor
133    */
134   Actor GetActor( const std::string &name ) const;
135
136   /**
137    * @copydoc Toolkit::Builder::ApplyStyle
138    */
139   void ApplyStyle( const std::string& styleName, Handle& handle );
140
141   /**
142    * @copydoc Toolkit::Builder::AddActors
143    */
144   void AddActors( Actor toActor );
145
146   /**
147    * @copydoc Toolkit::Builder::AddActors
148    */
149   void AddActors( const std::string &sectionName, Actor toActor );
150
151   /**
152    * @copydoc Toolkit::Builder::GetAnimation
153    */
154   Animation GetAnimation( const std::string &name ) const;
155
156   /**
157    * @copydoc Toolkit::Builder::CreateRenderTask
158    */
159   void CreateRenderTask( const std::string &name );
160
161   /**
162    * @copydoc Toolkit::Builder::GetShaderEffect
163    */
164   ShaderEffect GetShaderEffect( const std::string &name );
165
166   /**
167    * @copydoc Toolkit::Builder::GetShaderEffect
168    */
169   ShaderEffect GetShaderEffect( const std::string &name, const Replacement& constant );
170
171   /**
172    * @copydoc Toolkit::Builder::GetFrameBufferImage
173    */
174   FrameBufferImage GetFrameBufferImage( const std::string &name );
175
176   /**
177    * @copydoc Toolkit::Builder::GetFrameBufferImage
178    */
179   FrameBufferImage GetFrameBufferImage( const std::string &name, const Replacement& constant );
180
181   /**
182    * @copydoc Toolkit::Builder::GetTopLevelActors
183    */
184   ActorContainer GetTopLevelActors( void ) const;
185
186 protected:
187
188   virtual ~Builder();
189
190 private:
191   // Undefined
192   Builder(const Builder&);
193   Builder& operator=(const Builder& rhs);
194
195   void SetupTask( RenderTask& task, const Toolkit::TreeNode& node, const Replacement& replacement );
196
197 private:
198   Toolkit::JsonParser mParser;
199
200   typedef std::map<const std::string, FrameBufferImage> ImageLut;
201   ImageLut mFrameBufferImageLut;
202
203   typedef std::map<const std::string, ShaderEffect> ShaderEffectLut;
204   ShaderEffectLut mShaderEffectLut;
205
206   SlotDelegate<Builder> mSlotDelegate;
207
208   PropertyValueMap mReplacementMap;
209
210   BaseHandle Create( const OptionalChild& optionalStyles, const TreeNode& node, const TreeNode& root, Actor parent,
211                      const Replacement& replacement );
212
213   void LoadConstants();
214
215   void ApplyStyle( const std::string& styleName, Handle& handle, const Replacement& replacement);
216
217   Animation CreateAnimation( const std::string& animationName, const Replacement& replacement, Dali::Actor searchRoot );
218
219   BaseHandle CreateFromStyle( const std::string& styleName, const Replacement& replacement );
220 };
221
222 } // namespace Internal
223
224 inline Internal::Builder& GetImpl(Dali::Toolkit::Builder& obj)
225 {
226   DALI_ASSERT_ALWAYS(obj);
227
228   Dali::BaseObject& handle = obj.GetBaseObject();
229
230   return static_cast<Internal::Builder&>(handle);
231 }
232
233 inline const Internal::Builder& GetImpl(const Dali::Toolkit::Builder& obj)
234 {
235   DALI_ASSERT_ALWAYS(obj);
236
237   const Dali::BaseObject& handle = obj.GetBaseObject();
238
239   return static_cast<const Internal::Builder&>(handle);
240 }
241
242 } // namespace Toolkit
243
244 } // namespace Dali
245
246 #endif // __DALI_TOOLKIT_INTERNAL_BUILDER_H__