menufw/hierarchynavigator/hnmetadatamodel/inc/hnmditem.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:49 +0200
changeset 0 f72a12da539e
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-2008 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: 
*
*/



#ifndef C_HNMDITEM_H
#define C_HNMDITEM_H

#include <e32base.h>

#include "hnmdmodel.h"
#include "hnmdeventmapping.h"
#include "hnqueryresultcollector.h"

class CHnMdQuery;
class CHnMdButton;
class CHnMdQueries;
class CHnMdNotifyRequests;
class CHnSuiteModel;
class CLiwGenericParamList;
class CLiwDefaultMap;
class THnIdGenerator;
class CHnFilter;
class CHnMdUiMapping;
class CHnMdMenuItem;
class CHnItemId;
class CHnMdSuite;
class CHnXmlModelProvider;
class CHnItemModel;
class CHnMenuItemModel;
class CHnActionModel;
class CHnMdToolbar;
struct THnMdCommonPointers;
class CHnConditionInterface;

/**
 * Item.
 *
 * This is the item's class. Each item (or items' group -
 * the count attribute has a value greater then 1) is represented
 * by an object of the CHnMdItem class.
 *
 * This class comprises different classes which are responsible for
 * conditions, queries, notifications (refreshing), etc.
 *
 * @lib hnmetadatamodel
 * @since S60 v5.0
 * @ingroup group_hnmetadatamodel
 */
