INTERFACE 

    CLASS:  QskIndexedLayoutBox
    BASE:   QskLayout

    QMLCLASS: IndexedLayoutBox
    QMLBASE: Layout

    HEADER: QskIndexedLayoutBox.h

    DESCRIPTION
        \brief Base class of layouts with index ordered elements
    END
        
    PROPERTY
        NAME: autoAddChildren
        TYPE: bool

        READ: autoAddChildren()
        WRITE: setAutoAddChildren()
        NOTIFY: autoAddChildrenChanged()

        DESCRIPTION
            \brief Flag controlling whether to automatically append
                   children to the layout.

             When autoAddChildren is enabled new children are automatically
             appended to the layout. Otherwise items have to be inserted
             manually using addItem() or insertItem().

            \note Children being transparent for positioners are ignored
        END
    END

	FUNCTION
        SIGNATURE: QskIndexedLayoutBox( QUICKITEM parent )
		DESCRIPTION
			\brief Constructor

            Create a layout having autoAddChildren set to false.

			\param parent Parent item
		END
	END

    FUNCTION
        SIGNATURE: ~QskIndexedLayoutBox()
        DESCRIPTION: \brief Destructor
	END

    INVOKABLE
        SIGNATURE: void addItem( QUICKITEM item, Qt::Alignment alignment ) 
        DESCRIPTION
            \brief Insert an item at the end

            The geometries of items being inserted be controlled by the layout.

            \param item Item to be inserted
            \param alignment Flags to control how to align a non expandable element
                     inside of the available space.

            \sa insertItem()
            \sa INHERITED::itemAtIndex()
        END
    END

    INVOKABLE
        SIGNATURE
            void insertItem( int index, QUICKITEM item,
                Qt::Alignment alignment = Qt::Alignment() );
        END

        DESCRIPTION
            \brief Insert an item

            The geometries of items being inserted be controlled by the layout.

            \param index Position, where to insert the item. If index is < 0
                     or beyond INHERITED::itemCount() the item will be appended.
            \param item  Item to be inserted
            \param alignment Flags to control how to align a non expandable element
                         inside of the available space.

            \sa addItem(), INHERITED::itemAtIndex()
        END
    END

    INVOKABLE
        SIGNATURE: void setAlignment( int index, Qt::Alignment alignment );

        DESCRIPTION
            \brief Modify the alignment of a layout element

            \param index Position of the inserted element
            \param alignment Flags to control how to align a non expandable element
                         inside of the available space

            \note The alignment has only an effect, when the item can't be extended
                  to fill the cell geometry.
            \sa alignment()
        END
    END

    INVOKABLE
        SIGNATURE: Qt::Alignment alignment( int index ) const;

        DESCRIPTION
            \param index Position of the inserted element
            \return Flags to control how to align a non expandable element
                    inside of the available space

            \sa setAlignment()
        END
    END

    INVOKABLE
        SIGNATURE: void setAlignment( const QUICKITEM item, Qt::Alignment alignment );

        DESCRIPTION
            \brief Modify the alignment of a layout element

            \param item Inserted item
            \param alignment Flags to control how to align a non expandable element
                             inside of the available space

            \note The alignment has only an effect, when the item can't be extended
                  to fill the cell geometry.
            \sa alignment()
        END
    END

    INVOKABLE
        SIGNATURE: Qt::Alignment alignment( const QUICKITEM item ) const;

        DESCRIPTION
            \param item Inserted item
            \return Flags to control how to align a non expandable element
                     inside of the available space

            \sa setAlignment()
        END
    END

    SIGNAL
        SIGNATURE: void autoAddChildrenChanged()

        DESCRIPTION
            The autoAddChildren property has changed
            \sa setAutoAddChildren(), autoAddChildren()
        END
    END

    SLOT
        SIGNATURE: void setAutoAddChildren( bool on )

        DESCRIPTION
            \brief En/Disable auto appending of children

            When autoAddChildren() is enabled new children are automatically
            appended to the layout. Otherwise items have to be inserted
            manually using addItem() or insertItem().

            \param on When true autoAddChildren is enabled

            \note Existing children, that have not been inserted before
                remain being not seen by the layout.
        END
    END

    FUNCTION
        SIGNATURE: bool autoAddChildren(void) const
        DESCRIPTION: \return Value of the \ref autoAddChildren property
    END

    FUNCTION
        SIGNATURE: void itemChange( QQUICKITEM::ItemChange, const QQUICKITEM::ItemChangeData & )

        DESCRIPTION
            Checking ItemChildAddedChange/ItemChildRemovedChange changes to
            implement the \ref autoAddChildren mode

            \sa autoAddChildren
        END
    END
END
