diff -r 4ea6f81c838a -r 0e9bb658ef58 mulwidgets/muldatamodel/inc/mulmodelimpl.h --- /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 + +#include +#include +#include + +#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 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& aItemsIndex, + const MulDataPath& aPath = MulDataPath() ); + + void SetMarkedIndices( + MulWidgetDef::TMulWidgetMarkingType aType = MulWidgetDef::EMulMarkAll ); + + const std::vector& 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& 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 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 mDataWindow; //own + std::auto_ptr mDataWindow; //own + std::auto_ptr mModelHelper; //own + std::vector mObserverArray; + }; + + } // namespace Alf + +#endif //MULMODELIMPL_H + +//End of file +