X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftable-view%2Ftable-view-impl.cpp;h=4f27bba831e202a4893eef9b49bc7fc1d3ddde4f;hp=b68398732bf654efdd4049edb3b8b07fe6f908b3;hb=f546dd5d83a968e573f8f053a01ce43df32c71a0;hpb=7a9fb04d84a8eaa369372db280057b2d426e5d33 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 b683987..4f27bba --- a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp +++ b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp @@ -23,10 +23,14 @@ #include #include #include +#include #include #include #include +// INTERNAL INCLUDES +#include + using namespace Dali; namespace @@ -47,7 +51,7 @@ bool FitToChild( Actor actor, Dimension::Type dimension ) // currently not called from code so compiler will optimize these away, kept here for future debugging #define TABLEVIEW_TAG "DALI Toolkit::TableView " -#define TV_LOG(fmt, args...) Debug::LogMessage(Debug::DebugInfo, TABLEVIEW_TAG fmt, ## args) +#define TV_LOG(fmt, args,...) Debug::LogMessage(Debug::DebugInfo, TABLEVIEW_TAG fmt, ## args) //#define TABLEVIEW_DEBUG 1 #if defined(TABLEVIEW_DEBUG) @@ -65,7 +69,7 @@ void PrintArray( Array2d& array ) if( data.actor ) { actor = 'A'; - actorName = data.actor.GetName(); + actorName = data.actor.GetProperty< std::string >( Dali::Actor::Property::NAME ); } TV_LOG("Array[%d,%d]=%c %s %d,%d,%d,%d ", i, j, actor, actorName.c_str(), data.position.rowIndex, data.position.columnIndex, @@ -134,8 +138,8 @@ DALI_PROPERTY_REGISTRATION( Toolkit, TableView, "cellPadding", VECTOR2, CELL_ DALI_PROPERTY_REGISTRATION( Toolkit, TableView, "layoutRows", MAP, LAYOUT_ROWS ) DALI_PROPERTY_REGISTRATION( Toolkit, TableView, "layoutColumns", MAP, LAYOUT_COLUMNS ) DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "cellIndex", VECTOR2, CELL_INDEX ) -DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "rowSpan", FLOAT, ROW_SPAN ) -DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "columnSpan", FLOAT, COLUMN_SPAN ) +DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "rowSpan", INTEGER, ROW_SPAN ) +DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "columnSpan", INTEGER, COLUMN_SPAN ) DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "cellHorizontalAlignment", STRING, CELL_HORIZONTAL_ALIGNMENT ) DALI_CHILD_PROPERTY_REGISTRATION( Toolkit, TableView, "cellVerticalAlignment", STRING, CELL_VERTICAL_ALIGNMENT ) @@ -749,15 +753,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; @@ -802,6 +806,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 ) @@ -816,41 +832,54 @@ void TableView::OnRelayout( const Vector2& size, RelayoutContainer& container ) if( actor && position.rowIndex == row && position.columnIndex == column ) { // Anchor actor to top left of the cell - actor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - actor.SetParentOrigin( ParentOrigin::TOP_LEFT ); + if( actor.GetProperty( Actor::Property::POSITION_USES_ANCHOR_POINT ).Get< bool >() ) + { + actor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT ); + } + actor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT ); + + Padding padding = actor.GetProperty( Actor::Property::PADDING ); - Padding padding; - actor.GetPadding( padding ); + 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 left = column > 0 ? mColumnData[column-1].position : 0.f; - float right = mColumnData[column+position.columnSpan-1].position; float top = row > 0 ? mRowData[row-1].position : 0.f; float bottom = mRowData[row+position.rowSpan-1].position; if( cellData.horizontalAlignment == HorizontalAlignment::LEFT ) { - actor.SetX( left + mPadding.width + padding.left ); + actor.SetProperty( Actor::Property::POSITION_X, left + mPadding.width + padding.left ); } else if( cellData.horizontalAlignment == HorizontalAlignment::RIGHT ) { - actor.SetX( right - mPadding.width - padding.right - actor.GetRelayoutSize( Dimension::WIDTH ) ); + actor.SetProperty( Actor::Property::POSITION_X, right - mPadding.width - padding.right - actor.GetRelayoutSize( Dimension::WIDTH ) ); } else //if( cellData.horizontalAlignment == HorizontalAlignment::CENTER ) { - actor.SetX( (left + right + padding.left - padding.right - actor.GetRelayoutSize( Dimension::WIDTH )) * 0.5f ); + actor.SetProperty( Actor::Property::POSITION_X, (left + right + padding.left - padding.right - actor.GetRelayoutSize( Dimension::WIDTH )) * 0.5f ); } if( cellData.verticalAlignment == VerticalAlignment::TOP ) { - actor.SetY( top + mPadding.height + padding.top ); + actor.SetProperty( Actor::Property::POSITION_Y, top + mPadding.height + padding.top ); } else if( cellData.verticalAlignment == VerticalAlignment::BOTTOM ) { - actor.SetY( bottom - mPadding.height - padding.bottom - actor.GetRelayoutSize( Dimension::HEIGHT ) ); + actor.SetProperty( Actor::Property::POSITION_Y, bottom - mPadding.height - padding.bottom - actor.GetRelayoutSize( Dimension::HEIGHT ) ); } else //if( cellData.verticalAlignment = VerticalAlignment::CENTER ) { - actor.SetY( (top + bottom + padding.top - padding.bottom - actor.GetRelayoutSize( Dimension::HEIGHT )) * 0.5f ); + actor.SetProperty( Actor::Property::POSITION_Y, (top + bottom + padding.top - padding.bottom - actor.GetRelayoutSize( Dimension::HEIGHT )) * 0.5f ); } } } @@ -992,12 +1021,12 @@ void TableView::OnChildAdd( Actor& child ) Toolkit::TableView::CellPosition cellPosition; if( child.GetPropertyType( Toolkit::TableView::ChildProperty::ROW_SPAN ) != Property::NONE ) { - cellPosition.rowSpan = static_cast( child.GetProperty( Toolkit::TableView::ChildProperty::ROW_SPAN ).Get() ); + cellPosition.rowSpan = child.GetProperty( Toolkit::TableView::ChildProperty::ROW_SPAN ).Get< int >(); } if( child.GetPropertyType( Toolkit::TableView::ChildProperty::COLUMN_SPAN ) != Property::NONE ) { - cellPosition.columnSpan = static_cast( child.GetProperty( Toolkit::TableView::ChildProperty::COLUMN_SPAN ).Get() ); + cellPosition.columnSpan = child.GetProperty( Toolkit::TableView::ChildProperty::COLUMN_SPAN ).Get< int >(); } if( child.GetPropertyType( Toolkit::TableView::ChildProperty::CELL_INDEX ) != Property::NONE ) @@ -1091,8 +1120,13 @@ void TableView::OnInitialize() { // Make self as keyboard focusable and focus group Actor self = Self(); - self.SetKeyboardFocusable(true); + self.SetProperty( Actor::Property::KEYBOARD_FOCUSABLE,true); SetAsKeyboardFocusGroup(true); + + DevelControl::SetAccessibilityConstructor( self, []( Dali::Actor actor ) { + return std::unique_ptr< Dali::Accessibility::Accessible >( + new Control::Impl::AccessibleImpl( actor, Dali::Accessibility::Role::TABLE ) ); + } ); } void TableView::ResizeContainers( unsigned int rows, unsigned int columns ) @@ -1186,7 +1220,7 @@ void TableView::SetHeightOrWidthProperty(TableView& tableViewImpl, void(TableView::*funcFit)(unsigned int), const Property::Value& value ) { - Property::Map* map = value.GetMap(); + const Property::Map* map = value.GetMap(); if( map ) { unsigned int index(0);