diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/Eikbgfty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/Eikbgfty.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 1997-2000 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: +* +*/ + + +#include +#include + +const TUid KUidButtonGroupFactoryContainerTls={0x100090DD}; + +EXPORT_C EikButtonGroupFactory::TCreationData::TCreationData(CEikButtonGroupContainer::TUse aUse,MEikCommandObserver* aCommandObserver,TInt aResourceId,RWindowGroup* aParentWg,TUint aFlags,CEikButtonGroupContainer::TOrientation aOrientation) + :iUse(aUse), + iCommandObserver(aCommandObserver), + iResourceId(aResourceId), + iParentWg(aParentWg), + iFlags(aFlags), + iOrientation(aOrientation) + { + } + +/** + * Creates a button group of type aButtonGroupType, if it exists in any registered button group + * factory function, and returns a handle to the button group interface the constructed object implements. + * Extra required information is supplied in aCreationData. If the button group is to be added + * to the button group stack then this can be set in aAddToButtonGroupStack. Returns NULL if + * aButtonGroupType doesn't exist in any registered button group factory function. + * + * @internal + * Internal to Symbian + */ +MEikButtonGroup* EikButtonGroupFactory::CreateButtonGroupByTypeL(TInt aButtonGroupType,TCreationData& aCreationData,TBool& aAddToButtonGroupStack) + {// static + MEikButtonGroup* buttonGroup = NULL; + + CArrayFixFlat* buttonGroupFactoryFuncArray = CEikButtonGroupFactoryArray::ButtonGroupFactoryFuncArray(); + TInt count = 0; + if(buttonGroupFactoryFuncArray) + count = buttonGroupFactoryFuncArray->Count(); + for(TInt i = 0; i < count; i++) + { + TCreateButtonGroupByTypeFunction buttonGroupFactoryFunc = (*buttonGroupFactoryFuncArray)[i]; + buttonGroup = (*buttonGroupFactoryFunc)(aButtonGroupType,aCreationData,aAddToButtonGroupStack); + if(buttonGroup) + break; + } + + return buttonGroup; + } + +CEikButtonGroupFactoryArray::~CEikButtonGroupFactoryArray() + { + delete iButtonGroupFactoryFuncArray; + } + +/** + * Adds a button group factory to the iButtonGroupFactoryFuncArray array. If the array + * doesn’t yet exist, then it creates a new one and appends it in as the first element. + * + * @since App-Framework_6.1 + */ +EXPORT_C void CEikButtonGroupFactoryArray::AppendFactoryFunctionL(TCreateButtonGroupByTypeFunction aCreateButtonGroupByTypeFunction) + {//static + CEikButtonGroupFactoryArray* self = CEikButtonGroupFactoryArray::Self(); + if (!self) + { + self=new(ELeave) CEikButtonGroupFactoryArray(); // CCoeEnv takes ownership immediately + } + if(!self->iButtonGroupFactoryFuncArray) + self->iButtonGroupFactoryFuncArray = new(ELeave) CArrayFixFlat(2); + self->iButtonGroupFactoryFuncArray->AppendL(aCreateButtonGroupByTypeFunction); + } + +/** + * Removes a button group factory from the iButtonGroupFactoryFuncArray array. + * + * @since App-Framework_6.1 + */ +EXPORT_C void CEikButtonGroupFactoryArray::RemoveFactoryFunction(TCreateButtonGroupByTypeFunction aCreateButtonGroupByTypeFunction) + {//static + CEikButtonGroupFactoryArray* self = CEikButtonGroupFactoryArray::Self(); + __ASSERT_ALWAYS(self,Panic(EEikPanicNoButtonGroupFactory)); + + TInt count; + if(aCreateButtonGroupByTypeFunction && self->iButtonGroupFactoryFuncArray) + { + count = self->iButtonGroupFactoryFuncArray->Count(); + for(TInt ii = 0; ii < count; ii++) + { + if((*(self->iButtonGroupFactoryFuncArray))[ii] == aCreateButtonGroupByTypeFunction) + { + self->iButtonGroupFactoryFuncArray->Delete(ii); + break; + } + } + } + } + +/** + * Returns the array of pointers to the registered button group factory creation methods + * + * @internal + * Internal to Symbian + * @since App-Framework_6.1 + */ +CArrayFixFlat* CEikButtonGroupFactoryArray::ButtonGroupFactoryFuncArray() + {//static + CEikButtonGroupFactoryArray* self = CEikButtonGroupFactoryArray::Self(); + __ASSERT_ALWAYS(self,Panic(EEikPanicNoButtonGroupFactory)); + return self->iButtonGroupFactoryFuncArray; + } + +inline CEikButtonGroupFactoryArray::CEikButtonGroupFactoryArray() + : CCoeStatic(KUidButtonGroupFactoryContainerTls) + {} +inline CEikButtonGroupFactoryArray* CEikButtonGroupFactoryArray::Self()//static + {return static_cast(CCoeEnv::Static(KUidButtonGroupFactoryContainerTls));}