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 using System.ComponentModel;
19 using System.Runtime.InteropServices;
20 using Tizen.NUI.BaseComponents;
22 namespace Tizen.NUI.UIComponents
25 /// The ScrollBar is a UI component that can be linked to the scrollable objects
26 /// indicating the current scroll position of the scrollable object.<br />
28 /// <since_tizen> 3 </since_tizen>
29 public class ScrollBar : View
31 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
33 internal ScrollBar(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.ScrollBar_SWIGUpcast(cPtr), cMemoryOwn)
35 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
38 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ScrollBar obj)
40 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
44 /// To dispose the ScrollBar instance.
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.
61 //Release your own unmanaged resources here.
62 //You should not access any managed member here except static instance.
63 //because the execution order of Finalizes is non-deterministic.
66 if (_scrollBarScrollPositionIntervalReachedEventCallbackDelegate != null)
68 ScrollPositionIntervalReachedSignal().Disconnect(_scrollBarScrollPositionIntervalReachedEventCallbackDelegate);
71 if (_scrollBarPanFinishedEventCallbackDelegate != null)
73 PanFinishedSignal().Disconnect(_scrollBarPanFinishedEventCallbackDelegate);
77 if (swigCPtr.Handle != global::System.IntPtr.Zero)
82 NDalicPINVOKE.delete_ScrollBar(swigCPtr);
84 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
91 /// Event arguments that passed via the PanFinished event.
93 /// <since_tizen> 3 </since_tizen>
94 public class PanFinishedEventArgs : EventArgs
99 /// Event arguments that passed via the ScrollPositionIntervalReached event.
101 /// <since_tizen> 3 </since_tizen>
102 public class ScrollIntervalEventArgs : EventArgs
104 private float _currentScrollPosition;
107 /// The current scroll position of the scrollable content.
109 /// <since_tizen> 3 </since_tizen>
110 public float CurrentScrollPosition
114 return _currentScrollPosition;
118 _currentScrollPosition = value;
123 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
124 private delegate void PanFinishedEventCallbackDelegate();
125 private EventHandler<PanFinishedEventArgs> _scrollBarPanFinishedEventHandler;
126 private PanFinishedEventCallbackDelegate _scrollBarPanFinishedEventCallbackDelegate;
128 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
129 private delegate void ScrollPositionIntervalReachedEventCallbackDelegate();
130 private EventHandler<ScrollIntervalEventArgs> _scrollBarScrollPositionIntervalReachedEventHandler;
131 private ScrollPositionIntervalReachedEventCallbackDelegate _scrollBarScrollPositionIntervalReachedEventCallbackDelegate;
134 /// The event emitted when panning is finished on the scroll indicator.
136 /// <since_tizen> 3 </since_tizen>
137 public event EventHandler<PanFinishedEventArgs> PanFinished
141 if (_scrollBarPanFinishedEventHandler == null)
143 _scrollBarPanFinishedEventCallbackDelegate = (OnScrollBarPanFinished);
144 PanFinishedSignal().Connect(_scrollBarPanFinishedEventCallbackDelegate);
146 _scrollBarPanFinishedEventHandler += value;
150 _scrollBarPanFinishedEventHandler -= value;
151 if (_scrollBarPanFinishedEventHandler == null && PanFinishedSignal().Empty() == false)
153 PanFinishedSignal().Disconnect(_scrollBarPanFinishedEventCallbackDelegate);
158 // Callback for ScrollBar PanFinishedSignal
159 private void OnScrollBarPanFinished()
161 PanFinishedEventArgs e = new PanFinishedEventArgs();
163 if (_scrollBarPanFinishedEventHandler != null)
165 //here we send all data to user event handlers
166 _scrollBarPanFinishedEventHandler(this, e);
172 /// This is the event emitted when the current scroll position of the scrollable content.
174 /// <since_tizen> 3 </since_tizen>
175 public event EventHandler<ScrollIntervalEventArgs> ScrollInterval
179 if (_scrollBarScrollPositionIntervalReachedEventHandler == null)
181 _scrollBarScrollPositionIntervalReachedEventCallbackDelegate = (OnScrollBarScrollPositionIntervalReached);
182 ScrollPositionIntervalReachedSignal().Connect(_scrollBarScrollPositionIntervalReachedEventCallbackDelegate);
184 _scrollBarScrollPositionIntervalReachedEventHandler += value;
188 _scrollBarScrollPositionIntervalReachedEventHandler -= value;
189 if (_scrollBarScrollPositionIntervalReachedEventHandler == null && ScrollPositionIntervalReachedSignal().Empty() == false)
191 ScrollPositionIntervalReachedSignal().Disconnect(_scrollBarScrollPositionIntervalReachedEventCallbackDelegate);
196 // Callback for ScrollBar ScrollPositionIntervalReachedSignal
197 private void OnScrollBarScrollPositionIntervalReached()
199 ScrollIntervalEventArgs e = new ScrollIntervalEventArgs();
201 if (_scrollBarScrollPositionIntervalReachedEventHandler != null)
203 //here we send all data to user event handlers
204 _scrollBarScrollPositionIntervalReachedEventHandler(this, e);
209 internal new class Property
211 internal static readonly int SCROLL_DIRECTION = NDalicPINVOKE.ScrollBar_Property_SCROLL_DIRECTION_get();
212 internal static readonly int INDICATOR_HEIGHT_POLICY = NDalicPINVOKE.ScrollBar_Property_INDICATOR_HEIGHT_POLICY_get();
213 internal static readonly int INDICATOR_FIXED_HEIGHT = NDalicPINVOKE.ScrollBar_Property_INDICATOR_FIXED_HEIGHT_get();
214 internal static readonly int INDICATOR_SHOW_DURATION = NDalicPINVOKE.ScrollBar_Property_INDICATOR_SHOW_DURATION_get();
215 internal static readonly int INDICATOR_HIDE_DURATION = NDalicPINVOKE.ScrollBar_Property_INDICATOR_HIDE_DURATION_get();
216 internal static readonly int SCROLL_POSITION_INTERVALS = NDalicPINVOKE.ScrollBar_Property_SCROLL_POSITION_INTERVALS_get();
217 internal static readonly int INDICATOR_MINIMUM_HEIGHT = NDalicPINVOKE.ScrollBar_Property_INDICATOR_MINIMUM_HEIGHT_get();
218 internal static readonly int INDICATOR_START_PADDING = NDalicPINVOKE.ScrollBar_Property_INDICATOR_START_PADDING_get();
219 internal static readonly int INDICATOR_END_PADDING = NDalicPINVOKE.ScrollBar_Property_INDICATOR_END_PADDING_get();
223 /// Creates an initialized scrollbar.
225 /// <param name="direction">The direction of the scrollbar (either vertically or horizontally).</param>
226 /// <since_tizen> 3 </since_tizen>
227 public ScrollBar(ScrollBar.Direction direction) : this(NDalicPINVOKE.ScrollBar_New__SWIG_0((int)direction), true)
229 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
233 /// Creates an uninitialized scrollbar.
235 /// <since_tizen> 3 </since_tizen>
236 public ScrollBar() : this(NDalicPINVOKE.ScrollBar_New__SWIG_1(), true)
238 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
241 internal ScrollBar(ScrollBar scrollBar) : this(NDalicPINVOKE.new_ScrollBar__SWIG_1(ScrollBar.getCPtr(scrollBar)), true)
243 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
246 internal void SetScrollPropertySource(Animatable handle, int propertyScrollPosition, int propertyMinScrollPosition, int propertyMaxScrollPosition, int propertyScrollContentSize)
248 NDalicPINVOKE.ScrollBar_SetScrollPropertySource(swigCPtr, Animatable.getCPtr(handle), propertyScrollPosition, propertyMinScrollPosition, propertyMaxScrollPosition, propertyScrollContentSize);
249 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
252 internal void SetScrollIndicator(View indicator)
254 NDalicPINVOKE.ScrollBar_SetScrollIndicator(swigCPtr, View.getCPtr(indicator));
255 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
258 internal View GetScrollIndicator()
260 View ret = new View(NDalicPINVOKE.ScrollBar_GetScrollIndicator(swigCPtr), true);
261 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
265 internal void SetScrollDirection(ScrollBar.Direction direction)
267 NDalicPINVOKE.ScrollBar_SetScrollDirection(swigCPtr, (int)direction);
268 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
271 internal ScrollBar.Direction GetScrollDirection()
273 ScrollBar.Direction ret = (ScrollBar.Direction)NDalicPINVOKE.ScrollBar_GetScrollDirection(swigCPtr);
274 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
278 internal void SetIndicatorHeightPolicy(ScrollBar.IndicatorHeightPolicyType policy)
280 NDalicPINVOKE.ScrollBar_SetIndicatorHeightPolicy(swigCPtr, (int)policy);
281 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
284 internal ScrollBar.IndicatorHeightPolicyType GetIndicatorHeightPolicy()
286 ScrollBar.IndicatorHeightPolicyType ret = (ScrollBar.IndicatorHeightPolicyType)NDalicPINVOKE.ScrollBar_GetIndicatorHeightPolicy(swigCPtr);
287 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
291 internal void SetIndicatorFixedHeight(float height)
293 NDalicPINVOKE.ScrollBar_SetIndicatorFixedHeight(swigCPtr, height);
294 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
297 internal float GetIndicatorFixedHeight()
299 float ret = NDalicPINVOKE.ScrollBar_GetIndicatorFixedHeight(swigCPtr);
300 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
304 internal void SetIndicatorShowDuration(float durationSeconds)
306 NDalicPINVOKE.ScrollBar_SetIndicatorShowDuration(swigCPtr, durationSeconds);
307 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
310 internal float GetIndicatorShowDuration()
312 float ret = NDalicPINVOKE.ScrollBar_GetIndicatorShowDuration(swigCPtr);
313 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
317 internal void SetIndicatorHideDuration(float durationSeconds)
319 NDalicPINVOKE.ScrollBar_SetIndicatorHideDuration(swigCPtr, durationSeconds);
320 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
323 internal float GetIndicatorHideDuration()
325 float ret = NDalicPINVOKE.ScrollBar_GetIndicatorHideDuration(swigCPtr);
326 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
330 internal void ShowIndicator()
332 NDalicPINVOKE.ScrollBar_ShowIndicator(swigCPtr);
333 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
336 internal void HideIndicator()
338 NDalicPINVOKE.ScrollBar_HideIndicator(swigCPtr);
339 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
342 internal VoidSignal PanFinishedSignal()
344 VoidSignal ret = new VoidSignal(NDalicPINVOKE.ScrollBar_PanFinishedSignal(swigCPtr), false);
345 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
349 internal FloatSignal ScrollPositionIntervalReachedSignal()
351 FloatSignal ret = new FloatSignal(NDalicPINVOKE.ScrollBar_ScrollPositionIntervalReachedSignal(swigCPtr), false);
352 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
357 /// The direction of the scrollbar.
359 /// <since_tizen> 3 </since_tizen>
360 public enum Direction
363 /// Scroll in the vertical direction
365 /// <since_tizen> 3 </since_tizen>
368 /// Scroll in the horizontal direction
370 /// <since_tizen> 3 </since_tizen>
375 /// The indicator height policy.
377 /// <since_tizen> 3 </since_tizen>
378 public enum IndicatorHeightPolicyType
381 /// Variable height changed dynamically according to the length of scroll content
383 /// <since_tizen> 3 </since_tizen>
386 /// Fixed height regardless of the length of scroll content
388 /// <since_tizen> 3 </since_tizen>
393 /// The direction of the scrollbar.
395 /// <since_tizen> 3 </since_tizen>
396 public Direction ScrollDirection
401 if (GetProperty(ScrollBar.Property.SCROLL_DIRECTION).Get(out temp) == false)
403 NUILog.Error("ScrollDirection get error!");
409 return Direction.Vertical;
411 return Direction.Horizontal;
413 return Direction.Vertical;
418 string valueToString = "";
421 case Direction.Vertical:
423 valueToString = "Vertical";
426 case Direction.Horizontal:
428 valueToString = "Horizontal";
433 valueToString = "Vertical";
437 SetProperty(ScrollBar.Property.SCROLL_DIRECTION, new Tizen.NUI.PropertyValue(valueToString));
442 /// The indicator height policy.
444 /// <since_tizen> 3 </since_tizen>
445 public IndicatorHeightPolicyType IndicatorHeightPolicy
450 if (GetProperty(ScrollBar.Property.INDICATOR_HEIGHT_POLICY).Get(out temp) == false)
452 NUILog.Error("IndicatorHeightPolicy get error!");
458 return IndicatorHeightPolicyType.Variable;
460 return IndicatorHeightPolicyType.Fixed;
462 return IndicatorHeightPolicyType.Variable;
467 string valueToString = "";
470 case IndicatorHeightPolicyType.Variable:
472 valueToString = "Variable";
475 case IndicatorHeightPolicyType.Fixed:
477 valueToString = "Fixed";
482 valueToString = "Variable";
486 SetProperty(ScrollBar.Property.INDICATOR_HEIGHT_POLICY, new Tizen.NUI.PropertyValue(valueToString));
491 /// The fixed height of the scroll indicator.
493 /// <since_tizen> 3 </since_tizen>
494 public float IndicatorFixedHeight
499 GetProperty(ScrollBar.Property.INDICATOR_FIXED_HEIGHT).Get(out temp);
504 SetProperty(ScrollBar.Property.INDICATOR_FIXED_HEIGHT, new Tizen.NUI.PropertyValue(value));
509 /// The duration in seconds for the scroll indicator to become fully visible.
511 /// <since_tizen> 3 </since_tizen>
512 public float IndicatorShowDuration
517 GetProperty(ScrollBar.Property.INDICATOR_SHOW_DURATION).Get(out temp);
522 SetProperty(ScrollBar.Property.INDICATOR_SHOW_DURATION, new Tizen.NUI.PropertyValue(value));
527 /// The duration in seconds for the scroll indicator to become fully invisible.
529 /// <since_tizen> 3 </since_tizen>
530 public float IndicatorHideDuration
535 GetProperty(ScrollBar.Property.INDICATOR_HIDE_DURATION).Get(out temp);
540 SetProperty(ScrollBar.Property.INDICATOR_HIDE_DURATION, new Tizen.NUI.PropertyValue(value));
545 /// The list of values to get the notification when the current scroll position of the scrollable object goes above or below any of these values.
547 /// <since_tizen> 3 </since_tizen>
548 public Tizen.NUI.PropertyArray ScrollPositionIntervals
552 Tizen.NUI.PropertyArray temp = new Tizen.NUI.PropertyArray();
553 GetProperty(ScrollBar.Property.SCROLL_POSITION_INTERVALS).Get(temp);
558 SetProperty(ScrollBar.Property.SCROLL_POSITION_INTERVALS, new Tizen.NUI.PropertyValue(value));
563 /// The minimum height for a variable size indicator.
565 /// <since_tizen> 3 </since_tizen>
566 public float IndicatorMinimumHeight
571 GetProperty(ScrollBar.Property.INDICATOR_MINIMUM_HEIGHT).Get(out temp);
576 SetProperty(ScrollBar.Property.INDICATOR_MINIMUM_HEIGHT, new Tizen.NUI.PropertyValue(value));
581 /// The padding at the start of the indicator. For example, the top if the scrollDirection is vertical.
583 /// <since_tizen> 3 </since_tizen>
584 public float IndicatorStartPadding
589 GetProperty(ScrollBar.Property.INDICATOR_START_PADDING).Get(out temp);
594 SetProperty(ScrollBar.Property.INDICATOR_START_PADDING, new Tizen.NUI.PropertyValue(value));
599 /// The padding at the end of the indicator. For example, the bottom if the scrollDirection is vertical.
601 /// <since_tizen> 3 </since_tizen>
602 public float IndicatorEndPadding
607 GetProperty(ScrollBar.Property.INDICATOR_END_PADDING).Get(out temp);
612 SetProperty(ScrollBar.Property.INDICATOR_END_PADDING, new Tizen.NUI.PropertyValue(value));