javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtslider.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:30:29 +0300
branchRCL_3
changeset 14 04becd199f91
permissions -rw-r--r--
Revision: v2.1.22 Kit: 201017

/*******************************************************************************
 * 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 SWTSLIDER_H
#define SWTSLIDER_H


#include "swtcontrolbase.h"


class CAORotateImage;
class MTouchFeedback;


/**
 * CSwtSlider
 * @lib eswt.dll
 */
NONSHARABLE_CLASS(CSwtSlider)
        : public CAknControl
        , public ASwtControlBase
        , public MSwtSlider
{
public:
    /**
    * The 1st and 2nd phase constructor wrapper.
    * @param aDisplay The Display to associate with.
    * @param aPeer The peer to its java counterpart.
    * @param aParent Parent composite.
    * @param aStyle The control's style.
    * @return CSwtSlider*  A pointer to the  created CSwtSlider object.
    */
    static CSwtSlider* NewL(MSwtDisplay& aDisplay, TSwtPeer aPeer,
    MSwtComposite& aParent, TInt aStyle);

private:
    /**
    * Contructor.
    * @param aDisplay The Display to associate with
    * @param aPeer The peer to its java counterpart
    * @param aParent Parent composite
    * @param aStyle The style
    */
    CSwtSlider(MSwtDisplay& aDisplay, TSwtPeer aPeer,
               MSwtComposite& aParent, TInt aStyle);

    /**
    * Destructor.
    */
    ~CSwtSlider();

    /**
    * Second phase constructor
    */
    void ConstructL();

private:
    /**
    * Adjust the current selection value with the maximun, minimun and iIncrement.
    */
    void AdjustSelectionValue();

    /**
    * Update the Slider image with the maximun, minimun and iIncrement.
    * Just call this method if one of this previous value changed,
    * because it reload the image, and compute the rotation if the
    * Slider have the VERTICAL Style and draw it.
    */
    void UpdateSliderImageL();

    /**
    * Clip the image with the rectangle of this Control and draw it.
    *
    * @param aGC    The graphic context where the image will be drawing.
    * @param aRect  The rectangle need to be redrawing to draw.
    *
    */
    void ClipAndDrawImage(CWindowGc& aGC, const TRect& aRect) const;

    /**
    * Creates the slider graphic. The graphic is recreated every time
    * the marker is moved. The input parameters are used to calculate
    * the position of the marker in the returned slider graphic.
    *
    * @param aValue     The current value of the slider.
    * @param aMinValue  The minimum value of the slider.
    * @param aMaxValue  The maximum value of the slider.
    * @return The slider graphic owned by the caller.
    */
    CGulIcon* CreateSliderIconL(TInt aValue, TInt aMinValue, TInt aMaxValue);

    /**
    * Determines the preferred size of the slider graphic for
    * the currently active screen resolution.
    *
    * @return The preferred size of the slider graphic.
    */
    TSize GetPreferredSliderSize() const;

    /**
     * Make sure the feedback area follows the control's bounds.
     */
    void UpdateTouchFeedbackRect() const;

    /**
     * Resource change leaving helper
     */
    void SwtHandleResourceChangeL(TInt aType);

#ifdef RD_SCALABLE_UI_V2
    TInt CalcAlignedValue(const TPoint& aPoint);
#endif // RD_SCALABLE_UI_V2

// From CCoeControl
public:
    TSize MinimumSize();
    void  MakeVisible(TBool aVisible);
    void  SetDimmed(TBool aDimmed);
    TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
    void  Draw(const TRect& aRect) const;
    void  HandleResourceChange(TInt aType);
protected:
    void  FocusChanged(TDrawNow aDrawNow);
    void  SizeChanged();
    void  PositionChanged();
    TTypeUid::Ptr MopSupplyObject(TTypeUid aId);

#ifdef RD_SCALABLE_UI_V2

    void  HandlePointerEventL(const TPointerEvent& aPointerEvent);

#endif // RD_SCALABLE_UI_V2

// From MSwtControl
public:
    CCoeControl& CoeControl();
    const CCoeControl& CoeControl() const;
    void  ProcessKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
    TSize ComputeSizeL(TInt aWHint, TInt aHHint);
    TBool SetSwtFocus(TInt aReason = KSwtFocusByApi);

// From MSwtSlider
public:
    MSwtControl* Control();
    TInt GetMaximum() const;
    TInt GetMinimum() const;
    TInt GetPageIncrement() const;
    TInt GetIncrement() const;
    TInt GetSelection() const;
    void SetMaximum(TInt aValue);
    void SetMinimum(TInt aValue);
    void SetPageIncrement(TInt aValue);
    void SetIncrement(TInt aValue);
    void SetSelection(TInt aValue);
    void SetValues(TInt aSelection, TInt aMinimum, TInt aMaximum,
                   TInt aIncrement, TInt aPageIncrement);

// Data
private:
    /**
     *  The minimum value for the Slider.
     */
    TInt iMinimum;

    /**
     *  The maximun value for the Slider.
     */
    TInt iMaximum;

    /**
     *  The current selection on the Slider.
     */
    TInt iSelection;

    /**
     *  The increment value for the Slider.
     */
    TInt iIncrement;

    /**
     *  The page increment value for the Slider.
     */
    TInt iPageIncrement;

    /**
     *  Contains the key value which increase the selection.
     */
    TInt iIncreaseKey;

    /**
     *  Contains the key value which decrease the selection.
     */
    TInt iDecreaseKey;

    /**
     *  The image of the Slider.
     */
    CFbsBitmap* iSliderImage;

    /**
     *  The mask for image of the Slider.
     */
    CFbsBitmap* iSliderImageMask;

    /**
     *  The active object which rotate the VERTICAL Slider image.
     */
    CAORotateImage* iImagesRotator;

    /**
     *  The image Size in pixel.
     */
    TSize iImageSize;

    /**
     * Feedback instance.
     * Not own.
     */
    MTouchFeedback* iFeedback;
};


#endif // SWTSLIDER_H