mulwidgets/muldatamodel/inc/mulcachemanager.h
branchRCL_3
changeset 26 0e9bb658ef58
parent 0 e83bab7cf002
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulcachemanager.h	Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,355 @@
+/*
+* 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:  Cache Manager class
+*
+*/
+
+
+#ifndef MULCACHEMANAGER_H
+#define MULCACHEMANAGER_H
+
+#include <mul/mulvisualitem.h>
+
+#include <memory>
+#include <vector>
+#include <map>
+
+#include <mul/imulwidgetdef.h>
+#include <mul/muldatapath.h>
+
+#include "multree.h"
+#include "mulvectoradaptor.h"
+
+namespace osncore
+    {
+    class UString;  
+    }
+using namespace osncore;
+
+namespace Alf
+	{
+
+//Forward Declaration
+class MulVisualItem;
+class IAlfMap;
+class IAlfContainer;
+
+/**
+ *  Implementation class for Cache Manager.
+ *  @lib 
+ */
+
+class MulCacheManager
+    {
+public: //structure
+
+	/**
+	 * Comparation structure
+	 * Required by stl map to compare MulDataPath
+	 */
+	struct TCompPath
+	{
+	  bool operator()( MulDataPath& path1, MulDataPath& path2 ) const
+	  {
+	  return ( path1 < path2 ) ;
+	  }
+	};
+	
+	typedef std::map< int,MulVisualItem* > MulVisualItemMap;
+	typedef std::map< int, int > MulSelectionMap;
+
+public: //Constructor and destructor
+    
+    /**
+     * C++ constructor.
+     */
+     MulCacheManager();
+     
+     /**
+ 	 * Destructor.
+ 	 */
+	~MulCacheManager();
+	
+public: //New method	
+	
+	/**
+	 * Create Node for visual items in tree. 
+	 * this function must be called before adding VisualItem
+	 * 
+	 * @param aStartIndex Index of first item.
+	 * @param aCount Number of items to be added.
+	 * @param aPath
+	 */
+	void CreateNodes(int aStartIndex, int aCount, const MulDataPath& aPath );
+	
+	/**
+     * Adds Visual Item in CacheManager.
+     * 
+     * @param aVisualItem Visual items to be added.
+     * @param aItemIndex Index where item need to be added
+     * 
+     * @return index where item is added
+     */ 
+	//void AddVisualItem( std::auto_ptr<MulVisualItem> aVisualItem, int aItemIndex );
+	
+	/**
+	 * Add Visual Item to cache manager
+	 * 
+	 * @param aVisualItem  Visual item to be added
+	 * @param aPath Path of visual item in  tree
+	 * @param aIndex Index of visual item in path
+	 */
+	void AddVisualItem( std::auto_ptr<MulVisualItem> aVisualItem, const MulDataPath& aPath , int aIndex );
+	
+	/**
+     * Removes Visual Item in CacheManager.
+     * 
+     * @param aIndex index of item to be removed.
+     * 
+     * @throws invalid_argument exception
+     */ 
+	
+	void RemoveVisualItem( int aIndex  );
+	
+	/**
+	 * Remove Visual Item from cache manager
+	 * 
+	 * @param aPath Path of visual item in  tree
+	 * @param aIndex Index of visual item in path
+	 */
+	void RemoveVisualItem( const MulDataPath& aPath , int aIndex );
+	
+	
+	/**
+	 * Remove Visual item form cache manager
+	 *
+	 * @param aIndex Start index of item to delete
+	 * @param aCount No of items to be removed
+	 * @param aPath Path from items to be removed
+	 */
+	void RemoveVisualItem(int aIndex, int aCount, const MulDataPath& aPath);
+	
+	/**
+     * Updates Visual Item in CacheManager.
+     * 
+     * @param aVisualItem Visual items to be updated.
+     * @param aItemIndex Index where item need to be added
+     * @throws invalid_argument exception
+     */ 
+	
+	void UpdateVisualItem( MulVisualItem& aVisualItem, int aItemIndex );
+	
+	
+	/**
+     * Updates Visual Item in CacheManager.
+     * 
+     * @param aVisualItem Visual items to be updated.
+     * @param aPath Path of visual item in tree
+     * @param aIndex Index of visual item in path
+     * @throws invalid_argument exception
+     */ 
+	void UpdateVisualItem( MulVisualItem& aVisualItem, const MulDataPath& aPath, int aIndex );
+		
+	/**
+     * Returns Visual Items to Model from CacheManager.
+     * 
+     * @param aIndex  Index of item to be retrieved.
+     */
+	
+	MulVisualItem* Data( int aIndex ) const;
+	
+	/**
+     * Returns Visual Items to Model from CacheManager.
+     * 
+     * @param aPath Path of visual item in tree
+     * @param aIndex Index of visual item in path
+     */
+	MulVisualItem* Data( const MulDataPath& aPath, int aIndex ) const;
+	
+	/**
+     * Gets Number Of items stored in the Cache Manager .
+     * 
+     * @return number of items in the Cache Manager
+     */
+	int Count() const;
+	
+	/**
+     * Get Number of items in mentiond path
+     * 
+     * @param aPath Path of node
+     * @return number of items 
+     */
+	//int Count( const MulDataPath& aPath ) const;
+	
+	/**
+     * Get Number of childs for the given node
+     * 
+     * @param aPath Path of node
+     * @return number of items 
+     */
+	//int ChildCount( const MulDataPath& aPath ) const;	
+	
+	/**
+	 * Retrun number of items,
+	 * Checks that node is expanded or not , 
+	 * if expanded then add it couts child count else ignore child count.
+	 * 
+	 * @return Node count
+	 */
+	int ExpandedNodeCount( ) const;
+	
+	/**
+	 * Return path of node of specified absoulte index
+	 * 
+	 * @param aAbsoluteIndex Absoulte index of node in tree
+	 * @return Path to node.
+	 */
+	//MulDataPath Path( int aAbsoluteIndex ) const;
+	
+	/**
+	 * Expand Node with given absolute index
+	 * This Api will be called by widget to expand node.
+	 * 
+	 * @param aAbsoluteIndex Absolute index of node to be expanded
+	 * @return Number of items affected
+	 */
+	//int ExpandNode( int aAbsoluteIndex );
+	
+	
+	/**
+	 * Returns absolute index
+	 * 
+	 * @param aPath Path to node
+	 * @param aIndex index of node in path
+	 * @return Absolute index
+	 */
+	//int PathToAbsoluteIndex( const MulDataPath& aPath, int aIndex ) const;
+	
+	/**
+	 * Mark or Unmark item
+	 * 
+	 * @param aType Marking type
+	 * @param aItemsIndex vector of index of items
+	 * @param aPath Path/depth at wich items are to be marked/unmark
+	 */
+	void SetMarkedIndices( MulWidgetDef::TMulWidgetMarkingType aType ,
+						   const std::vector<int>& aItemsIndex,
+						   const MulDataPath& aPath );
+
+	/**
+	 * Mark or Unmark or unmark all type
+	 * 
+	 * @param aType Marking type
+	 */
+	void SetMarkedIndices( MulWidgetDef::TMulWidgetMarkingType aType = MulWidgetDef::EMulMarkAll );
+
+	/**
+	 * Return mared index for mentioned path
+	 * 
+	 * @param aPath Path
+	 * @return vector of index
+	 */
+	const std::vector<int>& MarkedIndices( const MulDataPath& aPath ) ;
+
+	/**
+	* Check weather item at specified index is marked or not.
+	* 
+	* @param aIndex Absolute index of item
+	* @return true if seleccted else otherwise
+	*/	
+	bool IsItemMarked( int aIndex ) const;
+	
+    /**
+	 * Function for setting the item Marked or Unmarked. For mark and
+	 * unmark operations, index of item should be provided.
+	 * 
+	 * @param aType Type of marking operation to be performed. 
+	 * @param aItemsIndex Indices of the items to be changed
+	 * @throw Invalid Argument, if type is specified as mark-all and unmark-all. 
+	 */ 
+    void SetMarkedIndex( MulWidgetDef::TMulWidgetMarkingType aType, int aIndex );
+	
+private: //New Method
+
+	/**
+	 * Remove visual Item data from map and update other keys for map
+	 * 
+	 * @param aPath Path of visual item in  tree
+	 * @param aIndex Index of visual item in path
+	 * @param aCount No of items to be removed
+	 */
+	void RemoveItemFromMap(const MulDataPath& aPath , int aIndex );
+
+	/**
+	 * Remove child visual Item from map
+	 * 
+	 * @param aPath Path of visual item in  tree
+	 * @param aIndex Index of visual item in path
+	 */	
+	//void RemoveChildItemsFromMap(MulDataPath aPath , int aIndex );
+
+	
+	/**
+	 * Update index in Map.
+	 * 
+	 * Once we remove any item from tree.
+	 * Index of other items will be changed so the path that points
+	 * to Data of Item. We now need to update path that to item.
+	 * 
+	 * @param aMap Map wich need to be updated
+	 * @param aIndex Index from item removed
+	 */
+	template <typename T> void UpdataPathInMapAfterRemove( std::map<int,T >& aMap, int aIndex, int aCount );
+
+	/**
+	 * Update Path in Map.
+	 * 
+	 * Update the path (modify thh depth) for the child items after remove.
+	 * 
+	 * @param aMap Map wich need to be updated
+	 * @param aParentNode, parent node
+	 * @param aOldPath Old path
+	 * @param aNewPath New path	 
+	 * @param aIndex, index of the node in that parent node
+	 */							 						 
+//	template <typename T> void UpdataChildDepthInMap( 
+//											std::map<MulDataPath,T,TCompPath>& aMap,
+//											MulTreeNode* aParentNode,MulDataPath& aOldPath,
+//								 			MulDataPath& aNewPath,int aIndex);	
+	/**
+	 * Update index in Map.
+	 * 
+	 * Once we insert any item from tree.
+	 * Index of other items will be changed so the path that points
+	 * to Data of Item. We now need to update path that to item.
+	 * 
+	 * @param aMap Map wich need to be updated
+	 * @param aIndex Index at which new item inserted
+	 */
+	template <typename T> void UpdataPathInMapAfterInsert( std::map<int,T >& aMap, int aIndex, int aCount );
+																								
+	
+private: //data
+		
+    int                         mTotalCount; // total no of items in cache
+	MulVisualItemMap 		    mVisualItemMap; //store visual item in map using path as key	
+	MulVectorAdaptor<int>       mSelectionVector;//store maked indices to ,used to return marking information to client
+	MulSelectionMap 			mSelectionMap; //store marking information using path as key
+  };
+  
+} // namespace Alf
+
+#endif //MULCACHEMANAGER_H
+    
+//End of file