/*
 * Copyright 2020 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		Niels Sascha Reedijk, niels.reedijk@gmail.com
 *
 * Reviewers:
 * 		Adrien Destugues, pulkomandy@pulkomandy.tk
 *
 * Corresponds to:
 *		headers/os/interface/LayoutBuilder.h	 rev 49977
 */


/*!
	\class BLayoutBuilder::Cards<>
	\ingroup layout
	\ingroup libbe
	\brief BLayoutBuilder::Base subclass for building BCardLayouts.

	\since Haiku R1

    The BCardLayout class is a simple BLayout subclass that arranges the
    items as a stack of cards with only one card being on top and visible to
    the user.

	For a detailed view on the properties, see the \link BCardLayout class
	description\endlink.
*/


/*!
	\typedef BLayoutBuilder::Cards<ParentBuilder>::ThisBuilder
	\copydoc BLayoutBuilder::Group<ParentBuilder>::ThisBuilder
*/


/*!
	\typedef BLayoutBuilder::Cards<ParentBuilder>::GroupBuilder
	\copydoc BLayoutBuilder::Group<ParentBuilder>::GroupBuilder
*/


/*!
	\typedef BLayoutBuilder::Cards<ParentBuilder>::GridBuilder
	\copydoc BLayoutBuilder::Group<ParentBuilder>::GridBuilder
*/


/*!
	\typedef BLayoutBuilder::Cards<ParentBuilder>::SplitBuilder
	\copydoc BLayoutBuilder::Group<ParentBuilder>::SplitBuilder
*/


/*!
	\typedef BLayoutBuilder::Cards<ThisBuilder>::CardBuilder
	\copydoc BLayoutBuilder::Group<ThisBuilder>::CardBuilder
*/


/*!
	\name Constructors
*/


//! @{


/*!
	\fn BLayoutBuilder::Cards<ParentBuilder>::Cards()
	\brief Creates a builder for BCardLayout.

	\since Haiku R1
*/


/*!
	\fn BLayoutBuilder::Cards<ParentBuilder>::Cards(BWindow* window)
	\brief Creates a new builder for BCardLayout, and attaches it to a
		\a window.

	\since Haiku R1
*/


/*!
	\fn BLayoutBuilder::Cards<ParentBuilder>::Cards(BView* view)
	\brief Creates a new builder for BCardLayout, and attaches it to a
		\a view.

	\since Haiku R1
*/


/*!
	\fn BLayoutBuilder::Cards<ParentBuilder>::Cards(BCardLayout* layout)
	\brief Creates a builder targeting an existing BCardLayout.

	\since Haiku R1
*/


/*!
	\fn BLayoutBuilder::Cards<ParentBuilder>::Cards(BCardView* view)
	\brief Creates a builder targeting an existing BCardView.

	\since Haiku R1
*/


//! @}


/*!
	\name Accessors
*/


//! @{


/*!
	\fn BCardLayout* BLayoutBuilder::Cards<ParentBuilder>::Layout() const
	\copydoc BLayoutBuilder::Group<ParentBuilder>::Layout()
*/


/*!
	\fn BView* BLayoutBuilder::Cards<ParentBuilder>::View() const
	\copydoc BLayoutBuilder::Group<ParentBuilder>::View()
*/

/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::GetLayout(
		BCardLayout** _layout)
	\copydoc BLayoutBuilder::Group<ParentBuilder>::GetLayout()
*/


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::GetView(
		BView** _view)
	\copydoc BLayoutBuilder::Group<ParentBuilder>::GetView()
*/


/*!
	\fn BLayoutBuilder::Cards<ParentBuilder>::operator BCardLayout*()
	\brief Cast this builder into the layout object it represents.

	\since Haiku R1
*/

//! @}


/*!
	\name Adding BViews and BLayoutItems
*/


//! @{


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::Add(BView* view)
	\brief Add a \a view to the underlying BCardLayout.

	The layout item will be added as a card at the end of the stack.

	\param view The BView to be added. The underlying BCardLayout will take
		ownership of the object.

	\since Haiku R1
*/


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::Add(
		BLayoutItem* item)
	\brief Add a \a item to the underlying BCardLayout.

	The layout item will be added as a card at the end of the stack.

	\param item The BLayoutItem to be added. The underlying BCardLayout will
		take ownership of the object.

	\since Haiku R1
*/


//! @}


/*!
	\name Adding BLayouts and their BView Pairs

	A set of methods that add a BLayout or BView subclass and return a
	BLayoutBuilder::Base subclass representing the newly added object. These
	methods push a new builder on top of the stack, you will not be using
	\c this builder again until you call End().
*/


//! @{


/*!
	\fn GroupBuilder BLayoutBuilder::Cards<ParentBuilder>::AddGroup(
		orientation orientation, float spacing)
	\copybrief GroupBuilder BLayoutBuilder::Group<ParentBuilder>::AddGroup(
		orientation orientation, float spacing, float weight)

	\param orientation The orientation to use for the new BGroupLayout.
	\param spacing The spacing to use for the new BGroupLayout.

	\returns A GroupBuilder representing the newly created BGroupLayout.

	\since Haiku R1
*/


/*!
	\fn GroupBuilder BLayoutBuilder::Cards<ParentBuilder>::AddGroup(
		BGroupView* groupView)
	\copybrief GroupBuilder BLayoutBuilder::Group<ParentBuilder>::AddGroup(
		BGroupLayout* groupLayout, float weight)

	\param groupView The BGroupView to be added.

	\returns A GroupBuilder representing the layout of the \a groupView.

	\since Haiku R1
*/


