epoc32/include/mw/eiksbfrm.h
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
--- a/epoc32/include/mw/eiksbfrm.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/mw/eiksbfrm.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,776 @@
-eiksbfrm.h
+/*
+* Copyright (c) 1997-1999 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* 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
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+	
+#if !defined(__EIKSBFRM_H__)
+#define __EIKSBFRM_H__
+
+#include <lafpublc.h>
+#if !defined(__AKNSCRLB_H__)
+#include <aknscrlb.h>
+#endif
+ 
+class CEikCba;
+
+/**
+ * Enables setting of the frame layout for a scroll bar.
+ */
+class TEikScrollBarFrameLayout
+    {
+
+public:
+
+    /** 
+     * Determines whether the client rectangle or the inclusive rectangle
+     * remains constant.
+     */
+    enum TTilingMode
+        {
+
+        /** The client rectangle remains constant. */
+        EClientRectConstant,
+
+        /** The inclusive rectangle remains constant. */
+        EInclusiveRectConstant
+        };
+
+public:
+
+    /**
+     * C++ default constructor.
+     */
+    IMPORT_C TEikScrollBarFrameLayout();
+
+    /**
+     * Sets all inclusive margins.
+     *
+     * @param aMargin The value to use for all inclusive margins.
+     */
+    IMPORT_C void SetInclusiveMargin(TInt aMargin);
+
+    /**
+     * Sets all client margins. These surround the client rectangle which is
+     * the client area viewport onto the larger canvas to be scrolled.
+     *
+     * @param aMargin The value to use for all client margins.
+     */
+    IMPORT_C void SetClientMargin(TInt aMargin);
+
+public:
+
+    /** The inclusive margin (in twips or pixels). */
+    TMargins iInclusiveMargin;
+
+    /** 
+     * The amount of screen movement performed when the nudge button is 
+     * pressed.
+     */
+    TMargins iClientMargin;
+
+    /** 
+     * The amount of screen movement performed when the nudge button is
+     * pressed.
+     */
+    TSize iClientAreaGranularity;
+
+    /** 
+     * Determines whether the client rectangle, or the inclusive rectangle,
+     * remains constant.
+     */
+    TTilingMode iTilingMode;
+    };
+
+
+class CEikCornerWindow;
+class CEikScrollBarFrameExtension;
+
+/**
+ * The scroll bar frame is a control assemblage manager that relates a control,
+ * or control body, to two scroll bars and a corner window. A corner window is
+ * that part of the screen that is common to both the horizontal, and the 
+ * vertical elements of a scroll bar.
+ *
+ * This class helps with access to, and set up of, scroll bars and also with 
+ * the layout of the scrolled control or control body. A scroll bar frame is 
+ * not a control, but it does implement the standard control composite pattern
+ * to manage the assemblage.
+ */
+class CEikScrollBarFrame : public CBase
+    {
+	
+public:	// enums 
+
+    DECLARE_TYPE_ID(0x101F8672)   
+
+    /** Defines the scroll bar’s visibility.*/
+    enum TScrollBarVisibility
+        {
+        /** Scroll bar not visible.*/
+        EOff,
+
+        /** Scroll bar visible.*/
+        EOn,
+
+        /** Scroll bar visible if required.*/
+        EAuto
+        };
+
+    /** Defines the type of scroll bar.*/	
+    enum TScrollBarType
+        {
+        /** Scroll bar complete with shaft. Not used.*/
+        ENormalScrollBar =0x0,
+
+        /** Floating arrow head scroll bar, without shaft. Legacy type. */
+        EArrowHead =0x200,
+
+        /** Spanned scroll bar. */
+        EDoubleSpan =0x400
+        };
+
+    /** Defines where the scroll bar is located. */		
+    enum TScrollBarSide
+        {
+        /** 
+         * Scroll bar located at the bottom, or to the right of the scroll bar
+         * frame.
+         */
+        EBottomOrRight =0x0,
+
+        /** 
+         * Scroll bar located at the top, or to the left of the scroll bar
+         * frame.
+         */
+        ETopOrLeft =0x800
+        };
+		
+    /** Determines how the scroll bar frame manages scroll bars.*/
+    enum TScrollBarManagement 
+        {
+        /** 
+         * The scroll bar frame creates, destroys and recreates, scroll bars
+         * according to the visibility mode. The scroll bar frame also acts as
+         * an intermediary with its owning control so that the scroll bars can
+         * be treated as component controls.
+         */
+        EComponent                  ,//=SLafScrollBarFrame::EComponent,
+
+        /** 
+         * The scroll bar frame creates, destroys and recreates, scroll bars 
+         * according to the visibility mode. In this case, the scroll bars are
+         * not treated as component controls. Instead, the scroll bars are 
+         * geometry managed in windows floating above the control window and
+         * their position is determined in relation to the frame’s position on
+         * the screen.
+         */
+        EFloating                   ,//=SLafScrollBarFrame::EFloating,
+
+        /** 
+         * The scroll bar frame uses the central application scroll bar as held
+         * in the environment. This scroll bar is neither owned by the frame 
+         * nor treated as a component control of the frame’s owner.
+         */
+        EApplicationScrollBar       //=SLafScrollBarFrame::EApplicationScrollBar
+        };
+
+    /**
+     * Defines that is the horizontal or the vertical (spanned) scroll bar
+     * visible. Applicaple  only for spanned scroll bars.
+     */
+    enum TScrollBarFrameFlags
+        {
+        /** Horizontal spanned scroll bar visible. */
+        EHVisible           =0x01,
+
+        /** Vertical spanned scroll bar visible. */
+        EVVisible           =0x02,
+
+        /** 
+         * Enables nudge buttons in touch devices. This flag MUST
+         * be set before the creation of the doublespan scrollbar.
+         */
+        EEnableNudgeButtons = 0x04,
+        
+        /** 
+         * Disables expanded touch area, which is on by default
+         * in touch devices. This flag MUST be set before the
+         * creation of the doublespan scrollbar.
+         */
+        EDisableExpandedTouchArea = 0x08      
+        };
+private:
+    enum TMarginsAdjustmentMode
+        {
+        EGrow,
+        EShrink
+        };
+
+public:	// specific
+
+    /**
+     * C++ default constructor.
+     */
+    CEikScrollBarFrame(){}
+
+    /**
+     * Constructor. Constructs a scroll bar frame object.
+     *
+     * @param aParentWindow The scroll bar’s parent control.
+     * @param aObserver The scroll bar observer.
+     * @param aPreAlloc Not used.
+     */  	
+    IMPORT_C CEikScrollBarFrame(CCoeControl* aParentWindow, 
+                                MEikScrollBarObserver* aObserver, 
+                                TBool aPreAlloc=EFalse);
+
+    /**
+     * Destructor.
+     */  
+    IMPORT_C ~CEikScrollBarFrame();
+
+    /**
+     * Constructor. Internal only to Eikcoctl.lib use. Parameter @c aDoubleSpan
+     * offers possibility to optimize scroll bar loading (if @c ETrue,
+     * arrowhead scroll bar will never be loaded).
+     *
+     * @since S60 3.0
+     * @param aParentWindow The scroll bar’s parent control.
+     * @param aObserver The scroll bar observer.
+     * @param aPreAlloc Not used.
+     * @param aDoubleSpan If @c ETrue, spanned scroll bar is created.
+     */     
+    CEikScrollBarFrame(CCoeControl* aParentWindow, 
+                       MEikScrollBarObserver* aObserver, 
+                       TBool aPreAlloc, 
+                       TBool aDoubleSpan);
+
+    /**
+     * Initializes a new @c CEikScrollBarFrameExtension object.
+     *
+     * @since S60 3.0
+     * @param aParentWindow The scroll bar’s parent control.
+     * @param aObserver The scroll bar observer.
+     */
+    void InitExtension(CCoeControl* aParentWindow, 
+                       MEikScrollBarObserver* aObserver);
+
+    /**
+     * Forces any scroll bars and the corner window if it is visible to be 
+     * redrawn.
+     */     
+    IMPORT_C void DrawScrollBarsNow() const;
+
+	/**
+     * Tell scroll bars and the corner window to redraw if it is visible
+     */     
+    void DrawScrollBarsDeferred() const;
+
+    /**
+     * Sets the visibility state for both the horizontal and the vertical scroll
+     * bars. This is used when tiling.
+     *
+     * @param aHVisibility Horizontal scroll bar visibility.
+     * @param aVVisibility Vertical scroll bar visibility.
+     */     
+    IMPORT_C void SetScrollBarVisibilityL(TScrollBarVisibility aHVisibility, 
+                                          TScrollBarVisibility aVVisibility);
+
+    /**
+     * Determines the vertical scroll bar’s visibility. @c 
+     * CEikScrollBarFrame::ScrollBarVisibility @c 
+     * (CEikScrollBar::TOrientation aOrientation) can be used instead of this
+     * method.
+     * 
+     * @return Visibility for vertical scroll bar.
+     */     
+    inline TScrollBarVisibility VScrollBarVisibility() const;
+
+    /**
+     * Sets scrollbar observers.
+     *
+     * @param aObserver The scroll bar observer. 
+     */     
+    IMPORT_C void SetScrollBarFrameObserver(MEikScrollBarObserver* aObserver);
+
+    // Model setting. 
+
+    /**
+     * Sets the vertical scrollbar mode. Does not actually draw anything until 
+     * the thumb or focus setting functions are called.
+     *
+     * @param aVModel Model for the vertical scrollbar.
+     * @return @c EFalse.
+     */     
+    IMPORT_C TBool Tile(TEikScrollBarModel* aVModel);
+
+    /**
+     * Tiles the client area and the scroll bars managed by the frame. The 
+     * scroll bars are set up according to the scroll bar models; @c aHModel and
+     * @c aVModel. Ownership is not transferred as a result of passing these
+     * parameters as pointers. The result of tiling geometry management is 
+     * observable through the two rectangles @c aClientRect and @c 
+     * aInclusiveRect. Depending on the tiling layout @c aLayout and the scroll 
+     * bar visibility settings, either of these rectangles can be made constant
+     * and the other rectangle adjusted accordingly.
+     *
+     * For @c EArrowhead type scrollbar the layout is always fixed, it cannot be
+     * altered by using this method.
+     *
+     * For @c EDoublespan type scrollbar the layout can be set also with two 
+     * helper methods from the @c AknLayoutUtils class:
+     *
+     * @code
+     * AknLayoutUtils::LayoutVerticalScrollBar(
+     *           CEikScrollBarFrame* aScrollBarFrame, 
+     *           const TRect& aControlParent, 
+     *           const TAknWindowLineLayout& aLayout);
+     * AknLayoutUtils::LayoutHorizontalScrollBar(
+     *           CEikScrollBarFrame* aScrollBarFrame, 
+     *           const TRect& aControlParent, 
+     *           const TAknWindowLineLayout& aLayout);
+     * @endcode
+     *   
+     * @param aHModel Horizontal scroll bar model.
+     * @param aVModel Vertical scroll bar model.
+     * @param aClientRect Client rectangle.
+     * @param aInclusiveRect A rectangle that includes the area to be scrolled 
+     *        and the scroll bars themselves.
+     * @param aLayout Tiling layout.
+     * 
+     * @return @c ETrue if the non-constant rectangle is adjusted, otherwise @c 
+     *         EFalse.
+     */     
+    IMPORT_C TBool TileL(TEikScrollBarModel* aHModel, 
+                         TEikScrollBarModel* aVModel,
+                         TRect& aClientRect,
+                         TRect& aInclusiveRect,
+                         const TEikScrollBarFrameLayout& aLayout);
+
+    /**
+     * Moves the scroll bar thumbs by the specified amounts. This updates the 
+     * scroll bars after an external scroll. The values of the parameters should
+     * be supplied in terms of the horizontal and vertical scrolling models 
+     * respectively. The scrolling models are presumed not to have changed 
+     * spans.
+     *
+     * @param aDeltaX The amount to move the horizontal scroll bar.
+     * @param aDeltaY The amount to move the vertical scroll bar.
+     */     
+    IMPORT_C void MoveThumbsBy(TInt aDeltaX, TInt aDeltaY);
+
+    /**
+     * Moves the horizontal scroll bar thumb to the position @c aHorizThumbPos.
+     * This function is used to update the scroll bar after an external scroll.
+     * The value of @c aThumbPos should be supplied in terms of the scrolling
+     * model, which is presumed not to have changed spans.
+     * 
+     * @param aHorizThumbPos The required thumb position.
+     */     
+    IMPORT_C void MoveHorizThumbTo(TInt aHorizThumbPos);
+
+    /**
+     * Moves the vertical scroll bar thumb to the position @c aVertThumbPos. 
+     * This function is used to update the scroll bar after an external scroll.
+     * The value of aThumbPos should be supplied in terms of the scrolling 
+     * model, which is presumed not to have changed spans.
+     * 
+     * @param aVertThumbPos The required thumb position.
+     */     
+    IMPORT_C void MoveVertThumbTo(TInt aVertThumbPos);
+
+    /**
+     * Moves the vertical scroll bar thumb to the position @c aFocusPosition. 
+     * This function is used to update the scroll bar after an external scroll. 
+     * The value of @c aFocusPosition should be supplied in terms of the 
+     * scrolling model, which is presumed not to have changed spans.
+     * 
+     * @param aFocusPosition The required thumb position.
+     */     
+    IMPORT_C void SetVFocusPosToThumbPos(TInt aFocusPosition);
+
+    /**
+     * Returns the breadth of the scroll bar idenitified by @c aOrientation, or
+     * zero if none exists.
+     *
+     * @param  aOrientation The orientation of the scroll bar for which you wish
+     *         to obtain the breadth.
+     *
+     * @return The specified scroll bar's breadth. This is zero if none exists.
+     */     
+    IMPORT_C TInt ScrollBarBreadth(
+        CEikScrollBar::TOrientation aOrientation) const;
+
+    // scroll bar frame behavior functions
+
+    /**
+     * Not implemented.
+     *
+     * @param aAdjusts Not used. 
+     */     
+    IMPORT_C void SetAdjustsHorizontalModel(TBool aAdjusts); 
+
+    /**
+     * Not implemented.
+     *
+     * @param aAdjusts Not used. 
+     */      
+    IMPORT_C void SetAdjustsVerticalModel(TBool aAdjusts);
+
+    /**
+     * Sets scrollbar frame flags. 
+     *
+     * @param aMask Bitmask of the bits that are to be set.
+     */     
+    inline void SetScrollBarFrameFlags(TInt aMask);
+
+    /**
+     * Determines whether the scroll bar specified by aOrientation exists
+     * 
+     * @param aOrientation The scroll bar’s orientation.
+     * @return @c ETrue if the specified scroll bar exists otherwise @c EFalse.
+     */     
+    IMPORT_C TBool ScrollBarExists(
+        CEikScrollBar::TOrientation aOrientation) const;
+
+    /**
+     * From @c CCoeControl
+     *
+     * Gets the number of controls contained in a compound control.
+     * 
+     * @return The number of component controls contained in this control.
+     */     
+    IMPORT_C TInt CountComponentControls() const;
+
+    /**
+     * From @c CCoeControl
+     *
+     * Gets the component specified by index. Within a compound control, each
+     * component control is identified by an index, where the index depends on
+     * the order the controls were added: the first is given an index of 0, the
+     * next an index of 1, and so on.
+     * 
+     * @return The component control with an index of aIndex
+     */         
+    IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const;
+
+    /**
+     * Returns a pointer to the scroll bar identified by orientation @c 
+     * aOrientation.
+     * 
+     * @param aOrientation The orientation of the scroll bar for which you wish
+     *        to obtain a pointer.
+     * @return A pointer to the scroll bar with orientation @c aOrientation if 
+     *         the scrollbar is visible.
+     */         
+    IMPORT_C CEikScrollBar* GetScrollBarHandle(
+        CEikScrollBar::TOrientation aOrientation) const;
+
+    /**
+     * Returns a pointer to the vertical scroll bar.
+     * 
+     * @return A pointer to the vertical scroll bar.
+     */         
+    IMPORT_C CEikScrollBar* VerticalScrollBar() const;
+
+    /**
+     * Sets the type of horizontal scroll bar. Possible values are @c EArrowHead
+     * and @c EDoubleSpan.
+     *
+     * @param aType Type of the scrollbar. 
+     */         
+    IMPORT_C void SetTypeOfHScrollBar(TScrollBarType aType);
+
+    /**
+     * Sets the type of vertical scroll bar. Possible values are @c EArrowHead
+     * and @c EDoubleSpan.
+     *
+     * @param aType Type of the scrollbar. 
+     */         
+    IMPORT_C void SetTypeOfVScrollBar(TScrollBarType aType);
+
+    /**
+     * Returns the control type of the horizontal scroll bar 
+     * 
+     * @return Type of the scrollbar.
+     */         
+    IMPORT_C TScrollBarType TypeOfHScrollBar() const;
+
+    /**
+     * Returns the control type of the vertical scroll bar 
+     * 
+     * @return Type of the scrollbar.
+     */         
+    IMPORT_C TScrollBarType TypeOfVScrollBar() const;
+
+    /**
+     * Checks if the vertical scrollbar type is @c EArrowHead.
+     *
+     * @param aFlag Not used.
+     * @return @c ETrue if the type of the scrollbar is @c EArrowHead.
+     */         
+    IMPORT_C TBool IsArrowHeadScrollBar(TInt aFlag) const;
+
+    // application scroll bar utilities
+
+    /**
+     * This method is used only internally by the @c CEikScrollBar. Disconnects
+     * externally connected scrollbar.
+     * 
+     * @param aScrollBar Scrollbar to be disconnected.
+     */     
+    void DisconnectExternalScrollBar(CEikScrollBar* aScrollBar);
+
+    /**
+     * This method creates double span type scrollbars into this frame. Old
+     * scrollbars are deleted or disconnected.
+     *
+     * @since S60 2.6
+     * @param aWindowOwning Tells wheter created scrollbar should be 
+     *        a window owning control or not. Selection for this is 
+     *        relevant especially because skinned scrollbar draws            
+     * @param aRemote @c True if this method should instead of creating own 
+     *        scrollbar try to connect to a remote scrollbar frame and 
+     *        start using its scrollbars. Connecting is done using 
+     *        through object provider mechanism, so the object supply 
+     *        chain must be valid. Also if true, then parameter @c 
+     *        aWindowOwning will be ignored.
+     *
+     * Example of use:
+     *
+     * @code
+     *    iSBFrame=new(ELeave) CEikScrollBarFrame(this, NULL, ETrue);
+     *    iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
+     *                                      CEikScrollBarFrame::EAuto);
+     *    iSBFrame->CreateDoubleSpanScrollBarsL(ETrue, EFalse);
+     *
+     *    Note that double span scrollbar types requires different model classes
+     *    to be used in places of @c TEikScrollBarModel of this scrollbar frame 
+     *    API:s other method calls.
+     *    
+     *    Scrollbar type        Required model (in places of TEikScrollBarModel)
+     *    ---------------       ------------------------------------------------
+     *    EDoubleSpan           TAknDoubleSpanScrollBarModel 
+     *    EArrowHead            TEikScrollBarModel
+     *
+     *   // model for double span type scrollbar
+     *   TAknDoubleSpanScrollBarModel vModel; 
+     *   // model for double span type scrollbar
+     *   TAknDoubleSpanScrollBarModel hModel; 
+     *   
+     *   iSBFrame->Tile(vModel, iVRect);
+     * @endcode
+     */ 
+    IMPORT_C void CreateDoubleSpanScrollBarsL(TBool aWindowOwning, 
+                                              TBool aRemote);
+
+    /**
+     * This method creates double span type scrollbars into this frame. Old 
+     * scrollbars are deleted or disconnected.
+     *
+     * @since S60 2.8
+     * @param aWindowOwning Tells wheter created scrollbar should be a window 
+     *        owning control or not. Selection for this is relevant especially
+     *        because skinned scrollbar draws its background using its parent 
+     *        windows background context.                   
+     * @param aRemote True if this method should instead of creating own
+     *        scrollbar try to connect to a remote scrollbar frame and start
+     *        using its scrollbars. Connecting is done using through object 
+     *        provider mechanism, so the object supply chain must be valid. Also
+     *        if true, then parameter @c aWindowOwning will be ignored.
+     * @param aVertical If @c ETrue vertical scrollbar will be created to 
+     *        scrollbar frame.
+     * @param aHorizontal If @c ETrue horizontal scrollbar will be created to
+     *        scrollbar frame.
+     * @leave KErrNotFound Parent object doesn't have scrollbar frame.
+     */ 
+    IMPORT_C void CreateDoubleSpanScrollBarsL(TBool aWindowOwning, 
+                                              TBool aRemote, 
+                                              TBool aVertical, 
+                                              TBool aHorizontal);
+
+    /**
+     * Tiles the vertical @c EDouble span type scroll bar managed by the frame.
+     * The scroll bar is set up according to the scroll bar model and given 
+     * rectangle which is relative to the parent window of the frame.
+     *
+     * @since S60 2.6
+     * @param aVModel Vertical scrollbar model.         
+     * @param aVScrollBar Vertical scrollbar rectangle.            
+     *
+     * For @c EDoublespan type scrollbar the layout can be set also with a 
+     * helper method from the @c AknLayoutUtils class:
+     *
+     * @code
+     * AknLayoutUtils::LayoutVerticalScrollBar(
+     *                                   CEikScrollBarFrame* aScrollBarFrame, 
+     *                                   const TRect& aControlParent, 
+     *                                   const TAknWindowLineLayout& aLayout);
+     * @endcode
+     */     
+    IMPORT_C void Tile(TEikScrollBarModel* aVModel, TRect& aVScrollBar);
+
+    /**
+     * Sets the models of the scrollbars. 
+     * 
+     * @since S60 2.6
+     * @param aHModel The model of the horizontal scrollbar.
+     * @param aVModel The model of the vertical scrollbar.
+     *
+     */     
+    IMPORT_C void Tile(TEikScrollBarModel* aHModel,
+                       TEikScrollBarModel* aVModel);
+
+    /**
+     * Gets the visibility of given scrollbar orientation. 
+     * 
+     * This method should be used instead of a deprecated method @c
+     * CEikScrollBarFrame::HScrollBarVisibility() and
+     * also can be used instead of @c CEikScrollBarFrame::VScrollBarVisibility()
+     *
+     * @since S60 2.6
+     * @param aOrientation The orientation of a scrollbar in the frame.
+     * @return The visibility of requested scrollbar.
+     */     
+    IMPORT_C TScrollBarVisibility ScrollBarVisibility(
+            CEikScrollBar::TOrientation aOrientation) const;
+	/**
+    * Sets the background drawing for the double spanned scrollbars 
+    * 
+    * This method can be used to enable or disable the drawing of the scrollbar 
+    * background via mop chain.
+    *
+    * @since    3.0
+    * @param    aDrawHorizontal sets the state of the background drawing of 
+    * 			the horizontal scrollbar.
+    * @param    aDrawVertical sets the state of the background drawing of 
+    * 			the vertical scrollbar.
+    * @return   Success of the call, KErrNotSupported if the scrollbars 
+    * 			are not doublespan scrollbars.
+    *
+    */
+	IMPORT_C TInt DrawBackground(TBool aDrawHorizontal, TBool aDrawVertical);
+	
+	/**
+    * Gets the state of the background drawing for the double spanned scrollbars.
+    * 
+    * This method can be used to get the state of drawing of the scrollbar 
+    * background via mop chain.
+    *
+    * @since    3.0
+    * @param    aDrawHorizontal gets the state of the background drawing of 
+    * 			the horizontal scrollbar.
+    * @param    aDrawVertical gets the state of the background drawing of 
+    * 			the vertical scrollbar.
+    * @return   Success of the call, KErrNotSupported if the scrollbars 
+    * 			are not doublespan scrollbars.
+    *
+    */
+	IMPORT_C TInt DrawBackgroundState(TBool& aDrawHorizontal, TBool& aDrawVertical);
+
+public:
+
+    /**
+     * Gets a pointer to the horizontal scroll bar.
+     * 
+     * @return A pointer to the horizontal scroll bar.
+     */         
+    CEikScrollBar* HorizontalScrollBar() const;
+    
+    /**
+     * Sets scrollbar observers.
+     *
+     * @param aObserver The scroll bar observer. 
+     */
+    MEikScrollBarObserver* ScrollBarFrameObserver();
+
+protected:
+    // Accessor methods
+
+    /**
+     * Sets parent window.
+     * 
+     * @param aParentWindow A pointer to the parent window.
+     */ 
+    void SetParentWindow(CCoeControl* aParentWindow);
+
+    /**
+     * Gets a pointer to the parent window.
+     *  
+     * @return A pointer to the parent window.
+     */ 
+    CCoeControl* ParentWindow() const;
+
+protected:
+   
+    /** Struct */ 
+    struct SBarData
+        {
+
+        /** Pointer to the @c CAknScrollBar class */
+        CAknScrollBar* iBar;
+
+        /** Enum @c TEikScrollBarModel */
+        TEikScrollBarModel iModel;
+
+        /** Enum @c TScrollBarVisibility. */
+        TScrollBarVisibility iVisibility;
+
+        /** Boolean value if external scroll bar is attached. */
+        TBool iExternalScrollBarAttached;
+        };
+
+private:
+
+    void CalcTheoreticalScrollBarVisibility(const TEikScrollBarModel* aVModel);
+    void ApplyModel(SBarData& aSBar);
+    void MakeSBarVisible(SBarData& aSBar, TBool aVisible);
+    void GetScrollBars(TBool aDoubleSpan);
+    CEikCba* GetCurrentCba();
+    void DeleteScrollBars();
+    void CreateArrowHeadScrollBarsL();
+
+    void CalcTheoreticalScrollBarVisibility(const TEikScrollBarModel* aVModel,
+                                            const TEikScrollBarModel* aHModel);
+
+protected:
+
+    /** Struct object.*/
+    SBarData iV;
+
+private:
+
+    CEikScrollBarFrameExtension* iExtension; 
+    TInt iScrollBarFrameFlags;
+
+    friend class CEikScrollBarFrameExtension;
+    };
+
+inline CEikScrollBarFrame::TScrollBarVisibility CEikScrollBarFrame::VScrollBarVisibility() const
+    { return iV.iVisibility; }
+inline void CEikScrollBarFrame::SetScrollBarFrameFlags(TInt aMask)
+    { iScrollBarFrameFlags|=aMask; }
+
+// Cba scroll bar frame (with it's own scrollbar creation methods)
+class CEikCbaScrollBarFrame : public CEikScrollBarFrame
+    {
+public:
+    CEikCbaScrollBarFrame(CCoeControl* aParentWindow, MEikScrollBarObserver* aObserver, TBool aPreAlloc=EFalse);
+    void ConstructL();
+    void SwitchToArrowHeadScrollBarL();  // @since 3.0
+    };
+
+#endif