uifw/EikStd/coctlsrc/Eikbgfty.cpp
changeset 0 2f259fa3e83a
--- /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));}