diff -r 4ea6f81c838a -r 0e9bb658ef58 inc/alf/alfmodeloperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inc/alf/alfmodeloperation.h Wed Sep 01 12:23:18 2010 +0100 @@ -0,0 +1,210 @@ +/* +* Copyright (c) 2004 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: This interface defines a generic data type +* +*/ + + + + +#ifndef ALFMODELOPERATION_H +#define ALFMODELOPERATION_H + + +//INCLUDES +#include +#include + +using namespace osncore; + +namespace Alf + { + +/* Forward declarations*/ +class IAlfVariantType; + +/** @class AlfModelOperation alfmodeloperation.h "alf/alfmodeloperation.h" +* A class for storing information about changes in the model. +* CAlfModelOperation can be used to make changes in a batch mode, +* i.e., executing multiple changes in one call. +* @lib hitchcockwidgetmodel.lib +* @since S60 ?S60_version +* @status Draft +*/ +class AlfModelOperation + { +public: + + /** The operation constants. */ + enum OperationType{EOperationAdd, EOperationRemove, EOperationUpdate}; + + /** + * constructor. The new operation is left on the cleanup stack. + * + * @exception std::bad_alloc + * @since S60 ?S60_version + * @param aOperation The operation to be performed. + * @param aNumContainerIndices The number of indices in aContainerIndices. + * @param aContainerIndices The container indices to find the correct location + * in the data hierarchy. The ownership is transferred. + * @param aData The new data in EOperationAdd and EOperationUpdate operations. + * The ownership is transferred. + */ + OSN_IMPORT static AlfModelOperation* create( OperationType aOperation, + int aNumContainerIndices, + int* aContainerIndices, + IAlfVariantType* aData = 0 ); + + /** + * constructor for adding or updating a map item. + * The new operation is left on the cleanup stack. + * + * @exception std::bad_alloc + * @since S60 ?S60_version + * @param aOperation The operation to be performed. + * @param aNumContainerIndices The number of indices in aContainerIndices. + * @param aContainerIndices The container indices to find the correct location + * in the data hierarchy. The ownership is transferred. + * @param aData The new data. The ownership is transferred. + * @param aDataName The name of the new data in EOperationAdd and EOperationUpdate + * operations. Only needed when adding or updating a map item. + */ + OSN_IMPORT static AlfModelOperation* create( OperationType aOperation, + int aNumContainerIndices, + int* aContainerIndices, + IAlfVariantType* aData, + const UString& aDataName ); + + /** Destructor.*/ + OSN_IMPORT ~AlfModelOperation(); + + /** + * Get the name of the new data field in the container map. + * Panics if the operation is EOperationRemove. + * + * @exception osncore::AlfDataException Thrown with the error code osncore::EInvalidModelOperation\n + * when wrong operation is performed on Model. + * @return The new data. + * @since S60 ?S60_version + */ + OSN_IMPORT const UString& newDataName() const; + + /** + * Get the new data used in EOperationAdd or EOperationUpdate operations. + * Panics if the operation is EOperationRemove. + * + * @exception osncore::AlfDataException Thrown with the error code osncore::EInvalidModelOperation\n + * when wrong operation is performed on Model. + * @return The new data. + * @since S60 ?S60_version + */ + OSN_IMPORT IAlfVariantType& newData() const; + + /** + * Get the new data used in EOperationAdd or EOperationUpdate operations. + * Panics if the operation is EOperationRemove. + * The ownership of the data is transferred to the caller, + * and the data of this operation is set to NULL. + * + * @exception osncore::AlfDataException Thrown with the error code osncore::EInvalidModelOperation\n + * when wrong operation is performed on Model. + * @return The new data. + * @since S60 ?S60_version + */ + OSN_IMPORT IAlfVariantType* getNewData(); + + /** + * Get the Operation. + * + * @return The new data. + * @since S60 ?S60_version + */ + OSN_IMPORT AlfModelOperation::OperationType operation() const; + + /** + * Get the parent data for the operation. The parent data + * is a container for the data to be added, removed or updated. + * The index of the data can be queried using Index(). + * + * @exception osncore::AlfDataException Thrown with the error code osncore::EInvalidContainerOperation\n + * when wrong operation is performed on Model. + * @param aRoot The root of the data hierarchy to perform the operation. + * @return The parent data. + * @since S60 ?S60_version + */ + OSN_IMPORT IAlfVariantType* parentData(IAlfVariantType& aRoot ) const; + + /** + * Get the index of the data inside the parent container. + * The parent container can be queried using ParentData(). + * If the parent container is a branch, index 0 refers to + * the branch data, and index 1 refers to the child data. + * + * @return The new data. + * @since S60 ?S60_version + */ + OSN_IMPORT int index() const; + + /** + * Get the number of container indices to find the + * location in the data hierarchy. + * + * @return The number of container indices. + * @since S60 ?S60_version + */ + OSN_IMPORT int numContainerIndices() const; + + /** + * Get the container index to traverse through the data hierarchy. + * If the container in the hierarchy is a branch, index 0 refers to + * the branch data, and index 1 refers to the child data. + * + * @return The container index. + * @since S60 ?S60_version + */ + OSN_IMPORT int containerIndex( int aIndex ) const; + +private: + + AlfModelOperation( + OperationType aOperation, + int aNumContainerIndices, + int* aContainerIndices, + IAlfVariantType* aData = 0 ); + + AlfModelOperation( + OperationType aOperation, + int aNumContainerIndices, + int* aContainerIndices, + IAlfVariantType* aData, + const UString& aDataName ); + +private: // data + + // Target location in the data hierarchy + int mNumContainerIndices; + int* mContainerIndices; + + // The new data + IAlfVariantType* mData; + // The name of the new data, if adding or updating a map item + UString mDataName; + + // The operation to be performed + OperationType mOperation; + }; + + } // namespace Alf + +#endif // ALFMODELOPERATION_H