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 public class Slider : View
30 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
32 internal Slider(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Slider_SWIGUpcast(cPtr), cMemoryOwn)
34 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
37 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Slider obj)
39 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
45 protected override void Dispose(DisposeTypes type)
52 if (type == DisposeTypes.Explicit)
55 //Release your own managed resources here.
56 //You should release all of your own disposable objects here.
60 //Release your own unmanaged resources here.
61 //You should not access any managed member here except static instance.
62 //because the execution order of Finalizes is non-deterministic.
64 if (_sliderValueChangedCallbackDelegate != null)
66 ValueChangedSignal().Disconnect(_sliderValueChangedCallbackDelegate);
69 if (_sliderSlidingFinishedCallbackDelegate != null)
71 SlidingFinishedSignal().Disconnect(_sliderSlidingFinishedCallbackDelegate);
74 if (_sliderMarkReachedCallbackDelegate != null)
76 MarkReachedSignal().Disconnect(_sliderMarkReachedCallbackDelegate);
79 if (swigCPtr.Handle != global::System.IntPtr.Zero)
84 NDalicPINVOKE.delete_Slider(swigCPtr);
86 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
93 /// The ValueChanged event arguments.
95 public class ValueChangedEventArgs : EventArgs
97 private Slider _slider;
98 private float _slideValue;
103 /// <since_tizen> 3 </since_tizen>
117 /// The slider value.
119 /// <since_tizen> 3 </since_tizen>
120 public float SlideValue
134 /// The SlidingFinished event arguments.
136 public class SlidingFinishedEventArgs : EventArgs
138 private Slider _slider;
139 private float _slideValue;
144 /// <since_tizen> 3 </since_tizen>
158 /// The slider value.
160 /// <since_tizen> 3 </since_tizen>
161 public float SlideValue
175 /// The MarkReached event arguments.
177 public class MarkReachedEventArgs : EventArgs
179 private Slider _slider;
180 private int _slideValue;
185 /// <since_tizen> 3 </since_tizen>
199 /// The slider value.
201 /// <since_tizen> 3 </since_tizen>
202 public int SlideValue
216 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
217 private delegate bool ValueChangedCallbackDelegate(IntPtr slider, float slideValue);
218 private EventHandlerWithReturnType<object, ValueChangedEventArgs, bool> _sliderValueChangedEventHandler;
219 private ValueChangedCallbackDelegate _sliderValueChangedCallbackDelegate;
221 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
222 private delegate bool SlidingFinishedCallbackDelegate(IntPtr slider, float slideValue);
223 private EventHandlerWithReturnType<object, SlidingFinishedEventArgs, bool> _sliderSlidingFinishedEventHandler;
224 private SlidingFinishedCallbackDelegate _sliderSlidingFinishedCallbackDelegate;
226 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
227 private delegate bool MarkReachedCallbackDelegate(IntPtr slider, int slideValue);
228 private EventHandlerWithReturnType<object, MarkReachedEventArgs, bool> _sliderMarkReachedEventHandler;
229 private MarkReachedCallbackDelegate _sliderMarkReachedCallbackDelegate;
232 /// An event emitted when the slider value changes.
234 /// <since_tizen> 3 </since_tizen>
235 public event EventHandlerWithReturnType<object, ValueChangedEventArgs, bool> ValueChanged
239 if (_sliderValueChangedEventHandler == null)
241 _sliderValueChangedCallbackDelegate = (OnValueChanged);
242 ValueChangedSignal().Connect(_sliderValueChangedCallbackDelegate);
244 _sliderValueChangedEventHandler += value;
248 _sliderValueChangedEventHandler -= value;
249 if (_sliderValueChangedEventHandler == null && ValueChangedSignal().Empty() == false)
251 ValueChangedSignal().Disconnect(_sliderValueChangedCallbackDelegate);
256 // Callback for Slider ValueChanged signal
257 private bool OnValueChanged(IntPtr slider, float slideValue)
259 ValueChangedEventArgs e = new ValueChangedEventArgs();
261 // Populate all members of "e" (ValueChangedEventArgs) with real page
262 e.Slider = Slider.GetSliderFromPtr(slider);
263 e.SlideValue = slideValue;
265 if (_sliderValueChangedEventHandler != null)
267 //here we send all page to user event handlers
268 return _sliderValueChangedEventHandler(this, e);
274 /// An event emitted when the sliding is finished.
276 /// <since_tizen> 3 </since_tizen>
277 public event EventHandlerWithReturnType<object, SlidingFinishedEventArgs, bool> SlidingFinished
281 if (_sliderSlidingFinishedEventHandler == null)
283 _sliderSlidingFinishedCallbackDelegate = (OnSlidingFinished);
284 SlidingFinishedSignal().Connect(_sliderSlidingFinishedCallbackDelegate);
286 _sliderSlidingFinishedEventHandler += value;
290 _sliderSlidingFinishedEventHandler -= value;
291 if (_sliderSlidingFinishedEventHandler == null && SlidingFinishedSignal().Empty() == false)
293 SlidingFinishedSignal().Disconnect(_sliderSlidingFinishedCallbackDelegate);
298 // Callback for Slider SlidingFinished signal
299 private bool OnSlidingFinished(IntPtr slider, float slideValue)
301 SlidingFinishedEventArgs e = new SlidingFinishedEventArgs();
303 // Populate all members of "e" (SlidingFinishedEventArgs) with real page
304 e.Slider = Slider.GetSliderFromPtr(slider);
305 e.SlideValue = slideValue;
307 if (_sliderSlidingFinishedEventHandler != null)
309 //here we send all page to user event handlers
310 return _sliderSlidingFinishedEventHandler(this, e);
316 /// An event emitted when the slider handle reaches a mark.
318 /// <since_tizen> 3 </since_tizen>
319 public event EventHandlerWithReturnType<object, MarkReachedEventArgs, bool> MarkReached
323 if (_sliderMarkReachedEventHandler == null)
325 _sliderMarkReachedCallbackDelegate = (OnMarkReached);
326 MarkReachedSignal().Connect(_sliderMarkReachedCallbackDelegate);
328 _sliderMarkReachedEventHandler += value;
332 _sliderMarkReachedEventHandler -= value;
333 if (_sliderMarkReachedEventHandler == null && MarkReachedSignal().Empty() == false)
335 MarkReachedSignal().Disconnect(_sliderMarkReachedCallbackDelegate);
340 // Callback for Slider MarkReached signal
341 private bool OnMarkReached(IntPtr slider, int slideValue)
343 MarkReachedEventArgs e = new MarkReachedEventArgs();
345 // Populate all members of "e" (MarkReachedEventArgs) with real page
346 e.Slider = Slider.GetSliderFromPtr(slider);
347 e.SlideValue = slideValue;
349 if (_sliderMarkReachedEventHandler != null)
351 //here we send all page to user event handlers
352 return _sliderMarkReachedEventHandler(this, e);
358 /// Gets the slider from the pointer.
360 /// <param name="cPtr">The pointer of the slider.</param>
361 /// <returns>The object of the slider type.</returns>
362 internal static Slider GetSliderFromPtr(global::System.IntPtr cPtr)
364 Slider ret = new Slider(cPtr, false);
365 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
369 internal new class Property : global::System.IDisposable
371 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
372 protected bool swigCMemOwn;
374 internal Property(global::System.IntPtr cPtr, bool cMemoryOwn)
376 swigCMemOwn = cMemoryOwn;
377 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
380 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Property obj)
382 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
385 //A Flag to check who called Dispose(). (By User or DisposeQueue)
386 private bool isDisposeQueued = false;
387 //A Flat to check if it is already disposed.
388 protected bool disposed = false;
392 if (!isDisposeQueued)
394 isDisposeQueued = true;
395 DisposeQueue.Instance.Add(this);
399 /// <since_tizen> 3 </since_tizen>
400 public void Dispose()
402 //Throw excpetion if Dispose() is called in separate thread.
403 if (!Window.IsInstalled())
405 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
410 Dispose(DisposeTypes.Implicit);
414 Dispose(DisposeTypes.Explicit);
415 System.GC.SuppressFinalize(this);
419 protected virtual void Dispose(DisposeTypes type)
426 if (type == DisposeTypes.Explicit)
429 //Release your own managed resources here.
430 //You should release all of your own disposable objects here.
434 //Release your own unmanaged resources here.
435 //You should not access any managed member here except static instance.
436 //because the execution order of Finalizes is non-deterministic.
438 if (swigCPtr.Handle != global::System.IntPtr.Zero)
443 NDalicPINVOKE.delete_Slider_Property(swigCPtr);
445 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
451 internal Property() : this(NDalicPINVOKE.new_Slider_Property(), true)
453 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
456 internal static readonly int LOWER_BOUND = NDalicPINVOKE.Slider_Property_LOWER_BOUND_get();
457 internal static readonly int UPPER_BOUND = NDalicPINVOKE.Slider_Property_UPPER_BOUND_get();
458 internal static readonly int VALUE = NDalicPINVOKE.Slider_Property_VALUE_get();
459 internal static readonly int TRACK_VISUAL = NDalicPINVOKE.Slider_Property_TRACK_VISUAL_get();
460 internal static readonly int HANDLE_VISUAL = NDalicPINVOKE.Slider_Property_HANDLE_VISUAL_get();
461 internal static readonly int PROGRESS_VISUAL = NDalicPINVOKE.Slider_Property_PROGRESS_VISUAL_get();
462 internal static readonly int POPUP_VISUAL = NDalicPINVOKE.Slider_Property_POPUP_VISUAL_get();
463 internal static readonly int POPUP_ARROW_VISUAL = NDalicPINVOKE.Slider_Property_POPUP_ARROW_VISUAL_get();
464 internal static readonly int DISABLED_COLOR = NDalicPINVOKE.Slider_Property_DISABLED_COLOR_get();
465 internal static readonly int VALUE_PRECISION = NDalicPINVOKE.Slider_Property_VALUE_PRECISION_get();
466 internal static readonly int SHOW_POPUP = NDalicPINVOKE.Slider_Property_SHOW_POPUP_get();
467 internal static readonly int SHOW_VALUE = NDalicPINVOKE.Slider_Property_SHOW_VALUE_get();
468 internal static readonly int MARKS = NDalicPINVOKE.Slider_Property_MARKS_get();
469 internal static readonly int SNAP_TO_MARKS = NDalicPINVOKE.Slider_Property_SNAP_TO_MARKS_get();
470 internal static readonly int MARK_TOLERANCE = NDalicPINVOKE.Slider_Property_MARK_TOLERANCE_get();
475 /// Creates the slider control.
477 /// <since_tizen> 3 </since_tizen>
478 public Slider() : this(NDalicPINVOKE.Slider_New(), true)
480 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
483 internal Slider(Slider handle) : this(NDalicPINVOKE.new_Slider__SWIG_1(Slider.getCPtr(handle)), true)
485 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
488 internal Slider Assign(Slider handle)
490 Slider ret = new Slider(NDalicPINVOKE.Slider_Assign(swigCPtr, Slider.getCPtr(handle)), false);
491 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
496 /// Downcasts an object handle to the slider.<br />
497 /// If the handle points to a slider, then the downcast produces a valid handle.<br />
498 /// If not, then the returned handle is left uninitialized.<br />
500 /// <param name="handle">The handle to an object.</param>
501 /// <returns>The handle to a slider or an uninitialized handle.</returns>
502 /// <since_tizen> 3 </since_tizen>
503 public new static Slider DownCast(BaseHandle handle)
505 Slider ret = Registry.GetManagedBaseHandleFromNativePtr(handle) as Slider;
506 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
510 internal SliderValueChangedSignal ValueChangedSignal()
512 SliderValueChangedSignal ret = new SliderValueChangedSignal(NDalicPINVOKE.Slider_ValueChangedSignal(swigCPtr), false);
513 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
517 internal SliderValueChangedSignal SlidingFinishedSignal()
519 SliderValueChangedSignal ret = new SliderValueChangedSignal(NDalicPINVOKE.Slider_SlidingFinishedSignal(swigCPtr), false);
520 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
524 internal SliderMarkReachedSignal MarkReachedSignal()
526 SliderMarkReachedSignal ret = new SliderMarkReachedSignal(NDalicPINVOKE.Slider_MarkReachedSignal(swigCPtr), false);
527 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
532 /// The lower bound property.
534 /// <since_tizen> 3 </since_tizen>
535 public float LowerBound
540 GetProperty(Slider.Property.LOWER_BOUND).Get(out temp);
545 SetProperty(Slider.Property.LOWER_BOUND, new Tizen.NUI.PropertyValue(value));
550 /// The upper bound property.
552 /// <since_tizen> 3 </since_tizen>
553 public float UpperBound
558 GetProperty(Slider.Property.UPPER_BOUND).Get(out temp);
563 SetProperty(Slider.Property.UPPER_BOUND, new Tizen.NUI.PropertyValue(value));
568 /// The value property.
570 /// <since_tizen> 3 </since_tizen>
576 GetProperty(Slider.Property.VALUE).Get(out temp);
581 SetProperty(Slider.Property.VALUE, new Tizen.NUI.PropertyValue(value));
586 /// The track visual property.
588 /// <since_tizen> 3 </since_tizen>
589 public PropertyMap TrackVisual
593 PropertyMap temp = new PropertyMap();
594 GetProperty(Slider.Property.TRACK_VISUAL).Get(temp);
599 SetProperty(Slider.Property.TRACK_VISUAL, new Tizen.NUI.PropertyValue(value));
604 /// The handle visual property.
606 /// <since_tizen> 3 </since_tizen>
607 public PropertyMap HandleVisual
611 PropertyMap temp = new PropertyMap();
612 GetProperty(Slider.Property.HANDLE_VISUAL).Get(temp);
617 SetProperty(Slider.Property.HANDLE_VISUAL, new Tizen.NUI.PropertyValue(value));
622 /// The progress visual property.
624 /// <since_tizen> 3 </since_tizen>
625 public PropertyMap ProgressVisual
629 PropertyMap temp = new PropertyMap();
630 GetProperty(Slider.Property.PROGRESS_VISUAL).Get(temp);
635 SetProperty(Slider.Property.PROGRESS_VISUAL, new Tizen.NUI.PropertyValue(value));
640 /// The popup visual property.
642 /// <since_tizen> 3 </since_tizen>
643 public PropertyMap PopupVisual
647 PropertyMap temp = new PropertyMap();
648 GetProperty(Slider.Property.POPUP_VISUAL).Get(temp);
653 SetProperty(Slider.Property.POPUP_VISUAL, new Tizen.NUI.PropertyValue(value));
658 /// The popup arrow visual property.
660 /// <since_tizen> 3 </since_tizen>
661 public PropertyMap PopupArrowVisual
665 PropertyMap temp = new PropertyMap();
666 GetProperty(Slider.Property.POPUP_ARROW_VISUAL).Get(temp);
671 SetProperty(Slider.Property.POPUP_ARROW_VISUAL, new Tizen.NUI.PropertyValue(value));
676 /// The disable color property.
678 /// <since_tizen> 3 </since_tizen>
679 public Vector4 DisabledColor
683 Vector4 temp = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
684 GetProperty(Slider.Property.DISABLED_COLOR).Get(temp);
689 SetProperty(Slider.Property.DISABLED_COLOR, new Tizen.NUI.PropertyValue(value));
694 /// The value precision property.
696 /// <since_tizen> 3 </since_tizen>
697 public int ValuePrecision
702 GetProperty(Slider.Property.VALUE_PRECISION).Get(out temp);
707 SetProperty(Slider.Property.VALUE_PRECISION, new Tizen.NUI.PropertyValue(value));
712 /// The show popup property.
714 /// <since_tizen> 3 </since_tizen>
715 public bool ShowPopup
720 GetProperty(Slider.Property.SHOW_POPUP).Get(out temp);
725 SetProperty(Slider.Property.SHOW_POPUP, new Tizen.NUI.PropertyValue(value));
730 /// The show value property.
732 /// <since_tizen> 3 </since_tizen>
733 public bool ShowValue
738 GetProperty(Slider.Property.SHOW_VALUE).Get(out temp);
743 SetProperty(Slider.Property.SHOW_VALUE, new Tizen.NUI.PropertyValue(value));
748 /// The marks property.
750 /// <since_tizen> 3 </since_tizen>
751 public Tizen.NUI.PropertyArray Marks
755 Tizen.NUI.PropertyArray temp = new Tizen.NUI.PropertyArray();
756 GetProperty(Slider.Property.MARKS).Get(temp);
761 SetProperty(Slider.Property.MARKS, new Tizen.NUI.PropertyValue(value));
766 /// The snap to marks property.
768 /// <since_tizen> 3 </since_tizen>
769 public bool SnapToMarks
774 GetProperty(Slider.Property.SNAP_TO_MARKS).Get(out temp);
779 SetProperty(Slider.Property.SNAP_TO_MARKS, new Tizen.NUI.PropertyValue(value));
784 /// The mark tolerance property.
786 /// <since_tizen> 3 </since_tizen>
787 public float MarkTolerance
792 GetProperty(Slider.Property.MARK_TOLERANCE).Get(out temp);
797 SetProperty(Slider.Property.MARK_TOLERANCE, new Tizen.NUI.PropertyValue(value));