--- /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 <eikbgfty.h>
+#include <eikpanic.h>
+
+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<TCreateButtonGroupByTypeFunction>* 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<TCreateButtonGroupByTypeFunction>(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<TCreateButtonGroupByTypeFunction>* 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<CEikButtonGroupFactoryArray*>(CCoeEnv::Static(KUidButtonGroupFactoryContainerTls));}