/*
 * Copyright 2010 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		Alex Wilson, yourpalal2@gmail.com
 *
 * Corresponds to:
 *		headers/os/interface/GridLayout.h	rev 38207
 *		src/kits/interface/GridLayout.cpp	rev 38207
 */


/*!
	\file GridLayout.h
	\ingroup layout
	\ingroup libbe
	\brief Provides the BGridLayout class.
*/


/*!
	\class BGridLayout
	\ingroup layout
	\ingroup libbe
	\brief The BGridLayout class a BLayout subclass that arranges the items it
		holds in a grid.

	Each item in a BGridLayout receives a rectangular area which can span more
	than a single row or column. The indexing of columns and rows is zero based,
	starting in the top-left.

	\warning This class is not yet finalized, if you use it in your software
	         assume that it will break some time in the future.

	\since Haiku R1
*/


/*!
	\fn BGridLayout::BGridLayout(float horizontal = 0.0f, float vertical = 0.0f)
	\brief Create a BGridLayout with \a horizontal space between columns and
	       \a vertical space between rows.

	\since Haiku R1
*/


/*!
	\fn BGridLayout::BGridLayout(BMessage* from)
	\brief Archive constructor.

	\param from The message to build the BGridLayout from.

	\since Haiku R1
*/


/*!
	\fn BGridLayout::~BGridLayout()
	\brief Destructor method.

	Standard Destructor.

	\since Haiku R1
*/


/*!
	\fn int32 BGridLayout::CountColumns() const
	\brief Returns the number of active columns in this layout.

	\returns The number of active columns in the layout.

	\since Haiku R1
*/


/*!
	\fn int32 BGridLayout::CountRows() const
	\brief Returns the number of active rows in this layout.

	\returns the number of active rows in the layout.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::HorizontalSpacing() const
	\brief Returns the spacing between columns for this layout.

	\returns The spacing between columns for the layout.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::VerticalSpacing() const
	\brief Returns the spacing between rows for this layout.

	\returns The spacing between rows for the layout.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetHorizontalSpacing(float spacing)
	\brief Set the spacing between columns for this layout.

	\param spacing The number of pixels of spacing to set.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetVerticalSpacing(float spacing)
	\brief Set the spacing between rows for this layout.

	\param spacing The number of pixels of spacing to set.

	\since Haiku R1
*/


/*!
	\fn	void BGridLayout::SetSpacing(float horizontal, float vertical)
	\brief Set the spacing between columns and rows for this layout.

	\param horizontal The number of \a horizontal pixels of spacing to set.
	\param vertical The number of \a vertical pixels of spacing to set.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::ColumnWeight(int32 column) const
	\brief Returns the weight for the specified \a column.

	\returns The \a column weight as a float.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetColumnWeight(int32 column, float weight)
	\brief Set the weight for \a column to \a weight.

	\param column The column to set.
	\param weight The weight to set.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::MinColumnWidth(int32 column) const
	\brief Returns the minimum width for \a column.

	\param column The column to get the minimum width of.

	\returns The minimum width for \a column as a float.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetMinColumnWidth(int32 column, float width)
	\brief Sets the minimum width for \a column to \a width.

	\param column The \a column to set the minimum width of.
	\param width The \a width to set.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::MaxColumnWidth(int32 column) const
	\brief Returns the maximum width for \a column.

	\param column The column to get the maximum width of.

	\returns The maximum width for \a column as a float.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetMaxColumnWidth(int32 column, float width)
	\brief Sets the maximum width for \a column to \a width.

	\param column The column to set the maximum width of.
	\param width The \a width to set.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::RowWeight(int32 row) const
	\brief Returns the weight of the specified \a row.

	\returns The weight of the \a row.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetRowWeight(int32 row, float weight)
	\brief Set the weight of \a row to \a weight.

	\param row The \a row number.
	\param weight The \a weight to set.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::MinRowHeight(int row) const
	\brief Returns the minimum height for \a row.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetMinRowHeight(int32 row, float height)
	\brief Sets the minimum height for \a row to \a width.

	\since Haiku R1
*/


/*!
	\fn float BGridLayout::MaxRowHeight(int32 row) const
	\brief Returns the maximum height for \a row.

	\since Haiku R1
*/


/*!
	\fn void BGridLayout::SetMaxRowHeight(int32 row, float height)
	\brief Sets the maximum height for \a row to \a width.

	\since Haiku R1
*/


/*!
	\fn BLayoutItem* BGridLayout::ItemAt(int32 column, int32 row) const
	\brief Get a pointer to the item at the requested cell in the grid.

	\param column The column, starting with \c 0 for the leftmost column. Note
		that the value should be 0 or higher.
	\param row The row, starting with \c 0 for the topmost row. Note that the
		value should be 0 or higher.

	\return A pointer to the layout item at these coordinates, or \c NULL if
		there is no item.
*/


/*!
	\fn BLayoutItem* BGridLayout::AddView(BView* child)
	\brief Adds \a child to this layout in the first empty cell available, or
		in a new column in the first row if there are no emtpy cells.

	\since Haiku R1
*/


/*!
	\fn BLayoutItem* BGridLayout::AddView(int32 index, BView* child);
	\brief BGridLayout::AddView(BView*)

	\since Haiku R1
*/


/*!
	\fn BLayoutItem* BGridLayout::AddView(BView* child, int32 column, int32 row,
			int32 columnCount = 1, int32 rowCount = 1);
	\brief Adds \a child to this layout at \a column and \a row. \a child may
	       also occupy additional cells if \a columnCount or \a rowCount are
	       greater than \c 1.

	Fails and returns NULL if the requested area is occupied, or if internal
	memory allocations fail.

	\since Haiku R1
*/


/*!
	\fn BLayoutItem* BGridLayout::AddItem(BLayoutItem* item)
	\brief Adds \a item to this layout in the first empty cell available, or
	       in a new column in the first row if there are no emtpy cells.

	\since Haiku R1
*/


/*!
	\fn BLayoutItem* BGridLayout::AddItem(int32 index, BLayoutItem* item);
	\brief BGridLayout::AddItem(BLayoutItem*)
*/


/*!
	\fn BLayoutItem* BGridLayout::AddItem(BLayoutItem* item, int32 column,
		int32 row, int32 columnCount = 1, int32 rowCount = 1);
	\brief Adds \a item to this layout at \a column and \a row. \a item may
	       also occupy additional cells if \a columnCount or \a rowCount are
	       greater than 1.

	Fails and returns \c NULL if the requested area is occupied, or if internal
	memory allocations fail.

	\since Haiku R1
*/


/*!
	\fn static BArchivable* BGridLayout::Instantiate(BMessage *from)
	\brief Instantiate the layout from the message \a from.

	\since Haiku R1
*/
