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@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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: #ifndef __COECNTRL_H__ williamr@2: #define __COECNTRL_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include // class TCoeColorUse williamr@2: williamr@2: class TResourceReader; williamr@2: class CCoeEnv; williamr@2: class MCoeControlContext; williamr@2: class RCoeDynamicDataStorage; williamr@2: williamr@2: class MCoeLayoutManager; williamr@2: class TCoeZoomWithType; williamr@2: class CCoeFontProvider; williamr@2: williamr@2: // forward declarations. williamr@2: class CCoeControl; williamr@2: class CCoeTextDrawerBase; williamr@2: williamr@2: /** Interface to be used if a control elects to be a background drawer. williamr@2: williamr@2: Parent controls can elect to take responsibility for drawing the background for their child williamr@2: controls. To achieve this, they should aggregate an object that implements this interface. williamr@2: CCoeControl::SetBackground() accepts the object and sets it as the background drawer williamr@2: williamr@2: @see CCoeControl::EnableWindowTransparency() williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class MCoeControlBackground williamr@2: { williamr@2: public: williamr@2: /** Draw the background for a given control. williamr@2: The text drawer that shall be used to draw text on the specific background can be williamr@2: fetched through the GetTextDrawer() method. williamr@2: williamr@2: @param aGc Graphics context used for drawing williamr@2: @param aControl The control being drawn (may be a child of the drawer) williamr@2: @param aRect The area to be redrawn williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: virtual void Draw(CWindowGc& aGc, const CCoeControl& aControl, const TRect& aRect) const = 0; williamr@2: /** williamr@2: This function retrieves the text drawer associated with the background. williamr@2: @param aTextDrawer The text drawer associated with the background. This may be null. The default implementation williamr@2: always sets this to 0. williamr@2: @param aDrawingControl The control that is requesting the text drawer. williamr@2: */ williamr@2: IMPORT_C virtual void GetTextDrawer(CCoeTextDrawerBase*& aTextDrawer, const CCoeControl* aDrawingControl) const; williamr@2: protected: williamr@2: IMPORT_C MCoeControlBackground(); williamr@2: private: williamr@2: IMPORT_C virtual void MCoeControlBackground_Reserved1(); williamr@2: IMPORT_C virtual void MCoeControlBackground_Reserved2(); williamr@2: IMPORT_C virtual void MCoeControlBackground_Reserved3(); williamr@2: IMPORT_C virtual void MCoeControlBackground_Reserved4(); williamr@2: IMPORT_C virtual void MCoeControlBackground_Reserved5(); williamr@2: private: williamr@2: TInt iMCoeControlBackground_Reserved1(); williamr@2: }; williamr@2: williamr@2: /** Abstract interface for defining a control's hit region. williamr@2: williamr@2: This could be implemented by a CCoeControl-derived class to williamr@2: define hit region checking. The object is installed by calling CCoeControl::SetHitTest(). williamr@2: williamr@2: The hit region is the area inside the control's rectangle in which pointer events are handled. williamr@2: It can be any shape, not necessarily rectangular. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class MCoeControlHitTest williamr@2: { williamr@2: public: williamr@2: /** Tests whether a pointer event occurred inside the control's hit region. williamr@2: This function is called by CCoeControl::HandlePointerEventL(). williamr@2: williamr@2: @param aPoint The position of the pointer event. williamr@2: @return ETrue if the specified point lies inside the hit region, EFalse if not. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: virtual TBool HitRegionContains(const TPoint& aPoint, const CCoeControl& aControl) const = 0; williamr@2: protected: williamr@2: IMPORT_C MCoeControlHitTest(); williamr@2: private: williamr@2: IMPORT_C virtual void MCoeControlHitTest_Reserved1(); williamr@2: IMPORT_C virtual void MCoeControlHitTest_Reserved2(); williamr@2: private: williamr@2: TInt iMCoeControlHitTest_Reserved1; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Control base class from which all other controls are derived. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CCoeControl : public CBase, public MObjectProvider williamr@2: { williamr@2: public: williamr@2: enum TZoomType williamr@2: { williamr@2: EAbsoluteZoom, // absolute williamr@2: ERelativeZoom // relative to parent's zoom williamr@2: }; williamr@2: public: williamr@2: // Construction and destruction williamr@2: IMPORT_C CCoeControl(); williamr@2: IMPORT_C CCoeControl(CCoeEnv* aCoeEnv); williamr@2: IMPORT_C ~CCoeControl(); williamr@2: IMPORT_C TBool ComponentArrayExists() const; williamr@2: public: // Virtuals (see more related non-virtuals further down) williamr@2: // Key input williamr@2: IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); williamr@2: // Visual state williamr@2: IMPORT_C virtual void MakeVisible(TBool aVisible); williamr@2: IMPORT_C virtual void SetDimmed(TBool aDimmed); williamr@2: // Construction williamr@2: IMPORT_C virtual void SetContainerWindowL(const CCoeControl& aContainer); williamr@2: IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aReader); williamr@2: IMPORT_C virtual void ActivateL(); williamr@2: // Focus williamr@2: IMPORT_C virtual void PrepareForFocusLossL(); williamr@2: IMPORT_C virtual void PrepareForFocusGainL(); williamr@2: // Control proximity williamr@2: IMPORT_C virtual void SetAdjacent(TInt aAdjacent); williamr@2: IMPORT_C virtual void SetNeighbor(CCoeControl* aNeighbor); williamr@2: IMPORT_C virtual TBool HasBorder() const; // deprecated from 9.2 williamr@2: // Control size williamr@2: IMPORT_C virtual TSize MinimumSize(); williamr@2: // Resource change handling williamr@2: IMPORT_C virtual void HandleResourceChange(TInt aType); williamr@2: // Logical color use (for Java) williamr@2: IMPORT_C virtual void GetColorUseListL(CArrayFix& aColorUseList) const; williamr@2: // User help williamr@2: IMPORT_C virtual void GetHelpContext(TCoeHelpContext& aContext) const; williamr@2: // Text input williamr@2: IMPORT_C virtual TCoeInputCapabilities InputCapabilities() const; williamr@2: public: williamr@2: // Environment williamr@2: inline CCoeEnv* ControlEnv() const; williamr@2: // Container window williamr@2: IMPORT_C RDrawableWindow* DrawableWindow() const; williamr@2: IMPORT_C TBool OwnsWindow() const; williamr@2: IMPORT_C TBool IsBackedUp() const; williamr@2: IMPORT_C void SetContainerWindowL(RWindow& aWindow); // deprecated from 9.2 williamr@2: IMPORT_C void SetContainerWindowL(RBackedUpWindow& aWindow); // deprecated from 9.2 williamr@2: // Control parent williamr@2: IMPORT_C CCoeControl* Parent(); williamr@2: IMPORT_C const CCoeControl* Parent() const; williamr@2: IMPORT_C virtual TInt SetParent(CCoeControl* aParent); williamr@2: // Size and position williamr@2: IMPORT_C TRect Rect() const; williamr@2: IMPORT_C void SetRect(const TRect& aRect); williamr@2: IMPORT_C void SetExtent(const TPoint& aPosition,const TSize& aSize); williamr@2: IMPORT_C void SetExtentToWholeScreen(); williamr@2: IMPORT_C TSize Size() const; williamr@2: IMPORT_C void SetSize(const TSize& aSize); williamr@2: IMPORT_C TPoint Position() const; williamr@2: IMPORT_C TPoint PositionRelativeToScreen() const; williamr@2: IMPORT_C void SetPosition(const TPoint& aPosition); williamr@2: IMPORT_C TInt MaximumWidth() const; williamr@2: IMPORT_C TInt SetMaximumWidth(TInt aMaxWidth); williamr@2: // Layout williamr@2: IMPORT_C MCoeLayoutManager* LayoutManager() const; williamr@2: IMPORT_C virtual void SetLayoutManagerL(MCoeLayoutManager* aLayout); williamr@2: IMPORT_C virtual TBool RequestRelayout(const CCoeControl* aChildControl); williamr@2: // Visibility williamr@2: IMPORT_C TBool IsVisible() const; williamr@2: IMPORT_C void SetComponentsToInheritVisibility(TBool aInherit=ETrue); williamr@2: // Dimmed williamr@2: IMPORT_C TBool IsDimmed() const; williamr@2: // State observer williamr@2: IMPORT_C void SetObserver(MCoeControlObserver* aObserver); williamr@2: IMPORT_C MCoeControlObserver* Observer() const; williamr@2: // Focus williamr@2: IMPORT_C TBool IsFocused() const; williamr@2: IMPORT_C void SetFocus(TBool aFocus,TDrawNow aDrawNow=ENoDrawNow); williamr@2: IMPORT_C void SetNonFocusing(); williamr@2: IMPORT_C void SetFocusing(TBool aFocusing); williamr@2: IMPORT_C TBool IsNonFocusing() const; williamr@2: // Drawing (see also Draw() below) williamr@2: IMPORT_C void DrawNow() const; williamr@2: IMPORT_C void DrawNow(const TRect &aRect) const; williamr@2: IMPORT_C void DrawDeferred() const; williamr@2: IMPORT_C CWindowGc& SystemGc() const; williamr@2: IMPORT_C TInt SetCustomGc(CWindowGc* aGraphicsContext); williamr@2: IMPORT_C CWindowGc* CustomGc() const; williamr@2: // Control context (background color etc). Deprecated (use MCoeControlBackground) williamr@2: IMPORT_C void SetControlContext(MCoeControlContext* aContext); // deprecated from 9.2 williamr@2: IMPORT_C void CopyControlContextFrom(const CCoeControl* aControl); // deprecated from 9.2 williamr@2: IMPORT_C MCoeControlContext* ControlContext() const; // deprecated from 9.2 williamr@2: // Pointer events williamr@2: IMPORT_C void SetPointerCapture(TBool aCapture=ETrue); williamr@2: IMPORT_C void ClaimPointerGrab(TBool aSendUpEvent=ETrue); williamr@2: IMPORT_C void IgnoreEventsUntilNextPointerUp(); williamr@2: IMPORT_C void SetGloballyCapturing(TBool aGlobal); williamr@2: // Pointer hit test williamr@2: IMPORT_C TInt SetHitTest(const MCoeControlHitTest* aHitTestControl); williamr@2: IMPORT_C const MCoeControlHitTest* HitTest() const; williamr@2: // Logical colors williamr@2: IMPORT_C void OverrideColorL(TInt aLogicalColor,TRgb aColor); williamr@2: IMPORT_C TBool GetColor(TInt aLogicalColor,TRgb& aColor) const; williamr@2: // Control background williamr@2: IMPORT_C void DrawBackground(const TRect& aRect) const; williamr@2: IMPORT_C void DrawForeground(const TRect& aRect) const; williamr@2: IMPORT_C const MCoeControlBackground* Background() const; williamr@2: IMPORT_C const MCoeControlBackground* FindBackground() const; williamr@2: IMPORT_C void SetBackground(const MCoeControlBackground* aBackground); williamr@2: // Zooming williamr@2: IMPORT_C void SetZoomFactorL(TInt aZoomFactor, TZoomType aZoomType = ERelativeZoom); williamr@2: IMPORT_C TZoomFactor AccumulatedZoom() const; williamr@2: IMPORT_C const TCoeZoomWithType* ZoomWithType() const; williamr@2: // Font provider (see ScreenFont() below) williamr@2: IMPORT_C const CCoeFontProvider& FindFontProvider() const; williamr@2: IMPORT_C void SetFontProviderL(const CCoeFontProvider& aFontProvider); williamr@2: // Text baseline (virtuals) williamr@2: IMPORT_C virtual TInt TextBaselineOffset(const TSize& aSize) const; williamr@2: IMPORT_C virtual void SetTextBaselineSpacing(TInt aSpacing); williamr@2: // Input capabilities williamr@2: IMPORT_C TCoeInputCapabilities RecursivelyMergedInputCapabilities() const; williamr@2: // Interface access williamr@2: IMPORT_C void SetMopParent(MObjectProvider* aParent); williamr@2: // Instance identification williamr@2: IMPORT_C TInt UniqueHandle() const; williamr@2: IMPORT_C TInt SetUniqueHandle(TInt aUniqueHandle); williamr@2: public: // Pointer events (virtuals) williamr@2: IMPORT_C virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent); williamr@2: protected: // Virtuals. Override to handle these events. williamr@2: IMPORT_C virtual void HandlePointerBufferReadyL(); // See HandlePointerEventL() williamr@2: // Change of focus williamr@2: IMPORT_C virtual void FocusChanged(TDrawNow aDrawNow); williamr@2: // Change of size and position williamr@2: IMPORT_C virtual void SizeChanged(); williamr@2: IMPORT_C virtual void PositionChanged(); williamr@2: public: williamr@2: // Component control access williamr@2: IMPORT_C virtual TInt CountComponentControls() const; williamr@2: IMPORT_C virtual CCoeControl* ComponentControl(TInt aIndex) const; williamr@2: IMPORT_C TInt Index(const CCoeControl* aControl) const; williamr@2: protected: williamr@2: // Control state williamr@2: IMPORT_C TBool IsActivated() const; williamr@2: IMPORT_C TBool IsBeingDestroyed() const; williamr@2: // Component ownership williamr@2: IMPORT_C void InitComponentArrayL(); williamr@2: IMPORT_C CCoeControlArray& Components(); williamr@2: IMPORT_C const CCoeControlArray& Components() const; williamr@2: // Container window williamr@2: IMPORT_C RWindow& Window() const; williamr@2: IMPORT_C RBackedUpWindow& BackedUpWindow() const; williamr@2: IMPORT_C void CloseWindow(); williamr@2: IMPORT_C void CreateWindowL(); williamr@2: IMPORT_C void CreateWindowL(const CCoeControl* aParent); williamr@2: IMPORT_C void CreateWindowL(RWindowTreeNode& aParent); williamr@2: IMPORT_C void CreateWindowL(RWindowGroup* aParent); williamr@2: IMPORT_C void CreateBackedUpWindowL(RWindowTreeNode& aParent); williamr@2: IMPORT_C void CreateBackedUpWindowL(RWindowTreeNode& aParent,TDisplayMode aDisplayMode); williamr@2: IMPORT_C void EnableWindowTransparency(); williamr@2: // Size and position williamr@2: IMPORT_C void SetCornerAndSize(TGulAlignment aCorner,const TSize& aSize); williamr@2: IMPORT_C void SetSizeWithoutNotification(const TSize& aSize); williamr@2: // Font access williamr@2: IMPORT_C const CFont& ScreenFont(const TCoeFont& aFont) const; williamr@2: // Text drawer williamr@2: IMPORT_C CCoeTextDrawerBase& TextDrawer(TInt aKey = KErrNotFound) const; williamr@2: // Pointer events williamr@2: IMPORT_C void EnableDragEvents(); williamr@2: IMPORT_C void HandleRedrawEvent(const TRect& aRect) const; williamr@2: IMPORT_C void SetAllowStrayPointers(); williamr@2: IMPORT_C CCoeControl* GrabbingComponent() const; williamr@2: IMPORT_C TBool CapturesPointer() const; williamr@2: // Drawing williamr@2: IMPORT_C TBool IsReadyToDraw() const; williamr@2: IMPORT_C TBool IsBlank() const; williamr@2: IMPORT_C void SetBlank(); williamr@2: IMPORT_C void SetCanDrawOutsideRect(); williamr@2: IMPORT_C void ActivateGc() const; williamr@2: IMPORT_C void DeactivateGc() const; williamr@2: IMPORT_C void ResetGc() const; williamr@2: // State events williamr@2: IMPORT_C void ReportEventL(MCoeControlObserver::TCoeEvent aEvent); williamr@2: // Resource changes williamr@2: IMPORT_C void HandleComponentControlsResourceChange(TInt aType); williamr@2: // Copy Constructor and Assignment Operator williamr@2: inline CCoeControl(const CCoeControl& aControl); williamr@2: inline CCoeControl& operator=(const CCoeControl& aControl); williamr@2: protected: williamr@2: friend class CCoeControlArray; williamr@2: IMPORT_C virtual void HandleControlArrayEventL(CCoeControlArray::TEvent aEvent, const CCoeControlArray* aArray, CCoeControl* aControl, TInt aControlId); williamr@2: private: // reserved williamr@2: IMPORT_C virtual void Reserved_CCoeControl_10(); williamr@2: IMPORT_C virtual void Reserved_CCoeControl_11(); williamr@2: IMPORT_C virtual void Reserved_CCoeControl_12(); williamr@2: IMPORT_C virtual void Reserved_CCoeControl_13(); williamr@2: private: williamr@2: IMPORT_C virtual void GetTextDrawer(CCoeTextDrawerBase*& aTextDrawer, const CCoeControl* aDrawingControl, TInt aKey) const; williamr@2: private: // reserved williamr@2: IMPORT_C virtual void Reserved_CCoeControl_8(); williamr@2: IMPORT_C virtual void Reserved_CCoeControl_9(); williamr@2: protected: // from MObjectProvider williamr@2: IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId); williamr@2: private: // from MObjectProvider williamr@2: IMPORT_C MObjectProvider* MopNext(); williamr@2: private: williamr@2: // Drawing (override this to draw) williamr@2: IMPORT_C virtual void Draw(const TRect& aRect) const; williamr@2: protected: williamr@2: // Debugging williamr@2: IMPORT_C virtual void WriteInternalStateL(RWriteStream& aWriteStream) const; williamr@2: private: // reserved williamr@2: IMPORT_C virtual void Reserved_2(); williamr@2: public: // but not exported williamr@2: void ProcessPointerEventL(const TPointerEvent& aPointerEvent); williamr@2: void ProcessPointerBufferReadyL(); williamr@2: void RecursivelyMergeInputCapabilities(TCoeInputCapabilities& aInputCapabilities) const; williamr@2: void WriteInternalStateNowL(RWriteStream& aWriteStream) const; williamr@2: void NotifyFontChange(const CCoeFontProvider* aFontProvider); williamr@2: void RemoveFromParent(); williamr@2: void RefetchPixelMappingL(); williamr@2: public: // deprecated williamr@2: inline TInt SetGc(CWindowGc* aGraphicsContext) const; williamr@2: inline CWindowGc* GetGc() const; williamr@2: private: williamr@2: friend class CCoeRedrawer; williamr@2: void DrawComponents(const TRect& aRect) const; williamr@2: void DrawWindowOwningComponentsNow() const; williamr@2: void DrawWindowOwningComponentsNow(const TRect &aRect) const; williamr@2: void SetGrabbed(TBool aGrabbed); williamr@2: TBool IsGrabbed() const; williamr@2: void DoMakeVisible(TBool aVisible); williamr@2: void CheckPointerEventPurge() const; williamr@2: void RecursivelyMergeTextDrawers(CCoeTextDrawerBase*& aTextDrawer, const CCoeControl* aDrawingControl, TInt aKey) const; williamr@2: CCoeControl* WindowOwningParent(); williamr@2: const CCoeControl* WindowOwningParent() const { return const_cast(this)->WindowOwningParent(); } williamr@2: const CCoeControl* SearchParent(const CCoeControl* aParentToFind) const; williamr@2: TInt SetZoomWithType(TCoeZoomWithType* aZoomWithType); williamr@2: TCoeZoomWithType* GetZoomWithType() const; williamr@2: TInt SetFontProvider(const CCoeFontProvider* aFontProvider); williamr@2: const CCoeFontProvider* GetFontProvider() const; williamr@2: TInt FindColor(TInt aLogicalColor) const; williamr@2: void ActivateGcRecursive() const; williamr@2: void DeactivateGcRecursive() const; williamr@2: void ReportControlStateChange(MCoeControlStateObserver::TCoeState aType); williamr@2: public: williamr@2: IMPORT_C void EnableReportControlStateChange(TBool aState); williamr@2: williamr@2: protected: williamr@2: CCoeEnv* iCoeEnv; williamr@2: MCoeControlContext* iContext; // deprecated williamr@2: TPoint iPosition; williamr@2: TSize iSize; williamr@2: private: williamr@2: TInt iFlags; williamr@2: RDrawableWindow* iWin; williamr@2: RCoeDynamicDataStorage* iData; williamr@2: MObjectProvider* iMopParent; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Gets the control environment object for this control. williamr@2: williamr@2: @return The control's control environment object. williamr@2: */ williamr@2: inline CCoeEnv* CCoeControl::ControlEnv() const williamr@2: { return(iCoeEnv); } williamr@2: williamr@2: /** williamr@2: Deprecated. See CCoeControl::SetCustomGc(). williamr@2: @deprecated williamr@2: */ williamr@2: inline TInt CCoeControl::SetGc(CWindowGc* aGraphicsContext) const williamr@2: { return const_cast(this)->SetCustomGc(aGraphicsContext); } williamr@2: williamr@2: /** williamr@2: Deprecated. See CCoeControl::CustomGc(). williamr@2: @deprecated williamr@2: */ williamr@2: inline CWindowGc* CCoeControl::GetGc() const williamr@2: { return CustomGc(); } williamr@2: williamr@2: williamr@2: #endif // __COECNTRL_H__