Merge "Add ALIASES for new DALi doxygen tagging rule to dali.doxy.in" into devel...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / page-turn-view / page-turn-view.h
1 #ifndef __DALI_TOOLKIT_PAGE_TURN_VIEW_H__
2 #define __DALI_TOOLKIT_PAGE_TURN_VIEW_H__
3
4 /*
5  * Copyright (c) 2015 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 // Forward declarations
31 class PageFactory;
32
33 namespace Internal DALI_INTERNAL
34 {
35 class PageTurnView;
36 }
37
38 /**
39  * @brief PageTurnView is a base class of different mode of pageTurnViews ( portrait or landscape )
40  *
41  * Page actors are provided from an external PageFactory
42  * PanGesture is used to activate the page bending, streching and tuning forward/backward
43  *
44  * Signal usage: There are four signals. Two matching pairs for panning and page turning:
45  * PagePanStarted/PagePanFinished and PageTurnStarted/PageTurnFinished. Panning relates to user interaction with
46  * the screen while page turning refers to animation of the page. There are three scenarios for these
47  * events: normal page turn (forwards or backwards), aborted page turn (forwards or backwards)
48  * and pan with no animation. The order of events is as follows:
49  * 1) Normal page turn: PagePanStarted -> PageTurnStarted direction -> PagePanFinished -> PageTurnFinished direction
50  * 2) Aborted page turn: PagePanStarted -> PageTurnStarted direction -> PageTurnStarted opposite direction
51  *                       -> PagePanFinished -> PageTurnFinished opposite direction
52  * 3) Pan with no animation: PagePanStarted -> PagePanFinished
53  * Pan with no animation will occur when the user touches the page in an area that does not start the
54  * page turning.
55  *
56  *  Signals
57  * | %Signal Name     | Method                        |
58  * |------------------|-------------------------------|
59  * | pageTurnStarted  | @ref PageTurnStartedSignal()  |
60  * | pageTurnFinished | @ref PageTurnFinishedSignal() |
61  * | pagePanStarted   | @ref PagePanStartedSignal()   |
62  * | pagePanFinished  | @ref PagePanFinishedSignal()  |
63  *
64  * @since DALi 1.1.4
65  */
66 class DALI_IMPORT_API PageTurnView : public Control
67 {
68 public:
69
70   /**
71    * @brief The start and end property ranges for this control.
72    */
73   enum PropertyRange
74   {
75     PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,
76     PROPERTY_END_INDEX =   PROPERTY_START_INDEX + 1000              ///< Reserve property indices
77   };
78
79   struct Property
80   {
81     enum
82     {
83       PAGE_SIZE = PROPERTY_START_INDEX, ///< name "pageSize",        type Vector2
84       CURRENT_PAGE_ID,                  ///< name "currentPageId",   type Integer
85
86       /**
87        * The two values are the major&minor radius (in pixels) to form an ellipse shape.
88        * The top-left quarter of this ellipse is used to calculate spine normal for simulating shadow.
89        */
90       SPINE_SHADOW,                     ///< name "spineShadow",     type Vector2
91     };
92   };
93
94   /**
95    * Creates an empty PageTurnView handle. Only derived versions can be instantiated.
96    * Calling member function with an uninitialized handle is not allowed.
97    */
98   PageTurnView();
99
100   /**
101    * Copy constructor. Creates another handle that points to the same real object
102    * @param[in] handle Handle to copy from
103    */
104   PageTurnView( const PageTurnView& handle );
105
106   /**
107    * Assignment operator. Changes this handle to point to another real object
108    */
109   PageTurnView& operator=( const PageTurnView& handle );
110
111   /**
112    * @brief Destructor
113    *
114    * This is non-virtual since derived Handle types must not contain data or virtual methods.
115    */
116   ~PageTurnView();
117
118   /**
119    * Downcast an Object handle to PageTurnView.
120    * If handle points to an PageTurnView the downcast produces valid handle.
121    * If not the returned handle is left uninitialized.
122    * @param[in] handle Handle to an object
123    * @return handle to a PageTurnView or an uninitialized handle
124    */
125   static PageTurnView DownCast( BaseHandle handle );
126
127 public: //Signal
128
129   // Page Turned signal, with page index and boolean turning direction (true = forward, false = backward)
130   typedef Signal< void ( PageTurnView, unsigned int, bool ) > PageTurnSignal;
131   typedef Signal< void ( PageTurnView ) > PagePanSignal;
132
133   /**
134    * Signal emitted when a page has started to turn over.
135    * A callback of the following type may be connected:
136    * @code
137    *   void YourCallBackName( PageTurnView pageTurnView, unsigned int pageIndex, bool isTurningForward );
138    * @endcode
139    * @return The signal to connect to
140    */
141   PageTurnSignal& PageTurnStartedSignal();
142
143   /**
144    * Signal emitted when a page has finished turning over.
145    * A callback of the following type may be connected:
146    * @code
147    *   void YourCallBackName( PageTurnView pageTurnView, unsigned int pageIndex, bool isTurningForward );
148    * @endcode
149    * @return The signal to connect to
150    */
151   PageTurnSignal& PageTurnFinishedSignal();
152
153   /**
154    * Signal emitted when a page pan has commenced
155    * A callback of the following type may be connected:
156    * @code
157    *   void YourCallBackName( PageTurnView pageTurnView );
158    * @endcode
159    * @return The signal to connect to
160    */
161   PagePanSignal& PagePanStartedSignal();
162
163   /**
164    * Signal emitted when a page pan has finished
165    * A callback of the following type may be connected:
166    * @code
167    *   void YourCallBackName( PageTurnView pageTurnView );
168    * @endcode
169    * @return The signal to connect to
170    */
171   PagePanSignal& PagePanFinishedSignal();
172
173 public: // Not intended for application developers
174
175   /**
176    * Creates a handle using the Toolkit::Internal implementation.
177    * @param[in]  implementation  The Control implementation.
178    */
179   DALI_INTERNAL PageTurnView(Internal::PageTurnView& implementation);
180
181   /**
182    * Allows the creation of this Control from an Internal::CustomActor pointer.
183    * @param[in]  internal  A pointer to the internal CustomActor.
184    */
185   explicit DALI_INTERNAL PageTurnView(Dali::Internal::CustomActor* internal);
186 };
187
188 } // namespace Toolkit
189
190 } // namespace Dali
191
192 #endif /* __DALI_TOOLKIT_PAGE_TURN_VIEW_H__ */