Release 4.0.0-preview1-00249
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / GenItem.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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;
18
19 namespace ElmSharp
20 {
21     /// <summary>
22     /// Enumeration for select mode of GenItem.
23     /// </summary>
24     public enum GenItemSelectionMode
25     {
26         /// <summary>
27         /// Default select mode.
28         /// </summary>
29         Default,
30
31         /// <summary>
32         /// Always select mode.
33         /// </summary>
34         Always,
35
36         /// <summary>
37         /// No select mode.
38         /// </summary>
39         None,
40
41         /// <summary>
42         /// No select mode with no finger size rule.
43         /// </summary>
44         DisplayOnly
45     }
46
47     /// <summary>
48     /// It inherits <see cref="ItemObject"/>.
49     /// A base class for <see cref="GenGridItem"/> and <see cref="GenListItem"/>.
50     /// It contains genitem class and data to display data.
51     /// </summary>
52     public abstract class GenItem : ItemObject
53     {
54         internal Interop.Elementary.Elm_Tooltip_Item_Content_Cb _tooltipCb;
55         GetTooltipContentDelegate _tooltipContentDelegate = null;
56
57         /// <summary>
58         /// The delegate returning the tooltip contents.
59         /// </summary>
60         public delegate EvasObject GetTooltipContentDelegate();
61
62         internal GenItem(object data, GenItemClass itemClass) : base(IntPtr.Zero)
63         {
64             Data = data;
65             ItemClass = itemClass;
66             _tooltipCb = (d, obj, tooltip, item) => { return TooltipContentDelegate(); };
67         }
68
69         /// <summary>
70         /// Gets the item class that defines how to display data. It returns <see cref="GenItemClass"/> type.
71         /// </summary>
72         public GenItemClass ItemClass { get; protected set; }
73
74         public GetTooltipContentDelegate TooltipContentDelegate
75         {
76             get
77             {
78                 return _tooltipContentDelegate;
79             }
80             set
81             {
82                 _tooltipContentDelegate = value;
83                 UpdateTooltipDelegate();
84             }
85         }
86
87         /// <summary>
88         /// It's a abstract property.
89         /// </summary>
90         public abstract GenItemSelectionMode SelectionMode { get; set; }
91
92         public abstract string Cursor { get; set; }
93         public abstract string CursorStyle { get; set; }
94
95         public abstract bool IsUseEngineCursor { get; set; }
96
97         /// <summary>
98         /// Gets item data that is added through calling <see cref="GenGrid.Append(GenItemClass, object)"/>, <see cref="GenGrid.Prepend(GenItemClass, object)"/> or <see cref="GenGrid.InsertBefore(GenItemClass, object, GenGridItem)"/> methods.
99         /// </summary>
100         public object Data { get; protected set; }
101
102         /// <summary>
103         /// It's a abstract property. It's implemented by <see cref="GenGridItem.IsSelected"/> and <see cref="GenListItem.IsSelected"/>.
104         /// </summary>
105         public abstract bool IsSelected { get; set; }
106
107         /// <summary>
108         /// It's a abstract property. It's implemented by <see cref="GenGridItem.TooltipStyle"/> and <see cref="GenListItem.TooltipStyle"/>.
109         /// </summary>
110         public abstract string TooltipStyle { get; set; }
111
112         public abstract void SetTooltipText(string tooltip);
113         public abstract void UnsetTooltip();
114
115         /// <summary>
116         /// It's a abstract method. It's implemented by <see cref="GenGridItem.Update"/> and <see cref="GenListItem.Update"/>.
117         /// </summary>
118         public abstract void Update();
119
120         /// <summary>
121         /// The override method for delete item class and item data. It's called when the item is deleting.
122         /// </summary>
123         protected override void OnInvalidate()
124         {
125             ItemClass?.SendItemDeleted(Data);
126             Data = null;
127             ItemClass = null;
128         }
129
130         protected abstract void UpdateTooltipDelegate();
131     }
132 }