NONSHARABLE_CLASS(CHnMdItem) : public CBase,
    public MHnQueryResultCollectorNotification
    {
public:

    /**
     * Standard factory method.
     *
     * since S60 v5.0
     * @param aElement Xml element.
     * @param aCmnPtrs Common pointers container.
     * @return Fully constructed object.
     */
    static CHnMdItem* NewL( TXmlEngElement aElement,
                                      THnMdCommonPointers* aCmnPtrs );

    /**
     * Standard factory method.
     *
     * since S60 v5.0
     * @param aElement Xml element.
     * @param aCmnPtrs Common pointers container.
     * @return Fully constructed object.
     */
    static CHnMdItem* NewLC( TXmlEngElement aElement,
                                       THnMdCommonPointers* aCmnPtrs );

    /**
     * Default destructor.
     */
    virtual ~CHnMdItem();

    /**
     * Updates an item.
     *
     * @param aGraphicalList A graphical list.
     * @param aId Item's identifier.
     * @param aResultMap A results map.
     * @return An error code.
     */
    void UpdateItemL( CHnSuiteModel* aGraphicalList, TInt aId,
            RHashMap< HBufC*, CLiwGenericParamList*>& aResultMap );
    /**
     * Compares entries.
     *
     * @param aSearchCriteria Search critieria item id.
     * @return True if this item matches aSearchCriteria.
     */
    TBool CompareItems( CHnItemId* aSearchCriteria );

    /**
     * Evaluates an item.
     *
     * @since S60 v3.2
     * @param aSuiteModel A suite's model.
     * @param aParamList Paramters of the evaluation.
     * @param aItemPosition A position of an item in the aParamList.
     */
    void EvaluateItemL( CHnSuiteModel & aSuiteModel,
                        CLiwGenericParamList& aParamList,
                        TInt aItemPosition );

    /**
     * Marks according to filter which item should be evaluated.
     *
     * @since S60 5.0
     * @param aFilter Filter.
     */
    void MarkEvaluationL( CHnFilter& aFilter );

    /**
     * Sets template.
     *
     * @param aOption Option - an identifier of alternative template bo be set.
     */
    void SetAlternativeTemplateL( TInt aOption );

    /**
     * Sets edit mode version of the item.
     *
     * @param aEditModeItem Edit mode item.
     * @return Meta data model of the edit mode version.
     */
    void SetAlternativeModeItem(CHnMdItem* aEditModeItem);

    /**
     * Sets edit mode version of the item.
     * Transfers ownership.
     *
     * @return Meta data model of the edit mode version.
     */
    CHnMdItem* TakeAlternativeModeItem();

     /**
      * Checks if mode version of the item is present.
      *
      * @return True if an item has an alternative model to be set.
      */
     TBool HasAlternativeModeItem() const;

     /**
      * Template property getter.
      *
      * @return The name of the template.
      */
     IMPORT_C TDesC8& Template();

     /**
      * Type property getter.
      *
      * @return Type of an item.
      */
     IMPORT_C TDesC8& Type();
     
     /**
      * Type property getter.
      *
      * @return Type of an item.
      */
     IMPORT_C TDesC8& Uid();

     // from queries collector
     /**
      * Triggered when results have been collected.
      *
      * @param aResults Results.
      */
     virtual void ResultsCollectedL( CLiwGenericParamList* aResults );

private:

    /**
     * Sets edit mode item.
     *
     * @param aElement Xml element.
     */
    void SetEditModeItemL( TXmlEngElement aElement );

    /**
     * Sets count.
     *
     * @param aElement Xml element.
     */
    void SetCountL( TXmlEngElement aElement );

    /**
     * Sets template.
     *
     * @param aAttr Xml attribute.
     */
    void SetTemplateL( TXmlEngAttr aAttr );

    /**
     * Sets queries.
     *
     * @param aElement Xml element.
     */
    void SetQueriesL( TXmlEngElement aElement );

    /**
     * Sets item id.
     *
     * @param aItemElement Xml element.
     */
    void SetItemIdL( TXmlEngElement aItemElement );

    /**
     * Sets item id.
     *
     * @param aAttrFileName Xml attribute - file name.
     * @param aId Xml attribute - item's identifier.
     */
    void SetItemId2L( TXmlEngAttr aAttrFileName, TXmlEngAttr aId );

    /**
     * Evaluates item.
     *
     * @param aSuiteModel A model of the suite.
     * @param aItemId Item's id.
     * @param aParamList Parameters of the evaluation in the form of the CLiwGenericParamList.
     * @param aItemPosition A position of the record of the parameters list.
     * @return Error code.
     */
    TInt EvaluateItemL( CHnSuiteModel & aSuiteModel,
            const CHnItemId* aItemId, CLiwGenericParamList& aParamList,
            TInt aItemPosition );

    /**
     * Evaluates item.
     *
     * @param aSuiteModel A model of the suite.
     * @param aParamList Parameters of the evaluation in the form of the CLiwGenericParamList.
     * @param aItemPosition A position of the record of the parameters list.
     */
    void EvaluateItemItselfL( CHnSuiteModel & aSuiteModel,
            CLiwGenericParamList& aParamList, TInt aItemPosition );

    /**
     * Sets template attribute on item model.
     *
     * @param aItemModel Item's model.
     */
    void SetTemplateL( CHnItemModel* aItemModel );

    /**
     * Mode.
     *
     * @returns Mode of an item, e.g. normal / edit mode.
     */
    TMdMode Mode();
    
    /**
     * Retrieves values from outputs containing the [$index] string.
     * 
     * @param aValues Array containing found strings.
     * @param aElement The xml element.
     * @return Number of found strings.
     */
    TInt GetIndexValuesFromOutputsL( RPointerArray<HBufC8> &aValues, TXmlEngElement aElement );

private:

    /**
     * Standard constructor.
     */
    CHnMdItem();

    /**
     * EPOC default constructor for performing 2nd stage construction.
     *
    * @param aElement Xml element.
    * @param aCmnPtrs Common pointers containter.
     */
    void ConstructL( TXmlEngElement aElement,THnMdCommonPointers* aCmnPtrs );

    /**
     * Fills item model with data.
     *
     * @param aItemModel Model to be filled.
     * @param aQueriesResultsList Parameters of in the form of the CLiwGenericParamList.
     * @param aPosition A position of the record in the parameters list.
     * @return True if filling finihed with success.
     */
    TBool FillItemModelL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueriesResultsList,
            TInt aPosition );

    /**
     * Fills item model with menu items created from meta data model.
     *
     * @param aItemModel Model to be filled.
     * @param aQueriesResultsList Parameters of in the form of the CLiwGenericParamList.
     * @param aPos A position of the record in the parameters list.
     */
    void FillItemModelWithMenuItemsL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueriesResultsList, TInt aPos = 0 );

    /**
     * Fills item model with toolbar created from meta data model.
     *
     * @param aItemModel Model to be filled.
     * @param aQueriesResultsList Parameters of in the form of the CLiwGenericParamList.
     * @param aPos A position of the record in the parameters list.
     */
    void FillItemModelWithToolbarL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueriesResultsList, TInt aPos = 0 );

    /**
     * Fills item model with MSK created from meta data model.
     *
     * @param aItemModel Model to be filled.
     * @param aQueriesResultsList Parameters of in the form of the CLiwGenericParamList.
     * @param aPos A position of the record in the parameters list.
     */
    void FillItemModelWithMiddleSoftKeyL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueriesResultsList, TInt aPos = 0 );

    /**
     * Fills menu model with data from mdmenuitem.
     *
     * @param aSuiteModel Suite's model.
     * @param aItemId Item's identifier.
     * @param aQueriesResultsList Queries results in form of the CLiwGenericParamList.
     * @param aItemModelNumber Item's model number.
     * @param aItemPos Position of an item in the queries results list.
     * @return KErrNone if an item was successfully added.
     */
    TInt AddItemL( CHnSuiteModel & aSuiteModel, TInt aItemId,
            const CLiwGenericParamList& aQueriesResultsList,
            TInt aItemModelNumber,
            TInt aItemPos );

    /**
     * Fills menu model with data from mdmenuitem.
     *
     * @param aSuiteModel Suite's model.
     * @param aItemId Item's identifier.
     * @param aQueriesResultsList Queries results in form of the CLiwGenericParamList.
     * @param aItemPos Position of an item in the queries results list.
     * @return KErrNone if an item was successfully updated.
     */
    TInt UpdateItemL( CHnSuiteModel & aSuiteModel, TInt aItemId,
            const CLiwGenericParamList& aQueriesResultsList, TInt aItemPos );

    /**
     * Fills menu model with data from mdmenuitem.
     *
     * @param aSuiteModel Suite's model.
     * @param aId Items identifier.
     */
    void RemoveItemL( CHnSuiteModel & aSuiteModel, TInt aId );

    /**
     * Sets move/remove locked attribute.
     *
     * @param aElement Xml item element.
     */
    void SetAttributesL( TXmlEngElement aElement );

    /**
     * Sets item type string.
     *
     * @param aElement Xml item element.
     */
    void SetTypeL( TXmlEngElement aElement );
    
    /**
     * Sets uid string.
     *
     * @param aElement Xml item element.
     */
    void SetUidL( TXmlEngElement aElement );

    /**
     * Sets delete / move locked attributes.
     *
     * @param aItemModel Model to be filled.
     * @param aQueriesResultsList Parameters of in the form of the CLiwGenericParamList.
     * @param aPos A position of the record in the parameters list.
     */
    void SetDeleteMoveAttributesL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueriesResultsList, TInt aPos );


    /**
     * Sets custom id.
     *
     * @param aElement Xml item element.
     */
    void SetCustomIdL( TXmlEngElement aElement );

    /**
     * Sets middle soft key.
     *
     * @param aElement Xml item element.
     * @param aCmnPtrs Common pointers.
     */
    void SetMiddleSoftKeyL( TXmlEngElement aElement,
            THnMdCommonPointers* aCmnPtrs );

    /**
     * Checks if an item is valid (the condition returns true).
     *
     * @param aQueryResults Query results.
     * @param aPos Position of the item in the results list.
     * @return ETrue or EFalse dependeing on whether the item is valid.
     */
    TBool IsValidL( const CLiwGenericParamList& aQueryResults, TInt aPos );

    /**
     * Sets the evaluated remove lock to the item model.
     *
     * @param aQueryResults Query results.
     * @param aPos Position of the item in the results list.
     * @param aItemModel Item model to set custom id on.
     */
    void SetRemoveLockedL( const CLiwGenericParamList& aQueryResults,
            TInt aPos, CHnItemModel* aItemModel );

    /**
     * Sets the evaluated move lock to the item model.
     *
     * @param aQueryResults Query results.
     * @param aPos Position of the item in the results list.
     * @param aItemModel Item model to set custom id on.
     */
    void SetMoveLockedL( const CLiwGenericParamList& aQueryResults,
            TInt aPos, CHnItemModel* aItemModel );

    /**
     * Sets the evaluated type to the item model.
     *
     * @param aQueryResults Query results.
     * @param aPos Position of the item in the results list.
     * @param aItemModel Item model to set custom id on.
     */
    void SetTypeL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueryResults, TInt aPos );
    
    /**
     * Sets the uid to the item model.
     *
     * @param aQueryResults Query results.
     * @param aPos Position of the item in the results list.
     * @param aItemModel Item model to set custom id on.
     */
    void SetUidL( CHnItemModel* aItemModel,
            const CLiwGenericParamList& aQueryResults, TInt aPos );

    /**
     * Sets custom id.
     *
     * @param aItemModel Model to be filled.
     * @param aParams Parameters of in the form of the CLiwGenericParamList.
     * @param aPos A position of the record in the parameters list.
     */
    void SetCustomIdL( CHnItemModel* aItemModel,
          const CLiwGenericParamList& aParams, TInt aPos );

    /**
     * Returns the maximum possible number of items.
     *
     * @return Maximum number of items.
     */
    TInt GetItemsMaxCountL();

