diff -r 4ea6f81c838a -r 0e9bb658ef58 mmuifw_plat/alf_widgetmodel_api/inc/alf/ialflayoutmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmuifw_plat/alf_widgetmodel_api/inc/alf/ialflayoutmanager.h Wed Sep 01 12:23:18 2010 +0100 @@ -0,0 +1,185 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: interface for layout managers +* +*/ + + +#ifndef I_ALFLAYOUTMANAGER +#define I_ALFLAYOUTMANAGER + +#include +#include + +class CAlfLayout; +class CAlfControl; + +namespace duiuimodel + { +class DuiNode; + } +using namespace duiuimodel; + +namespace Alf + { + +class CAlfWidgetControl; +class AlfCustomInitDataBase; + +namespace ialflayoutmanager + { + static const IfId Ident = + { + 0, "ialflayoutmanager" + }; + } + +/** + * The interface for layout managers + * + * Layout manager handles the layouting of child widgets in the container widget. + * It uses IAlfLayoutPreferences-interface (@see IAlfLayoutPreferences) + * of child widgets as a guide for laying out the widgets. The layoutmanager + * is set to the IAlfHostApi- interface (@see IAlfHostApi::setBaseLayout) + * createLayout-method should be the first call after creating the layoutmanager. + * + * Layout manager may also provide information about the layout preferences of its + * children. If this is supported the layout manager will combine the layout preferences + * of its children taking into consideration the technique used to lay out the children + * using the layout manager. This will provide information about the whole display area + * occupied by the layout manager. For instance vertical flow layout manager will provide + * preferred size area of its children by summing their heights and providing the maximum + * width among the children. + * + * @code + * // Create layout manager interface. + * IAlfLayoutManager* layoutManager = IAlfInterfaceBase::makeInterface(control); + * + * // See if layout preferences is supported in the given layout manager. + * IAlfLayoutPreferences* layoutPreferences = IAlfInterfaceBase::makeInterface(layoutManager); + * + * if(layoutPreferences != 0) + * { + * TAlfXYMetric preferredSize; + * // This will report the preferred size of the layout by combining together preferred sizes of its children. + * bool result = layoutPreferences->getPreferredSize(preferredSize); + * } + * @endcode + * + * @lib alfwidgetmodel.lib + * @since S60 ?S60_version + * @status Draft + */ +class IAlfLayoutManager : public IAlfInterfaceBase + { +public: + + static inline const IfId& type() + { + return ialflayoutmanager::Ident; + } + + virtual inline ~IAlfLayoutManager() {} + + /** + * Creates the layout used by this layoutmanager. + * + * @param aOwner owner-control of the the created layout. + * @param aParentLayout parent for the created layout + * @param aLayoutIndex index, where created visual should be placed in the parent layout. + * @throw AlfVisualException(EInvalidArrayIndex), if aLayoutIndex is out of bounds + * AlfVisualException(ECanNotCreateVisual), if the layout creation failed. + */ + virtual void createLayout(CAlfWidgetControl& aOwner, + CAlfLayout* aParentLayout, int aLayoutIndex) = 0; + + /** + * Returns the layout used by this layoutmanager. + * + * @return layout used by this layoutmanager. + * @throw AlfVisualException(EInvalidVisual), if layout is not created. + */ + virtual CAlfLayout& getLayout()const = 0; + + /** + * Notifies the layout manager, that the child control's layout + * must be updated + * + * @param aControl control, which size has changed. + * @throw AlfVisualException(EInvalidVisual), if layout is not created. + */ + virtual void updateChildLayout(CAlfWidgetControl* aControl) = 0; + + /** + * Notifies the layout manager, that all the child control's layouts + * must be updated. + * @throw AlfVisualException(EInvalidVisual), if layout is not created. + */ + virtual void updateChildrenLayout() = 0; + + /** + * Notifies the layout manager, that the control's has been + * removed from the layout. + * + * @param aControl control, which has been removed from the layout. + * @throw AlfVisualException(EInvalidVisual), if layout is not created. + */ + virtual void childRemoved(CAlfWidgetControl* aControl) = 0; + +public: +// from base class IAlfInterfaceBase + + /** + * Interface getter. + * @see IAlfInterfaceBase::MakeInterface + * + * @since S60 ?S60_version + * @param aType The type id of the queried interface. + * @return The queried interface, or NULL if the interface is not + * supported or available. + */ + virtual IAlfInterfaceBase* makeInterface( const IfId& aType ) = 0; + }; + +/** + * Placeholder for information required to instantiate an layoutmanager + * via the widget factory mechanism. + * A pointer to this structure is casted to a void pointer and sent to the + * factory plugin. + * @lib alfwidgetmodel.lib + * @since S60 ?S60_version + */ +struct AlfLayoutManagerInitData + { + /** + * Event handler instance ID.This uniquely identifies every event handler instance. + */ + char* mLayoutManagerId; + + /** + * Pointer to node in declaration containing information for the widget. + */ + DuiNode* mNode; + + /** + * Pointer to custom data passed via factory mechanism + * Not Owned. + */ + AlfCustomInitDataBase* mCustomData; + }; + + + } // namespace Alf + +#endif // I_ALFLAYOUTMANAGER