--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/alf/alfmodeloperation.h Thu Dec 17 08:56:02 2009 +0200
@@ -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 <osn/osndefines.h>
+#include <osn/ustring.h>
+
+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