e66fa54dbd314b1daaf44a90a9cbc9592c5c9957
[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.Diagnostics;
19
20 namespace ElmSharp.Wearable
21 {
22
23     /// <summary>
24     /// The Circle Spinner is a widget to display and handle spinner value by rotary event
25     /// Inherits <see cref="Spinner"/>.
26     /// </summary>
27     public class CircleSpinner : Spinner, IRotaryActionWidget
28     {
29         IntPtr _circleHandle;
30         double _angleRatio = 1.0;
31         CircleSurface _surface;
32
33         /// <summary>
34         /// Creates and initializes a new instance of the Circle Spinner class.
35         /// </summary>
36         /// <param name="parent">The parent of new Circle Spinner instance</param>
37         /// <param name="surface">The surface for drawing circle features for this widget.</param>
38         public CircleSpinner(EvasObject parent, CircleSurface surface) : base()
39         {
40             Debug.Assert(parent == null || surface == null || parent.IsRealized);
41             _surface = surface;
42             Realize(parent);
43         }
44
45         /// <summary>
46         /// Gets the handle for Circle Widget.
47         /// </summary>
48         public virtual IntPtr CircleHandle => RealHandle;
49
50         /// <summary>
51         /// Gets the handle for Circle Surface used in this widget
52         /// </summary>
53         public virtual CircleSurface CircleSurface => _surface;
54
55         /// <summary>
56         /// Sets or gets the circle spinner angle per each spinner value.
57         /// </summary>
58         public double AngleRatio
59         {
60             get
61             {
62                 return _angleRatio;
63             }
64             set
65             {
66                 _angleRatio = value;
67                 Interop.Eext.eext_circle_object_spinner_angle_set(CircleHandle, _angleRatio);
68             }
69         }
70
71         /// <summary>
72         /// Sets or gets the state of the widget, which might be enabled or disabled.
73         /// </summary>
74         public override bool IsEnabled
75         {
76             get
77             {
78                 return !Interop.Eext.eext_circle_object_disabled_get(CircleHandle);
79             }
80             set
81             {
82                 Interop.Eext.eext_circle_object_disabled_set(CircleHandle, !value);
83             }
84         }
85
86         /// <summary>
87         /// Sets or gets the line width of the marker
88         /// </summary>
89         public int MarkerLineWidth
90         {
91             get
92             {
93                 return Interop.Eext.eext_circle_object_item_line_width_get(CircleHandle, "default");
94             }
95             set
96             {
97                 Interop.Eext.eext_circle_object_item_line_width_set(CircleHandle, "default", value);
98             }
99         }
100
101         /// <summary>
102         /// Sets or gets the color of the marker
103         /// </summary>
104         public Color MarkerColor
105         {
106             get
107             {
108                 int r, g, b, a;
109                 Interop.Eext.eext_circle_object_item_color_get(CircleHandle, "default", out r, out g, out b, out a);
110                 return new Color(r, g, b, a);
111             }
112             set
113             {
114                 Interop.Eext.eext_circle_object_item_color_set(CircleHandle, "default", value.R, value.G, value.B, value.A);
115             }
116         }
117
118         /// <summary>
119         /// Sets or gets the radius at which the center of the marker lies
120         /// </summary>
121         public double MarkerRadius
122         {
123             get
124             {
125                 return Interop.Eext.eext_circle_object_item_radius_get(CircleHandle, "default");
126             }
127             set
128             {
129                 Interop.Eext.eext_circle_object_item_radius_set(CircleHandle, "default", value);
130             }
131         }
132
133         /// <summary>
134         /// Creates a widget handle.
135         /// </summary>
136         /// <param name="parent">Parent EvasObject</param>
137         /// <returns>Handle IntPtr</returns>
138         protected override IntPtr CreateHandle(EvasObject parent)
139         {
140             IntPtr handle = base.CreateHandle(parent);
141             _circleHandle = Interop.Eext.eext_circle_object_spinner_add(RealHandle == IntPtr.Zero ? Handle : RealHandle, CircleSurface.Handle);
142             return handle;
143         }
144     }
145 }