Merge "Add WebView SetTtsFocus" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-scene-loader / public-api / customization.h
1 #ifndef DALI_SCENE_LOADER_CUSTOMIZATION_STATE_H_
2 #define DALI_SCENE_LOADER_CUSTOMIZATION_STATE_H_
3 /*
4  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 // INTERNAL INCLUDES
21 #include "dali-scene-loader/public-api/api.h"
22
23 // EXTERNAL INCLUDES
24 #include <memory>
25 #include <string>
26 #include "dali/public-api/common/vector-wrapper.h"
27
28 namespace Dali
29 {
30 namespace SceneLoader
31 {
32 /**
33  * @brief Offers a description of an aspect of the scene that can be customized:
34  *     the number of options, and the name of the nodes that are registered
35  *     for the tag, whose children will be shown / hidden based on selection.
36  */
37 struct DALI_SCENE_LOADER_API Customization
38 {
39   using Tag        = std::string;
40   using OptionType = uint32_t;
41
42   /**
43    * @brief A mapping of customizations to tags.
44    */
45   struct DALI_SCENE_LOADER_API Map
46   {
47     Map();
48     ~Map();
49
50     /**
51      * @brief Maps the given @a customization to the given @a tag, overwriting any previous mapping to the same tag.
52      * @return Pointer to the inserted (or pre-existing) Customization instance.
53      */
54     Customization* Set(Tag tag, Customization&& customization);
55
56     /**
57      * @brief Attempts to retrieve a const Customization based on the given @a tag.
58      */
59     const Customization* Get(Tag tag) const;
60
61     /**
62      * @brief Attempts to retrieve a Customization based on the given @a tag.
63      */
64     Customization* Get(Tag tag);
65
66     /**
67      * @brief Returns the number of elements.
68      */
69     uint32_t Size() const;
70
71     /*
72      * @brief Removes every element from the Map.
73      */
74     void Clear();
75
76   private:
77     struct Impl;
78     const std::unique_ptr<Impl> mImpl;
79   };
80
81   /**
82    * @brief A mapping of choices - indices of children of customization nodes to use - to tags.
83    */
84   struct DALI_SCENE_LOADER_API Choices
85   {
86     Choices();
87     ~Choices();
88
89     /**
90      * @brief Maps the given @a option to the given @a tag, overwriting any previous mapping to the same tag.
91      */
92     void Set(Tag tag, OptionType option);
93
94     /**
95      * @brief Attempts to retrieve a Customization based on the given @a tag. Returns NONE if @a tag is not known.
96      */
97     OptionType Get(Tag tag) const;
98
99     /**
100      * @brief Returns the number of elements.
101      */
102     uint32_t Size() const;
103
104     /*
105      * @brief Removes every element from the underlying map.
106      */
107     void Clear();
108
109   private:
110     struct Impl;
111     const std::unique_ptr<Impl> mImpl;
112   };
113
114   static const OptionType NONE = OptionType(-1);
115
116   OptionType               numOptions = 0;
117   std::vector<std::string> nodes; // to apply option to.
118 };
119
120 } // namespace SceneLoader
121 } // namespace Dali
122
123 #endif //DALI_SCENE_LOADER_CUSTOMIZATION_STATE_H_