--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/muldatamodel/inc/mulmodelimpl.h Thu Dec 17 08:56:02 2009 +0200
@@ -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
+