2 * Copyright(c) 2017 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 namespace Tizen.NUI.UIComponents
22 using System.Runtime.InteropServices;
23 using Tizen.NUI.BaseComponents;
26 /// The slider is a control to enable sliding an indicator between two values.
28 /// <since_tizen> 3 </since_tizen>
29 public class Slider : View
31 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
33 internal Slider(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Slider_SWIGUpcast(cPtr), cMemoryOwn)
35 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
38 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Slider obj)
40 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
46 /// <since_tizen> 3 </since_tizen>
47 protected override void Dispose(DisposeTypes type)
54 if (type == DisposeTypes.Explicit)
57 //Release your own managed resources here.
58 //You should release all of your own disposable objects here.
62 //Release your own unmanaged resources here.
63 //You should not access any managed member here except static instance.
64 //because the execution order of Finalizes is non-deterministic.
66 if (_sliderValueChangedCallbackDelegate != null)
68 ValueChangedSignal().Disconnect(_sliderValueChangedCallbackDelegate);
71 if (_sliderSlidingFinishedCallbackDelegate != null)
73 SlidingFinishedSignal().Disconnect(_sliderSlidingFinishedCallbackDelegate);
76 if (_sliderMarkReachedCallbackDelegate != null)
78 MarkReachedSignal().Disconnect(_sliderMarkReachedCallbackDelegate);
81 if (swigCPtr.Handle != global::System.IntPtr.Zero)
86 NDalicPINVOKE.delete_Slider(swigCPtr);
88 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
95 /// The ValueChanged event arguments.
97 /// <since_tizen> 3 </since_tizen>
98 public class ValueChangedEventArgs : EventArgs
100 private Slider _slider;
101 private float _slideValue;
106 /// <since_tizen> 3 </since_tizen>
120 /// The slider value.
122 /// <since_tizen> 3 </since_tizen>
123 public float SlideValue
137 /// The SlidingFinished event arguments.
139 /// <since_tizen> 3 </since_tizen>
140 public class SlidingFinishedEventArgs : EventArgs
142 private Slider _slider;
143 private float _slideValue;
148 /// <since_tizen> 3 </since_tizen>
162 /// The slider value.
164 /// <since_tizen> 3 </since_tizen>
165 public float SlideValue
179 /// The MarkReached event arguments.
181 /// <since_tizen> 3 </since_tizen>
182 public class MarkReachedEventArgs : EventArgs
184 private Slider _slider;
185 private int _slideValue;
190 /// <since_tizen> 3 </since_tizen>
204 /// The slider value.
206 /// <since_tizen> 3 </since_tizen>
207 public int SlideValue
221 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
222 private delegate bool ValueChangedCallbackDelegate(IntPtr slider, float slideValue);
223 private EventHandlerWithReturnType<object, ValueChangedEventArgs, bool> _sliderValueChangedEventHandler;
224 private ValueChangedCallbackDelegate _sliderValueChangedCallbackDelegate;
226 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
227 private delegate bool SlidingFinishedCallbackDelegate(IntPtr slider, float slideValue);
228 private EventHandlerWithReturnType<object, SlidingFinishedEventArgs, bool> _sliderSlidingFinishedEventHandler;
229 private SlidingFinishedCallbackDelegate _sliderSlidingFinishedCallbackDelegate;
231 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
232 private delegate bool MarkReachedCallbackDelegate(IntPtr slider, int slideValue);
233 private EventHandlerWithReturnType<object, MarkReachedEventArgs, bool> _sliderMarkReachedEventHandler;
234 private MarkReachedCallbackDelegate _sliderMarkReachedCallbackDelegate;
237 /// An event emitted when the slider value changes.
239 /// <since_tizen> 3 </since_tizen>
240 public event EventHandlerWithReturnType<object, ValueChangedEventArgs, bool> ValueChanged
244 if (_sliderValueChangedEventHandler == null)
246 _sliderValueChangedCallbackDelegate = (OnValueChanged);
247 ValueChangedSignal().Connect(_sliderValueChangedCallbackDelegate);
249 _sliderValueChangedEventHandler += value;
253 _sliderValueChangedEventHandler -= value;
254 if (_sliderValueChangedEventHandler == null && ValueChangedSignal().Empty() == false)
256 ValueChangedSignal().Disconnect(_sliderValueChangedCallbackDelegate);
261 // Callback for Slider ValueChanged signal
262 private bool OnValueChanged(IntPtr slider, float slideValue)
264 ValueChangedEventArgs e = new ValueChangedEventArgs();
266 // Populate all members of "e" (ValueChangedEventArgs) with real page
267 e.Slider = Slider.GetSliderFromPtr(slider);
268 e.SlideValue = slideValue;
270 if (_sliderValueChangedEventHandler != null)
272 //here we send all page to user event handlers
273 return _sliderValueChangedEventHandler(this, e);
279 /// An event emitted when the sliding is finished.
281 /// <since_tizen> 3 </since_tizen>
282 public event EventHandlerWithReturnType<object, SlidingFinishedEventArgs, bool> SlidingFinished
286 if (_sliderSlidingFinishedEventHandler == null)
288 _sliderSlidingFinishedCallbackDelegate = (OnSlidingFinished);
289 SlidingFinishedSignal().Connect(_sliderSlidingFinishedCallbackDelegate);
291 _sliderSlidingFinishedEventHandler += value;
295 _sliderSlidingFinishedEventHandler -= value;
296 if (_sliderSlidingFinishedEventHandler == null && SlidingFinishedSignal().Empty() == false)
298 SlidingFinishedSignal().Disconnect(_sliderSlidingFinishedCallbackDelegate);
303 // Callback for Slider SlidingFinished signal
304 private bool OnSlidingFinished(IntPtr slider, float slideValue)
306 SlidingFinishedEventArgs e = new SlidingFinishedEventArgs();
308 // Populate all members of "e" (SlidingFinishedEventArgs) with real page
309 e.Slider = Slider.GetSliderFromPtr(slider);
310 e.SlideValue = slideValue;
312 if (_sliderSlidingFinishedEventHandler != null)
314 //here we send all page to user event handlers
315 return _sliderSlidingFinishedEventHandler(this, e);
321 /// An event emitted when the slider handle reaches a mark.
323 /// <since_tizen> 3 </since_tizen>
324 public event EventHandlerWithReturnType<object, MarkReachedEventArgs, bool> MarkReached
328 if (_sliderMarkReachedEventHandler == null)
330 _sliderMarkReachedCallbackDelegate = (OnMarkReached);
331 MarkReachedSignal().Connect(_sliderMarkReachedCallbackDelegate);
333 _sliderMarkReachedEventHandler += value;
337 _sliderMarkReachedEventHandler -= value;
338 if (_sliderMarkReachedEventHandler == null && MarkReachedSignal().Empty() == false)
340 MarkReachedSignal().Disconnect(_sliderMarkReachedCallbackDelegate);
345 // Callback for Slider MarkReached signal
346 private bool OnMarkReached(IntPtr slider, int slideValue)
348 MarkReachedEventArgs e = new MarkReachedEventArgs();
350 // Populate all members of "e" (MarkReachedEventArgs) with real page
351 e.Slider = Slider.GetSliderFromPtr(slider);
352 e.SlideValue = slideValue;
354 if (_sliderMarkReachedEventHandler != null)
356 //here we send all page to user event handlers
357 return _sliderMarkReachedEventHandler(this, e);
363 /// Gets the slider from the pointer.
365 /// <param name="cPtr">The pointer of the slider.</param>
366 /// <returns>The object of the slider type.</returns>
367 internal static Slider GetSliderFromPtr(global::System.IntPtr cPtr)
369 Slider ret = new Slider(cPtr, false);
370 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
374 internal new class Property : global::System.IDisposable
376 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
377 protected bool swigCMemOwn;
379 internal Property(global::System.IntPtr cPtr, bool cMemoryOwn)
381 swigCMemOwn = cMemoryOwn;
382 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
385 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Property obj)
387 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
390 //A Flag to check who called Dispose(). (By User or DisposeQueue)
391 private bool isDisposeQueued = false;
392 //A Flat to check if it is already disposed.
393 protected bool disposed = false;
397 if (!isDisposeQueued)
399 isDisposeQueued = true;
400 DisposeQueue.Instance.Add(this);
404 /// <since_tizen> 3 </since_tizen>
405 public void Dispose()
407 //Throw excpetion if Dispose() is called in separate thread.
408 if (!Window.IsInstalled())
410 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
415 Dispose(DisposeTypes.Implicit);
419 Dispose(DisposeTypes.Explicit);
420 System.GC.SuppressFinalize(this);
424 protected virtual void Dispose(DisposeTypes type)
431 if (type == DisposeTypes.Explicit)
434 //Release your own managed resources here.
435 //You should release all of your own disposable objects here.
439 //Release your own unmanaged resources here.
440 //You should not access any managed member here except static instance.
441 //because the execution order of Finalizes is non-deterministic.
443 if (swigCPtr.Handle != global::System.IntPtr.Zero)
448 NDalicPINVOKE.delete_Slider_Property(swigCPtr);
450 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
456 internal Property() : this(NDalicPINVOKE.new_Slider_Property(), true)
458 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
461 internal static readonly int LOWER_BOUND = NDalicPINVOKE.Slider_Property_LOWER_BOUND_get();
462 internal static readonly int UPPER_BOUND = NDalicPINVOKE.Slider_Property_UPPER_BOUND_get();
463 internal static readonly int VALUE = NDalicPINVOKE.Slider_Property_VALUE_get();
464 internal static readonly int TRACK_VISUAL = NDalicPINVOKE.Slider_Property_TRACK_VISUAL_get();
465 internal static readonly int HANDLE_VISUAL = NDalicPINVOKE.Slider_Property_HANDLE_VISUAL_get();
466 internal static readonly int PROGRESS_VISUAL = NDalicPINVOKE.Slider_Property_PROGRESS_VISUAL_get();
467 internal static readonly int POPUP_VISUAL = NDalicPINVOKE.Slider_Property_POPUP_VISUAL_get();
468 internal static readonly int POPUP_ARROW_VISUAL = NDalicPINVOKE.Slider_Property_POPUP_ARROW_VISUAL_get();
469 internal static readonly int DISABLED_COLOR = NDalicPINVOKE.Slider_Property_DISABLED_COLOR_get();
470 internal static readonly int VALUE_PRECISION = NDalicPINVOKE.Slider_Property_VALUE_PRECISION_get();
471 internal static readonly int SHOW_POPUP = NDalicPINVOKE.Slider_Property_SHOW_POPUP_get();
472 internal static readonly int SHOW_VALUE = NDalicPINVOKE.Slider_Property_SHOW_VALUE_get();
473 internal static readonly int MARKS = NDalicPINVOKE.Slider_Property_MARKS_get();
474 internal static readonly int SNAP_TO_MARKS = NDalicPINVOKE.Slider_Property_SNAP_TO_MARKS_get();
475 internal static readonly int MARK_TOLERANCE = NDalicPINVOKE.Slider_Property_MARK_TOLERANCE_get();
480 /// Creates the slider control.
482 /// <since_tizen> 3 </since_tizen>
483 public Slider() : this(NDalicPINVOKE.Slider_New(), true)
485 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
488 internal Slider(Slider handle) : this(NDalicPINVOKE.new_Slider__SWIG_1(Slider.getCPtr(handle)), true)
490 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
493 internal Slider Assign(Slider handle)
495 Slider ret = new Slider(NDalicPINVOKE.Slider_Assign(swigCPtr, Slider.getCPtr(handle)), false);
496 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
501 /// Downcasts an object handle to the slider.<br />
502 /// If the handle points to a slider, then the downcast produces a valid handle.<br />
503 /// If not, then the returned handle is left uninitialized.<br />
505 /// <param name="handle">The handle to an object.</param>
506 /// <returns>The handle to a slider or an uninitialized handle.</returns>
507 /// <since_tizen> 3 </since_tizen>
508 public new static Slider DownCast(BaseHandle handle)
510 Slider ret = Registry.GetManagedBaseHandleFromNativePtr(handle) as Slider;
511 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
515 internal SliderValueChangedSignal ValueChangedSignal()
517 SliderValueChangedSignal ret = new SliderValueChangedSignal(NDalicPINVOKE.Slider_ValueChangedSignal(swigCPtr), false);
518 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
522 internal SliderValueChangedSignal SlidingFinishedSignal()
524 SliderValueChangedSignal ret = new SliderValueChangedSignal(NDalicPINVOKE.Slider_SlidingFinishedSignal(swigCPtr), false);
525 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
529 internal SliderMarkReachedSignal MarkReachedSignal()
531 SliderMarkReachedSignal ret = new SliderMarkReachedSignal(NDalicPINVOKE.Slider_MarkReachedSignal(swigCPtr), false);
532 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
537 /// The lower bound property.
539 /// <since_tizen> 3 </since_tizen>
540 public float LowerBound
545 GetProperty(Slider.Property.LOWER_BOUND).Get(out temp);
550 SetProperty(Slider.Property.LOWER_BOUND, new Tizen.NUI.PropertyValue(value));
555 /// The upper bound property.
557 /// <since_tizen> 3 </since_tizen>
558 public float UpperBound
563 GetProperty(Slider.Property.UPPER_BOUND).Get(out temp);
568 SetProperty(Slider.Property.UPPER_BOUND, new Tizen.NUI.PropertyValue(value));
573 /// The value property.
575 /// <since_tizen> 3 </since_tizen>
581 GetProperty(Slider.Property.VALUE).Get(out temp);
586 SetProperty(Slider.Property.VALUE, new Tizen.NUI.PropertyValue(value));
591 /// The track visual property.
593 /// <since_tizen> 3 </since_tizen>
594 public PropertyMap TrackVisual
598 PropertyMap temp = new PropertyMap();
599 GetProperty(Slider.Property.TRACK_VISUAL).Get(temp);
604 SetProperty(Slider.Property.TRACK_VISUAL, new Tizen.NUI.PropertyValue(value));
609 /// The handle visual property.
611 /// <since_tizen> 3 </since_tizen>
612 public PropertyMap HandleVisual
616 PropertyMap temp = new PropertyMap();
617 GetProperty(Slider.Property.HANDLE_VISUAL).Get(temp);
622 SetProperty(Slider.Property.HANDLE_VISUAL, new Tizen.NUI.PropertyValue(value));
627 /// The progress visual property.
629 /// <since_tizen> 3 </since_tizen>
630 public PropertyMap ProgressVisual
634 PropertyMap temp = new PropertyMap();
635 GetProperty(Slider.Property.PROGRESS_VISUAL).Get(temp);
640 SetProperty(Slider.Property.PROGRESS_VISUAL, new Tizen.NUI.PropertyValue(value));
645 /// The popup visual property.
647 /// <since_tizen> 3 </since_tizen>
648 public PropertyMap PopupVisual
652 PropertyMap temp = new PropertyMap();
653 GetProperty(Slider.Property.POPUP_VISUAL).Get(temp);
658 SetProperty(Slider.Property.POPUP_VISUAL, new Tizen.NUI.PropertyValue(value));
663 /// The popup arrow visual property.
665 /// <since_tizen> 3 </since_tizen>
666 public PropertyMap PopupArrowVisual
670 PropertyMap temp = new PropertyMap();
671 GetProperty(Slider.Property.POPUP_ARROW_VISUAL).Get(temp);
676 SetProperty(Slider.Property.POPUP_ARROW_VISUAL, new Tizen.NUI.PropertyValue(value));
681 /// The disable color property.
683 /// <since_tizen> 3 </since_tizen>
684 public Vector4 DisabledColor
688 Vector4 temp = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
689 GetProperty(Slider.Property.DISABLED_COLOR).Get(temp);
694 SetProperty(Slider.Property.DISABLED_COLOR, new Tizen.NUI.PropertyValue(value));
699 /// The value precision property.
701 /// <since_tizen> 3 </since_tizen>
702 public int ValuePrecision
707 GetProperty(Slider.Property.VALUE_PRECISION).Get(out temp);
712 SetProperty(Slider.Property.VALUE_PRECISION, new Tizen.NUI.PropertyValue(value));
717 /// The show popup property.
719 /// <since_tizen> 3 </since_tizen>
720 public bool ShowPopup
725 GetProperty(Slider.Property.SHOW_POPUP).Get(out temp);
730 SetProperty(Slider.Property.SHOW_POPUP, new Tizen.NUI.PropertyValue(value));
735 /// The show value property.
737 /// <since_tizen> 3 </since_tizen>
738 public bool ShowValue
743 GetProperty(Slider.Property.SHOW_VALUE).Get(out temp);
748 SetProperty(Slider.Property.SHOW_VALUE, new Tizen.NUI.PropertyValue(value));
753 /// The marks property.
755 /// <since_tizen> 3 </since_tizen>
756 public Tizen.NUI.PropertyArray Marks
760 Tizen.NUI.PropertyArray temp = new Tizen.NUI.PropertyArray();
761 GetProperty(Slider.Property.MARKS).Get(temp);
766 SetProperty(Slider.Property.MARKS, new Tizen.NUI.PropertyValue(value));
771 /// The snap to marks property.
773 /// <since_tizen> 3 </since_tizen>
774 public bool SnapToMarks
779 GetProperty(Slider.Property.SNAP_TO_MARKS).Get(out temp);
784 SetProperty(Slider.Property.SNAP_TO_MARKS, new Tizen.NUI.PropertyValue(value));
789 /// The mark tolerance property.
791 /// <since_tizen> 3 </since_tizen>
792 public float MarkTolerance
797 GetProperty(Slider.Property.MARK_TOLERANCE).Get(out temp);
802 SetProperty(Slider.Property.MARK_TOLERANCE, new Tizen.NUI.PropertyValue(value));