mulwidgets/muldatamodel/inc/mulmodelimpl.h
branchRCL_3
changeset 26 0e9bb658ef58
parent 0 e83bab7cf002
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulmodelimpl.h	Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,258 @@
+/*
+* 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:  Implementation of model interface
+ *
+*/
+
+
+#ifndef MULMODELIMPL_H
+#define MULMODELIMPL_H
+
+//Includes
+#include <mul/imulmodel.h>
+
+#include <osn/ustring.h>
+#include <memory>
+#include <vector>
+
+#include "mul/imulmodelaccessor.h"
+#include "imulmodelobserver.h"
+
+namespace osncore
+    {
+    class UString;
+    }
+    
+using namespace osncore;
+
+namespace Alf
+    {
+
+//Forward Declaration
+
+class MulDataWindow;
+class MulPushMode;
+class MulPageDataWindow;
+
+/**
+ *  Implementation class for Data model.
+ *  @lib 
+ */
+class MulModelImpl : public IMulModel,
+					 public IMulModelAccessor
+    {
+    
+public:
+	
+	/**
+	 * C++ constructor.
+	 */
+	OSN_IMPORT MulModelImpl();
+	
+	/**
+	 * Destructor.
+	 */
+	OSN_IMPORT virtual ~MulModelImpl();
+    
+public: //from IMulModel
+   	
+	void Insert(int aIndex, int aCount, 
+                const MulDataPath& aPath = MulDataPath());
+	
+    void Remove( int aIndex, int aCount, 
+    			 const MulDataPath& aPath = MulDataPath() );
+	
+	void Update( int aIndex, int aCount, 
+				 const MulDataPath& aPath = MulDataPath() );
+	
+	void Refresh( int aCount, const MulDataPath& aPath = MulDataPath() );
+	     
+	void SetData( int aIndex, std::auto_ptr<MulVisualItem> aVisualItem, 
+                  const MulDataPath& aPath = MulDataPath() );
+	
+	const MulVisualItem* Data( int aIndex, 
+	                    	   const MulDataPath& aPath = MulDataPath() ) const;
+
+	int Count( const MulDataPath& aPath = MulDataPath() ) const; 
+
+	void SetDataProvider( const IMulModelProvider& aDataProvider );
+
+	void SetTemplate( mulwidget::TLogicalTemplate aTemplateId );
+
+	void SetTemplate( int aItemIndex, mulwidget::TLogicalTemplate aTemplateId, 
+	                  const MulDataPath& aPath = MulDataPath() );
+
+	void SetDataWindow( int aSize );
+
+	int DataWindow( ) const;        
+
+	void SetHighlight( int aItemIndex, const MulDataPath& aPath = MulDataPath() ); 
+
+	int Highlight() ;
+
+	int Highlight( MulDataPath& aPath );     
+
+	void SetMarkedIndices( MulWidgetDef::TMulWidgetMarkingType aType ,
+						   const std::vector<int>& aItemsIndex,
+						   const MulDataPath& aPath = MulDataPath() );
+
+	void SetMarkedIndices(
+			MulWidgetDef::TMulWidgetMarkingType aType = MulWidgetDef::EMulMarkAll );
+
+	const std::vector<int>& MarkedIndices( const MulDataPath& aPath = MulDataPath() );
+
+public: //from IMulModelBase
+	    
+	IMulModelAccessor* Accessor(); 
+
+public: //from IMulModelAccessor
+	 
+	void SetHighlight( int aItemIndex );
+	
+	void ScrollWindow( int aItemIndex );
+	 		      	
+	int CurrentItemCount();
+	 	
+	void SetVisibleWindow( int aWindowSize, int aPageTopIndex = -1 );
+		 		
+	int RelativeIndex( int aAbsoluteIndex ) const;
+ 	 
+	int TopWindowOffset() const;
+	
+	int BottomWindowOffset() const;
+	
+	int TopOffset() const;
+			
+	int BottomOffset() const;
+	
+	int RearTopOffset() const;
+	
+	int RearBottomOffset() const;
+	
+	bool IsItemMarked( int aIndex ); 
+	
+	const MulVisualItem& Item( int aAbsoluteIndex );
+
+    int AbsoluteIndex( int aRelativeIndex );
+    
+    void SetMarkedIndex( MulWidgetDef::TMulWidgetMarkingType aType, int aIndex );
+    
+    bool IsLoopingOn();
+	
+    void AddModelObserver( IMulModelObserver* aObserver );
+    
+    void RemoveModelObserver( IMulModelObserver* aObserver );
+    
+    mulwidget::TLogicalTemplate Template();
+    
+private: //from IAlfModel
+
+	void addModelChangeObserver( IAlfModelChangeObserver& aObserver );
+	
+	void removeModelChangeObserver( IAlfModelChangeObserver& aObserver );
+	
+	void setData( IAlfVariantType* aData );
+	
+	void updateData(int aNumContainerIndices,int* aContainerIndices, IAlfVariantType* aData );
+	
+	void addData(int aNumContainerIndices,int* aContainerIndices, IAlfVariantType* aData );
+	
+	void removeData(int aNumContainerIndices,int* aContainerIndices );
+	  
+	void executeOperations(AlfPtrVector<AlfModelOperation>&  aOperationsArray);
+	      
+	void executeOperation(AlfModelOperation* aOperation); 
+	
+	void clearModel(); 
+	
+	IAlfVariantType* data() const;
+	
+private: // from base class MAlfInterfaceBase
+
+    /**
+     * Getter for interfaces provided by the list model.
+     *
+     * @param aType A descriptor to identify the type of the queried interface.
+     * @return The queried interface, or NULL if the interface is not
+     *         supported or available.
+     */
+    virtual IAlfInterfaceBase* makeInterface( const IfId& aType );
+    
+public: //new method
+
+	/**
+	 * When ever data window update data window, it will use this method to notify
+	 * Data model to update data window and update alf model
+	 */
+	void DataWindowUpdated();
+    			
+private: //New method
+	
+	/**
+	 * Create Update event for selection change to notify Widget
+	 * for selection change. Widget need to use IsItemMarked API for checking 
+	 * whether item is marked or unmarked.
+	 * 
+	 * @param aAbsoluteIndex Absolute index
+	 */
+	void CreateMarkingEvent(int aAbsoluteIndex);
+		
+	/**
+	 * Notify observer about state changed
+	 * 
+	 * @param aState Highlight or making changed
+	 * @param aData Index of new highlight or Index of marked or unmarked item.
+	 *				( Item is marked or not should be checked using IMulModelAccessor interface)	  
+	 */
+	void NotifyStateChange( IMulModelObserver::TMulChangedState aState, std::auto_ptr<IMulVariantType> aData);
+	
+	/**
+     * Notify observer about data change event
+     * 
+     * @param aState Event to notify
+     * @param aStartIndex Start index of.
+     * @param aCount No of item affected      
+     */
+	void NotifyDataChange( IMulModelObserver::TMulChangedState aState, int aStartIndex, int aCount );
+	
+	/**
+     * Notify observer about data change event
+     * 
+     * @param aState Event to notify
+     * @param aIndex Start index of.
+     */
+    void NotifyDataChange( IMulModelObserver::TMulChangedState aState, int aIndex );
+    
+    /**
+     * Notify observer about template change
+     * 
+     * @param aIndex index of item.
+     * @param aTamplateId changed template
+     */
+    void NotifyTemplateChange( int aIndex, mulwidget::TLogicalTemplate aTamplateId );
+				
+private: //data
+		
+	//std::auto_ptr<MulDataWindow>			mDataWindow; //own
+	std::auto_ptr<MulPageDataWindow>		mDataWindow; //own
+	std::auto_ptr<MulPushMode> 		        mModelHelper; //own
+	std::vector<IMulModelObserver*>			mObserverArray;
+    };
+    
+    } // namespace Alf
+
+#endif //MULMODELIMPL_H
+    
+//End of file
+