58272d1e5b5af43e54266168bcae2afba19d9f98
[platform/core/csapi/tizenfx.git] / src / ElmSharp.Wearable / ElmSharp.Wearable / CircleSpinner.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 using System.ComponentModel;
19 using System.Diagnostics;
20
21 namespace ElmSharp.Wearable
22 {
23
24     /// <summary>
25     /// The Circle Spinner is a widget to display and handle the spinner value by the Rotary event.
26     /// Inherits <see cref="Spinner"/>.
27     /// </summary>
28     /// <since_tizen> preview </since_tizen>
29     public class CircleSpinner : Spinner, IRotaryActionWidget
30     {
31         IntPtr _circleHandle;
32         double _angleRatio = -1.0;
33         CircleSurface _surface;
34
35         /// <summary>
36         /// Creates and initializes a new instance of the Circle Spinner class.
37         /// </summary>
38         /// <param name="parent">The parent of the new Circle Spinner instance.</param>
39         /// <param name="surface">The surface for drawing circle features for this widget.</param>
40         /// <since_tizen> preview </since_tizen>
41         public CircleSpinner(EvasObject parent, CircleSurface surface) : base()
42         {
43             Debug.Assert(parent == null || surface == null || parent.IsRealized);
44             _surface = surface;
45             Realize(parent);
46         }
47
48         /// <summary>
49         /// Creates and initializes a new instance of the Circle Spinner class.
50         /// </summary>
51         /// <param name="parent">The parent of the new Circle Spinner instance.</param>
52         /// <since_tizen> preview </since_tizen>
53         [Obsolete("It is not safe for guess circle surface from parent and create new surface by every new widget")]
54         [EditorBrowsable(EditorBrowsableState.Never)]
55         public CircleSpinner(EvasObject parent) : this(parent, CircleSurface.CreateCircleSurface(parent))
56         {
57             ((IRotaryActionWidget)this).Activate();
58         }
59
60         /// <summary>
61         /// Gets the handle for Circle widget.
62         /// </summary>
63         /// <since_tizen> preview </since_tizen>
64         public virtual IntPtr CircleHandle => _circleHandle;
65
66         /// <summary>
67         /// Gets the handle for the circle surface used in this widget.
68         /// </summary>
69         /// <since_tizen> preview </since_tizen>
70         public virtual CircleSurface CircleSurface => _surface;
71
72         /// <summary>
73         /// Sets or gets the circle spinner angle per each spinner value.
74         /// </summary>
75         /// <since_tizen> preview </since_tizen>
76         [Obsolete("Use Step")]
77         [EditorBrowsable(EditorBrowsableState.Never)]
78         public double AngleRatio
79         {
80             get
81             {
82                 if(_angleRatio <= 0)
83                 {
84                     if(Maximum == Minimum)
85                     {
86                         return 0.0;
87                     }
88                     else
89                     {
90                         return 360/(Maximum - Minimum);
91                     }
92                 }
93
94                 return _angleRatio;
95             }
96             set
97             {
98                 if(value > 0)
99                 {
100                     if (_angleRatio == value) return;
101
102                     _angleRatio = value;
103
104                     Interop.Eext.eext_circle_object_spinner_angle_set(CircleHandle, _angleRatio);
105                 }
106             }
107         }
108
109         /// <summary>
110         /// Sets or gets the disabled state of this widget.
111         /// </summary>
112         /// <since_tizen> preview </since_tizen>
113         [Obsolete("Use IsEnabled")]
114         [EditorBrowsable(EditorBrowsableState.Never)]
115         public bool Disabled
116         {
117             get => !IsEnabled;
118             set => IsEnabled = !value;
119         }
120
121         /// <summary>
122         /// Sets or gets the state of the widget, which might be enabled or disabled.
123         /// </summary>
124         /// <since_tizen> preview </since_tizen>
125         public override bool IsEnabled
126         {
127             get
128             {
129                 return !Interop.Eext.eext_circle_object_disabled_get(CircleHandle);
130             }
131             set
132             {
133                 Interop.Eext.eext_circle_object_disabled_set(CircleHandle, !value);
134             }
135         }
136
137         /// <summary>
138         /// Sets or gets the line width of the marker.
139         /// </summary>
140         /// <since_tizen> preview </since_tizen>
141         public int MarkerLineWidth
142         {
143             get
144             {
145                 return Interop.Eext.eext_circle_object_item_line_width_get(CircleHandle, "default");
146             }
147             set
148             {
149                 Interop.Eext.eext_circle_object_item_line_width_set(CircleHandle, "default", value);
150             }
151         }
152
153         /// <summary>
154         /// Sets or gets the color of the marker.
155         /// </summary>
156         /// <since_tizen> preview </since_tizen>
157         public Color MarkerColor
158         {
159             get
160             {
161                 int r, g, b, a;
162                 Interop.Eext.eext_circle_object_item_color_get(CircleHandle, "default", out r, out g, out b, out a);
163                 return new Color(r, g, b, a);
164             }
165             set
166             {
167                 Interop.Eext.eext_circle_object_item_color_set(CircleHandle, "default", value.R, value.G, value.B, value.A);
168             }
169         }
170
171         /// <summary>
172         /// Sets or gets the radius at which the center of the marker lies.
173         /// </summary>
174         /// <since_tizen> preview </since_tizen>
175         public double MarkerRadius
176         {
177             get
178             {
179                 return Interop.Eext.eext_circle_object_item_radius_get(CircleHandle, "default");
180             }
181             set
182             {
183                 Interop.Eext.eext_circle_object_item_radius_set(CircleHandle, "default", value);
184             }
185         }
186
187         /// <summary>
188         /// Creates a widget handle.
189         /// </summary>
190         /// <param name="parent">Parent EvasObject.</param>
191         /// <returns>Handle IntPtr.</returns>
192         /// <since_tizen> preview </since_tizen>
193         protected override IntPtr CreateHandle(EvasObject parent)
194         {
195             IntPtr handle = base.CreateHandle(parent);
196             _circleHandle = Interop.Eext.eext_circle_object_spinner_add(RealHandle == IntPtr.Zero ? handle : RealHandle, CircleSurface.Handle);
197             return handle;
198         }
199     }
200 }