From: adun Date: Thu, 19 Oct 2017 19:28:16 +0000 (+0800) Subject: [4.0] Support Right-To-Left of tableView X-Git-Tag: accepted/tizen/4.0/unified/20171129.150245~7^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1fb53721e81ebba0b718e3211a16494fe8c27773;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [4.0] Support Right-To-Left of tableView Change-Id: Ie01c9eaa56e790b74efcd9705801d146c5ce492c --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TableView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TableView.cpp index 590614e..3a8ce20 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TableView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TableView.cpp @@ -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; } diff --git a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp old mode 100644 new mode 100755 index 703440a..abb9eea --- a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp +++ b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp @@ -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( Self().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get() ); + + 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; diff --git a/dali-toolkit/internal/controls/table-view/table-view-impl.h b/dali-toolkit/internal/controls/table-view/table-view-impl.h old mode 100644 new mode 100755