inc/alf/alfrecyclinggridelement.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:18 +0100
branchRCL_3
changeset 26 0e9bb658ef58
parent 0 e83bab7cf002
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007 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:  The implementation for presentation elements.
*
*/


#ifndef ALF_RECYCLINGGRIDELEMENT_H
#define ALF_RECYCLINGGRIDELEMENT_H


//INCLUDES
#include <e32cmn.h> // TPoint
#include <osn/osndefines.h>
#include "alf/alfelement.h"
#include <alf/ialfwidgeteventhandler.h>

class CAlfControl;


namespace Alf
    {
class CAlfWidgetControl;
class AlfRecyclingGridElementImpl;

namespace alfrecyclinggridelement
    {
static const IfId Ident=
    {
    0,"alfrecyclinggridelement"
    };
    }

/** @class AlfRecyclingGridElement alfrecyclinggridelement.h "alf/alfrecyclinggridelement.h"
 * The implementation of a generic element with a functionality
 * for recyclign the created visual trees. This is commonly used
 * in scrolling list-like components, where only few of the items
 * are visible at the same time. Scrolling is supported in both
 * dimensions (rows / columns).
 *
 *  @interfaces IAlfElement
 *  @lib alfwidgetmodel.lib
 *  @since S60 ?S60_version
 *  @status Draft
 */
class AlfRecyclingGridElement : public AlfElement, public IAlfWidgetEventHandler
    {
public:
    static inline const IfId& type()
        {
        return alfrecyclinggridelement::Ident;
        }
    /**
     * Enumerations of the Fill Style
     */
    OSN_IMPORT enum FillStyle{EColumnsFirst, ERowsFirst};



    /**
     * Constructor.
	 * @exception std::bad_alloc     
     * @param aControl - Widget Control
     * @param aName    - Name of the Recycling grid element
     * @param aNumColumns - Number of Columns
     * @param aNumRows  - Number of Rows
     * @since S60 ?S60_version
     * @return New object. The widgets are owned by Alfred. The objects is pushed on to the cleanup stack
     */
    OSN_IMPORT AlfRecyclingGridElement(CAlfWidgetControl& aControl, const char* aName, int aNumColumns, int aNumRows);


    /** Class Destructor estructor.
    *
    *  @since S60 ?S60_version
    */
    OSN_IMPORT virtual ~AlfRecyclingGridElement();

    /**
     * Constructor.
     * @param aFillStyle - style to be used to fill the grid
     * @param aFillStyleParam -
     * @since S60 ?S60_version
     * @return New object. The widgets are owned by Alfred. The objects is pushed on to the cleanup stack
     */
    OSN_IMPORT void setFillStyle(FillStyle aFillStyle, int aFillStyleParam);
    /*
     * Sets the animation times for diferent visual changes
     * @param aScrollingTime - animation time while scrolling
     * @param aFadeInTime - amination time for fading in 
     * @param aFadeinDelay - a delay time after which fade in starts
     * @param aFadeOutTime - animation time for fading out
     * @param aFadeOutDelay - a delay time after which fade out will start
     */ 

    OSN_IMPORT void setAnimationTimes( int aScrollingTime,
                                       int aFadeInTime, int aFadeInDelay,
                                       int aFadeOutTime, int aFadeOutDelay );

    /**
     * Creates a visual tree with the data given for visuals.
     *
     * @exception std::bad_alloc 
     * @exception osncore::AlfVisualException Thrown with the error code osncore::ECanNotCreateVisual\n 
     *                                        when creation of visual fails.
     * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n 
     *                                        when wrond data id is supplied.
     * @exception std::bad_alloc     
     * @since S60 ?S60_version
     * @param aData Data for visual tree to be created
     * @param aDataID Parent visual tree's data id
     * @param aParentLayout Parent layout to which newly created visual tree will be added
     * @param aLayoutIndex Position in parent layout at which new visual tree will be added
     */

    OSN_IMPORT virtual CAlfVisual* createVisualTree(
        IAlfVariantType& aData, uint aDataID,
        CAlfLayout* aParentLayout, int aLayoutIndex );

    //Implementation of IAlfWidgetEventHandler

    /**
     * Used to identify event handlers that are capable of handling
     * a specified key or custom event. Pointer event handlers cannot be
     * identified directly, since they are dependent on the presentation.
     * Therefore, pointer event handlers should be associated with
     * a custom event ID that can be used to simulate the actual pointer event.
     *
     * @since S60 ?S60_version
     * @param aEvent The event.
     * @return <code>ETrue</code> if the event can be processed. Otherwise <code>EFalse</code>.
     */
    OSN_IMPORT virtual bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;

    /**
     * Called when an input event is being offered to this event handler.
     * The return value is used to indicate if the event was processed.
     * Processed events may not be offered to other event handlers.
     *
     * @since S60 ?S60_version
     * @param aControl The parent control of this event handler.
     * @param aEvent The event.
     * @return Result of event processing. See AlfEventStatus.
     */
   OSN_IMPORT AlfEventStatus offerEvent( CAlfWidgetControl& aControl,const TAlfEvent& aEvent );
   
    /**
     * @see MAlfWidgetEventHandler
     */
    OSN_IMPORT void setActiveStates( unsigned int aStates );
    
    /**
     * Sets AlfWidgetEventHandlerInitData to event handler.
     *
     * @param aData A data structure which contains for example id of the event
     * handler.
     */
    OSN_IMPORT void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );
    
    /**
     * Returns AlfWidgetEventHandlerInitData.
     *
     * @return  A pointer to AlfWidgetEventHandlerInitData structure which contains
     * for example id of the event handler.
     */
    OSN_IMPORT AlfWidgetEventHandlerInitData* eventHandlerData();

    /**
     * Returns the type of EventHandler. 
     * @see IAlfWidgetEventHandler::AlfEventHandlerType
     *
     * @return The type of event handler.
     */
    IAlfWidgetEventHandler::AlfEventHandlerType eventHandlerType();

    /**
     * Returns information about the phase in the event handling cycle in
     * which the event hadler will be executed.
     * @see IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
     *
     * @return Event handler execution phase.
     */
    IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase eventExecutionPhase();

    /**
     * From @see MAlfInterfaceBase.
     * @since S60 ?S60_version
     * @param aType The type of interface requested.
    * @return Returns the new Interface
     */
    OSN_IMPORT virtual  IAlfInterfaceBase* makeInterface( const IfId& aType );


    /**
     * Creates a visual tree with the data given for visuals.
     *
     * @exception std::bad_alloc 
     * @exception osncore::AlfVisualException Thrown with the error code osncore::ECanNotCreateVisual\n 
     *                                        when creation of visual fails.
     * @exception osncore::AlfVisualException Thrown with the error code osncore::EInvalidElement\n 
     *                                        when wrond data id is supplied.
     * @exception std::bad_alloc     
     * @since S60 ?S60_version
     * @param aData Data for visual tree to be created
     * @param aDataID Parent visual tree's data id
     * @param aParentLayout Parent layout to which newly created visual tree will be added
     * @param aLayoutIndex Position in parent layout at which new visual tree will be added
     */
    OSN_IMPORT virtual void createChildVisualTree( IAlfElement* aElement,
            IAlfVariantType& aChildData,
            IAlfBranch& aData,
            int aIndex, uint aDataID );
    /**
     * Removes visual tree from given element.
     *
     * @since S60 ?S60_version
     * @param aElement Element from which visual tree is to be removed
     * @param aData
     * @param aIndex 
     * @param aDataID 
     */
    OSN_IMPORT virtual void removeChildVisualTree( IAlfElement* aElement, IAlfBranch& aData, int aIndex, uint aDataID );

    /**
     * removes and destroys all the visuals.
     *
     * @param aTimeMilliseconds animation time for remove.
     */
    OSN_IMPORT void removeAndDestroyVisuals( int aTimeMilliseconds );

private:
    friend class AlfRecyclingGridElementImpl;
    auto_ptr<AlfRecyclingGridElementImpl> mImpl;
    };

    } // namespace

#endif // ALF_RECYCLINGGRIDELEMENT_H