-#ifndef __DALI_TOOLKIT_INTERNAL_TABLE_VIEW_H__
-#define __DALI_TOOLKIT_INTERNAL_TABLE_VIEW_H__
+#ifndef DALI_TOOLKIT_INTERNAL_TABLE_VIEW_H
+#define DALI_TOOLKIT_INTERNAL_TABLE_VIEW_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
*/
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/weak-handle.h>
+
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/control-impl.h>
-#include <dali-toolkit/public-api/controls/table-view/table-view.h>
+#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
#include "array-2d.h"
namespace Dali
public:
/**
- * Enum for the size policies of rows and columns
- */
- enum CellSizePolicy
- {
- FILL, ///< Fill up available space, may have a ratio associated with it
- FIXED, ///< A specific fixed width or height
- FIT ///< Fit around actors in the row or column
- };
-
- /**
* Create a new TableView.
* @return A smart-pointer to the newly allocated TableView.
*/
Size GetCellPadding();
/**
- * @brief Set a row policy
- *
- * @param[in] rowIndex The row to set the policy for
- * @param[in] policy The policy to set
+ * @copydoc Toolkit::TableView::SetFitHeight
*/
- void SetRowPolicy( unsigned int rowIndex, CellSizePolicy policy );
+ void SetFitHeight( unsigned int rowIndex );
/**
- * @brief Querry a row policy
- *
- * @param[in] rowIndex The row to querry
- * @return Return the policy
+ * @copydoc Toolkit::TableView::IsFitHeight
*/
- CellSizePolicy GetRowPolicy( unsigned int rowIndex ) const;
+ bool IsFitHeight( unsigned int rowIndex ) const;
/**
- * @brief Set a column policy
- *
- * @param[in] columnIndex The column to set the policy for
- * @param[in] policy The policy to set
+ * @copydoc Toolkit::TableView::SetFitWidth
*/
- void SetColumnPolicy( unsigned int columnIndex, CellSizePolicy policy );
+ void SetFitWidth( unsigned int columnIndex );
/**
- * @brief Querry a column policy
- *
- * @param[in] columnIndex The column to querry
- * @return Return the policy
+ * @copydoc Toolkit::TableView::IsFitWidth
*/
- CellSizePolicy GetColumnPolicy( unsigned int columnIndex ) const;
+ bool IsFitWidth( unsigned int columnIndex ) const;
/**
* @copydoc Toolkit::TableView::SetFixedWidth
private: // From Control
/**
- * @copydoc Control::OnControlChildAdd(Actor& child)
+ * @copydoc Control::OnChildAdd(Actor& child)
*/
- virtual void OnControlChildAdd( Actor& child );
+ void OnChildAdd( Actor& child ) override;
/**
- * @copydoc Control::OnControlChildRemove(Actor& child)
+ * @copydoc Control::OnChildRemove(Actor& child)
*/
- virtual void OnControlChildRemove( Actor& child );
+ void OnChildRemove( Actor& child ) override;
/**
* @copydoc Control::OnRelayout
*/
- virtual void OnRelayout( const Vector2& size, RelayoutContainer& container );
+ void OnRelayout( const Vector2& size, RelayoutContainer& container ) override;
/**
* @copydoc Control::CalculateChildSize
*/
- virtual float CalculateChildSize( const Actor& child, Dimension dimension );
+ float CalculateChildSize( const Actor& child, Dimension::Type dimension ) override;
/**
* @copydoc Control::OnInitialize()
*/
- virtual void OnInitialize();
+ void OnInitialize() override;
/**
* @copydoc Control::GetNextKeyboardFocusableActor
*/
- virtual Actor GetNextKeyboardFocusableActor( Actor currentFocusedActor, Toolkit::Control::KeyboardFocusNavigationDirection direction, bool loopEnabled );
+ Actor GetNextKeyboardFocusableActor( Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled ) override;
/**
* @copydoc Control::GetNaturalSize()
*/
- virtual Vector3 GetNaturalSize();
+ Vector3 GetNaturalSize() override;
/**
* @copydoc Control::RelayoutDependentOnChildren()
*/
- virtual bool RelayoutDependentOnChildren( Dimension dimension = ALL_DIMENSIONS );
+ bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ) override;
/**
* @copydoc Control::OnCalculateRelayoutSize
*/
- virtual void OnCalculateRelayoutSize( Dimension dimension );
+ void OnCalculateRelayoutSize( Dimension::Type dimension ) override;
/**
* @copydoc Control::OnLayoutNegotiated
*/
- virtual void OnLayoutNegotiated( float size, Dimension dimension );
+ void OnLayoutNegotiated( float size, Dimension::Type dimension ) override;
+
+ /**
+ * @copydoc CustomActorImpl::OnSizeSet( const Vector3& size )
+ */
+ void OnSizeSet( const Vector3& size ) override;
private: // Implementation
* Struct to hold data for rows and columns
*
* If sizePolicy is FIXED then size is the absolute size to use.
- * If sizePolicy is FIT or FILL then size is the calculated value of size.
+ * If sizePolicy is FIT, RELATIVE or FILL then size is the calculated value of size.
*/
struct RowColumnData
{
RowColumnData()
: size( 0.0f ),
fillRatio( 0.0f ),
- sizePolicy( FILL ),
- userFillRatio( false )
+ position( 0.0f ),
+ sizePolicy( Toolkit::TableView::FILL )
{
}
* @param[in] newSize The size to set for this data
* @param[in] newSizePolicy The policy used to interpret the size value
*/
- RowColumnData( float newSize, float newFillRatio, CellSizePolicy newSizePolicy, bool newUserFillRatio )
+ RowColumnData( float newSize, float newFillRatio, Toolkit::TableView::LayoutPolicy newSizePolicy )
: size( newSize ),
fillRatio( newFillRatio ),
- sizePolicy( newSizePolicy ),
- userFillRatio( newUserFillRatio )
+ position( 0.0f ),
+ sizePolicy( newSizePolicy )
{
}
- float size; ///< Set or calculated size
- float fillRatio; ///< Ratio to fill remaining space
- CellSizePolicy sizePolicy; ///< The size policy used to interpret the size value
- bool userFillRatio : 1; ///< FillRatio was set by user
+ float size; ///< Set or calculated size
+ float fillRatio; ///< Ratio to fill remaining space, only valid with RELATIVE or FILL policy
+ float position; ///< Position of the row/column, this value is updated during every Relayout round
+ Toolkit::TableView::LayoutPolicy sizePolicy; ///< The size policy used to interpret the size value
};
typedef Dali::Vector<RowColumnData> RowColumnArray;
bool RemoveAllInstances( const Actor& child );
/**
- * @brief Compute relative sizes for an array
+ * @brief Calculate the ratio of FILL rows/columns
*
* @param[in] data The RowColumn data to compute the relative sizes for
*/
- void ComputeRelativeSizes( RowColumnArray& data );
+ void CalculateFillSizes( RowColumnArray& data );
/**
* @brief Calculate the total fixed sizes for a row or column
float CalculateTotalFixedSize( const RowColumnArray& data );
/**
- * @brief Calculate the fixed sizes for a row or column
- *
- * @param[in] data The row or column data to process
- * @param[in] dimension The dimension being calculated: row == HEIGHT, column == WIDTH
- */
- void CalculateFixedSizes( RowColumnArray& data, Dimension dimension );
-
- /**
- * @brief Calculate the value of the relative sizes
+ * @brief Calculate the sizes of FIT rows/columns
*
* @param[in] data The row or column data to process
- * @param[in] size The size of the table view in that dimension
+ * @param[in] dimension The dimension being calculated: row == Dimension::HEIGHT, column == Dimension::WIDTH
*/
- void CalculateRelativeSizes( RowColumnArray& data, float size );
+ void CalculateFitSizes( RowColumnArray& data, Dimension::Type dimension );
/**
* @brief Search for a FIT cell in the array
bool FindFit( const RowColumnArray& data );
/**
- * @brief Calculate row and column data when it is dirty
+ * @brief Return the cell padding for a given dimension
+ *
+ * @param[in] dimension The dimension to return the padding for
+ * @return Return the padding (x = low, y = high)
*/
- void CalculateRowColumnData();
+ Vector2 GetCellPadding( Dimension::Type dimension );
/**
* A reference counted object may only be deleted by calling Unreference()
/**
* Called to set the heights/widths property.
* @param[in] tableViewImpl The object whose property is set.
- * @param[in] funcFixed The set function to call, it can be SetFixedHeight or SetFixedWidths.
- * @param[in] funcRelative The set function to call, it can be SetRelativeHeight or SetRelativeWidths.
+ * @param[in] funcFixed The set function to call, it can be SetFixedHeight or SetFixedWidth.
+ * @param[in] funcRelative The set function to call, it can be SetRelativeHeight or SetRelativeWidth.
+ * @param[in] funcFit The set function to call, it can be SetFitHeight or SetFiltWidth.
* @param[in] value The new property value.
*/
static void SetHeightOrWidthProperty( TableView& tableViewImpl,
void(TableView::*funcFixed)(unsigned int, float),
void(TableView::*funcRelative)(unsigned int, float),
+ void(TableView::*funcFit)(unsigned int),
const Property::Value& map );
/**
private: // Data
- Array2d<CellData> mCellData; ///< Data for each cell: Actor, alignment settings etc
+ Array2d<CellData> mCellData; ///< Data for each cell: Actor, alignment settings etc
RowColumnArray mRowData; ///< Data for each row
RowColumnArray mColumnData; ///< Data for each column
Size mFixedTotals; ///< Accumulated totals for fixed width and height
Size mPadding; ///< Padding to apply to each cell
+
+ WeakHandle<Actor> mPreviousFocusedActor; ///< Perviously focused actor
bool mLayoutingChild; ///< Can't be a bitfield due to Relayouting lock
- bool mRowColumnDirty : 1; ///< Flag to indicate the row column data is dirty
+ bool mRowDirty : 1; ///< Flag to indicate the row data is dirty
+ bool mColumnDirty : 1; ///< Flag to indicate the column data is dirty
};
} // namespace Internal
} // namespace Dali
-#endif // __DALI_TOOLKIT_INTERNAL_TABLE_VIEW_H__
+#endif // DALI_TOOLKIT_INTERNAL_TABLE_VIEW_H