Merge "Implement FocusFinder" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / focus-manager / focus-finder.h
1 #ifndef DALI_TOOLKIT_FOCUS_FINDER_H\r
2 #define DALI_TOOLKIT_FOCUS_FINDER_H\r
3 \r
4 /*\r
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.\r
6  *\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  *\r
19  */\r
20 \r
21 // INTERNAL INCLUDES\r
22 #include <dali-toolkit/public-api/controls/control.h>\r
23 \r
24 namespace Dali\r
25 {\r
26 namespace Toolkit\r
27 {\r
28 namespace Internal DALI_INTERNAL\r
29 {\r
30 class FocusFinder;\r
31 }\r
32 \r
33 /**\r
34  * FocusFinder\r
35  * This class used for finding the next focusable actor in a given direction\r
36  * from a actor that currently has focus.\r
37  */\r
38 class DALI_TOOLKIT_API FocusFinder : public BaseHandle\r
39 {\r
40 public:\r
41   /**\r
42    * Create a FocusFinder handle; this can be initialised with FocusFinder::Get()\r
43    * Calling member functions with an uninitialised handle is not allowed.\r
44    */\r
45   FocusFinder();\r
46 \r
47   /**\r
48    * @brief Destructor\r
49    *\r
50    * This is non-virtual since derived Handle types must not contain data or virtual methods.\r
51    */\r
52   ~FocusFinder();\r
53 \r
54   /**\r
55    * @brief Get the singleton of FocusFinder object.\r
56    * @return A handle to the FocusFinder control.\r
57    */\r
58   static FocusFinder Get();\r
59 \r
60   /**\r
61    * Get the nearest focusable actor.\r
62    * @param [in] focusedActor The current focused actor.\r
63    * @param [in] direction The direction.\r
64    * @return The nearest focusable actor, or null if none exists.\r
65    */\r
66   Actor GetNearestFocusableActor(Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction);\r
67 \r
68 private:\r
69   explicit DALI_INTERNAL FocusFinder(Internal::FocusFinder* impl);\r
70 \r
71 }; // class FocusFinder\r
72 \r
73 } // namespace Toolkit\r
74 \r
75 } // namespace Dali\r
76 \r
77 #endif // DALI_TOOLKIT_FOCUS_FINDER_H\r