[AT-SPI] Fix role setting
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / scroll-bar / scroll-bar-impl.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 7056b0c..b1b09d1
@@ -177,8 +177,8 @@ DALI_ACTION_REGISTRATION(   Toolkit, ScrollBar, "ShowTransientIndicator",
 
 DALI_TYPE_REGISTRATION_END()
 
-const char* SCROLL_DIRECTION_NAME[] = {"Vertical", "Horizontal"};
-const char* INDICATOR_HEIGHT_POLICY_NAME[] = {"Variable", "Fixed"};
+const char* SCROLL_DIRECTION_NAME[] = {"VERTICAL", "HORIZONTAL"};
+const char* INDICATOR_HEIGHT_POLICY_NAME[] = {"VARIABLE", "FIXED"};
 
 }
 
@@ -195,9 +195,9 @@ ScrollBar::ScrollBar(Toolkit::ScrollBar::Direction direction)
   mIndicatorHideDuration(DEFAULT_INDICATOR_HIDE_DURATION),
   mTransientIndicatorDuration(DEFAULT_INDICATOR_TRANSIENT_DURATION),
   mScrollStart(0.0f),
-  mGestureDisplacement( Vector3::ZERO ),
+  mGestureDisplacement( Vector2::ZERO ),
   mCurrentScrollPosition(0.0f),
-  mIndicatorHeightPolicy(Toolkit::ScrollBar::Variable),
+  mIndicatorHeightPolicy(Toolkit::ScrollBar::VARIABLE),
   mIndicatorFixedHeight(DEFAULT_INDICATOR_FIXED_HEIGHT),
   mIndicatorMinimumHeight(DEFAULT_INDICATOR_MINIMUM_HEIGHT),
   mIndicatorStartPadding(DEFAULT_INDICATOR_START_PADDING),
@@ -215,6 +215,11 @@ void ScrollBar::OnInitialize()
 {
   CreateDefaultIndicatorActor();
   Self().SetProperty( Actor::Property::DRAW_MODE,DrawMode::OVERLAY_2D);
+
+  DevelControl::SetAccessibilityConstructor( Self(), []( Dali::Actor actor ) {
+    return std::unique_ptr< Dali::Accessibility::Accessible >(
+      new AccessibleImpl( actor, Dali::Accessibility::Role::SCROLL_BAR ) );
+  } );
 }
 
 void ScrollBar::SetScrollPropertySource( Handle handle, Property::Index propertyScrollPosition, Property::Index propertyMinScrollPosition, Property::Index propertyMaxScrollPosition, Property::Index propertyScrollContentSize )
@@ -265,7 +270,7 @@ void ScrollBar::SetScrollIndicator( Actor indicator )
     mIndicatorFirstShow = true;
     Self().Add( mIndicator );
 
-    EnableGestureDetection( Gesture::Type( Gesture::Pan ) );
+    EnableGestureDetection( GestureType::Value( GestureType::PAN ) );
 
     PanGestureDetector detector( GetPanGestureDetector() );
     detector.DetachAll();
@@ -304,7 +309,7 @@ void ScrollBar::ApplyConstraints()
     }
 
     // Set indicator height according to the indicator's height policy
-    if(mIndicatorHeightPolicy == Toolkit::ScrollBar::Fixed)
+    if(mIndicatorHeightPolicy == Toolkit::ScrollBar::FIXED)
     {
       mIndicator.SetProperty( Actor::Property::SIZE, Vector2( Self().GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).width, mIndicatorFixedHeight) );
     }
