b1c33216d296be48deb459e75e8eaeff85fff483
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.Components / Utils / Selector.cs
1 /*
2  * Copyright(c) 2019 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 using System.ComponentModel;
18
19 namespace Tizen.NUI.Components
20 {
21     /// <summary>
22     /// Selector class, which is related by Control State, it is base class for other Selector.
23     /// </summary>
24     /// <since_tizen> 6 </since_tizen>
25     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
26     [EditorBrowsable(EditorBrowsableState.Never)]
27     public class Selector<T>
28     {
29
30         /// <summary>
31         /// All State.
32         /// </summary>
33         /// <since_tizen> 6 </since_tizen>
34         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
35         [EditorBrowsable(EditorBrowsableState.Never)]
36         public T All
37         {
38             get;
39             set;
40         }
41         /// <summary>
42         /// Normal State.
43         /// </summary>
44         /// <since_tizen> 6 </since_tizen>
45         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
46         [EditorBrowsable(EditorBrowsableState.Never)]
47         public T Normal
48         {
49             get;
50             set;
51         }
52         /// <summary>
53         /// Pressed State.
54         /// </summary>
55         /// <since_tizen> 6 </since_tizen>
56         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
57         [EditorBrowsable(EditorBrowsableState.Never)]
58         public T Pressed
59         {
60             get;
61             set;
62         }
63         /// <summary>
64         /// Focused State.
65         /// </summary>
66         /// <since_tizen> 6 </since_tizen>
67         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
68         [EditorBrowsable(EditorBrowsableState.Never)]
69         public T Focused
70         {
71             get;
72             set;
73         }
74         /// <summary>
75         /// Selected State.
76         /// </summary>
77         /// <since_tizen> 6 </since_tizen>
78         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
79         [EditorBrowsable(EditorBrowsableState.Never)]
80         public T Selected
81         {
82             get;
83             set;
84         }
85         /// <summary>
86         /// Disabled State.
87         /// </summary>
88         /// <since_tizen> 6 </since_tizen>
89         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
90         [EditorBrowsable(EditorBrowsableState.Never)]
91         public T Disabled
92         {
93             get;
94             set;
95         }
96         /// <summary>
97         /// DisabledFocused State.
98         /// </summary>
99         /// <since_tizen> 6 </since_tizen>
100         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
101         [EditorBrowsable(EditorBrowsableState.Never)]
102         public T DisabledFocused
103         {
104             get;
105             set;
106         }
107         /// <summary>
108         /// SelectedFocused State.
109         /// </summary>
110         /// <since_tizen> 6 </since_tizen>
111         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
112         public T SelectedFocused
113         {
114             get;
115             set;
116         }
117         /// <summary>
118         /// DisabledSelected State.
119         /// </summary>
120         /// <since_tizen> 6 </since_tizen>
121         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
122         [EditorBrowsable(EditorBrowsableState.Never)]
123         public T DisabledSelected
124         {
125             get;
126             set;
127         }
128         /// <summary>
129         /// Other State.
130         /// </summary>
131         /// <since_tizen> 6 </since_tizen>
132         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
133         [EditorBrowsable(EditorBrowsableState.Never)]
134         public T Other
135         {
136             get;
137             set;
138         }
139         /// <summary>
140         /// Get value by State.
141         /// </summary>
142         /// <since_tizen> 6 </since_tizen>
143         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
144         [EditorBrowsable(EditorBrowsableState.Never)]
145         public T GetValue(ControlStates state)
146         {
147             if(All != null)
148             {
149                 return All;
150             }
151             switch(state)
152             {
153                 case ControlStates.Normal:
154                     return Normal != null? Normal : Other;
155                 case ControlStates.Focused:
156                     return Focused != null? Focused : Other;
157                 case ControlStates.Pressed:
158                     return Pressed != null? Pressed : Other;
159                 case ControlStates.Disabled:
160                     return Disabled != null? Disabled : Other;
161                 case ControlStates.Selected:
162                     return Selected != null? Selected : Other;
163                 case ControlStates.DisabledFocused:
164                     return DisabledFocused != null? DisabledFocused : Other;
165                 case ControlStates.DisabledSelected:
166                     return DisabledSelected != null? DisabledSelected : Other;
167                 case ControlStates.SelectedFocused:
168                     return SelectedFocused != null ? SelectedFocused : Other;
169                 default:
170                     return Other;
171             }
172         }
173         /// <summary>
174         /// Clone function.
175         /// </summary>
176         /// <since_tizen> 6 </since_tizen>
177         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
178         [EditorBrowsable(EditorBrowsableState.Never)]
179         public void Clone(Selector<T> selector)
180         {
181             All = selector.All;
182             Normal = selector.Normal;
183             Focused = selector.Focused;
184             Pressed = selector.Pressed;
185             Disabled = selector.Disabled;
186             Selected = selector.Selected;
187             DisabledSelected = selector.DisabledSelected;
188             DisabledFocused = selector.DisabledFocused;
189             SelectedFocused = selector.SelectedFocused;
190             Other = selector.Other;
191         }
192
193     }
194
195     /// <summary>
196     /// Int selector.
197     /// </summary>
198     /// <since_tizen> 6 </since_tizen>
199     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
200     [EditorBrowsable(EditorBrowsableState.Never)]
201     public class IntSelector : Selector<int?>
202     {
203         /// <summary>
204         /// Int selector clone function.
205         /// </summary>
206         /// <since_tizen> 6 </since_tizen>
207         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
208         [EditorBrowsable(EditorBrowsableState.Never)]
209         public IntSelector Clone()
210         {
211             IntSelector selector = new IntSelector();
212             selector.Clone(this);
213             return selector;
214         }
215     }
216
217     /// <summary>
218     /// Float selector.
219     /// </summary>
220     /// <since_tizen> 6 </since_tizen>
221     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
222     [EditorBrowsable(EditorBrowsableState.Never)]
223     public class FloatSelector : Selector<float?>
224     {
225         /// <summary>
226         /// Float selector clone function.
227         /// </summary>
228         /// <since_tizen> 6 </since_tizen>
229         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
230         [EditorBrowsable(EditorBrowsableState.Never)]
231         public FloatSelector Clone()
232         {
233             FloatSelector selector = new FloatSelector();
234             selector.Clone(this);
235             return selector;
236         }
237     }
238     /// <summary>
239     /// Bool selector.
240     /// </summary>
241     /// <since_tizen> 6 </since_tizen>
242     internal class BoolSelector : Selector<bool?>
243     {
244         /// <summary>
245         /// Bool selector clone function.
246         /// </summary>
247         /// <since_tizen> 6 </since_tizen>
248         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
249         [EditorBrowsable(EditorBrowsableState.Never)]
250         public BoolSelector Clone()
251         {
252             BoolSelector selector = new BoolSelector();
253             selector.Clone(this);
254             return selector;
255         }
256     }
257     /// <summary>
258     /// String selector.
259     /// </summary>
260     /// <since_tizen> 6 </since_tizen>
261     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
262     [EditorBrowsable(EditorBrowsableState.Never)]
263     public class StringSelector : Selector<string>
264     {
265         /// <summary>
266         /// String selector clone function.
267         /// </summary>
268         /// <since_tizen> 6 </since_tizen>
269         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
270         [EditorBrowsable(EditorBrowsableState.Never)]
271         public StringSelector Clone()
272         {
273             StringSelector selector = new StringSelector();
274             selector.Clone(this);
275             return selector; 
276         }
277     }
278
279     /// <summary>
280     /// Color selector.
281     /// </summary>
282     /// <since_tizen> 6 </since_tizen>
283     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
284     [EditorBrowsable(EditorBrowsableState.Never)]
285     public class ColorSelector : Selector<Color>
286     {
287         /// <summary>
288         /// Color selector clone function.
289         /// </summary>
290         /// <since_tizen> 6 </since_tizen>
291         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
292         [EditorBrowsable(EditorBrowsableState.Never)]
293         public ColorSelector Clone()
294         {
295             ColorSelector selector = new ColorSelector();
296             selector.Clone(this);
297             return selector;
298         }
299     }
300
301     /// <summary>
302     /// Size2D selector.
303     /// </summary>
304     /// <since_tizen> 6 </since_tizen>
305     internal class Size2DSelector : Selector<Size2D>
306     {
307         /// <summary>
308         /// Size2D selector clone function.
309         /// </summary>
310         /// <since_tizen> 6 </since_tizen>
311         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
312         [EditorBrowsable(EditorBrowsableState.Never)]
313         public Size2DSelector Clone()
314         {
315             Size2DSelector selector = new Size2DSelector();
316             selector.Clone(this);
317             return selector;
318         }
319     }
320     /// <summary>
321     /// Position2D selector.
322     /// </summary>
323     /// <since_tizen> 6 </since_tizen>
324     internal class Position2DSelector : Selector<Position2D>
325     {
326         /// <summary>
327         /// Position2D selector clone function.
328         /// </summary>
329         /// <since_tizen> 6 </since_tizen>
330         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
331         [EditorBrowsable(EditorBrowsableState.Never)]
332         public Position2DSelector Clone()
333         {
334             Position2DSelector selector = new Position2DSelector();
335             selector.Clone(this);
336             return selector;
337         }
338     }
339
340     /// <summary>
341     /// Position selector.
342     /// </summary>
343     /// <since_tizen> 6 </since_tizen>
344     internal class PositionSelector : Selector<Position>
345     {
346         /// <summary>
347         /// Position selector clone function.
348         /// </summary>
349         /// <since_tizen> 6 </since_tizen>
350         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
351         [EditorBrowsable(EditorBrowsableState.Never)]
352         public PositionSelector Clone()
353         {
354             PositionSelector selector = new PositionSelector();
355             selector.Clone(this);
356             return selector;
357         }
358     }
359
360     /// <summary>
361     /// Vector2 selector.
362     /// </summary>
363     /// <since_tizen> 6 </since_tizen>
364     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
365     [EditorBrowsable(EditorBrowsableState.Never)]
366     public class Vector2Selector : Selector<Vector2>
367     {
368         /// <summary>
369         /// Vector selector clone function.
370         /// </summary>
371         /// <since_tizen> 6 </since_tizen>
372         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
373         [EditorBrowsable(EditorBrowsableState.Never)]
374         public Vector2Selector Clone()
375         {
376             Vector2Selector selector = new Vector2Selector();
377             selector.Clone(this);
378             return selector;
379         }
380     }
381
382     /// <summary>
383     /// Vector3 selector.
384     /// </summary>
385     /// <since_tizen> 6 </since_tizen>
386     internal class Vector3Selector : Selector<Vector3>
387     {
388         /// <summary>
389         /// Vector3 selector clone function.
390         /// </summary>
391         /// <since_tizen> 6 </since_tizen>
392         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
393         [EditorBrowsable(EditorBrowsableState.Never)]
394         public Vector3Selector Clone()
395         {
396             Vector3Selector selector = new Vector3Selector();
397             selector.Clone(this);
398             return selector;
399         }
400     }
401
402     /// <summary>
403     /// Rectangle selector.
404     /// </summary>
405     /// <since_tizen> 6 </since_tizen>
406     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
407     [EditorBrowsable(EditorBrowsableState.Never)]
408     public class RectangleSelector : Selector<Rectangle>
409     {
410         /// <summary>
411         /// Rectangle selector clone function.
412         /// </summary>
413         /// <since_tizen> 6 </since_tizen>
414         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
415         [EditorBrowsable(EditorBrowsableState.Never)]
416         public RectangleSelector Clone()
417         {
418             RectangleSelector selector = new RectangleSelector();
419             selector.Clone(this);
420             return selector;
421         }
422     }
423
424     /// <summary>
425     /// Horizontal alignment selector.
426     /// </summary>
427     /// <since_tizen> 6 </since_tizen>
428     internal class HorizontalAlignmentSelector : Selector<HorizontalAlignment?>
429     {
430         /// <summary>
431         /// Horizontal alignment selector clone function.
432         /// </summary>
433         /// <since_tizen> 6 </since_tizen>
434         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
435         [EditorBrowsable(EditorBrowsableState.Never)]
436         public HorizontalAlignmentSelector Clone()
437         {
438             HorizontalAlignmentSelector selector = new HorizontalAlignmentSelector();
439             selector.Clone(this);
440             return selector;
441         }
442     }
443     /// <summary>
444     /// Vertical alignment selector.
445     /// </summary>
446     /// <since_tizen> 6 </since_tizen>
447     internal class VerticalAlignmentSelector : Selector<VerticalAlignment?>
448     {
449         /// <summary>
450         /// Vertical alignment selector clone function.
451         /// </summary>
452         /// <since_tizen> 6 </since_tizen>
453         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
454         [EditorBrowsable(EditorBrowsableState.Never)]
455         public VerticalAlignmentSelector Clone()
456         {
457             VerticalAlignmentSelector selector = new VerticalAlignmentSelector();
458             selector.Clone(this);
459             return selector;
460         }
461     }
462
463     /// <summary>
464     /// AutoScrollStopMode selector.
465     /// </summary>
466     /// <since_tizen> 6 </since_tizen>
467     internal class AutoScrollStopModeSelector : Selector<AutoScrollStopMode?>
468     {
469         /// <summary>
470         /// AutoScrollStopMode selector clone function.
471         /// </summary>
472         /// <since_tizen> 6 </since_tizen>
473         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
474         [EditorBrowsable(EditorBrowsableState.Never)]
475         public AutoScrollStopModeSelector Clone()
476         {
477             AutoScrollStopModeSelector selector = new AutoScrollStopModeSelector();
478             selector.Clone(this);
479             return selector;
480         }
481     }
482
483     /// <summary>
484     /// ResizePolicyType selector.
485     /// </summary>
486     /// <since_tizen> 6 </since_tizen>
487     internal class ResizePolicyTypeSelector : Selector<ResizePolicyType?>
488     {
489         /// <summary>
490         /// ResizePolicyType selector clone function.
491         /// </summary>
492         /// <since_tizen> 6 </since_tizen>
493         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
494         [EditorBrowsable(EditorBrowsableState.Never)]
495         public ResizePolicyTypeSelector Clone()
496         {
497             ResizePolicyTypeSelector selector = new ResizePolicyTypeSelector();
498             selector.Clone(this);
499             return selector;
500         }
501     }
502
503 }