dali-table-view.h
7.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#ifndef DALI_DEMO_TABLEVIEW_H
#define DALI_DEMO_TABLEVIEW_H
/*
* Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// EXTERNAL INCLUDES
#include <dali-toolkit/dali-toolkit.h>
#include <dali-toolkit/devel-api/controls/popup/popup.h>
#include <dali/dali.h>
// INTERNAL INCLUDES
#include "bubble-animator.h"
#include "example.h"
/**
* Dali-Demo instance
*/
class DaliTableView : public Dali::ConnectionTracker
{
public:
/**
* Constructor
*
* @param application A reference to the application class
*/
DaliTableView(Dali::Application& application);
/**
* Destructor
*/
~DaliTableView() = default;
public:
/**
* Adds an Example to our demo showcase
*
* @param[in] example The Example description.
*
* @note Should be called before the Application MainLoop is started.
*/
void AddExample(Example example);
/**
* Sorts the example list alphabetically by Title if parameter is true.
*
* @param[in] sortAlphabetically If true, example list is sorted alphabetically.
*
* @note Should be called before the Application MainLoop is started.
* @note By default the examples are NOT sorted alphabetically by Title.
*/
void SortAlphabetically(bool sortAlphabetically);
private: // Application callbacks & implementation
static constexpr unsigned int FOCUS_ANIMATION_ACTOR_NUMBER = 2; ///< The number of elements used to form the custom focus effect
/**
* Initialize application.
*
* @param[in] app Application instance
*/
void Initialize(Dali::Application& app);
/**
* Populates the contents (ScrollView) with all the
* Examples that have been Added using the AddExample(...)
* call
*/
void Populate();
/**
* Creates a tile for the main menu.
*
* @param[in] name The unique name for this Tile
* @param[in] title The text caption that appears on the Tile
* @param[in] parentSize Tile's parent size.
* @param[in] position The tiles relative position within a page
*
* @return The Actor for the created tile.
*/
Dali::Actor CreateTile(const std::string& name, const std::string& title, const Dali::Vector3& sizeMultiplier, Dali::Vector2& position);
// Signal handlers
/**
* Signal emitted when any tile has been pressed
*
* @param[in] actor The Actor representing this tile.
* @param[in] event The Touch information.
*
* @return Consume flag
*/
bool OnTilePressed(Dali::Actor actor, const Dali::TouchEvent& event);
/**
* Called by OnTilePressed & Accessibility to do the appropriate action.
*
* @param[in] actor The Actor representing this tile.
* @param[in] state The Touch state
*
* @return Consume flag
*/
bool DoTilePress(Dali::Actor actor, Dali::PointState::Type state);
/**
* Signal emitted when any tile has been hovered
*
* @param[in] actor The Actor representing this tile.
* @param[in] event The HoverEvent
*
* @return Consume flag
*/
bool OnTileHovered(Dali::Actor actor, const Dali::HoverEvent& event);
/**
* Signal emitted when the pressed animation has completed.
*
* @param[in] source The animation source.
*/
void OnPressedAnimationFinished(Dali::Animation& source);
/**
* Signal emitted when scrolling has started.
*
* @param[in] position The current position of the scroll contents.
*/
void OnScrollStart(const Dali::Vector2& position);
/**
* Signal emitted when scrolling has completed.
*
* @param[in] position The current position of the scroll contents.
*/
void OnScrollComplete(const Dali::Vector2& position);
/**
* Signal emitted when any Sensitive Actor has been touched
* (other than those touches consumed by OnTilePressed)
*
* @param[in] actor The Actor touched.
* @param[in] event The Touch information.
*
* @return Consume flag
*/
bool OnScrollTouched(Dali::Actor actor, const Dali::TouchEvent& event);
/**
* Setup the effect on the scroll view
*/
void ApplyScrollViewEffect();
/**
* Apply the cube effect to all the page actors
*/
void ApplyCubeEffectToPages();
/**
* Key event handler
*/
void OnKeyEvent(const Dali::KeyEvent& event);
/**
* @brief Creates and sets up the custom effect used for the keyboard (and mouse) focus.
*/
void CreateFocusEffect();
/**
* Callback when the keyboard focus is going to be changed.
*
* @param[in] current The current focused actor
* @param[in] proposed The actor proposed by the keyboard focus manager to move the focus to
* @param[in] direction The direction to move the focus
* @return The actor to move the keyboard focus to.
*/
Dali::Actor OnKeyboardPreFocusChange(Dali::Actor current, Dali::Actor proposed, Dali::Toolkit::Control::KeyboardFocus::Direction direction);
/**
* Callback when the keyboard focused actor is activated.
*
* @param[in] activatedActor The activated actor
*/
void OnFocusedActorActivated(Dali::Actor activatedActor);
/**
* Callback when the keyboard focus indicator is enabled.
*
* @param[in] actor The keyboard focus indicator.
*/
void OnFocusIndicatorEnabled(Dali::Actor actor);
/**
* Callback when the keyboard focus indicator is disabled.
*
* @param[in] actor The keyboard focus indicator.
*/
void OnFocusIndicatorDisabled(Dali::Actor actor);
/**
* Called when the logo is tapped
*
* @param[in] actor The tapped actor
* @param[in] tap The tap information.
*/
void OnLogoTapped(Dali::Actor actor, const Dali::TapGesture& tap);
private:
Dali::Application& mApplication; ///< Application instance.
Dali::Actor mRootActor; ///< All content (excluding background is anchored to this Actor)
Dali::Animation mPressedAnimation; ///< Button press scaling animation.
Dali::Toolkit::ScrollView mScrollView; ///< ScrollView container (for all Examples)
Dali::Toolkit::ScrollViewEffect mScrollViewEffect; ///< Effect to be applied to the scroll view
Dali::Actor mPressedActor; ///< The currently pressed actor.
Dali::TapGestureDetector mLogoTapDetector; ///< To detect taps on the logo
Dali::Toolkit::Popup mVersionPopup; ///< Displays DALi library version information
BubbleAnimator mBubbleAnimator; ///< Provides bubble animations.
/**
* This struct encapsulates all data relevant to each of the elements used within the custom keyboard focus effect.
*/
struct FocusEffect
{
Dali::Toolkit::ImageView actor; ///< The parent keyboard focus highlight actor
Dali::Animation animation; ///< The animation for the parent keyboard focus highlight actor
};
FocusEffect mFocusEffect[FOCUS_ANIMATION_ACTOR_NUMBER]; ///< The elements used to create the custom focus effect
std::vector<Dali::Actor> mPages; ///< List of pages.
ExampleList mExampleList; ///< List of examples.
float mPageWidth; ///< The width of a page within the scroll-view, used to calculate the domain
int mTotalPages; ///< Total pages within scrollview.
bool mScrolling : 1; ///< Flag indicating whether view is currently being scrolled
bool mSortAlphabetically : 1; ///< Sort examples alphabetically.
};
#endif // DALI_DEMO_TABLEVIEW_H