Merge "Support Right-To-Left of tableView" into devel/master
authorTaeyoon Lee <taeyoon0.lee@samsung.com>
Tue, 21 Nov 2017 06:57:24 +0000 (06:57 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Tue, 21 Nov 2017 06:57:24 +0000 (06:57 +0000)
automated-tests/src/dali-toolkit/utc-Dali-TableView.cpp
dali-toolkit/internal/controls/table-view/table-view-impl.cpp [changed mode: 0644->0755]
dali-toolkit/internal/controls/table-view/table-view-impl.h [changed mode: 0644->0755]

index 590614e..3a8ce20 100644 (file)
@@ -188,6 +188,23 @@ int UtcDaliTableViewMetricsFit(void)
   DALI_TEST_EQUALS( actor1.GetCurrentPosition(), Vector3(0.0f, 0.0f, 0.0f), TEST_LOCATION );
   DALI_TEST_EQUALS( actor2.GetCurrentPosition(), Vector3(10.0f, 0.0f, 0.0f), TEST_LOCATION );
   DALI_TEST_EQUALS( actor3.GetCurrentPosition(), Vector3(0.0f, 10.0f, 0.0f), TEST_LOCATION );
+
+  tableView.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION,  Dali::LayoutDirection::RIGHT_TO_LEFT );
+  application.SendNotification();
+  application.Render();
+
+  DALI_TEST_EQUALS( actor1.GetCurrentPosition(), Vector3(90.0f, 0.0f, 0.0f), TEST_LOCATION );
+  DALI_TEST_EQUALS( actor2.GetCurrentPosition(), Vector3(80.0f, 0.0f, 0.0f), TEST_LOCATION );
+  DALI_TEST_EQUALS( actor3.GetCurrentPosition(), Vector3(90.0f, 10.0f, 0.0f), TEST_LOCATION );
+
+  tableView.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION,  Dali::LayoutDirection::LEFT_TO_RIGHT );
+  application.SendNotification();
+  application.Render();
+
+  DALI_TEST_EQUALS( actor1.GetCurrentPosition(), Vector3(0.0f, 0.0f, 0.0f), TEST_LOCATION );
+  DALI_TEST_EQUALS( actor2.GetCurrentPosition(), Vector3(10.0f, 0.0f, 0.0f), TEST_LOCATION );
+  DALI_TEST_EQUALS( actor3.GetCurrentPosition(), Vector3(0.0f, 10.0f, 0.0f), TEST_LOCATION );
+
   END_TEST;
 }
 
old mode 100644 (file)
new mode 100755 (executable)
index 703440a..abb9eea
@@ -750,15 +750,15 @@ void TableView::OnLayoutNegotiated( float size, Dimension::Type dimension )
 
     // update every column position in ColumnData array
     float cumulatedWidth = 0.0f;
-    for( unsigned int column = 0, columnCount = mCellData.GetColumns(); column < columnCount; ++column )
+    for( auto&& element : mColumnData )
     {
-      if( mColumnData[ column ].sizePolicy == Toolkit::TableView::FILL ||  mColumnData[ column ].sizePolicy == Toolkit::TableView::RELATIVE)
+      if( element.sizePolicy == Toolkit::TableView::FILL || element.sizePolicy == Toolkit::TableView::RELATIVE )
       {
-        mColumnData[ column ].size = mColumnData[ column ].fillRatio * remainingSize;
+        element.size = element.fillRatio * remainingSize;
       }
 
-      cumulatedWidth += mColumnData[ column ].size;
-      mColumnData[column].position = cumulatedWidth;
+      cumulatedWidth += element.size;
+      element.position = cumulatedWidth;
     }
 
     mColumnDirty = false;
@@ -803,6 +803,18 @@ void TableView::OnSizeSet( const Vector3& size )
 void TableView::OnRelayout( const Vector2& size, RelayoutContainer& container )
 {
   // Go through the layout data
+  float totalWidth = 0.0;
+
+  Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>( Self().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>() );
+
+  if( Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection )
+  {
+    for (auto&& element : mColumnData)
+    {
+      totalWidth += element.size;
+    }
+  }
+
   for( unsigned int row = 0, rowCount = mCellData.GetRows(); row < rowCount; ++row )
   {
     for( unsigned int column = 0, columnCount = mCellData.GetColumns(); column < columnCount; ++column )
@@ -826,8 +838,19 @@ void TableView::OnRelayout( const Vector2& size, RelayoutContainer& container )
         Padding padding;
         actor.GetPadding( padding );
 
-        float left = column > 0 ? mColumnData[column-1].position : 0.f;
-        float right = mColumnData[column+position.columnSpan-1].position;
+        float left = (column > 0) ? mColumnData[column - 1].position : 0.f;
+        float right;
+
+        if( Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection )
+        {
+          right = totalWidth - left;
+          left = right - mColumnData[column].size;
+        }
+        else
+        {
+          right = left + mColumnData[column].size;
+        }
+
         float top = row > 0 ? mRowData[row-1].position : 0.f;
         float bottom = mRowData[row+position.rowSpan-1].position;