classicui_pub/private_ui_framework_api/inc/EIKDPAGE.H
branchRCL_3
changeset 56 d48ab3b357f1
child 72 a5e7a4f63858
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_pub/private_ui_framework_api/inc/EIKDPAGE.H	Wed Sep 01 12:16:19 2010 +0100
@@ -0,0 +1,453 @@
+/*
+* 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(__EIKDPAGE_H__)
+#define __EIKDPAGE_H__
+
+#include <coeccntx.h>
+#include <eiksbfrm.h>
+#include <coecobs.h>
+#include <eikedwob.h>
+#include <AknPopupFieldText.h>
+#include <AknControl.h>
+
+//
+// Forward declarations.
+//
+
+class CEikCapCArray;
+class CEikCaptionedControl;
+class CEikDialogPageContainer;
+class CEikEdwin;
+class CEikLabel;
+class MEikDialogPageObserver;
+struct SEikControlInfo;
+class CAknLayoutData;
+class CDialogPageExtension;
+
+class CEikFormAnim;
+class MEikFormAnimObserver;
+class CAknPaneScroll;
+class CAknFormPhysics;
+
+/**
+ * The CEikDialogPage class implements a scrollable dialog page control.
+ *
+ * @internal
+ * @since ER5U
+ */
+NONSHARABLE_CLASS(CEikDialogPage) :
+    public CAknControl,
+    public MCoeControlObserver, 
+    public MEikScrollBarObserver, 
+    public MEikEdwinSizeObserver,
+    public MAknPopupFieldObserver,
+    public MEikEdwinObserver
+    {
+public:
+    enum TFocusNavigationMode
+        {
+        ECyclic,
+        ENonCyclic
+        };
+    enum TAScrollBarBreadthAllocationMode
+        {
+        ENone                                   =0x0000,
+        EScrollBarBreadthPreAllocated           =0x1000
+        };
+    /**
+    * Enumeration to express what layout is currently being used. Note that the use of 
+    * bitmaps on the left is controlled by D
+    *
+    */
+    enum TFormLayoutSelection
+        {
+        ESingle,
+        EDouble
+        };
+
+    /** 
+     * Used with iFormFlags to indicate where optimisations may or may not occur.  
+     * Uses bits above 0x100 as those below are used as static form flags for configuration by resource file.
+     */
+    enum TDynamicFormFlags
+        {
+        EFormResizeOptimisationFlag = 0x100 ,
+        EFormForceEdwinResizeFlag = 0x200
+        } ;
+
+public:
+    ~CEikDialogPage();
+    static CEikDialogPage* NewL(TInt aId,RWindow& aViewWin,CEikScrollBarFrame& aSBFrame,const CEikDialogPageContainer& aParent,MEikDialogPageObserver* aPageObserver);
+    static CEikDialogPage* NewLC(TInt aId,RWindow& aViewWin,CEikScrollBarFrame& aSBFrame,const CEikDialogPageContainer& aParent,MEikDialogPageObserver* aPageObserver);
+    static CEikDialogPage* NewL(TInt aId,RWindow& aViewWin,CEikScrollBarFrame& aSBFrame,const CEikDialogPageContainer& aParent,MEikDialogPageObserver* aPageObserver,TResourceReader& aReader);
+    static CEikDialogPage* NewLC(TInt aId,RWindow& aViewWin,CEikScrollBarFrame& aSBFrame,const CEikDialogPageContainer& aParent,MEikDialogPageObserver* aPageObserver,TResourceReader& aReader);
+    void SetDataPosition( TInt aTopY, TInt aBottomY, TBool aForceResize );
+    TSize PreferredSize() const;
+    void SetActiveL();
+    void SetActiveAndFocusL();
+    void SetInactiveL();
+    TInt PageId() const;
+    TInt LineId(const CCoeControl& aControl) const;
+    TBool SetInitialFocus();
+    CCoeControl* CreateLineByTypeL(const TDesC& aCaption,TInt aLineId,TInt aControlType,TAny* aReturnValue);
+    CCoeControl* Control(TInt aLineId) const;
+    CCoeControl* ControlOrNull(TInt aLineId) const;
+    TInt ControlHeight(TInt aLineIndex) const;
+    CEikCaptionedControl* Line(TInt aLineId) const;
+    CEikCaptionedControl* LineOrNull(TInt aLineId) const;
+    CEikCaptionedControl* CurrentLine() const;
+    void SetDensePacking(TBool aDensePacking);
+    void InsertLineL(TInt aPosition,TInt aResourceId);
+    void DeleteLine(TInt aLineId,TBool aRedrawNow);
+    void AdjustAllIds(TInt aControlIdDelta);
+    TInt FocusLineL(TInt aLineId);
+    TInt FocusedLineId() const;
+    void GetAutoValues();
+    TKeyResponse OfferUpDownKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType,TFocusNavigationMode aFocusNavigationMode);
+    TBool OwnsLine(TInt aLineId) const;
+    void ResetLineMinimumSizes();
+    TInt FindLineIndex(const CCoeControl* aControl) const;
+    TBool RotateFocusByL(TInt aDelta);
+    TKeyResponse OfferHotKeysKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+    TBool TakesEnterKey();
+    TInt LineIndex(TInt aLineId);
+    void ReportPageChangedL();
+    TInt GetFormFlags() const;
+    void SetFormFlag( TInt16 aFlag, TBool aEnable ) ;  // used with TDynamicFormFlags
+    void ConstructFormFromResourceL( TResourceReader& aReader ) ;
+    void SetEditableL( TBool aEditable, TBool aActivePage ) ;
+    TBool IsEditable() const;
+    TBool IsForm() const;
+
+	void SetDoubleQuery(TBool aIsDoubleQuery);
+
+    CEikFormAnim* AcquireAnim( TBool aAcquire, MEikFormAnimObserver* aObserver ) const;
+
+public:
+    void UpdateScrollBarL();
+    TBool LineHandlerCalled() const;
+
+public: // from CCoeControl
+    TSize MinimumSize();
+    virtual void GetColorUseListL(CArrayFix<TCoeColorUse>& aColorUseList) const;
+    virtual void HandleResourceChange(TInt aType);
+    virtual void PrepareForFocusLossL();
+    virtual void SetDimmed(TBool aDimmed);
+    virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+public: // from MCoeControlObserver
+    virtual void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+public: // from MEikEdwinSizeObserver
+    virtual TBool HandleEdwinSizeEventL(CEikEdwin* aEdwin, TEdwinSizeEvent aEventType, TSize aDesirableEdwinSize);
+public: // from MEikEdwinObserver
+    virtual void HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType);
+
+public: // from MAknPopupFieldObserver
+    virtual void HandlePopupFieldEventL(CAknPopupField* aPopupField, TAknPopupFieldEvent aEventType, TInt aHint);
+public: 
+    void SetPageContainer(const CEikDialogPageContainer* aPageContainer);
+    const CEikDialogPageContainer* PageContainer() const;
+protected: // from CCoeControl
+    void WriteInternalStateL(RWriteStream& aWriteStream) const;
+    void SizeChanged();
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    void FocusChanged(TDrawNow aDrawNow);
+    void Draw(const TRect& aRect) const;
+public:
+    // added to allow Form format to be set by API
+    IMPORT_C void SetFormLayout(TFormLayoutSelection aLayout);
+    IMPORT_C TFormLayoutSelection FormLayout() const;
+public:
+public:
+    TBool IsAtOrOffTopOfPage(const CCoeControl* aControl) const;
+    TBool IsAtOrOffBottomOfPage(const CCoeControl* aControl) const ;
+public:
+    TBool VisibleSizeOnPage(TInt& aHeightOfControlVisibleOnPage, const CCoeControl* aControl) const;
+    
+    /**
+     * Scrolls cached drawing commands by @c aDelta pixels in y direction.
+     * 
+     * @param  aDelta     A y-asix base on the sliding control's coordinate.
+     * @param  aDrawNow   Whether or not the view should be drawn.  
+     */
+    void ScrollCacheByPixels( TInt aDelta,
+                              TBool aDrawNow = ETrue );
+    
+    /**
+     * Updates line's cached drawing commands.
+     */
+    void UpdateLineInCache( CEikCaptionedControl* aLine );
+    
+    /**
+     * Physics simulation ended.
+     */
+    void Synchronize();
+
+    /**
+     * Can be used to query whether highlight graphics should be drawn.
+     *
+     * @since S60 5.2
+     * 
+     * @return ETrue if highlight should be drawn.
+     */
+    TBool HighlightVisible() const;
+    
+protected: // from MEikScrollBarObserver
+    virtual void HandleScrollEventL(CEikScrollBar* aScrollBar,TEikScrollEvent aEventType);
+
+private: // new functions
+    void AfterAddingNewLinesL(TInt aNewLineAdded);
+
+    CEikDialogPage(TInt aId,RWindow& aViewWin,CEikScrollBarFrame& aSBFrame,MEikDialogPageObserver* aPageObserver);
+    void ConstructL();
+    void ConstructFromResourceL(TResourceReader& aReader, TBool aFormControl = EFalse );
+    void ConstructByTypeL(TInt aControlType,CEikCaptionedControl* aLine,CCoeControl* aContainer);
+    void ShowFocus(TBool aFocus, TBool aRedraw=ETrue);
+    SEikControlInfo CreateCustomControlL(TInt aControlType);
+    void ChangeFocusTo(TInt aLineIndex);
+    void PrepareForFocusTransitionL();
+    void ChangeFocusToAndExposeL(TInt aLine,TBool aShowWholeControl=EFalse);
+    TInt TopFocusableLine() const;
+    TInt BottomFocusableLine() const;
+    TBool LineIsFocusable(TInt aLine) const;
+    TBool ResizeEdwinToFitTextL(CEikEdwin* aEdwin, TDrawNow aDrawNow, TSize aDesirableEdwinSize);
+    void ExposeLine(TInt aLine, TBool aForceResize, TBool aShowWholeLine = EFalse );
+    void PassOnEventL(CCoeControl* aControl,MCoeControlObserver::TCoeEvent aEvent);
+    CEikCaptionedControl* ConstructLineL(TInt aResourceId);
+    CEikCaptionedControl* ConstructLineL(TResourceReader& aReader);
+    TKeyResponse HandleCyclicFocusNavigationKeyL(const TKeyEvent& aKeyEvent);
+    TKeyResponse HandleNonCyclicFocusNavigationKeyL(const TKeyEvent& aKeyEvent);
+    void MakeEdwinScrollbarsVisibleL(TBool aVisible);
+    void LineChangedL(TInt aControlId);
+    void UpdateScrollBarThumb();
+    void ReconsiderPageSize();
+	void PrepareToDrawVerticalLine() const;
+	
+	/**
+	* Specialized pointer event handling for forms.
+	*/
+	void HandleFormPointerEventL( const TPointerEvent& aPointerEvent );
+	
+	/**
+	* Updates physics data.
+	*/
+	void UpdatePhysics();
+
+    /**
+    * Callback for highlight timer.
+    */
+    static TInt HighlightTimerCallBack( TAny* aPtr );
+    
+    /**
+    * Handles highlight timer's expiration.
+    */
+    void HandleHighlightTimer();
+    
+    /**
+    * Performs forced redraw of aControl and its component controls.
+    */
+    void DrawControl( CCoeControl* aControl ) const;
+    
+    /**
+    * Record all lines drawing commands to the cache. Existing cache is purged.
+    */
+    void RecordLinesL();
+    
+    /**
+    * Records one line's drawing commands to the cache replacing existing commands for that line.
+    */
+    void RecordLineL( TInt aLine );
+    
+    /**
+    * Removes pressed down highlight.
+    */
+    void RemovePressedDownHighlight();
+    
+    /**
+     * Sets highlight's visibility.
+     *
+     * @since S60 5.2
+     * 
+     * @param aVisible ETrue to set highlight visible.
+     */
+    void HighlightVisible( TBool aVisible );
+
+    enum TScrollDirection
+        {
+        ESingleLineScrollUp ,
+        ESingleLineScrollDown
+        } ;
+    void RegisterComponentL(TInt aControlType, CCoeControl* aControl, CEikCaptionedControl* aLine);
+    static void CommonConstructCodeBetweenNewL(CEikDialogPage& aDialogPage, const CEikDialogPageContainer& aParent);
+
+public: 
+    TBool AnythingToDisplay() const;
+    CEikCaptionedControl* LineOnPageOrNull(TInt aLine) const;
+    TInt NumberOfLines() const;
+    CEikCaptionedControl* LineByIndex(TInt aIndex) const;
+
+private:
+    CEikCapCArray* iLines;
+    MEikDialogPageObserver* iPageObserver;
+    TInt iPageId;
+    TInt iCurrentLine;
+    TInt16 iFormFlags ;
+    TBool iIsEditable;
+    TBool iFormControl ;
+    TInt iLastExposedLine;
+    TInt iLastExposedLineViewWinYPosition;
+    const CEikDialogPageContainer* iPageContainer;
+    TFormLayoutSelection iFormLayout;
+	CAknPaneScroll *iScroll;
+public:
+mutable CEikEdwin* iIgnoreFurtherEdwinResizeEvents;
+private:
+    CDialogPageExtension* iExtension;
+    void DrawEmptyListL( CWindowGc& aGc );
+    CAknFormPhysics* iPhysics;
+
+    /**
+     * Stores highlight's visibility.
+     */
+    TBool iHighlightVisible;
+
+public:
+/**
+ * HandlePointerEventL
+ * Function notifys the pages observer that the page has been tapped. (stylus down&up)
+ * @param aPointerEvent the pointer event.
+ */
+	virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+	
+	void SetScbState(TBool aExternal);
+    TBool ScbState() const;
+
+private:
+    /**
+    * From CAknControl
+    */
+    IMPORT_C void* ExtensionInterface( TUid aInterface );
+	};
+
+
+/**
+ * The CEikDialogPageContainer class contains one or more dialog pages and provides an interface to the active
+ * page.
+ *
+ * @internal
+ * @since ER5U
+ */
+NONSHARABLE_CLASS(CEikDialogPageContainer) : public CAknControl, public MCoeControlContext, public MCoeControlHitTest
+    {
+public:
+    ~CEikDialogPageContainer();
+    static CEikDialogPageContainer* NewL(const CCoeControl& aParent,MEikDialogPageObserver* aPageObserver);
+    static CEikDialogPageContainer* NewLC(const CCoeControl& aParent,MEikDialogPageObserver* aPageObserver);
+    TSize PreferredSize(const TSize& aMaxSize) const;
+    void SetActivePageByIdL(TInt aPageId);
+    void SetActivePageByIndexL(TInt aPageIndex);
+    TInt ActivateFirstPageL();
+    void AddPageL(TInt aPageId);
+    void AddPageL(TInt aPageId,TResourceReader& aReader);
+    TBool SetInitialFocus();
+    CEikCaptionedControl* Line(TInt aLineId) const;
+    CEikCaptionedControl* LineOrNull(TInt aLineId) const;
+    CEikCaptionedControl* CurrentLine() const;
+    void SetPageDensePacked(TInt aPageId,TBool aDensePacked);
+    void SetAllPagesDensePacked(TBool aDensePacked);
+    void SetPageDimmed(TInt aPageId,TBool aDimmed,TDrawNow aDrawNow);
+    TBool IsActivePageDimmed() const;
+    TInt LineId(const CCoeControl& aControl) const;
+    void InsertLineL(TInt aPosition,TInt aPageId,TInt aResourceId);
+    void DeleteLine(TInt aLineId, TBool aRedrawNow);
+    void AdjustAllIds(TInt aPageId,TInt aControlIdDelta);
+    CCoeControl* CreateLineByTypeL(const TDesC& aCaption,TInt aLineId,TInt aControlType,TAny* aReturnValue);
+    CCoeControl* CreateLineByTypeL(const TDesC& aCaption,TInt aPageId,TInt aLineId,TInt aControlType,TAny* aReturnValue);
+    TInt FocusLineL(TInt aLineId);
+    TInt FocusedLineId() const;
+    void GetAutoValues();
+    TKeyResponse OfferUpDownKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType,CEikDialogPage::TFocusNavigationMode aFocusNavigationMode);
+    TInt ActivePageId() const;
+    TInt ActivePageIndex() const;
+    void ResetLineMinimumSizes();
+    TInt FindLineIndex(const CCoeControl& aControl) const;
+    TBool RotateFocusByL(TInt aDelta);
+    TInt NumPages() const;
+    TKeyResponse OfferHotKeysKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+    TBool TakesEnterKey();
+    TInt FindPageIndexForLineId(TInt aLineId);
+    CEikDialogPage* Page( TInt aPageID ) ;
+    void SetEditableL( TBool aEditable ) ;
+
+    CEikFormAnim* AcquireAnim( TBool aAcquire, MEikFormAnimObserver* aObserver ) const;
+
+public: // from CCoeControl
+    virtual void Draw(const TRect& aRect) const;
+    virtual TSize MinimumSize();
+    virtual void PrepareForFocusLossL();
+    virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+    virtual void HandleResourceChange(TInt aType);
+public: // from MCoeControlContext
+    virtual void PrepareContext(CWindowGc& aGc) const;
+public:
+    TBool HitRegionContains( const TPoint& aPoint, const CCoeControl& aControl ) const;
+public:
+    void SetPageFormSized(const TRect& aRect);
+protected:  // from CCoeControl
+    virtual void SizeChanged();
+    virtual TInt CountComponentControls() const;
+    virtual CCoeControl* ComponentControl(TInt aIndex) const;
+    virtual void ActivateL();
+    virtual void FocusChanged(TDrawNow aDrawNow);
+    virtual void WriteInternalStateL(RWriteStream& aWriteStream) const;
+public: 
+    void SetPageSelector(const CEikDialogPageSelector* aPageSelector);
+    const CEikDialogPageSelector* PageSelector() const; 
+private:
+    CEikDialogPageContainer(MEikDialogPageObserver* aPageObserver);
+    void ConstructL(const CCoeControl& aParent);
+    void ConstructFromResourceL(TResourceReader& aReader,const CCoeControl& aParent);
+    void CommonConstructL(const CCoeControl& aParent);
+    void CreatePageArrayL();
+    TInt PageIndex(TInt aPageId) const;
+    TInt PageId(TInt aIndex) const;
+    TInt PageIdFromLineId(TInt aLineId) const;
+public:
+    void CreateScrollBarL(const CCoeControl& aParent);
+    CEikScrollBarFrame* ScrollBar() const;
+    
+private:
+    CEikScrollBarFrame* iSBFrame;
+    CArrayPtr<CEikDialogPage>* iPageArray;
+    MEikDialogPageObserver* iPageObserver;
+    TInt iActivePage;
+    const CEikDialogPageSelector* iPageSelector;
+    TBool iForm;
+    TBool iIsEditable;
+
+    /**
+    * A singleton animation object for interfacing AknsEffectAnimation. All
+    * captioned controls (in all dialog pages) share the same animation.
+    * Only animation creation and memory management is vested here. Actual
+    * animation usage is implemented in CaptionedControl.
+    */
+    CEikFormAnim* iAnimation;
+    };
+
+#endif