651e6b439e5c16e387c651843b8017572f4ec115
[platform/core/uifw/widget-viewer-dali.git] / internal / widget_view / widget_view_impl.h
1 #ifndef __DALI_WIDGET_VIEW_INTERNAL_WIDGET_VIEW_H__
2 #define __DALI_WIDGET_VIEW_INTERNAL_WIDGET_VIEW_H__
3
4 /*
5  * Samsung API
6  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
7  *
8  * Licensed under the Flora License, Version 1.1 (the License);
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://floralicense.org/license/
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an AS IS BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20
21 // INTERNAL INCLUDES
22 #include <public_api/widget_view/widget_view.h>
23
24 // EXTERNAL INCLUDES
25 #include <dali/public-api/adaptor-framework/native-image-source.h>
26 #include <dali-toolkit/public-api/controls/control-impl.h>
27 #include <dali-toolkit/public-api/controls/text-controls/text-label.h>
28 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
29 #include <wayland-extension/tizen-remote-surface-client-protocol.h>
30 #include <tbm_surface.h>
31 #include <bundle.h>
32
33 namespace Dali
34 {
35
36 namespace WidgetView
37 {
38
39 namespace Internal
40 {
41
42 class WidgetView : public Toolkit::Internal::Control
43 {
44 public:
45
46   /**
47    * @copydoc Dali::WidgetView::WidgetView::New
48    */
49   static Dali::WidgetView::WidgetView New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod );
50
51   /**
52    * @copydoc Dali::WidgetView::WidgetView::PauseWidget
53    */
54   bool PauseWidget();
55
56   /**
57    * @copydoc Dali::WidgetView::WidgetView::ResumeWidget
58    */
59   bool ResumeWidget();
60
61   /**
62    * @copydoc Dali::WidgetView::WidgetView::CancelTouchEvent
63    */
64   bool CancelTouchEvent();
65
66   /**
67    * @copydoc Dali::WidgetView::WidgetView::ActivateFaultedWidget
68    */
69   void ActivateFaultedWidget();
70
71   void SendWidgetEvent( int event );
72
73 public: // Internal API
74
75   /**
76    * @brief Called when a property of an object of this type is set.
77    * @SINCE_1_1.38
78    * @param[in] object The object whose property is set.
79    * @param[in] index The property index.
80    * @param[in] value The new property value.
81    */
82   static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value );
83
84   /**
85    * @brief Called to retrieve a property of an object of this type.
86    * @SINCE_1_1.38
87    * @param[in] object The object whose property is to be retrieved.
88    * @param[in] index The property index.
89    * @return The current value of the property.
90    */
91   static Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex );
92
93   /**
94    * @brief Performs actions as requested using the action name.
95    * @SINCE_1_1.38
96    * @param[in] object The object on which to perform the action.
97    * @param[in] actionName The action to perform.
98    * @param[in] attributes The attributes with which to perfrom this action.
99    * @return True if action has been accepted by this control
100    */
101   static bool DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes );
102
103   static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor );
104
105   const std::string& GetWidgetId() const;
106
107   const std::string& GetInstanceId() const;
108
109   const std::string& GetContentInfo();
110
111   const std::string& GetTitle();
112
113   float GetUpdatePeriod() const;
114
115   void ShowPreview( bool show );
116
117   bool IsPreviewVisible();
118
119   void ShowStateText( bool show );
120
121   bool IsStateTextVisible();
122
123   bool IsWidgetFaulted();
124
125   void SetPermanentDelete( bool permanentDelete );
126
127 // ToDo: This funstion will be used for widgetDeletedSignal
128   void RemoveObjectView();
129
130   bool IsPermanentDelete();
131
132   bool IsWidgetImageView();
133
134   void UpdateImageSource( tbm_surface_h source );
135
136   void CreateWidgetImageView();
137
138   void ConnectSignal( tizen_remote_surface* surface );
139
140   bool OnTouch( Dali::Actor actor, const Dali::TouchData& event );
141
142   bool OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event );
143
144 public: //Signals
145
146   /**
147    * @copydoc Dali::WidgetView::WidgetView::WidgetAddedSignal
148    */
149   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetAddedSignal();
150
151   /**
152    * @copydoc Dali::WidgetView::WidgetView::WidgetDeletedSignal
153    */
154   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetDeletedSignal();
155
156   /**
157    * @copydoc Dali::WidgetView::WidgetView::WidgetCreationAbortedSignal
158    */
159   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetCreationAbortedSignal();
160
161   /**
162    * @copydoc Dali::WidgetView::WidgetView::WidgetContentUpdatedSignal
163    */
164   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetContentUpdatedSignal();
165
166   /**
167    * @copydoc Dali::WidgetView::WidgetView::WidgetUpdatePeriodChangedSignal
168    */
169   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetUpdatePeriodChangedSignal();
170
171   /**
172    * @copydoc Dali::WidgetView::WidgetView::WidgetFaultedSignal
173    */
174   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetFaultedSignal();
175
176 protected:
177
178   /**
179    * Construct a new WidgetView.
180    */
181   WidgetView();
182
183   /**
184    * Construct a new WidgetView.
185    */
186   WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod );
187
188   /**
189    * A reference counted object may only be deleted by calling Unreference()
190    */
191   virtual ~WidgetView();
192
193 private: // From Control
194
195   /**
196    * @copydoc Toolkit::Control::OnInitialize()
197    */
198   virtual void OnInitialize();
199
200   /**
201    * @copydoc Toolkit::Control::OnStageConnect()
202    */
203   virtual void OnStageConnection( int depth );
204
205   /**
206    * @copydoc Toolkit::Control::OnStageDisconnection()
207    */
208   virtual void OnStageDisconnection();
209
210   /**
211    * @copydoc Toolkit::Control::OnSizeSet()
212    */
213   virtual void OnSizeSet( const Vector3& targetSize );
214
215   /**
216    * @copydoc Toolkit::Control::GetNaturalSize
217    */
218   virtual Vector3 GetNaturalSize();
219
220   /**
221    * @copydoc Toolkit::Control::GetHeightForWidth()
222    */
223   virtual float GetHeightForWidth( float width );
224
225   /**
226    * @copydoc Toolkit::Control::GetWidthForHeight()
227    */
228   virtual float GetWidthForHeight( float height );
229
230 private:
231
232   // Undefined
233   WidgetView( const WidgetView& );
234
235   // Undefined
236   WidgetView& operator= ( const WidgetView& );
237
238 private:
239
240   Toolkit::ImageView mWidgetImageView;     ///< Widget content
241   Toolkit::ImageView mPreviewImage;   ///< Preview image
242   Toolkit::TextLabel mStateText;      ///< State text
243   Dali::NativeImageSourcePtr mImageSource;
244
245   std::string mWidgetId;
246   std::string mInstanceId;
247   std::string mContentInfo;
248   std::string mTitle;
249
250   bundle* mBundle;
251
252   int mWidth;
253   int mHeight;
254   int mPid;
255   float mUpdatePeriod;
256
257   bool mPreviewVisible;
258   bool mStateTextVisible;
259   bool mPermanentDelete;
260
261   tizen_remote_surface* mRemoteSurface;
262
263   // Signals
264   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetAddedSignal;
265   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetDeletedSignal;
266   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetCreationAbortedSignal;
267   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetContentUpdatedSignal;
268   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetUpdatePeriodChangedSignal;
269   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetFaultedSignal;
270 };
271
272 } // namespace Internal
273
274 // Helpers for public-api forwarding methods
275
276 inline Internal::WidgetView& GetImplementation( WidgetView& widgetView )
277 {
278   DALI_ASSERT_ALWAYS( widgetView );
279
280   Dali::RefObject& handle = widgetView.GetImplementation();
281
282   return static_cast<Internal::WidgetView&>( handle );
283 }
284
285 inline const Internal::WidgetView& GetImplementation( const WidgetView& widgetView )
286 {
287   DALI_ASSERT_ALWAYS( widgetView );
288
289   const Dali::RefObject& handle = widgetView.GetImplementation();
290
291   return static_cast<const Internal::WidgetView&>( handle );
292 }
293
294 } // namespace WidgetView
295
296 } // namespace Dali
297
298 #endif // __DALI_WIDGET_VIEW_INTERNAL_WIDGET_VIEW_H__