private: // data

    /**
     * Own - edit mode version of the item.
     * However TakeAlternativeModeItem transfers ownership.
     */
    CHnMdItem *iAlternativeModeItem;

    /**
     * Count.
     */
    RBuf8 iCount8;

    /**
     * Template.
     */
    RBuf8 iTemplate;

    /**
     * Own - List of allowable widget types.
     */
    CDesC8Array * iAllowableTemplate;

    /**
     * Item id.
     */
    CHnItemId* iItemId;

    /**
     * Queries.
     */
    CHnMdQueries* iQueries;

    /**
     * Notify Requests.
     */
    CHnMdNotifyRequests* iNotifyRequests;

    /**
     * Event mapping.
     */
    CHnMdEventMapping* iEventMapping;

    /**
     * UI mapping.
     */
    CHnMdUiMapping* iUiMapping;

    /**
     * Menu item.
     */
    CHnMdMenuItem* iMenu;

    /**
     * Toolbar.
     */
    CHnMdToolbar* iToolbar;

    /**
     * Middle soft key button.
     */
    CHnMdButton* iMsk;

    /**
     * Delete locked indicator
     */
    RBuf8 iRemoveLocked8;

    /**
     * MoveLocked indicator.
     */
    RBuf8 iMoveLocked8;

    /**
     * Type of an item.
     */
    RBuf8 iType8;
    
    /**
     * Uid of the item.
     */
    RBuf8 iUid8;

    /**
     * Custom identifier.
     */
    RBuf8 iCustomId8;

    /**
     * Common pointers.
     */
    THnMdCommonPointers* iCmnPtrs;

    /**
     * Mode.
     */
    TMdMode iMode;

    /**
     * Query results list.
     *  Own - queries results.
     */
    CLiwGenericParamList* iQueriesResultsList;

    /**
     * Query collector.
     * Own.
     */
    CHnQueryResultCollector* iQc;

    /**
     * Suite model.
     * Not own - suite model.
     */
    CHnSuiteModel* iSuiteModel;

    /**
     * Position of item.
     * Own - item's positions.
     */
    TInt iItemPosition;

    /**
     * Own - condition.
     */
    CHnConditionInterface* iCondition;

    /**
     * Running indicator.
     */
    RBuf8 iRunning8;
    
    /**
     * DRM protection indicator.
     */
    RBuf8 iDrmProtection8;

public:
    /**
     * Marks if evaulation should take place.
     */
    TBool iEvaluationNeeded;

    };

#endif // C_HNMMITEM_H