Add video view control
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / video-view / video-view.h
1 #ifndef __DALI_TOOLKIT_VIDEO_VIEW_H__
2 #define __DALI_TOOLKIT_VIDEO_VIEW_H__
3
4 /*
5  * Copyright (c) 2016 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 // INTERNAL INCLUDES
22 #include <dali-toolkit/public-api/controls/control.h>
23
24 namespace Dali
25 {
26
27 namespace Toolkit
28 {
29
30 namespace Internal DALI_INTERNAL
31 {
32   class VideoView;
33 } // namespace Internal
34
35 /**
36  * @addtogroup dali_toolkit_controls_video_view
37  * @{
38  */
39
40 /**
41  * @brief VideoView is a control for video playback and display.
42  *
43  * For working VideoView, a video plugin for a platform should be provided.
44  *
45  * Signals
46  * | %Signal Name  | Method                  |
47  * |---------------|-------------------------|
48  * | finished      | @ref FinishedSignal()   |
49  * @SINCE_1_1.38
50  *
51  * Actions
52  * | %Action Name    | Attributes                                         | Description                                             |
53  * |-----------------|----------------------------------------------------|---------------------------------------------------------|
54  * | videoPlay       | Doesn't have attributes                            | Plays video. See @ref DoAction()                        |
55  * | videoPause      | Doesn't have attributes                            | Pauses video. See @ref DoAction()                       |
56  * | videoStop       | Doesn't have attributes                            | Stops video. See @ref DoAction()                        |
57  * | videoForward    | The position ( millisecond ) for forward playback  | Sets forward position for playback. See @ref DoAction() |
58  * | videoBackward   | The position ( millisecond ) for backward playback | Sets backward position for playback. See @ref DoAction()|
59  * @SINCE_1_1.38
60  *
61  */
62 class DALI_IMPORT_API VideoView: public Control
63 {
64 public:
65
66   // Signal
67   typedef Signal< void (VideoView&) > VideoViewSignalType; ///< Video playback finished signal type @ SINCE_1_1.38
68
69   enum PropertyRange
70   {
71     PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,  ///< @SINCE_1_0.0
72   };
73
74   struct Property
75   {
76     enum
77     {
78       /**
79        * @brief name "video", video file url as string type or Property::Map
80        * @SINCE_1_1.38
81        */
82       VIDEO = PROPERTY_START_INDEX,
83
84      /**
85        * @brief name "looping", looping status, true or false
86        * @SINCE_1_1.38
87        */
88       LOOPING,
89
90      /**
91        * @brief name "muted", mute status, true or false
92        * @SINCE_1_1.38
93        */
94       MUTED,
95
96      /**
97        * @brief name "volume", left and right volume scalar as float type, Property::Map with two values ( "left" and "right" )
98        * @SINCE_1_1.38
99        */
100       VOLUME
101     };
102   };
103
104 public:
105
106   /**
107    * @brief Creates an initialized VideoView.
108    * @SINCE_1_1.38
109    * @return A handle to a newly allocated Dali ImageView
110    *
111    * @note VideoView will not display anything
112    */
113   static VideoView New();
114
115   /**
116    * @brief Creates an initialized VideoView.
117    * If the string is empty, VideoView will not display anything
118    *
119    * @SINCE_1_1.38
120    * @param[in] url The url of the video resource to display
121    * @return A handle to a newly allocated Dali VideoView
122    */
123   static VideoView New( const std::string& url );
124
125   /**
126    * @brief Create an uninitialized VideoView
127    * @SINCE_1_1.38
128    */
129   VideoView();
130
131   /**
132    * @brief Destructor
133    *
134    * This is non-virtual since derived Handel types must not contain data or virtual methods
135    * @SINCE_1_1.38
136    */
137   ~VideoView();
138
139   /*
140    * @brief Copy constructor
141    *
142    * @SINCE_1_1.38
143    * @param[in] videoView VideoView to copy. The copied VideoView will point at the same implementation
144    */
145   VideoView( const VideoView& videoView );
146
147   /**
148    * @brief Assignment operator.
149    *
150    * @SINCE_1_1.38
151    * @param[in] videoView The VideoView to assign from.
152    * @return The updated VideoView.
153    */
154   VideoView& operator=( const VideoView& videoView );
155
156   /**
157    * @brief Downcast a handle to VideoView handle.
158    *
159    * If handle points to a VideoView the downcast produces valid
160    * handle. If not the returned handle is left uninitialized.
161    *
162    * @SINCE_1_1.38
163    * @param[in] handle Handle to an object
164    * @return handle to a VideoView or an uninitialized handle
165    */
166   static VideoView DownCast( BaseHandle handle );
167
168   /**
169    * @brief Starts the video playback.
170    * @SINCE_1_1.38
171    */
172   void Play();
173
174   /**
175    * @brief Pauses the video playback.
176    * @SINCE_1_1.38
177    */
178   void Pause();
179
180   /**
181    * @brief Stops the video playback.
182    * @SINCE_1_1.38
183    */
184   void Stop();
185
186   /**
187    * @brief Seeks forward by the specified number of milliseconds.
188    *
189    * @SINCE_1_1.38
190    * @param[in] millisecond The position for forward playback
191    */
192   void Forward( int millisecond );
193
194   /**
195    * @brief Seeks backward by the specified number of milliseconds.
196    *
197    * @SINCE_1_1.38
198    * @param[in] millisecond The position for backward playback
199    */
200   void Backward( int millisecond );
201
202   /**
203    * @brief Connect to this signal to be notified when a video playback have finished.
204    *
205    * @SINCE_1_1.38
206    * @return A signal object to connect with.
207    */
208   VideoViewSignalType& FinishedSignal();
209
210 public: // Not intended for application developers
211
212   /**
213    * @brief Creates a handle using the Toolkit::Internal implementation.
214    *
215    * @SINCE_1_1.38
216    * @param[in] implementation The VideoView implementation.
217    */
218   DALI_INTERNAL VideoView( Internal::VideoView& implementation );
219
220   /**
221    * @brief Allows the creation of this VideoView from an Internal::CustomActor pointer.
222    *
223    * @SINCE_1_1.38
224    * @param[in] internal A pointer to the internal CustomActor.
225    */
226   DALI_INTERNAL VideoView( Dali::Internal::CustomActor* internal );
227
228 };
229
230 /**
231  * @}
232  */
233
234 } // namespace Toolkit
235
236 } // namespace Dali
237
238 #endif // __DALI_TOOLKIT_VIDEO_VIEW_H__