#define __DALI_TOOLKIT_TABLE_VIEW_H__
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2015 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/common/vector-wrapper.h>
+#include <dali/public-api/actors/actor-enumerations.h>
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/control.h>
{
class TableView;
}
+/**
+ * @addtogroup dali_toolkit_controls_table_view
+ * @{
+ */
/**
- * TableView is a layout container for aligning child actors in a grid like layout.
+ * @brief TableView is a layout container for aligning child actors in a grid like layout.
+ *
* TableView constrains the x and y position and width and height of the child actors.
* z position and depth are left intact so that 3D model actors can also be laid out
* in a grid without loosing their depth scaling.
+ *
+ * @nosubgrouping
+ * <h3>Per-child Custom properties for script supporting:</h3>
+ *
+ * When an actor is add to the tableView through Actor::Add() instead of TableView::AddChild,
+ * the following custom properties of the actor are checked to decide the actor position inside the table.
+ *
+ * These properties are registered dynamically to the child and is non-animatable.
+ *
+ * | %Property Name | Type |
+ * |-------------------------|-------------|
+ * | cellIndex | Vector2 |
+ * | rowSpan | float |
+ * | columnSpan | float |
+ * | cellHorizontalAlignment | string |
+ * | cellVerticalAlignment | string |
+ *
+ * The row-span or column span has integer value, but its type is float here due to the limitation of the builder's ability to differentiate integer and float from Json string.
+ * The available values for cellHorizontalAlignment are: left, center, right.
+ * The available values for cellVerticalAlignment are: top, center, bottom.
+ *
+ * @code
+ * "name":"gallery1",
+ * "type":"ImageActor",
+ * "image": {
+ * "filename": "{DALI_IMAGE_DIR}gallery-small-1.jpg"
+ * },
+ * "customProperties": {
+ * "cellIndex":[1,1], // property to specify the top-left cell this child occupies, if not set, the first available cell is used
+ * "rowSpan":3, // property to specify how many rows this child occupies, if not set, default value is 1
+ * "columnSpan": 2, // property to specify how many columns this child occupies, if nor set, default value is 1
+ * "cellHorizontalAlignment": "left", // property to specify how to align horizontally inside the cells, if not set, default value is 'left'
+ * "cellVerticalAlignment": "center" // property to specify how to align vertically inside the cells, if not set, default value is 'top'
+ * }
+ * @endcode
*/
class DALI_IMPORT_API TableView : public Control
{
* LayoutRows: set the height of the rows.
* It has the format as follows in script:
* @code
- * "layout-rows":
+ * "layoutRows":
{
"0": { "policy": "fixed", "value": 40 }, //@see SetFixedHight
- "2": { "policy": "relative", "value": 0.33 } //@see SetRelativeHeight
+ "2": { "policy": "relative", "value": 0.33 }, //@see SetRelativeHeight
+ "3": { "policy": "fit", "value":0.0 } //@see SetFitHeight, the value is not used, its height is decided by the children in this row
}
* @endcode
*
* LayoutColumns: set the height of the rows.
* It has the format as follows in script:
* @code
- * "layout-columns":
+ * "layoutColumns":
{
"0": { "policy": "fixed", "value": 40 }, //@see SetFixedWidth
+ "1": { "policy": "fit", "value":0.0 } //@see SetFitHeight, the value is not used, its width is decided by the children in this column
"2": { "policy": "relative", "value": 0.33 } //@see SetRelativeWidth
}
* @endcode
{
ROWS = PROPERTY_START_INDEX, ///< name "rows", type unsigned int
COLUMNS, ///< name "columns", type unsigned int
- CELL_PADDING, ///< name "cell-padding", type Vector2
- LAYOUT_ROWS, ///< name "layout-rows", type Map
- LAYOUT_COLUMNS, ///< name "layout-columns", type Map
+ CELL_PADDING, ///< name "cellPadding", type Vector2
+ LAYOUT_ROWS, ///< name "layoutRows", type Map
+ LAYOUT_COLUMNS, ///< name "layoutColumns", type Map
};
};
- // Custom properties for where to put the actor, these properties should be registered to the child which would be added to the table
- static const std::string CELL_INDICES_PROPERTY_NAME; ///< Property, name "cell-indices", type Vector2
- static const std::string ROW_SPAN_PROPERTY_NAME; ///< Property, name "row-span", type float (Currently builder is unable to differentiate integer and float from Json string)
- static const std::string COLUMN_SPAN_PROPERTY_NAME; ///< Property, name "column-span", type float (Currently builder is unable to differentiate integer and float from Json string)
-
/**
* @brief Describes how the size of a row / column been set
*/
enum LayoutPolicy
{
- Fixed, ///< Fixed with the given value.
- Relative, ///< Calculated as percentage of the remainder after subtracting Padding and Fixed height/width
- Fill ///< Get the remainder of the 100% (after subtracting Padding, Fixed and Relative height/ width) divided evenly between 'fill' rows/columns
+ FIXED, ///< Fixed with the given value.
+ RELATIVE, ///< Calculated as percentage of the remainder after subtracting Padding and Fixed height/width
+ FILL, ///< Default policy, get the remainder of the 100% (after subtracting Fixed, Fit and Relative height/ width) divided evenly between 'fill' rows/columns
+ FIT ///< Fit around its children.
};
/**
Size GetCellPadding();
/**
+ * @brief Specify this row as fitting its height to its children
+ *
+ * @param[in] rowIndex The row to set
+ */
+ void SetFitHeight( unsigned int rowIndex );
+
+ /**
+ * @brief Is the row a fit row
+ *
+ * @param[in] rowIndex The row to check
+ * @return Return true if the row is fit
+ */
+ bool IsFitHeight( unsigned int rowIndex ) const;
+
+ /**
+ * @brief Specify this column as fitting its width to its children
+ *
+ * @param[in] columnIndex The column to set
+ */
+ void SetFitWidth( unsigned int columnIndex );
+
+ /**
+ * @brief Is the column a fit column
+ *
+ * @param[in] columnIndex The column to check
+ * @return Return true if the column is fit
+ */
+ bool IsFitWidth( unsigned int columnIndex ) const;
+
+ /**
* Sets a row to have fixed height
* Setting a fixed height of 0 has no effect
* @pre The row rowIndex must exist.
*/
unsigned int GetColumns();
+ /**
+ * @brief Set the alignment on a cell.
+ *
+ * Cells without calling this function have the default values of LEFT and TOP respectively.
+ *
+ * @param[in] position The cell to set alignment on.
+ * @param[in] horizontal The horizontal alignment.
+ * @param[in] vertical The vertical alignment.
+ */
+ void SetCellAlignment( CellPosition position, HorizontalAlignment::Type horizontal, VerticalAlignment::Type vertical );
+
public: // Not intended for application developers
/**
explicit DALI_INTERNAL TableView( Dali::Internal::CustomActor* internal );
};
+/**
+ * @}
+ */
} // namespace Toolkit
} // namespace Dali