diff -r 000000000000 -r 2f259fa3e83a classicui_pub/misc_controls_api/inc/EIKCAPC.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/classicui_pub/misc_controls_api/inc/EIKCAPC.H Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,518 @@ +/* +* Copyright (c) 1997-2009 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: +* +*/ + + +#if !defined(__EIKCAPC_H__) +#define __EIKCAPC_H__ + +#if !defined(__COECNTRL_H__) +#include +#endif + +#if !defined(__FEPBASE_H__) +#include +#endif + +#if !defined(__EIKLABEL_H__) +#include +#endif + +#include +#include + +#include +#include + +class CEikImage ; +class CEikDialogPage; +// Forward declaration of types used in layout routines. +class CAknPopupField; +class CAknSlider; +class CEikEdwin; +class CEikMfne; +class CEikSecretEditor; +class CEikCapCLabel ; +class CEikCapCExtension; +class MPointerEventObserver; +class MAknsControlContext; + +/** CaptionedControl + * + * CaptionedControl is part of the dialogs. All dialogs and forms use captionedcontrol + * as a control for one DLG_LINE. Each DLG_LINE has one captionedcontrol in it. + * + * Rectangle of the captionedcontrol is single form field / form line or DLG_LINE's + * rectangle dependent on the dialog type. + */ +class CEikCaptionedControl : public CAknControl, public MCoeCaptionRetrieverForFep, public MCoeControlObserver + { + friend class CEikCapCExtension; +public: + enum TSpaceSharingFlags + { + EIfTooSmallCtlGetsWidthLast =0x0, + EIfTooSmallCtlGetsWidthFirst =0x1, + EIfTooSmallCtlGetsEqualShareOfWidth =0x2, + EIfTooBigCtlStaysMinHeight =0x4, + EIfTooBigCtlStaysMinWidth =0x8, + EIfTooBigCtlStaysMinSize =0xc, + EIfTooSmallDontStrech =0x10 + }; + enum TCaptionExpandingState + { + EInitial = 0, + EExtended =1, + ERetracted =2 + }; + +public: + /** Constructor + */ + IMPORT_C CEikCaptionedControl(); + /** Destructor + */ + IMPORT_C ~CEikCaptionedControl(); +public: // new functions + /** SetUsesEars() sets a flag Uses Ears. + */ + IMPORT_C void SetUsesEars(); + /** SetSpaceSharingFlags() sets flags for space sharing + */ + IMPORT_C void SetSpaceSharingFlags(TInt aFlags); + /** SetExtraAscent() modifies layout to include extra ascent for fonts + */ + IMPORT_C void SetExtraAscent(); + /** SetCaptionL() Sets label of the DLG_LINE + * @param aText Descriptor + */ + IMPORT_C void SetCaptionL(const TDesC& aText); + /** SetTrailerL() Sets trailer + * Should not be used + * @param aText Descriptor + */ + IMPORT_C void SetTrailerL(const TDesC& aText); + /** Sets the captionedcontrol to be currently focused or not + * @param aSelected whether captionedcontrol is focused + */ + IMPORT_C void SetCurrent(TBool aSelected); + /** Updates captionedcontrol's dimmed state + */ + IMPORT_C void CheckDimmedDisplayState(); + /** Sets minimumsizes to zero + */ + IMPORT_C void ResetMinimumSizes(); + /** Whether captionedcontrol is latent + * + * @return true if is latent + */ + IMPORT_C TBool IsLatent() const; + /** Sets captionedcontrol latent status + */ + IMPORT_C void SetLatent(TBool aLatent); + /** Whether captionedcontrol has latent group following it + * @returns true if has latent group following + */ + IMPORT_C TBool LatentGroupLineFollows() const; + /** Sets latent group following flag + * @param aLglf true if latent group following + */ + IMPORT_C void SetLatentGroupLineFollows(TBool aLglf); + /** Whether there is a divider after the captionedcontrol + */ + IMPORT_C TBool DividerAfter() const; + /** Sets divider after the captionedcontrol + */ + IMPORT_C void SetDividerAfter(TBool aDividerAfter); + /** Whether captionedcontrol consumes enter key + */ + IMPORT_C TBool TakesEnterKey() const; + /** Sets captionedcontrol to take enter key + * @param aTakesEnter true if takes enter key, false if not + */ + IMPORT_C void SetTakesEnterKey(TBool aTakesEnter); + /** Whether offers hot keys + * @return boolean true if offers hotkeys + */ + IMPORT_C TBool OfferHotKeys() const; + /** Sets captionedcontrol to offer hotkeys + */ + IMPORT_C void SetOfferHotKeys(TBool aOffer); + + + /** + * From MCoeControlObserver: + * Acts upon changes in the hosted control's state. + * + * This class's implementation handles events from MFNE editor editing + * buttons in touch enabled builds + * + * @param aControl The control changing its state (not used) + * @param aEventType The type of control event + */ + IMPORT_C virtual void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); + +public: + TInt MaximumNumberOfControlLinesOnVisiblePage() const; + TInt NumberOfLines() const; + TInt NumberOfLinesForScrollBar() const; +public: + TBool ControlIsAnEdwin(TInt aControlType) const; + TBool ControlIsAMfne(TInt aControlType) const; + TBool ControlIsAPopfield(TInt aControlType) const; + TBool ControlIsASecretEditor(TInt aControlType) const; + TBool ControlIsASlider(TInt aControlType) const; + TBool ControlIsAColourSelGrid(TInt aControlType) const; + TInt ControlType() const; + +public: // from CCoeControl + /** MinimumSize() returns minimum size of the control + */ + IMPORT_C TSize MinimumSize(); + /** ConstructFromResourceL() constructs the captionedcontrol from DLG_LINE resource + * + * usually called with the following code: + * TResourceReader reader; + * iCoeEnv->CreateResourceReaderLC(reader, resId); + * control->ConstructFromResourceL(reader); + * CleanupStack::PopAndDestroy(); + */ + IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); + /** OfferKeyEventL() handles key events + */ + IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); + /** GetColorUseListL() gets color use list + */ + IMPORT_C virtual void GetColorUseListL(CArrayFix& aColorUseList) const; // not available before Release 005u + /** HandleResourceChange handles several kinds of resource change event + */ + IMPORT_C virtual void HandleResourceChange(TInt aType); // not available before Release 005u + /** Provides ability to get input capabilities needed for fep + */ + IMPORT_C TCoeInputCapabilities InputCapabilities() const; + /** SetDimmed sets captionedcontrol to dimmed state + */ + IMPORT_C void SetDimmed(TBool aDimmed); + /** HandlePointerEventL handles touch pointer events + */ + IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); +public: + void RegisterPageWithCaptionControl(CEikDialogPage* aPage); + +public: // internal layout properties + //void SetProperties(const TRegion &aRegion, const RArray &aProperties); + //TRect Line(TInt aLineIndex); // text line rectangles + //TInt LineIndex(TPoint aPoint); + //TPoint LineControlPoint(TInt aLineIndex); + //RArray LineIndexesIntersecting(TRect aRect); + //void SetProperty(TInt aLine, TCapCProperty &aProperty); + //void ClearProperty(TInt aLine, TCapCProperty &aProperty); + //TCapCProperty Properties(TInt aLine); + //void LineRegions(TRegion &aRegion); + //void SetVisibleArea(TRect aRect); + //void RemoveVisibleArea(); +private: // from CCoeControl + IMPORT_C TInt CountComponentControls() const; + IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const; + IMPORT_C void SizeChanged(); + IMPORT_C void FocusChanged(TDrawNow aDrawNow); +protected: // from CCoeControl + IMPORT_C void Draw(const TRect& aRect) const; + IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const; +private: // from CCoeControl + IMPORT_C void Reserved_2(); + // from MCoeCaptionRetrieverForFep + IMPORT_C virtual void GetCaptionForFep(TDes& aCaption) const; + IMPORT_C virtual void MCoeCaptionRetrieverForFep_Reserved_1(); + IMPORT_C virtual void MCoeCaptionRetrieverForFep_Reserved_2(); +private: + /** + * From CAknControl + */ + IMPORT_C void* ExtensionInterface( TUid aInterface ); + +protected: // from MObjectProvider + IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId); + +public: + /** SetToolTipTextL() sets tooltip text + * @param aText descriptor for tooltip text + */ + + IMPORT_C void SetToolTipTextL( const TDesC& aText ) ; + /** Ability to query tooltip text string + */ + IMPORT_C const TDesC* ToolTipText() const ; + /** SetBitmapFromFileL() sets icon contents for the captionedcontrol + */ + IMPORT_C void SetBitmapFromFileL( const TDesC& aFilename,TInt aMainId,TInt aMaskId =-1 ) ; + /** SetEditable sets captionedcontrol to editable state + */ + IMPORT_C void SetEditableL( TBool aEditable, TBool aShowEmptyFields = ETrue ) ; + + IMPORT_C void SetFormFlags( TInt aFlags ) ; + void GetAknLayoutValuesL() ; // Visible within DLL only. + TBool HasSeparator() const; + /** GetFullCaptionText() gets caption descriptor + * + */ + IMPORT_C const TPtrC GetFullCaptionText() const; + TBool IsDisplayable() const; + /** + * Allows clients of CEikCaptionedControl to turn off drawing + * of white background of captionedcontrol. + * + * @since 2.1 + */ + IMPORT_C void SetDrawNoWhiteBackground(TBool aEnabled); // for list queries with find. + + /** + * In case of an editor control residing in a form, + * sets up a pictograph animation callback to redraw the form highlight + * control when pictograph animations are updated. + */ + void SetPictographCallBack(); + + /** + * Sets icon and sets its size. + * @param aBitmap a bitmap which has already been loaded. Must not be NULL. + * @param aMask a mask bitmap which has already been loaded. Can be NULL. + * Takes ownership of the bitmap objects. + * @since 2.8 + */ + IMPORT_C void SetIconL( CFbsBitmap* aBitmap, CFbsBitmap* aMask ); + + /** + * Sets one of the two small indicator icons + * @param aIcon a index 0 or 1 depending on which icon to set + * @param aBitmap a bitmap pointer or NULL + * @param aMask a mask pointer or NULL + */ + IMPORT_C void SetIndicatorIconL( TInt aIcon, CFbsBitmap *aBitmap, CFbsBitmap *aMask ); + + /** SetPointerEventObserver + * Low level observer for touch related pointer events. + * This can be used to receive low level pointer events. + */ + IMPORT_C void SetPointerEventObserver(MPointerEventObserver *aObserver); + MPointerEventObserver *PointerEventObserver() const; + + /** Sets the captionedcontrol to be currently focused or not. + * @param aSelected whether captionedcontrol is focused + * @param aRedraw whether redraw is needed or not + */ + void SetCurrent(TBool aSelected, TBool aRedraw ); + +protected: + TRect ViewRect() const; + TRect EditRect() const; + +private: + enum TWhichEars + { + ENoEar=0x00, + ELeftEar=0x01, + ERightEar=0x02, + EBothEars=0x03 + }; +private: // new functions + TInt WidthForEars(TInt aWidthRemaining) const; + void DrawEarsNow(TWhichEars aEar) const; + void DrawEars(TWhichEars aEar) const; + void DrawSingleEar(TWhichEars aEar,TBool aPressed) const; + TRect EarRect(TWhichEars aEar) const; + void FireEarL(TWhichEars aEar,TInt aEarRepeat); + TInt SquashComponentWidth(TInt& aTotalWidth,const TInt aComponentWidthHint); + void StretchComponents(); + void SetVertEdgeSpacing( TInt aVertEdgeSpacing ); + void SetHorzEdgeSpacing( TInt aHorzEdgeSpacing ); + void SquashComponents(); + void CalculateNumberOfLinesForControl( TInt aLines ) ; + void SizeDialogComponents() ; + void PositionDialogComponents() ; + static TInt PictographAnimationCallBack( TAny* aPtr ); + /** + * Sets a size for a bitmap that has already been loaded. + * @since 2.8 + */ + void SetIconSizeL(CFbsBitmap* aBitmap); + /** + * Gets control context for the given control + * @param aDialog a dialog to get context for + * If aDialog provided does not exist, TODO + */ + MAknsControlContext* GetDialogControlContext(const CCoeControl* aDialog) const; + + /** + * Searches recursively for control's parents until it finds a window owning control + */ + const CCoeControl* WindowOwningParent() const; + +public: + /** + * Positions form components in accordance with dialog page flags. + * If the dialog instance is not registered, them flags set with SetFormFlags() are used. + */ + void PositionFormComponents(); + void ScrollBackEditor(); + +public: + void DrawClosingLine() const; + const CEikDialogPage* DialogPage() const { return iDialogPage; } + void SetPartiallyVisible( TBool aPVisible ); + TBool PressedDownState() const; + void SetPressedDownState( TBool aPressed ); +private: + TSize EditorControlSize() const ; + void SetElementBrushColorsL( TRgb aColor ) ; + void SetElementTextColorsL( TRgb aColor ) ; + + TBool ShowBitmap() const; + void LayoutBitmap(const TRect& aRect); + void LayoutCaption(const TRect& aRect); + void DoFormCaptionSettingsL(const TDesC& aText); +private: + static void FormLayoutControlBitmap(CEikImage* aBitmap, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines); + void FormLayoutControlEdwin(CEikEdwin* aEdwin, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines, TBool aBitmapPresent, TBool aIsFocused); + void FormLayoutControlLabel(CEikLabel* aSlider, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines, TBool aLayoutWithBitmap, TBool aIsFocused, TInt aIconCount); + void FormLayoutControlMfne(CEikMfne* aMfne, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines, TBool aBitmapPresent, TBool aIsFocused ); + void FormLayoutControlPopfield(CAknPopupField* aPopfield, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines, TBool aBitmapPresent, TBool aIsFocused); + void FormLayoutControlSecretEditor(CEikSecretEditor* aSecretEd, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines, TBool aBitmapPresent, TBool aIsFocused ); + static void FormLayoutControlSlider(CAknSlider* aSlider, const TRect& aParent, TBool aIsEditable, TBool aSingleLayout, TInt aNumberOfLines, TBool aBitmapPresent); + static void ConvertViewRectToEditRect(TRect& aRect); + static void ConvertEditRectToViewRect(TRect& aRect); + + /* + * + * Access method for use in a CAknForm context. + * + * @return Enumeration for layout for the CAknForm + * Layout value is received from owning CEikDialogPage, if it is not defined then EEikFormUseDoubleSpacedFormat flag is checked. + * Default value is CEikDialogPage::ESingle + */ + CEikDialogPage::TFormLayoutSelection FormLayout() const; + + /** + * Draws the separator between (at the top of current ) caption control(s) + * + * @param gc Current graphics contect + */ + void DrawFormSeparator( CWindowGc& gc ) const; + + /** + * Constructs the extension object. + * There is no base constructL, so it is necessary to call this in several places + */ + void ConstructExtensionL() ; + + void DrawAsSkinnedForm( CWindowGc& aGc, const TRect& aRect ) const; + void LayoutSkinControlContexts(); + TBool DrawingSkins() const; + void DrawAsForm( const TRect& aRect ) const; + void DrawAsEikonDialog( const TRect& aRect ) const; + void DrawAsFormInEditMode( const TRect& aRect ) const; + void DrawAsFormInViewMode( const TRect& aRect ) const; + void DrawAsFormUnFocusedLine( const TRect& aRect ) const; + + /** + * Returns correct text color index. + * + * @since S60 5.2 + * @return Text color index. + */ + TAknsQsnTextColorsIndex TextColorIndex() const; + +public: + CCoeControl* iControl; + CEikCapCLabel* iCaption; + HBufC* iCaptionText; + + CEikLabel* iTrailer; + TInt iId; + TInt iControlType; + TAny* iReturnValue; + TBool iIsFormControl ; + CEikImage* iBitmap ; + TBool iIsEditable ; + +private: + TBool iHasAppendedEditIndicator; + TSize iMinSize; + TInt iCapCFlags; + TInt iCaptionWidth; + TInt iFullWidth; + TSize iNormalSize ; + HBufC*iToolTipText ; + TBool iDoNotDisplay ; + + TInt iVertEdgeSpacing ; + TInt iHorzEdgeSpacing ; + TInt iOriginalHeight ; + + TSize iEditorControlSize ; + TInt iNumberOfLines ; + + friend class CEikCapCArray; + + enum { ENotSupplied = -1 } ; + TInt iFlags ; + + TBool iRefresh ; + + TInt iCaptionFontId ; + TInt iEditorFontId ; + TInt iVerticalLineXPosition; //iAknTopSpacing ; + CCoeControl* iHighlightControl; + CEikCapCExtension* iExtension ; // BC extension for additional Data members. + TInt iAknFormControlHeight ; + TInt iAknFormControlWidth ; + TInt iPenColor ; + TInt iShadowColor ; + TBool iIsCurrentLine; + CEikDialogPage* iDialogPage; + + + }; + + +/* + * Special Label Class which appends colon to label text + */ + +NONSHARABLE_CLASS(CEikCapCLabel) : public CEikLabel + { +public : + CEikCapCLabel() ; + ~CEikCapCLabel() ; + + TBool ColonEnabled() const ; + void EnableColon( TBool aEnable ) ; + +protected : + void Draw(const TRect& aRect) const ; + void DrawL(const TRect& aRect) ; + +private: + TBool iIsColonEnabled ; + } ; + +class MPointerEventObserver + { +public: + virtual bool PointerEvent(CEikCaptionedControl *aControl, const TPointerEvent& aPointerEvent)=0; + }; + +#endif