1 #ifndef DALI_TOOLKIT_INTERNAL_CONTROL_WRAPPER_H
2 #define DALI_TOOLKIT_INTERNAL_CONTROL_WRAPPER_H
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <dali-toolkit/devel-api/controls/control-wrapper.h>
23 #include <dali-toolkit/public-api/controls/control-impl.h>
40 typedef IntrusivePtr<ControlWrapper> ControlWrapperPtr;
43 * @copydoc Toolkit::ControlWrapper
45 class DALI_TOOLKIT_API ControlWrapper : public Control
48 // Flags for the constructor
49 enum CustomControlBehaviour
51 CONTROL_BEHAVIOUR_DEFAULT = Control::CONTROL_BEHAVIOUR_DEFAULT,
52 DISABLE_SIZE_NEGOTIATION = CustomActorImpl::DISABLE_SIZE_NEGOTIATION,
53 REQUIRES_KEYBOARD_NAVIGATION_SUPPORT = Control::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT,
54 DISABLE_STYLE_CHANGE_SIGNALS = Control::DISABLE_STYLE_CHANGE_SIGNALS,
56 LAST_CONTROL_BEHAVIOUR_FLAG
59 static const int CONTROL_BEHAVIOUR_FLAG_COUNT = Log<LAST_CONTROL_BEHAVIOUR_FLAG - 1>::value + 1; ///< Total count of flags
62 * @brief Control constructor
64 * @param[in] behaviourFlags Behavioural flags from CustomControlBehaviour enum
66 ControlWrapper(CustomControlBehaviour behaviourFlags);
69 * Create a new ControlWrapper.
71 * @param[in] typeName The name of the type that is registered with this control
72 * @param[in] controlWrapper The implementation of this control
74 * @return A public handle to the newly allocated ControlWrapper.
76 static Dali::Toolkit::ControlWrapper New(const std::string& typeName, ControlWrapper* controlWrapper);
78 public: // From CustomActorImpl
79 // Size negotiation helpers
82 * @copydoc Dali::CustomActorImpl::RelayoutRequest()
84 void RelayoutRequest();
87 * @copydoc Dali::CustomActorImpl::GetHeightForWidthBase()
89 float GetHeightForWidthBase(float width);
92 * @copydoc Dali::CustomActorImpl::GetWidthForHeightBase()
94 float GetWidthForHeightBase(float height);
97 * @copydoc Dali::CustomActorImpl::CalculateChildSizeBase()
99 float CalculateChildSizeBase(const Dali::Actor& child, Dimension::Type dimension);
102 * @copydoc Dali::CustomActorImpl::RelayoutDependentOnChildrenBase()
104 bool RelayoutDependentOnChildrenBase(Dimension::Type dimension = Dimension::ALL_DIMENSIONS);
106 public: // From Control
108 * @ref Dali::Toolkit::DevelControl::RegisterVisual()
110 void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual);
113 * @ref Dali::Toolkit::DevelControl::RegisterVisual()
115 void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, int depthIndex);
118 * @ref Dali::Toolkit::DevelControl::RegisterVisual()
120 void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, bool enabled);
123 * @ref Dali::Toolkit::DevelControl::RegisterVisual()
125 void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex);
128 * @ref Dali::Toolkit::DevelControl::UnregisterVisual()
130 void UnregisterVisual(Property::Index index);
133 * @ref Dali::Toolkit::DevelControl::GetVisual()
135 Toolkit::Visual::Base GetVisual(Property::Index index) const;
138 * @ref Dali::Toolkit::DevelControl::EnableVisual()
140 void EnableVisual(Property::Index index, bool enable);
143 * @ref Dali::Toolkit::DevelControl::IsVisualEnabled()
145 bool IsVisualEnabled(Property::Index index) const;
148 * @ref Dali::Toolkit::DevelControl::CreateTransition()
150 Dali::Animation CreateTransition(const Toolkit::TransitionData& transitionData);
153 * @copydoc Dali::Toolkit::Internal::Control::EmitKeyInputFocusSignal()
155 void EmitKeyInputFocusSignal(bool focusGained);
158 * @brief Apply the current style
160 * This method is called after the Control has been initialized.
163 void ApplyThemeStyle();
167 * Enable access to non-native type info from native side
168 * @return The type info that was registered on this type
170 Dali::TypeInfo GetTypeInfo();
174 * Protected Destructor
175 * A reference counted object may only be deleted by calling Unreference()
177 virtual ~ControlWrapper();
182 DALI_INTERNAL ControlWrapper(const ControlWrapper&);
185 DALI_INTERNAL ControlWrapper& operator=(const ControlWrapper& rhs);
189 } // namespace Internal
191 // Helpers for public-api forwarding methods
193 inline Toolkit::Internal::ControlWrapper& GetControlWrapperImpl(Toolkit::ControlWrapper& publicObject)
195 DALI_ASSERT_ALWAYS(publicObject);
197 Dali::RefObject& handle = publicObject.GetImplementation();
199 return static_cast<Toolkit::Internal::ControlWrapper&>(handle);
202 inline const Toolkit::Internal::ControlWrapper& GetControlWrapperImpl(const Toolkit::ControlWrapper& publicObject)
204 DALI_ASSERT_ALWAYS(publicObject);
206 const Dali::RefObject& handle = publicObject.GetImplementation();
208 return static_cast<const Toolkit::Internal::ControlWrapper&>(handle);
211 } // namespace Toolkit
215 #endif // DALI_TOOLKIT_INTERNAL_CONTROL_WRAPPER_H