@@ -459,9 +464,9 @@ void ScrollBar::OnPan( const PanGesture& gesture )
   {
     Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast(scrollableHandle);
 
-    switch(gesture.state)
+    switch(gesture.GetState())
     {
-      case Gesture::Started:
+      case Dali::GestureState::STARTED:
       {
         if( !mPanProcessTimer )
         {
@@ -473,15 +478,14 @@ void ScrollBar::OnPan( const PanGesture& gesture )
 
         ShowIndicator();
         mScrollStart = scrollableHandle.GetCurrentProperty< float >( mPropertyScrollPosition );
-        mGestureDisplacement = Vector3::ZERO;
+        mGestureDisplacement = Vector2::ZERO;
         mIsPanning = true;
 
         break;
       }
-      case Gesture::Continuing:
+      case Dali::GestureState::CONTINUING:
       {
-        mGestureDisplacement.x += gesture.displacement.x;
-        mGestureDisplacement.y += gesture.displacement.y;
+        mGestureDisplacement += gesture.GetDisplacement();
 
         float minScrollPosition = scrollableHandle.GetCurrentProperty<float>( mPropertyMinScrollPosition );
         float maxScrollPosition = scrollableHandle.GetCurrentProperty<float>( mPropertyMaxScrollPosition );
@@ -529,7 +533,7 @@ void ScrollBar::OnPan( const PanGesture& gesture )
 
 void ScrollBar::OnSizeSet( const Vector3& size )
 {
-  if(mIndicatorHeightPolicy == Toolkit::ScrollBar::Fixed)
+  if(mIndicatorHeightPolicy == Toolkit::ScrollBar::FIXED)
   {
     mIndicator.SetProperty( Actor::Property::SIZE, Vector2( size.width, mIndicatorFixedHeight ) );
   }
@@ -565,7 +569,7 @@ void ScrollBar::SetIndicatorFixedHeight( float height )
 {
   mIndicatorFixedHeight = height;
 
-  if(mIndicatorHeightPolicy == Toolkit::ScrollBar::Fixed)
+  if(mIndicatorHeightPolicy == Toolkit::ScrollBar::FIXED)
   {
     mIndicator.SetProperty( Actor::Property::SIZE, Vector2( Self().GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).width, mIndicatorFixedHeight) );
   }
@@ -599,13 +603,13 @@ float ScrollBar::GetIndicatorHideDuration() const
 void ScrollBar::OnScrollDirectionPropertySet( Property::Value propertyValue )
 {
   std::string directionName( propertyValue.Get<std::string>() );
-  if(directionName == "Vertical")
+  if(directionName == "VERTICAL")
   {
-    SetScrollDirection(Toolkit::ScrollBar::Vertical);
+    SetScrollDirection(Toolkit::ScrollBar::VERTICAL);
   }
-  else if(directionName == "Horizontal")
+  else if(directionName == "HORIZONTAL")
   {
-    SetScrollDirection(Toolkit::ScrollBar::Horizontal);
+    SetScrollDirection(Toolkit::ScrollBar::HORIZONTAL);
   }
   else
   {
@@ -616,13 +620,13 @@ void ScrollBar::OnScrollDirectionPropertySet( Property::Value propertyValue )
 void ScrollBar::OnIndicatorHeightPolicyPropertySet( Property::Value propertyValue )
 {
   std::string policyName( propertyValue.Get<std::string>() );
-  if(policyName == "Variable")
+  if(policyName == "VARIABLE")
   {
-    SetIndicatorHeightPolicy(Toolkit::ScrollBar::Variable);
+    SetIndicatorHeightPolicy(Toolkit::ScrollBar::VARIABLE);
   }
-  else if(policyName == "Fixed")
+  else if(policyName == "FIXED")
   {
-    SetIndicatorHeightPolicy(Toolkit::ScrollBar::Fixed);
+    SetIndicatorHeightPolicy(Toolkit::ScrollBar::FIXED);
   }
   else
   {
@@ -690,7 +694,7 @@ void ScrollBar::SetProperty( BaseObject* object, Property::Index index, const Pr
       }
       case Toolkit::ScrollBar::Property::SCROLL_POSITION_INTERVALS:
       {
-        Property::Array* array = value.GetArray();
+        const Property::Array* array = value.GetArray();
         if( array )
         {
           Dali::Vector<float> positions;
@@ -859,6 +863,50 @@ Toolkit::ScrollBar ScrollBar::New(Toolkit::ScrollBar::Direction direction)
   return handle;
 }
 
+double ScrollBar::AccessibleImpl::GetMinimum()
+{
+  auto p = Toolkit::ScrollBar::DownCast( self );
+  Handle scrollableHandle = GetImpl( p ).mScrollableObject.GetHandle();
+  return scrollableHandle ? scrollableHandle.GetCurrentProperty< float >( GetImpl( p ).mPropertyMinScrollPosition ) : 0.0f;
+}
+
+double ScrollBar::AccessibleImpl::GetCurrent()
+{
+  auto p = Toolkit::ScrollBar::DownCast( self );
+  Handle scrollableHandle = GetImpl( p ).mScrollableObject.GetHandle();
+  return scrollableHandle ? scrollableHandle.GetCurrentProperty< float >( GetImpl( p ).mPropertyScrollPosition ) : 0.0f;
+}
+
+double ScrollBar::AccessibleImpl::GetMaximum()
+{
+  auto p = Toolkit::ScrollBar::DownCast( self );
+  Handle scrollableHandle = GetImpl( p ).mScrollableObject.GetHandle();
+  return scrollableHandle ? scrollableHandle.GetCurrentProperty< float >( GetImpl( p ).mPropertyMaxScrollPosition ) : 1.0f;
+}
+
+bool ScrollBar::AccessibleImpl::SetCurrent( double current )
+{
+  if( current < GetMinimum() || current > GetMaximum() )
+    return false;
+
+  auto value_before = GetCurrent();
+
+  auto p = Toolkit::ScrollBar::DownCast( self );
+  Handle scrollableHandle = GetImpl( p ).mScrollableObject.GetHandle();
+  if( !scrollableHandle )
+    return false;
+  scrollableHandle.SetProperty( GetImpl( p ).mPropertyScrollPosition, static_cast< float >( current ) );
+
+  auto value_after = GetCurrent();
+
+  if( ( current != value_before ) && ( value_before == value_after ) )
+    return false;
+
+  return true;
+}
+
+double ScrollBar::AccessibleImpl::GetMinimumIncrement() { return 1.0; }
+
 } // namespace Internal
 
 } // namespace Toolkit