[NUI] TCSACR-226 code change (#1032)
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Label.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 namespace ElmSharp
19 {
20     /// <summary>
21     /// The Label is a widget to display text, with a simple HTML-like markup.
22     /// Inherits Layout.
23     /// </summary>
24     /// <since_tizen> preview </since_tizen>
25     public class Label : Layout
26     {
27         SmartEvent _slideCompleted;
28
29         /// <summary>
30         /// Creates and initializes a new instance of the Label class.
31         /// </summary>
32         /// <param name="parent">The parent is a given container, which will be attached by the Label as a child. It's <see cref="EvasObject"/> type.</param>
33         /// <since_tizen> preview </since_tizen>
34         public Label(EvasObject parent) : base(parent)
35         {
36             _slideCompleted = new SmartEvent(this, this.RealHandle, "slide,end");
37             _slideCompleted.On += (s, e) =>
38             {
39                 SlideCompleted?.Invoke(this, EventArgs.Empty);
40             };
41         }
42
43         /// <summary>
44         /// SlideCompleted will be triggered when the slide is completed.
45         /// </summary>
46         /// <since_tizen> preview </since_tizen>
47         public event EventHandler SlideCompleted;
48
49         /// <summary>
50         /// Sets or gets the wrap width of the label.
51         /// </summary>
52         /// <since_tizen> preview </since_tizen>
53         public int LineWrapWidth
54         {
55             get
56             {
57                 return Interop.Elementary.elm_label_wrap_width_get(RealHandle);
58             }
59             set
60             {
61                 Interop.Elementary.elm_label_wrap_width_set(RealHandle, value);
62             }
63         }
64
65         /// <summary>
66         /// Sets or gets the wrapping behavior of the label.
67         /// </summary>
68         /// <since_tizen> preview </since_tizen>
69         public WrapType LineWrapType
70         {
71             get
72             {
73                 return (WrapType)Interop.Elementary.elm_label_line_wrap_get(RealHandle);
74             }
75             set
76             {
77                 Interop.Elementary.elm_label_line_wrap_set(RealHandle, (int)value);
78                 if (value != WrapType.None)
79                 {
80                     Interop.Evas.evas_object_size_hint_min_get(RealHandle, IntPtr.Zero, out int h);
81                     Interop.Evas.evas_object_size_hint_min_set(RealHandle, 0, h);
82                 }
83             }
84         }
85
86         /// <summary>
87         /// Sets or gets the slide mode of the Label widget.
88         /// </summary>
89         /// <since_tizen> preview </since_tizen>
90         public LabelSlideMode SlideMode
91         {
92             get
93             {
94                 return (LabelSlideMode)Interop.Elementary.elm_label_slide_mode_get(RealHandle);
95             }
96             set
97             {
98                 Interop.Elementary.elm_label_slide_mode_set(RealHandle, (int)value);
99             }
100         }
101
102         /// <summary>
103         /// Sets or gets the slide duration of the label.
104         /// </summary>
105         /// <since_tizen> preview </since_tizen>
106         public double SlideDuration
107         {
108             get
109             {
110                 return Interop.Elementary.elm_label_slide_duration_get(RealHandle);
111             }
112             set
113             {
114                 Interop.Elementary.elm_label_slide_duration_set(RealHandle, value);
115             }
116         }
117
118         /// <summary>
119         /// Sets or gets the slide speed of the label.
120         /// </summary>
121         /// <remarks>
122         /// The speed of the slide animation in px per seconds.
123         /// If you set the duration of the slide using elm_label_slide_duration_set(), you cannot get the correct speed using this function until the label is actually rendered and resized.
124         /// </remarks>
125         /// <seealso cref="SlideDuration"/>
126         /// <since_tizen> preview </since_tizen>
127         public double SlideSpeed
128         {
129             get
130             {
131                 return Interop.Elementary.elm_label_slide_speed_get(RealHandle);
132             }
133             set
134             {
135                 Interop.Elementary.elm_label_slide_speed_set(RealHandle, value);
136             }
137         }
138
139         /// <summary>
140         /// Sets or gets the ellipsis behavior of the label.
141         /// </summary>
142         /// <since_tizen> preview </since_tizen>
143         public bool IsEllipsis
144         {
145             get
146             {
147                 return Interop.Elementary.elm_label_ellipsis_get(RealHandle);
148             }
149             set
150             {
151                 Interop.Elementary.elm_label_ellipsis_set(RealHandle, value);
152             }
153         }
154
155         /// <summary>
156         /// Sets or gets the style of the label text.
157         /// </summary>
158         /// <remarks>
159         /// APIs, elm_label_text_style_user_peek/pop/push, are internal APIs only in Tizen. Available since Tizen_4.0.
160         /// </remarks>
161         /// 
162         /// <since_tizen> preview </since_tizen>
163         public string TextStyle
164         {
165             get
166             {
167                 return Interop.Elementary.elm_label_text_style_user_peek(RealHandle);
168             }
169             set
170             {
171                 if (string.IsNullOrEmpty(value))
172                 {
173                     Interop.Elementary.elm_label_text_style_user_pop(RealHandle);
174                 }
175                 else
176                 {
177                     Interop.Elementary.elm_label_text_style_user_push(RealHandle, value);
178                 }
179             }
180         }
181
182         /// <summary>
183         /// Starts the slide effect.
184         /// </summary>
185         /// <since_tizen> preview </since_tizen>
186         public void PlaySlide()
187         {
188             Interop.Elementary.elm_label_slide_go(RealHandle);
189         }
190
191         /// <summary>
192         /// Sets the content at a part of a given container widget.
193         /// </summary>
194         /// <param name="parent">EvasObject</param>
195         /// <returns>The new object, otherwise null if it cannot be created.</returns>
196         /// <since_tizen> preview </since_tizen>
197         protected override IntPtr CreateHandle(EvasObject parent)
198         {            
199             return Interop.Elementary.elm_label_add(parent.Handle);
200         }
201     }
202
203     /// <summary>
204     /// Enumeration for the slide modes of a label widget.
205     /// </summary>
206     /// <since_tizen> preview </since_tizen>
207     public enum LabelSlideMode
208     {
209         /// <summary>
210         /// No slide effect.
211         /// </summary>
212         None = 0,
213         /// <summary>
214         /// Slide only if the label area is bigger than the text width length.
215         /// </summary>
216         Auto,
217         /// <summary>
218         /// Slide always.
219         /// </summary>
220         Always
221     }
222 }