Merge "DALi Version 1.0.20" into tizen
[platform/core/uifw/dali-core.git] / dali / public-api / object / type-info.h
1 #ifndef __DALI_TYPE_INFO_H__
2 #define __DALI_TYPE_INFO_H__
3
4 /*
5  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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
21
22 // INTERNAL INCLUDES
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/common/vector-wrapper.h>
25
26 namespace Dali
27 {
28
29 class ConnectionTrackerInterface;
30 class FunctorDelegate;
31
32 namespace Internal DALI_INTERNAL
33 {
34   class TypeInfo;
35 };
36
37 typedef std::vector<Property::Value> PropertyValueContainer;
38 typedef PropertyValueContainer::iterator PropertyValueIter; ///< Iterator for Dali::PropertyValueContainer
39 typedef PropertyValueContainer::const_iterator PropertyValueConstIter; ///< Const iterator for Dali::PropertyValueContainer
40
41 /**
42  * @brief TypeInfo class for instantiation of registered types and introspection of
43  * their actions and signals.
44  *
45  * See TypeRegistry for methods of type registration and TypeInfo retrieval.
46  */
47 class DALI_IMPORT_API TypeInfo : public BaseHandle
48 {
49 public:
50   typedef BaseHandle (*CreateFunction)(); ///< Function signature for creating an instance of the associated object type.
51
52   typedef bool (*ActionFunction)(BaseObject*, const std::string&, const PropertyValueContainer&); ///< Function signature for creating scriptable actions
53
54   /**
55    * @brief Connects a callback function with the object's signals.
56    *
57    * @param[in] object The object providing the signal.
58    * @param[in] tracker Used to disconnect the signal.
59    * @param[in] signalName The signal to connect to.
60    * @param[in] functor A newly allocated FunctorDelegate.
61    * @return True if the signal was connected.
62    * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor.
63    */
64   typedef bool (*SignalConnectorFunctionV2)(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor);
65
66   /**
67    * @brief Callback to set an event-thread only property.
68    *
69    * @see PropertyRegistration.
70    * @param[in] object The object whose property should be set.
71    * @param[in] index The index of the property being set.
72    * @param[in] value The new value of the property for the object specified.
73    */
74   typedef void (*SetPropertyFunction)( BaseObject* object, Property::Index index, const Property::Value& value );
75
76   /**
77    * @brief Callback to get the value of an event-thread only property.
78    *
79    * @see PropertyRegistration.
80    * @param[in] object The object whose property value is required.
81    * @param[in] index The index of the property required.
82    * @return The current value of the property for the object specified.
83    */
84   typedef Property::Value (*GetPropertyFunction)( BaseObject* object, Property::Index index );
85
86   typedef std::vector<std::string> NameContainer; ///< Container of names for signals and actions
87
88   /**
89    * @brief Allows the creation of an empty TypeInfo handle.
90    */
91   TypeInfo();
92
93   /**
94    * @brief Destructor
95    *
96    * This is non-virtual since derived Handle types must not contain data or virtual methods.
97    */
98   ~TypeInfo();
99
100   /**
101    * @brief This copy constructor is required for (smart) pointer semantics.
102    *
103    * @param [in] handle A reference to the copied handle
104    */
105   TypeInfo(const TypeInfo& handle);
106
107   /**
108    * @brief This assignment operator is required for (smart) pointer semantics.
109    *
110    * @param [in] rhs  A reference to the copied handle
111    * @return A reference to this
112    */
113   TypeInfo& operator=(const TypeInfo& rhs);
114
115   /**
116    * @brief Retrieve the type name for this type.
117    *
118    * @return string name
119    */
120   const std::string& GetName() const;
121
122   /**
123    * @brief Retrieve the base type name for this type.
124    *
125    * @return string of base name
126    */
127   const std::string& GetBaseName() const;
128
129   /**
130    * @brief Create an object from this type.
131    *
132    * @return the BaseHandle for the newly created object
133    */
134   BaseHandle CreateInstance() const;
135
136   /**
137    * @brief Retrieve the creator function for this type.
138    *
139    * @return the creator function
140    */
141   CreateFunction GetCreator() const;
142
143   /**
144    * @brief Retrieve the actions for this type.
145    *
146    * @param[in] container of action names
147    */
148   void GetActions( NameContainer &container ) const;
149
150   /**
151    * @brief Retrieve the signals for this type.
152    *
153    * @param[in] container of action names
154    */
155   void GetSignals( NameContainer &container ) const;
156
157   /**
158    * @brief Retrieve the event side registered properties for this type.
159    *
160    * @param[in] container of action names
161    */
162   void GetProperties( NameContainer &container ) const;
163
164   // Properties
165
166   /**
167    * @brief Retrieve all the property indices for this type.
168    *
169    * @param[out] indices Container of property indices
170    * @note The container will be cleared
171    */
172   void GetPropertyIndices( Property::IndexContainer& indices ) const;
173
174   /**
175    * @brief Given a property index, retrieve the property name associated with it.
176    *
177    * @param[in] index The property index.
178    * @return The name of the property at the given index.
179    */
180   const std::string& GetPropertyName( Property::Index index ) const;
181
182 public: // Not intended for application developers
183
184   /**
185    * @brief This constructor is used by Dali Get() method.
186    *
187    * @param [in] typeInfo A pointer to a Dali resource
188    */
189   explicit DALI_INTERNAL TypeInfo(Internal::TypeInfo* typeInfo);
190
191 };
192
193 } // namespace Dali
194
195 #endif // __DALI_TYPE_INFO_H__