00001 // EIKBTGPC.H 00002 // 00003 // Copyright (c) 1998 Symbian Ltd. All rights reserved. 00004 // 00005 00006 #if !defined(__EIKBTGPC_H__) 00007 #define __EIKBTGPC_H__ 00008 00009 #if !defined(__COECNTRL_H__) 00010 #include <coecntrl.h> 00011 #endif 00012 00013 #if !defined(__EIKBTGRP_H__) 00014 #include <eikbtgrp.h> 00015 #endif 00016 00017 #if !defined(__EIKCMOBS_H__) 00018 #include <eikcmobs.h> 00019 #endif 00020 00021 #if !defined(__LAFCCTEN_H__) 00022 #include <lafpublc.h> 00023 #endif 00024 00025 #if !defined(__UIKON_HRH__) 00026 #include <uikon.hrh> 00027 #endif 00028 00029 #include <AknControl.h> 00030 00031 class MEikCommandObserver; 00032 class CEikButtonGroupStack; 00033 class CEikCommandButton; 00034 00043 NONSHARABLE_CLASS(CEikButtonGroupContainer) : public CAknControl, public MEikCommandObserver 00044 { 00045 public: 00046 DECLARE_TYPE_ID(0x101F4107) 00047 00048 enum TUse 00049 { 00050 EView =SLafButtonGroupContainer::EView, 00051 EDialog =SLafButtonGroupContainer::EDialog, 00052 EToolbar =SLafButtonGroupContainer::EToolbar, // deprecated (App-framework_6.1) 00053 ECba =SLafButtonGroupContainer::ECba, // deprecated (App-framework_6.1) 00054 EDialogButtons =SLafButtonGroupContainer::EDialogButtons // deprecated (App-framework_6.1) 00055 }; 00056 enum TOrientation 00057 { 00058 EVertical =SLafButtonGroupContainer::EVertical, 00059 EHorizontal =SLafButtonGroupContainer::EHorizontal 00060 }; 00061 enum TLocation 00062 { 00063 EInternal =SLafButtonGroupContainer::EInternal, // E.g. dialog buttons. 00064 EExternal =SLafButtonGroupContainer::EExternal// E.g. toolbar or cba. 00065 }; 00066 enum THotKeyFlags 00067 { 00068 EShowHotKey =0x01, 00069 EPlainHotKey =0x02 00070 }; 00071 enum TFlags 00072 { 00073 EAddToStack =0x01, 00074 EDelayActivation =0x02, 00075 EUseMaxSize =0x04, 00076 }; 00077 00078 public: 00079 IMPORT_C static CEikButtonGroupContainer* NewL(TUse aUse,TOrientation aOrientation, 00080 MEikCommandObserver* aCommandObserver,TInt aResourceId, 00081 TUint aFlags=EAddToStack); 00082 IMPORT_C static CEikButtonGroupContainer* NewL(TUse aUse,TOrientation aOrientation, 00083 MEikCommandObserver* aCommandObserver,TInt aResourceId, 00084 const CCoeControl& aParent,TUint aFlags=EAddToStack); 00085 IMPORT_C static CEikButtonGroupContainer* NewL(TUse aUse,TOrientation aOrientation, 00086 MEikCommandObserver* aCommandObserver,TInt aResourceId, 00087 RWindowGroup& aParentWg,TUint aFlags=EAddToStack); 00088 IMPORT_C ~CEikButtonGroupContainer(); 00089 IMPORT_C static CEikButtonGroupContainer* Current(); 00090 public: 00091 inline void SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText); 00092 inline void SetCommandL(TInt aPosition,TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00093 inline void SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00094 inline void SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00095 inline void SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00096 inline void SetCommandL(TInt aPosition,TInt aResourceId); 00097 inline void SetCommandL(TInt aCommandId,const TDesC& aText); 00098 inline void SetCommandL(TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00099 inline void SetCommandL(TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00100 inline void SetCommandL(TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00101 inline void SetCommandL(TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00102 IMPORT_C void SetCommandSetL(TInt aResourceId); 00103 inline void AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText); 00104 inline void AddCommandL(TInt aPosition,TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00105 inline void AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00106 inline void AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00107 inline void AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00108 inline void AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aText); 00109 inline void AddCommandToStackL(TInt aPosition,TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00110 inline void AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask); 00111 inline void AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00112 inline void AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId); 00113 inline void AddCommandToStackL(TInt aPosition,TInt aResourceId); 00114 IMPORT_C void AddCommandSetToStackL(TInt aResourceId); 00115 IMPORT_C void RemoveCommandFromStack(TInt aPosition,TInt aCommandId); 00116 IMPORT_C void SetDefaultCommand(TInt aCommandId); 00117 IMPORT_C TSize CalcMinimumSizeL(TInt aResourceId) const; 00118 IMPORT_C void CleanupCommandPushL(TInt aPosition); 00119 inline void CleanupCommandPop(); 00120 IMPORT_C void CleanupCommandPop(TInt aCount); 00121 inline void CleanupCommandPopAndDestroy(); 00122 inline void CleanupCommandPopAndDestroy(TInt aCount); 00123 IMPORT_C TInt MaxCommands() const; 00124 IMPORT_C TInt ButtonCount() const; 00125 00134 IMPORT_C void DimCommand(TInt aCommandId, TBool aDimmed); 00135 00144 IMPORT_C TBool IsCommandDimmed(TInt aCommandId) const; 00145 00154 IMPORT_C void MakeCommandVisible(TInt aCommandId, TBool aVisible); 00155 00164 IMPORT_C TBool IsCommandVisible(TInt aCommandId) const; 00165 00173 IMPORT_C void AnimateCommand(TInt aCommandId); 00174 00175 00176 00177 00178 00179 00180 IMPORT_C TLocation Location() const; 00181 IMPORT_C CEikCommandButton* CommandButtonOrNull(TInt aCommandId) const; 00182 // For use by EExternal button groups only. 00183 IMPORT_C void SetBoundingRect(const TRect& aRect); 00184 IMPORT_C void ReduceRect(TRect& aBoundingRect) const; 00185 // 00186 IMPORT_C CCoeControl* ControlOrNull(TInt aCommandId) const; 00187 IMPORT_C CEikCommandButton* ButtonById(TInt aCommandId) const; 00188 IMPORT_C TInt PositionById(TInt aCommandId) const; 00189 IMPORT_C void UpdateHotKey(TInt aCommandId,THotKeyFlags aFlags,TInt aKeyId); 00190 IMPORT_C void UpdateCommandObserverL(TInt aPos,MEikCommandObserver& aCommandObserver); 00191 IMPORT_C void RemoveCommandObserver(TInt aPos); 00192 IMPORT_C TBool DelayActivation() const; 00193 // 00194 inline MEikButtonGroup* ButtonGroup(); 00195 inline TUse ButtonGroupType(); 00196 00197 00198 public: // from CCoeControl 00199 IMPORT_C TSize MinimumSize(); 00200 IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); 00201 void MakeVisible(TBool aVisible); 00202 IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const; 00203 public: // formerly from MTopSetMember<CEikButtonGroupContainer>, now reserved 00204 IMPORT_C virtual void Reserved_MtsmPosition(); 00205 IMPORT_C virtual void Reserved_MtsmObject(); 00206 00207 public: // new functions for enhanced cba support 00213 IMPORT_C void OfferCommandListL(const RArray<TInt>& aCommandList); 00214 00220 IMPORT_C void OfferCommandListL(const TInt aResourceId); 00221 00228 IMPORT_C TBool IsCommandInGroup(const TInt aCommandId) const; 00229 00236 IMPORT_C void ReplaceCommand(const TInt aCommandId, const TInt aResourceId); 00237 00238 private: 00239 enum TCommandOp {ESet, EAdd, EPush}; 00240 private: 00241 class TCmdPos 00242 { 00243 public: 00244 inline TCmdPos(); 00245 inline TCmdPos(TInt aPos,TInt aCmd); 00246 public: 00247 TInt iPos; 00248 TInt iCmd; 00249 }; 00250 class TCmdObserver 00251 { 00252 public: 00253 inline TCmdObserver(TInt aPos,MEikCommandObserver& aObserver); 00254 public: 00255 TInt iPos; 00256 MEikCommandObserver& iObserver; 00257 }; 00258 class CCmdObserverArray : public CArrayFixFlat<TCmdObserver> 00259 { 00260 public: 00261 inline CCmdObserverArray(); 00262 TInt FindIndex(TInt aPos); 00263 }; 00264 private: 00265 CEikButtonGroupContainer(TUse aUse); 00266 void ConstructL(TOrientation aOrientation,MEikCommandObserver* aCommandObserver,TInt aResourceId,RWindowGroup* aParentWg,TUint aFlags); 00267 IMPORT_C void DoSetCommandL(TInt aPosition,TInt aCommandId,const TDesC* aText,const CFbsBitmap* aBitmap,const CFbsBitmap* aMask,TCommandOp aOp); 00268 IMPORT_C void DoSetCommandL(TInt aPosition,TInt aCommandId,const TDesC* aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId,TCommandOp aOp); 00269 IMPORT_C void DoSetCommandL(TInt aCommandId,const TDesC* aText,const CFbsBitmap* aBitmap,const CFbsBitmap* aMask,TCommandOp aOp); 00270 IMPORT_C void DoSetCommandL(TInt aCommandId,const TDesC* aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId,TCommandOp aOp); 00271 IMPORT_C void DoSetCommandL(TInt aPosition,TInt aResourceId,TCommandOp aOp); 00272 inline CCoeControl* ButtonGroupAsControl() const; 00273 void UpdateRect(); 00274 static void CleanupCommandDestroy(TAny* aPtr); 00275 TCmdPos DoCleanupCommandPop(); 00276 void DoCleanupCommandPopAndDestroy(); 00277 private: // from CCoeControl 00278 TInt CountComponentControls() const; 00279 CCoeControl* ComponentControl(TInt aIndex) const; 00280 void SizeChanged(); 00281 private: // from MEikCommandObserver 00282 void ProcessCommandL(TInt aCommandId); 00283 CCoeControl* CreateCustomCommandControlL(TInt aControlType); 00284 private: 00285 MEikButtonGroup* iButtonGroup; 00286 TUse iUse; 00287 CArrayFix<TCmdPos>* iCommandsCleanup; 00288 MEikCommandObserver* iCommandObserver; 00289 CCmdObserverArray* iObserverArray; 00290 TDblQueLink iBtLink; 00291 00292 CEikListBox* iMSKObserverOwner; 00293 00294 TInt iSpare; 00295 00296 private: 00297 friend class CCmdObserverArray; 00298 friend class CEikButtonGroupStack; 00299 }; 00300 00301 00308 inline void CEikButtonGroupContainer::SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText) 00309 {DoSetCommandL(aPosition,aCommandId,&aText,NULL,NULL,ESet);} 00318 inline void CEikButtonGroupContainer::SetCommandL(TInt aPosition,TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00319 {DoSetCommandL(aPosition,aCommandId,NULL,&aBitmap,&aMask,ESet);} 00328 inline void CEikButtonGroupContainer::SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00329 {DoSetCommandL(aPosition,aCommandId,&aText,&aBitmap,&aMask,ESet);} 00337 inline void CEikButtonGroupContainer::SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00338 {DoSetCommandL(aPosition,aCommandId,NULL,aFile,aBitmapId,aMaskId,ESet);} 00346 inline void CEikButtonGroupContainer::SetCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00347 {DoSetCommandL(aPosition,aCommandId,&aText,aFile,aBitmapId,aMaskId,ESet);} 00354 inline void CEikButtonGroupContainer::SetCommandL(TInt aPosition,TInt aResourceId) 00355 {DoSetCommandL(aPosition,aResourceId,ESet);} 00364 inline void CEikButtonGroupContainer::SetCommandL(TInt aCommandId,const TDesC& aText) 00365 {DoSetCommandL(aCommandId,&aText,NULL,NULL,ESet);} 00376 inline void CEikButtonGroupContainer::SetCommandL(TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00377 {DoSetCommandL(aCommandId,NULL,&aBitmap,&aMask,ESet);} 00387 inline void CEikButtonGroupContainer::SetCommandL(TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00388 {DoSetCommandL(aCommandId,&aText,&aBitmap,&aMask,ESet);} 00399 inline void CEikButtonGroupContainer::SetCommandL(TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00400 {DoSetCommandL(aCommandId,NULL,aFile,aBitmapId,aMaskId,ESet);} 00411 inline void CEikButtonGroupContainer::SetCommandL(TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00412 {DoSetCommandL(aCommandId,&aText,aFile,aBitmapId,aMaskId,ESet);} 00419 inline void CEikButtonGroupContainer::AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText) 00420 {DoSetCommandL(aPosition,aCommandId,&aText,NULL,NULL,EAdd);} 00427 inline void CEikButtonGroupContainer::AddCommandL(TInt aPosition,TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00428 {DoSetCommandL(aPosition,aCommandId,NULL,&aBitmap,&aMask,EAdd);} 00435 inline void CEikButtonGroupContainer::AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00436 {DoSetCommandL(aPosition,aCommandId,&aText,&aBitmap,&aMask,EAdd);} 00443 inline void CEikButtonGroupContainer::AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00444 {DoSetCommandL(aPosition,aCommandId,NULL,aFile,aBitmapId,aMaskId,EAdd);} 00451 inline void CEikButtonGroupContainer::AddCommandL(TInt aPosition,TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00452 {DoSetCommandL(aPosition,aCommandId,&aText,aFile,aBitmapId,aMaskId,EAdd);} 00459 inline void CEikButtonGroupContainer::AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aText) 00460 {DoSetCommandL(aPosition,aCommandId,&aText,NULL,NULL,EPush);} 00467 inline void CEikButtonGroupContainer::AddCommandToStackL(TInt aPosition,TInt aCommandId,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00468 {DoSetCommandL(aPosition,aCommandId,NULL,&aBitmap,&aMask,EPush);} 00475 inline void CEikButtonGroupContainer::AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aText,const CFbsBitmap& aBitmap,const CFbsBitmap& aMask) 00476 {DoSetCommandL(aPosition,aCommandId,&aText,&aBitmap,&aMask,EPush);} 00483 inline void CEikButtonGroupContainer::AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00484 {DoSetCommandL(aPosition,aCommandId,NULL,aFile,aBitmapId,aMaskId,EPush);} 00491 inline void CEikButtonGroupContainer::AddCommandToStackL(TInt aPosition,TInt aCommandId,const TDesC& aText,const TDesC& aFile,TInt aBitmapId,TInt aMaskId) 00492 {DoSetCommandL(aPosition,aCommandId,&aText,aFile,aBitmapId,aMaskId,EPush);} 00499 inline void CEikButtonGroupContainer::AddCommandToStackL(TInt aPosition,TInt aResourceId) 00500 {DoSetCommandL(aPosition,aResourceId,EPush);} 00506 inline void CEikButtonGroupContainer::CleanupCommandPop() 00507 {CleanupCommandPop(1);} 00514 inline void CEikButtonGroupContainer::CleanupCommandPopAndDestroy() 00515 {CleanupStack::PopAndDestroy();} 00522 inline void CEikButtonGroupContainer::CleanupCommandPopAndDestroy(TInt aCount) 00523 {CleanupStack::PopAndDestroy(aCount);} 00524 00525 inline MEikButtonGroup* CEikButtonGroupContainer::ButtonGroup() 00526 {return iButtonGroup;} 00527 00528 inline CEikButtonGroupContainer::TUse CEikButtonGroupContainer::ButtonGroupType() 00529 {return iUse;} 00530 00531 #endif