164af7a124680d4d0096f21ca5ebda0a64b7151d
[platform/core/csapi/tizenfx.git] / internals / src / EflSharp / EflSharp / CircleSlider.cs
1 using System;
2 using System.ComponentModel;
3 using System.Diagnostics;
4
5 namespace Efl
6 {
7     namespace Ui
8     {
9         namespace Wearable
10         {
11             public class CircleSliderBar : CircleColorPart
12             {
13                 public CircleSliderBar(IntPtr CircleHandle) : base(CircleHandle) { }
14                 public override void SetColor(int r, int g, int b, int a)
15                 {
16                     if (_handle != null)
17                         Interop.Eext.eext_circle_object_color_set(_handle, r, g, b, a);
18                 }
19
20                 public override void GetColor(out int r, out int g, out int b, out int a)
21                 {
22                     r = g = b = a = -1;
23                     if (_handle != null)
24                         Interop.Eext.eext_circle_object_color_get(_handle, out r, out g, out b, out a);
25                 }
26             }
27
28             public class CircleSliderBarBackground : CircleColorPart
29             {
30                 public CircleSliderBarBackground(IntPtr CircleHandle) : base(CircleHandle) { }
31                 public override void SetColor(int r, int g, int b, int a)
32                 {
33                     if (_handle != null)
34                         Interop.Eext.eext_circle_object_item_color_set(_handle, "bg", r, g, b, a);
35                 }
36
37                 public override void GetColor(out int r, out int g, out int b, out int a)
38                 {
39                     r = g = b = a = -1;
40                     if (_handle != null)
41                         Interop.Eext.eext_circle_object_item_color_get(_handle, "bg", out r, out g, out b, out a);
42                 }
43             }
44
45             public class CircleSlider : Efl.Ui.Layout, ICircleWidget
46             {
47                 IntPtr _handle;
48                 public virtual IntPtr CircleHandle => _handle;
49
50                 public event EventHandler Changed;
51                 const string ChangedEventName = "value,changed";
52
53                 public CircleSliderBar Bar;
54                 public CircleSliderBarBackground BarBackground;
55
56                 public CircleSlider(Efl.Ui.Widget parent) : base(parent)
57                 {
58                     _handle = Interop.Eext.eext_circle_object_slider_add(parent.NativeHandle, IntPtr.Zero);
59
60                     Bar = new Efl.Ui.Wearable.CircleSliderBar(_handle);
61                     BarBackground = new Efl.Ui.Wearable.CircleSliderBarBackground(_handle);
62
63                     Interop.Evas.SmartCallback _smartChanged = new Interop.Evas.SmartCallback((d, o, e) =>
64                     {
65                         Changed?.Invoke(this, EventArgs.Empty);
66                     });
67
68                     Interop.Evas.evas_object_smart_callback_add(_handle, ChangedEventName, _smartChanged, IntPtr.Zero);
69
70                     elm_layout_content_set(this.NativeHandle, "efl.swallow.vg", CircleHandle);
71                 }
72
73                 [System.Runtime.InteropServices.DllImport(efl.Libs.Elementary)]
74                 internal static extern bool elm_layout_content_set(IntPtr obj, string swallow, IntPtr content);
75
76                 public override Efl.Object FinalizeAdd()
77                 {
78                     this.SetTheme("circle_slider", null, null);
79                     return this;
80                 }
81
82                 public double Step
83                 {
84                     get
85                     {
86                         return Interop.Eext.eext_circle_object_slider_step_get(CircleHandle);
87                     }
88                     set
89                     {
90                         Interop.Eext.eext_circle_object_slider_step_set(CircleHandle, (double)value);
91                     }
92                 }
93
94                 public bool Disable
95                 {
96                     get => !Enable;
97                     set => Enable = !value;
98                 }
99
100                 public bool Enable
101                 {
102                     get
103                     {
104                         return !Interop.Eext.eext_circle_object_disabled_get(CircleHandle);
105                     }
106                     set
107                     {
108                         Interop.Eext.eext_circle_object_disabled_set(CircleHandle, !value);
109                     }
110                 }
111
112                 public int BarLineWidth
113                 {
114                     get
115                     {
116                         return Interop.Eext.eext_circle_object_line_width_get(CircleHandle);
117                     }
118                     set
119                     {
120                         Interop.Eext.eext_circle_object_line_width_set(CircleHandle, value);
121                     }
122                 }
123
124                 public int BackgroundLineWidth
125                 {
126                     get
127                     {
128                         return Interop.Eext.eext_circle_object_item_line_width_get(CircleHandle, "bg");
129                     }
130                     set
131                     {
132                         Interop.Eext.eext_circle_object_item_line_width_set(CircleHandle, "bg", value);
133                     }
134                 }
135
136                 public double BarAngle
137                 {
138                     get
139                     {
140                         return Interop.Eext.eext_circle_object_angle_get(CircleHandle);
141                     }
142                     set
143                     {
144                         Interop.Eext.eext_circle_object_angle_set(CircleHandle, value);
145                     }
146                 }
147
148                 public double BackgroundAngle
149                 {
150                     get
151                     {
152                         return Interop.Eext.eext_circle_object_item_angle_get(CircleHandle, "bg");
153                     }
154                     set
155                     {
156                         Interop.Eext.eext_circle_object_item_angle_set(CircleHandle, "bg", value);
157                     }
158                 }
159
160                 public double BarAngleOffset
161                 {
162                     get
163                     {
164                         return Interop.Eext.eext_circle_object_angle_offset_get(CircleHandle);
165                     }
166                     set
167                     {
168                         Interop.Eext.eext_circle_object_angle_offset_set(CircleHandle, value);
169                     }
170                 }
171
172                 public double BackgroundAngleOffset
173                 {
174                     get
175                     {
176                         return Interop.Eext.eext_circle_object_item_angle_offset_get(CircleHandle, "bg");
177                     }
178                     set
179                     {
180                         Interop.Eext.eext_circle_object_item_angle_offset_set(CircleHandle, "bg", value);
181                     }
182                 }
183
184                 public double BarAngleMinimum
185                 {
186                     get
187                     {
188                         double min;
189                         double max;
190                         Interop.Eext.eext_circle_object_angle_min_max_get(CircleHandle, out min, out max);
191                         return min;
192                     }
193                     set
194                     {
195                         double max = BarAngleMaximum;
196                         Interop.Eext.eext_circle_object_angle_min_max_set(CircleHandle, (double)value, max);
197                     }
198                 }
199
200                 public double BarAngleMaximum
201                 {
202                     get
203                     {
204                         double min;
205                         double max;
206                         Interop.Eext.eext_circle_object_angle_min_max_get(CircleHandle, out min, out max);
207                         return max;
208                     }
209                     set
210                     {
211                         double min = BarAngleMinimum;
212                         Interop.Eext.eext_circle_object_angle_min_max_set(CircleHandle, min, (double)value);
213                     }
214                 }
215
216                 public double Minimum
217                 {
218                     get
219                     {
220                         double min;
221                         double max;
222                         Interop.Eext.eext_circle_object_value_min_max_get(CircleHandle, out min, out max);
223                         return min;
224                     }
225                     set
226                     {
227                         double max = Maximum;
228                         Interop.Eext.eext_circle_object_value_min_max_set(CircleHandle, (double)value, max);
229                     }
230                 }
231
232                 public double Maximum
233                 {
234                     get
235                     {
236                         double min;
237                         double max;
238                         Interop.Eext.eext_circle_object_value_min_max_get(CircleHandle, out min, out max);
239                         return max;
240                     }
241                     set
242                     {
243                         double min = Minimum;
244                         Interop.Eext.eext_circle_object_value_min_max_set(CircleHandle, min, (double)value);
245                     }
246                 }
247
248                 public double Value
249                 {
250                     get
251                     {
252                         return Interop.Eext.eext_circle_object_value_get(CircleHandle);
253                     }
254                     set
255                     {
256                         Interop.Eext.eext_circle_object_value_set(CircleHandle, (double)value);
257                     }
258                 }
259
260                 public double BarRadius
261                 {
262                     get
263                     {
264                         return Interop.Eext.eext_circle_object_radius_get(CircleHandle);
265                     }
266                     set
267                     {
268                         Interop.Eext.eext_circle_object_radius_set(CircleHandle, (double)value);
269                     }
270                 }
271
272                 public double BackgroundRadius
273                 {
274                     get
275                     {
276                         return Interop.Eext.eext_circle_object_item_radius_get(CircleHandle, "bg");
277                     }
278                     set
279                     {
280                         Interop.Eext.eext_circle_object_item_radius_set(CircleHandle, "bg", value);
281                     }
282                 }
283             }
284         }
285     }
286 }