Replace pepper dali with remote surface
[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/image-view/image-view.h>
28 #include <dali-toolkit/public-api/controls/text-controls/text-label.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, double 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::GetWidgetId
63    */
64   const std::string& GetWidgetId() const;
65
66   /**
67    * @copydoc Dali::WidgetView::WidgetView::GetInstanceId
68    */
69   const std::string& GetInstanceId() const;
70
71   /**
72    * @copydoc Dali::WidgetView::WidgetView::GetContentInfo
73    */
74   const std::string& GetContentInfo();
75
76   /**
77    * @copydoc Dali::WidgetView::WidgetView::GetTitle
78    */
79   const std::string& GetTitle();
80
81   /**
82    * @copydoc Dali::WidgetView::WidgetView::GetUpdatePeriod
83    */
84   double GetUpdatePeriod() const;
85
86   /**
87    * @copydoc Dali::WidgetView::WidgetView::Show
88    */
89   void Show();
90
91   /**
92    * @copydoc Dali::WidgetView::WidgetView::Hide
93    */
94   void Hide();
95
96   /**
97    * @copydoc Dali::WidgetView::WidgetView::CancelTouchEvent
98    */
99   bool CancelTouchEvent();
100
101   /**
102    * @copydoc Dali::WidgetView::WidgetView::SetPreviewEnabled
103    */
104   void SetPreviewEnabled( bool enabled );
105
106   /**
107    * @copydoc Dali::WidgetView::WidgetView::GetPreviewEnabled
108    */
109   bool GetPreviewEnabled() const;
110
111   /**
112    * @copydoc Dali::WidgetView::WidgetView::SetStateTextEnabled
113    */
114   void SetStateTextEnabled( bool enabled );
115
116   /**
117    * @copydoc Dali::WidgetView::WidgetView::GetStateTextEnabled
118    */
119   bool GetStateTextEnabled() const;
120
121   /**
122    * @copydoc Dali::WidgetView::WidgetView::ActivateFaultedWidget
123    */
124   void ActivateFaultedWidget();
125
126   /**
127    * @copydoc Dali::WidgetView::WidgetView::IsWidgetFaulted
128    */
129   bool IsWidgetFaulted();
130
131   /**
132    * @copydoc Dali::WidgetView::WidgetView::SetPermanentDelete
133    */
134   void SetPermanentDelete( bool permanentDelete );
135
136 // ToDo: This funstion will be used for widgetDeletedSignal
137   void RemoveObjectView();
138
139   void SendWidgetEvent( int event );
140
141   bool IsWidgetImageView();
142
143   void UpdateImageSource( tbm_surface_h source );
144
145   void CreateWidgetImageView();
146
147   void ConnectSignal( tizen_remote_surface* surface );
148
149   bool OnTouch( Dali::Actor actor, const Dali::TouchData& event );
150
151   bool OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event );
152
153 public: //Signals
154
155   /**
156    * @copydoc Dali::WidgetView::WidgetView::WidgetAddedSignal
157    */
158   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetAddedSignal();
159
160   /**
161    * @copydoc Dali::WidgetView::WidgetView::WidgetDeletedSignal
162    */
163   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetDeletedSignal();
164
165   /**
166    * @copydoc Dali::WidgetView::WidgetView::WidgetCreationAbortedSignal
167    */
168   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetCreationAbortedSignal();
169
170   /**
171    * @copydoc Dali::WidgetView::WidgetView::WidgetResizedSignal
172    */
173   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetResizedSignal();
174
175   /**
176    * @copydoc Dali::WidgetView::WidgetView::WidgetContentUpdatedSignal
177    */
178   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetContentUpdatedSignal();
179
180   /**
181    * @copydoc Dali::WidgetView::WidgetView::WidgetExtraInfoUpdatedSignal
182    */
183   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetExtraInfoUpdatedSignal();
184
185   /**
186    * @copydoc Dali::WidgetView::WidgetView::WidgetUpdatePeriodChangedSignal
187    */
188   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetUpdatePeriodChangedSignal();
189
190   /**
191    * @copydoc Dali::WidgetView::WidgetView::WidgetFaultedSignal
192    */
193   Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetFaultedSignal();
194
195 protected:
196
197   /**
198    * Construct a new WidgetView.
199    */
200   WidgetView();
201
202   /**
203    * Construct a new WidgetView.
204    */
205   WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, double updatePeriod );
206
207   /**
208    * A reference counted object may only be deleted by calling Unreference()
209    */
210   virtual ~WidgetView();
211
212 private: // From Control
213
214   /**
215    * @copydoc Toolkit::Control::OnInitialize()
216    */
217   virtual void OnInitialize();
218
219 private: // From CustomActorImpl
220
221   /**
222    * @copydoc CustomActorImpl::OnSizeSet( const Vector3& targetSize )
223    */
224   virtual void OnSizeSet( const Vector3& targetSize );
225
226 private:
227
228   // Undefined
229   WidgetView( const WidgetView& );
230
231   // Undefined
232   WidgetView& operator= ( const WidgetView& );
233
234 private:
235
236   Toolkit::ImageView mWidgetImageView;     ///< Widget content
237   Toolkit::ImageView mPreviewImage;   ///< Preview image
238   Toolkit::TextLabel mStateText;      ///< State text
239   Dali::NativeImageSourcePtr mImageSource;
240
241   std::string mWidgetId;
242   std::string mInstanceId;
243   std::string mContentInfo;
244   std::string mTitle;
245
246   bundle* mBundle;
247
248   int mWidth;
249   int mHeight;
250   int mPid;
251   double mUpdatePeriod;
252
253   bool mPreviewEnabled;
254   bool mStateTextEnabled;
255   bool mPermanentDelete;
256
257   tizen_remote_surface* mRemoteSurface;
258
259   // Signals
260   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetAddedSignal;
261   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetDeletedSignal;
262   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetCreationAbortedSignal;
263   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetResizedSignal;
264   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetContentUpdatedSignal;
265   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetExtraInfoUpdatedSignal;
266   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetUpdatePeriodChangedSignal;
267   Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetFaultedSignal;
268 };
269
270 } // namespace Internal
271
272 // Helpers for public-api forwarding methods
273
274 inline Internal::WidgetView& GetImplementation( WidgetView& widgetView )
275 {
276   DALI_ASSERT_ALWAYS( widgetView );
277
278   Dali::RefObject& handle = widgetView.GetImplementation();
279
280   return static_cast<Internal::WidgetView&>( handle );
281 }
282
283 inline const Internal::WidgetView& GetImplementation( const WidgetView& widgetView )
284 {
285   DALI_ASSERT_ALWAYS( widgetView );
286
287   const Dali::RefObject& handle = widgetView.GetImplementation();
288
289   return static_cast<const Internal::WidgetView&>( handle );
290 }
291
292 } // namespace WidgetView
293
294 } // namespace Dali
295
296 #endif // __DALI_WIDGET_VIEW_INTERNAL_WIDGET_VIEW_H__