williamr@2: /* williamr@2: * Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Button group factory interface definitions. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef __EIKBGFTY_H__ williamr@2: #define __EIKBGFTY_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: /** williamr@2: * The EikButtonGroupFactory class provides an interface to the button group factory. williamr@2: * williamr@2: * @lib eikcoctl.lib williamr@2: * @since S60 0.9 williamr@2: */ williamr@2: class EikButtonGroupFactory williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Defines information required to create a button group. williamr@2: * williamr@2: * @lib eikcoctl.lib williamr@2: */ williamr@2: class TCreationData williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Constructor taking arguments required to create a button group. williamr@2: * williamr@2: * @param aUse The type of button group container. williamr@2: * @param aCommandObserver A command observer to be notified of commands on the container. williamr@2: * @param aResourceId A resource containing descriptions of buttons in the group. williamr@2: * This can be NULL if buttons are to be added dynamically. williamr@2: * @param aParentWg Parent window group. williamr@2: * @param aFlags The button group's flags. williamr@2: * @param aOrientation The button group's containers orientation. You need specify this williamr@2: * only for devices that can layout their buttons either horizontally williamr@2: * or vertically. williamr@2: */ williamr@2: IMPORT_C TCreationData( williamr@2: CEikButtonGroupContainer::TUse aUse, williamr@2: MEikCommandObserver* aCommandObserver, williamr@2: TInt aResourceId, williamr@2: RWindowGroup* aParentWg, williamr@2: TUint aFlags, williamr@2: CEikButtonGroupContainer::TOrientation aOrientation); williamr@2: public: williamr@2: /** williamr@2: * Container use type. williamr@2: * williamr@2: * This member is used to specify to the system the general type of the button group that williamr@2: * is required. The system then creates the appropriate button group for the specified type. williamr@2: */ williamr@2: CEikButtonGroupContainer::TUse iUse; williamr@2: williamr@2: /** williamr@2: * The command observer to be notified of commands on the container. williamr@2: * Not owned. williamr@2: */ williamr@2: MEikCommandObserver* iCommandObserver; williamr@2: williamr@2: /** williamr@2: * A resource containing descriptions of buttons in the group. williamr@2: */ williamr@2: TInt iResourceId; williamr@2: williamr@2: /** williamr@2: * Parent window group. williamr@2: * Not owned. williamr@2: */ williamr@2: RWindowGroup* iParentWg; williamr@2: williamr@2: /** williamr@2: * Flags for the button group. williamr@2: */ williamr@2: TUint iFlags; williamr@2: williamr@2: /** williamr@2: * Orientation of the new button group. williamr@2: */ williamr@2: CEikButtonGroupContainer::TOrientation iOrientation; williamr@2: }; williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Creates a button group of given type if it exists in any registered button group williamr@2: * factory function. williamr@2: * williamr@2: * @param aButtonGroupType The type of button group to be created. williamr@2: * @param aCreationData Required extra information. williamr@2: * @param aAddToButtonGroupStack Whether to add the button group to the button group stack. williamr@2: * @return A handle to the button group interface the constructed object implements. NULL williamr@2: * if aButtonGroupType doesn't exist in any registered button group factory function. williamr@2: */ williamr@2: static MEikButtonGroup* CreateButtonGroupByTypeL( williamr@2: TInt aButtonGroupType, williamr@2: TCreationData& aCreationData, williamr@2: TBool& aAddToButtonGroupStack); williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Pointer to a button group factory function is defined as a pointer to a MEikButtonGroup object. williamr@2: */ williamr@2: typedef MEikButtonGroup* (*TCreateButtonGroupByTypeFunction)( williamr@2: TInt, williamr@2: EikButtonGroupFactory::TCreationData&, williamr@2: TBool&); williamr@2: williamr@2: /** williamr@2: * Array storing the button group factory functions. williamr@2: * williamr@2: * The CEikButtonGroupFactoryArray class actually stores the button group factory functions williamr@2: * which are registered. It also provides facility to add and remove these functions from williamr@2: * the storage array. Notably this class is CCoeStatic derived, allowing application wide williamr@2: * access. williamr@2: * williamr@2: * @lib eikcoctl.lib williamr@2: * @since S60 0.9 williamr@2: */ williamr@2: NONSHARABLE_CLASS(CEikButtonGroupFactoryArray) : public CCoeStatic williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Adds a button group factory function to the array. williamr@2: * williamr@2: * @param aCreateButtonGroupByTypeFunction The factory function to be added. williamr@2: */ williamr@2: IMPORT_C static void AppendFactoryFunctionL( williamr@2: TCreateButtonGroupByTypeFunction aCreateButtonGroupByTypeFunction); williamr@2: williamr@2: /** williamr@2: * Removes a button group factory function from the array. williamr@2: * williamr@2: * @param aCreateButtonGroupByTypeFunction The factory function to be removed. williamr@2: */ williamr@2: IMPORT_C static void RemoveFactoryFunction( williamr@2: TCreateButtonGroupByTypeFunction aCreateButtonGroupByTypeFunction); williamr@2: williamr@2: /** williamr@2: * Returns the array of pointers to the registered button group factory creation methods. williamr@2: * williamr@2: * @return The array of button group factory functions. williamr@2: */ williamr@2: static CArrayFixFlat* ButtonGroupFactoryFuncArray(); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: ~CEikButtonGroupFactoryArray(); williamr@2: williamr@2: private: williamr@2: inline CEikButtonGroupFactoryArray(); williamr@2: inline static CEikButtonGroupFactoryArray* Self(); williamr@2: williamr@2: private: // data williamr@2: CArrayFixFlat* iButtonGroupFactoryFuncArray; williamr@2: }; williamr@2: williamr@2: #endif // __EIKBGFTY_H__