/*!
	\fn GroupBuilder BLayoutBuilder::Cards<ParentBuilder>::AddGroup(
		BGroupLayout* groupLayout)
	\copybrief GroupBuilder BLayoutBuilder::Group<ParentBuilder>::AddGroup(BGroupView*
		groupView, float weight)

	\param groupLayout The BGroupLayout to be added.

	\returns A GroupBuilder representing the \a groupLayout.

	\since Haiku R1
*/


/*!
	\fn GridBuilder	BLayoutBuilder::Cards<ParentBuilder>::AddGrid(
		float horizontalSpacing, float verticalSpacing)
	\copydoc GridBuilder BLayoutBuilder::Group<ParentBuilder>::AddGrid(
		float horizontalSpacing, float verticalSpacing, float weight)

	\param horizontalSpacing The horizontal spacing for the new BGridLayout.
	\param verticalSpacing The vertical spacing for the new BGridLayout.

	\returns A GridBuilder representing the newly created BGridLayout.

	\since Haiku R1
*/


/*!
	\fn GridBuilder BLayoutBuilder::Cards<ParentBuilder>::AddGrid(
		BGridLayout* gridLayout)
	\copybrief GridBuilder BLayoutBuilder::Group<ParentBuilder>::AddGrid(
		BGridLayout* gridLayout, float weight)

	\param gridLayout The BGridLayout to be added and used to construct the
		returned GridBuilder.

	\returns A GridBuilder representing \a gridLayout.

	\since Haiku R1
*/


/*!
	\fn GridBuilder	BLayoutBuilder::Cards<ParentBuilder>::AddGrid(
		BGridView* gridView)
	\copybrief GridBuilder	BLayoutBuilder::Group<ParentBuilder>::AddGrid(
		BGridView* gridView, float weight)

	\param gridView The BGridView to be added and used to construct the
		returned GridBuilder.

	\returns A GridBuilder representing the layout of the \a gridView.

	\since Haiku R1
*/


/*!
	\fn SplitBuilder BLayoutBuilder::Cards<ParentBuilder>::AddSplit(
		orientation orientation, float spacing)
	\copybrief SplitBuilder BLayoutBuilder::Group<ParentBuilder>::AddSplit(
		orientation orientation, float spacing, float weight)

	\param orientation The orientation of the new BSplitView.
	\param spacing The spacing of the new BSplitView.

	\returns A SplitBuilder representing the new BSplitView.

	\since Haiku R1
*/


/*!
	\fn SplitBuilder BLayoutBuilder::Cards<ParentBuilder>::AddSplit(
		BSplitView* splitView)
	\copybrief SplitBuilder BLayoutBuilder::Group<ParentBuilder>::AddSplit(
		BSplitView* splitView, float weight)

	\param splitView The BSplitView to be added.

	\returns A SplitBuilder representing the \a splitView.

	\since Haiku R1
*/


/*!
	\fn CardBuilder BLayoutBuilder::Cards<ParentBuilder>::AddCards()
	\copybrief CardBuilder BLayoutBuilder::Group<ParentBuilder>::AddCards(
		float weight)

	\returns A CardBuilder representing the new BCardLayout.

	\since Haiku R1
*/


/*!
	\fn CardBuilder BLayoutBuilder::Cards<ParentBuilder>::AddCards(
		BCardLayout* cardLayout)
	\copybrief CardBuilder BLayoutBuilder::Group<ParentBuilder>::AddCards(
		BCardLayout* cardLayout, float weight)

	\param cardLayout The existing layout that will be added to the underlying
		BSplitView.

	\returns A CardBuilder representing the \a cardLayout.

	\since Haiku R1
*/


/*!
	\fn CardBuilder BLayoutBuilder::Cards<ParentBuilder>::AddCards(
		BCardView* cardView)
	\copybrief CardBuilder BLayoutBuilder::Group<ParentBuilder>::AddCards(
		BCardView* cardView, float weight)

	\param cardView The existing view that will be added to the underlying
		BSplitView.

	\returns A CardBuilder representing the layout of t he \a cardView.

	\since Haiku R1
*/



//! @}


/*!
	\name Explicit Sizes and Alignment
*/


//! @{


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::SetExplicitMinSize(
		BSize size)
	\copydoc BLayoutBuilder::Group<ParentBuilder>::SetExplicitMinSize()
*/


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::SetExplicitMaxSize(
		BSize size)
	\copydoc BLayoutBuilder::Group<ParentBuilder>::SetExplicitMaxSize()
*/


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::SetExplicitPreferredSize(
		BSize size)
	\copydoc BLayoutBuilder::Group<ParentBuilder>::SetExplicitPreferredSize()
*/


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::SetExplicitAlignment(
		BAlignment alignment)
	\copydoc BLayoutBuilder::Group<ParentBuilder>::SetExplicitAlignment()
*/


//! @}


/*!
	\name Visible Item
*/


//! @{


/*!
	\fn ThisBuilder& BLayoutBuilder::Cards<ParentBuilder>::SetVisibleItem(
		int32 index)
	\brief Set the current visible item to the item at \a index.

	\see BCardLayout::SetVisibleItem(int32)
*/


//! @}