|
1 /* |
|
2 * Copyright (c) 1997-2000 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <eikbgfty.h> |
|
20 #include <eikpanic.h> |
|
21 |
|
22 const TUid KUidButtonGroupFactoryContainerTls={0x100090DD}; |
|
23 |
|
24 EXPORT_C EikButtonGroupFactory::TCreationData::TCreationData(CEikButtonGroupContainer::TUse aUse,MEikCommandObserver* aCommandObserver,TInt aResourceId,RWindowGroup* aParentWg,TUint aFlags,CEikButtonGroupContainer::TOrientation aOrientation) |
|
25 :iUse(aUse), |
|
26 iCommandObserver(aCommandObserver), |
|
27 iResourceId(aResourceId), |
|
28 iParentWg(aParentWg), |
|
29 iFlags(aFlags), |
|
30 iOrientation(aOrientation) |
|
31 { |
|
32 } |
|
33 |
|
34 /** |
|
35 * Creates a button group of type aButtonGroupType, if it exists in any registered button group |
|
36 * factory function, and returns a handle to the button group interface the constructed object implements. |
|
37 * Extra required information is supplied in aCreationData. If the button group is to be added |
|
38 * to the button group stack then this can be set in aAddToButtonGroupStack. Returns NULL if |
|
39 * aButtonGroupType doesn't exist in any registered button group factory function. |
|
40 * |
|
41 * @internal |
|
42 * Internal to Symbian |
|
43 */ |
|
44 MEikButtonGroup* EikButtonGroupFactory::CreateButtonGroupByTypeL(TInt aButtonGroupType,TCreationData& aCreationData,TBool& aAddToButtonGroupStack) |
|
45 {// static |
|
46 MEikButtonGroup* buttonGroup = NULL; |
|
47 |
|
48 CArrayFixFlat<TCreateButtonGroupByTypeFunction>* buttonGroupFactoryFuncArray = CEikButtonGroupFactoryArray::ButtonGroupFactoryFuncArray(); |
|
49 TInt count = 0; |
|
50 if(buttonGroupFactoryFuncArray) |
|
51 count = buttonGroupFactoryFuncArray->Count(); |
|
52 for(TInt i = 0; i < count; i++) |
|
53 { |
|
54 TCreateButtonGroupByTypeFunction buttonGroupFactoryFunc = (*buttonGroupFactoryFuncArray)[i]; |
|
55 buttonGroup = (*buttonGroupFactoryFunc)(aButtonGroupType,aCreationData,aAddToButtonGroupStack); |
|
56 if(buttonGroup) |
|
57 break; |
|
58 } |
|
59 |
|
60 return buttonGroup; |
|
61 } |
|
62 |
|
63 CEikButtonGroupFactoryArray::~CEikButtonGroupFactoryArray() |
|
64 { |
|
65 delete iButtonGroupFactoryFuncArray; |
|
66 } |
|
67 |
|
68 /** |
|
69 * Adds a button group factory to the iButtonGroupFactoryFuncArray array. If the array |
|
70 * doesn’t yet exist, then it creates a new one and appends it in as the first element. |
|
71 * |
|
72 * @since App-Framework_6.1 |
|
73 */ |
|
74 EXPORT_C void CEikButtonGroupFactoryArray::AppendFactoryFunctionL(TCreateButtonGroupByTypeFunction aCreateButtonGroupByTypeFunction) |
|
75 {//static |
|
76 CEikButtonGroupFactoryArray* self = CEikButtonGroupFactoryArray::Self(); |
|
77 if (!self) |
|
78 { |
|
79 self=new(ELeave) CEikButtonGroupFactoryArray(); // CCoeEnv takes ownership immediately |
|
80 } |
|
81 if(!self->iButtonGroupFactoryFuncArray) |
|
82 self->iButtonGroupFactoryFuncArray = new(ELeave) CArrayFixFlat<TCreateButtonGroupByTypeFunction>(2); |
|
83 self->iButtonGroupFactoryFuncArray->AppendL(aCreateButtonGroupByTypeFunction); |
|
84 } |
|
85 |
|
86 /** |
|
87 * Removes a button group factory from the iButtonGroupFactoryFuncArray array. |
|
88 * |
|
89 * @since App-Framework_6.1 |
|
90 */ |
|
91 EXPORT_C void CEikButtonGroupFactoryArray::RemoveFactoryFunction(TCreateButtonGroupByTypeFunction aCreateButtonGroupByTypeFunction) |
|
92 {//static |
|
93 CEikButtonGroupFactoryArray* self = CEikButtonGroupFactoryArray::Self(); |
|
94 __ASSERT_ALWAYS(self,Panic(EEikPanicNoButtonGroupFactory)); |
|
95 |
|
96 TInt count; |
|
97 if(aCreateButtonGroupByTypeFunction && self->iButtonGroupFactoryFuncArray) |
|
98 { |
|
99 count = self->iButtonGroupFactoryFuncArray->Count(); |
|
100 for(TInt ii = 0; ii < count; ii++) |
|
101 { |
|
102 if((*(self->iButtonGroupFactoryFuncArray))[ii] == aCreateButtonGroupByTypeFunction) |
|
103 { |
|
104 self->iButtonGroupFactoryFuncArray->Delete(ii); |
|
105 break; |
|
106 } |
|
107 } |
|
108 } |
|
109 } |
|
110 |
|
111 /** |
|
112 * Returns the array of pointers to the registered button group factory creation methods |
|
113 * |
|
114 * @internal |
|
115 * Internal to Symbian |
|
116 * @since App-Framework_6.1 |
|
117 */ |
|
118 CArrayFixFlat<TCreateButtonGroupByTypeFunction>* CEikButtonGroupFactoryArray::ButtonGroupFactoryFuncArray() |
|
119 {//static |
|
120 CEikButtonGroupFactoryArray* self = CEikButtonGroupFactoryArray::Self(); |
|
121 __ASSERT_ALWAYS(self,Panic(EEikPanicNoButtonGroupFactory)); |
|
122 return self->iButtonGroupFactoryFuncArray; |
|
123 } |
|
124 |
|
125 inline CEikButtonGroupFactoryArray::CEikButtonGroupFactoryArray() |
|
126 : CCoeStatic(KUidButtonGroupFactoryContainerTls) |
|
127 {} |
|
128 inline CEikButtonGroupFactoryArray* CEikButtonGroupFactoryArray::Self()//static |
|
129 {return static_cast<CEikButtonGroupFactoryArray*>(CCoeEnv::Static(KUidButtonGroupFactoryContainerTls));} |