diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlinc/AknDoubleSpanScrollIndicator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlinc/AknDoubleSpanScrollIndicator.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,381 @@ +/* +* 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 "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: Indicator for double span scroll bar. +* +*/ + +#ifndef __AKNDOUBLESPANSCROLLINDICATOR_H +#define __AKNDOUBLESPANSCROLLINDICATOR_H + +#include +#include "eikscrlb.h" + +#include "AknDoubleSpanScrollIndicatorItem.h" + +class CAknDoubleSpanScrollIndicatorBGExtension; + +NONSHARABLE_CLASS( TBitmapFx ) + { +public: + struct TRGB + { + TInt iR; + TInt iG; + TInt iB; + }; + struct THSL + { + TInt iH; + TInt iS; + TInt iL; + }; + + static void PixelEffect( TUint16* aPixelData ); + static TInt HueToRGB( TInt v1, TInt v2, TInt aH ); + }; + +NONSHARABLE_CLASS(CAknDoubleSpanScrollIndicator) : public CCoeControl + { +public: // public construction and destruction methods + + /** + * Two-phased constructor. + * + * @since 2.6 + * @return Newly constructed object. + */ + static CAknDoubleSpanScrollIndicator* NewL(CEikScrollBar::TOrientation aOrientation); + + /** + * Destructor. + * + * @since 2.6 + */ + ~CAknDoubleSpanScrollIndicator(); + +public: // new methods + + /** + * Sets values for the indicator. + * + * @since 2.6 + * @param aScrollSpan Size of the scrolled list. + * @param aFocusPosition Position of the current field in the list. + * @param aWindowSize Size of the visible part of the list. + * @param aFieldPosition Size of the current field. (Optional double span) + * @param aFieldSize Position inside the current field. (Optional double span) + * + */ + void SetIndicatorValues(TInt aScrollSpan, TInt aFocusPosition, TInt aWindowSize, TInt aFieldPosition, TInt aFieldSize); + + /** + * Gets a value from the indicator. + * + * @since 2.6 + * @return Size of the scrolled list. + * + */ + TInt ScrollSpan(); + + /** + * Gets a value from the indicator. + * + * @since 2.6 + * @return Position of the current field in the list. + * + */ + TInt FocusPosition(); + + /** + * Gets a value from the indicator. + * + * @since 2.6 + * @return Size of the visible part of the list. + * + */ + TInt WindowSize(); + + /** + * Gets a value from the indicator. + * + * @since 2.6 + * @return Size of the current field. (Optional double span) + * + */ + TInt FieldPosition(); + + /** + * Gets a value from the indicator. + * + * @since 2.6 + * @return Position inside the current field. (Optional double span) + * + */ + TInt FieldSize(); + + /** + * Sets flag which tells wheter indicator should assume transparent background + * instead of drawing a background from skin system. + * + * @since 2.6 + * @param aTransparentBackground If ETrue, then indicator does not try to + * draw background. Otherwise background is + * drawn normally. + */ + void SetTransparentBackground(TBool aTransparentBackground); + + /** + * Gets flag which tells wheter indicator should assume transparent background + * instead of drawing a background from skin system. + * + * @since 2.6 + * @retrun If ETrue, then indicator does not try to + * draw background. Otherwise background is drawn normally. + */ + TBool TransparentBackground(); + + /** + * Gets the width of the indicator graphics. + * + * @since 2.8 + * @return Width of the indicator. + * + */ + TInt IndicatorWidth(); + + /** + * @since 3.1 + * TInt aOwnsWindow is zero if non-window, else window owning + */ + void SetAsWindowOwning(TBool aOwnsWindow); + +private: // methods from CCoeControl + void Draw(const TRect& aRect) const; + void SizeChanged(); +public: + void HandleResourceChange(TInt aType); + + /** + * Is the scrollbar drawing its background from background context + * or are the scrollbar graphics drawn on top of current graphics on display + * + * @since 3.0 + * @return The background drawing state + * + */ + TBool DrawBackgroundState(); + + /** + * Set the background drawing of the scrollbar. If ETrue, scrollbar draws + * background from background context. + * + * @since 3.0 + * @param aDraw If ETrue, background is drawn, otherwise drawing is skipped + */ + void SetDrawBackgroundState(TBool aDraw); + + /** + * Get the current calculated thumb (handle) span in pixels. + * + * @since 5.0 + * @return The thumb span in pixels + */ + TInt GetCurrentThumbSpanInPixels(); + + /** + * Get the current calculated thumb (handle) position in pixels + * relative to the iTl of the scrollbar's shaft. + * + * @since 5.0 + * @return The thumb position in pixels + */ + TInt GetCurrentThumbPositionInPixels(); + + /** + * Sets the handle drag highlight. + * + * @since 5.0 + * @param aHandleHighlight If ETrue, turn the handle highlight on. + */ + void SetHandleHighlight( TBool aHandleHighlight ); + + /** + * Gets the status of the handle drag highlight. + * + * @since 5.0 + * @return ETrue, if the handle highlight is on. + */ + TBool HandleHighlight() const; + + /** + * Sets the touch area control. + * + * @since 5.0 + * @param aTouchAreaControl A pointer to the control which is drawn + * along with this indicator. + */ + void SetTouchAreaControl( CCoeControl* aTouchAreaControl ); + + /** + * Sets the background drag highlight. + * + * @since 5.0 + * @param aHandleHighlight If ETrue, turn the handle highlight on. + */ + void SetBackgroudHighlight( TBool aBackgroudHighlight ); + + /** + * Gets the status of the background drag highlight. + * + * @since 5.0 + * @return ETrue, if the handle highlight is on. + */ + TBool BackgroudHighlight() const; + +private: // new methods + + /** + * C++ default constructor. + * + * @since 2.6 + */ + CAknDoubleSpanScrollIndicator(); + + /** + * By default Symbian 2nd phase constructor is private. + * + * @since 2.6 + */ + void ConstructL(CEikScrollBar::TOrientation aOrientation); + + /** + * Checks and if needed modifies values for drawing. + * + * @since 2.6 + * @param aScrollSpan Size of the scrolled list. + * @param aFocusPosition Position of the current field in the list. + * @param aWindowSize Size of the visible part of the list. + * @param aFieldPosition Size of the current field. (Optional double span) + * @param aFieldSize Position inside the current field. (Optional double span) + * + */ + void CheckValues(TInt& aScrollSpan, TInt& aFocusPosition, TInt& aWindowSize, TInt& aFieldPosition, TInt& aFieldSize) const; + + /** + * Calculates rects for different indicator parts to be used in drawing phase. + * + * @since 2.6 + */ + void CalculateRects(); + + /** + * Creates items (that contain the bitmaps) for the scrollbar. + * + * @since 2.6 + */ + void CreateScrollBarItemsL(); + + TInt ScrollHandleMaxVisibleSizeInPixels(); + TInt HandleBackgroundMinSizeInPixels(); + TInt HandleMinSizeInPixels(); + + /** + * Handles background drawing + * + * @since 3.1 + * + */ + void DrawBackground() const; + + /** + * Handles background bitmap creation for window owning scrollbar + * + * @since 3.1 + * + */ + void CreateBackgroundBitmapL(); + + /** + * Layout scrollbar handle + * + * @since 3.1 + * + */ + void LayoutHandleGraphics(); + + /** + * Used for highlighting handle skin graphics. Takes a bitmap, creates + * a copy and optionally applies an effect for the pixels in the + * bitmap. Returns the new bitmap, so caller must take ownership. + * Note that the effect only works for EColor64K bitmaps. + * + * @since 5.0 + * @param aSource The source bitmap. + * @param aCopyOnly If ETrue, doesn't apply effect. + * @return The new bitmap. + */ + CFbsBitmap* CopyAndApplyEffectL( const CFbsBitmap* aSource, TBool aCopyOnly = EFalse ); + + CAknDoubleSpanScrollIndicatorItem* LoadScrollIndicatorItemL( + const TAknsItemID &aTopId, + const TAknsItemID &aMidId, + const TAknsItemID &aBottomId); + + void DrawTiled( + CWindowGc& aGc, const TRect& aRect, + CAknDoubleSpanScrollIndicatorItem *aIndicatorItem) const; + + void UpdateScrollBarLayout(); + +private: // data + TInt iScrollSpan; // Size of the scrolled list. + TInt iFocusPosition; // Position of the current field in the list. + TInt iWindowSize; // Size of the visible part of the list. + TInt iFieldPosition; // Size of the current field. (Optional double span) + TInt iFieldSize; // Position inside the current field. (Optional double span) + TBool iOwnsWindow; // Is window owning + TInt iSpare; + + TRect iBackgroundRect; // Rect for scrollbar background. + TRect iHandleBackgroundRect; // Rect for scrollbar handle background. + TRect iHandleRect; // Rect for scrollbar handle. + + TBool iTransparentBackground; // A flag which tells if we have transparent bg + TBool iDrawBackground; // do we draw any background + + TBool iHandleHighlight; // is handle drag highlight on? + + TBool iBackgroundHighlight; //is background highlight on? + + + mutable TBool iDrawBackgroundBitmap; // do we draw the background to the background bitmap before it is drawn + TRect iOldRect; // the old scb retangle, to optimize unneccessary resizing + + CEikScrollBar::TOrientation iOrientation; // Vertical or horizontal scrollbar + + CAknDoubleSpanScrollIndicatorItem* iBackgroundBar; + CAknDoubleSpanScrollIndicatorItem* iHighlightBackgroundBar; + CAknDoubleSpanScrollIndicatorItem* iHandleBar; + CAknDoubleSpanScrollIndicatorItem* iHighlightHandleBar; + + + TInt iHeadItemSize; + TInt iMidItemSize; + TInt iTailItemSize; + + CCoeControl* iTouchAreaControl; // Not own. + }; + +#endif +