00001 /* 00002 * ============================================================================ 00003 * Name : eikcmbut.h 00004 * Part of : Eikstd / eikcmbut.h 00005 * Description : Command button class interfaces. Contains a common base class 00006 * for command-generating buttons, plus several concrete, specialized classes 00007 * 00008 * Version : %version: 4 % 00009 * 00010 * Copyright © 2001-2006 Nokia. All rights reserved. 00011 * This material, including documentation and any related computer 00012 * programs, is protected by copyright controlled by Nokia. All 00013 * rights are reserved. Copying, including reproducing, storing, 00014 * adapting or translating, any or all of this material requires the 00015 * prior written consent of Nokia. This material also contains 00016 * confidential information which may not be disclosed to others 00017 * without the prior written consent of Nokia. 00018 * ============================================================================ 00019 * Template version: 4.1 00020 */ 00021 00022 #if !defined(__EIKCMBUT_H__) 00023 #define __EIKCMBUT_H__ 00024 00025 #if !defined(__EIKBUTB_H__) 00026 #include <eikbutb.h> 00027 #endif 00028 00029 #if !defined(__COECCNTX_H__) 00030 #include <coeccntx.h> 00031 #endif 00032 00033 #if !defined(__GULUTIL_H__) 00034 #include <gulutil.h> 00035 #endif 00036 00037 class CEikLabel; 00038 class CEikImage; 00039 class CEikAlignedControl; 00040 class TResourceReader; 00041 class CEikCommandStack; 00042 00052 class CEikCommandButtonBase : public CEikButtonBase, public MCoeControlContext 00053 { 00054 public: 00058 enum TWhichComponent 00059 { 00060 EFirst, 00061 ESecond 00062 }; 00063 00067 enum TDisplayContent 00068 { 00069 EFirstOnly =0x0100, 00070 ESecondOnly =0x0200, 00071 EBoth =0x0300 00072 }; 00073 00074 /* 00075 * Layout and font options for the components of the command button 00076 */ 00077 enum TLayout 00078 { 00079 EFirstRightSecondLeft=0x0000, 00080 EFirstBottomSecondTop=0x0001, 00081 EFirstTopSecondBottom=0x0002, 00082 EFirstLeftSecondRight=0x0003, 00083 EDenseFont =0x0008 00084 }; 00085 00089 enum TExcess 00090 { 00091 EShare =0x0000, 00092 EToFirst =0x0010, 00093 EToSecond =0x0020 00094 }; 00095 00096 public: // new functions 00097 00101 IMPORT_C ~CEikCommandButtonBase(); 00102 00107 IMPORT_C void SetButtonLayout(TLayout aLayout); 00108 00113 IMPORT_C void SetExcessSpace(TExcess aExcess); 00114 00120 IMPORT_C void SetDisplayContent(TDisplayContent aContent); 00121 00125 IMPORT_C void LayoutComponents(); 00126 00131 IMPORT_C void StartConstructFromResourceL(TResourceReader& aReader); 00132 00138 IMPORT_C void ConstructLabelFromResourceL(TResourceReader& aReader,TWhichComponent aWhich); 00139 00145 IMPORT_C void ConstructImageFromResourceL(TResourceReader& aReader,TWhichComponent aWhich); 00146 00150 IMPORT_C virtual void UpdateComponentAlignment(); 00151 00155 IMPORT_C void SetDefault(TBool aIsDefault); 00156 00157 public: // from CCoeControl. See base class documentation 00165 IMPORT_C void SetDimmed(TBool aDimmed); 00166 00174 IMPORT_C TSize MinimumSize(); 00175 00183 IMPORT_C TInt CountComponentControls() const; 00184 00192 IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const; 00193 00199 IMPORT_C void ActivateL(); 00200 00208 IMPORT_C void SetContainerWindowL(const CCoeControl& aContainer); 00209 00217 IMPORT_C void FocusChanged(TDrawNow aDrawNow); 00218 00227 IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode /*aType*/); 00228 00236 IMPORT_C virtual void GetColorUseListL(CArrayFix<TCoeColorUse>& aColorUseList) const; 00237 00246 IMPORT_C virtual void HandleResourceChange(TInt aType); 00247 00255 IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); 00256 00257 public: // but not exported 00263 CEikCommandStack* CommandStack() const; 00264 00270 TInt ButFlags() const; 00271 00277 TBool IsDefault() const; 00278 00279 protected: 00280 00286 IMPORT_C void StateChanged(); 00287 00288 protected: 00292 IMPORT_C CEikCommandButtonBase(); 00293 00300 IMPORT_C void SetTextL(const TDesC& aText,CEikAlignedControl*& aComponent); 00301 00309 IMPORT_C void SetPictureL(const CFbsBitmap* aMain,const CFbsBitmap* aMask,CEikAlignedControl*& aComponent); 00310 00319 IMPORT_C void SetPictureFromFileL(const TDesC& aFilename,TInt aMain,TInt aMask,CEikAlignedControl*& aComponent); 00320 00324 inline void CheckCreateCommandStackL(); 00325 00326 protected: // from CCoeControl 00334 IMPORT_C void Draw(const TRect& aRect) const; 00335 00336 protected: 00337 00341 void SetImageAttributes(CEikImage* aImage); 00342 00346 inline TInt Behavior() const; 00347 00348 protected: 00356 IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const; 00357 00358 private: 00364 IMPORT_C void SizeChanged(); 00365 IMPORT_C void Reserved_2(); 00366 00367 private: // from CEikButtonBase 00368 IMPORT_C void Reserved_3(); 00369 00370 private: 00378 IMPORT_C void PrepareContext(CWindowGc& aGc) const; 00379 00380 private: 00381 IMPORT_C virtual void Reserved_4(); 00382 private: 00386 IMPORT_C void* ExtensionInterface( TUid aInterface ); 00387 00388 // New methods 00389 private: 00390 void SetComponentExtents(const TRect& aRect); 00391 void SetNewComponentExtentL(); 00392 TBool LayoutIsVertical() const; 00393 protected: 00394 TMargins8 iMargins; 00398 CEikAlignedControl* iComponents[2]; 00399 TInt iCmdFlags; 00400 private: 00401 TInt iDrawOffset; 00405 CEikCommandStack* iCommandStack; 00406 TInt iDummy; 00407 TBool iDefault; 00408 }; 00409 00419 class CEikCommandButton : public CEikCommandButtonBase 00420 { 00421 public: 00423 enum TLayout 00424 { 00425 ETextRightPictureLeft=0x000, 00426 ETextBottomPictureTop=0x001, 00427 ETextTopPictureBottom=0x002, 00428 ETextLeftPictureRight=0x003 00429 }; 00430 00434 enum TExcess 00435 { 00436 EShare =0x0000, 00437 EToText =0x0010, 00438 EToPicture =0x0020 00439 }; 00440 00444 enum TDisplayContent 00445 { 00446 ETextOnly =0x0100, 00447 EPictureOnly =0x0200, 00448 ETextAndPicture =0x0300 00449 }; 00450 00451 public: 00452 00456 IMPORT_C CEikCommandButton(); 00457 00461 IMPORT_C ~CEikCommandButton(); 00462 00468 IMPORT_C void SetTextL(const TDesC& aText); 00469 00476 IMPORT_C void SetPictureL(const CFbsBitmap* aMain,const CFbsBitmap* aMask=NULL); 00477 00481 IMPORT_C void SetPictureFromFileL(const TDesC& aFilename,TInt aMain,TInt aMask=-1); 00482 00488 IMPORT_C CEikLabel* Label() const; 00489 00495 IMPORT_C CEikImage* Picture() const; 00496 00502 IMPORT_C void SetButtonLayout(TLayout aLayout); 00503 00509 IMPORT_C void SetExcessSpace(TExcess aExcess); 00510 00516 IMPORT_C void SetDisplayContent(TDisplayContent aContent); 00517 00526 IMPORT_C void SetCommandL(TInt aCommandId,const TDesC* aText,const CFbsBitmap* aBitmap,const CFbsBitmap* aMask); 00527 00536 IMPORT_C void AddCommandToStackL(TInt aCommandId,const TDesC* aText,const CFbsBitmap* aBitmap,const CFbsBitmap* aMask); 00537 00544 IMPORT_C TBool RemoveCommandFromStack(TInt aCommandId); 00545 00551 IMPORT_C TInt PopCommandFromStack(); 00552 00553 public: // from CCoeControl 00561 IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); 00562 00570 IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); 00571 00572 public: 00578 IMPORT_C void UpdateComponentAlignment(); 00579 00580 private: 00581 void UpdateLabelReserveLengthL(const TDesC* aText); 00582 00583 private: 00587 IMPORT_C void* ExtensionInterface( TUid aInterface ); 00588 private: 00589 TInt iDummy; 00590 }; 00591 00600 class CEikTwoPictureCommandButton : public CEikCommandButtonBase 00601 { 00602 public: 00603 00607 enum TLayout 00608 { 00609 ETextRightPictureLeft=0x000, 00610 ETextBottomPictureTop=0x001, 00611 ETextTopPictureBottom=0x002, 00612 ETextLeftPictureRight=0x003 00613 }; 00614 00618 enum TExcess 00619 { 00620 EShare =0x0000, 00621 EToText =0x0010, 00622 EToPicture =0x0020 00623 }; 00624 00628 enum TDisplayContent 00629 { 00630 ETextOnly =0x0100, 00631 EPictureOnly =0x0200, 00632 ETextAndPicture =0x0300 00633 }; 00634 00635 private: 00639 enum TPictureButtonType 00640 { 00641 EPictureButWithBorders =0x0000, 00642 EPictureButWithoutBorders =0x1000 00643 }; 00644 00650 enum TExternalPicture 00651 { 00652 EPictureNotOwnedExternally =0x00, 00653 EPictureOwnedExternally =0x01 00654 }; 00655 00656 public: 00657 00661 IMPORT_C CEikTwoPictureCommandButton(); 00662 00666 IMPORT_C ~CEikTwoPictureCommandButton(); 00667 00673 IMPORT_C TBool IsSecondPictureOwnedExternally(); 00674 00680 IMPORT_C CEikImage* Picture() const; 00681 00688 IMPORT_C void ConstructImagesFromResourceL(TResourceReader& aReader,TWhichComponent aWhich); 00689 00695 IMPORT_C void SetTextL(const TDesC& aText); 00696 00706 IMPORT_C void SetTwoPicturesL(const CFbsBitmap* aMain,const CFbsBitmap* aMask=NULL,const CFbsBitmap* aSecondMain=NULL, const CFbsBitmap* aSecondMask=NULL); 00707 00714 IMPORT_C void SetSecondPicture(const CFbsBitmap* aSecondMain, const CFbsBitmap* aSecondMask=NULL); 00715 00723 IMPORT_C void SetPictureFromFileL(const TDesC& aFilename,TInt aMain,TInt aMask=-1); 00724 00732 IMPORT_C void SetSecondPictureFromFileL(const TDesC& aFilename,TInt aMain,TInt aMask=-1); 00733 00739 IMPORT_C void SetSecondPictureOwnedExternally(TBool aOwnership); 00740 00741 public: // from CCoeControl. 00742 00748 IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); 00749 00755 IMPORT_C void ActivateL(); 00756 00764 IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); 00765 00766 protected: 00774 IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const; 00775 00776 private: // from CCoeControl 00777 00785 IMPORT_C void Draw(const TRect& /*aRect*/) const; 00786 00792 IMPORT_C void StateChanged(); 00793 00794 private: 00798 IMPORT_C void* ExtensionInterface( TUid aInterface ); 00799 00800 private: 00808 IMPORT_C void PrepareContext(CWindowGc& aGc) const; 00809 00810 private: 00811 void SwapPictures(CEikImage* aImage); 00812 00813 private: 00817 const CFbsBitmap* iSecondBitmap; 00821 const CFbsBitmap* iSecondMaskBitmap; 00822 TInt iPictureFlags; 00823 TInt iDummy; 00824 }; 00825 00832 class CEikInverterCommandButton : public CEikCommandButton 00833 { 00834 public: 00835 00839 IMPORT_C CEikInverterCommandButton(); 00840 00844 IMPORT_C ~CEikInverterCommandButton(); 00845 00846 public: // From CCoeControl 00847 00855 IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); 00856 00857 protected: 00858 00866 IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const; 00867 00868 private: 00876 IMPORT_C void PrepareContext(CWindowGc& aGc) const; 00877 00878 private: 00882 IMPORT_C void* ExtensionInterface( TUid aInterface ); 00883 private: 00884 TInt iFlag; 00885 TInt iDummy; 00886 }; 00887 00896 class CEikTextButton : public CEikCommandButtonBase 00897 { 00898 public: 00899 00903 IMPORT_C CEikTextButton(); 00904 00908 IMPORT_C ~CEikTextButton(); 00909 00916 IMPORT_C void SetTextL(const TDesC& aText,TWhichComponent aWhich=EFirst); 00917 00923 IMPORT_C CEikLabel* Label(TWhichComponent aWhich=EFirst) const; 00924 00925 // from CCoeControl 00926 public: 00927 00935 IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); 00936 00944 IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); 00945 00946 // From CAknControl 00947 private: 00948 IMPORT_C void* ExtensionInterface( TUid aInterface ); 00949 00950 private: // data 00951 TInt iDummy; 00952 }; 00953 00962 class CEikBitmapButton : public CEikCommandButtonBase 00963 { 00964 public: 00965 00969 IMPORT_C CEikBitmapButton(); 00970 00974 IMPORT_C ~CEikBitmapButton(); 00975 00983 IMPORT_C void SetPictureL(const CFbsBitmap* aMain,const CFbsBitmap* aMask=NULL,TWhichComponent aWhich=EFirst); 00984 00993 IMPORT_C void SetPictureFromFileL(const TDesC& aFilename,TInt aMain,TInt aMask=-1,TWhichComponent aWhich=EFirst); 00994 01001 IMPORT_C CEikImage* Picture(TWhichComponent aWhich=EFirst) const; 01002 01003 // from CCoeControl 01004 public: 01012 IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); 01013 01021 IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); 01022 01023 private: 01027 IMPORT_C void* ExtensionInterface( TUid aInterface ); 01028 01029 private: // data 01030 TInt iDummy; 01031 }; 01032 01033 // __EIKCMBUT_H__ 01034 #endif