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