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