javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtcaptionedcontrol.h
branchRCL_3
changeset 19 04becd199f91
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtcaptionedcontrol.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,319 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - S60 implementation
+ *******************************************************************************/
+
+
+#ifndef SWTCAPTIONEDCONTROL_H
+#define SWTCAPTIONEDCONTROL_H
+
+
+#include <eikcapc.h>
+#include "eswtwidgetscore.h"
+#include "eswtmobileextensions.h"
+#include "swtcontrolbase.h"
+
+
+/**
+ * CSwtCanvas
+ * @lib eswt
+ */
+NONSHARABLE_CLASS(CSwtCaptionedControl)
+        : public CEikCaptionedControl
+        , public ASwtControlBase
+        , public MSwtScrollable
+        , public MSwtComposite
+        , public MSwtCaptionedControl
+{
+// Own methods
+public:
+    /**
+     * Two phase constructor
+     * @param aDisplay  parent display
+     * @param aPeer     java peer of this class
+     * @param aParent   composite parent
+     * @param aStyle    control style
+     * @return pointer to an object of this class
+     */
+    static CSwtCaptionedControl* NewL(MSwtDisplay& aDisplay, TSwtPeer aPeer,
+                                      MSwtComposite& aParent, TInt aStyle);
+
+private:
+    /**
+     * First phase constructor.
+     * @param aDisplay  parent display
+     * @param aPeer     java peer of this class
+     * @param aParent   composite parent
+     * @param aStyle    control style
+     */
+    CSwtCaptionedControl(MSwtDisplay& aDisplay, TSwtPeer aPeer,
+                         MSwtComposite& aParent, TInt aStyle);
+
+    /**
+     * Destructor
+     */
+    ~CSwtCaptionedControl();
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+    /**
+     * Sets the emphasis on caption and trailer.
+     * @param aDrawNow tells if a draw should happen or not
+     */
+    void SetEmphasis(TDrawNow aDrawNow);
+
+    /**
+     * Const child control interface getter
+     * @return const child control interface
+     */
+    inline const MSwtControl* Child() const;
+
+    /**
+     * Modifiable child control interface getter
+     * @return const child control interface
+     */
+    inline MSwtControl* Child();
+
+    /**
+     * Const child control getter
+     * @return const child control
+     */
+    inline const CCoeControl* CoeChild() const;
+
+    /**
+     * Modifiable child control getter
+     * @return const child control
+     */
+    inline CCoeControl* CoeChild();
+
+    /**
+     * Child control setter
+     * @param aChild child control interface
+     */
+    inline void SetChild(MSwtControl* aChild);
+
+    /**
+     * Compute inner rect based on a given outer rect
+     * @return rect
+     */
+    TRect ComputeInnerRect(const TRect& aRect) const;
+
+    /**
+     * Real size setter.
+     * @param aSize
+     */
+    void DoSetSize(const TSize& aSize);
+
+    /**
+     * Default foreground setter.
+     */
+    void SetDefaultForegroundL();
+
+    /**
+     * Get the children of the current contained control.
+     * @param aAllChildren returned array of children.
+     * @param aParent parent for which the children will be returned.
+     */
+    void GetRecursiveChildrenL(RSwtControlArray& aAllChildren,
+                               MSwtComposite& aParent);
+
+    /**
+     * Calculate the real font height covering the special case where the font
+     * is open font and the height returned is differently calculated. If used
+     * font is an open font then CEikLabel badly gets font height (for an open
+     * font, HeightInPixels() returns the design height and that is notional
+     * rather than exact). A workaround is to set a top margin.
+     * @param aHeight the height result
+     * @return ETrue if the font is open
+     */
+    TBool RealFontHeight(TInt& aHeight) const;
+
+    /**
+     * Getter for the default left margin.
+     * @return width in pixels of the margin
+     */
+    TInt DefaultLeftMargin() const;
+
+    /**
+     * Resource change leaving helper
+     */
+    void SwtHandleResourceChangeL(TInt aType);
+
+// From CCoeControl
+public:
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    void MakeVisible(TBool aVisible);
+    void SetDimmed(TBool aDimmed);
+    TKeyResponse OfferKeyEventL(const TKeyEvent& aEvent,
+                                TEventCode aType);
+    TSize MinimumSize();
+    void HandleResourceChange(TInt aType);
+
+// From CCoeControl
+protected:
+    void FocusChanged(TDrawNow aDrawNow);
+    void SizeChanged();
+    void PositionChanged();
+
+// From MSwtControl
+public:
+    CCoeControl& CoeControl();
+    const CCoeControl& CoeControl() const;
+    TBool IsFocusable(TInt aReason = KSwtFocusByApi) const;
+    TInt FocusBackgroundPolicy() const;
+    void ProcessKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+#ifdef RD_SCALABLE_UI_V2
+    void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+#endif // RD_SCALABLE_UI_V2
+    TBool SetSwtFocus(TInt aReason = KSwtFocusByApi);
+    TRect ClientRect() const;
+    TSize ComputeSizeL(TInt aWHint, TInt aHHint);
+    void SetWidgetSize(const TSize& aSize);
+    void SetFontL(const MSwtFont* aFont);
+    void SetBounds(const TRect& aRect);
+    MSwtComposite* CompositeInterface() const;
+    void ComputeTabListL(RSwtControlArray& aList);
+    MSwtCaptionedControl* CaptionedControlInterface() const;
+    void UpdateDoNotDrawFlag();
+    void SetForegroundL(const MSwtColor* aColor);
+
+// From ASwtControlBase
+protected:
+    const MSwtFont& DefaultFont() const;
+
+// From MSwtScrollable
+public:
+    MSwtControl* Control();
+    void ComputeTrim(TRect& aRect) const;
+    MSwtScrollBar* CreateScrollBarL(TSwtPeer aPeer, TInt aStyle);
+    void SetVisibleScrollBar(TInt aStyle, TBool aVisible);
+    void ScrollBarDestroyed(const MSwtScrollBar* aScrollbar);
+
+// From MSwtComposite
+public:
+    MSwtScrollable* Scrollable();
+    void RegisterChildL(MSwtControl& aChild);
+    void UnregisterChild(MSwtControl& aChild);
+    CSwtPeerArray* GetChildrenPeersL();
+    const RSwtControlArray* Children() const;
+    void ChildFocusChanged(MSwtControl& aControl);
+    TInt CountFocusableChildren(TInt aTryBreakAfter = -1,
+                                const MSwtControl* aExclude = NULL, TBool aVisualFocusCount = ETrue) const;
+    void SetTabListL(MSwtControl** aControls, TInt aCount);
+    CSwtPeerArray* GetTabListL() const;
+    void MoveChildAbove(MSwtControl& aChild1, const MSwtControl* aChild2);
+    void MoveChildBelow(MSwtControl& aChild1, const MSwtControl* aChild2);
+    void NotifyRadioGroup(MSwtButton* aSelectedButton);
+    MSwtControl* GetPointerGrabbingControl() const;
+    void SetScrolledCompositeContentL(MSwtControl* aContent);
+    MSwtControl* ScrolledCompositeContent() const;
+    TInt ScrolledCompositePysicsAction() const;
+    void DrawScrollBarBackground(const TRect& aRect) const;
+
+// From MSwtCaptionedControl
+public:
+    MSwtComposite* Composite() const;
+    void SetTextL(const TDesC& aString);
+    void SetTrailingTextL(const TDesC& aString);
+    const TDesC* GetText() const;
+    const TDesC* GetTrailingText() const;
+    void SetImageL(MSwtImage* aImage);
+    void SetChildPreferredSize(const TSize& aSize);
+    const CCoeControl* GetImageControl() const;
+
+// Data types
+private:
+    class CControlProxy;
+
+// Data
+private:
+    /**
+     * Children control array.
+     */
+    RSwtControlArray iChildren;
+
+    /**
+     * Default font, cannot be NULL.
+     * Own.
+     */
+    MSwtFont* iDefaultFont;
+
+    /**
+     * Latest known position, in window coords. Do not confuse this
+     * with CSwtCaptionedControl::CControlProxy::iPrevPos.
+     */
+    TPoint iPrevPos;
+
+    /**
+     * Our inner rectangle for skinned frame
+     */
+    TRect iInnerRect;
+
+    /**
+     * Current custom foreground.
+     * Not Own.
+     */
+    const MSwtColor* iForegroundColor;
+    
+    /**
+     * Can be the child or null.
+     */
+    MSwtControl* iPointerGrabbingControl;
+};
+
+
+/**
+ * CSwtCaptionedControl::CControlProxy
+ * A class serving as a proxy between the captioned control and the actual
+ * control. Its purpose is to overcome CEikCaptionedControl's use of SetRect().
+ * It also serves as a way to avoid having to write MinimumSize() for each
+ * and every control by calling the control's ComputeSizeL() method.
+ * @lib eswt
+ */
+NONSHARABLE_CLASS(CSwtCaptionedControl::CControlProxy)
+        : public CCoeControl
+{
+// From CCoeControl
+public:
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    TSize MinimumSize();
+
+// From CCoeControl
+protected:
+    void PositionChanged();
+    void SizeChanged();
+
+// Data
+public:
+    /**
+     * The control we serve as a proxy to, may be NULL.
+     * Not Own.
+     */
+    MSwtControl* iChild;
+
+    /**
+     * Preferred size of iControl computed on Java side.
+     */
+    TSize iPreferredSize;
+
+// Data
+private:
+    /**
+     * Latest known position, in window coords. Do not confuse this
+     * with CSwtCaptionedControl::iPrevPos.
+     */
+    TPoint iPrevPos;
+};
+
+#endif // SWTCAPTIONEDCONTROL_H